?? login.pas
字號(hào):
unit login;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls, TFlatButtonUnit, WinSkinData, DB,
ADODB, DosMove, TFlatPanelUnit, Grids, DBGrids, DBGrid3D, DBCtrls,
TFlatGroupBoxUnit, TFlatCheckBoxUnit, TFlatEditUnit, TFlatSpeedButtonUnit,
MSNPopUp, TFlatScrollbarUnit;
type
TfrmLogin = class(TForm)
Image1: TImage;
Label1: TLabel;
btnMin: TFlatButton;
DosMove1: TDosMove;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DsTest: TDataSource;
Timer1: TTimer;
SkinData1: TSkinData;
panLogin: TFlatPanel;
FlatButton1: TFlatButton;
FlatButton2: TFlatButton;
Label2: TLabel;
Edit1: TEdit;
Label3: TLabel;
Edit2: TEdit;
Label4: TLabel;
Edit3: TEdit;
Label5: TLabel;
ComboBox1: TComboBox;
panInfo: TFlatPanel;
lblInfo: TLabel;
lblCount: TLabel;
panTest: TFlatPanel;
DBGrid3D1: TDBGrid3D;
DBMemo1: TDBMemo;
gupBoxCheck: TFlatGroupBox;
ChkA: TFlatCheckBox;
ChkB: TFlatCheckBox;
ChkC: TFlatCheckBox;
ChkD: TFlatCheckBox;
Label6: TLabel;
BtnEnd: TFlatSpeedButton;
FlatSpeedButton2: TFlatSpeedButton;
DBText1: TDBText;
Label7: TLabel;
FlatPanel1: TFlatPanel;
DBNavigator1: TDBNavigator;
DBText2: TDBText;
lblfeek: TLabel;
ADOQuery2: TADOQuery;
lblright: TLabel;
btnBK: TFlatButton;
FlatScrollbar1: TFlatScrollbar;
procedure FlatButton2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FlatButton1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure btnMinClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FlatSpeedButton2Click(Sender: TObject);
procedure ADOQuery1AfterScroll(DataSet: TDataSet);
procedure ChkAClick(Sender: TObject);
procedure ChkBClick(Sender: TObject);
procedure ADOQuery1BeforeScroll(DataSet: TDataSet);
procedure BtnEndClick(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FlatScrollbar1Scroll(Sender: TObject; ScrollPos: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
//考生信息
Type student=Record
Name:string[8]; //姓名
MyClass:string[4]; //班級(jí)
TestPaper:string; //試卷
Score:Integer; //得分
Feedback:string[1]; //反饋否
BeginTime:string; //開(kāi)始時(shí)間
ExamTime:integer; //考試時(shí)間
bk:integer; //補(bǔ)考次數(shù)
end;
//考生答案
Type answer=Record
standard:string[4]; //標(biāo)準(zhǔn)答案
examinee:string[4]; //考生答案
result:integer; //正確否
end;
var
frmLogin: TfrmLogin;
implementation
//全局變量
var
stu:student;
ans:array of answer;
countDown:integer;
examCount:integer;
//拖動(dòng)無(wú)標(biāo)題窗口
Opos, Cpos: Tpoint;
Flag: boolean = false;
{$R *.dfm}
procedure TfrmLogin.FlatButton2Click(Sender: TObject);
begin
close;
application.Terminate;
end;
procedure TfrmLogin.FormActivate(Sender: TObject);
begin
ComboBox1.Items.Clear;
with ADOQuery1 do
begin
close;
sql.clear;
sql.Add('select 考試名稱 from 設(shè)置');
open;
First;
while not ADOQuery1.Eof do
begin
combobox1.Items.Add(trim(FieldValues['考試名稱']));
Next;
end;
end;
end;
procedure TfrmLogin.FlatButton1Click(Sender: TObject);
var
p:boolean;
i:integer;
kl:string; //考試口令
begin
edit1.Text:=trim(edit1.Text);
edit2.Text:=trim(edit2.Text);
edit3.Text:=trim(edit3.Text);
if edit1.Text='' then
begin
Application.MessageBox('請(qǐng)輸入你的姓名。', '信息', 64);
edit1.SetFocus;
abort;
end;
//姓名必須是漢字
p:=true;
for i:=1 to strlen(pchar(edit1.text)) do
if ByteType(edit1.Text,i) = mbSingleByte then p:=false;//中文字符
if p=false then
begin
Application.MessageBox('姓名必須全部由漢字組成。', '信息', 64);
edit1.SetFocus;
abort;
end;
if edit2.Text='' then
begin
Application.MessageBox('請(qǐng)輸入你的班別。', '信息', 64);
edit2.SetFocus;
abort;
end;
if ComboBox1.Text='' then
begin
Application.MessageBox('請(qǐng)選擇試卷。', '信息', 64);
ComboBox1.SetFocus;
abort;
end;
//根據(jù)選擇的試卷驗(yàn)證口令是否正確
with ADOQuery1 do
begin
close;
sql.clear;
sql.Add('select * from 設(shè)置 where 考試名稱=:p1');
parameters.ParamByName('p1').Value:=ComboBox1.Text;
open;
//是否為補(bǔ)考
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('select 姓名 from 成績(jī) where 姓名=:p1 and 班別=:p2 and 試卷=:p3');
ADOQuery2.parameters.ParamByName('p1').Value:=edit1.Text;
ADOQuery2.parameters.ParamByName('p2').Value:=edit2.Text;
ADOQuery2.parameters.ParamByName('p3').Value:=combobox1.Text;
ADOQuery2.Open;
stu.bk:=ADOQuery2.RecordCount;
ADOQuery2.Close;
//允許補(bǔ)考嗎?
if (stu.bk>0) and (FieldByName('可補(bǔ)考次數(shù)').Value<1) then
begin
Application.MessageBox('對(duì)不起,本次考試不允許進(jìn)行補(bǔ)考。', '信息', 64);
edit3.SetFocus;
abort;
end;
//如果是補(bǔ)考,補(bǔ)考是否已超次數(shù)
if stu.bk>(FieldByName('可補(bǔ)考次數(shù)').Value) then
begin
Application.MessageBox(pchar('對(duì)不起,你已經(jīng)進(jìn)行了'+trim(inttostr(stu.bk-1))+'次補(bǔ)考。不能再次補(bǔ)考。'), '信息', 64);
edit3.SetFocus;
abort;
end;
btnBK.Visible:=false;
kl:=trim(FieldByName('口令').AsString);
//如果允許補(bǔ)考,且次數(shù)未超,則進(jìn)行補(bǔ)考
if (FieldByName('可補(bǔ)考次數(shù)').Value>0) and (stu.bk>0) and (stu.bk<=(FieldByName('可補(bǔ)考次數(shù)').Value)) then
begin
kl:=trim(FieldByName('補(bǔ)考口令').AsString);
btnBK.Caption:='第'+trim(inttostr(stu.bk))+'次補(bǔ)考';
btnBK.Visible:=true;
end;
if edit3.Text<>kl then
begin
if stu.bk>0 then
Application.MessageBox('你進(jìn)行的是補(bǔ)考,請(qǐng)輸入正確的補(bǔ)考口令。', '信息', 64)
else
Application.MessageBox('口令不正確。', '信息', 64);
edit3.SetFocus;
abort;
end
else
begin
stu.Name:=edit1.Text;
stu.MyClass:=edit2.Text;
stu.TestPaper:=combobox1.Text;
stu.Score:=0;
stu.Feedback:=FieldByName('反饋否').AsString;
stu.ExamTime:=FieldValues['考試時(shí)間'];
lblInfo.Caption:='考生姓名:'+ stu.Name+' 班級(jí):'+stu.MyClass+' 試卷:'+stu.TestPaper;
//進(jìn)入考試須知
if FieldValues['顯示否']='1' then
Application.MessageBox(pchar(trim(FieldValues['考試須知'])), '考試須知', 64);
//運(yùn)行否
if FieldValues['運(yùn)行否']<>'1' then
begin
close;
application.Terminate;
end
else
//運(yùn)行
begin
panLogin.Visible:=false;
stu.BeginTime:=TimeToStr(Now);
//取題目
close;
sql.clear;
sql.Add('select * from '+stu.TestPaper+' order by 題號(hào)');
open;
DBMemo1.DataSource:=DsTest;
DBText1.DataSource:=DsTest;
DBText1.DataField:='題號(hào)';
DBText2.DataSource:=DsTest;
DBText2.DataField:='標(biāo)準(zhǔn)答案';
//倒計(jì)時(shí),開(kāi)考
countdown:=stu.ExamTime;
Timer1.Enabled:=true;
lblCount.Caption:='倒計(jì)時(shí):'+inttostr(countdown);
panInfo.Visible:=true; //考生信息欄可見(jiàn)
panTest.Visible:=true; //試卷區(qū)可見(jiàn)
//根據(jù)題量設(shè)置考生答案的數(shù)組大小
examCount:=RecordCount;
SetLength(ans,examCount+1);
first;
end;
end;
end;
end;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -