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

📄 jshs_form.pas

📁 图书管理系统2.0版
💻 PAS
字号:
unit JSHS_Form;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, ComCtrls, TFlatComboBoxUnit,
  TFlatEditUnit, TFlatGroupBoxUnit, TFlatSpeedButtonUnit,DB,DBTables,
  TFlatRadioButtonUnit, TFlatMemoUnit, TFlatButtonUnit;

type
  TJSHS_F = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Panel2: TPanel;
    Panel3: TPanel;
    Label2: TLabel;
    JSHS_PC: TPageControl;
    JS_TS: TTabSheet;
    HS_TS: TTabSheet;
    JS_FRBtn: TFlatRadioButton;
    HS_FRBtn: TFlatRadioButton;
    TSBH_FE: TFlatEdit;
    KS_FBtn: TFlatSpeedButton;
    Bevel1: TBevel;
    Label4: TLabel;
    JSJSZBH_FE: TFlatEdit;
    JSQD_FBtn: TFlatButton;
    Bevel2: TBevel;
    Close_Btn: TButton;
    Panel4: TPanel;
    Label3: TLabel;
    JSSM_FE: TFlatEdit;
    Label5: TLabel;
    JSZZ_FE: TFlatEdit;
    Label8: TLabel;
    JSCBRQ_FE: TFlatEdit;
    Label9: TLabel;
    JSCBS_FE: TFlatEdit;
    JSSYSL_FE: TFlatEdit;
    Label11: TLabel;
    JSDJ_FE: TFlatEdit;
    Label10: TLabel;
    Panel5: TPanel;
    Label6: TLabel;
    Label12: TLabel;
    Label15: TLabel;
    Label17: TLabel;
    HSSM_FE: TFlatEdit;
    HSZZ_FE: TFlatEdit;
    HSCBS_FE: TFlatEdit;
    HSDJ_FE: TFlatEdit;
    Label13: TLabel;
    JSSL_FE: TFlatEdit;
    Bevel3: TBevel;
    Label14: TLabel;
    HSXM_FE: TFlatEdit;
    Label16: TLabel;
    HSSL_FE: TFlatEdit;
    Bevel4: TBevel;
    Label18: TLabel;
    HSCGTS_FE: TFlatEdit;
    Lable1: TLabel;
    HSFJ_FE: TFlatEdit;
    HSQD_FBtn: TFlatButton;
    Label7: TLabel;
    HSBH_FE: TFlatEdit;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure JS_FRBtnClick(Sender: TObject);
    procedure HS_FRBtnClick(Sender: TObject);
    procedure Close_BtnClick(Sender: TObject);
    procedure KS_FBtnClick(Sender: TObject);
    procedure JSQD_FBtnClick(Sender: TObject);
    procedure HSQD_FBtnClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  JSHS_F: TJSHS_F;

implementation

uses
  Common_Unit,DateUtils, ShowBook_Form;

{$R *.dfm}

var
  JYXX_T:TTable;

procedure TJSHS_F.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;
//***********************************************************************************
procedure TJSHS_F.FormDestroy(Sender: TObject);
begin
  JYXX_T.Close;
  FreeAndNil(JYXX_T);
  JSHS_F:=nil;
end;
//***********************************************************************************
procedure TJSHS_F.FormCreate(Sender: TObject);
begin
  JS_TS.TabVisible:=false;
  HS_TS.TabVisible:=false;
  JS_FRBtn.Checked:=true;

  JYXX_T:=TTable.Create(nil);
  JYXX_T.DatabaseName:=DataPath;
  JYXX_T.TableName:='JYXXB.db';
  JYXX_T.Open;
end;
//***********************************************************************************
procedure TJSHS_F.JS_FRBtnClick(Sender: TObject);
begin
  Label2.Caption:='图书编号:';
  TSBH_FE.Text:='';
  TSBH_FE.MaxLength:=13;
  JSHS_PC.ActivePage:=JS_TS;

  TSBH_FE.Text:='';
  JSSM_FE.Text:='';
  JSZZ_FE.Text:='';
  JSCBRQ_FE.Text:='';
  JSCBS_FE.Text:='';
  JSDJ_FE.Text:='';
  JSSYSL_FE.Text:='';
  JSJSZBH_FE.Text:='';
  JSSL_FE.Text:='';
end;
//***********************************************************************************
procedure TJSHS_F.HS_FRBtnClick(Sender: TObject);
begin
  Label2.Caption:='借书证号:';
  TSBH_FE.MaxLength:=10;
  JSHS_PC.ActivePage:=HS_TS;
  TSBH_FE.Text:='';

  HSBH_FE.Text:='';
  HSSM_FE.Text:='';
  HSZZ_FE.Text:='';
  HSCBS_FE.Text:='';
  HSDJ_FE.Text:='';
  HSSM_FE.Text:='';
  HSSL_FE.Text:='';
  HSCGTS_FE.Text:='';
  HSFJ_FE.Text:='';
end;
//***********************************************************************************
procedure TJSHS_F.Close_BtnClick(Sender: TObject);
begin
  close;
end;
//***********************************************************************************
procedure TJSHS_F.KS_FBtnClick(Sender: TObject);        //开始借书还书
var
  TSJBXX_Q,YHDA_Q:TQuery;
  p:TPoint;
begin
  if JS_FRBtn.Checked then           //借书
    begin
      TSJBXX_Q:=TQuery.Create(nil);
      TSJBXX_Q.DatabaseName:=DataPath;
      TSJBXX_Q.SQL.Add('Select * From TSJBXX Where TSBH=:TSBH');
      TSJBXX_Q.ParamByName('TSBH').AsString:=TSBH_FE.Text;
      TSJBXX_Q.Open;
      if TSJBXX_Q.RecordCount=0 then
        begin
          MessageBox(handle,'输入的图书编号有错!','编号错误',MB_ok or MB_ICONERROR);
          FreeAndNil(TSJBXX_Q);
          TSBH_FE.SetFocus;
          exit;
        end;

      JSSM_FE.Text:=TSJBXX_Q.FieldValues['Name'];
      JSZZ_FE.Text:=TSJBXX_Q.FieldValues['Auther'];
      JSCBRQ_FE.Text:=DateToStr(TSJBXX_Q.FieldValues['OutDate']);
      JSCBS_FE.Text:=TSJBXX_Q.FieldValues['CBS'];
      JSDJ_FE.Text:=FloatToStr(TSJBXX_Q.FieldValues['Cost']);
      JSSYSL_FE.Text:=IntToStr(TSJBXX_Q.FieldValues['LastNum']);
    end
    else begin                      //还书
      YHDA_Q:=TQuery.Create(nil);
      YHDA_Q.DatabaseName:=DataPath;
      YHDA_Q.SQL.Add('Select * From YH Where UserID=:UserID');
      YHDA_Q.ParamByName('UserID').AsString:=TSBH_FE.Text;  //用户ID号
      YHDA_Q.Open;
      if YHDA_Q.Bof and YHDA_Q.Eof then
        begin
          MessageBox(handle,'输入的借书证号有错!','错误',MB_ok or MB_ICONERROR);
          FreeAndNil(YHDA_Q);
          TSBH_FE.SetFocus;
          exit;
        end
        else begin
          //BH:=TSBH_FE.Text; 用全局变量共享数据
          P.x := KS_FBtn.Left;
          P.y := KS_FBtn.Top +KS_FBtn.Height;
          with TShowBook_F.Create(nil) do
            try
              Top := Panel3.ClientToScreen(P).y;
              Left:= Panel3.ClientToScreen(P).x;
              ShowModal;
            finally
              Free;
            end;
        end;
    end;
  FreeAndNil(TSJBXX_Q);
end;
//***********************************************************************************
procedure TJSHS_F.JSQD_FBtnClick(Sender: TObject);    //借书确定
var
  MaxNum,OldNum,MaxDate,SYSL:integer;
  JYXX_Q,YHDA_Q,YH_Q:TQuery;
  TSJBXX_T:TTable;
begin
  JYXX_Q:=TQuery.Create(nil);            //查看这本书用户是否已经借了但还没有还
  JYXX_Q.DatabaseName:=DataPath;
  JYXX_Q.SQL.Add('Select * From JYXXB Where UserID=:UserID and TSBH=:TSBH and HDate is Null');
  JYXX_Q.ParamByName('UserID').AsString:=JSJSZBH_FE.Text;
  JYXX_Q.ParamByName('TSBH').AsString:=TSBH_FE.Text;
  JYXX_Q.Open;
  if JYXX_Q.RecordCount>0 then
    begin
      MessageBox(handle,'这本书你已经借而还没有还,不能重复借!','错误',MB_ok or MB_ICONERROR);
      FreeAndNil(JYXX_Q);
      TSBH_FE.SetFocus;
      exit;
    end;

  if JSSL_FE.Text='' then                //检查借书数量是否正确
    begin
      MessageBox(handle,'借书数量不能为空','错误',MB_ok or MB_ICONERROR);
      exit;
    end
    else try
           StrToInt(JSSL_FE.Text);
         except
           MessageBox(handle,'借书数量必须为整数','错误',MB_ok or MB_ICONERROR);
           exit;
         end;

  YH_Q:=TQuery.Create(nil);            //检查借书证号是否正确
  YH_Q.DatabaseName:=DataPath;
  YH_Q.SQL.Add('Select 1 From YH Where UserID=:UserID');
  YH_Q.ParamByName('UserID').AsString:=JSJSZBH_FE.Text;
  YH_Q.Open;
  if YH_Q.RecordCount=0 then
    begin
      MessageBox(handle,'你输入的借书证号不存在,请检查!','错误',MB_ok or MB_ICONERROR);
      FreeAndNil(YH_Q);
      exit;
    end;
  FreeAndNil(YH_Q);

  JYXX_Q.Close;                                      //取得已经借了的且没有还书的数目
  JYXX_Q.SQL.Clear;
  JYXX_Q.SQL.Add('Select * From JYXXB Where UserID=:UserID and HDate is Null');
  JYXX_Q.ParamByName('UserID').AsString:=JSJSZBH_FE.Text;
  JYXX_Q.Open;
  OldNum:=0;
  if not(JYXX_Q.Bof and JYXX_Q.Eof) then
    begin
      while not JYXX_Q.Eof do
        begin
          //if JYXX_Q.FieldByName('HDate').IsNull then OldNum:=OldNum+JYXX_Q.FieldValues['Num'];
          OldNum:=OldNum+JYXX_Q.FieldValues['Num'];
          JYXX_Q.Next;
        end;
    end;

  YHDA_Q:=TQuery.Create(nil);                //取得此用户最多能借多少书
  YHDA_Q.DatabaseName:=DataPath;
  YHDA_Q.SQL.Add('Select MaxDate,MaxNum From GroupUser A,YH B Where A.GroupID=B.GroupID and B.UserID=:UID');
  YHDA_Q.ParamByName('UID').AsString:=JSJSZBH_FE.Text;
  YHDA_Q.Open;
  MaxDate:=YHDA_Q.FieldValues['MaxDate'];
  MaxNum:=YHDA_Q.FieldValues['MaxNum'];
  if StrToInt(JSSL_FE.Text)>(MaxNum-OldNum) then
    begin
      MessageBox(handle,pchar(Format('您最多还能借 %d 本书!',[MaxNum-OldNum])),'错误',MB_ok or MB_ICONERROR);
      FreeAndNil(JYXX_Q);
      FreeAndNil(YHDA_Q);
      JSSL_FE.SetFocus;
      exit;
    end;

  TSJBXX_T:=TTable.Create(nil);                //修改些图书的剩余数量
  TSJBXX_T.DatabaseName:=DataPath;
  TSJBXX_T.TableName:='TSJBXX.db';
  TSJBXX_T.Open;
  TSJBXX_T.Locate('TSBH',TSBH_FE.Text,[]);
  SYSL:=StrToInt(JSSYSL_FE.Text)-StrToInt(JSSL_FE.Text);
  TSJBXX_T.Edit;
  TSJBXX_T.FieldByName('LastNum').AsInteger:=SYSL;
  TSJBXX_T.Post;

  JYXX_T.Append;                               //添加借书记录
  JYXX_T.FieldByName('UserID').AsString:=JSJSZBH_FE.Text;
  JYXX_T.FieldByName('TSBH').AsString:=TSBH_FE.Text;
  JYXX_T.FieldByName('JDate').AsDateTime:=Date;  //今天
  JYXX_T.FieldByName('LastDate').AsDateTime:=IncDay(Date,MaxDate);//到期时间
  JYXX_T.FieldByName('Num').AsInteger:=StrToInt(JSSL_FE.Text);
  JYXX_T.Post;

  TSBH_FE.Text:='';
  JSSM_FE.Text:='';
  JSZZ_FE.Text:='';
  JSCBRQ_FE.Text:='';
  JSCBS_FE.Text:='';
  JSDJ_FE.Text:='';
  JSSYSL_FE.Text:='';
  JSJSZBH_FE.Text:='';
  JSSL_FE.Text:='';

  MessageBox(handle,'借书成功','成功',MB_ok or MB_ICONINFORMATION);
  FreeAndNil(JYXX_Q);
  FreeAndNil(YHDA_Q);
  FreeAndNil(TSJBXX_T);
end;
//***********************************************************************************
procedure TJSHS_F.HSQD_FBtnClick(Sender: TObject);  //确定还书
var
  TSJBXX_T:TTable;
  SL:integer;
begin
  JYXX_T.Locate('UserID;TSBH;HDate',VarArrayOf([TSBH_FE.Text,HSBH_FE.Text,null]),[]);//修改借阅信息表
  JYXX_T.Edit;
  JYXX_T.FieldByName('HDate').AsDateTime:=now;  //添加还书时间
  JYXX_T.Post;

  TSJBXX_T:=TTable.Create(nil);               //修改图书基本表中的此图书的剩余数量
  TSJBXX_T.DatabaseName:=DataPath;
  TSJBXX_T.TableName:='TSJBXX.db';
  TSJBXX_T.Open;
  TSJBXX_T.Locate('TSBH',HSBH_FE.Text,[]);
  SL:=StrToInt(TSJBXX_T.FieldValues['LastNum']);
  SL:=SL+StrToInt(HSSL_FE.Text);
  TSJBXX_T.Edit;
  TSJBXX_T.FieldByName('LastNum').AsInteger:=SL;
  TSJBXX_T.Post;
  TSJBXX_T.Close;
  FreeAndNil(TSJBXX_T);

  HSBH_FE.Text:='';
  HSSM_FE.Text:='';
  HSZZ_FE.Text:='';
  HSCBS_FE.Text:='';
  HSDJ_FE.Text:='';
  HSXM_FE.Text:='';
  HSSL_FE.Text:='';
  HSCGTS_FE.Text:='';
  HSFJ_FE.Text:='';

  MessageBox(handle,'还书成功','成功',MB_ok or MB_ICONINFORMATION);

end;

end.

⌨️ 快捷键说明

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