📄 ulandf.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 + -