|
Автоматизированная система распределения мест и оценок качества олимпиадных заданий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. |
|
|||||||||||||||||||||||||||||
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |