Информационная система обучения по курсу "Компьютерные сети"
p align="left">Для работы информационной системы не требуется никакого специализированного программного обеспечения. 2.2 Проектирование ИСПосле определения концепции проекта необходимо смоделировать основные структурные компоненты, их взаимосвязи и процессы, происходящие в нашей информационной системе. Для этого предназначено большое количество диаграмм, которые позволяют наглядно в соответствии со стандартами построения информационных систем изобразить необходимые компоненты системы. Рассмотрим несколько базовых диаграмм: 1. Диаграмма прецедентов отражает взаимодействие вариантов использования системы и действующих лиц. Она отражает требования к системе с точки зрения пользователя. Помогает провести анализ требований, который подразумевает выделение процессов и требований и их формулировку. Заказчиком формулируются требования к информационной системе, разработчик изучает автоматизируемый процесс, при этом выявляет основные характеристики будущей системы - составляет спецификации. Рис. 4 Диаграмма прецедентов 2. Диаграмма компонентов показывает, как выглядит модель на физическом уровне. На ней изображаются компоненты программного обеспечения системы и связи между ними. Рис. 5. Диаграмма компонентов 2.3 Разработка структуры базы данныхБаза данных информационной системы обучения представляет собой набор текстовых файлов, в которых содержится структурированная информация по списку пользователей, их результатах обучения, темам курса обучения, тестовому набору. 2.4 Разработка интерфейса обучающего курсаТеоретический материал курса представлен в виде гипертекстовых страниц - наиболее удобной форме представления электронных ресурсов. Все главы курса имеют единый стиль оформления и строятся по шаблону: оглавление темы в виде гиперссылок и сам текст главы с большим количеством иллюстраций, контрольные вопросы в конце каждой темы. Рис. 6. Пример страницы курса Разработка web-приложения велась с помощью следующих средств: язык гипертекстовой разметки HTML, каскадные таблицы стилей CSS. Для создания гипертекстовых страниц и элементов каскадных таблиц стилей использовался редактор Macromedia Dreamveawer. Гипертекстовый курс встраивается в среду Delphi с помощью специализированного компонента - веб-браузера. Рис. 7. Компонент «веб-браузер» среды Delphi Интерфейс тестового комплекса полностью реализован на Delphi. Материал для тестов берется из специальной базы - текстовых файлов. Варианты тестовых наборов генерируются случайным образом. Тестовый материал представлен в виде вопросов с четырьмя вариантами ответа, из которых один правильный. Рис. 8. Тестовый комплекс системы После прохождения теста осуществляется вывод результатов. Рис. 9. Страница результатов теста В зависимости от результатов обучающийся может перейти на новый уровень обучения, то есть ему станет доступно изучение новой темы, или, в случае неудовлетворительного результата, продолжит изучение существующей. 2.5 Разработка системы управления курсомПри реализации информационной системы обучения мы придерживались следующих принципов: · использовалась итерационная (спиральная) модель разработки, т.к. полное завершение работ на каждом из этапов жизненного цикла не обязательно; · в процессе разработки информационной системы было необходимо тесное взаимодействие с заказчиком и пользователями системы; · использовалась объектная модель разработки программного обеспечения ИС; · разработка велась с помощью средств визуальной разработки приложений; · тестирование и развитие проекта осуществлялось одновременно с разработкой. В ходе проектирования и разработки информационной системы была применена методология RAD. Методология разработки информационных систем, основанная на использовании средств быстрой разработки приложений, получила в последнее время широкое распространение и приобрела название методологии быстрой разработки приложений - RAD (Rapid Application Development). Данная методология охватывает все этапы жизненного цикла современных информационных систем. RAD - это комплекс специальных инструментальных средств быстрой разработки прикладных информационных систем, позволяющих оперировать с определенным набором графических объектов, функционально отображающих отдельные информационные компоненты приложений. Под методологией быстрой разработки приложений обычно понимается процесс разработки информационных систем, основанный на трех основных элементах: · небольшой команде программистов (обычно от 2 до 10 человек); · тщательно проработанный производственный график работ, рассчитанный на сравнительно короткий срок разработки (от 2 до 6 мес.); · итерационная модель разработки, основанная на тесном взаимодействии с заказчиком - по мере выполнения проекта разработчики уточняют и реализуют в продукте требования, выдвигаемые заказчиком. Основные принципы методологии RAD можно свести к следующему: · используется итерационная (спиральная) модель разработки; · полное завершение работ на каждом из этапов жизненного цикла не обязательно; · в процессе разработки информационной системы необходимо тесное взаимодействие с заказчиком и будущими пользователями; · необходимо применение CASE-средств и средств быстрой разработки приложений; · необходимо применение средств управления конфигурацией, облегчающих внесение изменений в проект и сопровождение готовой системы; · необходимо использование прототипов, позволяющее полнее выяснить и реализовать потребности конечного пользователя; · тестирование и развитие проекта осуществляются одновременно с разработкой; · разработка ведется немногочисленной и хорошо управляемой командой профессионалов; · необходимы грамотное руководство разработкой системы, четкое планирование и контроль выполнения работ. CASE-технологии (Computer Aided Software/System Engineering) охватывают обширную область поддержки многочисленных технологий проектирования информационных систем: от простых средств анализа и документирования до полномасштабных средств автоматизации, покрывающих весь жизненный цикл программного обеспечения. Обычно к CASE-средствам относят любое программное средство, автоматизирующее ту или иную совокупность процессов жизненного цикла и обладающее следующими основными характерными особенностями: · использование специальным образом организованного хранилища проектных метаданных (репозитория); · мощные графические средства для описания и документирования информационных систем, обеспечивающие удобный интерфейс с разработчиком и развивающие его творческие возможности; · интеграция отдельных компонент CASE-средств, обеспечивающая управляемость процессом разработки ИС; Таким образом, исходя из особенностей данных технологий наиболее широко и эффективно в обучении возможно применять именно CASE-средства. Важным фактором, влияющим на успех внедрения подобных систем, является методологический системный подход к их проектированию и реализации. В основе такого подхода лежит использование CASE-технологий, позволяющих выполнять моделирование информационной системы на всех фазах ее разработки: на стадии структурного анализа, проектирования и реализации. В качестве основного CASE-средства для разработки нашей системы была выбрана среда визуальной разработки Borland Delphi. Основными преимуществами данной среды являются: · Быстрота и легкость разработки приложения. · Высокая производительность разработанного приложения · Низкие требования разработанного приложения к ресурсам компьютера. · Наращиваемость за счет встраивания новых компонент и инструментов в среду Delphi. · Возможность разработки новых компонент и инструментов собственными средствами Delphi (существующие компоненты и инструменты доступны в исходных текстах) · Удобное выстраивание иерархии объектов и тем самым структуры системы Теперь рассмотрим структуру нашей системы управления курсом: 96 Рис. 10. Структура программного обеспечения информационной системы управления обучением Главная страница представляет собой окно с названием системы и полями ввода логина и пароля для авторизации в системе и работы под своим профилем. Рис. 11. Заголовочное окно информационной системы Далее мы попадаем в окно, содержащее краткую информацию о курсе «Компьютерные сети» и выбор тем курса для изучения. Причем в данном окне отображаются только те темы, которые доступны конкретному пользователю в результате прохождения контрольного тестирования. Например, если пользователь зашел в информационную систему первый раз, то в списке тем будет лишь первая. Рис. 12. Окно выбора тем курса Также в данном окне можно посмотреть свою статистику обучения, а именно: количество баллов, полученных в результате контрольного тестирования по каждой теме, а также статистику группы пользователей в сравнении со своей, где отображается время нахождения внутри курса, количество пройденных тем и общее количество набранных баллов. После выбора нужной темы и нажатия на кнопку «Загрузить» мы попадаем в режим обучения. Рис. 13. Окно обучения по выбранной теме. В данное окно встроен браузер, который позволяет достаточно просто и удобно отображать нужную информацию для чтения. Кнопки, расположенные на панели инструментов, позволяют переместиться назад вперед по тексту, распечатать текст и перейти на страницу контроля знаний, которая рассмотрена выше. В системе существует также администраторский раздел, который открывается при наборе на главной форме администраторского логина и пароля. Рис. 14. Окно с настройками системы Здесь имеется инструмент для управления пользователями, а также списком тем курса. 2.7 Тестирование ИСТестирование осуществлялось одновременно с разработкой системы (согласно методологии RAD). Тестирование информационной системы предполагает проверку корректности работы приложения при введении данных. Тестирование на допустимость вводимых значений подразумевает проверку корректности вводимых данных. Например, при запуске системы происходит проверка вводимого и имеющегося в системе логина и пароля регистрации пользователя. Таким образом, вследствие применения методологии RAD конфигурационное управление и управление изменениями ИС достаточно легко осуществимо. Это может способствовать модернизации и развитию информационной системы обучения. Заключение В результате выполнения дипломной работы была создана информационная система обучения по курсу «Компьютерные сети». Для создания программного обеспечения ИС использовалась среда визуального проектирования Delphi, сам курс реализован с помощью технологий гипертекста. Информационная система включает в себя средства для управления курсом (администраторский раздел), средства для обучения и контроля по курсу, а также средства отображения статистической информации. Таким образом, основная цель дипломной работы достигнута и данная система готова к использованию и последующим модернизациям в современных условиях в РГГУ. Список использованной литературы 1. Алиев В.С. Информационные технологии и системы финансового менеджмента: учеб. пособие. - М.: «ФОРУМ»: ИНФРА-М, 2007. - 320 с. 2. Гук М. Аппаратные средства локальных сетей. Энциклопедия. - Спб: Издательство «Питер», 2000 - 576 c. 3. Долятовский В.А., Долятовская В.Н. Исследование систем управления: Учебное-практическое пособие. - Москва: ИКЦ «МарТ», 2003 - 256 с. 4. Емельянова Н.З., Партыка Т.Л., Попов И.И. Основы построения автоматизированных информационных систем: Учебное пособие. - М: ФОРУМ: ИНФОРМА-М, 2007 - 416 с. 5. Колисниченко Д.Н. Сделай сам компьютерную сеть: монтаж, настройка, обслуживание - Спб.: Наука и Техника, 2004 - 400 с. 6. Компьютерные сети. Принципы, технологии, протоколы. В.Г. Олифер, Н.А. Олифер. - Спб.: Питер, 2001. - 672 с. 7. Компьютерные сети. 4-е изд./Э. Таненбаум - Спб.: Питер, 2003 - 992 с. 8. Новиков Ю.В., Кондратенко С.В. Локальные сети: архитектура, алгоритмы, проектирование. М.: ЭИОТ, 2000 - 312 с. 9. Новые педагогические и информационные технологии в системе образования: Учеб. пособие для студ. пед. вузов и системы повыш. квалиф. пед.кадров/ Под ред. Е.С. Полат. - М.: Издательский центр «Академия», 2001.- 272 с. 10. Пантер М., Синипер Р.Б. Проектирование и внедрение компьютерных сетей. Учебный курс. - 2-е изд., перераб. и доп: Пер. с англ. - Спб.: БХВ- Петербург, 2004. - 752 с. 11. Саак А.Э, Пахомов Е.В., Тюшняков В.Н. Информационные технологии управления: Учебник для вузов. - Спб.: Питер, 2005. - 320 с. 12. Семакин И.Г. Информационные системы и модели. Элективный курс: Учебный пособие / И.Г. Семакин, Е.К. Хеннер. - М.: БИНОМ. Лаборатория знаний, 2005. - 303 с. 13. Соловов А.В. Дидактика и технология электронного обучения в системе КАДИС // "Индустрия образования". 6. - М.: МГИУ, 2002, - с. 54-64. 14. Хортон У., Хортон К. Электронное обучение: инструменты и технологии / Пер. с англ. - М.: КУДИЦ-ОБРАЗ, 2005. - 640 с. Приложение Исходные коды модулей информационной системы 1. Модуль начальной страницы unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg; type Tzagl = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit1: TEdit; Edit2: TEdit; Button2: TButton; Image1: TImage; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var agl: Tzagl; fil,fil1:textfile; implementation uses Unit19, Unit44, tester_, Unit4; {$R *.dfm} procedure Tzagl.Button1Click(Sender: TObject); var s,s1,s2,log,pas:string;i:integer;k:boolean; begin s:=''; reset(fil); while not eof(fil) do begin readln(fil,s2); s:=s+s2; end; closefile(fil); k:=true; s1:=''; for i:=1 to length(s) do begin if (s[i] = '*') then begin log:=s1; s1:=''; end; if (s[i] = '&') then begin pas:=s1; if (edit1.text=log)and(edit2.Text=pas) then begin k:=false; ElektKursInf.show; zagl.Hide; end; s1:=''; end; if (s[i] <> '&')and(s[i] <> '*') then s1:=s1+s[i]; end; if (edit1.Text='admin')and(edit2.Text='pasw') then begin Form4.Show; zagl.Hide; end else if k then showmessage('Введите верные логин и пароль'); end; procedure Tzagl.Button2Click(Sender: TObject); var s3,s4:string; begin if (edit1.text<>'')and(edit2.Text<>'') then begin append(fil); s3:=edit1.text+'*'+edit2.text+'&'; writeln(fil,s3); closefile(fil); append(fil1); s4:=edit1.text+'*0&0$0#'; writeln(fil1,s4); closefile(fil1); showmessage('Вы успешно зарегистрированы!') end else showmessage('Введите логин и пароль!') end; procedure Tzagl.FormCreate(Sender: TObject); begin assignfile(fil,'bd\user.txt'); assignfile(fil1,'bd\result.txt'); end; end. 2. Модуль выбора темы курса unit Unit19; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, DBCtrls, ExtCtrls, Db, Provider, DBClient, MConnect; type TElektKursInf = class(TForm) Panel2: TPanel; Label1: TLabel; Label2: TLabel; Button1: TButton; ListBox1: TListBox; ListBox2: TListBox; Memo1: TMemo; Label3: TLabel; Button2: TButton; Button3: TButton; ListBox3: TListBox; procedure Exit1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var ElektKursInf: TElektKursInf; fil1,fil:textfile; implementation uses Unit44, Unit1, Unit3, Unit5; {$R *.DFM} procedure TElektKursInf.Exit1Click(Sender: TObject); begin ElektKursInf.Hide; zagl.close; end; procedure TElektKursInf.FormClose(Sender: TObject; var Action: TCloseAction); begin ElektKursInf.Hide; zagl.Close; end; procedure TElektKursInf.FormShow(Sender: TObject); var i,j:integer;s0,s,s2,k:string; begin assignfile(fil,'bd\path1.txt'); reset(fil); s:=''; while not eof(fil) do begin readln(fil,s); s0:=s; end; closefile(fil); assignfile(fil,'bd\path.txt'); reset(fil); Listbox1.Clear; s:=''; while not eof(fil) do begin readln(fil,s); Listbox1.Items.Add(s0+s); end; closefile(fil); assignfile(fil,'bd\themes.txt'); reset(fil); Listbox3.Clear; s:=''; while not eof(fil) do begin readln(fil,s); Listbox3.Items.Add(s); end; closefile(fil); Label3.Caption:='Здравствуйте, '+zagl.Edit1.Text+'. Вы работаете с учебным курсом "Компьютерные сети"'; //ComboBox1.ItemIndex := 0; s:=''; assignfile(fil1,'bd\result.txt'); reset(fil1); while not eof(fil1) do begin readln(fil1,s2); for i:=1 to length(s2) do begin if (s2[i] = '*') then begin if s=zagl.Edit1.Text then begin j:=i+1; while s2[j]<>'#' do begin if s2[j]='&' then k:=s2[j+1]; j:=j+1; end; end; end; s:=s+s2[i]; end; s:=''; end; closefile(fil1); {showmessage(k);} if k='1' then begin listbox2.items.Add(listbox3.Items.Strings[1]); end; if k='2' then begin listbox2.items.Add(listbox3.Items.Strings[1]); listbox2.items.Add(listbox3.Items.Strings[2]); end; if k='3' then begin listbox2.items.Add(listbox3.Items.Strings[1]); listbox2.items.Add(listbox3.Items.Strings[2]); listbox2.items.Add(listbox3.Items.Strings[3]); end; if k='4' then begin listbox2.items.Add(listbox3.Items.Strings[1]); listbox2.items.Add(listbox3.Items.Strings[2]); listbox2.items.Add(listbox3.Items.Strings[3]); listbox2.items.Add(listbox3.Items.Strings[4]); end; if k='5' then begin listbox2.items.Add(listbox3.Items.Strings[1]); listbox2.items.Add(listbox3.Items.Strings[2]); listbox2.items.Add(listbox3.Items.Strings[3]); listbox2.items.Add(listbox3.Items.Strings[4]); listbox2.items.Add(listbox3.Items.Strings[5]); end; if k='6' then begin listbox2.items.Add(listbox3.Items.Strings[1]); listbox2.items.Add(listbox3.Items.Strings[2]); listbox2.items.Add(listbox3.Items.Strings[3]); listbox2.items.Add(listbox3.Items.Strings[4]); listbox2.items.Add(listbox3.Items.Strings[5]); listbox2.items.Add(listbox3.Items.Strings[6]); end; if k='7' then begin listbox2.items.Add(listbox3.Items.Strings[1]); listbox2.items.Add(listbox3.Items.Strings[2]); listbox2.items.Add(listbox3.Items.Strings[3]); listbox2.items.Add(listbox3.Items.Strings[4]); listbox2.items.Add(listbox3.Items.Strings[5]); listbox2.items.Add(listbox3.Items.Strings[6]); listbox2.items.Add(listbox3.Items.Strings[7]); end; listbox2.ItemIndex:=0; end; procedure TElektKursInf.ComboBox1Change(Sender: TObject); begin {with ClientElektKurs do begin while not EOF do begin ListBox2.items.add(FieldByName('Kurs').AsString); next; end; end;} end; procedure TElektKursInf.Button1Click(Sender: TObject); begin ListBox1.ItemIndex:=ListBox2.ItemIndex; Form37.WebBrowser1.Navigate(ListBox1.Items.Strings[ListBox1.ItemIndex]); //Form37.ComboBox1.Text:=ListBox1.Items.Strings[ListBox1.ItemIndex]; Form37.ToolButton2.Enabled:=false; Form37.ToolButton3.Enabled:=false; Form37.Show; Button1.Enabled:=false; Label3.Caption:=''; //ElektKursInf.Hide; end; procedure TElektKursInf.Button2Click(Sender: TObject); begin Form3.Show; end; procedure TElektKursInf.Button3Click(Sender: TObject); begin Form5.Show; end; end. 3. Модули статистики по группам и индивидуально unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm3 = class(TForm) StringGrid1: TStringGrid; procedure FormShow(Sender: TObject); procedure StringGrid1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; s,s2:string; fil1:textfile; i,j:integer; implementation {$R *.dfm} procedure TForm3.FormShow(Sender: TObject); var s0:double; begin StringGrid1.Cells[0,0]:='Логин'; StringGrid1.Cells[1,0]:='Время обучения(мин.)'; StringGrid1.Cells[2,0]:='Количество пройденных тем'; StringGrid1.Cells[3,0]:='Количество баллов';assignfile(fil1,'bd\result.txt'); reset(fil1); s:=''; i:=1; while not eof(fil1) do begin readln(fil1,s2); for j:=1 to length(s2) do begin if s2[j]='*' then begin StringGrid1.Cells[0,i]:=s; s:=''; continue; end; if s2[j]='&' then begin s0:=strtofloat(s)/60000; StringGrid1.Cells[1,i]:=floattostr(s0); s:=''; continue; end; if s2[j]='$' then begin StringGrid1.Cells[2,i]:=s; s:=''; continue; end; if s2[j]='#' then begin StringGrid1.Cells[3,i]:=s; s:=''; continue; end; s:=s+s2[j]; end; i:=i+1; StringGrid1.RowCount:=i; end; closefile(fil1); end; end. unit Unit5; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids; type TForm5 = class(TForm) StringGrid1: TStringGrid; procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form5: TForm5; s,s1,s2,s3:string; fil1:textfile; i,j:integer; implementation uses Unit1; {$R *.dfm} procedure TForm5.FormShow(Sender: TObject); begin StringGrid1.Cells[0,0]:='1 тема'; StringGrid1.Cells[1,0]:='2 тема'; StringGrid1.Cells[2,0]:='3 тема'; StringGrid1.Cells[3,0]:='4 тема'; StringGrid1.Cells[4,0]:='5 тема'; StringGrid1.Cells[5,0]:='6 тема'; StringGrid1.Cells[6,0]:='7 тема'; assignfile(fil1,'bd\result1.txt'); reset(fil1); s:=''; s3:=''; while not eof(fil1) do begin readln(fil1,s2); s:=s+s2; end; for j:=1 to length(s) do begin if s[j]='*' then begin if s1=zagl.Edit1.Text then begin i:=j+1; while s[i]<>'*' do begin if s[i]='!' then begin StringGrid1.Cells[0,1]:=s3; s3:=''; i:=i+1; continue; end; if s[i]='$' then begin StringGrid1.Cells[1,1]:=s3; s3:=''; i:=i+1; continue; end; if s[i]='#' then begin StringGrid1.Cells[2,1]:=s3; s3:=''; i:=i+1; continue; end; if s[i]='%' then begin StringGrid1.Cells[3,1]:=s3; s3:=''; i:=i+1; continue; end; if s[i]='^' then begin StringGrid1.Cells[4,1]:=s3; s3:=''; i:=i+1; continue; end; if s[i]='@' then begin StringGrid1.Cells[5,1]:=s3; s3:=''; i:=i+1; continue; end; if s[i]='~' then begin StringGrid1.Cells[6,1]:=s3; s3:=''; i:=i+1; continue; end; s3:=s3+s[i]; i:=i+1; end; end; s1:=''; end; s1:=s1+s[j]; if s[j]='~' then s1:=''; end; closefile(fil1); end; end. 4. Модуль обучения по курсу unit Unit44; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, ToolWin, ComCtrls, StdCtrls, ExtDlgs, ExtCtrls, Menus; const HTMLID_FIND = 1; HTMLID_VIEWSOURCE = 2; HTMLID_OPTIONS = 3; type TForm37 = class(TForm) WebBrowser1: TWebBrowser; StatusBar1: TStatusBar; ProgressBar1: TProgressBar; OpenDialog1: TOpenDialog; CoolBar1: TCoolBar; ToolBar1: TToolBar; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton6: TToolButton; ComboBox1: TComboBox; ToolButton8: TToolButton; ToolButton1: TToolButton; Timer1: TTimer; PopupMenu1: TPopupMenu; N1: TMenuItem; procedure ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ToolButton1Click(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure ToolButton3Click(Sender: TObject); procedure ToolButton4Click(Sender: TObject); procedure ToolButton5Click(Sender: TObject); procedure ToolButton6Click(Sender: TObject); procedure WebBrowser1StatusTextChange(Sender: TObject; const Text: WideString); procedure WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ToolButton7Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure WebBrowser1BeforeNavigate2(Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); procedure WebBrowser1NavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); procedure ToolButton8Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure N1Click(Sender: TObject); private { Private declarations } public {procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT); overload;} { Public declarations } end; var Form37: TForm37; z,time1:integer;m:string; implementation uses Unit19, kontr; {$R *.DFM} procedure TForm37.ComboBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin {if Key = VK_RETURN then WebBrowser1.Navigate(ComboBox1.Text);} end; procedure TForm37.ToolButton1Click(Sender: TObject); begin { if OpenDialog1.Execute then begin WebBrowser1.Navigate(OpenDialog1.FileName); ComboBox1.Text := OpenDialog1.FileName; end;} timer1.Enabled:=false; close; end; procedure TForm37.ToolButton2Click(Sender: TObject); begin z:=z+1; WebBrowser1.GoBack; ToolButton3.Enabled:=true; end; procedure TForm37.ToolButton3Click(Sender: TObject); begin z:=z-1; if z>-1 then WebBrowser1.GoForward else ToolButton3.Enabled:=false; end; procedure TForm37.ToolButton4Click(Sender: TObject); begin WebBrowser1.Stop; end; procedure TForm37.ToolButton5Click(Sender: TObject); begin WebBrowser1.Refresh; end; procedure TForm37.ToolButton6Click(Sender: TObject); var PostData, Headers: OLEvariant; begin WebBrowser1.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DODEFAULT, PostData, Headers); end; procedure TForm37.WebBrowser1StatusTextChange(Sender: TObject; const Text: WideString); begin StatusBar1.SimpleText := Text; end; procedure TForm37.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer); begin ProgressBar1.Max := ProgressMax; ProgressBar1.Position := Progress; end; procedure TForm37.FormClose(Sender: TObject; var Action: TCloseAction); begin timer1.Enabled:=false; Form37.Hide; ElektKursInf.Show; ElektKursInf.Button1.Enabled:=true; end; procedure TForm37.ToolButton7Click(Sender: TObject); const CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}'; {var CmdTarget : IOleCommandTarget; vaIn, vaOut: OleVariant; PtrGUID: PGUID;} begin {New(PtrGUID); PtrGUID^ := CGID_WebBrowser; if WebBrowser1.Document <> nil then try WebBrowser1.Document.QueryInterface(IOleCommandTarget, CmdTarget); if CmdTarget <> nil then try CmdTarget.Exec( PtrGUID, HTMLID_FIND, 0, vaIn, vaOut); finally CmdTarget._Release; end; except // nothing end; Dispose(PtrGUID);} end; procedure TForm37.FormShow(Sender: TObject); begin time1:=0; timer1.Enabled:=true; Form37.Caption:=ElektKursInf.ListBox2.Items.Strings[ElektKursInf.ListBox2.ItemIndex]; end; procedure TForm37.WebBrowser1BeforeNavigate2(Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); var l:integer; begin end; procedure TForm37.WebBrowser1NavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin Combobox1.Text:=WebBrowser1.LocationURL; if (ElektKursInf.ListBox1.Items.Strings[ElektKursInf.ListBox1.ItemIndex]<>WebBrowser1.LocationURL)then ToolButton2.Enabled:=true else ToolButton2.Enabled:=false; end; procedure TForm37.ToolButton8Click(Sender: TObject); begin Form2.Show; Form37.Hide; end; procedure TForm37.Timer1Timer(Sender: TObject); begin time1:=time1+timer1.interval; end; procedure TForm37.N1Click(Sender: TObject); begin close; end; end. 5. Модуль контрольного тестирования unit tester_; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, jpeg, Gauges; type TForm1 = class(TForm) // вопрос Label5: TLabel; // альтернативные ответы Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; // радиокнопки выбора ответа RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; RadioButton4: TRadioButton; Image1: TImage; // область вывода иллюстрации Button1: TButton; Panel1: TPanel; RadioButton5: TRadioButton; Gauge1: TGauge; Timer1: TTimer; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure RadioButtonClick(Sender: TObject); // Эти объявления вставлены сюда вручную procedure Info; procedure VoprosToScr; procedure ShowPicture; // выводит иллюстрацию procedure ResetForm; // "очистка" формы перед выводом очередного вопроса procedure Itog; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); // результат тестирования private { Private declarations } public { Public declarations } end; var Form1: TForm1; // форма implementation uses Unit19, Unit1, Unit44; {$R *.DFM} const N_LEV=4; // четыре уровня оценки N_ANS=4; // четыре варианта ответов var f,fil1:TextFile; fn:string; // имя файла вопросов level:array[1..N_LEV] of integer; // сумма, соответствующая уровню mes:array[1..N_LEV] of string; // сообщение, соответствующее уровню score:array[1..N_ANS] of integer; // оценка за выбор ответа summa:integer; // набрано очков vopros:integer; // номер текущего вопроса otv:integer; // номер выбранного ответа // вывод информации о тесте procedure Tform1.Info; var s,buf:string; begin readln(f,s); Form1.Caption := s; buf:=''; repeat readln(f,s); if s[1] <> '.' then buf := buf +s + #13; until s[1] ='.'; Label5.caption:=buf; end; // прочитать информацию об оценках за тест Procedure GetLevel; var i:integer; buf:string; begin i:=1; repeat readln(f,buf); if buf[1] <> '.' then begin mes[i]:=buf; // сообщение readln(f,level[i]); // оценка i:=i+1; end; until buf[1]='.'; end; // масштабирование иллюстрации Procedure TForm1.ShowPicture; var w,h: integer; // максимально возможные размеры картинки begin // вычислить допустимые размеры картинки w:=ClientWidth-10; h:=ClientHeight - Panel1.Height -10 - Label5.Top - Label5.Height - 10; // вопросы if Label1.Caption <> '' then h:=h-Label1.Height-10; if Label2.Caption <> '' then h:=h-Label2.Height-10; if Label3.Caption <> '' then h:=h-Label3.Height-10; if Label4.Caption <> '' then h:=h-Label4.Height-10; // если размер картинки меньше w на h, // то она не масштабируется Image1.Top:=Form1.Label5.Top+Label5.Height+10; if Image1.Picture.Bitmap.Height > h then Image1.Height:=h else Image1.Height:= Image1.Picture.Height; if Image1.Picture.Bitmap.Width > w then Image1.Width:=w else Image1.Width:=Image1.Picture.Width; Image1.Visible := True; end; // вывести вопрос Procedure TForm1.VoprosToScr; var i:integer; s,buf:string; ifn:string; // файл иллюстрации begin vopros:=vopros+1; caption:='Вопрос ' + IntToStr(vopros); // прочитать вопрос buf:=''; repeat readln(f,s); if (s[1] <> '.') and (s[1] <> '\') then buf:=buf+s+' '; until (s[1] ='.') or (s[1] ='\'); Label5.caption:=buf; // вывести вопрос {Иллюстрацию прочитаем, но выведем только после того, как прочитаем альтернативные ответы и определим максимально возможный размер области формы, который можно использовать для ее вывода.} if s[1] <> '\' then Image1.Tag:=0 // к вопросу нет иллюстрации else // к вопросу есть иллюстрация begin Image1.Tag:=1; ifn:=copy(s,2,length(s)); try Image1.Picture.LoadFromFile(ifn); except on E:EFOpenError do Image1.Tag:=0; end; end; // Читаем варианты ответов i:=1; repeat buf:=''; repeat // читаем текст варианта ответа readln(f,s); if (s[1]<>'.') and (s[1] <> ',') then buf:=buf+s+' '; until (s[1]=',')or(s[1]='.'); // прочитан альтернативный ответ score[i]:= StrToInt(s[2]); case i of 1: Label1.caption:=buf; 2: Label2.caption:=buf; 3: Label3.caption:=buf; 4: Label4.caption:=buf; end; i:=i+1; until s[1]='.'; // здесь прочитана иллюстрация и альтернативные ответы // текст вопроса уже выведен if Image1.Tag =1 // есть иллюстрация к вопросу then ShowPicture; // вывод альтернативных ответов if Form1.Label1.Caption <> '' then begin if Form1.Image1.Tag =1 then Label1.top:=Image1.Top+Image1.Height+10 else Label1.top:=Label5.Top+Label5.Height+10; RadioButton1.top:=Label1.top; Label1.visible:=TRUE; RadioButton1.visible:=TRUE; end; if Form1.Label2.Caption <> '' then begin Label2.top:=Label1.top+ Label1.height+10; RadioButton2.top:=Label2.top; Label2.visible:=TRUE; RadioButton2.visible:=TRUE; end; if Form1.Label3.Caption <> '' then begin Label3.top:=Label2.top+ Label2.height+10; RadioButton3.top:=Label3.top; Label3.visible:=TRUE; RadioButton3.visible:=TRUE; end; if Form1.Label4.Caption <> '' then begin Label4.top:=Label3.top+ Label3.height+10; RadioButton4.top:=Label4.top; Label4.visible:=TRUE; RadioButton4.visible:=TRUE; end; end; Procedure TForm1.ResetForm; begin // сделать невидимыми все метки и радиокнопки Label1.Visible:=FALSE; Label1.caption:=''; Label1.width:=ClientWidth-Label1.left-5; RadioButton1.Visible:=FALSE; Label2.Visible:=FALSE; Label2.caption:=''; Label2.width:=ClientWidth-Label2.left-5; RadioButton2.Visible:=FALSE; Label3.Visible:=FALSE; Label3.caption:=''; Label3.width:=ClientWidth-Label3.left-5; RadioButton3.Visible:=FALSE; Label4.Visible:=FALSE; Label4.caption:=''; Label4.width:=ClientWidth-Label4.left-5; RadioButton4.Visible:=FALSE; Label5.width:=ClientWidth-Label5.left-5; Image1.Visible:=FALSE; end; // определение достигнутого уровня procedure TForm1.Itog; var i:integer; buf:string; begin buf:=''; buf:='Результаты тестирования'+ #13 +'Всего баллов: '+ IntToStr(summa); i:=1; while (summa < level[i]) and (i<N_LEV) do i:=i+1; buf:=buf+ #13+mes[i]; Label5.Top:=20; Label5.caption:=buf; end; procedure TForm1.FormActivate(Sender: TObject); begin end; // щелчок на кнопке Button1 procedure TForm1.Button1Click(Sender: TObject); var s,s2,s1,s3,s4,s5,s6,s7,k,tim1:string;i,j,l,l1,l2:integer;tim:integer; begin case Button1.tag of 0: begin Button1.caption:='Дальше'; Button1.tag:=1; RadioButton5.Checked:=TRUE; // вывод первого вопроса Timer1.Enabled:=true; Gauge1.Visible:=true; Button1.Enabled:=False; ResetForm; VoprosToScr; end; 1: begin // вывод остальных вопросов summa:=summa+score[otv]; RadioButton5.Checked:=TRUE; Button1.Enabled:=False; ResetForm; if not eof(f) then VoprosToScr else begin summa:=summa+score[otv]; closefile(f); Button1.caption:='Ok'; Form1.caption:='Результат'; Button1.tag:=2; Button1.Enabled:=TRUE; Itog; // вывести результат end; end; 2: begin // завершение работы Timer1.Enabled:=false; s:=''; assignfile(fil1,'bd\result.txt'); reset(fil1); s:=''; while not eof(fil1) do begin readln(fil1,s2); s:=s+s2; end; closefile(fil1); s1:=''; for i:=1 to length(s) do begin if (s[i] = '*') then begin if s1=zagl.Edit1.Text then begin j:=i+1; s3:=''; while s[j]<>'#' do begin if s[j]='&' then begin tim:=time1+StrToInt(s3); delete(s,i+1,j-1-i-1); tim1:=FloatToStr(tim); insert(tim1,s,i+1); s3:=''; end; if s[j]='$' then begin if summa>=7 then begin l:=StrToInt(s[j-1])+1; delete(s,j-1,1); s7:=IntToStr(l); insert(s7,s,j-1); s3:=''; end else l:=StrToInt(s[j-1]); if summa>=7 then begin s5:=s[j+1]+s[j+2]; l2:=StrToInt(s5); delete(s,j+1,2); l2:=l2+summa; s6:=IntToStr(l2); if length(s6)=1 then s6:=' '+s6; insert(s6,s,j+1); end; end; s3:=s3+s[j]; j:=j+1; end; end; end; s1:=s1+s[i]; if (s[i]='#') then s1:=''; end; rewrite(fil1); s4:=''; for i:=1 to length(s) do begin s4:=s4+s[i]; if s[i]='#' then begin writeln(fil1,s4); s4:=''; end; end; closefile(fil1); assignfile(fil1,'bd\result1.txt'); reset(fil1); s:=''; while not eof(fil1) do begin readln(fil1,s2); s:=s+s2; end; closefile(fil1); s1:=''; for i:=1 to length(s) do begin if (s[i] = '*') then begin //showmessage(s1); if s1=zagl.Edit1.Text then begin j:=i+1; s3:=''; while s[j]<>'~' do begin if (s[j]='!')and(l=1)and(summa>StrToInt(s[j-1])) then begin delete(s,j-1,1); s6:=IntToStr(summa); insert(s6,s,j-1); end; if (s[j]='$')and(l=2)and(summa>StrToInt(s[j-1])) then begin delete(s,j-1,1); s6:=IntToStr(summa); insert(s6,s,j-1); end; if (s[j]='#')and(l=3)and(summa>StrToInt(s[j-1])) then begin delete(s,j-1,1); s6:=IntToStr(summa); insert(s6,s,j-1); end; if (s[j]='%')and(l=4)and(summa>StrToInt(s[j-1])) then begin delete(s,j-1,1); s6:=IntToStr(summa); insert(s6,s,j-1); end; if (s[j]='^')and(l=5)and(summa>StrToInt(s[j-1])) then begin delete(s,j-1,1); s6:=IntToStr(summa); insert(s6,s,j-1); end; if (s[j]='@')and(l=6)and(summa>StrToInt(s[j-1])) then begin delete(s,j-1,1); s6:=IntToStr(summa); insert(s6,s,j-1); end; if (s[j]='~')and(l=7)and(summa>StrToInt(s[j-1])) then begin delete(s,j-1,1); s6:=IntToStr(summa); insert(s6,s,j-1); end; s3:=s3+s[j]; j:=j+1; end; end; end; s1:=s1+s[i]; if (s[i]='~') then s1:=''; end; rewrite(fil1); s4:=''; for i:=1 to length(s) do begin s4:=s4+s[i]; if s[i]='~' then begin writeln(fil1,s4); s4:=''; end; end; closefile(fil1); Form1.Close; ElektKursInf.Button1.Enabled:=true; end; end; end; // Процедура обработки события OnClick // для компонентов RadioButton1-RadioButton4 procedure TForm1.RadioButtonClick(Sender: TObject); begin if sender = RadioButton1 then otv:=1 else if sender = RadioButton1 then otv:=2 else if sender = RadioButton3 then otv:=3 else otv:=4; Button1.enabled:=TRUE; end; // обеспечивает настройку компонентов procedure TForm1.FormCreate(Sender: TObject); begin Image1.AutoSize := False; Image1.Proportional := True; RadioButton1.Visible := False; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Gauge1.Progress:=Gauge1.Progress+1; if Gauge1.Progress=100 then begin ResetForm; summa:=summa+score[otv]; Button1.caption:='Ok'; Form1.caption:='Результат'; Button1.tag:=2; Button1.Enabled:=TRUE; Itog; // вывести результат Timer1.Enabled:=false; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ElektKursInf.Button1.Enabled:=true; end; procedure TForm1.FormShow(Sender: TObject); var z:integer;s0:string; begin assignfile(fil,'bd\path1.txt'); reset(fil); s0:=''; while not eof(fil) do begin readln(fil,s0); break; end; closefile(fil); randomize; ResetForm; z:=random(4)+1; fn:=copy(s0,9,length(s0))+IntToStr(ElektKursInf.ListBox1.ItemIndex+1)+IntToStr(z)+'.txt'; assignfile(f,fn); try reset(f); except on EFOpenError do begin ShowMessage('Файл теста '+fn+' не найден.'); Button1.caption:='Ok'; Button1.tag:=2; Button1.Enabled:=TRUE; exit; end; end; Info; // прочитать и вывести информацию о тесте GetLevel; // прочитать информацию об уровнях оценок end; end.
Страницы: 1, 2, 3
|