案例3 图书管理系统.docx
《案例3 图书管理系统.docx》由会员分享,可在线阅读,更多相关《案例3 图书管理系统.docx(87页珍藏版)》请在冰豆网上搜索。
![案例3 图书管理系统.docx](https://file1.bdocx.com/fileroot1/2022-10/8/4fca14af-602a-4d2b-9aee-efa270e19499/4fca14af-602a-4d2b-9aee-efa270e194991.gif)
案例3图书管理系统
案例3图书管理系统
第5章图书管理系统
本章对数据库的连接主要采用Windows自带的ODBC来完成,在应用程序中使用了TDatabase控件。
5.1摘要与关键字
5.1.1摘要
图书资料管理系统主要是针对高校的图书馆作为使用对象而开发的,作为一个典型的信息管理系统(MIS),其系统开发任务主要包括数据库的设计与维护、客户端应用程序的开发等两个方面。
对于前者要求建立起的数据库具有完整性和一致性,且具有一定的数据安全性如用户需要密码才能使用等,而对于后者则要求程序界面友好、功能完备等特点。
经过详细的分析,选用Borland公司的Delphi作为前端开发工具,利用其提供的集成开发环境及各种控件,尤其是对数据库的支持完成对数据库的各种操作,达到对图书资料管理的目的。
首先建立系统应用原型,然后对原型系统进行需求迭代,不断修正和改进,直到形成用户满意的实际可行系统。
5.1.2关键词
图书、管理、设计、实现、SQLServer。
5.2引言
图书资料的管理是高校图书馆都必须切实面对的工作,但一直以来人们使用传统的人工方式管理图书资料,这种管理方式存在着许多缺点,如:
效率低、保密性差且较为烦琐,另外随着图书资料数量的增加,其工作量也将大大增加,这必然增加图书资料管理者的工作量和劳动强度,这将给图书资料信息的查找、更新和维护都带来了很多困难。
经过我们详细的调查,目前我国各类高等院校中有相当一部分单位图书资料管理还停留在人工管理的基础上,尤其是中、小学的图书资料的管理更是如此,这样的管理机制已经不能适应时代的发展,其管理方法将浪费许多人力和物力。
所示。
图5-1系统数据流图
5.3.2开发与运行环境
本例的高校图书管理系统开发与运行环境如下:
开发环境:
WindowsXP
开发工具:
Delphi8
数据库管理系统:
SQLServer2000
运行环境:
Windows98/ME/2000/XP
5.4系统设计
5.4.1系统模块设计
根据系统功能分析和高校图书管理的特点,经过模块化的分析得到如图5-2所示的系统功能模块结构图。
图5-2系统功能模块图
5.4.2数据库设计
1.数据字典
根据系统功能模块结构图和高校图书管理流程,以及典型高校图书管理系统的需求,总结出如下的数据字典:
●系统用户数据:
图书馆内部人员使用图书管理系统的身份数据,包含的数据项有用户编号、登录口令、权限代码。
●读者类别数据:
借阅图书读者的类别数据,包含的数据项有读者类别编号、类别名称、借书数量、借书期限、有效期限。
●读者个人数据:
读者个人与图书借阅有关的身份数据,包含的数据项有借阅证编号、读者类别编号、姓名、部门名称、办证时间。
●图书书目数据:
用于图书编目使用的书目数据,包含的数据项有索书号、图书条码、书名、作者、出版社、出版日期、字数、页数、内容简介、关键词。
●新书书目数据:
图书编目产生的书目数据,包含的数据项与图书书目数据相同。
●馆藏书目数据:
新书书目经典藏之后形成馆藏图书书目数据,包含的数据项有索书号、图书条码、书名、作者、出版社、出版日期、字数、页数、内容简介、关键词、入馆日期、复本数、可借数、库室名。
●图书征订数据:
征订图书的相关数据,包含的数据项有书名、作者、出版社、出版日期、数量、征订日期。
●图书借阅数据:
包含的数据项有图书条码、借阅证编号、借阅日期、还书日期、图书所在库室编号。
●操作日志数据:
包含的数据项有用户名、操作时间、操作动作。
2.数据库结构设计
根据系统需求,分析出实体-关系图,如图5-3所示。
图5-3实体-关系图
根据实体-关系图和数据字典,设计出高校图书管理系统数据库中的各个数据表。
根据用户使用要求得到系统用户数据表,根据读者实体得到读者个人数据表,根据数据字典对读者的要求得到读者类别数据表,根据图书实体得到图书书目数据表,根据新书实体得到新书书目数据表,根据馆藏图书实体得到馆藏书目数据表,根据征订关系得到图书征订数据表,根据借阅关系得到图书借阅数据表,根据系统要求记录操作日志得到操作日志数据表。
数据表名称与结构如下:
系统用户数据表:
表名“t_user”,结构见表5-1。
表5-1t_user表结构
字段名
类型
大小
索引
说明
Bh
Char
5
是
编号
Passwd
Char
6
密码
Limit
Tinyint
权限
读者个人数据表:
表名“t_dzb”,结构见表5-2。
表5-2t_dzb表结构
字段名
类型
大小
索引
说明
Zh
Char
5
是
证号
Lxdm
Tinyint
类型代码
Xm
Char
20
姓名
Bm
Char
20
部门
Rq
Datetime
日期
读者类别数据表:
表名“t_lxdm”,结构见表5-3。
表5-3t_lxdm表结构
字段名
类型
大小
索引
说明
Lxdm
Tinyint
是
类型代码
Lxmc
Char
10
类型名称
Jsl
Tinyint
借书量
Jsq
Tinyint
借书期
Yxq
Tinyint
有效期
图书书目数据表:
表名“t_tsb”,结构见表5-4。
表5-4t_tsb表结构
字段名
类型
大小
索引
说明
Id
Bigint
是
自动增长
Tm
Char
7
条码
Syh
Varchar
30
索引号
Sm
Varchar
60
书名
Zz
Varchar
30
作者
Cbs
Varchar
60
出版社
Cbrq
Datetime
出版日期
Zs
Int
字数
Ys
Int
页数
Nrjj
Varchar
200
内容简介
Gjz
Varchar
100
关键字
新书书目数据表:
表名“t_xsb”,结构同上。
馆藏书目数据表:
表名“t_csb”,结构见表5-5。
表5-5t_csb表结构
字段名
类型
大小
索引
说明
Tm
Char
7
条码
Syh
Varchar
30
索引号
Sm
Varchar
60
书名
Zz
Varchar
30
作者
Cbs
Varchar
60
出版社
Cbrq
Datetime
出版日期
Zs
Int
字数
Ys
Int
页数
Nrjj
Varchar
200
内容简介
Gjz
Varchar
100
关键字
Rgrq
Datetime
入馆日期
Jbs
Smallint
基本数
Kjs
Smallint
可借数
Ksm
Char
20
库室名
图书征订数据表:
表名“t_dgb”,结构见表5-6。
表5-6t_dgb表结构
字段名
类型
大小
索引
说明
Sm
Varchar
60
书名
Zz
Varchar
30
作者
Cbs
Varchar
60
出版社
Cbrq
Datetime
出版日期
Sl
Int
数量
Dgrq
Datetime
定购日期
图书借阅数据表:
表名“t_jyb”,结构见表5-7。
表5-7t_jyb表结构
字段名
类型
大小
索引
说明
Tm
Char
7
是
条码
Zh
Char
6
证号
Jsrq
Datetime
借书日期
Hsrq
Datetime
还书日期
Yh
Tinyint
已还
Kh
Tinyint
库号
操作日志数据表:
表名“t_log”,结构见表5-8。
表5-8t_log表结构
字段名
类型
大小
索引
说明
Name
Char
10
是
用户名
Czsj
Datetime
操作时间
Czlog
Varchar
200
操作动作
5.5系统实现
5.5.1建立数据库
本例数据库使用SQLServer2000,数据库名为TSGL。
在SQLServer2000数据库服务器上建立数据库以及各数据表的过程,在这里不作介绍,有关内容参阅SQLServer相关书籍。
5.5.2建立连接
本例使用ODBC数据源连接数据库,数据源名为mybase。
建立过程可参阅第四章内容。
5.5.3程序设计
1.主窗体
主窗体保存为main.pas。
主窗体界面如图5-4所示,包含一个Database组件、一个MainMenu组件和一个StatusBar组件。
图5-4主窗体
窗体主要组件属性设置见表5-9。
表5-9主窗体组件属性设置
组件
属性值
Form1
Name='MainForm'FormStyle=fsMDIFormCaption='高校图书管理系统'
MainMenu1
Database1
DatabaseName=mybaseLoginPrompt=False
StatusBar1
其中Database1的Params属性添加两项USERNAME和PASSWORD分别设置为SQLServer的登录用户名和密码。
主窗体中定义全局变量dlname,用于保存登录的用户名。
编写一个过程addlog完成日志记录,和一个函数getnettime用来取得服务器时间,保证系统时间的一致性。
过程和函数的代码如下:
//取得服务器时间函数
functionTMainForm.getnettime:
string;
begin
withTQuery.Create(nil)do
begin
try
Close;
SessionName:
=MainForm.Database1.SessionName;
DatabaseName:
=MainForm.Database1.DatabaseName;
SQL.Clear;
SQL.Add('selectgetdate()asaa');
Open;
result:
=FieldByName('aa').AsString;
finally
Free;
end;
end;
end;
//日志记录过程
procedureTMainForm.addlog(varname,czsj,czlog:
string);
varsqlstr:
string;
begin
//生成将参数传递的信息写入日志数据表的SQL语句
sqlstr:
='insertintot_log(name,czsj,czlog)values('''+name+''','''+czsj+''','''+czlog+''')';
withTQuery.Create(nil)do
begin
try
Close;
SessionName:
=MainForm.Database1.SessionName;
DatabaseName:
=MainForm.Database1.DatabaseName;
S