Delphi+Access图书管理系统 第3页
procedure Tlendform.FormShow(Sender: TObject) ; // 借阅管理借出按钮事件
var
i:integer;
begin
with datamoduleado.ADOQuery1 do // 响应datamoduleado.ADOQuery1按钮事件
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 Tlendform.ReaderIDEditChange(Sender: TObject);
begin
if length(readerIDEdit.Text )=10 then //判断借书证号是否存在
begin
with datamoduleADO.ADOQuery1 do
begin
sql.Clear ;
sql.Add('select readerid from reader where readerid=:readerid');
parameters.ParamByName('readerid').Value :=readeridedit.Text ;
open;
if recordcount=0 then //借书证号不能为0
begin
button1.Enabled :=false;
messagedlg('借书证号<'+readeridedit.Text +'>不存在',mterror,[mbok],0);
close;
exit;
end;
close;
end;
try
with datamoduleado.ADOQuery1 do
begin
sql.Clear ;
sql.Add('select count(readerid) from lend where readerid=:readerid');
parameters.ParamByName('readerid').Value :=readeridedit.Text ;
open;
totaledit.Text :=inttostr(fields[0].Value );
close;
end;
except
totaledit.Text :='0';
end;
button2.Enabled :=false;
button1.Enabled :=true;
button1.SetFocus ;
end;
end;
procedure Tlendform.Button1Click(Sender: TObject);
var
tempownbook:townbook;
canlend:boolean;
mmcode:string;
begin
if readeridedit.Text <>'' then //借书证号不能为空
begin
try
with datamoduleado.adoquery1 do
begin
sql.clear;
sql.Add('select code from lend where readerid=:readerid');
parameters.ParamByName('readerid').Value :=readeridedit.Text ;
open;
canlend:=true;
ownbookform.ListView1.Items.Clear ;
mmcode:=fieldbyname('code').AsString;
while not eof do
begin
with tempadoquery1 do
begin
sql.Clear ;
sql.Add('select * from book where code =:code') ;
parameters.ParamByName('code').Value :=mmcode;
open;
tempownbook.code:=fieldbyname('code').asstring;
tempownbook.name:=fieldbyname('name').asstring;
tempownbook.price:=fieldbyname('cost').asstring;
try
with tempadoquery2 do
begin
sql.Clear ;
sql.Add('select * from lend where code=:code and readerid=:readerid');
parameters.ParamByName('code').Value :=datamoduleado.ADOQuery1.fieldbyname('code').AsString ;
parameters.ParamByName('readerid').Value := readeridedit.Text ;
open;
tempownbook.owndays:=round(date-fieldbyname('outdate').AsDateTime );
close;
end;
except
tempownbook.owndays:=0;
end;
close;
end;
if tempownbook.owndays>60 then //超过60天后所交罚金
begin
with ownbookform.listview1.Items.add do
begin
caption:=tempownbook.code;
subitems.add(tempownbook.name);
subitems.add(tempownbook.price);
subitems.Add(inttostr(tempownbook.owndays));
subitems.Add(floattostr((tempownbook.owndays-60)*0.1));
end;
canlend:=false;
end;
next;
end;
close;
end;
except
canlend:=true;
end;
try //响应借书证号不正确,则借书不成功,出现提示
with DatamoduleADO.adoquery1 do
begin
sql.clear;
sql.add('insert into lend(code,readerid,outdate)'+' values(:code,:readerid,:outdate)');
parameters.parambyname('code').value:=combobox1.text;
parameters.parambyname('readerid').value:=readeridedit.text;
parameters.parambyname('outdate').value:=datetostr(now());
execsql;
end;
except
messagedlg('借书不成功',mterror,[mbok],0);
end;
end;
else begin
showmessage('请输入借书证号!');
readeridedit.setfocus;
end;
end;
其他代码与上述功能代码相似,就不一一赘述。
5、测试
5.1、单元测试
(1)图书管理系统测试
测试用例 正误 结果
图书编号 3333 × 数据长度不对
图书名称 软件工程 √ 正确
借阅者 王1 × 类型不匹配
入库日期 2002-1-1 × 格式不正确
价格 20.00 √ 正确
(2)借阅者借书测试
测试用例 正误 结果
借书证号 0000000001 √ 正确
姓名 王小 √ 正确
班级 计算机教育 √ 正确
借书证号 000003 × 数据长度不正确
借书证号 Krrr2220 × 类型不匹配
(3)续借办理测试
输入编号后,查询此书信息。如果该书并未借出,则只能显示其基本信息,不能进行续借操作。如:图书编号(6),图书名称(招生考试),显示该图书没有借出;图书编号(5)查询后,续借按钮是活动的。