资源描述
图书馆管理系统的实现功能和实现步骤
———————————————————————————————— 作者:
———————————————————————————————— 日期:
28
个人收集整理 勿做商业用途
图书馆管理系统
1.信息描述
图书馆中有各种类型的图书,图书信息包括:图书编号、图书名称、作者、出版社、种类、价格、出版时间等;读者信息包括:姓名、性别、单位、出生日期等.
2.预计功能描述
1。 基础数据维护。
2。 图书的插入。(数量〉1)
3. 图书的删除与修改。
4。 图书查询。
5. 图书借阅与归还。(可以查询图书当前被谁借走及剩余数量.每人能同时最多能借5本书,超过5本不能再借阅.)
6。 读者查询。可以查询读者目前已借的图书信息及借阅时间与归还时间
7。 权限设置。
8。 帮助等。
3。功能的实现
3.1主界面设置
主界面中仅有一个MainMenu控件,如图所示:
在“管理员登录”中输入以下代码:
procedure TMain。AdLoginClick(Sender: TObject);
begin
FrmLogin.Caption:=’管理员登陆'; //把登陆界面标题改为“管理员登陆"
FrmLogin。ShowModal; //显示登陆界面
end;
在“用户登录”中输入以下代码:
procedure TMain。CoLoginClick(Sender: TObject);
begin
FrmLogin。Caption:='用户登陆’; //把登陆界面标题改为“用户登录"
FrmLogin。ShowModal; //显示登陆界面
end;
在“退出"中输入以下代码(为简便起见,下文中未注明的“退出”与“取消”按钮与此操作相同,不予以再次注明):
procedure TMain.ExitClick(Sender: TObject);
begin
close;
end;
3.2登录界面的设置
登录界面的主要控件:2个Lable、2个Edit、2个BitButton、ADOQuery、DataSourse.如图:
在确定按钮中输入以下代码:
procedure TFrmLogin.BtnOKClick(Sender: TObject);
Var
CmdStr: String; //CmdStr存放查询语句
UsrType: integer; //UsrType存放用户类型
begin
ADOQryUser.SQL.Clear;
CmdStr:='select* From 用户(管理员) Where 用户名=’+QuotedStr(EdtUserName。Text)+'and 口令='+QuotedStr(EdtPass.Text);
AdoQryUser。SQL。Add(CmdStr);
AdoQryUser.Open;
if AdoQryUser。RecordCount<>0 then //确认该用户存在
begin
UsrType:=ADOQryUser.FieldList[2].AsInteger;
if UsrType=0 then //0为普通用户
if FrmLogin.Caption=’管理员登陆’ then //如果用户点了管理员登陆,提醒其换登陆
begin
messagedlg(’此账号不是管理员,请使用用户登录’,mtinformation,[mbyes,mbno],0);
close;
end
//登陆成功
else
begin
FrmWork。Caption:='用户使用’; //主界面标题改为“用户使用”
FrmWork。BkManage.Enabled:=false; //图书管理按钮不可用
FrmWork.BkRdManage.Enabled:=false; //用户管理按钮不可用
FrmWork。BkBorL.Enabled:=False; //图书借阅及归还按钮不可用
FrmWork.BkReader。Enabled:=true; //读者服务按钮可用
FrmWork.BkSearch。Enabled:=true; //图书查询按钮可用
FrmWork.BkExit.Enabled:=true; //退出登录按钮可用
FrmWork。ShowModal; //显示主界面
end
else if UsrType=1 then //1为普通管理员
if FrmLogin。Caption=’用户登录’ then
begin
messagedlg('此账号不是用户,请使用管理员登录’,mtinformation,[mbyes,mbno],0);
close;
end
else
begin
FrmWork.Caption:='管理员使用';
FrmWork。BkManage.Enabled:=true; //普通管理员可以使用图书管理
FrmWork.BkRdManage。Enabled:=false;
FrmWork.BkBorL。Enabled:=true; //普通管理员可以使用图书借阅及归还
FrmWork.BkReader.Enabled:=true;
FrmWork。BkSearch。Enabled:=true;
FrmWork.BkExit.Enabled:=true;
FrmWork。ShowModal;
end
else //其他的是顶级管理员
if FrmLogin.Caption=’用户登录’ then
begin
messagedlg('此账号不是用户,请使用管理员登录’,mtinformation,[mbyes,mbno],0);
close;
end
else
begin
FrmWork。Caption:='管理员使用’;
FrmWork.BkManage.Enabled:=true;
FrmWork.BkRdManage。Enabled:=true; //顶级管理员可以使用用户管理
FrmWork。BkBorL。Enabled:=true;
FrmWork.BkReader。Enabled:=true;
FrmWork。BkSearch。Enabled:=true;
FrmWork.BkExit.Enabled:=true;
FrmWork.ShowModal;
end
end
else
if(messagedlg('输入的用户名与口令不对!是否要重输?’,mtinformation,[mbyes,mbno],0)<>mryes) then
Close;
end;
3。3工作主界面
工作主界面的主要控件为:6个Button、2个Lable。如图:
此界面的主要代码如下:
procedure TFrmWork.BkExitClick(Sender: TObject);
begin
close;
end;
procedure TFrmWork。BkSearchClick(Sender: TObject);
begin
FrmBkSearch。ShowModal; //显示图书查询界面
end;
procedure TFrmWork。BkRdManageClick(Sender: TObject);
begin
FrmRdManage.ShowModal; //显示用户管理界面
end;
procedure TFrmWork。BkManageClick(Sender: TObject);
begin
FrmBkManage.ShowModal; //显示图书管理界面
end;
procedure TFrmWork.BkReaderClick(Sender: TObject);
begin
FrmReader.ShowModal; //显示读者服务界面
end;
procedure TFrmWork。BkBorLClick(Sender: TObject);
begin
FrmBkBandL。showModal; //显示图书借阅与归还界面
end;
3.4图书查询界面
图书查询界面的主要控件为:Lable、DBEdit、Button、BitButton、RadioGroup、DBGrid、DataSourse和ADOQurey。如图:
选择查询条件的代码为:
procedure TFrmBkSearch。rdgClick(Sender: TObject); //查询条件的改变
begin
ADOQryCondtion。Close;
ADOQryConDtion。SQL.Clear;
Case rdg。ItemIndex of
0:
begin
ADOQryCondtion.SQL.Add('select 图书名称 from 图书’);
DBEditBook。DataField:='图书名称’;
end;
1:
begin
ADOQryCondtion.SQL。Add('select 作者 from 图书');
DBEditBook。DataField:=’作者';
end;
2:
begin
ADOQryCondtion。SQL。Add(’select 出版社 from 图书’);
DBEditBook.DataField:=’出版社’;
end;
3:
begin
ADOQryCondtion.SQL.Add('select 种类 from 图书’);
DBEditBook.DataField:='种类';
end;
4:
begin
ADOQryCondtion。SQL。Add(’select * from 图书’);
ADOQryCondtion.Active:=true;
end;
end;
ADOQryCondtion。Active:=true;
end;
点击搜索的代码为:
procedure TFrmBkSearch。Button1Click(Sender: TObject); //确认查询
var CID:String; //CID中存放查询语句
begin
ADOQryXx。Close;
ADOQryXx。SQL.Clear;
case rdg。ItemIndex of
0:CID:='select* from 图书 where 图书名称 LIKE '+QuotedStr('%’+DBEditBook。Text+'%’);
1:CID:=’select* from 图书 where 作者 LIKE ’+QuotedStr(’%'+DBEditBook。Text+’%’);
2:CID:=’select* from 图书 where 出版社 LIKE '+QuotedStr(’%’+DBEditBook。Text+'%’);
3:CID:='select* from 图书 where 种类 LIKE '+QuotedStr('%’+DBEditBook.Text+'%’);
4:CID:='select* from 图书';
end;
ADOQryXx。SQL。Add(CID); //写入SQL语句
ADOQryXx。Active:=true; //显示查询结果
end;
3。5读者服务界面
读者服务界面的主要控件为:DataSourse、ADOQuery、Edit、Table、PageControl、bitbutton、DBGrid等。
1。用户信息查询:
此TabSheet的OnShow事件代码为:
procedure TFrmReader。TabSheet1Show(Sender: TObject); //实现了用户信息查询
var
chazhao: String; //保存查询语句
leixin: integer; //保存用户类型
begin
ADOQryJieshu.Close;
ADOQryJieshu.SQL.Clear;
chazhao:=’select* From 用户(管理员) Where 用户名='+QuotedStr(FrmLogin。EdtUserName.Text)+'and 口令=’+QuotedStr(FrmLogin.EdtPass。Text);
ADOQryJieshu.SQL。Add(chazhao);
ADOQryJieshu。Open;
//显示各种查询到的信息
Edit1.text:=ADOQryJieshu。FieldList[3].AsString;
Edit2。text:=ADOQryJieshu。FieldList[4]。AsString;
Edit3。text:=ADOQryJieshu。FieldList[6].AsString;
Edit4。text:=ADOQryJieshu.FieldList[5].AsString;
Edit8.Text:=ADOQryJieshu.FieldList[7].AsString;
leixin:=ADOQryJieshu.FieldList[2]。AsInteger;
case leixin of
0:
Edit9.Text:='普通用户';
1:
Edit9.Text:=’管理员';
2:
Edit9.Text:='顶级管理员’;
end;
end;
2.图书借阅查询
此TabSheet的OnShow事件代码为:
procedure TFrmReader.TabSheet2Show(Sender: TObject); //实现该用户所借书籍的显示
var
chaxun: String;
begin
ADOQuery1。Close;
ADOQuery1。SQL.Clear;
chaxun:='select* From 借书 Where 用户名='+QuotedStr(FrmLogin。EdtUserName。Text);
ADOQuery1.SQL。Add(chaxun);
ADOQuery1.Open;
ADOQuery1.Active:=true;
end;
3.密码修改
点击确认修改按钮的代码是:
procedure TFrmReader.BitBtn2Click(Sender: TObject); //实现密码的修改
var
xiugai: String; //保存修改语句
begin
ADOQuery1.Close;
ADOQuery1.SQL。Clear;
if Edit5.Text〈>FrmLogin。EdtPass.Text then //确认原密码正确
messagedlg(’原密码错误,请重输’,mtinformation,[mbyes,mbno],0)
else
if Edit6.Text<〉Edit7。Text then //确保两次输入密码相同
messagedlg('确认密码与新密码不匹配,请重输’,mtinformation,[mbyes,mbno],0)
//修改密码
else
begin
xiugai:=’Update 用户(管理员) set 口令=:口令 where 用户名=’+QuotedStr(FrmLogin。EdtUserName.Text);
ADOQuery1.SQL.text:=xiugai;
ADOQuery1。Parameters。ParamByName('口令’).Value:=trim(Edit6。Text);
ADOQuery1.ExecSQL;
end;
Edit5。Text:='’;
Edit6。Text:='’;
Edit7。Text:='';
end;
3.6图书借阅与归还界面
图书借阅与归还界面主要控件为:PageControl、DataSource、ADOQuery、Button、Edit、DBGrid等.
1。图书借阅
修改用户名时的代码为:
procedure TFrmBkBandL。Edit1Change(Sender: TObject); //当用户更改时,即时显示该用户借阅的书籍
var
chaxun: String;
begin
ADOQuery1.close;
ADOQuery1.sql.clear;
chaxun:=’select* from 借书 where 用户名='+quotedstr(Edit1.Text);
ADOQuery1.sql。Add(chaxun);
ADOQuery1.open;
ADOQuery1。ACtive:=true;
end;
点击确认借阅按钮的代码为:
procedure TFrmBkBandL。Button1Click(Sender: TObject); //按此按钮确认借书
var
chaxun: String; //保存查询语句
YH: String; //保存用户姓名
TS: String; //保存图书名称
YHSL: Integer; //保存用户现在的借阅数量
TSSL: Integer; //保存图书的现有数量
begin
if edit1.text='' then
begin
showmessage('用户名不能为空,请重输!');
edit1。SetFocus;
end
else if edit2。Text=’' then
begin
showmessage(’图书编号不能为空,请重输!’);
edit2。SetFocus;
end
//以上确保用户名与图书编号均不为空
else
begin
ADOQuery1.close;
ADOQuery1。sql.Clear;
chaxun:='select* from 用户(管理员) where 用户名='+quotedstr(edit1.Text);
ADOQuery1。sql。Add(chaxun);
ADOQuery1.open;
YHSL:=ADOQuery1.FieldList[7]。ASInteger;
if(ADOQuery1.recordcount=0) then //确保用户存在
begin
showmessage(’该用户不存在,请重输!’);
edit1。SetFocus;
end
else if(YHSL>=5) then //确保该用户借书量未满
begin
showmessage('该用户书籍已借满,请重输!');
edit1。SetFocus;
end
else
begin
ADOQuery1。close;
ADOQuery1。sql。Clear;
chaxun:='select* from 图书 where 图书编号=’+quotedstr(edit2.Text);
ADOQuery1。sql.Add(chaxun);
ADOQuery1.open;
TSSL:=ADOQuery1.FieldList[7]。ASInteger;
if(ADOQuery1。recordcount=0) then //确保该图书在库中
begin
showmessage(’该图书不存在,请重输!');
edit2。SetFocus;
end
else if(TSSL<=0) then //确保该图书还有存货
begin
showmessage(’该书籍库存已尽,请重输!’);
edit2。SetFocus;
end
//以下为借书步骤
else
begin
ADOQuery1。close;
ADOQuery1。sql。Clear;
chaxun:='select* from 图书 where 图书编号='+quotedstr(edit2。Text);
ADOQuery1.sql.Add(chaxun);
ADOQuery1.open;
TS:=ADOQuery1。FieldList[1].ASString; //提取该编号的图书名称
ADOQuery1。close;
ADOQuery1.sql。Clear;
chaxun:='select* from 用户(管理员) where 用户名=’+quotedstr(edit1。Text);
ADOQuery1.sql.Add(chaxun);
ADOQuery1。open;
YH:=ADOQuery1.FieldList[3].ASString; //提取该用户的姓名
//以下是借书步骤
ADOQuery1.close;
ADOQuery1.sql.Clear;
ADOQuery1。sql。Text:='insert into 借书(用户名,图书编号,用户姓名,图书名称,借书日期,应还日期) values(:用户名,:图书编号,:用户姓名,:图书名称,:借书日期,:应还日期)';
ADOQuery1。PArameters。ParamByName('用户名')。Value:=trim(Edit1。Text); //设置用户名
ADOQuery1.PArameters.ParamByName(’图书编号’)。Value:=trim(Edit2.Text); //设置图书编号
ADOQuery1。PArameters.ParamByName('用户姓名').Value:=trim(YH); //设置用户姓名为YH
ADOQuery1.PArameters.ParamByName('图书名称').Value:=trim(TS); //设置图书名称为TS
ADOQuery1.PArameters。ParamByName(’借书日期')。Value:=Datetostr(date()); //设置结束日期为当前日期
ADOQuery1。PArameters.ParamByName('应还日期').Value:=Datetostr(date()+30); //设置应还日期为一个月后
ADOQuery1。ExecSQl; //执行SQL语句,到此“借书”表中插入了一条记录
//更新“图书"表,把刚借走的图书的现有数量减1
ADOQuery1。close;
ADOQuery1。sql.clear;
ADOQuery1。sql。Text:=’update 图书 set 现有数量=:现有数量 where 图书编号='+quotedstr(Edit2.Text);
ADOQuery1.PArameters.ParamByName('现有数量’).Value:=TSSL-1;
ADOQuery1。ExecSQl;
//更新“用户(管理员)”表,把刚借书的用户的借书数量加1
ADOQuery1.close;
ADOQuery1。sql。clear;
ADOQuery1.sql。Text:='update 用户(管理员) set 已借图书=:已借图书 where 用户名=’+quotedstr(Edit1。Text);
ADOQuery1。PArameters。ParamByName('已借图书')。Value:=YHSL+1;
ADOQuery1。ExecSQl;
//及时更新数据并显示
ADOQuery1。close;
ADOQuery1。sql。clear;
chaxun:='select* from 借书 where 用户名='+quotedstr(edit1。Text);
ADOQuery1.sql.Add(chaxun);
ADOQuery1.open;
ADOQuery1.ACtive:=true;
end
end
end
end;
2。图书归还
点击确认归还得代码为:
procedure TFrmBkBandL。Button3Click(Sender: TObject);
var
chaxun: String; //保存查询语句
YHSL: Integer; //保存用户借书数量
TSSL: Integer; //保存图书现有数量
begin
if edit3。text=’' then
begin
showmessage('用户名不能为空,请重输!');
edit3。SetFocus;
end
else if edit4。Text=’’ then
begin
showmessage(’图书编号不能为空,请重输!’);
edit4.SetFocus;
end
//以上确保用户名和图书编号不为空
else
begin
ADOQuery1.close;
ADOQuery1。sql.Clear;
chaxu
展开阅读全文