![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Cruger |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всем привет. Помогите плиз новечку. В программе листинг которой приведен ниже, нужно подправить код, чтобы программа брала имя файла теста при выборе самого файла теста, т.е. его имени. Нужно чтобы при запуске программы создавалась форма, затем из меню ОТКРЫТЬ можно было задать имя файла теста. Файл теста существует на диске. Сам тест- файл *.*TXT
Код { Программа берет имя файла теста из командной строки. Если программа запускается из Delphi, то имя файла теста надо ввести в поле Parameters диалогового окна Run Parameters, которое становится доступным в результате выбора в меню Run команды Parameters. } unit test01; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ActnList, StdActns, XPStyleActnCtrls, ActnMan, ToolWin, ActnCtrls, ActnMenus; type TForm1 = class(TForm) Label1: TLabel; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; Label2: TLabel; Label3: TLabel; Label4: TLabel; Button1: TButton; ActionMainMenuBar1: TActionMainMenuBar; ActionManager1: TActionManager; FileOpen1: TFileOpen; FileExit1: TFileExit; HelpTopicSearch1: THelpTopicSearch; Label5: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure RadioButton1Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); procedure RadioButton3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var f: TextFile; // файл теста (вопросы и варианты ответов) nq: integer; // количество вопросов в тесте right: integer; // количество правильных ответов level: array[1..4] of integer; // критерии оценок mes: array[1..4] of string; // комментарии buf: string; // читает вопрос из файла и выводит его // на в поля формы function NextQw : boolean; begin if not EOF(f) then begin // прочитать и вывести вопрос Readln(f,buf); Form1.Label1.Caption := buf; // прочитать и вывести варианты ответов // 1-й вариант Readln(f,buf); // прочитать 1-й вариант ответа Form1.Label2.Caption := buf; Readln(f,buf); // оценка за выбор этого ответа (1 - правильно, 0 - нет) Form1.RadioButton1.Tag := StrToInt(buf); // 2-й вариант Readln(f,buf); Form1.Label3.Caption := buf; Readln(f,buf); Form1.RadioButton2.Tag := StrToInt(buf); // 3-й вариант Readln(f,buf); Form1.Label4.Caption := buf; Readln(f,buf); Form1.RadioButton3.Tag := StrToInt(buf); // счетчик общего количества вопросов nq:= nq + 1; // кнопка "Дальше" не доступна, // пока не выбран один из вариантов ответа Form1.Button1.Enabled := False; // ни одна из радиокнопок не выбрана Form1.RadioButton1.Checked := False; Form1.RadioButton2.Checked := False; Form1.RadioButton3.Checked := False; NextQw := TRUE; end else NextQw := FALSE; end; // событие FormCreate возникает в момент // создания формы procedure TForm1.FormCreate(Sender: TObject); var i: integer; fname : string; begin { Если программа запускается из Delphi, то имя файла теста надо ввести в поле Parameters диалогового окна Run Parameters, которое становится доступным в результате выбора в меню Run команды Parameters.} fname := ParamStr(1); // взять имя файла теста // из командной строки if fname = '' then begin ShowMessage('В командной строке запуска программы' +#13+ 'надо указать имя файла теста.'); Application.Terminate; // завершить программу end; AssignFile(f,fname); // в процессе открытия файла возможны // ошибки, поэтому ... try Reset(f); // эта инструкция может вызвать ошибку except on EInOutError do begin ShowMessage('Ошибка обращения к файлу теста: ' + fname); Application.Terminate; // завершить программу end; end; // здесь файл теста успешно открыт // прочитать название теста - первая строка файла Readln(f,buf); Form1.Caption := buf; // прочитать оценки и комментарии for i:=1 to 4 do begin Readln(f,buf); mes[i] := buf; Readln(f,buf); level[i] := StrToInt(buf); end; right := 0; // правильных ответов nq := 0; // всего вопросов NextQW; // прочитать и вывести первый вопрос end; // щелчок на кнопке "Дальше" procedure TForm1.Button1Click(Sender: TObject); var buf: string; i: integer; begin if Button1.Caption = 'Завершить' then Close; // добавим оценку за выбранный вариант ответа // оценка находится в свойстве Button.Tag // Button.Tag = 1 - ответ правильный, 0 - нет if RadioButton1.Checked then right := right + RadioButton1.Tag; if RadioButton2.Checked then right := right + RadioButton2.Tag; if RadioButton3.Checked then right := right + RadioButton3.Tag; // вывести следующий вопрос // NextQW читает и выводит вопрос // NextQw = FALSE если в файле теста // вопросов больше нет if not NextQW then begin // здесь значение NextQw = FALSE Button1.Caption := 'Завершить'; // скрыть переключатели и поля меток RadioButton1.Visible := False; RadioButton2.Visible := False; RadioButton3.Visible := False; Label2.Visible := False; Label3.Visible := False; Label4.Visible := False; buf := 'Тестирование завершено.' + #13 + 'Правильных ответов: ' + IntToStr(right) + ' из ' + IntToStr(nq) + '.' + #13; // выставить оценку // right - кол-во правильных ответов i:=1; // номер уровня while (right < level[i]) and (i < 4) do inc(i); buf := buf + mes[i]; Label1.AutoSize := TRUE; Label1.Caption := buf; end; end; // щелчок на переключателе выбора первого варианта ответа procedure TForm1.RadioButton1Click(Sender: TObject); begin Button1.Enabled := True; // кнопка Далее теперь доступна end; procedure TForm1.RadioButton2Click(Sender: TObject); begin Button1.Enabled := True; end; procedure TForm1.RadioButton3Click(Sender: TObject); begin Button1.Enabled := True; end; end. |
![]() ![]() |
Dimich1978 |
![]()
Сообщение
#2
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Реальное имя: Дмитрий Репутация: ![]() ![]() ![]() |
а не проще ли будет попрбовать использовать БД для реализации теста, связать таблицы в одной будут названия тестов, во второй названия вопросов(связана с 1-ой таблицей),а в третьей(связанной по ключу со второй таблицей) будут варианты ответов. Мне кажеться это проще, чем юзать текстовые файлы. У меня есть тестовая программа работающая. Но там только один тип вопросов-пометить галками правильные ответы и все. Как то делал курсач, там надо было использовать различные типы вопросов. Я тип вопроса ставил в базе вопросов, т.е. вопрос и смотрел тип потом выводил нужную панель (PageControl).
|
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 11:38 |