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

📄 unit1.pas

📁 毕业论文
💻 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 + -