图书馆管理系统-大作业

更新时间:2024-06-08 08:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

信息与计算科学系课程设计报告

图书管理系统的设计

1. 系统功能

1.1 主要功能

图书管理系统主要实现以下5方面的功能: a.图书入库 b.查询 c.修改信息 d.图书借还 e.系统管理

1.2 功能描述

1.书籍管理功能:包括书籍类别管理和书籍信息管理两部分。 2.读者管理部分:这一部分包括对读者信息进行管理的功能。 3.借阅管理部分:这一部分包括借书信息管理和还书信息管理两部分。 4.系统管理:包括修改系统用户密码、增加新用户以及退出系统等。

1.3 系统数据流程分析

图书管理系统数据流程图如图1-3所示。

1

信息与计算科学系课程设计报告

读者基本信息录入录入 图书基本信息录入录入 读者信息管理 图书信息管理 读者信息库 图书信息库 借阅信息录入 图书借阅管理

图1-3 系统数据流程图

1.4功能模块图

本系统包括的模块主要有如下几个部分:图书管理模块、借阅管理模块、读者管理模块、系统管理模块、信息查询模块、用户管理模块

具体的功能描述如下:

图书管理:其功能是管理书库中图书的记录信息,对入库图书信息进行管理,并进行查询。

借阅管理:其功能是对读者借阅信息进行查询。

读者管理:其功能是对读者一般信息进行查询以及维护。

系统管理:其功能是为系统的使用者进行帐户和密码管理以及基础数据维护。 其子系统描述:

2

信息与计算科学系课程设计报告

1.图书管理包括图书入库功能,主要整理图书的数量、类别和各种相关的信息等。 2.图书借阅,进行借书操作(此操作由管理员完成);当用户要查询自己的借阅情况时,可进行借阅查询。

3.读者管理包括读者登记,读者信息管理,添加读者借书和还书信息。可以记录新加入的读者的信息,并且可以对已经存在于数据库中的读者的信息进行修改,同时可以进行读者借、还书的管理。

4.用户管理包括修改密码、新增用户、删除用户可执行的系统操作等。 5.信息查询包括图书查询、读者查询和用户查询等功能。通过这些功能,可以通过不同的关键字来对书库中的图书进行查询,同时也可以查询读者的借阅信息。

6.系统管理是用来完成本系统的基本操作,如修改密码、登录系统、退出登录,还有系统简介等功能。

其功能模块图如下所示

新书入库功能 图书类别功能 读者信息功能 读者查询功能 增密码修改 借书管理功能 还书管理功能 图书管理功能 读者管理功能 系统管理功能 借阅管理功能 图书管理系统 加 用 户

图1-4功能模块图

3

信息与计算科学系课程设计报告

2. 系统数据库设计

2.1 E-R图

E-R模型的“联系”用于刻画实体之间的关联。根据上面的设计可以规划出的实体有:读者实体、图书实体和借书信息实体。

2.2 读者实体

读者实体 学号 姓名 联系电话 借书证号 证号 性别 系别 图2-2读者实体

2.3 图书实体

出版日期 图书编 类别编 号

图书实体 出版日期出版日期图书名称 作者 图2-3图书实体

出版日期2.4 借书实体E-R图

4

信息与计算科学系课程设计报告

借书信息实体 图书编号 借书证号 借出日期 图2-4借书实体

借出状态 还书日期 2.5 系统实体E-R图

读者

借阅 图书 图2-5实体E-R图

2.6 数据库设计

由数据模型利用SQLsever2000进行数据库的详细设计,本系统设计的数据库名为shop,其基本表的设计如下:

2.6.1学生信息表

表2-6-1学生信息表 字段名称 学号 姓名 性别 系别 联系电话 借书证号 密码

数据类型 varchar varchar varchar varchar varchar varchar varchar 大小 50 20 4 5 50 50 15 5

信息与计算科学系课程设计报告

3.7 新书入库

本模块主要实现的是管理员对新书的入库管理,打 * 号的是必填项目,置空会有信息提示该项不能为空,如图3-8所示:

图3-8新书入库界面

3.7 系统密码修改

本模块主要实现的功能是管理员进入系统管理界面后对管理员密码进行修改的操作,以保证系统的安全性,如图3-9所示:

图3-9 系统密码修改界面

3.9 读者服务

本功能实现的是读者对图书的查询、借阅及归还操作以及对密码的修改的操作,读者必须先登录以后才能进行后面的修改密码、图书查询等操作,如图4-12所示:

11

信息与计算科学系课程设计报告

图3-10 读者服务界面

4. 认识体会

1.认识体会:

通过系统的在校学习和对外界的认识,我对软件开发的大致过程有了一些基本的了解,有了一些体会:程序没有最好,只有更好,程序没有十全十美,只有更完美;在编程的过程中,会遇到各种各样的问题,优秀的编程大师正是在解决了遇到的这些问题而积累经验的成果,提升了编程能力和丰富了编程思维。深入的体会:编程总会深入内部,深究根源,一个程序只有不断地测试和修改才能减少错误,才能提高质量,才能做得更好,程序是在不断地壮大的。编程需要严谨的思维,程序是一个逻辑产品,它存储在磁盘等物理介质中,它看不见,摸不着,它运行时一环接一环,一丝扣一丝,一旦出错,有可能导致难以预料的严重后果。而严谨的思维能使程序逻辑出错的可能性大大降低,也使程序易于维护。而且,保持严谨的思维总是一个好的习惯。在学习的过程中,要学会应用网络上的知识,把它变为自己的知识,应用在实际中来解决问题。因为在网络上有各种各样的资源可以供你参考。编程需要良好的编程习惯。好的编程习惯能给编程人员省去很多不必要的麻烦,提高了代码的清晰度,从而提高了程序的质量。三人行必有我师:不管你的编程水平有多高,都有不懂的地方,所以时刻都要虚心向他人学习来提高自己。连孔子都可以拜小孩为师,我们还有什么面子放不下的呢?

3、总结:

12

信息与计算科学系课程设计报告

在一开始我通过编写设计初稿,对设计本系统有了比较深刻的认识,认真的考虑了每一步骤的执行,也发现编一个优秀的软件决不是一蹴而就的事情,需要长时间的积累和经验。然后,在老师的辅导和同学的帮助下,我更加深入的去考虑这个系统。并花了大量的心思和努力去完成这个系统。在做这个系统的这段时间里,我学到了我以前没有掌握牢的知识。更重要的是了解了作为一个开发人员开发一个系统软件的步骤和方法策略。如何去思考问题,又如何去解决问题??总之,通过这次的系统设计,我学会了很多,也了解了很多。在这,我真诚的感谢辅导过我的老师,还有帮助过我的同学们。谢谢!

参考文献:

[1] 刘斌,李文革.Delphi7数据库高级教程[M] .北京:清华大学出版社,2004

[2] 李军, 张桂英,徐波. Delphi7项目开发实践[M] .北京:中国铁道出版社,2003

[3] 刘国钧,陈绍业,王凤翥.图书馆目录[M].第1版.北京:高等教育出版社,1957.

5. 源代码

5.1系统主界面:

procedure TfrmMain.SpeedButton1Click(Sender: TObject);

begin

frmAdm.Show; end;

procedure TfrmMain.SpeedButton2Click(Sender: TObject); begin

frmReaderSer.Show; end;

procedure TfrmMain.SpeedButton3Click(Sender: TObject); begin

frmLookBook.Show; end;

procedure TfrmMain.SpeedButton4Click(Sender: TObject); var Str: string; begin

Str := '图书管理系统' + #13;

13

信息与计算科学系课程设计报告

Str := Str + '作者:丁少亭(L3)' + #13;

Str := Str + '这是我的第一次编程,请大家多多指教!'; ShowMessage(Str); end;

procedure TfrmMain.SpeedButton5Click(Sender: TObject); begin

if messagedlg('确定要退出本系统吗?', mtinformation, [mbyes, mbno], 0) = mryes then begin

ShowMessage('谢谢你的使用');

// form1.DestroyWnd; frmMain.Close; end; end;

procedure TfrmMain.Timer1Timer(Sender: TObject); begin

StatusBar1.Panels[2].Text := '日期:' + DateToStr(Date); StatusBar1.Panels[3].Text := '时间:' + TimeToStr(Time); end;

procedure TfrmMain.SkinData1FormSkin(Sender: TObject; aName: String; var DoSkin: Boolean); begin

skindata1.Active:=true; end; end.

5.2 登录按钮代码:

procedure TfrmAdm.Button1Click(Sender: TObject); begin

with DM.ADOQuery1 do begin Close;

SQL.Clear;

SQL.Add('select * from 用户 where 姓名=:username and 密码=:pass and 类型=:GLY');

Parameters.ParamByName('username').Value := Edit1.Text; Parameters.ParamByName('pass').Value := Edit2.Text; Parameters.ParamByName('GLY').Value := '管理员'; Open;

if RecordCount < 1 then begin

ShowMessage('用户名、密码错误或您不是管理员,请重新输入!'); Edit2.Text := '';

14

信息与计算科学系课程设计报告

Exit; end else begin

frmAdmin.ShowModal; end; end; end;

5.3 系统管理:

procedure TfrmAdmin.BitBtn3Click(Sender: TObject); begin

frmAddReader.Show; end;

procedure TfrmAdmin.Button1Click(Sender: TObject); begin

frmModifyReaderInfo.Show; end;

procedure TfrmAdmin.Button2Click(Sender: TObject); begin

frmNewBook.Show; end;

procedure TfrmAdmin.Button4Click(Sender: TObject); begin

frmLendBook.Show; end;

procedure TfrmAdmin.Button5Click(Sender: TObject); begin

frmYy.Show; end;

procedure TfrmAdmin.Button6Click(Sender: TObject); begin

frmModifyPsw.Show; end;

procedure TfrmAdmin.Button7Click(Sender: TObject); begin

if messagedlg('确定要退出吗?', mtinformation, [mbyes, mbno], 0) = mryes then

Close; end;

procedure TfrmAdmin.Button9Click(Sender: TObject); begin

ADOTable1.Close;

15

信息与计算科学系课程设计报告

ADOTable1.Filtered := false; if ComboBox1.Text = '学号' then begin

ADOTable1.Filter := '学号=''' + Edit1.Text + ''''; ADOTable1.Filtered := true; ADOTable1.Open; end else begin

ADOTable1.Filter := '姓名=''' + Edit1.Text + ''''; ADOTable1.Filtered := true; ADOTable1.Open; end; end;

procedure TfrmAdmin.Button8Click(Sender: TObject); begin

frmReturnBook.Show; end;

procedure TfrmAdmin.Button10Click(Sender: TObject); begin begin

ADOTable2.Close;

ADOTable2.Filtered := false;

if combobox2.Text = '图书编号' then begin

ADOTable2.Filter := '图书编号=''' + Edit2.Text + ''''; ADOTable2.Filtered := true; ADOTable2.Open; end else begin

ADOTable2.Filter := '作者=''' + Edit2.Text + ''''; ADOTable2.Filtered := true; ADOTable2.Open; end; end; end;

procedure TfrmAdmin.BitBtn4Click(Sender: TObject); begin

if Application.MessageBox('确实要删除记录?该命令不可取消!', '删除记录', MB_OKCANCEL) = IDOK then

ADOTable1.Delete else

16

信息与计算科学系课程设计报告

abort; end;

procedure TfrmAdmin.Button3Click(Sender: TObject); var

strBookID: string; begin

//更新图书信息表注销标志

if combobox2.Text = '图书编号' then begin

strBookID := Trim(Edit2.Text); DM.QueryReader.Close;

DM.QueryReader.SQL.Clear;

strSql := 'update 图书明细表 set 状态=''注销'' where 图书编号=' + strBookID;

DM.QueryReader.SQL.Text := strSql; DM.QueryReader.ExecSQL; DM.QueryReader.Close;

if DM.QueryReader.RowsAffected > 0 then ShowMessage('该书注销成功!') else

ShowMessage('该书注销失败!'); end; end;

procedure TfrmAdmin.Button11Click(Sender: TObject); begin

frmBookType.Show; end; end.

管理图书确定按钮代码:

procedure TfrmBookType.btnSureClick(Sender: TObject); begin

if edtTypeID.Text = '' then begin

ShowMessage('类别编号不能为空!'); edtTypeID.SetFocus; Exit; end;

if edtBookType.Text = '' then begin

ShowMessage('类别名称不能为空!'); edtBookType.SetFocus; Exit; end;

DM.QueryBookType.Close;

17

信息与计算科学系课程设计报告

DM.QueryBookType.SQL.Clear; DM.QueryBookType.SQL.Text := 'insert into 图书类别(类别编号,图书类别)' + 'values(:id,:name)';

DM.QueryBookType.Parameters.ParamByName('id').Value:=Trim(edtTypeID.Text);

DM.QueryBookType.Parameters.ParamByName('name').Value:=Trim(edtBookType.Text);

{dm.QueryBookType.SQL.Text:='update 图书类别 set (类别编号,图书类别)'+'values(:id,:name)';

dm.QueryBookType.Parameters.ParamByName('id').Value:=trim(edtTypeID.Text);

dm.QueryBookType.Parameters.ParamByName('name').Value:=trim(edtBookType.Text);}

DM.QueryBookType.ExecSQL; DM.QueryBookType.Close;

DM.QueryBookType.SQL.Clear;

DM.QueryBookType.SQL.Text :='select * from 图书类别'; DM.QueryBookType.ExecSQL; DM.QueryBookType.Open; end;

删除按钮代码:

procedure TfrmBookType.btnDeleteClick(Sender: TObject); begin if Application.MessageBox('是否删除记录?', '确定', MB_OKCANCEL) = IDOK then

DM.DataSourceBookType.DataSet.Delete; end;

5.4 借阅代码:

procedure TfrmLendBook.Button1Click(Sender: TObject); var

strBookID: string; begin

if editreaderID.Text = '' then begin

ShowMessage('借书证号不能为空!'); editreaderID.SetFocus; Exit; end;

if editBookID.Text = '' then begin

ShowMessage('图书编号不能为空!'); editBookID.SetFocus;

18

信息与计算科学系课程设计报告

Exit; end;

if getBookCount(editBookID.Text) <> 0 then begin

ShowMessage('此书已经被借出!'); Exit; end else begin

strBookID := Trim(editBookID.Text); DM.QueryBorrow.Close;

DM.QueryBorrow.SQL.Clear;

DM.QueryBorrow.SQL.Text := 'update 借出信息 set 借出状态=1 where 图书编号= '+ strBookID;

DM.QueryBorrow.Close;

DM.QueryBorrow.SQL.Clear; DM.QueryBorrow.SQL.Text := 'insert into 借出信息(图书编号,借书证号,借出日期,借出状态)values(:BookID,' + ':readerID,:time,1)';

DM.QueryBorrow.Parameters.ParamByName('Bookid').Value:=trim(editBookID.Text);

DM.QueryBorrow.Parameters.ParamByName('readerid').Value:=trim(editreaderID.Text);

DM.QueryBorrow.Parameters.ParamByName('time').Value:=DateTimePicker1.Time;

DM.QueryBorrow.ExecSQL; DM.QueryBorrow.Close; //更新图书信息表在库标志 DM.QueryReader.Close;

DM.QueryReader.SQL.Clear;

strSql := 'update 图书明细表 set 状态=''借出'' where 图书编号= ' + strBookID;

DM.QueryReader.SQL.Text := strSql; DM.QueryReader.ExecSQL; DM.QueryReader.Close; end;

if messagedlg('借阅成功,还有要借的书籍吗?', mtconfirmation, [mbyes, mbno], 0) = mryes then begin

editBookID.Text := ''; editreaderID.Text := ''; editmax.Text := ''; DBEdit3.Text := ''; DBEdit4.Text := ''; DBEdit5.Text := '';

19

信息与计算科学系课程设计报告

DBEdit6.Text := ''; DBEdit7.Text := ''; editBookID.SetFocus; end; end;

其他相关实现代码:

procedure TfrmLendBook.editBookIDKeyPress(Sender: TObject; var Key: Char);

begin

if Key = #13 then begin

if ViewBook(editBookID.Text) = false then begin

ShowMessage('没有此书, 请重新选择!'); Exit; end;

DM.QueryBook.Filtered := false;

DM.QueryBook.Filter := '图书编号=''' + editBookID.Text + ''''; DM.QueryBook.Filtered := true; end; end;

function TfrmLendBook.ViewBook(BookID: string): boolean; var Query: TADOQuery; begin

Query := TADOQuery.Create(self);

Query.Connection := DM.ADOConnection1;

Query.SQL.Add('select * from 图书明细表 where 图书编号=:id'); Query.Parameters.ParamByName('ID').Value := BookID; Query.Open;

if Query.RecordCount = 0 then begin

Result := false; ; Exit; end else

Result := true; end;

function TfrmLendBook.viewUser(user: string): boolean; var Query1: TADOQuery; begin

Query1 := TADOQuery.Create(self);

Query1.Connection := DM.ADOConnection1;

Query1.SQL.Add('select * from 学生信息表 where 借书证号=:id'); Query1.Parameters.ParamByName('ID').Value := user; Query1.Open;

20

信息与计算科学系课程设计报告

if Edit6.Text = '' then begin

ShowMessage('图书类型名不能为空!'); Edit6.SetFocus; Exit; end;

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Text := 'insert into 图书明细表(图书编号,类别编号,' + '图书名称,作者,出版社,出版日期,定价)' +

'values(:id,:type,:name,:author,:publish,:time,:price)';

ADOQuery1.Parameters.ParamByName('id').Value := Trim(Edit1.Text); ADOQuery1.Parameters.ParamByName('name').Value := Trim(Edit2.Text); ADOQuery1.Parameters.ParamByName('type').Value := trim(edit6.Text); ADOQuery1.Parameters.ParamByName('author').Value := Trim(Edit3.Text); ADOQuery1.Parameters.ParamByName('publish').Value := Trim(Edit5.Text);

ADOQuery1.Parameters.ParamByName('time').Value := StrToDate(Trim(Edit7.Text));

ADOQuery1.Parameters.ParamByName('price').Value := StrToFloat(Trim(Edit4.Text));

ADOQuery1.ExecSQL; ADOQuery1.Close; if messagedlg('入库完毕,还有要入库的书籍吗?', mtconfirmation, [mbyes, mbno], 0) = mryes then

begin

Edit2.Text := ''; Edit1.Text := ''; Edit3.Text := ''; Edit4.Text := ''; Edit5.Text := ''; Edit6.Text := ''; Edit7.Text := ''; Edit2.SetFocus; end; end;

5.7 密码修改代码:

procedure TfrmModifyPsw.Button1Click(Sender: TObject); begin try

with DM.ADOQuery1 do begin

if yhmedit.Text = '' then begin

26

信息与计算科学系课程设计报告

ShowMessage('用户名不能为空!'); yhmedit.SetFocus; Exit; end;

if jmmedit.Text = '' then begin

ShowMessage('请输入旧密码!'); jmmedit.SetFocus; Exit; end;

if xmmedit.Text = '' then begin

ShowMessage('请输入新密码!'); xmmedit.SetFocus; Exit; end;

if qrmmedit.Text = '' then begin

ShowMessage('请确认密码!'); qrmmedit.SetFocus; Exit; end; Close; SQL.Clear;

SQL.Add('select * from 用户 where 姓名=:xm and 密码=:mm'); Parameters.ParamByName('xm').Value := Trim(yhmedit.Text); Parameters.ParamByName('mm').Value := Trim(jmmedit.Text); Open;

if RecordCount < 1 then begin

ShowMessage('旧密码不正确!'); Exit; end;

if xmmedit.Text <> qrmmedit.Text then begin

ShowMessage('新密码和旧密码不一致!'); Exit; end; end;

with DM.ADOQuery1 do begin Close; SQL.Clear;

SQL.Add('update 用户 set 密码=:mm where 姓名=:xm');

27

信息与计算科学系课程设计报告

Parameters.ParamByName('xm').Value := Trim(yhmedit.Text); Parameters.ParamByName('mm').Value := Trim(xmmedit.Text); ExecSQL;

ShowMessage('密码修改成功!'); end; except

ShowMessage('密码修改失败!'); end;

jmmedit.Clear; xmmedit.Clear; qrmmedit.Clear; end;

5.7 读者服务代码:

(1)登陆代码

procedure TfrmReaderSer.Button1Click(Sender: TObject); begin

with DM.ADOQuery1 do begin Close; SQL.Clear;

SQL.Add('select * from 学生信息表 where 学号=:username and 密码=:pass ');

Parameters.ParamByName('username').Value := Edit1.Text; Parameters.ParamByName('pass').Value := Edit2.Text; Open;

Button4.Enabled := true; Button6.Enabled := true; Button5.Enabled := true;

ShowMessage('欢迎继续使用!'); if RecordCount < 1 then begin

ShowMessage('用户名或密码错误,请重新输入!'); Edit2.Text := ''; Exit; end else begin end; end; end;

(2)修改按钮代码:

procedure TfrmReaderSer.Button4Click(Sender: TObject);

28

信息与计算科学系课程设计报告

begin try

with DM.ADOQuery1 do begin Close;

SQL.Clear;

SQL.Add('select * from 学生信息表 where 姓名=:xm and 密码=:mm'); Parameters.ParamByName('xm').Value := Trim(yhmedit.Text); Parameters.ParamByName('mm').Value := Trim(jmmedit.Text); Open;

if RecordCount < 1 then begin

ShowMessage('旧密码不正确!'); Exit; end;

if xmmedit.Text <> qrmmedit.Text then begin

ShowMessage('新密码和旧密码不一致!'); Exit; end; end;

with DM.ADOQuery1 do begin Close;

SQL.Clear;

SQL.Add('update 学生信息表 set 密码=:mm where 姓名=:xm'); Parameters.ParamByName('xm').Value := Trim(yhmedit.Text); Parameters.ParamByName('mm').Value := Trim(xmmedit.Text); ExecSQL;

ShowMessage('密码修改成功!'); end; except

ShowMessage('密码修改失败!'); end;

jmmedit.Clear; xmmedit.Clear; qrmmedit.Clear; end;

29

本文来源:https://www.bwwdw.com/article/1956.html

Top