⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client_main_frm.pas

📁 证券公司考试系统,三层架构,从题库自动产生试卷,全部主观题
💻 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 + -