Из опыта создания универсальных тестовых редакторов — страница 6

  • Просмотров 5822
  • Скачиваний 185
  • Размер файла 108
    Кб

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 H3: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'; {дописывание расширения} H3:=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; Write(c,'&'); {запись в файл конца ввода} Window(55,10,80,15); TextBackGround(cyan); {окно правильного ответа} clrscr; Write('Правильный ответ: '); Readln(b); {ввод правильного ответа} Writeln(u,b); End; close(u); {закрытие файлов и