📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, StdCtrls, Grids, DB, DBClient, DBTables,
MConnect, SConnect, ObjBrkr, DBCtrls, Mask;
type
TForm1 = class(TForm)
Panel1: TPanel;
PageControl1: TPageControl;
Login_Exit: TTabSheet;
C_TabSheet: TTabSheet;
J_TabSheet: TTabSheet;
F_TabSheet: TTabSheet;
P_TabSheet: TTabSheet;
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
StringGrid: TStringGrid;
Label3: TLabel;
zkz: TEdit;
ksNameEdit: TEdit;
denglu: TButton;
jiaojuan: TButton;
Exit: TButton;
C_ClientDataSet: TClientDataSet;
C_DataSource: TDataSource;
J_ClientDataSet: TClientDataSet;
J_DataSource: TDataSource;
F_ClientDataSet: TClientDataSet;
F_DataSource: TDataSource;
P_ClientDataSet: TClientDataSet;
P_DataSource: TDataSource;
SocketConnection1: TSocketConnection;
tempTable: TTable;
tempQuery: TQuery;
ruocongSimpleObjectBroker1: TSimpleObjectBroker;
C_Answer: TTable;
J_Answer: TTable;
F_Answer: TTable;
P_Answer: TTable;
C_Answer_DataSource: TDataSource;
J_Answer_DataSource: TDataSource;
F_Answer_DataSource: TDataSource;
P_Answer_DataSource: TDataSource;
DBMemo1: TDBMemo;
DBRadioGroup1: TDBRadioGroup;
C_DBNavigator: TDBNavigator;
DBMemo2: TDBMemo;
DBRadioGroup2: TDBRadioGroup;
DBNavigator1: TDBNavigator;
DBMemo3: TDBMemo;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
Memo2: TMemo;
DBMemo4: TDBMemo;
chengxu_xianshi: TMemo;
Label8: TLabel;
Label9: TLabel;
DBNavigator2: TDBNavigator;
biancheng: TButton;
DBNavigator3: TDBNavigator;
procedure ExitClick(Sender: TObject);
procedure dengluClick(Sender: TObject);
procedure Login_ExitShow(Sender: TObject);
procedure jiaojuanClick(Sender: TObject);
procedure C_TabsheetExit(Sender: TObject);
procedure J_TabsheetExit(Sender: TObject);
procedure F_TabsheetExit(Sender: TObject);
procedure P_TabsheetExit(Sender: TObject);
procedure C_DBNavigatorClick(Sender: TObject; Button: TNavigateBtn);
procedure DBNavigator3Click(Sender: TObject; Button: TNavigateBtn);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
procedure DBNavigator2Click(Sender: TObject; Button: TNavigateBtn);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ksDir,AnswerFileName,HostName: String;
TablesSize,TablesRecordOrder : Variant;
MaxSize : integer;
implementation
{$R *.dfm}
procedure TForm1.ExitClick(Sender: TObject);
begin
SocketConnection1.Connected:=false;
if FileExists( 'd:\'+zkz.Text) then
DeleteFile('d:\'+zkz.Text);
Form1.Close;
end;
procedure tongji;
var i,pAnswer : integer;
begin
with Form1 do
begin
tempQuery.DatabaseName := ksDir;
with tempQuery do
begin
SQL.Clear;
SQL.Add('select 答案 from C_Answer ');
SQL.Add('where 答案!=''''');
Open;
end;
StringGrid.Cells[2,1]:=IntToStr(tempQuery.RecordCount);
StringGrid.Cells[3,1]:=IntToStr(TablesSize[1]-tempQuery.RecordCount);
tempQuery.close;
with tempQuery do
begin
SQL.Clear;
SQL.Add('select 答案 from J_Answer ');
SQL.Add('where 答案!=''''');
Open;
end;
StringGrid.Cells[2,2]:=IntToStr(tempQuery.RecordCount);
StringGrid.Cells[3,2]:=IntToStr(TablesSize[2]-tempQuery.RecordCount);
tempQuery.close;
with tempQuery do
begin
SQL.Clear;
SQL.Add('select 答案1,答案2,答案3,答案4 from F_Answer ');
SQL.Add('where 答案1!='''' or 答案2!='''' or 答案3!='''' or 答案4!=''''');
Open;
end;
StringGrid.Cells[2,3]:=IntToStr(tempQuery.RecordCount);
StringGrid.Cells[3,3]:=IntToStr(TablesSize[3]-tempQuery.RecordCount);
tempQuery.close;
chDir(ksDir);
pAnswer:=0;
for i:=1 to TablesSize[4] do
begin
AnswerFileName:='Answer'+IntToStr(i)+'.c';
if FileExists(AnswerFileName) then pAnswer:=pAnswer+1;
end;
StringGrid.Cells[2,4]:=IntToStr(pAnswer);
StringGrid.Cells[3,4]:=IntToStr(TablesSize[4]- pAnswer);
end
end;
procedure ShowFillField;
var i : integer;
begin
with Form1 do
begin
for i:=1 to 4 do
if i<=F_ClientDataSet.FieldValues['填空数'] then
case i of
1 : begin Label4.Enabled:=true; DBEdit1.Enabled:=true end;
2 : begin Label5.Enabled:=true; DBEdit2.Enabled:=true end;
3 : begin Label6.Enabled:=true; DBEdit3.Enabled:=true end;
4 : begin Label7.Enabled:=true; DBEdit4.Enabled:=true end;
end
else
case i of
1 : begin Label4.Enabled:=false; DBEdit1.Enabled:=false end;
2 : begin Label5.Enabled:=false; DBEdit2.Enabled:=false end;
3 : begin Label6.Enabled:=false; DBEdit3.Enabled:=false end;
4 : begin Label7.Enabled:=false; DBEdit4.Enabled:=false end;
end;
DBEdit1.SetFocus;
end
end;
procedure TForm1.dengluClick(Sender: TObject);
var ksName : OleVariant;
i,j,k : integer;
c : array[0..127] of Char;
sz: dword;
ComputerName,TM_ID,BHSTR : String;
begin
sz := SizeOf(c);
GetComputerName(c, sz); //获取本地的计算机名
ComputerName:=c;
TablesSize:=VarArrayCreate([1,4],varInteger);
SocketConnection1.AppServer.getTablesSize(TablesSize);
MaxSize:= TablesSize[1];
if TablesSize[2]> MaxSize then MaxSize:=TablesSize[2];
if TablesSize[3]> MaxSize then MaxSize:=TablesSize[3];
if TablesSize[4]> MaxSize then MaxSize:=TablesSize[4];
TablesRecordOrder:= VarArrayCreate([1,MaxSize,1,4], varInteger);
SocketConnection1.AppServer.Login(zkz.Text,ComputerName,
ksName,TablesRecordOrder);
if (ksName<>'not found') then
begin
if (length(ksName)>8) then
begin
denglu.Enabled := false;
Exit.Enabled := true;
ShowMessage(ksName);
end
else
if MessageDlg('准考证号:'+zkz.Text
+',考生姓名:'+ksName
+',正确无误吗?',
mtConfirmation,[mbYes,mbNo],0)=mrYes
then
begin
zkz.ReadOnly:=True;
ksNameEdit.Text:=ksName;
ksDir:='d:\'+zkz.Text;
if not DirectoryExists(ksDir) then
begin
MKDir(ksDir);
tempQuery.DatabaseName:=ksDir;
tempTable.DatabaseName:=ksDir;
//创建“选择题”答卷数据表
with tempQuery do
begin
SQL.Clear;
SQL.Add('Create TABLE C_Answer');
SQL.Add('(题目编号 char(5),答案 char(1))');
ExecSQL;
end;
//创建“判断题”答卷数据表
with tempQuery do
begin
SQL.Clear;
SQL.Add('Create TABLE J_Answer');
SQL.Add('(题目编号 char(5),答案 char(1))');
ExecSQL;
end;
//创建"填空题"答卷数据表
with tempQuery do
begin
SQL.Clear;
SQL.Add('Create TABLE F_Answer');
SQL.Add('(题目编号 char(5),答案1 char(48),答案2 char(48),'
+ '答案3 char(48),答案4 char(48))');
ExecSQL;
end;
//创建"编程题"答卷数据表
with tempQuery do
begin
SQL.Clear;
SQL.Add('Create TABLE P_Answer');
SQL.Add('(题目编号 char(5),源程序文件名 char(12))');
ExecSQL;
end;
for j:=1 to 4 do
begin
tempTable.Active:=false;
case j of
1 : tempTable.TableName := 'C_Answer';
2 : tempTable.TableName := 'J_Answer';
3 : tempTable.TableName := 'F_Answer';
4 : tempTable.TableName := 'P_Answer';
end;
tempTable.Active:=true;
tempTable.Edit;
for i:=1 to TablesSize[j] do
begin
tempTable.Append;
BHSTR:=trim(IntToStr(TablesRecordOrder[i,j]));
case j of
1 : TM_ID:='C';
2 : TM_ID:='J';
3 : TM_ID:='F';
4 : TM_ID:='P';
end;
for k:=1 to 5-Length(BHSTR)-1 do TM_ID:=TM_ID+'0';
TM_ID:=TM_ID+BHSTR;
tempTable.FieldByName('题目编号').AsString := TM_ID;
if tempTable.TableName='P_Answer' then
tempTable.FieldByName('源程序文件名').AsString
:='Answer'+IntToStr(i)+'.c';
end;
tempTable.Post;
tempTable.Close;
end;
end;
StringGrid.Cells[0,0]:='题目分类';
StringGrid.Cells[1,0]:='题目数量';
StringGrid.Cells[2,0]:='已做题数';
StringGrid.Cells[3,0]:='未做题数';
StringGrid.Cells[0,1]:='选择题';
StringGrid.Cells[0,2]:='判断题';
StringGrid.Cells[0,3]:='填空题';
StringGrid.Cells[0,4]:='编程题';
for i:=1 to 4 do StringGrid.Cells[1,i]:=TablesSize[i];
C_Answer.Active:=false;
C_Answer.DatabaseName:=ksDir;
C_Answer.Active:=True;
J_Answer.Active:=false;
J_Answer.DatabaseName:=ksDir;
J_Answer.Active:=True;
F_Answer.Active:=false;
F_Answer.DatabaseName:=ksDir;
F_Answer.Active:=True;
P_Answer.Active:=false;
P_Answer.DatabaseName:=ksDir;
P_Answer.Active:=True;
jiaojuan.Enabled:=True;
PageControl1.Visible:=true;
C_TabSheet.TabVisible :=true;
J_TabSheet.TabVisible := true;
F_TabSheet.TabVisible := true;
P_TabSheet.TabVisible := true;
denglu.Enabled:=false;
C_ClientDataSet.Open;
J_ClientDataSet.Open;
F_ClientDataSet.Open;
P_ClientDataSet.Open;
tongji;
end
end
else
MessageDlg('准考证号'+zkz.Text + '的输入可能有误,请仔细校对后重新输入!',
mtWarning,[mbOk],0);
end;
procedure TForm1.Login_ExitShow(Sender: TObject);
begin
if zkz.ReadOnly =False then zkz.SetFocus;
end;
procedure TForm1.jiaojuanClick(Sender: TObject);
begin
tongji;
if MessageDlg('确信交卷吗(一旦交卷就不能再进行任何修改)?',
mtConfirmation,[mbNo,mbYes],0)=mrYes
then
begin
C_ClientDataSet.Close;
C_Answer.Edit;
C_Answer.Post;
C_Answer.Close;
J_ClientDataSet.Close;
J_Answer.Edit;
J_Answer.Post;
J_Answer.Close;
F_ClientDataSet.Close;
F_Answer.Edit;
F_Answer.Post;
F_Answer.Close;
P_ClientDataSet.Close;
P_Answer.Edit;
P_Answer.Post;
P_Answer.Close;
jiaojuan.Enabled:=false;
C_TabSheet.TabVisible := false;
J_TabSheet.TabVisible := false;
F_TabSheet.TabVisible := false;
P_TabSheet.TabVisible := false;
Exit.Enabled:=true;
end
end;
procedure TForm1.C_TabsheetExit(Sender: TObject);
begin
C_Answer.Edit;
C_Answer.Post;
end;
procedure TForm1.J_TabsheetExit(Sender: TObject);
begin
J_Answer.Edit;
J_Answer.Post;
end;
procedure TForm1.F_TabsheetExit(Sender: TObject);
begin
F_Answer.Edit;
F_Answer.Post;
end;
procedure TForm1.P_TabsheetExit(Sender: TObject);
begin
P_Answer.Edit;
P_Answer.Post;
end;
procedure TForm1.C_DBNavigatorClick(Sender: TObject; Button: TNavigateBtn);
begin
C_ClientDataSet.FindKey([string(C_Answer.FieldValues['题目编号'])]);
tongji;
end;
procedure TForm1.DBNavigator3Click(Sender: TObject; Button: TNavigateBtn);
begin
F_ClientDataSet.FindKey([string(F_Answer.FieldValues['题目编号'])]);
ShowFillField;
tongji;
end;
procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
begin
J_ClientDataSet.FindKey([string(J_Answer.FieldValues['题目编号'])]);
tongji;
end;
procedure TForm1.DBNavigator2Click(Sender: TObject; Button: TNavigateBtn);
begin
P_ClientDataSet.FindKey([string(P_Answer.FieldValues['题目编号'])]);
AnswerFileName:= P_Answer.FieldValues['源程序文件名'];
if FileExists(AnswerFileName) then
chengxu_xianshi.Lines.LoadFromFile(AnswerFileName)
else
chengxu_xianshi.Lines.Clear;
tongji;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -