unit Utest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ActnList, Placemnt, StdCtrls, Grids, DBGrids, RXDBCtrl,
  DBCtrls, Mask, ToolEdit, ExtCtrls, ComCtrls, RXCtrls, DB,
  IBCustomDataSet, IBTable, CheckLst, DBTables, IBQuery, QuickRpt, QRCtrls;

type
  TFtest = class(TForm)
    ActionList1: TActionList;
    Action1: TAction;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    Button1: TButton;
    Pobchee: TPanel;
    RxDBGrid1: TRxDBGrid;
    StaticText1: TStaticText;
    Button2: TButton;
    Button3: TButton;
    Ddatat: TDBDateEdit;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    Dotdel: TDBComboBox;
    StaticText4: TStaticText;
    StaticText5: TStaticText;
    Tob: TTimer;
    Ptime: TPanel;
    ProgressBar1: TProgressBar;
    ProgressBar2: TProgressBar;
    Rtimeob: TRxLabel;
    Rtimev: TRxLabel;
    StaticText6: TStaticText;
    StaticText7: TStaticText;
    Tvop: TTimer;
    Svopros: TStaticText;
    Button4: TButton;
    Rvibor: TRxLabel;
    Mdan: TMemo;
    Button5: TButton;
    Button6: TButton;
    Dfio: TDBEdit;
    ScrollBox1: TScrollBox;
    rotvet: TCheckListBox;
    Dolch: TDBComboBox;
    N4: TMenuItem;
    ssodvop: TRxLabel;
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure rotvetClick(Sender: TObject);
    procedure TvopTimer(Sender: TObject);
    procedure TobTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure rotvetClickCheck(Sender: TObject);
    
    procedure N4Click(Sender: TObject);
  private
    { Private declarations }
  public
   pld,pldob:integer;
zac,zacob:double;
  flag:boolean;
  end;

var
  Ftest: TFtest;

implementation

uses Uvvod, Udatav, Uotch;

{$R *.dfm}
procedure SetRU;var  Layout: array[0.. KL_NAMELENGTH] of char;
begin
LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE);
end;
procedure TFtest.N2Click(Sender: TObject);
begin
if (datav.Dotvet.State=dsedit) or (datav.Dotvet.State=dsinsert) then datav.Dotvet.Post;
if datav.Trbase.Active=true then datav.Trbase.Commit;
Ftest.Close;
end;

procedure TFtest.N3Click(Sender: TObject);
begin
if inputbox('пароль','Введите пароль','')='пароль' then begin
fvvod.show;
end;
end;

procedure TFtest.Button1Click(Sender: TObject);
begin
//Ftest.Close;
n2.Click;
end;

procedure TFtest.Button2Click(Sender: TObject);
begin
button3.Enabled:=true;

with datav do begin
dobchee.Open;
dobchee.Append;
dobcheedata.Value:=now;
end;
end;

procedure TFtest.Button3Click(Sender: TObject);
var i :integer;
begin
flag:=false;

button3.Enabled:=false;
pld:=0;
zac:=time;
pldob:=0;
zacob:=time;
tob.Enabled:=true;
tvop.Enabled:=true;
mdan.Visible:=true;
with datav do begin
if (dobchee.State=dsedit)or (dobchee.State=dsinsert) then dobchee.Post;
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select * from dobchee where fio='+''''+dfio.Text+'''');
query1.Prepare;
query1.Open;
query1.Last;
query1.First;
if query1.RecordCount>1 then begin
showmessage('Вы уже принимали участие в тесте !'+#13+'Засчитан будет наихудший результат !');
end;

sosnv.open;
svopros.Caption:='Вопрос № '+inttostr(sosnvnidosnv.Value)+' Уровень '+ inttostr(sosnvuroven.Value);
ssodvop.Caption:=sosnvvopros.Value;
sotv.Close;
sotv.SelectSQL.Text:='select * from sotv where nidvop='+inttostr(sosnvnidosnv.value);
sotv.Prepare;
sotv.Open;
mdan.Lines.Clear;
mdan.Lines.Add('Вопрос '+sosnvvopros.Value);
mdan.Lines.Add('Варианты ответов ');
while not sotv.Eof do begin
mdan.Lines.Add(inttostr(sotv.RecNo)+' '+ sotvotvet.Value);
rotvet.Items.Add(sotvotvet.Value);
sotv.Next;
end;
mdan.Lines.Strings[0]:='Вопрос '+sosnvvopros.Value;
end;
end;

procedure TFtest.Button4Click(Sender: TObject);
var a,i :integer;
begin
a:=0;
//if (application.MessageBox('Подвердите ваш выбор !','ВЫ УВЕРЕННЫ ?',mb_yesno+mb_iconquestion)=idyes)then begin
button6.Enabled:=true;
button4.Enabled:=false;
with datav do begin
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('select count(pravda) as kvo from sotv where pravda=1 and nidvop='+sosnvnidosnv.AsString);

query1.Prepare;
query1.Open;
for i:=0 to rotvet.Items.Count-1 do begin
if rotvet.Checked[i]=true then begin
a:=a+1;
end;
end;
if a> query1.FieldByName('kvo').AsInteger then begin
 showmessage('Выбранно ответов Слишком много !' + #13+
' Уберите лишнии галочки ! ');
button4.Enabled:=true;
exit;
end;
if a< query1.FieldByName('kvo').AsInteger then begin
showmessage('Выбранно ответов Слишком мало !' + #13+
' Выбирите ответы еще ! ! ');
button4.Enabled:=true;
exit;
end;

if dotvet.Active=false then dotvet.open;
for i:=0 to rotvet.Items.Count-1 do begin
if rotvet.Checked[i]=true then begin
datav.Sotv.Locate('otvet',rotvet.Items.Strings[i],[]);
dotvet.Append;
dotvetnidmen.Value:=dobcheenid.Value;
dotvetnidvop.Value:=sosnvnidosnv.Value;
dotvetnidotv.Value:= SotvNIDOTV.value;
dotvet.Post;
end;
end;
end;
button6.Click;
//end;

end;


procedure TFtest.rotvetClick(Sender: TObject);
begin
with datav do begin
sotv.Locate('otvet',rotvet.Items[rotvet.ItemIndex],[]);
rvibor.Caption:='ВЫ ВЫБРАЛИ : '+rotvet.Items[rotvet.ItemIndex]+
' индекс '+ inttostr(SotvNIDOTV.value);
end;
end;
procedure TFtest.TvopTimer(Sender: TObject);
begin
progressbar2.Position:=100-pld;
pld:=pld+1;
rtimev.Caption:=timetostr(strtotime('0:02:40')-(time-zac));
if pld=100 then begin
//showmessage('Поторопитесь !');
tvop.Enabled:=false;
end;
end;

procedure TFtest.TobTimer(Sender: TObject);
begin
progressbar1.Position:=100-pldob;
 pldob:=pldob+3;
rtimeob.Caption:=timetostr(strtotime('0:30:00')-(time-zacob));
if pldob=100 then begin
showmessage('Время вышло !');
if (datav.Dotvet.State=dsinsert) or (datav.Dotvet.State=dsedit)
then begin
datav.Dotvet.Post;
datav.Trbase.Commit;
ftest.Close;
end;
end;
end;

procedure TFtest.FormCreate(Sender: TObject);
begin
setru;
end;

procedure TFtest.Button5Click(Sender: TObject);
begin
if (application.MessageBox('Вы хотите закончить тест ?','Окончание теста ',mb_yesno+mb_iconquestion)=idyes)then begin
if (datav.Dotvet.State=dsedit)or (datav.Dotvet.State=dsinsert) then datav.Dotvet.Post;
datav.Trbase.Commit;
mdan.Visible:=false;
showmessage('Тест завершен');
rotvet.Clear;
button3.Enabled:=false;
tob.Enabled:=false;
tvop.Enabled:=false;
progressbar1.Position:=100;
progressbar2.Position:=100;
rtimeob.Caption:='0:30:00';
rtimev.Caption:='0:01:40';
end;
end;

procedure TFtest.Button6Click(Sender: TObject);
begin
rotvet.Items.Clear;
button4.Enabled:=true;
rvibor.Caption:='Вы выбрали';

with datav do begin
sosnv.Next;
if (sosnvuroven.Value=2)and (flag=false) then begin
flag:=true;
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('SELECT Dobchee.DATA,Dobchee.otdel,Dobchee.FIO,   SUM( Sotv.PRAVDA )/COUNT( Sotv.PRAVDA )*100 as poz , Sosnv.UROVEN FROM DOBCHEE Dobchee');
query1.SQL.Add('INNER JOIN DOTVET Dotvet');
query1.SQL.Add('ON  (Dobchee.NID = Dotvet.NIDMEN)');
query1.SQL.Add(' INNER JOIN SOTV Sotv');
query1.SQL.Add('ON  (Dotvet.NIDOTV = Sotv.NIDOTV)');
query1.SQL.Add('INNER JOIN SOSNV Sosnv');
query1.SQL.Add('ON  (Sotv.NIDVOP = Sosnv.NIDOSNV)');
query1.SQL.Add('where fio=:name and Dobchee.DATA=:datat');
query1.SQL.Add('GROUP BY Dobchee.DATA,Dobchee.otdel,Dobchee.FIO,Sosnv.UROVEN');
query1.SQL.Add('ORDER BY Dobchee.FIO');
query1.ParamByName('name').AsString:=dfio.Text;
query1.ParamByName('datat').AsString:=datetostr(now);
query1.Prepare;
query1.Open;
query1.Locate('uroven',1,[]);

if query1.FieldByName('poz').Value<62 then begin
showmessage('Вы набрали слишком мало баллов. Ваш уровень менее Нулевого!'+#13+'ТЕСТ ЗАКОНЧЕН !');
datav.Trbase.Commit;
mdan.Visible:=false;
rotvet.Clear;
button3.Enabled:=false;
tob.Enabled:=false;
tvop.Enabled:=false;
progressbar1.Position:=100;
progressbar2.Position:=100;
rtimeob.Caption:='0:30:00';
rtimev.Caption:='0:02:40';
exit;
end; //nul

if (query1.FieldByName('poz').Value>=62)and (query1.FieldByName('poz').Value<100)  then begin
showmessage('Вы набрали слишком мало баллов. Ваш уровень Нулевой!'+#13+'ТЕСТ ЗАКОНЧЕН !');
datav.Trbase.Commit;
mdan.Visible:=false;
rotvet.Clear;
button3.Enabled:=false;
tob.Enabled:=false;
tvop.Enabled:=false;
progressbar1.Position:=100;
progressbar2.Position:=100;
rtimeob.Caption:='0:30:00';
rtimev.Caption:='0:02:40';
exit;
end; //nul

if query1.FieldByName('poz').Value=100 then begin
showmessage('Вы вышли на первый уровень!');

end; //nul
end; // prov

if sosnv.Eof= true then begin
showmessage('Вы закончили тест !');
query1.Close;
query1.SQL.Clear;
query1.SQL.Add('SELECT Dobchee.DATA,Dobchee.otdel,Dobchee.FIO,   SUM( Sotv.PRAVDA )/COUNT( Sotv.PRAVDA )*100 as poz , Sosnv.UROVEN FROM DOBCHEE Dobchee');
query1.SQL.Add('INNER JOIN DOTVET Dotvet');
query1.SQL.Add('ON  (Dobchee.NID = Dotvet.NIDMEN)');
query1.SQL.Add(' INNER JOIN SOTV Sotv');
query1.SQL.Add('ON  (Dotvet.NIDOTV = Sotv.NIDOTV)');
query1.SQL.Add('INNER JOIN SOSNV Sosnv');
query1.SQL.Add('ON  (Sotv.NIDVOP = Sosnv.NIDOSNV)');
query1.SQL.Add('where fio=:name and Dobchee.DATA=:datat');
query1.SQL.Add('GROUP BY Dobchee.DATA,Dobchee.otdel,Dobchee.FIO,Sosnv.UROVEN');
query1.SQL.Add('ORDER BY Dobchee.FIO');
query1.ParamByName('name').AsString:=dfio.Text;
query1.ParamByName('datat').AsString:=datetostr(now);
query1.Prepare;
query1.Open;
query1.Locate('uroven',2,[]);

if query1.FieldByName('poz').Value>=42.8 then begin
showmessage('Тест завершен. Вы вышли на второй уровень!');

end else begin
showmessage('Тест завершен. Вы остались на первом уровне !');
end;  //nul
datav.Trbase.Commit;
mdan.Visible:=false;
//showmessage('Тест завершен');
rotvet.Clear;
button3.Enabled:=false;
tob.Enabled:=false;
tvop.Enabled:=false;
progressbar1.Position:=100;
progressbar2.Position:=100;
rtimeob.Caption:='0:30:00';
rtimev.Caption:='0:02:40';
exit;

end;
svopros.Caption:='Вопрос № '+inttostr(sosnvnidosnv.Value)+' Уровень '+ inttostr(sosnvuroven.Value);
ssodvop.Caption:=sosnvvopros.Value;
sotv.Close;
sotv.SelectSQL.Text:='select * from sotv where nidvop='+inttostr(sosnvnidosnv.value);
sotv.Prepare;
sotv.Open;
mdan.Lines.Clear;
mdan.Lines.Add('Вопрос '+sosnvvopros.Value);
mdan.Lines.Add('Варианты ответов ');
while not sotv.Eof do begin
mdan.Lines.Add(inttostr(sotv.RecNo)+' '+ sotvotvet.Value);
rotvet.Items.Add(sotvotvet.Value);
sotv.Next;
end;
mdan.Lines.Strings[0]:='Вопрос '+sosnvvopros.Value;
end;
pld:=0;
zac:=time;
tvop.Enabled:=true;
button6.Enabled:=false;
end;

procedure TFtest.rotvetClickCheck(Sender: TObject);
var i :integer;
begin
rvibor.Caption:='';
rvibor.Caption:='Вы выбрали';
for i:=0 to rotvet.Items.Count-1 do begin
 if rotvet.Checked[i]=true then begin
//datav.Sotv.Locate('otvet',rotvet.Items.Strings[i],[]);
rvibor.Caption:=rvibor.Caption+ ' '+rotvet.Items.Strings[i];//+datav.SotvNIDOTV.AsString;
end;
end;
end;



procedure TFtest.N4Click(Sender: TObject);
begin
if inputbox('пароль','Введите пароль','')='пароль' then begin
if Fotch=nil then begin
 Application.CreateForm(TFotch, Fotch);
 // Fotch.Show;
end;
  //else
 // fotch.Show;
 // showwindow(Fotch.Handle,SW_RESTORE);
fotch.qotch.Close;
fotch.qotch.Prepare;
fotch.qotch.Open;
fotch.quickrep1.Preview;
end;
end;
end.
