资源描述
《数据库课程设计》任务书
1. 任务和要求
(1) 先修课程:《数据库原理及应用》,《面向对象程序设计C#》、ASP.NET或JAVA等。
(2) 课程设计题目:《图书管理系统》
若自选题目,则需在课程设计第一天上报题目名称,和开发工具和数据库。
(3) 时间:2周,在《数据库原理及应用》课程结束后进行,提议提前5—8周开始准备。
(4) 开发工具和环境
开发工具:VC、VB、C#、ASP.Net、Java、Delphi等任选。
数 据 库: SQL Server、Oracle、DB2、Sybase等任选。
应用程序:Windows界面程序(C/S),或Web界面程序(B/S)。
(5) 设计汇报正文字数不少于5千字,汇报附录应包含关键源代码。要求层次清楚、整齐规范,不得相互剽窃,凡正文内容有整段相同者一律以作弊论处。
明确课程设计目标和关键性,认真领会课程设计题目,读懂课程设计指导书要求,学会设计基础方法和步骤,主动认真地做好准备工作。课程设计中,学会应用理论知识,搜集、归纳相关资料,和处理实际问题方法。严格要求自己,自信但不固执,独立完成课程设计任务,善于接收老师指导和听取同学意见,有意识地树立严谨科学作风,要独立思索,刻苦钻研,勇于创新,按时完成课程设计任务。
2. 考勤、考评和成绩
(1) 严格考勤制度,每次上机全部要统计,学生有事必需请假。考勤统计影响最终成绩。
(2) 因试验室环境不能满足课题要求,能够申请在试验室外进行设计工作。
(3) 在课程设计最终一次上机之前,必需向老师申请考评,考评时要求演示程序并回复老师提出问题。
(4) 最终成绩以考评成绩为主,考评成绩占80%以上。
(5) 课程设计完成后一周内提交设计汇报Word电子文档和打印件,和程序源代码文件(含处理方案文件和工程文件)、数据库脚本文件和数据库文件。
3. 设计汇报
(1)要求采取统一格式汇报封面。
(2)目录,要求目录层次结构清楚、合理。
(3)正文,要求包含概况、系统分析和设计、系统实现、总结、参考文件等方面内容。
系统分析和设计可包含:系统功效分析、概念模型、数据表结构、三层架构、类设计等。
系统实现可包含:数据库实现(SQL脚本)、程序界面、界面操作、关键技术及实现代码、调试中碰到问题等。
总结可包含:结论(已完成功效、包含关键技术)、下一步工作安排、收获和体会等。
(4)附录,要求包含数据库对象(含存放过程等)SQL脚本代码,和关键源程序代码。
《图书管理系统》设计指导书
1. 设计题目
图书管理系统
2. 设计目标
经过对图书管理系统系统分析、系统设计、编码和调试等工作实践,熟悉管理信息系统开发过程、设计方法及相关编程技术,熟练掌握数据库设计基础理论及方法。
3. 设计任务
要求完成一个含有一定实用价值图书管理系统,关键任务包含:
在Microsoft SQL Server //环境下建立图书管理系统所使用数据库,利用企业管理器或查询分析器建立多种数据库对象,包含:数据表、视图、约束、存放过程和触发器等;
掌握ADO.NET编程技术,对MS SQL Server数据库进行连接和操纵;
掌握使用C#语言开发一个数据库应用系统基础方法和步骤,熟悉部分基础功效实现方法,如:数据维护(插删改等操作),数据查询、浏览和Excel导出,统计和报表,用户登录和权限管理等。
了解C/S或B/S应用程序多层体系结构及三层架构方案设计思想,了解迭代式开发,熟悉面向对象设计方法及其分析和设计过程,了解UML文档及其开发过程中作用。
指导书说明:
(1)开发环境和目标:微软 C#、SQL Server,基于C/S结构Windows应用程序。
(2)仅给出了部分功效设计和实现,以说明面向对象分析和设计通常方法和关键编程技术,其它功效部分需要自己完成。
(3)为降低篇幅和降低阅读门槛,没有追求使用标准UML设计文档和术语。
4. 设计准备
4.1 系统准备
操作系统:Windows xp/7/8
数据库系统:SQL Server //
用户端开发工具:Visual Studio ///
4.2 知识准备
熟悉SQL Server //使用;
熟悉C#、ASP.NET语言及其数据库编程技术。
了解:迭代式开发过程、UML设计文档、设计模式;和图书馆相关业务知识
4.3 迭代式开发
迭代式开发(统一过程UP) 系统开发被组织成一系列固定短期(一段为2-6周)小项目,称为迭代;每次迭代全部产生可实施系统。每次迭代全部包含计划、需求、分析、设计、编码、测试等过程和文档编写工作;第一次迭代考虑系统关键功效,随即迭代逐步扩展系统功效;每次迭代结果(含需求、分析、设计、代码和文档等)均为下一次迭代工作基础,直至满足最终需求。这种开发过程是基于面向对象方法。
5. 系统分析
系统边界和约定
(1) 系统限定在实体书库借阅和管理等业务范围;
(2) 不考虑图书馆电子书库、订购、情报、人事管理等业务;
(3) 不考虑图书馆跨区分布情况,如长江大学图书馆包含多个校区图书馆;
(4) 不考虑图书通借通还,如长江大学读者可在湖北省高校任何一家图书馆借还图书;
(5) 不考虑珍藏图书借阅业务;
(6) 暂不考虑和校园一卡通系统外部接口。一卡通系统为外部系统(外部参与者),卡内统计有身份及相关信息,该系统负责身份验证工作。
(7) 期刊库和论文库借阅和管理等业务可作为二期项目目标,视本系统使用情况而定。
需求概要
(1) 图书管理系统基础功效需求包含:读者管理、图书管理、借阅管理、用户登录和用户管理等;其它功效需求包含:读者查询和预约借书*、统计和报表*、数据备份*、书架管理*、期刊管理*、期刊借阅*、论文管理*、论文借阅*等。(* 表示留待以后迭代周期完成,下同)
(2) 相关领域概念:借书证(读者)、图书、借还书统计。
(3) 系统外部参与者:读者、借书证管理员、图书管理员、借阅管理员、系统管理员。将图书馆工作人员划分为借书证管理、图书管理、借阅管理等三类人员;系统管理员负责数据库和软件系统管理,包含各类管理员用户创建和授权、数据库备份等工作。
系统分析目标
找出系统用例,书写用例文档,建立领域模型(概念模型)。
[用例] use case,或译为使用案例、用况。是指为了完成一个领域目标或任务,提供一个或多个场景来说明其在系统内部和外部(人员或外部系统等)之间交互过程。如办理借书证、借书、还书、用户登录等均为用例;而借阅管理不是用例,因为它包含多个任务;读者可否借书也不是用例,因为它不是一个领域任务或业务目标。参见“参考资料01 用例.doc”。
用例是一个事件流,一个事件对应一个系统操作;如借书用例中“依据借书证号查询读者信息”、“依据借书证号查询超期未归还图书”、“判定读者可否借书”、“判定图书是否在馆”、“确定借书”等均为事件或系统操作。
找出系统用例后,对每个用例交互操作过程进行描述(即书写用例),经过用例发觉领域概念及其属性,并建立领域模型(即概念模型)。用例和领域模型建立过程通常是交互进行,并相互参考、印证和补充完善。
经过用例发觉事件或系统操作,可进行下一步设计和实现工作,是系统设计关键内容。
在面向对象方法开发过程中,分析和设计没有显著界限,只是侧重面不一样而已。
5.1 读者管理
读者管理即借书证管理,包含业务(即用例)有:办理借书证、借书证变更、借书证挂失、解除挂失、补办借书证、注销借书证、批量办理新生借书证*等。(*表示留待迭代2及以后完成,下同。完成这类用例文档并实现其功效者,老师可酌情加分)
借书证(读者)可分为2种类别:老师、学生。
借书证(老师)=借书证号、姓名、性别、所在单位、办证日期、照片等。
借书证(学生)=借书证号、学号、姓名、性别、专业、班级、办证日期、使用期、照片等。其中,使用期由学生类别决定,本科生4年、专科生3年、硕士生3年等。
相关业务规则:(1)读者凭借书证借书;(2)老师最多借书12本,借书期限最长为60天,可续借2次;学生最多借书8本,借书期限最长为30天,可续借1次;(3)处于挂失、注销状态读者不能借书;(4)未归还图书者不能注销其借书证。
分析:增加读者类别概念,统一并简化读者信息,采取老师属性项,而学生可在所在单位填写班级,学生特有读者信息可留待以后开发周期处理。可得到2个概念:读者、读者类别。
读者=借书证号、姓名、性别、所在单位、读者类别、办证日期、照片等。(另可加:电话、邮箱等)
读者类别=读者类别号、类别名称、可借书本数、可借书天数、可续借次数。
思索:学生借书证使用期怎样处理?
1. 办理借书证
用例名称:办理借书证
迭 代:1 (说明:第1次迭代期间用例文档)
参 和 者:借书证管理员(或系统管理员)、读者
综 述:用例起始于读者来到借书证管理办公室,管理员给读者办理新借书证。
触 发 器: (说明该用例触发条件)
前置条件:登录用户含有读者管理权限。
过程描述: (标题名或为:基础步骤、基础事件流、关键成功场景等)
1. 管理员输入:读者类别、所在单位、姓名。
2. 点击“查询”。
3. 系统查询读者信息,并显示查询结果。
4. 管理员判定该读者是否已办理借书证,若是,则可取消办证过程。(人工操作)
5. 管理员输入读者信息:读者类别、姓名、性别、所在单位、办证日期、照片等。(类别、姓名、单位等可预置为过程1中输入值,办证日期可预置为系统日期)
6. 确定办证。
后置条件:创建新读者对象,并含有新借书证号;系统统计读者信息。
业务规则:借书证号应含有唯一性。
待处理问题:
1. 打印借书证;
注 释:未考虑校园一卡通做为借书证使用情况
作者和日期: -7-24日,LSH,版本号1.0
思索:读者分成老师和学生2个概念时,用例有何不一样?
2. 变更借书证
变更借书证类别、使用期、所在单位等,和其它信息;借书证号不可更改。
用例(略 要求自己完成)
3. 挂失借书证
用例名称:挂失借书证
参 和 者:借书证管理员、读者
综 述:用例起始于读者来到借书证管理办公室,管理员给读者办理借书证挂失。
前置条件:登录用户含有读者管理权限,且读者已经存在
过程描述:
1. 输入借书证号,或输入读者类别、单位、姓名。
2. 点击“查询”。
3. 系统查询并显示读者信息。
4. 找到其借书证,且读者状态为有效。
5. 确定挂失。系统修改读者状态为挂失。
后置条件:系统统计读者信息。
业务规则:借书证挂失后严禁读者借书。
分析:修改读者概念,增加属性“借书证状态”;并修改办理借书证用例。
4. 解除挂失
用例名称:解除挂失
参 和 者:借书证管理员、读者
综 述:用例起始于读者来到借书证管理办公室,管理员给读者办了解除借书证挂失。
前置条件:登录用户含有读者管理权限,且读者已经存在
过程描述:
1. 输入借书证号,或输入读者类别、单位、姓名。
2. 点击“查询”。
3. 系统查询并显示读者信息。
4. 找到其借书证。
5. 确定解除挂失。(前提:读者状态为挂失)
6. 系统修改读者状态为有效。
后置条件:系统统计读者信息。
5. 补办借书证
补办借书证过程:创建新借书证(复制原读者信息,但借书证需取新号,其它信息不变),并将原借书证借阅统计转移到新证上,原借书证注销。
用例(略 自己完成)
6. 注销借书证
相关规则:有未归还图书者不能办理注销。
用例(略 自己完成)
7. 批量办理新生借书证*
从教务管理系统导入新生信息,系统生成借书证信息,管理员核实后办理借书证。
用例(略,思索:联机在线导入,离线导入)
8. 读者类型管理
从系统功效完整性来看,还存在一个隐性功效需求:读者类型管理,即读者类型信息插、删、改、查等数据维护操作。
用例(略 要求自己完成)
5.2 图书管理
包含业务(用例):图书编目*、新书入库、图书信息维护、图书变卖和销毁处理*等。
图书信息=书号、书名、作者、出版社、出版日期、ISBN、分类号、语言、页数、单价、内容介绍、图书封面、图书状态等;(图书状态包含:在馆、借出、遗失、变卖、销毁)
1. 图书编目*
新书入库前,图书管理员对图书进行图书编目工作,即依据该馆现有图书分类目录信息编写新书分类号,需要时依据图书分类法增加新图书分类条目。
图书信息= … 、分类号、…
图书分类目录=分类号、分类名。图书分类信息关键用于统计,如汉字图书分类条目:
-----------------------------------------------------------
分类号 分类名
TP 自动化技术、计算机技术
TP3 计算技术、计算机技术
TP31 计算机软件
TP311 程序设计、软件工程
TP312 程序语言、算法语言
TP311.13 数据库理论和系统
TP311.131 数据库理论
新书分类号,图书“C#高级编程(第7版)”可编为:TP312/3033.2
图书分类概念暂不考虑, 可留待以后开发周期处理。
用例名称:图书编目(略)
2. 新书入库
用例名称:新书入库
参 和 者:图书管理员
前置条件:登录用户含有图书管理身份和权限
过程描述:
1. 输入或系统生成起始书号(BkNO)。
2. 输入:图书信息(书名、作者、出版社、出版日期、语言、页数、单价、ISBN、分类号、内容介绍等)、入库数量(N,N>=1)、入馆日期。
3. 确定图书入库。
4. 图书馆工作人员对图书进行贴书签(分类号)、印书号(或条形码)、盖图书馆印章。
5. 图书上架。
后置条件:创建N个图书对象,书号分别为BkNO、BkNO+1、…、BkNO+N-1,这N本图书状态均修改为在馆;系统统计图书信息。
注 释:BkNO+N可作为下一次新书入库起始书号。
思索:图书信息划分为2个概念是否更为合理?
馆藏图书目录=书名、作者、出版社、出版日期、ISBN、分类号、语言、页数、单价、内容介绍、图书封面、入库数量、入馆日期
图书=书号、分类号、图书状态
3. 图书信息维护
图书信息查、删、改等信息维护操作。
用例名称:图书信息维护(略 自己完成,提醒:先查找,再删改)
4. 在馆图书变卖和销毁处理*
长久没有借阅统计且失去保留价值图书能够进行变卖或销毁处理。
用例名称:在馆图书销毁和变卖处理(略)
5.3 借阅管理
包含业务用例:借书、续借、还书等。还书过程包含超期罚款、遗失图书罚款等业务规则。
罚款规则:(1)超期罚款规则 应罚款金额=超期天数*罚款率,罚款率=0.05元/天,罚款率可能随时间或读者类别而改变;实际罚款金额<=应罚款金额,依据实际情况能够进行减免。(2)遗失罚款规则 遗失图书应罚款金额=3*图书单价;实际罚款金额在(1*图书单价,3*图书单价)之间。(3)遗失罚款规则优先于超期罚款规则。
借书统计=借书证号、书号、借书操作员、借书日期、应还日期
续借统计=借书证号、书号、续借操作员、续借日期、应还日期,续借次数
还书统计=借书证号、书号、还书操作员、还书日期、应还日期,超期天数、应罚款金额,实际罚款金额
分析:借书统计、续借统计、还书统计等信息可合并为借阅统计,续借可舍去部分信息。借阅历史统计应该长久保留在数据库中,方便于统计分析,另外,读者对一本书可能数次借阅,故借阅信息应该增加一个标识项:借书次序号。
借阅信息=借书次序号、借书证号、书号、借书操作员、借书日期、应还日期,续借次数、还书操作员、还书日期,超期天数、应罚款金额,实际罚款金额
1. 借书
用例名称:借书
参 和 者:借阅管理员、读者
综 述:用例起始于读者带着图书来到图书借阅大厅,管理员给读者办理借书手续。
前置条件:登录用户含有借阅管理权限。
过程描述:
1. 管理员输入借书证号,点击“查询读者”。
2. 系统查询读者信息、未归还图书信息(含超期),并进行显示。
3. 系统判定读者可否借书(借书证状态为有效,已借书数量小于可借书数量,不存在超期未归还图书)。若不可借书,则严禁借书。
4. 管理员输入待借图书书号,点击“查询图书”。
5. 系统查询,并显示图书信息。
6. 系统判定图书是否在馆,若不在馆,则严禁借书。
7. 管理员点击“借书”。
8. 系统完成以下操作:
8.a 创建借阅统计对象(借书次序号由系统自动产生,借书证号和书号为上述输入值,借书操作员=登录用户,借书日期=系统日期,应还日期=系统日期+可借书天数,续借次数=0,还书日期=NULL,还书操作员=NULL),并标识为未归还;
8.b 修改读者对象已借书数量+1;
8.c 修改图书状态为借出;
后置条件:系统统计借阅对象、读者对象、图书对象。
业务规则:(1)借书证状态为挂失、注销者不能借书;(2)借书数量不能超出可借书数量;(3)有超期未归还图书者不能借书。
注 释:未归还图书状态可采取还书日期为空(NULL)来标识,或另加属性表示是否还书。
修改读者信息:增加“已借书数量”;修改用例办理借书证:后置条件中,已借书数量=0。
练习:修改用例以满足读者携带多本图书进行借书要求。
2. 续借
用例名称:续借
参 和 者:借阅管理员、读者
前置条件:登录用户含有借阅管理权限、图书状态为借出
过程描述:
1. 输入待续借图书书号。
2. 系统查询并获取图书对象、未归还状态借阅统计对象、及其读者对象,并进行显示。
3. 系统判定可否续借(续借次数<可续借次数, 读者状态为有效)。
4. 点击“续借”。
后置条件:修改借阅统计对象(续借次数+1,应还日期+=可借书天数),图书状态为借出,并保留到数据库中。
业务规则:(1)借书证状态为挂失、注销者不能续借;(2)续借次数不能超出可续借次数。
注 释:续借前后图书状态应为借出
3. 还书
还书用例需要处理超期罚款、遗失图书罚款处理2种情况。
用例名称:归还图书(略 要求自己完成,完成罚款处理者,老师可酌情加分)
5.4 用户登录和用户管理
包含用例:用户登录、密码修改、用户管理*,为本系统基础和关键功效。
用户包含2类:读者、管理员。其中,管理员用户权限是4种角色组合:借书证管理、图书管理、借阅管理、系统管理;系统管理员负责全部管理员用户及其权限管理,借书证管理员负责读者管理(即借书证管理)。
管理员是读者,但读者不一定是管理员;读者和管理员间存在(1对0..1)联络。
读者信息+=密码。
管理员信息=用户号、用户名、密码、管理角色
管理角色设计:可采取4位二进制,借书证管理(0001)2=1、图书管理(0010)2=2、借阅管理(0100)2=4、系统管理(1000)2=8。如表示图书管理和借阅管理权限:2+4=6;判定7是否含有图书管理权限:7位和2,即(0111)2位和(0010)2=(0010)2,表示有此权限。
分析:将管理员信息合并到读者中,可简化概念,此时,非管理员管理角色(0000)2=0。好处:简化用户登录用例;坏处:概念不够清楚,给用户管理带来不便。第1个迭代周期采取简化概念设计。另外也可用4个逻辑数据项分别表示4个管理角色。
读者信息+=密码、管理角色。需修改用例办理借书证(自己完成)。
1. 用户登录
用例名称:用户登录
参 和 者:读者或管理员
前置条件:无
过程描述:
1. 输入用户号(即借书证号)、密码;密码采取掩码“*”号显示。
2. 点击“登录”。
3. 系统依据借书证号获取读者对象。
3a. 未获取读者对象时,显示无此用户,转入1;
3b. 密码未匹配时,显示密码错误,并清空密码,转入1;
4. 进入系统主程序界面。
后置条件:依据登录用户权限显示或隐藏对应系统功效(菜单等)。
待处理问题:
1. 挂失或注销借书证者不能登录。
注 释:该登录用户(读者)对象应为全局可见
系统功效和用户角色之间关系参见“表1 系统功效和用户角色关系表”。
2. 密码修改
用例名称:修改密码
参 和 者:用户
综 述:用户登录后修改自己登录密码。
..(略)
3. 用户管理*
用例名称:用户管理
参 和 者:系统管理员、图书馆工作人员
综 述:系统管理员对图书馆工作人员进行权限管理。
前置条件:登录用户为系统管理员,图书馆工作人员需先办理借书证
过程描述:
1. 输入借书证号,或输入读者类别、单位、姓名。
2. 点击“查询”。
3. 系统查询,并显示读者信息。
4. 找到借书证后,设置该读者管理角色。
5. 确定完成。
后置条件:修改读者管理员角色,系统统计读者信息。
注 释: 管理角色有4种:借书证管理、图书管理、借阅管理、系统管理
5.5 读者查询和预约借书*
读者(非管理员用户)功效需求,包含用例:未归还图书查询和续借*(含超期、立即到期查询操作)、预约借书*(含在馆图书查询操作)等。
该类读者所使用功效最好是采取web程序实现,Web程序功效可包含:读者登录、密码修改、未归还图书查询和续借*、预约借书*等。
用例名称:未归还图书查询和续借(略,思索:和续借用例有不一样吗?)
用例名称:预约借书(略,思索:对借书用例有何影响?可在迭代2完善借书用例)
5.6 统计和报表*
包含:馆藏图书统计、借阅情况统计、借阅时段统计等等。
馆藏图书统计可按图书类别、入馆时间统计图书数量、金额等,可得图书分布情况;
借阅情况统计可按单位(含专业、年级)、图书类别、借阅时间(年、学期、月份)等统计借阅次数和天数,统计结果可作为订购新书参考依据;
借阅时段统计按工作日(星期一、二、、、)和时段(8:00-8:30、8:30-9:00、、、)统计借还书次数,可得各时段借阅工作量,并可依此安排借阅管理人员。
注:包含OLAP(联机分析处理)技术,开发者需了解“多维数据模型”及相关概念。
用例(略)
5.7 数据备份*
用户备份是对SQL Server数据库进行备份,由系统管理员操作。
5.8 系统功效和用户角色
表1 系统功效和用户角色关系表
序号
系统功效
借书证管理
图书管理
借阅管理
系统管理
读者
1
读者管理
√
(√)
2
图书管理
√
3
借阅管理
√
4
用户登录
√
√
√
√
√
5
密码修改
√
√
√
√
√
6
用户管理
√
7
读者预约
√
√
√
√
√
8
统计和报表
√
√
√
√
9
数据备份
√
10
5.9 领域模型
领域概念小结
读者=读者号(借书证号)、姓名、性别、所在单位、电话、邮箱地址、办证日期、照片、借书证状态、已借书数量、密码、管理角色。(借书证状态:有效、挂失、注销)
读者类别=读者类别号、读者类别名称、可借书数量、可借书天数、可续借次数,罚款率,证件使用期。
图书=书号、书名、作者、出版社、出版日期、ISBN、分类号、语言、页数、单价、内容介绍、图书封面、图书状态。(图书状态包含:在馆、借出、遗失、销毁、卖出)
借阅信息=借书次序号、读者号、书号、借书操作员、借书日期、应还日期、续借次数、还书操作员、还书日期,超期天数、应罚款金额、实际罚款金额。
领域模型
图1 图书管理系统概念模型(V1)
关键提醒:在领域模型建立后、和数据库设计完成后,均应检验全部用例文档(检验关键:事件流、前置条件和后置条件),检验二者一致性,发觉缺漏点及矛盾之处,并进行修正。
6.系统设计和实现
6.1 数据库设计和实现
1. 读者类别表(TB_ReaderType)
序号
字段名
数据类型
说明
1
rdType
SmallInt
读者类别【主键】
2
rdTypeName
Nvarchar(20)
读者类别名称【唯一、非空】
3
CanLendQty
Int
可借书数量
4
CanLendDay
Int
可借书天数
5
CanContinueTimes
Int
可续借次数
6
PunishRate
Float
罚款率(元/天)
7
DateValid
SmallInt
证书使用期(年)【非空,0表示永久有效】
2. 读者信息表(TB_Reader)
序号
字段名
数据类型
说明
1
rdID
Int
读者编号/借书证号【主键】
2
rdName
nvarchar(20)
读者姓名
3
rdSex
nchar(1)
性别,男/女
4
rdType
SmallInt
读者类别【外键TB_ReaderType】【非空】
5
rdDept
nvarchar (20)
单位代码/单位名称
6
rdPhone
nvarchar(25)
电话号码
7
rdEmail
nvarchar(25)
电子邮箱
8
rdDateReg
datetime
读者登记日期/办证日期
9
rdPhoto
image
读者照片
10
rdStatus
nchar(2)
证件状态,3个:有效、挂失、注销
11
rdBorrowQty
Int
已借书数量(缺省值0)
12
rdPwd
nvarchar (20)
读者密码(初值123),可加密存放
13
rdAdminRoles
SmallInt
管理角色,0-读者、1-借书证管理、2-图书管理、4-借阅管理、8-系统管理,可组合
分析提醒:(1)可将管理员另外建表,和读者信息分开单独进行设计。(2)单位rdType能够采取名称,若采取代码则需另建一张表:单位代码和名称对照表,这么便于按单位统计。(3)管理角色(rdAdminRoles)也可设计为4个bit类型字段。
3. 图书信息表(TB_Book)
序号
字段名
数据类型
说明
1
bkID
Int
图书序号【标识列,主键】
2
bkCode
Nvarchar (20)
图书编号或条码号(前文中书号)
3
bkName
Nvarchar(50)
书名
4
bkAuthor
Nvarchar(30)
作者
5
bkPress
Nvarchar(50)
出版社
6
bkDatePress
datetime
出版日期
7
bkISBN
Nvarchar (15)
ISBN书号
8
bkCatalog
Nvarchar(30)
分类号(如:TP316-21/123)
9
bkLanguage
SmallInt
语言,0-汉字,1-英文,2-日文,3-俄文,
4-德文,5-法文
10
bkPages
Int
页数
11
bkPrice
Money
价格
12
bkDateIn
DateTime
入馆日期
13
bkBrief
Text
内容介绍
14
bkCover
image
图书封面照片
15
bkStatus
NChar(2)
图书状态,在馆、借出、遗失、变卖、销毁
说明:bkCode为前文中书号,这里没有设计为关键字,而增加bkID字段作为表关键字,其原因为:预防新书入库时起始书号输入错误时,因关键字而不易修改。
4. 借阅信息表(TB_Borrow)
序号
字段名
数据类型
说明
1
BorrowID
Numeric(12,0)
借书次序号【主键】
2
rdID
Int
读者序号【外键TB_Reader】
3
bkID
Int
图书序号【外键TB_Book】
4
ldContinueTimes
Int
续借次数(第一次借时,记为0)
5
ldDateOut
DateTime
借书日期
6
ldDateRetPlan
DateTime
应还日期
7
ldDateRetAct
DateTime
实际还书日期
8
ldOverDay
Int
超期天数
9
ldOverMoney
Money
超期金额(应罚款金额)
10
ldPunishMoney
Money
罚款金额
11
lsHasReturn
Bit
是否已经还书,缺省为0-未还
12
OperatorLend
Nvarchar(20)
借书操作员
13
OperatorRet
Nvarchar(20)
还书操作员
分析提醒:借阅信息即用于图书借还管理,同时又是统计分析关键信息起源,故要求保持其历史信息。设计时不能以(读者序号+图书序号)为关键字,不然读者不能第二次借阅同一本书了。
5. 数据库实现
内容:
(1) 创建数据库:Library;
(2) 创建登录名:LibAdmin,密码:123;并设置为数据库Librarydbo;
(3) 创建上述4张数据表及约束;
实现方法:
(1) 采取SQL Server企业管理器手工操作方法完成创建工作;(自己完成)
(2) 编写SQL脚本文件,并在查询窗口工具中运行并创建;如创建TB_ReaderType表:
CREATE TABLE [dbo].[TB_ReaderType](
[rdType] smallint NOT NULL,
[rdTypeName] nvarchar(20) NOT NULL,
[CanLendQty] int NULL,
[CanLendDay] int NULL,
[CanContinueTimes] int NULL,
[PunishRate] float NULL,
[DateValid] smallint NULL DEFAULT ((0)),
PRIMARY KEY ([rdType]),
UNIQUE ([rdTypeName])
)
GO
insert into [TB_ReaderType] values(10,'老师',12,60,2,0.05,0);
insert into [TB_ReaderType] values(20,'本科生',8,30,1,0.05,4);
insert into [TB_ReaderType] values(21,'专科生',8,30,1,0.05,3);
insert into [TB_ReaderType] values(30,'硕士硕士',8,30,1,0.05,3);
insert into [TB_ReaderType] values(31,'博士硕士',8,30,1,0.05,4);
GO
6.2 三层架构介绍
采取三层体系结构,即表示层、业务逻辑层和数据访问层,图2所表示,图中箭头表示调用和依靠关系。
图2 三层架构示意图
表示层(USL):也称UI,提供交互式界面,形式:WinForm或HTML Web界面。
业务逻辑层(BLL):实现业务功效,为表示层提供服务,形式:类库。
数据访问层(DAL):实现数据访问功效(如数据库、文件等数据读取、保留和更新),为业务逻辑层提供服务,形式:类库。微软公布SQLHelper类提供了对SQL Server数据库通常访问方法(JAVA有类似类或组件)。
实体类(Model):描述一个业务实体类,也即应用系统所包含业务对象。对数据库来讲,每个数据表对应于一个实体类,数据表每个字段对应于类一个属性。
表示层、业务逻辑层、数据访问层全部依靠于业务实体。各层之间数据传输关键是实体对象,业务信息封装在实体对象中。
6.3 搭建三层架构处理方案
创建C#应用程序处理方案,包含4个项目:BookManage(Windows窗口应用程序)、BookManage.Model(类库)、BookManage.DAL(类库)、BookManage.BLL(类库)。
1. 新建项目BookManage(开启项目)
MS VS菜单:“文件”->“新建”->“项目”,在新建项目窗口中,选择“C#”->“Windows”->“Windows窗口应用程序”,选择项目文件存放位置,并输入项目名称:BookManage,图3。
项目BookManage即为UI层,该项目在VS .NET编译后产生BookManage.exe文件。
图3 新建项目BookManage
2. 添加新项目BookManage.Model
MS VS菜单:“文件”->“添加”->“新建项目”,选择“类库”,输入项目名称,图4。VS .NET编译后产生BookManage.Model.dll文件(.DLL后缀文件称为动态链接库)。
图4 添加新建项目BookManage.Model
3. 添加新项目BookManage.DAL
操作和BookManage.Model类似,项目名称设置为:BookManage.DAL。VS .NET编译后产生BookManage.DAL.dll文件。
4. 添加新项目BookManage.BLL
操作和BookManage.Model类似,项目名称设置为:BookManage.BLL。VS .NET编译后产生BookManage.BLL.dll文件。至此,处理方案参见图5。
图5 图书管理项目处理方案
5. 设置开启项目和项目引用关系
在处理方案中设置BookManage为开启项目(“BookManage”右键菜单“设为开启项目”)。
项目引用关系如表2所表示。如BookManage.BLL项目引用DAL和Model,其设置方法:处理方案中项目“BookManage.BLL”右键菜单“添加引用”,并按图6进行设置。
表2 项目引用关系。
BookManage
BookManage.BLL
BookManage.DAL
BookManage.Model
BookManage
-
√
×
√
BookManage.BLL
-
√
√
BookManage.DAL
-
√
BookManage.Model
-
图6 给BookManage.BLL项目添加引用
6.4 类总体设计(迭代1)
实体类、数据访问层类、业务逻辑层类、表示层窗口类初步设计如表3。
表3 实体类、数据访问层、业务逻辑层类设计
层
类名
说明
实体类模块
(Model)
ReaderType
读者类型实体类
Reader
读者实体类
Book
图书实体类
Borrow
借阅统计实体类
数据访问层
(DAL)
ReaderTypeDAL
读者类型数据表访问类(插、删、改、查、存放过程等)
ReaderDAL
读者数据表访问类(插、删、改、查、存放过程等)
BookDAL
图书数据表访问类(插、删、改、查、存放过程等)
BorrowDAL
借阅数据表访问类(插、删、改、查、存放过程等)
SQLHelper
微软提供对SQL Server数据库进行访问通用类
业务逻辑层
(BLL)
ReaderTypeAdmin
读者类型管理类,实现插、删、改、查等信息维护操作。
ReaderAdmin
读者管理类,实现借书证办理、变更、补办、挂失、解除挂失、注
展开阅读全文