бесплатные рефераты

Информационная система обучения по курсу "Компьютерные сети"

Также система содержит настройки администратора, доступные при входе под администраторскими логином и паролем. Администратор имеет возможность настраивать списки пользователей, а также управлять списком тем курса и тестовых модулей.

Общую структуру проекта можно представить следующим образом:

96

Рис. 3. Общая структура ИС обучения

Данная ИС обучения предназначена для более удобного управления электронным учебником по компьютерным сетям и тем самым повышения эффективности обучения и самообучения по данному направлению.

Для работы информационной системы не требуется никакого специализированного программного обеспечения.

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


© 2010 РЕФЕРАТЫ