数据库
课 程 设 计 报 告
院系: ******
班级:
课题:
教师: ******
学生: ******
目录
一、需求分析 .........................................................................................3
二、系统结构设计...................................................................................3
三、数据库设计.......................................................................................5
四、三层架构及设
计................................................................................10
BookManageSystem.Model
BookManageSystem.Common
BookManageSystem.DAL
BookManageSystem.BLL .
BookManageSystem
五、窗体设
计 .........................................................................................10
六、测试中发现的问题以及解决的方法..............................................15
七、收获和体会......................................................................................16
2
一、需求分析:
1.1需求分析
? 信息需求(基本信息)图书卡片信息:图书编号,图书类别代码,图书名称,作者姓名,
出版社,出版日期,定价,内容摘要,实际数量,借出数量,卡片登记日期等。 ? 图书分类索引:图书类别代码,类别说明等。读者信息:读者编号,读者姓名,读者性
别,读者职务,工作单位,联系电话,家庭住址,E— mail,登记日期等。
? 图书借阅信息:图书编号,读者编号,借阅数量,借阅日期,应归还日期,实际归还日
期,罚款金额等。
? 用户信息:用户登录名,用户口令,用户权限,用户全名,用户身份等。
1.2图书管理信息的查询功能:
? 图书信息查询 :
图书信息查询应提供多种不同的查询手段,如按图书类别、按图书编号、按作者、按出版社、按出版日期等,应支持不确定查询(即所谓的模糊查询)。
? 读者信息查询:
读者信息查询应提供的查询手段包括:按读者编号、按读者姓名、按联系电话、按登记日期等,同样能够支持不确定查询。图书借阅信息的查询和统计
? 功能处理需求
1) 图书卡片的维护
2) 读者信息的维护
3) 图书借出处理
4) 图书归还处理
5) 信息查询和统计处理
二、系统结构设计:
2.1系统目标:
根据上述需求分析可以得出,书店管理系统完善后应该达到以下目标:
? 界面设计友好、美观。
? 数据存储安全、可靠。
3
? 信息分类清晰、准确。
? 强大的查询功能,保证数据查询的灵活性。
? 数显对图书借阅和归还的全程数据信息跟踪。
? 提供图书借阅排行榜,为图书管理员提供真实的数据信息。
? 提供灵活、方便的权限设置功能,使整个系统的管理分工明确。
? 具有易维护性和易操作性。
2.2系统功能结构:
系统功能模块划分
使用恰当的图书管理系统,不仅能使图书管理员通过系统管理图书分类,还能让图书馆
管理员掌握图书的借阅与归还情况,除此之外,还具有以下优点:
? 图书馆总管理员可以通过该系统的权限管理模块对不同职责的管理员进行
功能分配,也可以对读者所具有的查询权限进行分配,从而实现资源最大程度的利用。
? 图书管理员可以通过该系统管理读者信息,如对读者信息的添加,修改及删除等,对符
合借阅条件的读者进,出入图书馆的监控。
? 读者可以通过该系统对图书信息进行浏览,查阅自己需要的图书信息。
? 读者可以通过本系统查询自己借阅图书的情况,查询自己借阅的图书应归还日期,以及
查询自己借阅的图书是否过期,是否应当处以罚金,从而保证图书借阅程序的正常运行。
综上所述,可以看出图书信息管理系统的主要功能如下:
? 图书卡片管理:主要管理图书信息的添加,修改,删除。
? 读者信息维护:主要管理读者信息的添加,修改,删除。
? 图书借阅管理:主要对图书的借阅及归还进行管理。
? 信息查询管理:主要是包含图书信息查询,读者信息查询及借阅查询。
? 用户权限管理:主要用于管理员管理各个不同职能的用户的权限分配。
本系统的详细功能划分如下图所示:
4
图一 书店管理系统功能结构图
三、数据库设计
3.1 数据库需求分析:
在设计数据库结构时,应尽可能地满足用户所提出的各项需求,同时又要避免冗余数据的产生。由于在图书管理信息系统中,需要采集处理大量的信息,包括图书卡片信息,读者信息,图书借阅信息及用户信息等,如果不能合理,有效地组织数据表的结构以及合理设置每张表所包含的字段,那么在后期进行数据的整理及汇总时,就会增加开发人员的编程难度,并造成程序效率的大幅度下降。根据图书管理信息系统的特点归纳总结出一下规律: ? 一个图书类别可以包含多种图书。
? 一个借阅信息依赖余读者信息及图书信息。
根据上述数据之间的对应关系以及依赖关系,可以确定出数据库中所必备信息的一下几方面:
? 图书卡片信息,包含图书的编号,名称,作者,出版社等相关信息。
? 图书类别信息,包含图书类别编号,图书类别说明等相关信息。
? 读者信息,包含读者编号,读者姓名,读者性别,读者职务等相关信息。
? 图书借阅信息,包含图书编号,读者编号,借阅数量,借阅日期等信息。
? 用户信息,包含用户登录名,用户口令,用户全名等相关信息。
5
3.2 数据库概念结构设计:
根据数据库需求分析结果,接下来就可以确定并概括出程序中所包含的的实体及实体之间的关系,作为后续的数据库逻辑结构设计的基础和指导。根据本程序的需要,可以归纳出的实体包括图书卡片信息实体、图书类别实体、图书借阅关系实体、用户信息实体、其中各实体的关系分别如下。
3.2.1 图书卡片信息实体E-R图
图三 图书卡片信息实体E-R图
3.2.2 图书类别实体E-R图
图四 图书类别实体E-R图
6
3.2.3 读者信息实体E-R图
图五 读者信息实体E-R图
3.2.4 图书借阅关系实体E-R图
图六 图书借还实体E-R图
7
3.2.5 用户信息实体E-R图
图七 用户信息实体E-R图
各个实体间的关系
图八 各个实体之间的关系
8
3.3数据库逻辑结构设计
在设计完数据库实体E-R图之后,将根据实体E-R图设计数据表结构。下面列举主要的表。
总体表预览:
按照表名称及前期的数据库设计,现将各字段、字段类型定义以及相关数据库定义如下:
图书卡片信息表:
图书分类索引表:
9
读者信息表:
图书借阅信息表:
用户信息表:
10
设置表之间的依赖关系:
一般情况下,数据库中所包含的的表都不是独立存在的,而是表与表之间存在一定的依赖关系,称为“关联”。例如,借阅关系表中的读者编号和图书编号,分别来源于读者信息表和图书卡片信息表。如果数据库的信息不能满足正常的依赖关系,就会破坏数据的完整性。所以我们将各个表之间建立了相互依赖的关系。
四 三层架构及设计
4.1 BookManageSystem.Model
本文件的各文件包含如下:
? CtbBookInformation.cs:实体类CtbBookInformation,图书卡片实体的抽象。 ? CtbBookSort.cs: 实体类CtbBookSort,图书卡片类别的抽象。
? CtbLend.cs: 实体类CtbLend,借阅关系实体的抽象。
? CtbReaderInformation.cs:实体类CtbReaderInformation,读者实体的抽象。 ? CtbUserInformation.cs:实体类CtbUserInformation,用户实体的抽象。
4.2 BookManageSystem.Common(集体代码详见程序)
4.3 BookManageSystem.DAL(集体代码详见程序)
4.4 BookManageSystem.BLL(集体代码详见程序)
4.5 BookManageSystem.
本项目就是表现层,是直接与用户打交道的一层,要与用户交互,将用户需要的操作都呈献给用户。该项目分为5个模块:
? 图书卡片管理
? 读者信息维护
? 读者借阅管理
? 系统信息查询
? 用户权限管理
五、窗体设计
11
5.1 主窗体
主页面是一个信息含量高、内容较丰富的宣传平台。登陆窗体运行效果:
浮动快捷菜单(图书卡片管理、读者信息维护、读者借阅管理、系统信息查询、用户权限管理等)。
12
5.2 用户权限管理窗体
用户权限管理窗体运行效果如图:
5.3 图书卡片管理
图书卡片管理分成了图书卡片类别管理和图书卡片管理两部分,运行结果如下:
13
5.4 读者信息维护
读者信息维护功能主要实现对读者信息的新增、修改和删除,功能单一,基本与图书卡片管理系统没有太大的出入,所以代码没有太大的出入。
5.5 图书借阅管理
图书借阅管理模块共分为图书借阅和图书归还两部分。采用tabControl控件将两个功能设计到了一个窗体frmBorrowReturnMana.cs上,最终的窗体如图:
14
5.6 系统信息查询
运行界面如下图:
六、测试中发现的问题以及解决的方法
1、在编写代码时没有考虑到借出数量和实际存书的问题,在测试时当借出数量大于实际存书数量时没有发生实质性错误 但是明显不符合逻辑,我们及时发现并改正了错误。
2、表的主外键之间的连接问题。表和表之间需要建立联系才能更好地发挥作用,但是建表之后四张相关联的表却没有很好地联系在一起,于是我们问了其他同学,在数据库关系表里将四张图联系在一起解决了这个问题。
3、用C#设计页面时,由于没有接触过很多C#的知识,在设计过程中遇到了很多问题,于是请教了曾长军老师顺利的解决了问题。
15
七、收获和体会
经过这几周的时间,终于把书店管理系统完成了。由于之前没有学过C#编程。所以要写起来还是有点吃力的,但是还是借了很多的参考书好好地学一下。
首先我分析了相关的题目内容,并由此而进行了相关资料和书籍的查询工作然后才开始正式进行设计。一开始不知从何下手但后来分析了一下题目。图书管理主要就是有一些操作来完成,这些操作包括:图书卡片管理、读者信息维护、读者借阅管理、系统信息查询、用户权限管理,通过这几天的程序及报告编写,我也发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还是比较脆弱。尤其是编写大型的程序所要拥有的知识和技能比较缺乏。程序编好了,还要经过调试和修改,这步也很关键,好的程序是经过了无数次的修改和调试才产生的。我的程序基本上能够满足要求,但还有一些地方需要改进,在今后我应该在多看书的同时还要加强实践的练习。才能进一步提高自己的编程能力。
16
第二篇:图书管理系统数据库课程设计报告书
图书管理系统
一、背景资料:
1) 图书馆有各种图书若干万册。
2) 每种图书都有书名、图书编号、作者(译者)、出版社、定价和内容简介。
3) 借书证记录有借阅者的姓名、工作单位、住址、联系电话等。
4) 凭借书证借书,每次最多能借5本书,借书期限最长为60天。
二、系统功能需求:
1)图书馆借阅书籍于归还书籍的登记。也就是为读者建立一个台账,应用该台账,工作人员能方便地掌握某位读者借了哪些书,借了多长时间。
2)编著催还图书通知单。图书馆对所借书籍的最长借阅时间限制为60天,对逾期未还的读者下达催还图书通知单,促其尽快还书,以加快图书的流通。
3)提供快速的图书查询功能,方便读者尽快插大所需要的书。
4)系统提供的全部功能要简单、直观、实用。
三、系统数据库关系的E—R图:
系统所涉及到的实体及关联关系比较简单,主要的实体只有读者和图书两个,他们通过读者的借阅活动而发生联系,其E—R图如下:
四、系统设计:
1、功能设计:
1) 图书借阅。为有借书证的读者办理借阅登记,登记的内容包括借书证编号、图书编号、借阅日期。
2)图书归还。在适当位置登记,这个适当位置应该由借书证编号和图书编号决定。
3)编制催还图书通知单。对借阅图书超过60天者打印催还图书通知单,其内容包括借书证编号、读者姓名、电话号码、图书编号、名称、作者、出版社、借阅日期等信息。
4)借书证办理与退还。本系统只提供对借书证发放(办理)和回收(退还)两个过程的支持。
5)图书入库预报废。新采购书的入库登记和废旧图书的报废登记。对于新书入库有两种不同的情况:其一是新采购的图书在以前登记过,这次属于补充库存; 其二是图书馆以前没有登记过。
2、数据库设计:
根据E—R图,将其转化为如下数据实体,数据库:book.dbc,包括如下的表和视图:
1) 借书证发放登记表——reader.dbf。
借书证编号 C(8)
读者姓名 C(8)
工作单位 C(30)
电话号码 C(11)
家庭住址 C(20)
#b@2日期 D
退证日期 D
2) 图书登记表——booker.dbf。
图书编号 C(8)
- 2 -
图书名称 C(30)
作者 C(8)
出版社 C(30)
图书类别 C(8)
图书价格 N(5,1)
内容提要 M
库存数量 I
在库数量 I
3) 图书类型表——typer.dbf
图书类别 C(8)
4) 借书登记表——brower.dbf
借书证编号 C(8)
图书编号 C(8)
借阅日期 D
归还日期 D
5) 借书视图——brower
为了打印催还通知书单的需要,设计了一个借书视图文件,该视图从 reader.dbf等3个表中提取了7个字段的数据:
reader.借书证编号
reader.姓名
reader.电话号码
brower.图书编号
brower.借阅日期
booker.图书名称
booker.作者
其视图关系可由以下SQL语句定义:
Select reader.借书证编号, reader.姓名, reader.电话号码, brower.图书编号,; brower.借阅日期,booker.图书名称,booker.作者;
from book!reader inner join book!brower;
inner join book!booker;
on brower.图书编号=booker.图书编号
on reader. 借书证编号= brower. 借书证编号;
where brower.借阅日期<data()-60;
and data()-brower.归还日期=0;
order by reader.借书证编号
3、总体模块设计:
该系统的全部功能由一个主控界面(两个表单)、一个报表以及相关的四个表单组成,其总体模块框图如下:
- 3 -
五、模块设计:
1、欢迎界面和主控界面表单的设计:
图书馆信息管理系统的主界面由“欢迎表单”和“主控表单”组成,主控表单上安排六个命令按钮,分别实现总体框图中的五部分功能和退出系统模块。每个命令按钮触发的结果均执行一条命令,运行一个表单,或启动一个报表文件的运行,或者退回到visual foxpro系统状态。
欢迎表单标签的caption属性为“欢迎使用河南理工大学图书管理系统!”,并设置“进入”和“退出”两个按钮,通过“进入”按钮(设计代码为:do form 主控表单.scx)进入主控界面,通过“退出”按钮退出系统。
主控表单的设计代码如下:
“借书证管理”按钮的click事件代码:do form 借书证管理.scx
“借书登记”按钮的click事件代码:do form借书登记.scx
“还书登记” 按钮的click事件代码:do form还书登记.scx
“图书入库与报废” 按钮的click事件代码:do form图书入库与报废.scx “催还书通知” 按钮的click事件代码:report form催还书通知.frx
“退出系统”按钮的click事件代码:
Release thisform
Close all
Quit
2、其他表单的设计:
1)借书证管理表单设计:
此表单的数据源是reader.dbf表,在其支持下完成用户要进行的图书证的发放和退回工作。用户从“借书证编号”文本框中输入一个借书证编号,如果该借书证在reader.dbf表中已存在,系统会在下面的表格对象中显示与之对应的读者情况,否则显示为空。当单击“办理借书证”按钮后,系统会在表格中添加一行空记录,等待用户输入新读者的资料,并自动把#b@2日期赋值为系统当前日期,用户退出表单时系统将新数据存入与表单对应的reader.dbf表中;当用户单击“退还借书证”按钮后,系统把当前日期赋值给换证日期字段,表述该读者已归还借书证。
与表单对应的各种对象的属性值和事件代码说明如下:
(1)“借书证编号”文本框的属性值和事件代码:
Name属性——text1
Format属性——‘XXXXXXXXXX’
Interactivechange事件代码:
thisform.dataenvironment.cursor1.filter='借书证编号
='+""+trim(this.value)+"" - 4 -
thisform.refresh
return
Lostfocus事件代码:
thisform.dataenvironment.cursor1.filter='借书证编号='+""+trim(this.value)+"" thisform.refresh
return
(2)“办理借书证”按钮的click事件代码:
append blank
replace 借书证编号 with thisform.text1.value,#b@2日期 with date()
thisform.dataenvironment.cursor1.filter=’借书证编号=’+""+trim(thisform.text1.value)+""
thisform.refresh
return
(3)“退还借书证”按钮的click事件代码:
thisform.gird1.column6.text1.value=data()
return
(4)“退出”按钮的click事件代码:
CLOSE ALL
Thisform.release
其他表单的“退出”按钮的代码完全相同,以后不再进行说明。
2) 借书证登记表单的设计:
此表单是整个系统的一个主要菜单,共涉及到reader.dbf,booker.dbf,brower.dbf,typer.dbf等四个表。用户在左上角的组合框对象中选择“借书证编号”,文本框中的“读者姓名”与“电话号码”是系统自动显示的。在“选择图类型”组合框中选择要借阅的图类型,表格中显示图书的库存信息,在单击“借阅”按钮后,系统自动进行借阅登记,表单下半部分显示该读者现在未归还的图书及借阅日期。
下面对有关对象的属性及代码进行说明:
(1) 数据环境。数据环境中包含了四个表,其中的cuosor对象与表的对
应关系如下:
Cuosor1—typer.dbf 图书类型表
Cuosor2—booker.dbf 图书登记表
Cuosor3—reader.dbf 借书证登记表
Cuosor4—brower.dbf 借书登记表
(2)“借书证编号”组合框的属性和事件代码:
Constrolsource属性——reader.借书证编号
Interactivechange代码:
thisform.dataenvironment.cursor3.filter='借书证编号='+""+this.value+""
thisform.dataenvironment.cursor4.filter='借书证编号='+""+;
this.value+""+'and data()-brower.归还日期=0'
thisform.refresh
lostfocus代码:
- 5 -
thisform.dataenvironment.cursor3.filter='借书证编号='+""+this.value+""
thisform.dataenvironment.cursor4.filter='借书证编号='+""+;
this.value+""+'and data()-brower.归还日期=0'
thisform.refresh
(3)“图书类型选择”组合的属性:
Rowsource属性——typer.图书类别
(4)显示姓名的文本框:
Controlsource——reader.读者姓名
(5)显示电话号码的文本:
Controlsource——reader.电话号码
(6)表单上半部分的表格对象,由表格对象生成器生成即可,该表格对象以booker.dbf表为数据源。
(7) 表单下半部分的表格对象,由表格对象生成器生成即可,该表格对象以brower.dbf表为数据源。
(8)“借书”按钮的click事件代码如下:
if booker.图书编号=trim(thisform.combo2.value)
replace booker.在库数量 with booker.在库数量-1
endif
if used("brower")
select brower
go bottom
append blank
endif
if booker.图书编号=trim(thisform.combo2.value)
replace brower.图书编号 with booker.图书编号
replace brower.借阅日期 with data()
endif
if used("reader")
select reader
replace brower.借书证编号 with reader.借书证编号
endif
thisform.refresh
return
3) 还书登记表单的设计:
该表单共涉及reader.dbf,brower.dbf和booker.dbf等三个数据表,当用户在借书证编号的组合框内选择一个借书证编号后,系统会自动在后面的文本框中现实与该编号对应的读者姓名和联系电话,并在表格对象中显示该读者尚未归还的书,然后由用户在表格中用鼠标选择其要归还的书,选中后单击“还书”按钮。
有关对象的属性及代码说明如下:
(1)数据环境。该数据环境包含三个表,数据环境中cursor对象与表的对应关系是:
Cursor1——reader.dbf
Cursor2——brower.dbf
Cursor3——booker.dbf
- 6 -
(2)“借书证编号”组合框的属性和事件代码:
Rowsource属性——reader.借书证编号
Gotfocus事件代码:
Thisform.dataenvironment.cursor1.filter=""
thisform.refresh
Interactivechange代码:
thisform.dataenvironment.cursor1.filter='借书证编号='+""+this.value+""
thisform.dataenvironment.cursor2.filter='借书证编号='+""+this.value+""+'and data()-归还日期=0'
thisform.refresh
(3)读者姓名文本框属性。
Control属性——reader.读者姓名
Enable属性——.F.
4)读者电话文本框属性。
Control属性——reader.电话号码
Enable属性——.F.
(5)表格对象。表格对象由表格生成器生成,数据源为brower. Dbf表,并在生成后表格的列对象的enabled属性设为.F.
(6)“还书”按钮的click事件代码:
tdbf=alias()
select(thisform.dataenvironment.cursor2.alias)
replace 归还日期 with data()
select(thisform.dataenvironment.cursor3.alias)
replace 在库数量 with 在库数量+1
select &tdbf
thisform.refresh
return
4)“图书入库与报废”表单的设计:
该表单左上角的“图书编号”文本框供用户输入要登记入库和要报废的图书编号,后面的册数文本框输入对应的或报废的图书册数,如果所输入的图书编号是一个booker.dbf表中已存在的编号(这表示是进行图书报废登记),下面的表格对象中会显示该图书的其他信息,反之,表示一种新书要入库登记,实质是要将这种图书信息添加到booker.dbf数据表中。
对表单中有关对象的属性与代码说明如下:
(1) 数据环境。表单中只包含一个booker.dbf表。
(2) “图书编号”与“册数”文本框。Name属性分别为text1和text2。
(3) 表格对象,由表格生成器生成。
(4)“新书入库登记”按钮click事件代码:
thisform.dataenvironment.cursor1.filter='图书编号='+""+trim(thisform.text1.value)+""
if eof()
append blank
replace 图书编号 with thisform.text.value
thisform.refresh
- 7 -
thisform.grid1.column1.enable=.t.
thisform.grid1.column2.enable=.t.
thisform.grid1.column3.enable=.t.
thisform.grid1.column4.enable=.t.
thisform.grid1.column5.enable=.t.
endif
thisform.grid1.column8.text1.value=thisform.grid1.column8.text1.value+val(thisform.text2.value)
thisform.grid1.column9.text1.value=thisform.grid1.column9.text1.value+val(thisform.text2.value)
thisform.refresh
return
(5)“图书报废登记”按钮的click事件代码:
thisform.grid1.column8.text1.value=thisform.grid1.column8.text1.value-val(thisform.text2.value)
thisform.grid1.column9.text1.value=thisform.grid1.column9.text1.value-val(thisform.text2.value)
thisform.refresh
return
3、“催还图书通知”报表设计:
“催还图书通知”报表的设计过程说明如下:
报表数据源 brower.vue视图,该视图已在前面做了说明。
报表分组条件 reader.读者姓名
报表排序条件 reader.借书证编号
该报表由向导程序生成,其后进行了一些格式美化的调整修改工作,关键问题是要先定义好作为数据源的试图文件。
六、总结:
任何一个社会组织和企业公司在发展过程中都会产生大量的数据,这些数据的组织存储、分析统计有利于提高企业的发展,有利于提高企业的效率。这些数据的组织和存储就是数据模型,就是数据库应用系统开发的任务。
数据库应用系统开发的过程一般包括可行性研究、需求分析、系统设计、程序编码、程序调试和系统维护六个阶段。根据数据库应用系统的复杂程度,不一定完全刻板地遵守上述步骤,但是,可行性研究、需求分析、系统设计、程序编码、程序调试是不可缺少的。
本次课程设计制作了一个简单的图书馆管理系统,实现了一些图书管理和借阅功能,但与实际系统还是有很大差别的。首先是对应用情况做了简单的理想化处理,因而难以反映实际工作中可能遇到的实际问题;其次,未考虑用户操作中可能出现的错误的处理,而实际上这种错误的处理程序可能占应用系统的很大一部分。如本系统在需求分析和程序健全性方面均存在一些问题,为了解决这些不 - 8 -
完善之处,需要在今后的进一步学习中,逐步深入,不断积累经验,不但提高。
- 9 -