Автоматизированная система распределения мест и оценок качества олимпиадных заданий
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
Страницы: 1, 2, 3, 4, 5, 6, 7
|