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

📄 ulandf.pas

📁 图书管理系统 用于进行图书的管理
💻 PAS
字号:
unit uLandF;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ExtCtrls;

type
  TOwnBook = record
    Code : string;
    Name : string;
    Price : string;
    OwnDays : integer;
  end;

  TLandF = class(TFrame)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Panel2: TPanel;
    Bevel1: TBevel;
    Edit1: TEdit;
    StaticText1: TStaticText;
    Panel1: TPanel;
    Bevel2: TBevel;
    StaticText2: TStaticText;
    NameEdit: TEdit;
    StaticText3: TStaticText;
    AuthorEdit: TEdit;
    ConcernEdit: TEdit;
    StaticText4: TStaticText;
    StaticText5: TStaticText;
    DateEdit: TEdit;
    StaticText7: TStaticText;
    CostEdit: TEdit;
    StaticText8: TStaticText;
    Memo: TMemo;
    StaticText9: TStaticText;
    UserEdit: TEdit;
    StaticText10: TStaticText;
    OwnTimeEdit: TEdit;
    StaticText11: TStaticText;
    FineEdit: TEdit;
    StaticText6: TStaticText;
    TotalEdit: TEdit;
    Panel3: TPanel;
    Button4: TButton;
    Panel4: TPanel;
    StaticText12: TStaticText;
    procedure Button2Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure UserEditChange(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
    CanLand : boolean;
    function ViewBook(Code : string):boolean;
    function ViewUser(Code : string):boolean;
    function GetOwnCount(UserID : string):integer;
    function GetMaxOwnCount(UserID : string):integer;
    function GetOwnDay(Code , UserID : string): integer;
    function UpDateNum(Code : string;
                       UserID:string;ADate:TDate;Style:integer):boolean;
    procedure Init;
    function GetOwnBook(Code , UserID : string):TOwnBook;
    procedure CheckCanLand(UserID:string);
    function CheckExistUser(UserID : string):boolean;
  end;

var
  LandF : TLandF;

implementation


uses
  uGloabVar,dbtables, uOwnMsgF, uMainF, uShowBookF;
{$R *.DFM}

procedure TLandF.Button2Click(Sender: TObject);
begin
  LandF.Parent := nil;
  MainF.Caption := '图书管理系统';
end;

procedure TLandF.Edit1Change(Sender: TObject);
begin
  if Length(Edit1.Text) = CodeLength then
  begin
    Init;
    if ViewBook(Edit1.Text) =False then
    begin
      MessageDlg('没有数据或数据库操作失败',mtError,[mbok],0);
      Panel1.Visible := False;
      Exit;
    end;

    if ViewUser(Edit1.Text)=False then
    begin
      UserEdit.ReadOnly := False;;
      UserEdit.TabStop := True;
      UserEdit.Color := clWindow;
      UserEdit.SetFocus;
    end
    else begin
      StaticText10.Visible := True;

      OwnTimeEdit.Visible := True;

      if StrToInt(OwnTimeEdit.Text)>60 then
      begin
        FineEdit.Visible := True;
        StaticText11.Visible := True;
        FineEdit.Text := FloatToStr((StrToInt(OwnTimeEdit.Text)-OutDay)*FineDay);
      end;
      Button3.Enabled := True;
      Button3.SetFocus;
    end;
  end;
end;

function TLandF.ViewBook(Code: string): boolean;
var
  Query : TQuery;
begin
  try
    Query := TQuery.Create(nil);
    Query.DatabaseName := DBName;
    Query.SQL.Add('select * from book where Code = :Code');
    Query.ParamByName('Code').AsString := Code;
    Query.Open;
    if Query.RecordCount = 0 then
    begin
      Result := False;
      Exit;
    end;
    NameEdit.Text := Query.FieldByName('Name').AsString;
    AuthorEdit.Text := Query.FieldByName('Author').AsString;
    ConcernEdit.Text := Query.FieldByName('Concern').AsString;
    DateEdit.Text := Query.FieldByName('OutDate').AsString;
    CostEdit.Text := Query.FieldByName('Cost').AsString;
    Memo.Lines.Add(Query.FieldByName('Memo').AsString);
    Query.Close;
    Query.Free;
    Panel1.Visible := True;
  except
    Result := False;
    Exit;
  end;
  Result := True;
end;

procedure TLandF.UserEditChange(Sender: TObject);
var
  MaxNum : integer;
begin
  if Length(UserEdit.Text) = UserIDLength then
  begin
    TotalEdit.Text :=IntToStr(GetOwnCount(UserEdit.Text));
    if UserEdit.ReadOnly then
    begin
      Button3.Enabled := True;
      Button3.SetFocus;
    end
    else begin
      if not CheckExistUser(UserEdit.Text) then
      begin
        Button1.Enabled := False;
        MessageDlg('借书号<'+UserEdit.Text+'>不存在',mtError,[mbok],0);
        Exit;
      end;
      MaxNum :=GetMaxOwnCount(UserEdit.Text);
      if StrToInt(TotalEdit.Text)>= MaxNum then
      begin
        MessageDlg('借书号<'+UserEdit.Text+'>最多只能借阅'+IntToStr(MaxNum)+'本图书。'+#13+
                   '此号已经借阅了'+TotalEdit.Text+'本图书,不能继续借阅。',
                     mtError,[mbok],0);
        Exit;
      end;
      Button1.Enabled := True;
      Button1.SetFocus;
    end;
  end;
end;

function TLandF.ViewUser(Code: string): boolean;
var
  Query : TQuery;
  FDate : TDate;
  OwnTime : TDate;
begin
  try
    Query := TQuery.Create(nil);
    Query.DatabaseName := DBName;
    Query.SQL.Add('select * from Owner where Code = :Code');
    Query.ParamByName('Code').AsString := Code;
    Query.Open;
    if Query.RecordCount = 0 then
    begin
      Result := False;
      Exit;
    end;
    UserEdit.Text := Query.FieldByName('UserID').AsString;
    FDate := Query.FieldByName('LandDate').AsDateTime;
    OwnTime := Date - FDate;
    OwnTimeEdit.Text := FloatToStr(OwnTime);
    Query.Close;
    Query.Free;
  except
    Result := False;
    Exit;
  end;
  Result := True;
end;

procedure TLandF.Init;
begin
  Edit1.SetFocus;
  //Edit1.SelectAll;
  NameEdit.Text := '';
  AuthorEdit.Text :='';
  ConcernEdit.Text :='';
  DateEdit.Text := '';
  CostEdit.Text := '';
  Memo.Lines.Clear;
  UserEdit.Text := '';
  OwnTimeEdit.Text := '';
  FineEdit.Text := '';
  TotalEdit.Text := '';
  Button1.Enabled := False;
  Button3.Enabled := False;
  UserEdit.ReadOnly := True;
  UserEdit.TabStop := False;
  UserEdit.Color := clBtnFace;
  StaticText10.Visible := False;
  StaticText11.Visible := False;
  OwnTimeEdit.Visible := False;
  FineEdit.Visible := False;
  //Pnel1.Visible := False;
  CanLand := True;
end;

procedure TLandF.Button3Click(Sender: TObject);
begin
  if UpDateNum(Edit1.Text,UserEdit.Text,Date,1) = False then
  Begin
    MessageDlg('还书不成功',mtError,[mbok],0);
  end;
  Init;
  Panel1.Visible := False;
end;

procedure TLandF.Button1Click(Sender: TObject);
begin
  CheckCanLand(UserEdit.Text);
  if CanLand = False then
  begin
    OwnMsgF.Caption := UserEdit.Text+'有以下书籍没按时归还';
    OwnMsgF.ShowModal;
    Exit;
  end;
  if UpDateNum(Edit1.Text,UserEdit.Text,Date,0) = False then
  Begin
    MessageDlg('借书不成功',mtError,[mbok],0);
  end;
  Init;
  Panel1.Visible := False;
end;

function TLandF.UpDateNum(Code: string;
             UserID:string;ADate:TDate;Style:integer): boolean;
var
  Query : TQuery;
begin
  try
    Query := TQuery.Create(nil);
    Query.DatabaseName := DBName;

    if Style = 0 then
    begin
      Query.SQL.Add('insert into Owner'
                    +'  values(:Code,:UserID,:Date)');
      Query.ParamByName('Code').AsString := Code;
      Query.ParamByName('UserID').AsString:=UserID;
      Query.ParamByName('Date').AsDateTime := Date;
      Query.ExecSQL;
    end else begin
          Query.SQL.Add('delete from Owner where Code =:Code');
          Query.ParamByName('Code').AsString := Code;
          Query.ExecSQL;
        end;
    Query.Close;
    Query.Free;
    Result := True;
  except
    Result := False;
  end;
end;

function TLandF.GetOwnCount(UserID: string): integer;
var
  Query : TQuery;
begin
  try
    Query := TQuery.Create(nil);
    Query.DataBaseName := DBName;
    Query.SQL.Add('select Count(UserID) from Owner where UserID =:UserID');
    Query.ParamByName('UserID').AsString := UserID;
    Query.Open;
    Result := Query.Fields[0].Value;
    Query.Close;
    Query.Free;
  except
    Result := 0;
  end;
end;

function TLandF.GetOwnDay(Code, UserID: string): integer;
var
  Query : TQuery;
begin
  try
    Query := TQuery.Create(nil);
    Query.DatabaseName := DBName;
    Query.SQL.Add('select * from Owner where Code = :Code and UserID =:UserID');
    Query.ParamByName('Code').AsString := Code;
    Query.ParamByName('UserID').AsString := UserID;
    Query.Open;
    Result:= Round(Date-Query.FieldByName('LandDate').AsDateTime);
    Query.Close;
    Query.Free;
  except
    Result := 0;
  end;
end;

function TLandF.GetOwnBook(Code, UserID: string): TOwnBook;
var
  Query : TQuery;
  FOwnBook : TOwnBook;
begin
  try
    Query := TQuery.Create(nil);
    Query.DatabaseName := DBName;
    Query.SQL.Add('select * from Book where Code =:Code');
    Query.ParamByName('Code').AsString := Code;
    Query.Open;
    FOwnBook.Code := Code;
    FOwnBook.Name := Query.FieldByName('Name').AsString;
    FOwnBook.Price := Query.FieldByName('Cost').AsString;
    FOwnBook.OwnDays := GetOwnDay(Code,UserID);
    Result := FOwnBook;
    Query.Close;
    Query.Free;
  except
    Result := FOwnBook;
  end;
end;

procedure TLandF.CheckCanLand(UserID: string);
var
  Query : TQuery;
  FOwnBook : TOwnBook;
begin
  try
    Query := TQuery.Create(nil);
    Query.DatabaseName := DBName;
    Query.SQL.Add('select Code from Owner where UserID =:UserID');
    Query.ParamByName('UserID').AsString := UserID;
    Query.Open;
    CanLand := True;
    OwnMsgF.ListView1.Items.Clear;
    while not Query.Eof do
    begin
      FOwnBook := GetOwnBook(Query.FieldByName('Code').AsString,UserID);
      if FOwnBook.OwnDays > OutDay then
      begin
        with OwnMsgF.ListView1.Items.Add do
        begin
          Caption := FOwnBook.Code;
          SubItems.Add(FOwnBook.Name);
          SubItems.Add(FOwnBook.Price);
          SubItems.Add(IntToStr(FOwnBook.OwnDays));
          SubItems.Add(FloatToStr((FOwnBook.OwnDays-OutDay)*FineDay));
        end;
        CanLand := False;
      end;
      Query.Next;
    end;
    Query.Close;
    Query.Free;
  except
    CanLand := False;
  end;
end;

function TLandF.CheckExistUser(UserID: string): boolean;
var
  Query : TQuery;
begin
  try
    Query := TQuery.Create(nil);
    Query.DatabaseName := DBName;
    Query.SQL.Add('select UserID from Userb where UserID =:UserID');
    Query.ParamByName('UserID').AsString := UserID;
    Query.Open;
    if Query.RecordCount =0 then
      Result := False
    else Result := True;
    Query.Close;
    Query.Free;
  except
    Result := False;
  end;
end;

procedure TLandF.Button4Click(Sender: TObject);
var
  P : TPoint;
begin
  P.x := Panel3.Left;
  P.y := Panel3.Top +Panel3.Height;
  ShowBookF.Top := Panel2.ClientToScreen(P).y;
  ShowBookF.Left := Panel2.ClientToScreen(P).x;
  ShowBookF.Show(Edit1);
  {if ShowBookF.ModalResult = mrOk then
    if ShowBookF.ListView1.Selected <> nil then
    begin
      Edit1.Text := '';
      Edit1.Text := ShowBookF.ListView1.Selected.Caption;
    end;}
end;

function TLandF.GetMaxOwnCount(UserID: string): integer;
var
  Query : TQuery;
begin
  try
    Query := TQuery.Create(nil);
    Query.DataBaseName := DBName;
    Query.SQL.Add('select MaxNum from userb, Groupb '+
                  ' where UserID =:UserID and Userb.GroupID = Groupb.GroupID');
    Query.ParamByName('UserID').AsString := UserID;
    Query.Open;
    if Query.RecordCount <> 0 then
      Result := Query.Fields[0].Value
    else Result := 0;
    Query.Close;
    Query.Free;
  except
    Result := 0;
  end;
end;

procedure TLandF.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = 13 then
    Edit1Change(Sender);
end;

end.

⌨️ 快捷键说明

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