Файл kurs.cpp – основные функции программы.


// TestMe -программа тестировщик знаний

// Дата 1 июня

//—————————————————————————

#include "ToHelpc.h"

#include "AboutTestMe.h"

#include "StatisTestMe.h"

#include <stdio.h>

#include <stdlib.h>

#include <vcl.h>

#pragma hdrstop

#include "kurs.h"

//—————————————————————————

#pragma package(smart_init)

#pragma resource "*.dfm"

TTester *Tester;

TFont *FontAns=new TFont;

//—————————————————————————

__fastcall TTester::TTester(TComponent* Owner)

: TForm(Owner)

{

FontAns->Size=15;

reset_bit->Enabled=false;

}

//——————-Объявление функций и переменных—————————-

void DelQuestions(void);

int number_of_variants( int);

void rand_func( int, int *);

int correct_answers;

int variants_ans( int, int);

void proverka();

void output_q();

int current_question;

int *rand_q, count=0, *questions,count_of_string;

//————————Открытие файла———————————————-

void __fastcall TTester::N6Click(TObject *Sender)

{

FILE *norm, *shifr; // исходный тест, зашифрованный

randomize();

OpenDialog->Title="Загрузить тест…";

if (OpenDialog->Execute()) //раскодирование зашифрованного файла

{

shifr=fopen(OpenDialog->FileName.c_str(),"r");

norm=fopen("unshifr.txt","w");

do

{

fputc(fgetc(shifr)-20, norm);

}

while(!feof(shifr));

fclose(norm);

fclose(shifr);

ListBox->Items->LoadFromFile("unshifr.txt");// перенос расшифров. файла в ListBox

DeleteFile("unshifr.txt"); //удаление расшифровнного файла

}

count=0;

count_of_string=ListBox->Items->Count; //количество строк в тесте

ListBox->Items->Delete( count_of_string-1);

count_of_string=ListBox->Items->Count; //количество строк в тесте

for(int i=0; i<count_of_string; i++) //определение количества

if(!strcmp(ListBox->Items->Strings[i].c_str(), "") ) //вопросов, равного

count++; //количеству пустых строк

StatusBar->Panels->Items[0]->Text="Всего: "+IntToStr(count);//Вывод на статусную

questions=new int[count]; //панель

for(int i=0,j=0; i<count_of_string; i++) //Создание массива порядковых номеров

if(!strcmp(ListBox->Items->Strings[i].c_str(), "") ) //вопросов

{

questions[j]=i+1;

j++;

}

rand_q=new int[count];

for(int i=0;i<count; i++) // обнуление

rand_q[i]=-1;

rand_func( count, rand_q); //Создание массива случ чисел от 0 до count

output_q(); //Вывод вопроса

Next_q->Enabled=true;

N6->Enabled=false;

open_bit->Enabled=false;

reset_bit->Enabled=true;

}

//—————————Проверка ответов————————————

void __fastcall TTester::Next_qClick(TObject *Sender)

{

proverka();

DelQuestions();

output_q();

}

//—————————Проверка вариантов ответов—————————

void proverka(void)

{

int n,k=1;

AnsiString user_ans;

user_ans=" ";

n=1;

for(int i=0;i<List->Count;i++)

if(((Rec*)List->Items[i])->Check->Checked==1)

{

user_ans[n]=i+49;

n++;

}

do

k++;

while( variants_ans( k, current_question-1));

AnsiString correct_ans=

Tester->ListBox->Items->Strings[questions[rand_q[current_question-1]]+k].c_str();

if(correct_ans==TrimRight(user_ans))

{

correct_answers++;

Tester->StatusBar->Panels->Items[2]->Text="Правильных: "+IntToStr(correct_answers);

Tester->ProgressBar->Position=100*correct_answers/count;

}

}

//——————————-Сброс теста————————————

void __fastcall TTester::reset_bitClick(TObject *Sender)

{

current_question=count;

output_q();

DelQuestions();

}

//————————функция вывода вопроса———————————

void output_q(void)

{

Tester->StatusBar->Panels->Items[1]->Text="Текущий: "+IntToStr(current_question);

if(current_question<count)

{

Tester->question->Width=Tester->QuestionBox->Width-70;

Tester->question->Caption=

Tester->ListBox->Items->Strings[questions[rand_q[current_question]]].c_str();

List=new TList;

Rec *otvet;

int Height=10;

for(int i=0;i<=number_of_variants(current_question);i++)

{

otvet=new Rec;

otvet->Label=new TLabel( Tester->AnswerBox);

otvet->Check=new TCheckBox( Tester->AnswerBox);

otvet->Label->Left=70;

otvet->Label->Font=FontAns;

otvet->Check->Left=30;

otvet->Check->Width=25;

otvet->Check->Alignment=taLeftJustify;

otvet->Label->WordWrap=true;

otvet->Label->Width=Tester->AnswerBox->Width-100;

otvet->Label->Cursor=crHandPoint;

otvet->Check->Cursor=crHandPoint;

otvet->Label->Caption=

Tester->ListBox->Items->Strings[questions[rand_q[current_question]]+i+1].c_str(); ;

List->Add( otvet);

}

int *posl=new int[number_of_variants(current_question)+1];

rand_func(number_of_variants(current_question)+1,posl);

for(int i=0;i<=number_of_variants(current_question);i++)

{

((Rec*)List->Items[posl[i]])->Check->Caption=i+1;

((Rec*)List->Items[posl[i]])->Label->Top=Height+30;

((Rec*)List->Items[posl[i]])->Check->Top=Height+30;

((Rec*)List->Items[posl[i]])->Label->Parent=Tester->AnswerBox;

((Rec*)List->Items[posl[i]])->Check->Parent=Tester->AnswerBox;

Height+=((Rec*)List->Items[posl[i]])->Label->Height;

}

current_question++;

delete []posl;

}

else

{ int rez=100*correct_answers/count;

ShowMessage("Тест окончен !");

Application->CreateForm(__classid(TStatistica), &Statistica);

Statistica->Memo1->Lines->Add("Название теста:");

Statistica->Memo1->Lines->Add(Tester->ListBox->Items->Strings[0]);

Statistica->Memo1->Lines->Add("Всего вопросов: "+ IntToStr(count));

Statistica->Memo1->Lines->Add("Правильно ответили на : "+ IntToStr(correct_answers));

Statistica->Memo1->Lines->Add("Ваша оценка за тест: "+IntToStr(rez)+" баллов");

Statistica->ShowModal();

Statistica->Free();

Tester->Next_q->Enabled=false;

Tester->ProgressBar->Position=0;

correct_answers=0;

Tester->question->Caption="";

Tester->N6->Enabled=true;

Tester->open_bit->Enabled=true;

Tester->reset_bit->Enabled=false;

current_question=0;

}

}

//—————————Количество вариантов ответов————————

int number_of_variants( int i)

{

int N;

N=0;

do

N++;

while( variants_ans( N+2, current_question));

return(N);

}

//——————————————————————————

void DelQuestions(void)

{

for(int i = 0; i < List->Count; i++)

{

delete ((Rec *)List->Items[i])->Label;

delete ((Rec *)List->Items[i])->Check;

delete (Rec *)List->Items[i];

}

delete List;

}

//————————Определения последнего варианта ответа——————

int variants_ans( int k, int current_question)

{

if( count_of_string==questions[rand_q[current_question]]+k+1)

return 0;

if (strcmp(Tester->ListBox->Items->

Strings[questions[rand_q[current_question]]+k+1].c_str(),""))

return (1);

else return 0;

}

//——————создания случайного массива чисел (0~number)——————

void rand_func( int number, int *rand_m)

{

int n,N;

int povtor=0;

for(n=0;n<number;n++)

{

N=rand()%number;

for(int i=0;i<number;i++)

if(N==rand_m[i]) povtor=1;

if(!povtor)

rand_m[n]=N;

else n—;

povtor=0;

}

}

//———————————Выход—————————————-

void __fastcall TTester::N8Click(TObject *Sender)

{

Close();

}

//——————————————————————————

void __fastcall TTester::Exit_bitClick(TObject *Sender)

{

Close();

}

//——————————————————————————

void __fastcall TTester::N5Click(TObject *Sender)

{

Application->CreateForm(__classid(TAboutBox), &AboutBox);

AboutBox->ShowModal();

AboutBox->Free();

}

//———————-Зашифрование файла—————————————

void __fastcall TTester::N10Click(TObject *Sender)

{

FILE *norm, *shifr; // исходный и зашифрованный файлы

OpenDialog->Title="Зашифровать файл…";

if (OpenDialog->Execute()) norm=fopen(OpenDialog->FileName.c_str(),"r");

if (SaveDialog->Execute()) shifr=fopen(SaveDialog->FileName.c_str(),"w");

do

{

fputc(fgetc(norm)+20, shifr); // шифровка методом сдвига кодов в ASCII

}

while(!feof(norm));

fclose(norm);

fclose(shifr);

}

//—————————Показ хинтов( да / нет )—————————-

void __fastcall TTester::N2Click(TObject *Sender)

{

N2->Checked=!N2->Checked;

open_bit->ShowHint=!open_bit->ShowHint;

Exit_bit->ShowHint=!Exit_bit->ShowHint;

reset_bit->ShowHint=!reset_bit->ShowHint;

}

//———————————Шрифт вопроса———————————

void __fastcall TTester::N13Click(TObject *Sender)

{

TFont *Font=new TFont;

if(FontDialog->Execute())

Font->Assign(FontDialog->Font);

question->Font=Font;

delete Font;

}

//—————————-Шрифт ответов————————————-

void __fastcall TTester::N14Click(TObject *Sender)

{

if(FontDialog->Execute()) FontAns->Assign(FontDialog->Font);

AnswerBox->Font=FontAns;

}

//——————————————————————————

void __fastcall TTester::N17Click(TObject *Sender)

{

if(ColorDialog1->Execute())vopros->Color=ColorDialog1->Color;

}

//—————————————————————————

void __fastcall TTester::N18Click(TObject *Sender)

{

if(ColorDialog1->Execute())otveti->Color=ColorDialog1->Color;

}

//—————————————————————————

void __fastcall TTester::N19Click(TObject *Sender)

{

if(FontDialog->Execute()) Next_q->Font=FontDialog->Font;

}

//—————————————————————————

void __fastcall TTester::N20Click(TObject *Sender)

{

if(ColorDialog1->Execute())StatusBar->Color=ColorDialog1->Color;

}

//—————————————————————————

void __fastcall TTester::N22Click(TObject *Sender)

{

if(FontDialog->Execute()) vopros->Font=FontDialog->Font;

}

//—————————————————————————

void __fastcall TTester::N23Click(TObject *Sender)

{

if(FontDialog->Execute()) otveti->Font=FontDialog->Font;

}

//—————————————————————————

void __fastcall TTester::N25Click(TObject *Sender)

{

if(ColorDialog1->Execute()) QuestionBox->Color=ColorDialog1->Color;

}

//—————————————————————————

void __fastcall TTester::N26Click(TObject *Sender)

{

if(ColorDialog1->Execute())AnswerBox->Color=ColorDialog1->Color;

}

//—————————————————————————

void __fastcall TTester::N27Click(TObject *Sender)

{

if(ColorDialog1->Execute())Panel1->Color=ColorDialog1->Color;

}

//—————————————————————————

void __fastcall TTester::N9Click(TObject *Sender)

{

Application->CreateForm(__classid(TToHelp), &ToHelp);

ToHelp->ShowModal();

ToHelp->Free();

}

//—————————————————————————

Рис. П2. 2.Файл kurs.hзаголовочный файл.

//—————————————————————————

#ifndef kursH

#define kursH

//—————————————————————————

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Menus.hpp>

#include <ActnList.hpp>

#include <DBActns.hpp>

#include <ComCtrls.hpp>

#include <Dialogs.hpp>

#include <ExtCtrls.hpp>

#include <Buttons.hpp>

//—————————————————————————

TList *List;

typedef struct

{

TLabel *Label;

TCheckBox *Check;

} Rec;

class TTester : public TForm

{

__published: // IDE-managed Components

TMainMenu *MainMenu1;

TMenuItem *N1;

TMenuItem *Help1;

TListBox *ListBox;

TProgressBar *ProgressBar;

TLabel *Label1;

TMenuItem *N2;

TOpenDialog *OpenDialog;

TMenuItem *N6;

TMenuItem *N7;

TMenuItem *N8;

TPanel *Panel1;

TStatusBar *StatusBar;

TButton *Next_q;

TBitBtn *reset_bit;

TBitBtn *open_bit;

TMenuItem *N3;

TFontDialog *FontDialog;

TLabel *vopros;

TBitBtn *Exit_bit;

TMenuItem *N5;

TMenuItem *N9;

TMenuItem *N10;

TMenuItem *N11;

TMenuItem *N12;

TMenuItem *N13;

TMenuItem *N14;

TMenuItem *N15;

TSaveDialog *SaveDialog;

TScrollBox *QuestionBox;

TLabel *otveti;

TSplitter *Splitter1;

TScrollBox *AnswerBox;

TLabel *question;

TMenuItem *N4;

TMenuItem *N16;

TMenuItem *N17;

TMenuItem *N18;

TMenuItem *N20;

TColorDialog *ColorDialog1;

TMenuItem *N21;

TMenuItem *N22;

TMenuItem *N23;

TMenuItem *N19;

TMenuItem *N24;

TMenuItem *N25;

TMenuItem *N26;

TMenuItem *N27;

void __fastcall N8Click(TObject *Sender);

void __fastcall N6Click(TObject *Sender);

void __fastcall Next_qClick(TObject *Sender);

void __fastcall reset_bitClick(TObject *Sender);

void __fastcall Exit_bitClick(TObject *Sender);

void __fastcall N5Click(TObject *Sender);

void __fastcall N10Click(TObject *Sender);

void __fastcall N2Click(TObject *Sender);

void __fastcall N13Click(TObject *Sender);

void __fastcall N14Click(TObject *Sender);

void __fastcall N17Click(TObject *Sender);

void __fastcall N18Click(TObject *Sender);

void __fastcall N19Click(TObject *Sender);

void __fastcall N20Click(TObject *Sender);

void __fastcall N22Click(TObject *Sender);

void __fastcall N23Click(TObject *Sender);

void __fastcall N25Click(TObject *Sender);

void __fastcall N26Click(TObject *Sender);

void __fastcall N27Click(TObject *Sender);

void __fastcall N9Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TTester(TComponent* Owner);

};

//—————————————————————————

extern PACKAGE TTester *Tester;

//—————————————————————————

#endif

Рис. П2. 3. Файл AboutTestMe.cpp – форма “О программе”

//———————————————————————

#include <vcl.h>

#pragma hdrstop

#include "AboutTestMe.h"

//———————————————————————

#pragma resource "*.dfm"

TAboutBox *AboutBox;

//———————————————————————

__fastcall TAboutBox::TAboutBox(TComponent* AOwner)

: TForm(AOwner)

{

}

//———————————————————————

Рис. П2. 4. Файл AboutTestMe.h – заголовочный файл

//—————————————————————————-

#ifndef AboutTestMeH

#define AboutTestMeH

//—————————————————————————-

#include <vcl\System.hpp>

#include <vcl\Windows.hpp>

#include <vcl\SysUtils.hpp>

#include <vcl\Classes.hpp>

