📄 client_main_frm.pas
字号:
unit Client_Main_Frm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, ComCtrls, ToolWin, ImgList, Buttons, ActnList, DB, ADODB,
jpeg, StdCtrls;
type
TMain_Frm = class(TForm)
ToolBar1: TToolBar;
StatusBar1: TStatusBar;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
ImageList1: TImageList;
SpeedButton4: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
SpeedButton8: TSpeedButton;
SpeedButton9: TSpeedButton;
SpeedButton11: TSpeedButton;
SpeedButton1: TSpeedButton;
ActionList: TActionList;
close: TAction;
DuoXiangXuanZhe: TAction;
DanXiangXuanZhe: TAction;
PanDuanTi: TAction;
Show_Form_Bevel: TBevel;
Submit: TAction;
Update_Psw: TAction;
History_Achievement: TAction;
Panel1: TPanel;
Splitter1: TSplitter;
Image1: TImage;
SpeedButton3: TSpeedButton;
Begin_Exam: TAction;
Exam_Timer: TTimer;
SpeedButton12: TSpeedButton;
Accounts_Manage: TAction;
N5: TMenuItem;
procedure closeExecute(Sender: TObject);
procedure Show_Form_Action(Frm:Tform);
procedure DuoXiangXuanZheExecute(Sender: TObject);
procedure DanXiangXuanZheExecute(Sender: TObject);
procedure PanDuanTiExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SubmitExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Update_PswExecute(Sender: TObject);
procedure History_AchievementExecute(Sender: TObject);
procedure Begin_ExamExecute(Sender: TObject);
procedure Exam_TimerTimer(Sender: TObject);
procedure Accounts_ManageExecute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Main_Frm: TMain_Frm;
implementation
uses DuoXiangXuanZhe_Frm, DanXiangXuanZhe_Frm, PanDuanTi_Frm,
Client_BenDi_DataModule, Client_Data_Module, login_pas, Update_Psw_Frms,
History_Achievement_Frms, Flash_Frm, ShouYe_Frm, Accounts_Manage_Frms;
{$R *.dfm}
procedure TMain_Frm.Show_Form_Action(Frm:Tform);
begin
Show_Form_Bevel.BringToFront;
Frm.Parent := Main_Frm;
Frm.Align := alClient;
Frm.show;
Frm.BringToFront;
end;
procedure TMain_Frm.closeExecute(Sender: TObject);
var
Fname:string;
begin
If MessageDlg('您确定要退出吗?',mtConfirmation,[mbYes,mbno],0)=mrYes
then
begin
FName:=Names;{将Names的类型变成String}
{------------------------中间件上日志记录-----------------------------------------}
If Exam_Kinds='内部考核' Then
Remote_DataModule.Exam_SocketConnection.AppServer.Action_Log('用户名:'+Login_Name
+',员工名称: '+ FName,Sales_Department,Department, '动作:断开连接');
If Exam_Kinds='招聘考试' then
Remote_DataModule.Exam_SocketConnection.AppServer.Action_Log(
'考生名称: '+ KSMC+', 身份证号:'+SFZH,'招聘考试','', '动作:断开连接');
{------------------------中间件上日志记录-----------------------------------------}
Application.Terminate;
{关闭程序之前清空所有试题记录。}
Client_DataModule.Select_Subject_Table_Delete.ExecSQL;
end;
end;
procedure TMain_Frm.DuoXiangXuanZheExecute(Sender: TObject);
begin
Show_Form_Action(DuoXiang_Frm);
{With Client_DataModule do
begin
If DanXuan_Subject_Table.state=dsEdit then DanXuan_Subject_Table.Post;
If PanDuan_Subject_Table.state=dsEdit then PanDuan_Subject_Table.Post;
DuoXuan_Subject_Table.Edit;
end;
DuoXiang_Frm.DuoXuan_DBCtrlGrid.EditMode:=true; }
end;
procedure TMain_Frm.DanXiangXuanZheExecute(Sender: TObject);
begin
Show_Form_Action(DanXiang_Frm);
{ With Client_DataModule do
begin
If DuoXuan_Subject_Table.state=dsEdit then DuoXuan_Subject_Table.Post;
If PanDuan_Subject_Table.state=dsEdit then PanDuan_Subject_Table.Post;
DanXuan_Subject_Table.Edit;
end;
DanXiang_Frm.DanXuan_DBCtrlGrid.EditMode:=true; }
end;
procedure TMain_Frm.PanDuanTiExecute(Sender: TObject);
begin
Show_Form_Action(PanDuan_Frm);
{ With Client_DataModule do
begin
If DuoXuan_Subject_Table.state=dsEdit then DuoXuan_Subject_Table.Post;
If DanXuan_Subject_Table.state=dsEdit then DanXuan_Subject_Table.Post;
PanDuan_Subject_Table.Edit;
end;
PanDuan_Frm.PanDuan_DBCtrlGrid.EditMode:=true; }
end;
procedure TMain_Frm.FormShow(Sender: TObject);
begin
StatusBar1.Panels.Items[0].Text:=Exam_Name;
If Exam_Kinds='招聘考试' then
begin
Update_Psw.Enabled:=False;
History_Achievement.Enabled:=False;
end;
Show_Form_Action(Photo_Frm); {显示首页}
StatusBar1.Panels.Items[1].Text:='考试时间:'+Inttostr(Exam_Time)+'分钟';
{赋予营业部管理人员管理营业部帐号的权限}
If Purview='B' then Accounts_Manage.Enabled:=True;
end;
procedure TMain_Frm.SubmitExecute(Sender: TObject);
var
key_value:variant; //答案值
Point:Double; //分数
Fname:string;
begin
{递交单选、多选和判断题数据到本地数据库}
With Client_DataModule do
Begin
If DanXuan_Subject_Table.state=dsEdit then DanXuan_Subject_Table.Post;
If DuoXuan_Subject_Table.state=dsEdit then DuoXuan_Subject_Table.Post;
If PanDuan_Subject_Table.state=dsEdit then PanDuan_Subject_Table.Post;
end;
FName:=Names;{将Names的类型变成String}
{------------------------中间件上日志记录-----------------------------------------}
If Exam_Kinds='内部考核' Then
Remote_DataModule.Exam_SocketConnection.AppServer.Action_Log('用户名:'+Login_Name
+',员工名称: '+ FName,Sales_Department,Department, '动作:递交试卷!成绩计算中。。。');
If Exam_Kinds='招聘考试' then
Remote_DataModule.Exam_SocketConnection.AppServer.Action_Log(
'考生名称: '+ KSMC+', 身份证号:'+SFZH,'招聘考试','', '动作:递交试卷!成绩计算中。。。');
{------------------------中间件上日志记录-----------------------------------------}
{计时失效}
Exam_Timer.Enabled:=False;
{隐藏主界面}
Main_Frm.Hide;
{显示交卷提示界面}
Flash_Form.Show;
Flash_Form.TiShi_Label.Caption:='正在计算成绩,请稍候。。。';
{延迟一段很短的时间}
Application.ProcessMessages;
Sleep(10);
{递交试卷,核对所有试题答案,以题目ID号为输入参数,调用远程过程返回正确答案并判断是否正确
同时计算得分}
Point:=0;
With Client_DataModule do
begin
{---------------------对单选题答案进行服务器和客户端配对---------------------}
With DanXuan_Subject_Table do
begin
If DanXuan_Subject_Table.state=dsEdit then Post;
//DanXuan_DS.DataSet:=nil;
Open;
First;
While Not Eof do
begin
Remote_DataModule.Exam_SocketConnection.AppServer.
Active_Select_Subject_Key_Value_SP(DanXuan_Subject_TableSubject_ID.AsString,key_value);
IF key_value=Client_DataModule.Calculate_Key_Value
(DanXuan_Subject_TableA_Select.Value,DanXuan_Subject_TableB_Select.Value,
DanXuan_Subject_TableC_Select.Value,DanXuan_Subject_TableD_Select.Value,false,false)
then
Point:=Point+DanXuan_Subject_TableSelect_Subject_value.Value;
Next;
end;
end;
{---------------------对单选题答案进行服务器和客户端配对---------------------}
{---------------------对多选题答案进行服务器和客户端配对---------------------}
With DuoXuan_Subject_Table do
begin
If DuoXuan_Subject_Table.state=dsEdit then Post;
//DuoXuan_DS.DataSet:=nil;
Open;
First;
While Not Eof do
begin
Remote_DataModule.Exam_SocketConnection.AppServer.
Active_Select_Subject_Key_Value_SP(DuoXuan_Subject_TableSubject_ID.AsString,key_value);
IF key_value=Client_DataModule.Calculate_Key_Value
(DuoXuan_Subject_TableA_Select.Value,DuoXuan_Subject_TableB_Select.Value,
DuoXuan_Subject_TableC_Select.Value,DuoXuan_Subject_TableD_Select.Value,
DuoXuan_Subject_TableE_Select.Value,DuoXuan_Subject_TableF_Select.Value)
then
Point:=Point+DuoXuan_Subject_TableSelect_Subject_value.Value;
Next;
end;
end;
{---------------------对多选题答案进行服务器和客户端配对---------------------}
{---------------------对判断题答案进行服务器和客户端配对---------------------}
With PanDuan_Subject_Table do
begin
If PanDuan_Subject_Table.state=dsEdit then Post;
//PanDuan_DS.DataSet:=nil;
Open;
First;
While Not Eof do
begin
Remote_DataModule.Exam_SocketConnection.AppServer.
Active_Select_Subject_Key_Value_SP(PanDuan_Subject_TableSubject_ID.AsString,key_value);
IF key_value=Client_DataModule.Calculate_Key_Value
(PanDuan_Subject_TableA_Select.Value,PanDuan_Subject_TableB_Select.Value,
False,False,False,False)
then
Point:=Point+PanDuan_Subject_TableSelect_Subject_value.Value;
Next;
end;
end;
{---------------------对判断题答案进行服务器和客户端配对---------------------}
end;
{-------------通过调用远程过程将得分情况记录到服务器上------------------------}
With Remote_DataModule do
begin
If Exam_Kinds='招聘考试' then
begin
Achievement:=Floattostr(point);
Exam_SocketConnection.AppServer.Active_Achievement_Table_Insert_SP
(KSMC, ' ', SFZH, ' ', ' ', ' ',
Achievement, Exam_Name, ' ', Exam_Kinds,Begin_Exam_Datetime);
end;
If Exam_Kinds='内部考核' then
begin
ID_card:='';
Achievement:=Floattostr(point);
Exam_Specialty:='';
Exam_SocketConnection.AppServer.Active_Achievement_Table_Insert_SP
(Names, Sex, ID_card, Employee_Code, Sales_Department, Department,
Achievement, Exam_Name, Exam_Specialty, Exam_Kinds,Begin_Exam_Datetime);
end;
end;
{-------------通过调用远程过程将得分情况记录到服务器上------------------------}
{------------------------中间件上日志记录-----------------------------------------}
If Exam_Kinds='内部考核' Then
Remote_DataModule.Exam_SocketConnection.AppServer.Action_Log('用户名:'+Login_Name
+',员工名称: '+ FName,Sales_Department,Department, '动作:成绩计算结束,分数是'+Floattostr(point)+'分');
If Exam_Kinds='招聘考试' then
Remote_DataModule.Exam_SocketConnection.AppServer.Action_Log(
'考生名称: '+ KSMC+', 身份证号:'+SFZH,'招聘考试','', '动作:成绩计算结束,分数是'+Floattostr(point)+'分');
{------------------------中间件上日志记录-----------------------------------------}
{考试结束,屏蔽'单选','多选','判断题','递交试卷'按纽}
DanXiangXuanZhe.Enabled:=false;
DuoXiangXuanZhe.Enabled:=false;
PanDuanTi.Enabled:=false;
Submit.Enabled:=false;
//递交试卷之前清空所有试题记录。
Client_DataModule.Select_Subject_Table_Delete.ExecSQL;
Show_Form_Action(Photo_Frm); {显示首页}
{关闭交卷界面}
Flash_Form.close;
{显示主界面}
Main_Frm.Show;
showmessage('您今次考试的分数是:'+floattostr(point)+'分');
StatusBar1.Panels.Items[0].Text:= '您今次考试的分数是:'+floattostr(point)+'分';
end;
procedure TMain_Frm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
closeExecute(self);
end;
procedure TMain_Frm.Update_PswExecute(Sender: TObject);
begin
Update_Psw_Frm.show;
end;
procedure TMain_Frm.History_AchievementExecute(Sender: TObject);
Var
FName:string;
begin
FName:=Names;{将Names的类型变成String}
{------------------------中间件上日志记录-----------------------------------------}
Remote_DataModule.Exam_SocketConnection.AppServer.Action_Log('用户名:'+Login_Name
+',员工名称: '+ FName,Sales_Department,Department, '动作:查询历史成绩!');
{------------------------中间件上日志记录-----------------------------------------}
Show_Form_Action(History_Achievement_Frm);
end;
procedure TMain_Frm.Begin_ExamExecute(Sender: TObject);
var
Fname:string;
begin
FName:=Names;{将Names的类型变成String}
{------------------------中间件上日志记录-----------------------------------------}
If Exam_Kinds='内部考核' Then
Remote_DataModule.Exam_SocketConnection.AppServer.Action_Log('用户名:'+Login_Name
+',员工名称: '+ FName,Sales_Department,Department, '动作:'+Exam_Name+' 开始考试。。');
If Exam_Kinds='招聘考试' then
Remote_DataModule.Exam_SocketConnection.AppServer.Action_Log(
'考生名称: '+ KSMC+', 身份证号:'+SFZH,'招聘考试','', '动作:'+Exam_Name+' 开始考试。。');
{------------------------中间件上日志记录-----------------------------------------}
Begin_Exam_Datetime:=datetimetostr(now()); {记录开考时间}
StatusBar1.Panels.Items[2].Text:='开考时间:'+Begin_Exam_Datetime; {显示开考时间}
Exam_Timer.Enabled:=True;
Exam_Timer.Interval:=Exam_Time*1000*60;{规定考试时间}
{显示题目按纽}
DanXiangXuanZhe.Enabled:=True;
DuoXiangXuanZhe.Enabled:=True;
PanDuanTi.Enabled:=True;
Submit.Enabled:=True;
Begin_Exam.Enabled:=False;
{显示默认界面--单选}
DanXiangXuanZheExecute(self);
end;
procedure TMain_Frm.Exam_TimerTimer(Sender: TObject);
begin
showmessage('很抱歉,您的考试时间已到!');
SubmitExecute(Self);
end;
procedure TMain_Frm.Accounts_ManageExecute(Sender: TObject);
Var
FName:string;
begin
FName:=Names;{将Names的类型变成String}
{------------------------中间件上日志记录-----------------------------------------}
Remote_DataModule.Exam_SocketConnection.AppServer.Action_Log('用户名:'+Login_Name
+',员工名称: '+ FName,Sales_Department,Department, '动作:进行营业部帐号维护!');
{------------------------中间件上日志记录-----------------------------------------}
With Remote_DataModule do
begin
{显示下载提示界面}
Flash_Form.Show;
Flash_Form.TiShi_Label.Caption:='数据下载中,请稍候。。。';
{延迟一段很短的时间}
Application.ProcessMessages;
Sleep(10);
Employee_Table_Client.Close;
Employee_Table_Client.Open;
Flash_Form.Close;
end;
Show_Form_Action(Accounts_Manage_Frm);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -