Из опыта создания универсальных тестовых редакторов
sp; Write(chr(186));
For t:=1 to (x1-x-3) do Write(' ');
Writeln(chr(186));
End;
Write(' ');
Write(chr(200)); {рисование уголка}
For a:=1 to (x1-x-3) do Write(chr(205)); {рисование линии}
Write(chr(188)); {рисование уголка}
Window(x+2,y+1,x1-2,y1-1); {открытие окна ввода внутри окна}
TextColor(black);
End;
Здесь все довольно просто: окно открывается оператором Window с указанием
координат. По завершении текущего сеанса окно закрывается (закрашивается)
той же командой. В данной программе окна закрываются и открываются много
раз, запрашивая каждое свои данные, что выглядит намного проще, чем
множество строк на экране, не так ли?
Вот как это выглядит в программе:
Window(10,22,69,22); {указывается окно с координатами}
TextBackGround(green); {задается цвет фона}
clrscr; {окно закрашивается}
Введение процедур. Основные функции редактора.
Как видно в структурной программе, функции обозначены в операторе варианта
case. Для удобства обращения к ним и для установления более эффективных
связей между ними я решил вынести функции в отдельные процедуры. Это
создало дополнительные трудности: потребовалось изменить структуру
переменных, ввести локальные переменные. В результате общий вид программы
изменился, увеличилось ее быстродействие.
Я до сих пор говорил об основных функциях редактора, но не показывал их
программного кода. Начнем с функции создания теста. Она создает файл теста
и файл ответов, последовательно записывает вопросы и ответы и затем
закрывает файл.
Procedure NewF;
Var h1:string; {объявление локальных переменных}
Begin
Window(10,10,53,15);
TextBackGround(black);
clrscr;
Window(20,10,66,15); {начальное окно}
TextBackGround(blue);
clrscr;
TextColor(black);
Write('сохранить файл как ');
Readln(a); {ввод пути создаваемого файла без расширения}
a:=a+'.ts'; {дописывание расширения}
h1:=a;
Assign(c,a); {связь переменной с файлом вопросов}
a:=a+'o'; {изменение расширения}
Assign(u,a); {связь переменной с файлом ответов}
Rewrite(c);
Rewrite(u);
Window(20,10,66,15); {закрытие окна}
TextBackGround(black);
clrscr;
Window(30,5,50,10); {открытие окна характеристик}
TextBackGround(yellow);
clrscr;
GoToXY(30,6);
Write('кол-во вопросов ');
Readln(d); {ввод количества вопросов}
Writeln(c,' ',d);
GoToXY(30,8);
Writeln('название теста '); {ввод названия теста}
Readln(f);
Writeln(c,f);
Writeln('пароль на защиту');
Readln(f); {ввод пароля}
Writeln(u,f);
Window(30,5,50,10);
TextBackGround(black);
clrscr;
For i:=1 to d do Begin
Writeln(c);
Window(10,10,53,20); {окно вопроса}
TextBackGround(lightgray);
clrscr;
Writeln(i,'-й вопрос: ');
Readln(a); {ввод вопроса}
Str(i,f);
f:=f+')'; {запись вопроса в файл}
Writeln(c,f);
Writeln(c,a);
Window(55,10,80,15); {окно количества ответов}
TextBackGround(cyan);
clrscr;
Write('количество ответов на ',i,'-й вопрос ');
Readln(e); {ввод количества ответов}
Window(10,10,53,20); {окно ответов}
TextBackGround(lightgray);
clrscr;
For j:=1 to e do Begin
Write(' ',j,')');
Readln(a); {ввод ответов}
Str(j,f);
a:=' '+f+')'+a;
Write(c,a);
End;
 
| | скачать работу |
Из опыта создания универсальных тестовых редакторов |