#include <vcl\Graphics.hpp>

#include <vcl\Forms.hpp>

#include <vcl\Controls.hpp>

#include <vcl\StdCtrls.hpp>

#include <vcl\Buttons.hpp>

#include <vcl\ExtCtrls.hpp>

#include <jpeg.hpp>

//—————————————————————————-

class TAboutBox : public TForm

{

__published:

TPanel *Panel1;

TImage *ProgramIcon;

TLabel *Nt;

TLabel *Version;

TLabel *Copyright;

TLabel *Comments;

TButton *OKButton;

TLabel *Label1;

private:

public:

virtual __fastcall TAboutBox(TComponent* AOwner);

};

//—————————————————————————-

extern PACKAGE TAboutBox *AboutBox;

//—————————————————————————-

#endif

Рис. П2 .5. Файл StatisTestMe.cpp – форма вывода результата

//—————————————————————————

#include <vcl.h>

#pragma hdrstop

#include "StatisTestMe.h"

//—————————————————————————

#pragma package(smart_init)

#pragma resource "*.dfm"

TStatistica *Statistica;

//—————————————————————————

__fastcall TStatistica::TStatistica(TComponent* Owner)

: TForm(Owner)

{

}

//—————————————————————————

void __fastcall TStatistica::StatisticaClick(TObject *Sender)

{

Close();

}

//—————————————————————————

Рис. П2. 6. Файл StatisTestMe.h – заголовочный файл

//—————————————————————————

#ifndef StatisTestMeH

#define StatisTestMeH

//—————————————————————————

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

//—————————————————————————

class TStatistica : public TForm

{

__published: // IDE-managed Components

TButton *Statistica;

TMemo *Memo1;

void __fastcall StatisticaClick(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TStatistica(TComponent* Owner);

};

//—————————————————————————

extern PACKAGE TStatistica *Statistica;

//—————————————————————————

#endif

Рис. П2. 7. Файл TestMe.cpp – главный файл

//—————————————————————————

#include <vcl.h>

#pragma hdrstop

USERES("TestMe.res");

USEFORM("kurs.cpp", Tester);

USEFORM("AboutTestMe.cpp", AboutBox);

USEFORM("StatisTestMe.cpp", Statistica);

USEFORM("ToHelpc.cpp", ToHelp);

//—————————————————————————

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TTester), &Tester);

Application->CreateForm(__classid(TAboutBox), &AboutBox);

Application->CreateForm(__classid(TStatistica), &Statistica);

Application->CreateForm(__classid(TToHelp), &ToHelp);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

return 0;

}

//—————————————————————————

Рис. П2. 8. Файл ToHelpc.cpp – форма с помощью

//———————————————————————

#include <vcl.h>

#pragma hdrstop

#include "ToHelpc.h"

//———————————————————————

#pragma resource "*.dfm"

TToHelp *ToHelp;

//———————————————————————

__fastcall TToHelp::TToHelp(TComponent* AOwner)

: TForm(AOwner)

{

}

//———————————————————————

Рис. П2. 9. Файл ToHelpc.h – заголовочный файл

//—————————————————————————-

#ifndef ToHelpcH

#define ToHelpcH

//—————————————————————————-

#include <vcl\System.hpp>

#include <vcl\Windows.hpp>

#include <vcl\SysUtils.hpp>

#include <vcl\Classes.hpp>

#include <vcl\Graphics.hpp>

#include <vcl\Forms.hpp>

#include <vcl\Controls.hpp>

#include <vcl\StdCtrls.hpp>

#include <vcl\Buttons.hpp>

#include <vcl\ExtCtrls.hpp>

//—————————————————————————-

class TToHelp : public TForm

{

__published:

TButton *OKButton;

TMemo *Memo1;

private:

public:

virtual __fastcall TToHelp(TComponent* AOwner);

};

//—————————————————————————-

extern PACKAGE TToHelp *ToHelp;

//—————————————————————————-

#endif

Загрузка...