на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


Автоматизированная система распределения мест и оценок качества олимпиадных заданий


Exit;

end;

end;

end;

procedure TForm1.BitBtn4Click(Sender: TObject);

begin

Form7.ShowModal;

end;

end.

Модуль 2.

Код этого модуля отвечает за формирование баз данных, то есть за запись

участника.

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons;

type

TForm2 = class(TForm)

Panel1: TPanel;

GroupBox1: TGroupBox;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

uses Unit1, DB, DBTables;

{$R *.dfm}

procedure TForm2.BitBtn1Click(Sender: TObject);

begin

ModalResult:=mrCancel;

end;

procedure TForm2.BitBtn2Click(Sender: TObject);

var

Fio,Sch:string;

n1,n2,n3,n4,n5,n6,snum:double;

begin

Fio:=Edit1.Text;

Sch:=Edit2.Text;

if (Fio='') or (Sch='') then

begin

Application.MessageBox('Не введено ФИО или

Школа!','Ошибка',mb_Ok+mb_IconHand);

Edit1.SetFocus;

Exit;

end;

try

n1:=StrToFloat(Edit3.Text);

n2:=StrToFloat(Edit4.Text);

n3:=StrToFloat(Edit5.Text);

n4:=StrToFloat(Edit6.Text);

n5:=StrToFloat(Edit7.Text);

n6:=StrToFloat(Edit8.Text);

except

Application.MessageBox('Одно или несколько текстовых полей заполнены

неверно!','Ошибка',mb_Ok+mb_IconHand);

Edit1.SetFocus;

Exit;

end;

snum:=n1+n2+n3+n4+n5+n6;

try

with Form1.Table1 do

begin

Active:=True;

Append;

FieldValues['COUNTER']:=RecordCount+1;;

FieldValues['FIO']:=Fio;

FieldValues['MARK1']:=n1;

FieldValues['MARK2']:=n2;

FieldValues['MARK3']:=n3;

FieldValues['MARK4']:=n4;

FieldValues['MARK5']:=n5;

FieldValues['MARK6']:=n6;

FieldValues['SUMMARK']:=snum;

FieldValues['SCHOOL']:=Sch;

Post;

end;

Edit1.Text:='';

Edit2.Text:='';

Edit3.Text:='';

Edit4.Text:='';

Edit5.Text:='';

Edit6.Text:='';

Edit7.Text:='';

Edit8.Text:='';

Edit1.SetFocus;

Application.MessageBox(PChar('Добавлен участник: "'+Fio+'". Суммарный

балл '+FloatToStr(snum)+'.'),'Сообщение',mb_Ok+mb_IconAsterisk);

except

Application.MessageBox('Ошибка записи участника в БД. Загрузите

базу.','Ошибка',mb_Ok+mb_IconHand);

Edit1.SetFocus;

Exit;

end;

end;

end.

Модуль 3.

Данный модуль отвечает за удаление участника из базы данных.

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons;

type

TForm3 = class(TForm)

Panel1: TPanel;

Label1: TLabel;

ComboBox1: TComboBox;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

procedure BitBtn1Click(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm3.BitBtn1Click(Sender: TObject);

begin

ModalResult:=mrCancel;

end;

procedure TForm3.FormShow(Sender: TObject);

var i:integer;

begin

try

if Form1.Table1.RecordCount=0 then

begin

Application.MessageBox('В БД нет ни одной

записи!','Ошибка',mb_Ok+mb_IconHand);

ComboBox1.Color:=clMenu;

ComboBox1.Enabled:=False;

BitBtn2.Enabled:=False;

end

else

begin

ComboBox1.Items.Clear;

ComboBox1.Color:=clWhite;

ComboBox1.Enabled:=True;

BitBtn2.Enabled:=True;

Form1.Table1.First;

for i:=0 to Form1.Table1.RecordCount-1 do

begin

ComboBox1.Items.Add(Form1.Table1.FieldValues['FIO']);

Form1.Table1.Next;

end;

end;

ComboBox1.ItemIndex:=0;

Form1.Table1.First;

except

Application.MessageBox('Ошибка БД. Возможно база не

открыта!','Ошибка',mb_Ok+MB_ICONHAND);

ComboBox1.Color:=clMenu;

ComboBox1.Enabled:=False;

BitBtn2.Enabled:=False;

end;

end;

procedure TForm3.BitBtn2Click(Sender: TObject);

var

i:integer;

begin

try

Form1.Table1.First;

For i:=0 to Form1.Table1.RecordCount-1 do

begin

if ComboBox1.Text=Form1.Table1.FieldValues['FIO'] then

begin

Form1.Table1.Delete;

Application.MessageBox(PChar('Запись участника "'+ComboBox1.Text+'"

успешно удалена'),'Удаление',mb_Ok+mb_IconAsterisk);

ModalResult:=mrCancel;

Exit;

end;

Form1.Table1.Next;

end;

except

Application.MessageBox('Ошибка удаления

записи!','Ошибка',mb_Ok+mb_IconHand);

Exit;

end;

end;

end.

Модуль 4.

Код этого модуля отвечает за формирование окна конфигурации программы, а

также за запись настроек этой конфигурации.

unit Unit4;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons, INIFiles;

type

TForm4 = class(TForm)

Panel1: TPanel;

Label1: TLabel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

GroupBox1: TGroupBox;

RadioGroup1: TRadioGroup;

GroupBox2: TGroupBox;

Label2: TLabel;

Edit1: TEdit;

RadioGroup2: TRadioGroup;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form4: TForm4;

Conf:TIniFile;

implementation

{$R *.dfm}

procedure TForm4.BitBtn1Click(Sender: TObject);

begin

ModalResult:=mrCancel;

end;

procedure TForm4.BitBtn2Click(Sender: TObject);

begin

try

Conf:=TIniFile.Create(GetCurrentDir+'\Config.ini');

with Conf do

begin

case RadioGroup1.ItemIndex of

0: WriteString('BLOCK_CONFIG','NUM_BLOCKS','1');

1: WriteString('BLOCK_CONFIG','NUM_BLOCKS','2');

2: WriteString('BLOCK_CONFIG','NUM_BLOCKS','3');

end;

case RadioGroup2.ItemIndex of

0: WriteString('SORT_CONFIG','SORT_TYPE','1');

1: WriteString('SORT_CONFIG','SORT_TYPE','2');

2: WriteString('SORT_CONFIG','SORT_TYPE','3');

end;

WriteString('MARK_CONFIG','MARKS_TYPE','ONE_IN_ONE');

WriteString('MARK_CONFIG','MARKS_VALUE',Edit1.Text);

UpdateFile;

end;

Conf.Free;

Application.MessageBox('Настройки успешно

сохранены!','Сообщение',mb_Ok+mb_IconAsterisk);

ModalResult:=mrCancel;

except

Application.MessageBox('Ошибка записи настроек в INI-

файл!','Ошибка',mb_Ok+mb_IconHand);

Exit;

end;

end;

end.

Модуль 5.

Код этого модуля представляет собой программный вариант распределения

участников по местам, а также построение распределений по указанным

параметрам. Проще говоря, модуль отвечает за окно распределения по местам и

все действия, производимые в нем.

unit Unit5;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,

Dialogs, ExtCtrls, StdCtrls, Grids, DBGrids, Buttons, DB, DBTables,

INIFiles,

TeeProcs, TeEngine, Chart, TeeFunci, Series, Menus;

type

TForm5 = class(TForm)

Panel1: TPanel;

Label1: TLabel;

DBGrid1: TDBGrid;

GroupBox1: TGroupBox;

BitBtn1: TBitBtn;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

RadioGroup1: TRadioGroup;

DataSource1: TDataSource;

Query1: TQuery;

PopupMenu1: TPopupMenu;

N11: TMenuItem;

N21: TMenuItem;

N31: TMenuItem;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

ColorDialog1: TColorDialog;

Chart1: TChart;

Series1: TBarSeries;

procedure FormShow(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure RadioGroup1Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form5: TForm5;

Conf1:TIniFile;

SortType:String;

NumMarks:double;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm5.FormShow(Sender: TObject);

var

Default, BCon, MCon:string;

i:integer;

blocks, param:array [1..3] of double;

begin

NumMarks:=0;

RadioGroup1.ItemIndex:=3;

try

Conf1:=TIniFile.Create(GetCurrentDir+'\Config.ini');

with Conf1 do

begin

BCon:=ReadString('BLOCK_CONFIG','NUM_BLOCKS',Default);

Label2.Caption:='Количество блоков задач - '+Bcon;

MCon:=ReadString('MARK_CONFIG','MARKS_TYPE',Default);

SortType:=ReadString('SORT_CONFIG','SORT_TYPE',Default);

if MCon='ONE_IN_ONE' then

begin

NumMarks:=StrToFloat(ReadString('MARK_CONFIG','MARKS_VALUE',Default));

Label3.Caption:='Общий балл для всех задач равен

'+FloatToStr(NumMarks);

end;

if SortType='1' then Label4.Caption:='Слабый коллектив (1,2,3)';

if SortType='2' then Label4.Caption:='Сильный коллектив (1,3,2)';

if SortType='3' then Label4.Caption:='Смешанный коллектив';

end;

Conf1.Free;

except

Application.MessageBox('Ошибка чтения из INI-файла. Проверьте

конфигурацию.','Ошибка',mb_Ok+mb_IconHand);

Exit;

end;

try

with Query1 do

begin

Active:=False;

SQL.Clear;

SQL.Add('Select * from "'+Form1.Table1.TableName+'"');

ExecSQL;

end;

Query1.Active:=True;

Chart1.Enabled:=True;

DBGrid1.Enabled:=True;

RadioGroup1.Enabled:=True;

except

Application.MessageBox('Ошибка инициализации БД. Возможно не установлен

BDE, или база не открыта.','Ошибка',mb_Ok+MB_ICONHAND);

Chart1.Enabled:=False;

DBGrid1.Enabled:=False;

RadioGroup1.Enabled:=False;

Exit;

end;

if Query1.RecordCount=0 then

begin

Application.MessageBox('В БД нет ни одной

записи.','Сообщение',mb_Ok+MB_ICONASTERISK);

RadioGroup1.Enabled:=False;

Exit;

end;

try

with Query1 do

begin

First;

for i:=1 to RecordCount do

begin

if BCon='3' then

begin

blocks[1]:=FieldValues['MARK1']+FieldValues['MARK2'];

blocks[2]:=FieldValues['MARK3']+FieldValues['MARK4'];

blocks[3]:=FieldValues['MARK5']+FieldValues['MARK6'];

param[1]:=(blocks[1]+blocks[2]+blocks[3])-3*NumMarks;

param[2]:=2*(blocks[2]-0.5*(blocks[1]+blocks[3]));

param[3]:=(blocks[3]-blocks[1])+NumMarks;

end;

if Bcon='2' then

begin

blocks[1]:=FieldValues['MARK1']+FieldValues['MARK2']+FieldValues['MARK3'];

blocks[2]:=FieldValues['MARK4']+FieldValues['MARK5']+FieldValues['MARK6'];

blocks[3]:=0;

param[1]:=(blocks[1]+blocks[2])-3*NumMarks;

param[2]:=(blocks[2]-blocks[1])+NumMarks;

param[3]:=0;

end;

if Bcon='1' then

begin

blocks[1]:=FieldValues['MARK1']+FieldValues['MARK2']+FieldValues['MARK3']+Fi

eldValues['MARK4']+FieldValues['MARK5']+FieldValues['MARK6'];

blocks[2]:=0;

blocks[3]:=0;

param[1]:=blocks[1]-NumMarks;

param[2]:=0;

param[3]:=0;

end;

Edit;

FieldValues['PARAM1']:=param[1];

FieldValues['PARAM2']:=param[2];

FieldValues['PARAM3']:=param[3];

Next;

end;

end;

except

Application.MessageBox('Неизвестная

ошибка!','Ошибка',mb_Ok+MB_ICONHAND);

Exit;

end;

try

with Query1 do

begin

Active:=False;

SQL.Clear;

SQL.Add('select * from "'+Form1.Table1.TableName+'"');

SQL.Add('order by PARAM1 desc, PARAM2 desc, PARAM3 desc');

ExecSQL;

end;

DataSource1.DataSet:=Query1;

DataSource1.Enabled:=True;

DBGrid1.DataSource:=DataSource1;

DBGrid1.Enabled:=True;

Query1.Active:=True;

except

Application.MessageBox('Ошибка выполнения сортировки участников.

Проверьте конфигурацию.','Ошибка',mb_Ok+MB_ICONHAND);

Exit;

end;

end;

procedure TForm5.BitBtn1Click(Sender: TObject);

begin

ModalResult:=mrOk;

end;

procedure TForm5.RadioGroup1Click(Sender: TObject);

var

SortStr:string;

begin

case RadioGroup1.ItemIndex of

0: SortStr:='order by PARAM1 desc';

1: SortStr:='order by PARAM2 desc';

2: SortStr:='order by PARAM3 desc';

3: SortStr:='order by PARAM1 desc,PARAM2 desc,PARAM3 desc';

end;

if (SortType='1') and (RadioGroup1.ItemIndex=3) then SortStr:='order by

PARAM1 desc, PARAM3 desc, PARAM3 desc';

with Query1 do

begin

Active:=False;

SQL.Clear;

SQL.Add('select * from "'+Form1.Table1.TableName+'"');

SQL.Add(SortStr);

ExecSQL;

Active:=True;

end;

end;

procedure TForm5.N11Click(Sender: TObject);

var

i,j,NumI:integer;

ind,per:double;

GrPar, GrPercent, parm:array[1..200] of double;

begin

NumI:=StrToInt(FloatToStr(NumMarks));

for i:=0 to 200 do

begin

GrPar[i]:=0;

GrPercent[i]:=0;

parm[i]:=0;

end;

per:=0;

ind:=0;

Query1.First;

if Sender=N11 then

begin

for j:=1 to Query1.RecordCount do

begin

parm[j]:=Query1.FieldValues['PARAM1'];

Query1.Next;

end;

ind:=-3*NumMarks;

for i:=1 to 6*NumI+1 do

begin

for j:=1 to Query1.RecordCount do

begin

if ind=parm[j] then per:=per+1;

end;

GrPar[i]:=ind;

GrPercent[i]:=per/Query1.RecordCount;

per:=0;

ind:=ind+1;

end;

Series1.Clear;

Chart1.BottomAxis.Title.Caption:='Параметр 1';

Chart1.BottomAxis.Minimum:=-3*NumMarks;

Chart1.BottomAxis.Maximum:=ind-1;

For i:=0 to 6*NumI+1 do

begin

Series1.AddXY(GrPar[i],GrPercent[i]);

end;

end;

if Sender=N21 then

begin

for j:=1 to Query1.RecordCount do

begin

parm[j]:=Query1.FieldValues['PARAM2'];

Query1.Next;

end;

ind:=-2*NumMarks;

for i:=1 to 4*NumI+1 do

begin

for j:=1 to Query1.RecordCount do

begin

if ind=parm[j] then per:=per+1;

end;

GrPar[i]:=ind;

GrPercent[i]:=per/Query1.RecordCount;

per:=0;

ind:=ind+1;

end;

Series1.Clear;

Chart1.BottomAxis.Title.Caption:='Параметр 2';

Chart1.BottomAxis.Minimum:=-2*NumMarks;

Chart1.BottomAxis.Maximum:=ind-1;

For i:=0 to 4*NumI+1 do

begin

Series1.AddXY(GrPar[i],GrPercent[i]);

end;

end;

if Sender=N31 then

begin

for j:=1 to Query1.RecordCount do

begin

parm[j]:=Query1.FieldValues['PARAM3'];

Query1.Next;

end;

ind:=-1*NumMarks;

for i:=1 to 2*NumI+1 do

begin

for j:=1 to Query1.RecordCount do

begin

if ind=parm[j] then per:=per+1;

end;

GrPar[i]:=ind;

GrPercent[i]:=per/Query1.RecordCount;

per:=0;

ind:=ind+1;

end;

Series1.Clear;

Chart1.BottomAxis.Title.Caption:='Параметр 3';

Chart1.BottomAxis.Minimum:=-1*NumMarks;

Chart1.BottomAxis.Maximum:=ind-1;

For i:=0 to 2*NumI+1 do

begin

Series1.AddXY(GrPar[i],GrPercent[i]);

end;

end;

if Sender=N1 then

begin

for j:=1 to Query1.RecordCount do

begin

parm[j]:=Query1.FieldValues['SUMMARK'];

Query1.Next;

end;

ind:=0;

for i:=1 to 6*NumI+1 do

begin

for j:=1 to Query1.RecordCount do

begin

if ind=parm[j] then per:=per+1;

end;

GrPar[i]:=ind;

GrPercent[i]:=per/Query1.RecordCount;

per:=0;

ind:=ind+1;

end;

Series1.Clear;

Chart1.BottomAxis.Title.Caption:='Суммарный балл';

Chart1.BottomAxis.Minimum:=0*NumMarks;

Chart1.BottomAxis.Maximum:=ind-1;

For i:=0 to 6*NumI+1 do

begin

Series1.AddXY(GrPar[i],GrPercent[i]);

end;

end;

Query1.First;

end;

procedure TForm5.N3Click(Sender: TObject);

begin

if ColorDialog1.Execute then

begin

Series1.SeriesColor:=ColorDialog1.Color;

end;

end;

procedure TForm5.N4Click(Sender: TObject);

begin

if ColorDialog1.Execute then

begin

Chart1.Gradient.EndColor:=ColorDialog1.Color;

Chart1.Gradient.StartColor:=clWhite;

end;

end;

end.

Модуль 6.

Код этого модуля отвечает за окно и сам процесс создания локальной базы

данных.

unit Unit6;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons, DB, DBTables;

type

TForm6 = class(TForm)

Panel1: TPanel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Edit2: TEdit;

Label3: TLabel;

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form6: TForm6;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm6.BitBtn1Click(Sender: TObject);

begin

ModalResult:=mrNo;

end;

procedure TForm6.BitBtn2Click(Sender: TObject);

var

Comm:TStringList;

begin

try

with Form1.Table1 do begin

Active := False;

DatabaseName := 'Olymp';

TableType := ttParadox;

TableName := Edit1.Text;

if not Form1.Table1.Exists then begin

with FieldDefs do begin

Clear;

with AddFieldDef do begin

Name := 'Counter';

DataType := ftInteger;

Required := True;

end;

with AddFieldDef do begin

Name := 'FIO';

DataType := ftString;

Size := 25;

end;

with AddFieldDef do begin

Name := 'MARK1';

DataType := ftFloat;

Required := True;

end;

with AddFieldDef do begin

Name := 'MARK2';

DataType := ftFloat;

Required := True;

end;

with AddFieldDef do begin

Name := 'MARK3';

DataType := ftFloat;

Required := True;

end;

with AddFieldDef do begin

Name := 'MARK4';

DataType := ftFloat;

Required := True;

end;

with AddFieldDef do begin

Name := 'MARK5';

DataType := ftFloat;

Required := True;

end;

with AddFieldDef do begin

Name := 'MARK6';

DataType := ftFloat;

Required := True;

end;

with AddFieldDef do begin

Name := 'SUMMARK';

DataType := ftFloat;

Required := True;

end;

with AddFieldDef do begin

Name := 'SCHOOL';

DataType := ftString;

Size := 35;

end;

with AddFieldDef do begin

Name := 'PARAM1';

DataType := ftFloat;

Required:=False;

end;

with AddFieldDef do begin

Name := 'PARAM2';

DataType := ftFloat;

Required:=False;

end;

with AddFieldDef do begin

Name := 'PARAM3';

DataType := ftFloat;

Required:=False;

end;

with AddFieldDef do begin

Name := 'PLACE';

DataType := ftInteger;

Required:=False;

end;

end;

with IndexDefs do begin

Clear;

with AddIndexDef do begin

Name := '';

Fields := 'COUNTER';

Options := [ixPrimary];

end;

with AddIndexDef do begin

Name := 'VAL1';

Fields := 'PARAM1';

Options := [ixDescending];

end;

with AddIndexDef do begin

Name := 'VAL2';

Fields := 'PARAM2';

Options := [ixDescending];

end;

with AddIndexDef do begin

Name := 'VAL3';

Fields := 'PARAM3';

Options := [ixDescending];

end;

end;

CreateTable;

Application.MessageBox('Локальная база данных успешно

создана!','Сообщение',mb_OK+mb_IconAsterisk);

end

else Application.MessageBox('Локальная база данных уже

существует и открыта!','Сообщение',mb_OK+mb_IconAsterisk);

end;

except

Application.MessageBox('Ошибка создания базы

данных!','Внимание',mb_OK+mb_IconHand);

Exit;

end;

Form1.Table1.Active:=True;

Form1.dsOlymp.DataSet:=Form1.Table1;

Form1.DBGrid1.DataSource:=Form1.dsOlymp;

Comm:=TStringList.Create;

Comm.Clear;

Comm.Add(Edit2.Text);

Comm.SaveToFile('Bases\'+Edit1.Text+'.olp');

Comm.Free;

Form1.Label1.Caption:='Описание БД: '+Edit2.Text;

ModalResult:=mrNo;

end;

end.

Модуль 6.

Этот модуль отвечает за весь процесс оценки качества заданий. В нем

рассчитываются все параметры, и строятся необходимые диаграммы.

unit Unit7;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,

Dialogs, ExtCtrls, StdCtrls, Buttons, Grids, DBGrids, TeEngine, Series,

TeeProcs, Chart, DB, DBTables, INIFiles;

type

TForm7 = class(TForm)

Panel1: TPanel;

BitBtn1: TBitBtn;

Chart1: TChart;

Series1: TBarSeries;

DataSource1: TDataSource;

Query1: TQuery;

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Label4: TLabel;

Label5: TLabel;

Chart2: TChart;

Series2: TBarSeries;

Chart3: TChart;

Series3: TLineSeries;

Series4: TBarSeries;

Series5: TBarSeries;

Label3: TLabel;

Series6: TLineSeries;

procedure BitBtn1Click(Sender: TObject);

procedure FormShow(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form7: TForm7;

Cf1:TIniFile;

implementation

uses Unit1, Unit5, foxsoft;

{$R *.dfm}

procedure TForm7.BitBtn1Click(Sender: TObject);

begin

ModalResult:=mrOk;

end;

procedure TForm7.FormShow(Sender: TObject);

var

i,j,NumI,kl,kz,nz,gr:integer;

ind,per,block1,block2,block3,coun,coun1,coun2,coun3,n1,n2,n3,k:double;

p1,p2,p3:array [1..50] of double;

GrPar, GrPercent, parm:array[1..200] of double;

MCon, Default,maxb:string;

sbl1,sbl2,sbl3:double;

kn, kp:array[1..3] of double;

srbl1,srbl2,srbl3,sdxq1,sdxq2,sdxq3:double;

dx1,dx2,dx3,sigm1,sigm2,sigm3,m:double;

begin

try

with Query1 do

begin

Active:=False;

SQL.Clear;

SQL.Add('Select * from "'+Form1.Table1.TableName+'"');

ExecSQL;

end;

Query1.Active:=True;

Chart1.Enabled:=True;

except

Application.MessageBox('Ошибка инициализации БД. Возможно не установлен

BDE, или база не открыта.','Ошибка',mb_Ok+MB_ICONHAND);

Chart1.Enabled:=False;

Exit;

end;

if Query1.RecordCount=0 then

begin

Application.MessageBox('В БД нет ни одной

записи.','Сообщение',mb_Ok+MB_ICONASTERISK);

Exit;

end;

Cf1:=TIniFile.Create(GetCurrentDir+'\Config.ini');

try

with Cf1 do

begin

MCon:=ReadString('MARK_CONFIG','MARKS_TYPE',Default);

if MCon='ONE_IN_ONE' then

begin

maxb:=ReadString('MARK_CONFIG','MARKS_VALUE',Default);

end;

MCon:=ReadString('BLOCK_CONFIG','NUM_BLOCKS',Default);

end;

NumI:=StrToInt(maxb);

Cf1.Free;

except

Application.MessageBox('Ошибка чтения из INI-файла. Проверьте

конфигурацию.','Ошибка',mb_Ok+mb_IconHand);

Exit;

end;

for i:=0 to 200 do

begin

GrPar[i]:=0;

GrPercent[i]:=0;

parm[i]:=0;

end;

per:=0;

ind:=0;

Query1.First;

for j:=1 to Query1.RecordCount do

begin

parm[j]:=Query1.FieldValues['SUMMARK'];

Query1.Next;

end;

ind:=0;

for i:=1 to 6*NumI+1 do

begin

for j:=1 to Query1.RecordCount do

begin

if ind=parm[j] then per:=per+1;

end;

GrPar[i]:=ind;

GrPercent[i]:=per/Query1.RecordCount;

per:=0;

ind:=ind+1;

end;

Series1.Clear;

Chart1.BottomAxis.Title.Caption:='Суммарный балл';

Chart1.BottomAxis.Minimum:=0*NumMarks;

Chart1.BottomAxis.Maximum:=ind-1;

For i:=0 to 6*NumI+1 do

begin

Series1.AddXY(GrPar[i],GrPercent[i]);

end;

if MCon='2' then

begin

with Query1 do

begin

Series2.Clear;

Chart2.BottomAxis.Maximum:=RecordCount;

Chart2.BottomAxis.Minimum:=0;

n1:=0;

k:=1;

coun:=0;

First;

for i:=1 to RecordCount do

begin

block1:=FieldValues['MARK1']+FieldValues['MARK2']+FieldValues['MARK3'];

block2:=FieldValues['MARK4']+FieldValues['MARK5']+FieldValues['MARK6'];

Series2.AddXY(k,block1-block2);

if block1-block2>=0 then coun:=coun+1;

Next;

k:=k+1;

end;

end;

n1:=coun/Query1.RecordCount;

Label1.Caption:='Надежность реализации - '+FloatToStr(n1*100)+'%.';

end;

if MCon='3' then

begin

with Query1 do

begin

Series2.Clear;

Series4.Clear;

Series5.Clear;

Chart2.BottomAxis.Maximum:=RecordCount+10;

Chart2.BottomAxis.Minimum:=0;

n1:=0; n2:=0; n3:=0;

k:=1;

coun:=0; coun2:=0; coun3:=0;

First;

for i:=1 to RecordCount do

begin

block1:=FieldValues['MARK1']+FieldValues['MARK2'];

block2:=FieldValues['MARK3']+FieldValues['MARK4'];

block3:=FieldValues['MARK5']+FieldValues['MARK6'];

Series2.AddXY(k,block1-block2);

Series4.AddXY(k,block2-block3);

Series5.AddXY(k,block1-block3);

if block1-block2>=0 then coun1:=coun1+1;

if block2-block3>=0 then coun2:=coun2+1;

if block1-block3>=0 then coun3:=coun3+1;

Next;

k:=k+1;

end;

end;

n1:=coun1/Query1.RecordCount;

n2:=coun2/Query1.RecordCount;

n3:=coun3/Query1.RecordCount;

Label1.Caption:='Надежность реализации -

'+FloatToStr(Okrugl(n1*100,2))+'%, '+FloatToStr(Okrugl(n2*100,2))+'%,

'+FloatToStr(Okrugl(n3*100,2))+'%.';

end;

if MCon='1' then

begin

Series2.Clear;

Series4.Clear;

Series5.Clear;

Label1.Caption:='Параметр не имеет смысла с 1 блоком.';

end;

Label3.Caption:='Количество блоков задач - '+Mcon;

Label5.Caption:='Обшее количество участников

'+IntToStr(Query1.RecordCount)+'.';

Label4.Caption:='Максимальный балл равен '+IntToStr(NumI)+'.';

if MCon<>'1' then

begin

Query1.First;

for i:=1 to Query1.RecordCount do

begin

p1[i]:=Query1.FieldValues['PARAM1'];

p2[i]:=Query1.FieldValues['PARAM2'];

p3[i]:=Query1.FieldValues['PARAM3'];

Query1.Next;

end;

kl:=0;

j:=1;

kz:=Query1.RecordCount;

nz:=0;

gr:=0;

for i:=1 to kz do

begin

with Query1 do

begin

Active:=False;

SQL.Clear;

SQL.Add('Select * from "'+Form1.Table1.TableName+'"');

SQL.Add('where (PARAM1='+FloatToStr(p1[j])+') and

(PARAM2='+FloatToStr(p2[j])+') and (PARAM3='+FloatToStr(p3[j])+')');

ExecSQL;

Active:=True;

kl:=Query1.RecordCount;

if kl=1 then j:=j+1;

if kl>1 then

begin

j:=j+kl;

nz:=nz+kl;

gr:=gr+1;

end;

end;

end;

Label2.Caption:='Коэффициент мест - '+FloatToStr(Okrugl((kz-

nz+gr)/kz,2))+'.';

end

else Label2.Caption:='Для одного блока не рассчитывается.';

//This is a demo-code for KN & KP

try

with Query1 do

begin

Active:=False;

SQL.Clear;

SQL.Add('Select * from "'+Form1.Table1.TableName+'"');

ExecSQL;

end;

Query1.Active:=True;

Chart1.Enabled:=True;

except

Application.MessageBox('Ошибка инициализации БД. Возможно не установлен

BDE, или база не открыта.','Ошибка',mb_Ok+MB_ICONHAND);

Chart1.Enabled:=False;

Exit;

end;

sbl1:=0; srbl1:=0;

sbl2:=0; srbl2:=0;

sbl3:=0; srbl3:=0;

dx1:=0; dx2:=0; dx3:=0;

sdxq1:=0; sdxq2:=0; sdxq3:=0;

sigm1:=0; sigm2:=0; sigm3:=0;

Query1.First;

if MCon='2' then

begin

for i:=1 to Query1.RecordCount do

begin

block1:=Query1.FieldValues['MARK1']+Query1.FieldValues['MARK2']+Query1.Field

Values['MARK3'];

block2:=Query1.FieldValues['MARK4']+Query1.FieldValues['MARK5']+Query1.Field

Values['MARK6'];

sbl1:=sbl1+block1;

sbl2:=sbl2+block2;

Query1.Next;

end;

srbl1:=sbl1/Query1.RecordCount;

srbl2:=sbl2/Query1.RecordCount;

Query1.First;

for i:=1 to Query1.RecordCount do

begin

block1:=Query1.FieldValues['MARK1']+Query1.FieldValues['MARK2']+Query1.Field

Values['MARK3'];

block2:=Query1.FieldValues['MARK4']+Query1.FieldValues['MARK5']+Query1.Field

Values['MARK6'];

dx1:=dx1+sqr(block1-srbl1);

dx2:=dx2+sqr(block2-srbl2);

Query1.Next;

end;

sdxq1:=dx1/Query1.RecordCount;

sdxq2:=dx2/Query1.RecordCount;

sigm1:=sqrt(sdxq1);

sigm2:=sqrt(sdxq2);

m:=StrToFloat(maxb);

kn[1]:=((m-srbl1)*((m-srbl1)*srbl1-sqr(sigm1))/(m*sqr(sigm1)-(m-

srbl1)*srbl1))-1;

kp[1]:=1-((srbl1*((m-srbl1)*srbl1-sqr(sigm1)))/(m*sqr(sigm1)-(m-

srbl1)*srbl1));

kn[2]:=((m-srbl2)*((m-srbl2)*srbl2-sqr(sigm2))/(m*sqr(sigm2)-(m-

srbl2)*srbl2))-1;

kp[2]:=1-((srbl2*((m-srbl2)*srbl2-sqr(sigm2)))/(m*sqr(sigm2)-(m-

srbl2)*srbl2));

Series3.Clear;

for i:=1 to 2 do

Series3.AddXY(kn[i],kp[i]);

end;

if MCon='1' then

begin

for i:=1 to Query1.RecordCount do

begin

block1:=Query1.FieldValues['SUMMARK'];

sbl1:=sbl1+block1;

Query1.Next;

end;

srbl1:=sbl1/Query1.RecordCount;

Query1.First;

for i:=1 to Query1.RecordCount do

begin

block1:=Query1.FieldValues['SUMMARK'];

dx1:=dx1+sqr(block1-srbl1);

Query1.Next;

end;

sdxq1:=dx1/Query1.RecordCount;

sigm1:=sqrt(sdxq1);

m:=StrToFloat(maxb);

kn[1]:=((m-srbl1)*((m-srbl1)*srbl1-sqr(sigm1))/(m*sqr(sigm1)-(m-

srbl1)*srbl1))-1;

kp[1]:=1-((srbl1*((m-srbl1)*srbl1-sqr(sigm1)))/(m*sqr(sigm1)-(m-

srbl1)*srbl1));

Series3.AddXY(kn[1],kp[1]);

end;

if MCon='3' then

begin

for i:=1 to Query1.RecordCount do

begin

block1:=Query1.FieldValues['MARK1']+Query1.FieldValues['MARK2'];

block2:=Query1.FieldValues['MARK3']+Query1.FieldValues['MARK4'];

block3:=Query1.FieldValues['MARK5']+Query1.FieldValues['MARK6'];

sbl1:=sbl1+block1;

sbl2:=sbl2+block2;

sbl3:=sbl3+block3;

Query1.Next;

end;

srbl1:=sbl1/Query1.RecordCount;

srbl2:=sbl2/Query1.RecordCount;

srbl3:=sbl3/Query1.RecordCount;

Query1.First;

for i:=1 to Query1.RecordCount do

begin

block1:=Query1.FieldValues['MARK1']+Query1.FieldValues['MARK2'];

block2:=Query1.FieldValues['MARK3']+Query1.FieldValues['MARK4'];

block3:=Query1.FieldValues['MARK5']+Query1.FieldValues['MARK6'];

dx1:=dx1+sqr(block1-srbl1);

dx2:=dx2+sqr(block2-srbl2);

dx3:=dx3+sqr(block3-srbl3);

Query1.Next;

end;

sdxq1:=dx1/Query1.RecordCount;

sdxq2:=dx2/Query1.RecordCount;

sdxq3:=dx3/Query1.RecordCount;

sigm1:=sqrt(sdxq1);

sigm2:=sqrt(sdxq2);

sigm3:=sqrt(sdxq3);

m:=StrToFloat(maxb);

kn[1]:=((m-srbl1)*((m-srbl1)*srbl1-sqr(sigm1))/(m*sqr(sigm1)-(m-

srbl1)*srbl1))-1;

kp[1]:=1-((srbl1*((m-srbl1)*srbl1-sqr(sigm1)))/(m*sqr(sigm1)-(m-

srbl1)*srbl1));

kn[2]:=((m-srbl2)*((m-srbl2)*srbl2-sqr(sigm2))/(m*sqr(sigm2)-(m-

srbl2)*srbl2))-1;

kp[2]:=1-((srbl2*((m-srbl2)*srbl2-sqr(sigm2)))/(m*sqr(sigm2)-(m-

srbl2)*srbl2));

kn[3]:=((m-srbl3)*((m-srbl3)*srbl3-sqr(sigm3))/(m*sqr(sigm3)-(m-

srbl3)*srbl3))-1;

kp[3]:=1-((srbl3*((m-srbl3)*srbl3-sqr(sigm3)))/(m*sqr(sigm3)-(m-

srbl3)*srbl3));

Series3.Clear;

for i:=1 to 3 do

Series3.AddXY(kn[i],kp[i]);

end;

m:=0;

Series6.Clear;

for i:=0 to 20 do

begin

Series6.AddXY(m,-1*m);

m:=m+2;

end;

end;

end.

Модуль 7.

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

округления десятичных чисел с указанной степенью точности.

unit foxsoft;

interface

uses SysUtils;

function Okrugl(cs:double;numb:integer):double;

implementation

function Okrugl(cs:Double;numb:integer):double;

var

db,db1,db2:double;

i:int64;

ii,ink,i1:integer;

st:string;

begin

db:=db-int(cs);

ink:=1;

for ii:=1 to numb do ink:=ink*10;

db1:=db*ink;

db2:=cs*ink*100;

i:=trunc(int(db2)/100);

i1:=Trunc(db2-i*100);

if i1>49 then inc(i);

Result:=i/ink;

end;

end.

Литература.

1. Кирьяков Б. С. Педагогическая модель интеллектуального испытания

школьников. – Рязань: Изд-во «Русское слово», 2002.

2. Кирьяков Б. С. Педагогическая модель интеллектуального испытания

учащихся/Вестник Рязанского государственного педагогического

университета. Рязань: РГПУ, 2001.

3. Шарапков А. Н., Кирьяков Б. С. Исследование гуманности режима

соревнования на олимпиадах школьников. // Рязанские физические

олимпиады // Рязань: «РИНФО», 2000. Выпуск 8.

4. Кирьяков Б. С. Проблемы проведения олимпиад в условиях дифференциации

уровня подготовки школьников // Рязанские физические олимпиады//

Выпуск 8, – Рязань: Изд-во «РИНФО», 2000.

5. Кирьяков Б. С. Параметры интеллектуального испытания учащихся на

олимпиаде// Рязанские физические олимпиады// Выпуск 9, – Рязань, 2001.

6. Лишер Р. Delphi. Справочник. – Пер. с англ. – СПб.: «Символ-Плюс»,

2001.

7. Фаронов В. В. Delphi 5. Руководство программиста. – М.: «Нолидж»,

2001.

8. Озеров В. Delphi. Советы программистов. – СПб.: «Символ-Плюс», 2003.

Страницы: 1, 2, 3, 4, 5


на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

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


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.