
3.3. Руководство пользователя
Чтобы войти в программу, запустите файл Kurs.exe. После этого на экран будет выведено окно для ввода имени пользователя. Если вы не укажете свое имя, будет выдано соответствующее сообщение.
Для начала тестирования выберите пункт меню ТестНовый тест. После этого на экран будет выведен вопрос и варианты ответов. Чтобы ответить на вопрос, выберите вариант ответа и нажмите кнопку Ответить. В случае, если вы не укажете вариант ответа и нажмете кнопку Ответить, будет выдано сообщение. Также вы можете пропускать вопросы и возвращаться к предыдущему вопросу, нажимая кнопки Пропустить > или < Вернуться соответственно.
По окончании тестирования на экран выводятся результаты тестирования, включающие в себя количество правильных ответов, процент выполнения теста и список вопросов, на которые были даны неправильные ответы. По данным вопросам вы можете получить разъяснения. Для этого выберите из списка вопрос и нажмите кнопку Пояснение. Нажатие на кнопку Закрыть приводит к переходу к окну для ввода имени пользователя.
4. Описание результатов тестирования программы
Одним из важнейших этапов создания программного продукта является его тестирование и отладка. Тестирование позволяет выявить скрытые и явные недостатки программы, либо убедиться в ее пригодности для применения.
Целью тестирования является проверка работоспособности программы, т.е. правильности выполнения всех функций, описанных выше.
Тестирование данного приложения включает в себя следующие пункты:
проверка возможности добавления новых вопросов;
проверка возможности удавления ненужных вопросов;
проверка возможности задания количества вопросов в тесте и способа их выборки;
проверка возможности пропуска вопросов в процессе тестирования;
проверка вывода результатов тестирования;
проверка вывода разъяснений по вопросам, на которые были даны неправильные ответы.
Для первой проверки в базу было добавлено двенадцать вопросов. Как показано на рисунке 19, программа позволяет добавлять новые вопросы.
Рисунок 19 – Добавленные вопросы
Для проверки возможности удаления ненужных вопросов был удален один вопрос. Из рисунка 20 видно, что удаление вопросов осуществляется корректно.
Рисунок 20 – Удаление вопросов
Для проверки возможности задания количества вопросов в тесте были изменены настройки программы (рисунок 21).
Рисунок 21 – Изменение количества вопросов в тесте
На рисунке 22 показан последний вопрос теста.
Рисунок 22 – Результат изменения настроек
Одним из главных требований к любой тестовой программе является вывод результатов тестирования. В данном случае после окончания тестирования выводятся его результаты, что показано на рисунке 23.
Рисунок 23 – Результаты тестирования
В техническом задании указано, что по вопросам, на которые были даны неправильные ответы, требуется организовать вывод разъяснений. На рисунке 24 показан вывод разъяснений.
Рисунок 24 – Вывод разъяснений
По результатам тестирования по всем пунктам было установлено:
в программе реализована возможность добавления новых и удаления ненужных вопросов;
администратор имеет возможность задавать количество вопросов в тесте и способ их выборки;
в процессе тестирования пользователь может пропустить вопрос или вернуться к предыдущему вопросу.
по окончании тестирования на экран выводятся результаты тестирования.
по вопросам, на которые были даны неправильные ответы, пользователь может получить разъяснения.
Таким образом, результаты тестирования свидетельствуют о работоспособности разработанного приложения.
Заключениелизирует перспективы продолжения исследований. Могут быть намечены пути дальнейшего развития темы, обозначены актуальные задачи, нерешенные в исследовании, выделены конкретные методы или алгоритмы, требующие рассмотрения. -->
В данном курсовом проекте были углублены знания, полученные в ходе лекционных и практических занятий. Получены навыки самостоятельной работы по формализации поставленной задачи, программированию, тестированию и отладке задач на ПЭВМ. Получены базовые навыки по работе с базами данных в среде C++ Builder. Разработана универсальная тестовая программа, содержащая банк вопросов по информатике.
В дальнейшем разработанную программу можно развить, например, усложнить структуру базы данных программы для хранения в ней нескольких тестов и снять ограничение количества ответов хранящихся в БД для одного вопроса.
Список литературыниями ГОСТ 7.1.84 «Библиографическое описание документа» -->
1. Электронный вариант лекций по дисциплине «Технология программирования». Ресурс: is-serv//s:\Stulov\Технология программирования\ Лекции\ЛекцииC++.doc.
2. Электронный вариант лекций по дисциплине «ООП». Ресурс: is-serv//s:\ Andrianov\OOP\Лекции по ООП формат Office 2003.doc
3. Бобровский С. И. Самоучитель программирования на языке C++ в системе Borland C++ Builder 4.0. - М.: ДЕСС INFORCOM PRESS, 1999.
4. Архангельский А. Я. Программирование в C++ Builder 6 (+дискета). 2-е изд. - Тв.: «Бином – Пресс» , 2005 – 1168 с.
Приложение А. Блок-схема алгоритма работы программытельно пишется название приложения. -->
Рисунок А.1 - Вход в программу
ложения -->
Рисунок А.2 - Тестирование пользователя
Рисунок А.3 - Переход к следующему вопросу
Рисунок А.4 - Возврат к предыдущему вопросу
Рисунок А.5 - Добавление нового вопроса (начало алгоритма)
F
F
Рисунок А.6 - Добавление нового вопроса (окончание алгоритма)
Приложение Б. Листингляется самостоятельным документом, позволяющим работать с ним без обращения к пояснительной записке. Требования к оформлению исходного текста состоят в следующем: Структурирование текста программы (отступы, разделители, заголовки); Комментарий: Комментарий модуля/программы. Сведения об авторе программы/подпрограммы (группа, ФИО, дата). Назначение программы и результат ее выполнения. Указания по вызову программы и ее использованию: Имя файла исходного текста и используемых файлов. Режимы компиляции, компоновки. Тип исполняемого файла. Формат команды запуска, краткие сведения по управлению работой программы. Список и назначение основных переменных. Список используемых подпрограмм. Сведения о времени выполнения программы, требуемый объем памяти. Комментарий — заголовок группы инструкций, служащих для выполнения конкретной функции (например, «Открытие файла»). Каждый логически выделенный кусок программы следует комментировать. Комментарий процедуры или макрокоманды. (Назначение, входные/ выходные параметры, результат, разрушаемые регистры). Строчный комментарий. Пояснение прикладного результата действия инструкций программы. Рекомендуется придерживаться правила комментирования программы в соотношении 2:1 (инструкции:комментарии), обеспечивающего, в среднем, хорошую читаемость программы. -->
Листинг Б.1 - Файл Kurs.cpp, запускающий программу
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Main.cpp", Form1);
USEFORM("General.cpp", Form2);
USEFORM("Editor.cpp", Form3);
USEFORM("ChangePassword.cpp", Form8);
USEFORM("Options.cpp", Form6);
USEFORM("Result.cpp", Form5);
USEFORM("Comments.cpp", Form7);
USEFORM("Password.cpp", Form4);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->Title = "Универсальный тест";
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
Application->CreateForm(__classid(TForm3), &Form3);
Application->CreateForm(__classid(TForm8), &Form8);
Application->CreateForm(__classid(TForm6), &Form6);
Application->CreateForm(__classid(TForm5), &Form5);
Application->CreateForm(__classid(TForm7), &Form7);
Application->CreateForm(__classid(TForm4), &Form4);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
Листинг Б.2 - Файл Main.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Main.h"
#include "General.h"
#include "Result.h"
#include "Password.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if (Edit1->Text=="")//если пользователь не ввел имя
ShowMessage("Введите имя");//вывод сообщения
else
{
String Imya=Edit1->Text;
Form5->Label1->Caption="Имя тестируемого: "+Imya;
if (Edit1->Text=="admin")//если входит администратор
Form4->Show();//переход на форму для ввода пароля
else
{//вход в программу в режиме пользователя
Form2->FormCreate(Sender);
Form2->RadioGroup1->Items->Clear();
Form2->GroupBox1->Caption="";
Form2->Memo1->Lines->Clear();
Form2->Memo1->Enabled=false;
Form2->Button1->Enabled=false;
Form2->Button2->Enabled=false;
Form2->Button3->Enabled=false;
Form2->N3->Enabled=false;
Form2->N4->Enabled=false;
Form2->N5->Enabled=false;
Form2->N6->Enabled=false;
Form2->Show();
}
Form1->Visible=false;
}
}
//---------------------------------------------------------------------------
Файл Main.h
//---------------------------------------------------------------------------
#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <DB.hpp>
#include <DBTables.hpp>
#include <Buttons.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
TEdit *Edit1;
TBitBtn *BitBtn1;
TBitBtn *BitBtn2;
void __fastcall BitBtn2Click(TObject *Sender);
void __fastcall BitBtn1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Листинг Б.3 - Файл Password.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Password.h"
#include "General.h"
#include "ChangePassword.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//ввод пароля
void __fastcall TForm4::BitBtn1Click(TObject *Sender)
{
if (Edit1->Text==Form8->Table1->Fields->Fields[0]->DisplayText)//если пародь верный
{//вход в программу в режиме администратора
Form2->FormCreate(Sender);
Form2->RadioGroup1->Items->Clear();
Form2->GroupBox1->Caption="";
Form2->Memo1->Lines->Clear();
Form2->Memo1->Enabled=false;
Form2->Button1->Enabled=false;
Form2->Button2->Enabled=false;
Form2->Button3->Enabled=false;
Form2->N3->Enabled=true;
Form2->N4->Enabled=true;
Form2->N5->Enabled=true;
Form2->N6->Enabled=true;
Form2->Show();
Hide();
}
else
Application->MessageBox("Ваш пароль неверный!","Ошибка",MB_ICONSTOP)==IDOK; //вывод сообщения
}
//---------------------------------------------------------------------------
Листинг Б.4 - Файл Password.h
//---------------------------------------------------------------------------
#ifndef PasswordH
#define PasswordH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
//---------------------------------------------------------------------------
class TForm4 : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
TEdit *Edit1;
TBitBtn *BitBtn1;
void __fastcall BitBtn1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm4(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm4 *Form4;
//---------------------------------------------------------------------------
#endif
Листинг Б.5 - Файл General.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "General.h"
#include "Editor.h"
#include "ChangePassword.h"
#include "Options.h"
#include "Main.h"
#include "Result.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
int Col_ques;//количество правидьных ответов
int List[30];//список уже встречавшихся вопросов
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
int Num;//номер текущего вопроса
int x;
//Ответ на вопрос
void __fastcall TForm2::Button1Click(TObject *Sender)
{
if (RadioGroup1->ItemIndex==-1)//если пользователь не выбрал вариант отваета
ShowMessage("Выберите вариант ответа");//вывод сообщения
else
{//если ответ роавильный
if (RadioGroup1->Items->Strings[RadioGroup1->ItemIndex]==Table1->Fields->Fields[Table1->Fields->Fields[9]->Value+1]->AsString)
{
ListBox1->Items->Add(Table1->RecNo);//добавляем вопрос в список вопросов, на которые даны правильные ответы
Col_ques++;//увеличиваеим количество правильных ответов на единицу
}
else
{//добавляем вопрос в список копросов, на которые даны неправильные ответы
Form5->ListBox1->Items->Add(Memo1->Lines->Text);
Form5->ListBox2->Items->Add(Table1->RecNo);
}
Form2->Button3Click(Sender);//переход к следующему вопросу
}
}
//---------------------------------------------------------------------------
//Переход к следующему вопросу
void __fastcall TForm2::Button3Click(TObject *Sender)
{
int i,j;
Boolean Bol,Bol1=false;
randomize();
Num++;//увеличиваем номер вопроса на единицу
if (Num<=Form6->CSpinEdit1->Value)//проверка на окончание тестирования
{
Memo1->Lines->Clear();
if (Form6->RadioButton1->Checked==true)//если вопросы выбираются последовательно
Table1->Next();
else
{//случайный выбор вопросов
x=random(Table1->RecordCount+1);
for (i=1;i<=Num;i++)
if (List[i-1]==x)
{
Bol=true;
break;
}
for (i=1;i<=Form6->CSpinEdit1->Value;i++)
{
Bol1=false;
for (j=1;j<=Num;j++)
if (i==List[j-1])
{
Bol1=true;
break;
}
if (Bol1==false)
{
x=i;
break;
}
}
Table1->RecNo=x;
List[Num-1]=x;//запоминаем номер вопроса
}
//вывод текста вопроса
Memo1->Lines->Add(Table1->Fields->Fields[1]->DisplayText);
//вывод вариантов ответов
RadioGroup1->Items->Clear();
RadioGroup1->Items->Add(Table1->Fields->Fields[2]->DisplayText);
RadioGroup1->Items->Add(Table1->Fields->Fields[3]->DisplayText);
if (Table1->Fields->Fields[4]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[4]->DisplayText);
if (Table1->Fields->Fields[5]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[5]->DisplayText);
if (Table1->Fields->Fields[6]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[6]->DisplayText);
if (Table1->Fields->Fields[7]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[7]->DisplayText);
if (Table1->Fields->Fields[8]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[8]->DisplayText);
//вывод номера вопроса
GroupBox1->Caption="Вопрос №"+IntToStr(Num);
}
else
{//вывод результатов тестирования
int Total=Col_ques;
float Percent=Col_ques*100/Form6->CSpinEdit1->Value;
Form5->Label2->Caption="Правильных ответов: "+IntToStr(Total);
Form5->Label3->Caption="Процент выполнения теста: "+FloatToStrF(Percent,ffFixed,10,2);
Form5->Show();
}
}
//---------------------------------------------------------------------------
//Выбор пункта меню База->Редактировать базу вопросов
void __fastcall TForm2::N4Click(TObject *Sender)
{
Form3->Show();//вызов редактора базы вопросов
}
//---------------------------------------------------------------------------
//Выбор пункта меню Тест->Новый тест
void __fastcall TForm2::N2Click(TObject *Sender)
{
randomize();
Num=1;//первый вопрос
Col_ques=0;//количество правильных ответов равно 0
Form5->ListBox1->Clear();
Form5->ListBox2->Clear();
ListBox1->Clear();
Memo1->Enabled=true;
Button1->Enabled=true;
Button2->Enabled=true;
Button3->Enabled=true;
Memo1->Lines->Clear();
if (Form6->RadioButton1->Checked==true)//если вопросы выбираются последовательно
Table1->Next();
else
{//случайный выбор первого вопроса
List[0]=random(Table1->RecordCount+1);
Table1->RecNo=List[0];
}
if (Form1->Edit1->Text!="admin")
N7->Enabled=false;
//вывод текста вопроса
Memo1->Lines->Add(Table1->Fields->Fields[1]->DisplayText);
//вывод вариантов ответов
RadioGroup1->Items->Clear();
RadioGroup1->Items->Add(Table1->Fields->Fields[2]->DisplayText);
RadioGroup1->Items->Add(Table1->Fields->Fields[3]->DisplayText);
if (Table1->Fields->Fields[4]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[4]->DisplayText);
if (Table1->Fields->Fields[5]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[5]->DisplayText);
if (Table1->Fields->Fields[6]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[6]->DisplayText);
if (Table1->Fields->Fields[7]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[7]->DisplayText);
if (Table1->Fields->Fields[8]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[8]->DisplayText);
//вывод номера вопроса
GroupBox1->Caption="Вопрос №1";
}
//---------------------------------------------------------------------------
//Возврат к предыдущему вопросу
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Num--;//уменьшаем номер вопроса на единицу
Memo1->Lines->Clear();
if (Form6->RadioButton1->Checked==true)
Table1->Prior();//если вопросы выбираются последовательно
else
Table1->RecNo=List[Num-1];//если вопросы выбираются случайно
ListBox1->ItemIndex=Num-1;
Form5->ListBox1->ItemIndex=Num-1;
Form5->ListBox2->ItemIndex=Num-1;
if (Table1->RecNo==StrToInt(ListBox1->Items->Strings[ListBox1->ItemIndex]))
//если на вопрос был дан правильный ответ
{//удаляем вопрос из списка вопросов, на которые даны правильные ответы
ListBox1->Items->Delete(ListBox1->ItemIndex);
Col_ques--;//количество правильных ответов уменьшаем на единицу
}
else
if (Table1->RecNo==StrToInt(Form5->ListBox2->Items->Strings[Form5->ListBox2->ItemIndex]))
//если на вопрос был дан неправильный ответ
{//удаляем вопрос из ссписка вопросов, на которые даны неправильные ответы
Form5->ListBox1->Items->Delete(Form5->ListBox1->ItemIndex);
Form5->ListBox2->Items->Delete(Form5->ListBox2->ItemIndex);
}
//вывод текста вопроса
Memo1->Lines->Add(Table1->Fields->Fields[1]->DisplayText);
//вывод вариантов ответов
RadioGroup1->Items->Clear();
RadioGroup1->Items->Add(Table1->Fields->Fields[2]->DisplayText);
RadioGroup1->Items->Add(Table1->Fields->Fields[3]->DisplayText);
if (Table1->Fields->Fields[4]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[4]->DisplayText);
if (Table1->Fields->Fields[5]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[5]->DisplayText);
if (Table1->Fields->Fields[6]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[6]->DisplayText);
if (Table1->Fields->Fields[7]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[7]->DisplayText);
if (Table1->Fields->Fields[8]->DisplayText!="")
RadioGroup1->Items->Add(Table1->Fields->Fields[8]->DisplayText);
//вывод номера вопроса
GroupBox1->Caption="Вопрос №"+IntToStr(Num);
}
//---------------------------------------------------------------------------
//Выбор пункта меню База->Сменить пароль
void __fastcall TForm2::N5Click(TObject *Sender)
{
Form8->Show();//Вызов формы для смены пароля
}
//---------------------------------------------------------------------------
//Выбор пункта меню Тест->Настройки
void __fastcall TForm2::N6Click(TObject *Sender)
{
Form6->Show();//Вызов формы для изменения настроек программы
}
//---------------------------------------------------------------------------
//Создание формы
void __fastcall TForm2::FormCreate(TObject *Sender)
{
Table1->Active=true;//открытие таблицы
Table1->RecNo=0;
}
//---------------------------------------------------------------------------
//Выбор пункта меню Тест->Выход
void __fastcall TForm2::N7Click(TObject *Sender)
{//переход на форму для ввода имени пользователя
Hide();
Form1->Edit1->Clear();
Form1->Show();
}
//---------------------------------------------------------------------------
Листинг Б.5 - Файл General.h
//---------------------------------------------------------------------------
#ifndef GeneralH
#define GeneralH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <DB.hpp>
#include <DBTables.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published: // IDE-managed Components
TGroupBox *GroupBox1;
TMemo *Memo1;
TRadioGroup *RadioGroup1;
TButton *Button1;
TButton *Button2;
TButton *Button3;
TDataSource *DataSource1;
TMainMenu *MainMenu1;
TMenuItem *N1;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *N4;
TMenuItem *N5;
TMenuItem *N6;
TTable *Table1;
TListBox *ListBox1;
TMenuItem *N7;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall N4Click(TObject *Sender);
void __fastcall N2Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall N5Click(TObject *Sender);
void __fastcall N6Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall N7Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
extern int Col_ques;
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif
Листинг Б.6 - Файл Editor.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Editor.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
Table1->Active=true;
}
//---------------------------------------------------------------------------
//Нажатие кнопки Добавить вопрос
void __fastcall TForm3::Table1BeforePost(TDataSet *DataSet)
{
//если администратор не ввел текст вопроса
if (Table1->Fields->Fields[1]->DisplayText=="")
{
MessageBox(0,"Введите текст вопроса","Ошибка",MB_OK);
Abort();
}
else
//если администратор не ввел первые два варианта ответов
if (Table1->Fields->Fields[2]->DisplayText=="")
{
MessageBox(0,"Введите первые два варианта ответов","Ошибка",MB_OK);
Abort();
}
else
if (Table1->Fields->Fields[3]->DisplayText=="")
{
MessageBox(0,"Введите первые два варианта ответов","Ошибка",MB_OK);
Abort();
}
else
//если администратор не указал номер правильного ответа
if (Table1->Fields->Fields[9]->DisplayText=="")
{
MessageBox(0,"Введите номер правильного ответа","Ошибка",MB_OK);
Abort();
}
else
if (Table1->Fields->Fields[9]->DisplayText!="1"&&
Table1->Fields->Fields[9]->DisplayText!="2"&&
Table1->Fields->Fields[9]->DisplayText!="3"&&
Table1->Fields->Fields[9]->DisplayText!="4"&&
Table1->Fields->Fields[9]->DisplayText!="5"&&
Table1->Fields->Fields[9]->DisplayText!="6"&&
Table1->Fields->Fields[9]->DisplayText!="7")
{
MessageBox(0,"Номер правильного ответа задан неверно","Ошибка",MB_OK);
Abort();
}
else
if (Table1->Fields->Fields[Table1->Fields->Fields[9]->Value+1]->DisplayText=="")
{
MessageBox(0,"Номер правильного ответа задан неверно","Ошибка",MB_OK);
Abort();
}
else
//если администратор не ввел пояснение
if (Table1->Fields->Fields[10]->DisplayText=="")
{
MessageBox(0,"Введите пояснение","Ошибка",MB_OK);
Abort();
}
}
//---------------------------------------------------------------------------
Листинг Б.7 - Файл Editor.h
//---------------------------------------------------------------------------
#ifndef EditorH
#define EditorH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <DB.hpp>
#include <DBCtrls.hpp>
#include <DBGrids.hpp>
#include <DBTables.hpp>
#include <ExtCtrls.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
class TForm3 : public TForm
{
__published: // IDE-managed Components
TDBGrid *DBGrid1;
TDBNavigator *DBNavigator1;
TDataSource *DataSource1;
TTable *Table1;
TAutoIncField *Table1QuestionNumber;
TStringField *Table1Question;
TStringField *Table1Answer1;
TStringField *Table1Answer2;
TStringField *Table1Answer3;
TStringField *Table1Answer4;
TStringField *Table1Answer6;
TStringField *Table1Answer7;
TStringField *Table1Answer5;
TStringField *Table1Comment;
TLabel *Label1;
TIntegerField *Table1RightAnswer;
void __fastcall Table1BeforePost(TDataSet *DataSet);
private: // User declarations
public: // User declarations
__fastcall TForm3(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm3 *Form3;
//---------------------------------------------------------------------------
#endif
Листинг Б.8 - Файл Result.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Result.h"
#include "Main.h"
#include "General.h"
#include "Comments.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm5 *Form5;
//---------------------------------------------------------------------------
__fastcall TForm5::TForm5(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//Нажатие кнопки Закрыть
void __fastcall TForm5::Button1Click(TObject *Sender)
{//переход к форме для ввода имени пользователя
Close();
Form2->Hide();
Form1->Edit1->Clear();
Form1->Visible=true;
}
//---------------------------------------------------------------------------
//Нажатие кнопки Пояснение
void __fastcall TForm5::Button2Click(TObject *Sender)
{//вывод разъяснений
ListBox2->ItemIndex=ListBox1->ItemIndex;
Form2->Table1->RecNo=StrToInt(ListBox2->Items->Strings[ListBox2->ItemIndex]);
Form7->Memo1->Lines->Text=Form2->Table1->Fields->Fields[10]->DisplayText;
Form7->Show();
}
//---------------------------------------------------------------------------
Листинг Б.9 - Файл Result.h
//---------------------------------------------------------------------------
#ifndef ResultH
#define ResultH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm5 : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
TLabel *Label4;
TListBox *ListBox1;
TButton *Button1;
TListBox *ListBox2;
TButton *Button2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm5(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm5 *Form5;
//---------------------------------------------------------------------------
#endif
Листинг Б.10 - Файл Comments.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Comments.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm7 *Form7;
//---------------------------------------------------------------------------
__fastcall TForm7::TForm7(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//Нажатие кнопки Закрыть
void __fastcall TForm7::Button1Click(TObject *Sender)
{
Close();//закрытие формы
}
//---------------------------------------------------------------------------
Листинг Б.11 - Файл Commets.h
//---------------------------------------------------------------------------
#ifndef CommentsH
#define CommentsH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm7 : public TForm
{
__published: // IDE-managed Components
TMemo *Memo1;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm7(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm7 *Form7;
//---------------------------------------------------------------------------
#endif
Листинг Б.12 - Файл Options.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Options.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm6 *Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
: TForm(Owner)
//конструктор формы
{
Table1->Active=true;//открытие таблицы
//загрузка настроек
Form6->CSpinEdit1->Value=Form6->Table1->Fields->Fields[1]->Value;
if (Form6->Table1->Fields->Fields[2]->AsBoolean==true)
Form6->RadioButton1->Checked=true;
else
Form6->RadioButton2->Checked=true;
}
//---------------------------------------------------------------------------
//Нажатие кнопки OK
void __fastcall TForm6::BitBtn1Click(TObject *Sender)
{//сохранение настроек
Table1->Edit();
Table1->Fields->Fields[1]->AsInteger=CSpinEdit1->Value;
if (RadioButton1->Checked==true)
Table1->Fields->Fields[2]->AsBoolean=true;
else
Table1->Fields->Fields[2]->AsBoolean=false;
Table1->Post();
Close();//закрытие формы
}
//---------------------------------------------------------------------------
//Нажатие кнопки Отмена
void __fastcall TForm6::BitBtn2Click(TObject *Sender)
{
Close();//закрытие формы
}
//---------------------------------------------------------------------------
Листинг Б.13 - Файл Options.h
//---------------------------------------------------------------------------
#ifndef OptionsH
#define OptionsH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "CSPIN.h"
#include <Buttons.hpp>
#include <DB.hpp>
#include <DBTables.hpp>
//---------------------------------------------------------------------------
class TForm6 : public TForm
{
__published: // IDE-managed Components
TLabel *Label1;
TCSpinEdit *CSpinEdit1;
TGroupBox *GroupBox1;
TRadioButton *RadioButton1;
TRadioButton *RadioButton2;
TBitBtn *BitBtn1;
TBitBtn *BitBtn2;
TDataSource *DataSource1;
TTable *Table1;
void __fastcall BitBtn1Click(TObject *Sender);
void __fastcall BitBtn2Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm6(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm6 *Form6;
//---------------------------------------------------------------------------
#endif
Файл ChangePassword.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ChangePassword.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm8 *Form8;
//---------------------------------------------------------------------------
__fastcall TForm8::TForm8(TComponent* Owner)
: TForm(Owner)
{
Table1->Active=true;
}
//---------------------------------------------------------------------------
//Нажатие кглпки OK
void __fastcall TForm8::BitBtn1Click(TObject *Sender)
{ //если старый пароль введен верно
if (LabeledEdit1->Text==Table1->Fields->Fields[0]->DisplayText)
{//если новый пароль и подтверждение совпадают
if (LabeledEdit2->Text==LabeledEdit3->Text)
{//сохранение нового пароля
Table1->Edit();
Table1->Fields->Fields[0]->AsString=LabeledEdit2->Text;
Table1->Post();
Close();
}
else
MessageDlg("Пароли не совпадают. Подтвердите ввод",mtWarning,TMsgDlgButtons()<< mbOK,0);
}
else
MessageDlg("Введите старый пароль", mtWarning, TMsgDlgButtons() <<mbOK,0);
}
//---------------------------------------------------------------------------
Листинг Б.14 - Файл ChangePassword.h
//---------------------------------------------------------------------------
#ifndef ChangePasswordH
#define ChangePasswordH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <ExtCtrls.hpp>
#include <DB.hpp>
#include <DBTables.hpp>
//---------------------------------------------------------------------------
class TForm8 : public TForm
{
__published: // IDE-managed Components
TLabeledEdit *LabeledEdit1;
TLabeledEdit *LabeledEdit3;
TBitBtn *BitBtn1;
TDataSource *DataSource1;
TTable *Table1;
TLabeledEdit *LabeledEdit2;
void __fastcall BitBtn1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm8(TComponent* Owner);
};
//extern String OldPassword,Password;
//---------------------------------------------------------------------------
extern PACKAGE TForm8 *Form8;
//---------------------------------------------------------------------------
#endif