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

📄 ksgl_p.pas

📁 考试系统,用DELPHI实现C/S模式,保证数据的安全和稳定,比起ASP要好一点
💻 PAS
字号:
unit ksgl_p;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DB, DBClient, Grids, DBGridEh, Buttons, StdCtrls,
  PrnDbgeh;

type
  Tf_ksgl = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    cds: TClientDataSet;
    DataSource1: TDataSource;
    dbg: TDBGridEh;
    cdstkbh: TIntegerField;
    cdszkzh: TStringField;
    cdssfzh: TStringField;
    cdsxm: TStringField;
    cdsxb: TSmallintField;
    cdslxfs: TStringField;
    cdslxdz: TStringField;
    cdsxbmc: TStringField;
    bt1: TSpeedButton;
    bt2: TSpeedButton;
    bt4: TSpeedButton;
    bt3: TSpeedButton;
    bt7: TSpeedButton;
    bt6: TSpeedButton;
    bt5: TSpeedButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    rb1: TRadioButton;
    rb2: TRadioButton;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    bt8: TSpeedButton;
    pdbg: TPrintDBGridEh;
    cdsksbh: TIntegerField;
    procedure readdata;
    procedure enedit;
    procedure unedit;
    procedure cdsCalcFields(DataSet: TDataSet);
    procedure bt7Click(Sender: TObject);
    procedure bt8Click(Sender: TObject);
    procedure cdsAfterScroll(DataSet: TDataSet);
    procedure FormShow(Sender: TObject);
    procedure bt1Click(Sender: TObject);
    procedure bt2Click(Sender: TObject);
    procedure bt3Click(Sender: TObject);
    procedure bt4Click(Sender: TObject);
    procedure bt6Click(Sender: TObject);
    procedure bt5Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    sts:smallint;
    vrt:olevariant;
    sSql:string;
  public
    { Public declarations }
  end;

var
  f_ksgl: Tf_ksgl;

implementation

uses dm_p, main_p, zkzgz_p;

{$R *.dfm}

procedure Tf_ksgl.readdata;
begin
   sSql:='select * from k_ksmdb where tkbh='+inttostr(f_main.tkbh)+' order by ksbh';
   dm.skc.AppServer.getdata(sSql,vrt);
   cds.Active:=false;
   cds.Data:=vrt;
end;

procedure Tf_ksgl.enedit;
begin
   bt1.Enabled:=false;
   bt2.Enabled:=false;
   bt3.Enabled:=false;
   bt4.Enabled:=false;
   bt8.Enabled:=false;
   dbg.Enabled:=false;
   bt6.Enabled:=true;
   bt5.Enabled:=true;
   panel2.Enabled:=true;
   edit1.SetFocus;
   if sts=1 then
   begin
       edit1.Text:='';
       edit2.Text:='';
       edit3.Text:='';
       edit4.Text:='';
       edit5.Text:='';
   end;
end;

procedure Tf_ksgl.unedit;
begin
   bt1.Enabled:=true;
   bt2.Enabled:=true;
   bt3.Enabled:=true;
   bt4.Enabled:=true;
   bt8.Enabled:=true;
   dbg.Enabled:=true;
   bt6.Enabled:=false;
   bt5.Enabled:=false;
   panel2.Enabled:=false;
   sts:=0;
end;

procedure Tf_ksgl.cdsCalcFields(DataSet: TDataSet);
begin
   if cds.FieldByName('xb').AsInteger=0 then
        cds.FieldByName('xbmc').AsString:='男'
   else cds.FieldByName('xbmc').AsString:='女';
end;

procedure Tf_ksgl.bt7Click(Sender: TObject);
begin
    close;
end;

procedure Tf_ksgl.bt8Click(Sender: TObject);
var i,k,m,n,hmcd,zdcd:integer;//变量i、k、m和n、准考证号号码总长度、指定的前N位长度
    s,zkzh:string; //前N位的值、准考证号
begin
   if cds.IsEmpty then
   begin
       application.MessageBox('没有设置考生,无需自动生成准考证号!','错误信息',16);
       exit;
   end;
   Application.CreateForm(Tf_zkzgz, f_zkzgz);
   f_zkzgz.showmodal;
   if f_zkzgz.Tag=1 then
   begin
       hmcd:=f_zkzgz.ws1.Value;
       if f_zkzgz.chk1.Checked then i:=0 else
       begin
          i:=1;
          zdcd:=f_zkzgz.ws2.Value;
          s:=trim(f_zkzgz.Edit1.Text);
       end;
   end;
   f_zkzgz.Free;
   m:=1;
   if i=1 then
   begin
       for n:=1 to (hmcd-zdcd) do m:=m*10;
   end
   else
   begin
      for n:=1 to hmcd do m:=m*10;
   end;
   if m<cds.RecordCount then
   begin
       application.MessageBox('考生人数超过可以自动生成的准考证数量,请重新设置生成规则!','错误信息',16);
       exit;
   end;
   sts:=3;
   cds.DisableControls;
   try
       n:=1;
       cds.First;
       while not cds.Eof do
       begin
           zkzh:=inttostr(n);
           k:=length(zkzh);
           if i=0 then //全自动生成
           begin
               for m:=k to hmcd-1 do
               begin
                   zkzh:='0'+zkzh;
               end;
           end
           else
           begin
               for m:=k to hmcd-zdcd-1 do  zkzh:='0'+zkzh;
               zkzh:=s+zkzh;
           end;
           cds.Edit;
           cds.FieldByName('zkzh').AsString:=zkzh;
           cds.Post;
           dm.skc.AppServer.ExecSqls('update k_ksmdb set zkzh='''+zkzh+''' where tkbh='
              +inttostr(f_main.tkbh)+' and ksbh='+cds.FieldByName('ksbh').AsString);
           inc(n);
           cds.Next;
       end;
       cds.EnableControls;
       sts:=0;
       cds.First;
   except
       on e:exception do
       begin
           application.MessageBox(pchar('数据处理失败!'+#13+#13+e.Message),'错误信息',16);
           close;
       end;
   end;
end;

procedure Tf_ksgl.cdsAfterScroll(DataSet: TDataSet);
begin
   if sts>0 then exit;
   if cds.IsEmpty then
   begin
       edit1.Text:='';
       edit2.Text:='';
       edit3.Text:='';
       edit4.Text:='';
       edit5.Text:='';
       exit;
   end;
   edit1.Text:=cds.fieldbyname('zkzh').AsString;
   edit2.Text:=cds.fieldbyname('xm').AsString;
   edit3.Text:=cds.fieldbyname('sfzh').AsString;
   edit4.Text:=cds.fieldbyname('lxfs').AsString;
   edit5.Text:=cds.fieldbyname('lxdz').AsString;
   rb1.Checked:=(cds.FieldByName('xb').AsInteger=0);
   rb2.Checked:=not rb1.Checked;
end;

procedure Tf_ksgl.FormShow(Sender: TObject);
begin
   unedit;
   readdata;
end;

procedure Tf_ksgl.bt1Click(Sender: TObject);
begin
//添加
   sts:=1;
   enedit;
end;

procedure Tf_ksgl.bt2Click(Sender: TObject);
begin
//修改
   sts:=2;
   enedit;
end;

procedure Tf_ksgl.bt3Click(Sender: TObject);
begin
//删除
   if cds.IsEmpty then exit;
   if application.MessageBox('您确定要删除该考生吗?','确认信息',4+32)<>6 then exit;
   try
       dm.skc.AppServer.ExecSqls('delete from k_ksmdb where tkbh='+inttostr(f_main.tkbh)
        +' and ksbh='+cds.FieldByName('ksbh').AsString);
       cds.Delete;
   except
       on e:exception do
       begin
           application.MessageBox(pchar('数据处理失败!'+#13+#13+e.Message),'错误信息',16);
           close;
       end;
   end;
end;

procedure Tf_ksgl.bt4Click(Sender: TObject);
begin
//打印
   if cds.IsEmpty then exit;
   sts:=3;
   pdbg.Preview;
   sts:=0;
   cds.First;
end;

procedure Tf_ksgl.bt6Click(Sender: TObject);
begin
   unedit;
   cds.AfterScroll(cds);
end;

procedure Tf_ksgl.bt5Click(Sender: TObject);
var i:integer;
    s:string;
begin
//存盘
  if trim(edit2.Text)='' then
  begin
     application.MessageBox('请输入考生姓名!','提示信息',48);
     edit2.SetFocus;
     exit;
  end;
  if rb1.Checked then i:=0 else i:=1;
  if sts=1 then
  begin
      dm.skc.AppServer.addksmd(f_main.tkbh,-1,trim(edit1.Text),trim(edit2.Text),i,
      trim(edit3.Text),trim(edit4.Text),trim(edit5.Text),vrt);
  end
  else
  begin
      dm.skc.AppServer.addksmd(f_main.tkbh,cds.FieldByName('ksbh').AsInteger,trim(edit1.Text),
      trim(edit2.Text),i,trim(edit3.Text),trim(edit4.Text),trim(edit5.Text),vrt);
  end;
  s:=vrt;  //如果成功,vrt返回的是考生编号,如果失败,第一个字符是'-'。
  if copy(s,1,1)='-' then//出错
  begin
     s:=copy(s,2,length(s)-1);
     application.MessageBox(pchar(s),'错误信息',16);
     exit;
  end;
  if sts=1 then
  begin
     cds.append;
     cds.FieldByName('ksbh').AsInteger:=strtoint(s);
  end
  else
  begin
     cds.Edit;
  end;
  cds.FieldByName('zkzh').AsString:=trim(edit1.Text);
  cds.FieldByName('xm').AsString:=trim(edit2.Text);
  cds.FieldByName('sfzh').AsString:=trim(edit3.Text);
  cds.FieldByName('lxfs').AsString:=trim(edit4.Text);
  cds.FieldByName('lxdz').AsString:=trim(edit5.Text);
  cds.FieldByName('xb').Asinteger:=i;
  cds.Post;
  unedit;
end;

procedure Tf_ksgl.FormDestroy(Sender: TObject);
begin
   cds.Close;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -