📄 u_main.pas
字号:
unit U_Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, PDJ_XPC, DB, ADODB, FlatBoxs, FlatUtils,
FlatBtns, DBCtrls, FlatPanel,jpeg, Grids, DBGrids, PDJ_XPB, PDJ_XPDBC,
PDJ_XPDBG, OleCtrls, SHDocVw, InvokeRegistry, SOAPHTTPDisp,
WebBrokerSOAP, DBClient, SOAPConn, SOAPDomConv, OPToSOAPDomConv,
SOAPHTTPTrans, Rio, SOAPHTTPClient,shellapi;
type
TFrm_Main = class(TForm)
Image1: TImage;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DsTest: TDataSource;
ADOQuery2: TADOQuery;
Timer1: TTimer;
DBText1: TDBText;
lblfeek: TLabel;
DBText2: TDBText;
gupBoxCheck: TFlatGroupBox;
ChkA: TFlatCheckBox;
ChkB: TFlatCheckBox;
ChkC: TFlatCheckBox;
ChkD: TFlatCheckBox;
Label6: TLabel;
FlatPanel1: TFlatPanel;
DBNavigator1: TDBNavigator;
lblCount: TLabel;
lblright: TLabel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Pic: TImage;
Panel1: TPanel;
Btn_xzst: TButton;
Btn_charu: TButton;
Button1: TButton;
Btn_Pic: TButton;
Btn_A2B2: TButton;
Btn_C14: TButton;
Btn_M: TButton;
CbB_ID: TComboBox;
CbB_YxID: TComboBox;
DBTextA: TDBText;
DBTextB: TDBText;
DBTextC: TDBText;
DBTextD: TDBText;
BtnEnd: TPDJXPButton;
Btn_Exit: TPDJXPButton;
DBMemo1: TPDJXPDBMemo;
DBGrid2: TPDJXPDBGrid;
Panel2: TPanel;
Label5: TLabel;
// function GetWebPage(const Url: string):string;
procedure Btn_charuClick(Sender: TObject);
function GetKaoshi(s:string;Position:integer):string;
function GetMaskString(s,Mask:string;Position:integer):string;
procedure Btn_xzstClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ADOQuery1AfterScroll(DataSet: TDataSet);
procedure ADOQuery1BeforeScroll(DataSet: TDataSet);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure ChkAClick(Sender: TObject);
procedure ChkBClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Btn_PicClick(Sender: TObject);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
procedure Btn_A2B2Click(Sender: TObject);
procedure Btn_C14Click(Sender: TObject);
procedure Btn_MClick(Sender: TObject);
procedure Btn_ExitClick(Sender: TObject);
procedure BtnEndClick(Sender: TObject);
procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Label5Click(Sender: TObject);
// procedure DBMemo1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//考生信息
Type student=Record
Name:string[8]; //姓名
MyClass:string[4]; //班级
TestPaper:string; //试卷
Score:Integer; //得分
Feedback:string[1]; //反馈否
BeginTime:string; //开始时间
ExamTime:integer; //考试时间
bk:integer; //补考次数
end;
//考生答案
Type answer=Record
standard:string[4]; //标准答案
examinee:string[4]; //考生答案
result:integer; //正确否
end;
var
Frm_Main: TFrm_Main;
stu:student;
ans:array of answer;
countDown:integer;
examCount:integer;
//拖动无标题窗口
Opos, Cpos: Tpoint;
Flag: boolean = false;
implementation
uses U_DM, U_Login;
{$R *.dfm}
{
var
i: integer;
a: array[1..20000] of integer;
b: array[1..20000] of integer;
j,k: integer;
Loop: boolean;
begin
Randomize;
//a号码 10位数字
for j := 1 to 200000 do
begin
Loop := true;
while (Loop) do begin
i := Random(999999999999999999);
for k := 1 to j do if (i=a[j-1]) or (length(inttostr(i))<>10) then begin
Loop := False;
Break;
end;
if (Loop) then begin
a[j] := i;
Loop := False;
end else Loop := True;
end;
end;
}
//打开网页
{function TFrm_Main.GetWebPage(const Url: string):string;
var
Session,
HttpFile:HINTERNET;
szSizeBuffer:Pointer;
dwLengthSizeBuffer:DWord;
dwReserved:DWord;
dwFileSize:DWord;
dwBytesRead:DWord;
Contents:PChar;
begin
Session:=InternetOpen('',0,niL,niL,0);
HttpFile:=InternetOpenUrl(Session,PChar(Url),niL,0,0,0);
dwLengthSizeBuffer:=1024;
HttpQueryInfo(HttpFile,5,szSizeBuffer,dwLengthSizeBuffer,dwReserved);
GetMem(Contents,dwFileSize);
InternetReadFile(HttpFile,Contents,dwFileSize,dwBytesRead);
InternetCloseHandle(HttpFile);
InternetCloseHandle(Session);
Result:=StrPas(Contents);
FreeMem(Contents);
end; }
function TFrm_Main.GetMaskString(s,Mask:string;Position:integer):string;
var
str:string;
i,Len:integer;
begin
str:='';
for i:=0 to Position - 1 do
begin
if (Pos(Mask,s)<=0) then
begin
str:=s;
Break;
end;
str:=Copy(s,1,(pos(Mask,s) -1));
Len:=Length(str);
s:=Copy(s,Len + 2,Length(s) - Len - 1);
end;
Result:=str;
end;
function TFrm_Main.GetKaoshi(s:string;Position:integer):string;
var
SchID,aStr:String;
a: array[1..20000] of integer;
Total,Range,j,I,k:Integer;
Loop: boolean;
begin
//清除数据
CbB_ID.Items.Clear;
// CbB_YxID.Items.Clear;
//选出试题
begin
SqlStr:='SELECT intNumber,strTppe FROM tblExamInfo';
SqlStr:=SqlStr+' WHERE 1=1 ';
SqlStr:=SqlStr+' and strTppe='+''''+trim(s)+'''';
DM.ExecSql(DM.Qry,SqlStr,True);
///添加判断语句
with DM.Qry do
begin
First;
while Not Eof do
begin
//插入试题
aStr:=Trim(Fields[0].AsString);
aStr:=aStr+'^'+Trim(Fields[1].AsString);
CbB_ID.Items.Add(aStr);
//移动记录
Next;
end;
end;
//试题总数
Total:=CbB_ID.Items.Count;
//选取范围
Range:=Total;
Randomize;
//确定试题数量
for j := 1 to Position do
begin
Loop := true;
while (Loop) do begin
I := Random(Range);
for k := 1 to j do if i=a[j-1] then begin
Loop := False;
Break;
end;
if (Loop) then begin
//被选中的试题
SchID:=CbB_ID.Items[I];
//加入已选列表
CbB_YxID.Items.Add(SchID);
a[j] := i;
Loop := False;
end else Loop := True;
end;
end;
end;
end;
procedure TFrm_Main.Btn_charuClick(Sender: TObject);
var
N,S:Integer;
begin
//// ALTER TABLE [user] ALTER COLUMN [id] COUNTER (1, 1)
//删除试题
begin
SqlStr:='DELETE FROM ExamInfo';
SqlStr:=SqlStr+' WHERE 1=1 ';
DM.ExecSql(DM.Qry,SqlStr,False);
SqlStr:='ALTER TABLE ExamInfo';
SqlStr:=SqlStr+' ALTER COLUMN ID COUNTER (1, 1)';
DM.ExecSql(DM.Qry,SqlStr,False);
end;
N:=CbB_YxID.Items.Count;
for S:=0 to N-1 do
begin
//插入已选试题
SqlStr:='INSERT INTO ExamInfo(QuestionID,intNumber,strTppe,strType_l,strType_x,strQuestion,strA,strB,strC,strD,';
SqlStr:=SqlStr+' strRight_answer,pic,Hint,strYour_answer,chengji,intAll,strPage,AID,BID,CID,DEID,typeA,typeB,typeC,typeE)';
SqlStr:=SqlStr+'SELECT QuestionID,intNumber,strTppe,strType_l,strType_x,strQuestion,strA,strB,strC,strD,';
SqlStr:=SqlStr+' strRight_answer,pic,Hint,strYour_answer,chengji,intAll,strPage,AID,BID,CID,DEID,typeA,typeB,typeC,typeE';
SqlStr:=SqlStr+' FROM tblExamInfo';
SqlStr:=SqlStr+' WHERE 1=1 ';
SqlStr:=SqlStr+' AND intNumber='+''''+GetMaskString(Trim(CbB_YxID.Items[S]),'^',1)+''''; //GetMaskString(Trim(CbB_YxID.Items[S]),'^',1)
SqlStr:=SqlStr+' AND strTppe='+''''+GetMaskString(Trim(CbB_YxID.Items[S]),'^',2)+'''';
SqlStr:=SqlStr+' ORDER BY intNumber';
DM.ExecSql(DM.Qry,SqlStr,False);
end;
// showmessage('成功插入');
end;
procedure TFrm_Main.Btn_xzstClick(Sender: TObject);
//var
//N:Integer;
begin
CbB_YxID.Items.Clear;
GetKaoshi('道路交通安全法律、法规和规章',25);
GetKaoshi('交通信号及其含义',15);
GetKaoshi('道路交通信号及含义',5);
GetKaoshi('安全行车、文明驾驶知识',20);
GetKaoshi('高速公路、山区道路、桥梁、隧道、夜间、恶劣气象和复杂道路条件下的安全驾驶知识',10);
GetKaoshi('出现爆胎、转向失控、制动失灵等紧急情况时临危处置知识',10);
GetKaoshi('机动车总体构造和主要安全装置常识,日常检查和维护基本知识',5);
GetKaoshi('发生交通事故后的自救、急救等基本知识,以及常见危险化学品等知识',5);
GetKaoshi('客车专用试题',5);
// N:=CbB_YxID.Items.Count;
// showmessage('试题成功选出'+inttostr(N));
end;
procedure TFrm_Main.Button1Click(Sender: TObject);
begin
//运行
with ADOQuery1 do
begin
// stu.TestPaper:='ExamInfo';
stu.Score:=0;
// stu.Feedback:='45';
stu.ExamTime:=45;
stu.BeginTime:=TimeToStr(Now);
//取题目
close;
sql.clear;
sql.Add('select * from ExamInfo order by ID');
open;
DBMemo1.DataSource:=DsTest;
//DBMemoA.DataSource:=DsTest;
//DBMemoB.DataSource:=DsTest;
// DBMemoC.DataSource:=DsTest;
// DBMemoD.DataSource:=DsTest;
DBText1.DataSource:=DsTest;
DBText1.DataField:='ID';
DBText2.DataSource:=DsTest;
DBText2.DataField:='strRight_answer';
//倒计时,开考
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -