2.4、E-R图
3、软件设计
3.1、概要设计
3.1.1、系统体系结构图
(1)程序功能图
(2)程序流程图
3.1.2、界面设计
(1)进入本系统的界面,如下图:
(2)借阅管理界面
(3)图书管理中新书入库界面:
(4)信息查询界面:
3.2、详细设计
3.2.1、各模块的主要说明
(1) 借阅者服务模块的实现
借阅者服务窗体的功能主要是图书的查询,个人借阅情况查看及个人部分信息的修改。
(2) 图书查询功能的实现
在本系统中,任何人都有权限使用查询功能,不做任何限制。由于实现的查询功能有多种,如按图书编号、图书名称等字段进行完全体配查找和部分体配的模糊查找,还有按多个条件进行逻辑与或是逻辑或的多条件查找。
(3) 借阅者借阅情况功能的实现
当借阅者正确登录到系统后,此功能将被激活,使用户能查看到自身的借阅情况。在此系统中,信息的显示一般用ListView来实现,只在较少的情况下用到了DBgrid,因为我觉得ListView更好实现,并能使信息数据对用户的完全分离。在这里跟据借阅者的不同要求实现借阅情况的查询,有检查所有的借阅情部、某本书的借阅情况、和根据已借阅天数的来查询。其中根椐借阅天数来查询更有代表性,有方式一和方式二。
(4) 工作人员进行图书归还功能实现
在此功能中,工作人员根据借阅者的借书证号和归还的图书编号进行图书的归还工作。并且根据现实中可能会出现的只知图书名不知图书编号的归还情况,所以加入了按书籍名称进行归还的功能。这个功能是图书借阅功能中把图书名称转换成图书编号的一种改进方法,这样就不用如借阅功能中一样要先转换再借阅了。
(5) 图书馆管理员修改图书类别及统记功能的实现
此窗体中能对图书的类别进行删除,添加和修改,这模块的功能的实现过程与图书记录的删除,添加和修改一样的,但是这个窗体还能跟据图书类别进行统计,还可根据Book表和owner表统计出图书总数目,库存图书数目,借出图书数目及借阅过期的图书数目。在这里给出统计图书总数目,库存图书数目,借出图书数目及借阅过期的图书数目的实现过程中的几个函数和过程。
(6) 图书馆文护借阅者管理功能的实现
此功能能对借阅者信息进行查看添加、删除、修改。在这里给出刷新按钮的实现过程。
(7) 图书馆借阅者统计功能的实现
此功能按借阅者身份进行统计,得出具有某种身份的借阅者总数,此种身份的并借阅图书的借阅者数和所借阅的图书数。
(8) 图书馆统计借阅过期记录功能的实现
此报表能显示按借书证号升序排列的借阅信息超过限定时限的信息。
3.2.2 各模块的流程图
(1)借阅者借书模块
(2)借阅者还书查询模块
(3)新书入库模块
(4)信息查询模块
4、系统实现
下面为主要功能的部分源代码:
//对图书管理的新书入库按钮的响应事件
procedure Tbookform.Button1Click(Sender: TObject);
begin
if Length(CodeEdit.Text )<>10 then //检查新入库图书的书号是否长度是否为10
begin
messagedlg('书号不正确',mtError,[mbok],0);
CodeEdit.SetFocus ;
exit;
end;
with dataModuleAdo.adoquery1 do//检查书号是否已经存在
begin
sql.clear;
sql.Add('select code from book where code=:code');// 输入查找语句
parameters.ParamByName('code').Value :=codeedit.Text ;
open;
if recordcount<>0 then //记录号不为零
begin
messagedlg('书号<'+codeedit.Text+'>已经存在',mtError,[mbok],0);
codeedit.SetFocus ;
exit;
end;
close;
end;
try //若是不正确的话,出话提示信息
parameters.ParamByName('outdate').Value :=strtodate(outtimeedit.Text) ;
except
messagedlg('参数<出版时间>设置错误',mtError,[mbok],0); // 显示错误信息
exit;
end;
try
parameters.ParamByName('cost').Value :=strtofloat(costedit.Text) ;
except
messagedlg('参数<价格>设置错误',mtError,[mbok],0);
exit;
end;
try //备注不能为空,否则出现提示信息
parameters.ParamByName('MMEMO').Value :=memo1.Text ;
except
messagedlg('memo error',mterror,[mbok],0); // 显示备注错误
exit;
end;
execSQL;
end;
Tabsheet1show(sender);
except
messagedlg('入库错误',mtError,[mbok],0);
end;
end;
with datamoduleado.ADOQuery1 do刊号 //对图书管理选中书的显示
begin
sql.Clear ;
sql.Add('select code from book');
open;
first;
for i:=0 to recordcount-1 do
begin
combobox1.Items.Add(fieldbyname('code').AsString );
next;
end;
close;
end;
end;
procedure Tbookform.ComboBox1Change(Sender: TObject);
begin
if length(combobox1.Text )=10 then //借书证号为10
begin
try
with datamoduleAdo.ADOTable1 do
begin
tablename:='book';
dbname.DataField :='Name';
dbauthor.DataField :='Author';
dbpress.DataField :='press';
dboutdate.DataField :='outdate';
dbcost.DataField :='cost';
dbmemo.DataField :='memo0';
active:=true;
if locate('code',combobox1.Text ,[]) then// 查找相关的信息
edit
else
showmessage('not found ' ); // 显示错误信息
end;
except
messagedlg('数据操作出错',mtError,[mbok],0);
end;
end;
end;