📄 ubooklend.pas
字号:
unit uBookLend;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, Buttons;
type
TOwnBook = record
Code : string;
Name : string;
Price : string;
OwnDays : integer;
end;
TfrmBookLend = class(TForm)
Label1: TLabel;
Panel4: TPanel;
edtBookCode: TEdit;
StaticText1: TStaticText;
Panel1: TPanel;
Bevel2: TBevel;
StaticText2: TStaticText;
edtName: TEdit;
StaticText3: TStaticText;
edtAuthor: TEdit;
edtPublisher: TEdit;
StaticText4: TStaticText;
StaticText5: TStaticText;
edtDate: TEdit;
StaticText7: TStaticText;
edtPrice: TEdit;
StaticText8: TStaticText;
Memo: TMemo;
StaticText9: TStaticText;
edtUser: TEdit;
StaticText10: TStaticText;
edtOwnTime: TEdit;
StaticText11: TStaticText;
edtFine: TEdit;
StaticText6: TStaticText;
edtTotal: TEdit;
Panel3: TPanel;
btnBookCode: TButton;
Bevel1: TBevel;
btnCancel: TSpeedButton;
btnLend: TSpeedButton;
btnReturn: TSpeedButton;
procedure Button2Click(Sender: TObject);
procedure edtBookCodeChange(Sender: TObject);
procedure edtUserChange(Sender: TObject);
procedure btnBookCodeClick(Sender: TObject);
procedure edtBookCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure btnCancelClick(Sender: TObject);
procedure btnLendClick(Sender: TObject);
procedure btnReturnClick(Sender: TObject);
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 CheckCanLend(UserID:string);
function CheckExistUser(UserID : string):boolean;
end;
var
frmBookLend: TfrmBookLend;
implementation
uses
uPublic,dbtables, uOwnMsgF, main, uShowBookF;
{$R *.DFM}
procedure TfrmBookLend.Button2Click(Sender: TObject);
begin
close;
end;
//书号编辑框内容输入到最大书号长度时,自动检查改输入书号相关信息
procedure TfrmBookLend.edtBookCodeChange(Sender: TObject);
begin
if Length(edtBookCode.Text) = CodeLength then
begin
Init;
//根据相应的书号查找相关书籍
if ViewBook(edtBookCode.Text) =False then
begin
MessageDlg('没有数据或数据库操作失败',mtError,[mbok],0);
Panel1.Visible := False;
Exit;
end;
//检查该书的借阅情况,设定借或还的状态
if ViewUser(edtBookCode.Text)=False then
begin
edtUser.ReadOnly := False;;
edtUser.TabStop := True;
edtUser.Color := clWindow;
edtUser.SetFocus;
end
else begin
StaticText10.Visible := True;
edtOwnTime.Visible := True;
//根据具体的情况,可以对借阅天数和罚金设定进行进一步编程
if StrToInt(edtOwnTime.Text)>60 then
begin
edtFine.Visible := True;
StaticText11.Visible := True;
edtFine.Text := FloatToStr((StrToInt(edtOwnTime.Text)-OutDay)*FineDay);
end;
btnReturn.Enabled := True;
end;
end;
end;
//根据相应的书号查找相关书籍
function TfrmBookLend.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;
edtName.Text := Query.FieldByName('Name').AsString;
edtAuthor.Text := Query.FieldByName('Author').AsString;
edtPublisher.Text := Query.FieldByName('Concern').AsString;
edtDate.Text := Query.FieldByName('OutDate').AsString;
edtPrice.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 TfrmBookLend.edtUserChange(Sender: TObject);
var
MaxNum : integer;
begin
if Length(edtUser.Text) = UserIDLength then
begin
edtTotal.Text :=IntToStr(GetOwnCount(edtUser.Text));
//还书的情况
if edtUser.ReadOnly then
begin
btnReturn.Enabled := True;
end
else begin
//借书人号不存在或超过最大借书数目
if not CheckExistUser(edtUser.Text) then
begin
btnLend.Enabled := False;
MessageDlg('借书号<'+edtUser.Text+'>不存在',mtError,[mbok],0);
Exit;
end;
MaxNum :=GetMaxOwnCount(edtUser.Text);
if StrToInt(edtTotal.Text)>= MaxNum then
begin
MessageDlg('借书号<'+edtUser.Text+'>最多只能借阅'+IntToStr(MaxNum)+'本图书。'+#13+
'此号已经借阅了'+edtTotal.Text+'本图书,不能继续借阅。',
mtError,[mbok],0);
Exit;
end;
//允许借书
btnLend.Enabled := True;
end;
end;
end;
//根据指定借书人号来查找相关借书信息
function TfrmBookLend.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;
edtUser.Text := Query.FieldByName('UserID').AsString;
FDate := Query.FieldByName('LandDate').AsDateTime;
OwnTime := Date - FDate;
edtOwnTime.Text := FloatToStr(OwnTime);
Query.Close;
Query.Free;
except
Result := False;
Exit;
end;
Result := True;
end;
//初始化借还书籍模块的相关控件
procedure TfrmBookLend.Init;
begin
edtBookCode.SetFocus;
edtName.Text := '';
edtAuthor.Text :='';
edtPublisher.Text :='';
edtDate.Text := '';
edtPrice.Text := '';
Memo.Lines.Clear;
edtUser.Text := '';
edtOwnTime.Text := '';
edtFine.Text := '';
edtTotal.Text := '';
btnLend.Enabled := False;
btnReturn.Enabled := False;
edtUser.ReadOnly := True;
edtUser.TabStop := False;
edtUser.Color := clBtnFace;
StaticText10.Visible := False;
StaticText11.Visible := False;
edtOwnTime.Visible := False;
edtFine.Visible := False;
//Pnel1.Visible := False;
CanLand := True;
end;
//在借书表中更新借书的记录
function TfrmBookLend.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 TfrmBookLend.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 TfrmBookLend.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 TfrmBookLend.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 TfrmBookLend.CheckCanLend(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 TfrmBookLend.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;
//调用ShowBookF窗体,显示更多的书号及相关信息
procedure TfrmBookLend.btnBookCodeClick(Sender: TObject);
var
P : TPoint;
begin
P.x := Panel3.Left;
P.y := Panel3.Top +Panel3.Height;
ShowBookF.Top :=panel4.ClientToScreen(P).y;
ShowBookF.Left := panel4.ClientToScreen(P).x;
ShowBookF.Show(edtBookCode);
end;
//查阅借书人号可以借阅的书籍数目
function TfrmBookLend.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 TfrmBookLend.edtBookCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
edtBookCodeChange(Sender);
end;
procedure TfrmBookLend.btnCancelClick(Sender: TObject);
begin
close;
end;
//借书处理
procedure TfrmBookLend.btnLendClick(Sender: TObject);
begin
//检查某借书人号是否可以借书
CheckCanLend(edtUser.Text);
if CanLand = False then
begin
OwnMsgF.Caption := edtUser.Text+'有以下书籍没按时归还';
OwnMsgF.ShowModal;
Exit;
end;
if UpDateNum(edtBookCode.Text,edtUser.Text,Date,0) = False then
Begin
MessageDlg('借书不成功',mtError,[mbok],0);
end;
Init;
Panel1.Visible := False;
end;
//还书处理
procedure TfrmBookLend.btnReturnClick(Sender: TObject);
begin
if UpDateNum(edtBookCode.Text,edtUser.Text,Date,1) = False then
Begin
MessageDlg('还书不成功',mtError,[mbok],0);
end;
Init;
Panel1.Visible := False;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -