5.4 Сообщения оператору
В ходе выполнения программы пользователю могут встретиться следующие сообщения:
«Введите о себе всю информацию!!!» (рисунок 7). Данное сообщение появляется при попытке перейти на главную форму, не заполнив одно или несколько полей на форме «Данные о пользователе»;
Рисунок 7
«Ошибка обращения к файлу теста» (рисунок 8). Сообщение появляется, когда файл с вопросами и вариантами ответов не найден;
Рисунок 8
«Ошибка доступа к файлу» (рисунок 9). Сообщение появляется, когда файл с теоретическими данными не найден;
Рисунок 9
Заключение
Обучающая программа по теме «Стандартные процедуры и функции модуля Graph» была разработана с целью упрощения и автоматизации учебного процесса. При разработке данной программы были учтены и реализованы все требования, которые налагались на нее в разделе «Постановка задачи».
Программа может быть использована во всех учебных заведениях, где изучается Pascal. Она очень удобна и проста в использовании, не требует больших системных ресурсов и наличия каких-либо дополнительных аппаратных или программных средств.
При необходимости программу можно переделать, для проведения тестирования на всевозможные темы. Для этого лишь необходимо изменить в текстовом редакторе файлы Vopr.txt и Teoriya.txt.
Список использованной литературы
Фаронов В.В. «Delphi. Программирование на языке высокого уровня».
Иллюстрированный самоучитель по Delphi7 для начинающих [Электронный ресурс] .- / library.mtec.edu/8/Index.htm.
Иллюстрированный самоучитель по Delphi7 для профессионалов [Электронный ресурс] .- / library.mtec.edu/17/Index.htm.
Приложение А
Листинг программы
program Obychalka;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3},
Unit4 in 'Unit4.pas' {Form4},
Unit5 in 'Unit5.pas' {Form5},
Unit6 in 'Unit6.pas' {Form6};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TForm5, Form5);
Application.CreateForm(TForm6, Form6);
Application.Run;
end.
----------------------------------------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, Grids, jpeg;
type
TForm1 = class(TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3, Unit5, Unit4, Unit6;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if(Edit1.Text<>'')and(Edit2.Text<>'')and(Edit1.Text<>'')and(Edit3.Text<>'')and
(Edit4.Text<>'')then
begin
Form6.Memo1.Lines.Add(Edit1.Text);
Form6.Memo1.Lines.Add(Edit2.Text);
Form6.Memo1.Lines.Add(Edit3.Text);
Form6.Memo1.Lines.Add(Edit4.Text);
form1.Visible:=false;
form4.Visible:=true;
end
else
Showmessage('Введите о себе всю информацию!!!');
end;
end.
----------------------------------------------------------------------------------------------------
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus, printers, jpeg, Buttons;
type
TForm2 = class(TForm)
GroupBox1: TGroupBox;
PrintDialog1: TPrintDialog;
Memo1: TMemo;
Panel1: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1, Unit3 , Unit4, Unit5, Unit6;
{$R *.dfm}
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
form2.Visible:=false;
form4.Visible:=true;
end;
procedure TForm2.BitBtn2Click(Sender: TObject);
var
fo:textfile;
i:integer;
begin
if PrintDialog1.Execute then
begin
AssignPRN(fo);
rewrite(fo);
Printer.Canvas.Font:=Memo1.Font;
for i:=0 to Memo1.Lines.Count-1 do
writeln(fo,Memo1.Lines.ValueFromIndex[i]);
Closefile(fo);
end;
end;
end.
----------------------------------------------------------------------------------------------------
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ComCtrls, ExtCtrls;
type
TForm3 = class(TForm)
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit2, Unit1, Unit4, Unit5, Unit6;
{$R *.dfm}
var
f: TextFile; // файл теста (вопросы и варианты ответов)
kol: 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);
Form3.Label1.Caption := buf;
// прочитать и вывести варианты ответов
// 1-й вариант
Readln(f,buf); // прочитать 1-й вариант ответа
Form3.RadioButton1.Caption := buf;
Readln(f,buf);
Form3.RadioButton1.Tag := StrToInt(buf);
// 2-й вариант
Readln(f,buf);
Form3. RadioButton2.Caption := buf;
Readln(f,buf);
Form3.RadioButton2.Tag := StrToInt(buf);
// 3-й вариант
Readln(f,buf);
Form3. RadioButton3.Caption := buf;
Readln(f,buf);
Form3.RadioButton3.Tag := StrToInt(buf);
// счетчик общего количества вопросов
kol:= kol + 1;
Form3.Label2.Caption:='Вопрос №'+IntToStr(kol);
// кнопка "Дальше" не доступна,
// пока не выбран один из вариантов ответа
Form3.Button1.Enabled := False;
// ни одна из радиокнопок не выбрана
Form3.RadioButton1.Checked := False;
Form3.RadioButton2.Checked := False;
Form3.RadioButton3.Checked := False;
NextQw := TRUE;
end
else NextQw := FALSE;
end;
// событие FormCreate возникает в момент
// создания формы
procedure TForm3.FormCreate(Sender: TObject);
var
i: integer;
Filename: string;
begin
// взять имя файла теста
Filename := 'Vopr.txt';
AssignFile(f,fname);
// в процессе открытия файла возможны
// ошибки, поэтому ...
try
Reset(f); // эта инструкция может вызвать ошибку
except
on EInOutError do
begin
ShowMessage('Ошибка обращения к файлу теста: ' + Filename);
// завершить программу
Application.Terminate;
end;
end;
// здесь файл теста успешно открыт
Readln(f,buf);
// прочитать оценки и комментарии
for i:=1 to 4 do
begin
Readln(f,buf);
mes[i] := buf;
Readln(f,buf);
level[i] := StrToInt(buf);
end;
// правильных ответов
right := 0;
// всего вопросов
kol := 0;
// прочитать и вывести первый вопрос
NextQW;
end;
// щелчок на кнопке "Дальше"
procedure TForm3.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;
if ((RadioButton1.Checked)and(RadioButton1.Tag=1))or
((RadioButton2.Checked)and(RadioButton2.Tag=1))or
((RadioButton3.Checked)and(RadioButton3.Tag=1))Then Form3.Label3.Caption:='ПРАВИЛЬНО'else Form3.Label3.Caption:='НЕВЕРНО';
if Form3.Label3.Caption='НЕВЕРНО'then Form3.Label3.Font.Color:=clRed
else Form3.Label3.Font.Color:=clGreen;
// вывести следующий вопрос
// NextQW читает и выводит вопрос
// NextQw = FALSE если в файле теста
// вопросов больше нет
if not NextQW then
begin
// здесь значение NextQw = FALSE
Button1.Caption := 'Завершить';
// скрыть переключатели и поля меток
RadioButton1.Visible := False;
RadioButton2.Visible := False;
RadioButton3.Visible := False;
form4.BitBtn2.Enabled:=False;
buf := 'Правильных ответов: ' + IntToStr(right) +
' из ' + IntToStr(kol) + '.' + #13;
// выставить оценку
// right - кол-во правильных ответов
i:=1; // номер уровня
while (right < level[i]) and (i < 4) do
inc(i);
buf := buf + mes[i];
form6.Memo1.Lines.Add(buf);
form6.Visible:=true;
form3.Visible:=false;
end;
end;
// щелчок на переключателе выбора первого варианта ответа
procedure TForm3.RadioButton1Click(Sender: TObject);
begin
// кнопка Далее теперь доступна
Button1.Enabled := True;
Form3.Label3.Caption:='';
end;
procedure TForm3.RadioButton2Click(Sender: TObject);
begin
Button1.Enabled := True;
Form3.Label3.Caption:='';
end;
procedure TForm3.RadioButton3Click(Sender: TObject);
begin
Button1.Enabled := True;
Form3.Label3.Caption:='';
end;
end.
----------------------------------------------------------------------------------------------------
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids,printers, ExtCtrls, Buttons, jpeg;
type
TForm4 = class(TForm)
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn1: TBitBtn;
BitBtn5: TBitBtn;
Image1: TImage;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
uses Unit3, Unit1, Unit2, Unit5, Unit6;
{$R *.dfm}
procedure TForm4.BitBtn1Click(Sender: TObject);
var
f: TextFile;
Filename: String[80];
begin
form6.Memo1.Lines.Add('С теорией был ознакомлен');
form2.Visible:=true;
form4.Visible:=false;
Filename :='teoriya.txt';
AssignFile(f, Filename);
try
Reset(f);
except
on EInOutError do
begin
ShowMessage('Ошибка доступа к файлу '+
Filename);
exit;
end;
end;
begin
form2.Memo1.Lines.LoadFromFile(Filename);
end;
CloseFile(f);
Form4.BitBtn1.Enabled:=False;
end;
procedure TForm4.BitBtn2Click(Sender: TObject);
begin
If Form4.BitBtn1.Enabled=True then
Form6.Memo1.Lines.Add('С теорией не был ознакомлен!');
Form4.BitBtn1.Enabled:=False;
form4.Visible:=false;
Form3.Visible:=true;
end;
procedure TForm4.BitBtn3Click(Sender: TObject);
begin
Form5.Visible:=true;
end;
procedure TForm4.BitBtn4Click(Sender: TObject);
begin
Close;
end;
procedure TForm4.BitBtn5Click(Sender: TObject);
begin
form6.Visible:=true;
form4.Visible:=false;
end;
procedure TForm4.FormCreate(Sender: TObject);
begin
bitbtn5.Enabled:=false;
end;
end.
----------------------------------------------------------------------------------------------------
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Buttons, jpeg, ExtCtrls;
type
TForm5 = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
implementation
uses Unit1, Unit2, Unit3, Unit4, Unit6
{$R *.dfm}
procedure TForm5.BitBtn1Click(Sender: TObject);
begin
Form5.Visible:=False;
end;
end.
----------------------------------------------------------------------------------------------------
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons,printers, jpeg, ExtCtrls;
type
TForm6 = class(TForm)
Memo1: TMemo;
BitBtn1: TBitBtn;
PrintDialog1: TPrintDialog;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
SaveDialog1: TSaveDialog;
Image1: TImage;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
implementation
uses Unit1, Unit2, Unit3, Unit4, Unit5;
{$R *.dfm}
procedure TForm6.BitBtn1Click(Sender: TObject);
var
fo:textfile;
i:integer;
begin
if PrintDialog1.Execute then
begin
AssignPRN(fo);
rewrite(fo);
Printer.Canvas.Font:=Memo1.Font;
for i:=0 to Memo1.Lines.Count-1 do
writeln(fo,Memo1.Lines.ValueFromIndex[i]);
Closefile(fo);
end;
end;
procedure TForm6.BitBtn2Click(Sender: TObject);
begin
form4.BitBtn5.Enabled:=true;
form6.Visible:=false;
form4.Visible:=true;
end;
procedure TForm6.BitBtn3Click(Sender: TObject);
begin
SaveDialog1.DefaultExt:='txt';
SaveDialog1.Filter:='Текстовые файлы|*.txt';
if saveDialog1.Execute then
memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
end.
Приложение Б
Разработка программы
Анализ требований
Пректирование
Диаграмма классов