Автоматизация тестирования на способность к концентрации и переключению внимания

Описание алгоритмов работы программного блока, тестирования, сохранения результатов, просмотра статистики и построения графика. Разработка пользовательского интерфейса. Анализ тестовых испытаний программного блока. Руководство оператора. Охрана труда.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.