Автоматизация тестирования на способность к концентрации и переключению внимания
Описание алгоритмов работы программного блока, тестирования, сохранения результатов, просмотра статистики и построения графика. Разработка пользовательского интерфейса. Анализ тестовых испытаний программного блока. Руководство оператора. Охрана труда.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 06.03.2013 |
Размер файла | 4,4 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
0
3,0
5
5,5
0
5,5
1
6,0
4
4,0
7
7,5
0
7,5
1
8,0
9
3,5
8
7,5
5
5,0
4
7,0
12
1,0
6
4,0
0
4,0
9
8,5
9
4,0
1
4,5
8
0,5
13
7,0
0
7,0
9
11,5
21
1,0
8
5,0
2
4,0
12
10,0
0
10,0
6
13,0
0
13,0
1
13,5
11
8,0
1
8,5
14
1,5
11
7,0
1
6,5
5
9,0
1
8,5
8
12,5
5
10,0
4
12,0
1
11,5
4
13,5
8
9,5
4
11,5
13
5,0
3
6,5
1
6,0
19
15,5
7
12,0
1
12,5
2
11,5
1
12,0
17
3,5
11
9,0
0
9,0
4
11,0
3
9,5
8
13,5
9
9,0
1
9,5
Из рассчитанных данных и стартового времени экспозиции числа имеем:
· максимальное время ответа равно 15,5 с
· минимальное время ответа равно 0,5 с
Текст программы
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Program.h"
#include "Instructions.h"
#include "Property.h"
#include "About.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int GetString(int f, AnsiString *st);
int GetLine(int f, AnsiString *st);
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
int some_res; //результат сложения/вычитания в тестировании
int sign; //знак-число
int DeltaT; //время темпа
long AllTime; //все время тестирования
int AllTime_temp, time_numeral_temp;//переменные для сохранения в файл
double delta_temp;
int how_much_sign = 0; //сколько показано цифр
int how_much_right = 0; //сколько правильно
int how_much_wrong = 0; //сколько ошибочно
int how_much_answered = 0; //правильно+ошибочно
int DelayCount = -1;//количество запаздываний
/* среднее время ответа =
= (время тестирования - стартовое время экспозиции)
/ число предъявленных ответов */
float AvrT; //среднее время ответа
int SumT;//общее время ответа
float MinT;//минимальное время ответа - инициируем как общее время теста
float MaxT = -1;//максимальное время ответа - инициируем как -1
int CurT;//среднее время ответа
const MaxAnsCount = 7500;
float TimeIntevalsArray[MaxAnsCount];//массив
float point_quality; //балл по качеству
bool right_wrong; //флаг, проверяющий нажание прав. кнопки после ошибки
bool end_test; //флаг, проверяющий окончание теста
bool KeyWasPressedFlag = false; //флаг нажатия кнопки
bool TestStarted = false;//начат ли тест
bool SuccessfulySave = false;//успешно ли сохранение
bool key_press;//была ли нажата клавиша
int f; // дескриптор файла
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//НАЧАЛО программного блока
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Form1->Height = 600;
Form1->Width = 800;
Form1->Caption = "Тест «Непрерывный счет»";
Form1->Position = poDesktopCenter;
//Button_Begin_test->Enabled = false;
Image->Height = 530;
Image->Width = 777;
Image->Visible = true;
Edit_Name->Visible = false;
Edit_Surname->Visible = false;
Edit_SurSurname->Visible = false;
Edit_Age->Visible = false;
Edit_Group->Visible = false;
DateTimePicker_Date->Visible = false;
DateTimePicker_Time->Visible = false;
Label_Name->Visible = false;
Label_Surname->Visible = false;
Label_SurSurname->Visible = false;
Label_Age->Visible = false;
Label_Group->Visible = false;
Label_Date->Visible = false;
Label_Time->Visible = false;
Button_Add_User->Visible = false;
Button_Begin_test->Visible = false;
Button_Read_User->Visible = false;
GroupBox_Reg->Visible = false;
Button_Save_Graph->Visible = false;
Button_Add_User->Visible = false;
StringGrid_User->Visible = false;
Chart1->Visible = false;
//DateTimePicker_Date->Date = Now();
//DateTimePicker_Time->Time = Now();
Label_Date->Visible = false;
Label_Time->Visible = false;
Button_instr->Visible = true;
Button_Statistika->Visible = true;
Button_Test->Visible = true;
}
//---------------------------------------------------------------------------
//функции округления (до десятых)
double round(double d)
{
char b[50];
return floor(atof(_gcvt(d,2,b))*10+.5)/10;
}
//(до сотых)
double round2(double d)
{
char b[50];
return floor(atof(_gcvt(d,3,b))*100+.5)/100;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//ИНСТРУКЦИЯ программного блока (в отдельном окне - меню)
void __fastcall TForm1::N2Click(TObject *Sender)
{
Form2->Visible=true;
Form2->Caption="Инструкция";
Form2->BorderStyle = bsSingle;
Form2->Position = poDesktopCenter;
Form2->Width = 465;
Form2->Height = 320;
Form2->Label_instr->Top = 50;
Form2->Label_instr->Left = 20;
Form2->Label_instr->Width = 400;
Form2->Label_instr->Height = 300;
Form2->Label_instr->WordWrap = true;
Form2->Label_instr->Align = alClient;
Form2->Label_instr->Font->Name = "Arial";
Form2->Label_instr->Font->Size = 12;
Form2->Label_instr->Caption = " На экране появится число, которое вам следует запомнить и набрать это число на клавиатуре. Затем оно исчезнет и появится другое число. Если это число зеленого цвета, то его нужно прибавить к исходному. Если это число красного цвета, то его нужно вычесть из исходного. Полученный результат нужно запомнить - это будет исходное число для следующей операции; к нему надо будет прибавить следующее число зеленого цвета и так далее.\n\r В случае ошибки на экране появится правильный ответ - его следует запомнить как исходное число для последующих операций.\n\r Все вычисления проводятся в уме, на клавиатуре набирается только результат вычислений.";
//Form2->Label_instr->Caption = "тест \n\r новая строка";
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//НАСТРОЙКА программного блока
void __fastcall TForm1::N3Click(TObject *Sender)
{
Form3->Visible=true;
Form3->Caption="Настройка";
Form3->BorderStyle = bsSingle;
Form3->Position = poDesktopCenter;
//Label
Form3->Label_time_test->Font->Name = "Arial";
Form3->Label_time_test->Font->Size = 12;
Form3->Label_time_test->Caption = "Время решения задачи (мин):";
Form3->Label_time_numeral->Font->Name = "Arial";
Form3->Label_time_numeral->Font->Size = 12;
Form3->Label_time_numeral->Caption = "Стартовое время экспозиции числа (сек):";
Form3->Label_time_temp->Font->Name = "Arial";
Form3->Label_time_temp->Font->Size = 12;
Form3->Label_time_temp->Caption = "Шаг изменения темпа (сек):";
//ListBox
Form3->ListBox_time_test->Font->Name = "Arial";
Form3->ListBox_time_test->Font->Size = 12;
Form3->ListBox_time_numeral->Font->Name = "Arial";
Form3->ListBox_time_numeral->Font->Size = 12;
Form3->ListBox_time_temp->Font->Name = "Arial";
Form3->ListBox_time_temp->Font->Size = 12;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//ЗАКРЫТИЕ программного блока
void __fastcall TForm1::N5Click(TObject *Sender)
{
Close ();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//О программном блоке
void __fastcall TForm1::N7Click(TObject *Sender)
{
Form4->Visible = true;
Form4->Caption = "О программном блоке";
Form4->Position = poDesktopCenter;
Form4->BorderStyle = bsSingle;
Form4->Width = 335;
Form4->Height = 256;
Form4->Label_about_progr->WordWrap = true;
Form4->Label_about_progr->Align = alClient;
Form4->Label_about_progr->Font->Name = "Arial";
Form4->Label_about_progr->Font->Size = 10;
Form4->Label_about_progr->Caption = " Программный блок «Непрерывный счет»\n\r разработан, как дипломный проект, по заказу\n\r Московского Городского Педагогического Института,\n\r Кафедра социологии и истории психологии.\n\r _______________________________________\n\r Московский Государственный Институт\n\r Электроники и Математики\n\r (Технический университет),\n\r Кафедра «Вычислительная техника».\n\r\n\r Руководитель дипломного проекта: Т.Н. Байбикова\n\r Разработчик программного блока: А.И. Медведева\n\r Программный блок «Непрерывный счет», 2009";
}
//-------------------------------------------------------------------------
//---------------------------------------------------------------------------
//сохранение в файл
bool SaveToFile(AnsiString FileName, AnsiString InStr)
{
bool TmpRes = false;
// открыть для записи или создать файл User_Test.txt
if ( FileExists(FileName) )
f = FileOpen(FileName,fmOpenWrite);
else
f = FileCreate(FileName);
if ( f != -1 )
{
// файл открыт для записи
FileSeek(f,0,2); // установить указатель на конец файла
FileWrite(f,InStr.c_str(),InStr.Length());//запись данных в файл
FileClose(f);//закрыть файл
TmpRes = true;
}
else
{
// ошибка доступа к файлу: ни открыть, ни создать не получилось
//ShowMessage("Oшибка доступа к файлу: ни открыть, ни создать не получилось");
TmpRes = false;
}
return TmpRes;
}
//-------------------------------------------------------------------------
bool TestSaveToFile(AnsiString FileName, AnsiString InStr)
{
bool Tmp = false;
// открыть для записи или создать файл User_Test.txt
if ( FileExists("User_Test.csv") )
f = FileOpen("User_Test.csv",fmOpenWrite);
else
f = FileCreate("User_Test.csv");
if ( f != -1 )
{
FileClose(f);//закрыть файл
Tmp = true;
}
else
{
Tmp = false;
}
return Tmp;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button_Add_UserClick(TObject *Sender)
{
AnsiString st,TmpStr;
//AnsiString CurTs;
/* не равно ли MaxT == -1
ни разу не нажал ни на одну кнопку
надо приравнять максимальное время ответа
к MaxT = времени тестирования, которое в таком случае сохранено в MinT */
if(MaxT == -1)
{
MaxT = MinT;
}
if (TestSaveToFile("User_Test.csv", st) == true)
{
//посчитаем № строки в том самом файле, что бы сохранить № этой строчки
//в файле с остальной информацией о тестировании
int TheCurTsRowNumber=0;
int h = FileOpen("User_Tempo.csv",fmOpenRead);
while(GetLine(h,&TmpStr)!=0)
{
TheCurTsRowNumber++;
}
FileClose(h);
// файл можно открыть в режиме fmCreate, тогда, если
// файл существует, он будет открыт для записи,
// если файла нет, то он будет создан
st = Edit_Name->Text + ";"
+ Edit_Surname->Text + ";"
+ Edit_SurSurname->Text + ";"
+ Edit_Age->Text + ";"
+ Edit_Group->Text + ";"
+ DateToStr(DateTimePicker_Date->Date) + ";"
+ TimeToStr(DateTimePicker_Time->Time) + ";"
+ AllTime_temp + ";"
+ time_numeral_temp + ";"
+ delta_temp + ";"
+ how_much_sign + ";"
+ how_much_right + ";"
+ how_much_wrong + ";"
+ DelayCount + ";"
+ round2(AvrT) + ";"
+ (float)MaxT/1000 + ";"
+ (float)MinT/1000 + ";"
+ round2(point_quality) + ";"
+ TheCurTsRowNumber + "\r\n";
SuccessfulySave = SuccessfulySave && SaveToFile("User_Test.csv", st);
Button_Read_User->Enabled = SuccessfulySave;
Button_Read_User->Visible = SuccessfulySave;
Button_Add_User->Visible = !SuccessfulySave;
Button_Add_User->Enabled = !SuccessfulySave;
}
else
{
ShowMessage("Oшибка доступа к файлу: ни открыть, ни создать не получилось");
Button_Add_User->Visible = true;
Button_Add_User->Enabled = true;
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//НАЧАЛО ТЕСТА программного блока
void __fastcall TForm1::Button_Begin_testClick(TObject *Sender)
{
DateTimePicker_Date->Date = Now();
DateTimePicker_Time->Time = Now();
// Инициализируем все параметры
if (Form3->ListBox_time_numeral->ItemIndex < 0)
{
//Timer_time_numeral->Interval = StrToInt(Form3->ListBox_time_numeral->Items->Strings[0])*1000;
//time_numeral_temp = StrToInt(Form3->ListBox_time_numeral->Items->Strings[0]);
Timer_time_numeral->Interval = 3000;
time_numeral_temp = 3;
}
else
{
Timer_time_numeral->Interval = StrToInt(Form3->ListBox_time_numeral->Items->Strings[Form3->ListBox_time_numeral->ItemIndex])*1000;
time_numeral_temp = StrToInt(Form3->ListBox_time_numeral->Items->Strings[Form3->ListBox_time_numeral->ItemIndex]);
}
if (Form3->ListBox_time_temp->ItemIndex < 0)
{
//DeltaT = (int)((Form3->ListBox_time_temp->Items->Strings[0].ToDouble())*1000);
DeltaT = 50;
delta_temp = 0.05;
}
else
{
DeltaT = (int)((Form3->ListBox_time_temp->Items->Strings[Form3->ListBox_time_temp->ItemIndex].ToDouble())*1000);
delta_temp = (Form3->ListBox_time_temp->Items->Strings[Form3->ListBox_time_temp->ItemIndex].ToDouble());
}
if (Form3->ListBox_time_test->ItemIndex < 0)
{
//AllTime = ((long)(StrToInt(Form3->ListBox_time_test->Items->Strings[0])))*60*1000;
//AllTime_temp = StrToInt(Form3->ListBox_time_test->Items->Strings[0]);
AllTime = 60000;
AllTime_temp = 1;
}
else
{
AllTime = ((long)(StrToInt(Form3->ListBox_time_test->Items->Strings[Form3->ListBox_time_test->ItemIndex])))*60*1000;
AllTime_temp = StrToInt(Form3->ListBox_time_test->Items->Strings[Form3->ListBox_time_test->ItemIndex]);
}
MinT = AllTime;
//MaxT = time_numeral_temp;
/* суммарное время ответов = общее время теста - первоначальный интревал
потом это время разделим на число ответов и получим среднее время ответа */
SumT = (AllTime - (time_numeral_temp*1000));
if (Edit_Name->Text == "")
ShowMessage(("Ошибка! Вы не ввели имя пользователя."));
else if (Edit_Surname->Text == "")
ShowMessage(("Ошибка! Вы не ввели фамилию пользователя."));
else if (Edit_SurSurname->Text == "")
ShowMessage(("Ошибка! Вы не ввели отчество пользователя."));
else if (Edit_SurSurname->Text == "")
ShowMessage(("Ошибка! Вы не ввели отчество пользователя."));
else if (Edit_Age->Text == "")
ShowMessage(("Ошибка! Вы не ввели возраст пользователя."));
else if (Edit_Group->Text == "")
ShowMessage(("Ошибка! Вы не ввели группу пользователя."));
else
{
TestStarted = true;
end_test = false; //сейчас начало теста
Button_instr->Visible = false;
Button_Statistika->Visible = false;
Button_Test->Visible = false;
//сделать невидимыми поля для регистрции
Edit_Name->Visible = false;
Edit_Surname->Visible = false;
Edit_SurSurname->Visible = false;
Edit_Age->Visible = false;
Edit_Group->Visible = false;
DateTimePicker_Date->Visible = false;
DateTimePicker_Time->Visible = false;
Label_Name->Visible = false;
Label_Surname->Visible = false;
Label_SurSurname->Visible = false;
Label_Age->Visible = false;
Label_Group->Visible = false;
Label_Date->Visible = false;
Label_Time->Visible = false;
Button_Add_User->Visible = false;
Button_Begin_test->Visible = false;
Button_Read_User->Visible = false;
GroupBox_Reg->Visible = false;
Form1->Color = clBlack;
//Label_numeral->Top = 170;
//Label_numeral->Left = 300;
Label_numeral->Font->Name="Arial";
Label_numeral->Font->Size=60;
Label_numeral->Caption = "";
Label_numeral->Visible = true;
Timer_time_numeral->Enabled = true;
some_res = 0;
sign = 1;
randomize();
Form1->SetFocus();
N4->Enabled = false;
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//таймер
void __fastcall TForm1::Timer_time_numeralTimer(TObject *Sender)
{
int position_top, position_left, position_rand;
int numeral;
if (end_test == false)//если тест не закончен
{
if(KeyWasPressedFlag == false)//если ни одна клавиша не нажата - задержка
{
DelayCount++;
}
KeyWasPressedFlag = false;
AllTime = AllTime - Timer_time_numeral->Interval;
if (AllTime <= 0)//время тестирования истекло?
{
TestStarted = false;
Timer_time_numeral->Enabled = false;
Label_error->Font->Color = RGB(255, 240,60);
Label_error->Visible = true;
Label_error->Caption = "Тест завершен";
Label_error->Top = (int)(Form1->Height - Label_error->Height) / 2;
Label_error->Left = (int)(Form1->Width - Label_error->Width) / 2;
end_test = true; //конец теста
// среднее время ответа =
// = SumT суммарн. временя ответов / правильных+неправильных ответов
if (how_much_answered != 0)
{
AvrT = ( (float)SumT / (float)how_much_answered) / 1000;
}
else
{
AvrT = (float)SumT/1000;
}
// балл по качеству =
//= кол-во верных ответов / кол-во предъявленных чисел
point_quality = (float)how_much_right / (float)how_much_sign;
how_much_sign = how_much_right + how_much_wrong + DelayCount;
//сохраним строчку с временем реакции
SuccessfulySave = SaveToFile("User_Tempo.csv", "\r\n");
Button_Add_User->Click();
N4->Enabled = true;
}
else //иначе - тест незакончен
{
if (sign == 1)
{
Label_numeral->Font->Color = RGB(0,130,0);
numeral = random (9 - some_res);
some_res = some_res + numeral;
}
else
{
Label_numeral->Font->Color = RGB(230,0,0);
numeral = random(some_res);
some_res = some_res - numeral;
}
Label_numeral->Caption = IntToStr(numeral); //вывод цифры
randomize();
position_top = random(Form1->Height - 2*Label_numeral->Height);
randomize();
position_left= random(Form1->Width - 2*Label_numeral->Width);
Label_numeral->Top = position_top;
Label_numeral->Left = position_left;
right_wrong = false;
key_press = true;//можно отвечать
how_much_sign++;//сколько предъявлено
sign = sign * (-1);
CurT = Timer_time_numeral->Interval;
AnsiString TmpStr = FloatToStr((float) CurT / 1000)+";";
SaveToFile("User_Tempo.csv",TmpStr); //сохранение темпа
}
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//нажатие клавиши
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
int KeyZ = (int)Key;
int TheDeltaT = 0;
if (end_test == false)//если тест незакончен
{
if (key_press == true)//если можно отвечать
{
KeyWasPressedFlag = true;
if ((KeyZ >= 48) && (KeyZ <= 57))//если нажата цифра
{
KeyZ = KeyZ - 48;
CurT = Timer_time_numeral->Interval;
if (KeyZ != some_res)//дана ошибка
{
Timer_time_numeral->Enabled = false;
Label_error->Font->Color = RGB(255, 240,60);
Label_error->Visible = true;
Label_error->Caption = "Ошибка! Нажмите " + IntToStr(some_res);
Label_error->Top = (int)(Form1->Height - Label_error->Height) / 2;
Label_error->Left = (int)(Form1->Width - Label_error->Width) / 2;
how_much_wrong++;//сколько неправильных ответов
right_wrong = true;
TheDeltaT = DeltaT;
}
else //дан правильный ответ
{
key_press = false;//отключ. KeyPress
if (Timer_time_numeral->Interval <= DeltaT)
{
Label_error->Caption = "!";
}
if (right_wrong == false)//если прав. ответ дан не после ошибки
{
how_much_right++;//сколько правильных овтетов
TheDeltaT = (-1)*DeltaT;
}
else
{
TheDeltaT = 0;
}
Timer_time_numeral->Enabled = true;
Label_error->Caption = "";
}
Timer_time_numeral->Interval = CurT + TheDeltaT;
//изменение темпа после ответа
//счет макс. времени ответа
if (CurT > MaxT)
{
MaxT = CurT;
}
else
{
MaxT = MaxT;
}
//счет мин. времени ответа
if (CurT < MinT)
{
MinT = CurT;
}
else
{
MinT = MinT;
}
//на сколько отвечено
how_much_answered = how_much_right + how_much_wrong;
}
}
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//ПРОСМОТР СТАТИСТИКИ программного блока
void __fastcall TForm1::Button_Read_UserClick(TObject *Sender)
{
Label_numeral->Visible = false;
Label_error->Visible = false;
if (Edit_Name->Text == "")
ShowMessage(("Ошибка! Вы не ввели имя пользователя."));
else if (Edit_Surname->Text == "")
ShowMessage(("Ошибка! Вы не ввели фамилию пользователя."));
else if (Edit_SurSurname->Text == "")
ShowMessage(("Ошибка! Вы не ввели отчество пользователя."));
else
{
GroupBox_Reg->Visible = false;
Button_instr->Visible = false;
Button_Statistika->Visible = false;
Button_Test->Visible = false;
StringGrid_User->Visible = true;
StringGrid_User->ColCount = 19;
// заголовки столбцов
StringGrid_User->Cells[0][0] = "Имя";
StringGrid_User->Cells[1][0] = "Фамилия";
StringGrid_User->Cells[2][0] = "Отчество";
StringGrid_User->Cells[3][0] = "Возраст";
StringGrid_User->Cells[4][0] = "Группа";
StringGrid_User->Cells[5][0] = "Дата";
StringGrid_User->Cells[6][0] = "Время";
StringGrid_User->Cells[7][0] = "Время решения задачи";
StringGrid_User->Cells[8][0] = "Стартовое время экспозиции числа";
StringGrid_User->Cells[9][0] = "Шаг изменения темпа";
StringGrid_User->Cells[10][0] = "Сколько чисел предъявлено";
StringGrid_User->Cells[11][0] = "Сколько верных ответов";
StringGrid_User->Cells[12][0] = "Сколько ошибочных ответов";
StringGrid_User->Cells[13][0] = "Число запаздываний";
StringGrid_User->Cells[14][0] = "Среднее время ответа";
StringGrid_User->Cells[15][0] = "Максимальное время ответа";
StringGrid_User->Cells[16][0] = "Минимальное время ответа";
StringGrid_User->Cells[17][0] = "Балл по качеству";
StringGrid_User->Cells[18][0] = "Номер в таблице темпа";
// ширина столбцов
StringGrid_User->ColWidths[0] = 140;
StringGrid_User->ColWidths[1] = 140;
StringGrid_User->ColWidths[2] = 140;
StringGrid_User->ColWidths[3] = 60;
StringGrid_User->ColWidths[4] = 60;
StringGrid_User->ColWidths[5] = 70;
StringGrid_User->ColWidths[6] = 60;
StringGrid_User->ColWidths[7] = 145;
StringGrid_User->ColWidths[8] = 190;
StringGrid_User->ColWidths[9] = 130;
StringGrid_User->ColWidths[10] = 155;
StringGrid_User->ColWidths[11] = 140;
StringGrid_User->ColWidths[12] = 155;
StringGrid_User->ColWidths[13] = 120;
StringGrid_User->ColWidths[14] = 125;
StringGrid_User->ColWidths[15] = 165;
StringGrid_User->ColWidths[16] = 155;
StringGrid_User->ColWidths[17] = 100;
StringGrid_User->ColWidths[18] = 135;
//сделать невидимыми поля для регистрции
Edit_Name->Visible = false;
Edit_Surname->Visible = false;
Edit_SurSurname->Visible = false;
Edit_Age->Visible = false;
Edit_Group->Visible = false;
DateTimePicker_Date->Visible = false;
DateTimePicker_Time->Visible = false;
Label_Name->Visible = false;
Label_Surname->Visible = false;
Label_SurSurname->Visible = false;
Label_Age->Visible = false;
Label_Group->Visible = false;
Label_Date->Visible = false;
Label_Time->Visible = false;
Button_Add_User->Visible = false;
//поменять цвет формы
Form1->Color = clBtnFace;
//чтение из файла User_Test.csv статистики
int h; // дескриптор файла
h = FileOpen("User_Test.csv",fmOpenRead);
if ( h == -1)
{
ShowMessage("Файл данных User_Test.csv не найден.");
return;
}
// Обработка файла
AnsiString st; //строка, прочитанная из файла
int ls, g, i = 1;//длина строки, кол-во символов до конца строки, счетчик
AnsiString buf_sursurname; //отчество
AnsiString buf_surname; //фамилия
AnsiString buf;//имя
StringGrid_User->RowCount = 0;//очистеть таблицу
do {
ls = GetString(h,&st); // кол-во символов у имени
if (ls != 0)
{
buf = st;
ls = GetString(h,&st); // кол-во символов у фамилии
buf_surname = st;
ls = GetString(h,&st); // кол-во символов у отчества
buf_sursurname = st;
if ((Edit_Name->Text == buf)&&(Edit_Surname->Text == buf_surname)
&&(Edit_SurSurname->Text == buf_sursurname))
//если имя,фамилия,отчество совпадают в соотв. полях в файле
{
//вывод в таблицу значений
StringGrid_User->RowCount++;
StringGrid_User->Cells[0][i] = Edit_Name->Text;
StringGrid_User->Cells[1][i] = Edit_Surname->Text;
StringGrid_User->Cells[2][i] = Edit_SurSurname->Text;
StringGrid_User->Cells[3][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[4][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[5][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[6][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[7][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[8][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[9][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[10][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[11][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[12][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[13][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[14][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[15][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[16][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[17][i] = st.SubString(1,GetString(h,&st));
StringGrid_User->Cells[18][i] = st.SubString(1,GetLine(h,&st));
i++;
StringGrid_User->FixedRows = 1;
}
else
g = GetLine(h,&st);
}
} while (ls != 0);
FileClose(h);
Button_Begin_test->Visible = false;
Button_Read_User->Visible = false;
}//else
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Функция GetString читает из файла строку символов
// от текущей позиции до первой точки с запятой.
// значение функции - кол-во прочитанных символов
int GetString(int f, AnsiString *st)
{
unsigned char buf[256]; // строка (буфер)
unsigned char *p = buf; // указатель на строку
int n; // кол-во прочитанных байт (значение ф-и FileRead)
int len = 0; // длина строки
// удалить ведущие пробелы
do
n = FileRead(f, p, 1);
while ((n != 0) && (*p == ' '));
while (( n != 0 ) && ( *p != ';'))
{
if ( *p == '\r')
{
n = FileRead(f, p, 1); // прочитать '\n'
break;
}
len++;
p++;
n = FileRead(f, p, 1);
}
*p = '\0';
if ( len !=0 )
st->printf("%s", buf);
return len;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Функция GetLine читает из файла строку символов
// от текущей позиции до символа "новая строка".
// значение функции - кол-во прочитанных символов
int GetLine(int f, AnsiString *st)
{
unsigned char buf[256]; // строка (буфер)
unsigned char *p = buf; // указатель на строку
int n; // кол-во прочитанных байт (значение ф-и FileRead)
int len = 0; // длина строки
n = FileRead(f, p, 1);
while ( n != 0 )
{
if ( *p == '\r')
{
n = FileRead(f, p, 1); // прочитать '\n'
break;
}
len++;
p++;
n = FileRead(f, p, 1);
}
*p = '\0';
if ( len !=0)
st->printf("%s", buf);
return len;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//НАЧАЛО программного блока
void __fastcall TForm1::N4Click(TObject *Sender)
{
//отображение заставки
Image->Height = 530;
Image->Width = 777;
Image->Visible = true;
Edit_Name->Visible = false;
Edit_Surname->Visible = false;
Edit_SurSurname->Visible = false;
Edit_Age->Visible = false;
Edit_Group->Visible = false;
DateTimePicker_Date->Visible = false;
DateTimePicker_Time->Visible = false;
Label_Name->Visible = false;
Label_Surname->Visible = false;
Label_SurSurname->Visible = false;
Label_Age->Visible = false;
Label_Group->Visible = false;
Label_Date->Visible = false;
Label_Time->Visible = false;
Button_Add_User->Visible = false;
Button_Begin_test->Visible = false;
Button_Read_User->Visible = false;
GroupBox_Reg->Visible = false;
Button_Save_Graph->Visible = false;
Button_Add_User->Visible = false;
StringGrid_User->Visible = false;
Chart1->Visible = false;
//DateTimePicker_Date->Date = Now();
//DateTimePicker_Time->Time = Now();
Label_Date->Visible = false;
Label_Time->Visible = false;
Button_instr->Visible = true;
Button_Statistika->Visible = true;
Button_Test->Visible = true;
Label_instr->Visible = false;
//поменять цвет формы
Form1->Color = clBtnFace;
how_much_sign = 0;
how_much_right = 0;
how_much_wrong = 0;
how_much_answered = 0;
AvrT = 0.00;
DelayCount = -1;
MaxT = -1;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//отображение графика по клику StringGrid
void __fastcall TForm1::StringGrid_UserClick(TObject *Sender)
{
int TheSelectedRow = StringGrid_User->Row;
float OneValue;
float MaxValue = -1;
int i = 0;
int j = 1;
float SumT = 0;
AnsiString st,TmpStr;
/*в последней колонке строки номер TheSelectedRow находится № строки в
файле User_Tempo.cvs в котором хранится то, что надо показать в графике*/
if(TheSelectedRow != 0)
{
int TheChartRow = StrToInt(StringGrid_User->Cells[18][TheSelectedRow]);
Chart1->Visible = true;
Button_Save_Graph->Visible = true;
Series1->Clear();
int h = FileOpen("User_Tempo.csv", fmOpenRead);
int i = 0;
while((j < TheChartRow)&&(GetLine(h,&TmpStr) != 0))
{
j++;
}
while(GetString(h,&st) != 0)
{
OneValue = StrToFloat(st);
if (OneValue > MaxValue)
{
MaxValue = OneValue;
}
else
{
MaxValue = MaxValue;
}
SumT = SumT + OneValue;
st = (AnsiString) round(SumT);
Series1->Add(OneValue,st,clRed);
i++;
};
FileClose(h);
Chart1->LeftAxis->Minimum = 0;
Chart1->LeftAxis->Maximum = (MaxValue+0.5);
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//ЗАВЕРШЕНИЕ программного блока (незапланированный во время тестирования)
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if(TestStarted)
{
AnsiString CloseMsg = "Вы уверены, что хотите покинуть тестирование";
TMsgDlgBtn Res;
Res = MessageDlg(CloseMsg,mtWarning,TMsgDlgButtons() << mbNo << mbYes,0);
if(Res == mrNo)
{
Action = caNone;
}
else
{
SaveToFile("User_Tempo.csv","\r\n");
}
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Chart1->LeftAxis->Minimum = -1;
Chart1->LeftAxis->Maximum = 10;
Chart1->Width = 650;
Chart1->Height = 250;
StringGrid_User->Height = 200;
StringGrid_User->Width = 690;
Label_error->Top = 400;
Label_error->Left = 250;
Label_error->Font->Name="Arial";
Label_error->Font->Size=24;
Label_error->Visible = false;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//сохранение графика
void __fastcall TForm1::Button_Save_GraphClick(TObject *Sender)
{
if (SavePictureDialog1->Execute())
{
Chart1->SaveToBitmapFile(SavePictureDialog1->FileName);
}
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//СТАТИСТИКА программного блока (поля для ввода для поиска)
void __fastcall TForm1::Button_StatistikaClick(TObject *Sender)
{
//сделать видимыми и пустыми поля для регистрции
GroupBox_Reg->Visible = true;
Edit_Name->Visible = true;
Edit_Name->Text = "";
Edit_Surname->Visible = true;
Edit_Surname->Text = "";
Edit_SurSurname->Visible = true;
Edit_SurSurname->Text = "";
Edit_Age->Visible = false;
Edit_Age->Text = "";
Edit_Group->Visible = false;
Edit_Group->Text = "";
DateTimePicker_Date->Visible = false;
DateTimePicker_Time->Visible = false;
Label_Name->Visible = true;
Label_Surname->Visible = true;
Label_SurSurname->Visible = true;
Label_Age->Visible = false;
Label_Group->Visible = false;
Label_Date->Visible = false;
Label_Time->Visible = false;
//сделать видимыми кнопки
Button_Begin_test->Visible = false;
Button_Read_User->Visible = true;
Button_Add_User->Visible = false;
//Button_Add_User->Enabled = true;
StringGrid_User->Visible = false;
Chart1->Visible = false;
Label_numeral->Visible = false;
Label_error->Visible = false;
Timer_time_numeral->Enabled = false;
Button_instr->Visible = true;
Button_Statistika->Visible = false;
Button_Test->Visible = true;
Label_instr->Visible = false;
//поменять цвет формы
Form1->Color = clBtnFace;
Image->Visible = false;
how_much_sign = 0;
how_much_right = 0;
how_much_wrong = 0;
how_much_answered = 0;
AvrT = 0.00;
DelayCount = -1;
MaxT = -1;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//ТЕСТ программного блока (регистрация)
void __fastcall TForm1::Button_TestClick(TObject *Sender)
{
//сделать видимыми и пустыми поля для регистрции
GroupBox_Reg->Visible = true;
Edit_Name->Visible = true;
Edit_Name->Text = "";
Edit_Surname->Visible = true;
Edit_Surname->Text = "";
Edit_SurSurname->Visible = true;
Edit_SurSurname->Text = "";
Edit_Age->Visible = true;
Edit_Age->Text = "";
Edit_Group->Visible = true;
Edit_Group->Text = "";
DateTimePicker_Date->Visible = false;
DateTimePicker_Time->Visible = false;
Label_Name->Visible = true;
Label_Surname->Visible = true;
Label_SurSurname->Visible = true;
Label_Age->Visible = true;
Label_Group->Visible = true;
Label_Date->Visible = false;
Label_Time->Visible = false;
//сделать видимыми кнопки
Button_Begin_test->Visible = true;
Button_Read_User->Visible = false;
Button_Add_User->Visible = false;
//Button_Add_User->Enabled = true;
StringGrid_User->Visible = false;
Chart1->Visible = false;
Label_numeral->Visible = false;
Label_error->Visible = false;
Timer_time_numeral->Enabled = false;
Button_instr->Visible = true;
Button_Statistika->Visible = true;
Button_Test->Visible = false;
Label_instr->Visible = false;
//поменять цвет формы
Form1->Color = clBtnFace;
Image->Visible = false;
how_much_sign = 0;
how_much_right = 0;
how_much_wrong = 0;
how_much_answered = 0;
AvrT = 0.00;
DelayCount = -1;
MaxT = -1;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//ИНСТРУКЦИЯ программного блока
void __fastcall TForm1::Button_instrClick(TObject *Sender)
{
//сделать видимыми и пустыми поля для регистрции
GroupBox_Reg->Visible = false;
Edit_Name->Visible = false;
Edit_Name->Text = "";
Edit_Surname->Visible = false;
Edit_Surname->Text = "";
Edit_SurSurname->Visible = false;
Edit_SurSurname->Text = "";
Edit_Age->Visible = false;
Edit_Age->Text = "";
Edit_Group->Visible = false;
Edit_Group->Text = "";
DateTimePicker_Date->Visible = false;
DateTimePicker_Time->Visible = false;
Label_Name->Visible = false;
Label_Surname->Visible = false;
Label_SurSurname->Visible = false;
Label_Age->Visible = false;
Label_Group->Visible = false;
Label_Date->Visible = false;
Label_Time->Visible = false;
//сделать видимыми кнопки
Button_Begin_test->Visible = false;
Button_Read_User->Visible = false;
Button_Add_User->Visible = false;
//Button_Add_User->Enabled = true;
StringGrid_User->Visible = false;
Chart1->Visible = false;
Label_numeral->Visible = false;
Label_error->Visible = false;
Timer_time_numeral->Enabled = false;
//поменять цвет формы
Form1->Color = clBtnFace;
Image->Visible = false;
Label_instr->Visible = false;
Button_instr->Visible = false;
Button_Statistika->Visible = true;
Button_Test->Visible = true;
Label_instr->WordWrap = true;
Label_instr->Align = alClient;
Label_instr->Font->Name = "Arial";
Label_instr->Font->Size = 12;
Label_instr->Visible = true;
Label_instr->Caption = "\n\r \n\r ИНСТРУКЦИЯ:\n\r На экране появится число, которое вам следует запомнить и набрать это число на клавиатуре. Затем оно исчезнет и появится другое число. Если это число зеленого цвета, то его нужно прибавить к исходному. Если это число красного цвета, то его нужно вычесть из исходного. Полученный результат нужно запомнить - это будет исходное число для следующей операции; к нему надо будет прибавить следующее число зеленого цвета и так далее.\n\r В случае ошибки на экране появится правильный ответ - его следует запомнить как исходное число для последующих операций.\n\r Все вычисления проводятся в уме, на клавиатуре набирается только результат вычислений.";
}
//---------------------------------------------------------------------------
Размещено на Allbest.ru
Подобные документы
Разработка программного комплекса и описание алгоритма. Разработка пользовательского интерфейса. Анализ тестовых испытаний программного блока. Защита пользователей от воздействия на них опасных и вредных факторов. Режимы работы программного комплекса.
дипломная работа [1,7 M], добавлен 14.03.2013Основные функции, требования и характеристики системы тестирования. Создание современной модели WEB-сервиса тестирования знаний студентов с помощью средств WEB-разработки. Описание пользовательского интерфейса сайта, этапы прохождения тестовых заданий.
курсовая работа [6,4 M], добавлен 14.07.2012Создание сетевой системы тестирования с целью автоматизации процесса контроля знаний, оценивания результатов и создания тестовых заданий. Файлы проекта и их назначение. Описание алгоритмов и модулей программы. Работа с сетью, руководство пользователя.
контрольная работа [928,3 K], добавлен 23.12.2012Проектирование базы данных, информационной подсистемы PLC-Tester, модуля тестирования и web-приложения. Разработка логической структуры программного продукта и общие требования к техническому обеспечению. Запуск программы и описание тестовых прогонов.
дипломная работа [3,2 M], добавлен 30.06.2011Разработка программного продукта - приложения, позволяющего заносить данные анкетирования в базу данных MS SQL. Описание логики работы приложения, особенности пользовательского интерфейса. Формы просмотра анкет, описание процедур и функций программы.
курсовая работа [1,2 M], добавлен 16.08.2012Разработка программы создания заметок в любом месте компьютера. Выбор технологии, языка и среды разработки приложения. Описание основных алгоритмов работы программного обеспечения. Проектирование пользовательского интерфейса. Выбор стратегии тестирования.
отчет по практике [700,5 K], добавлен 24.11.2014История развития и виды тестирования программного обеспечения. Инсталляционное, регрессионное, конфигурационное, интеграционное, локализационное, модульное тестирование. Методы сокращения трудоемкости модульного тестирования разрабатываемого приложения.
курсовая работа [309,5 K], добавлен 16.12.2015Описание исходных текстов программного продукта. Системные требования и установка программного продукта. Тестирование пользователя по двадцати вопросам указанной темы и сохранение результатов тестирования. Форма отображения результатов тестирования.
курсовая работа [2,8 M], добавлен 09.07.2013Техническое задание на разработку программного продукта и требования к программе. Написание алгоритма работы и разработка интерфейса программы. Руководство системного программиста и оператора. Основные методы и принципы тестирования базы данных.
дипломная работа [2,7 M], добавлен 27.01.2013Проектирование логической схемы данных для предметной области, физической модели базы данных. Разработка алгоритмов функциональных модулей программного приложения. Принципы тестирования спроектированного программного обеспечения, анализ эффективности.
курсовая работа [926,7 K], добавлен 20.05.2015