软件图书管理系统第1章 需求分析 11.1项目概述 11.2 数据流分析 11.3 数据字典 2第2章 概念结构设计 82.1 局部概念模型设计 82.2 全局概念设计 102.3 CDM图 11第3章 逻辑结构设计 123.1 E-R图向关系模型转换 123.2 PDM图的生成 123.3 物理结构设计 133.4 SQL连接 16第4章 具体实现 194.1 借阅管理 194.2 借阅管理 28结 论 33致 谢 78
软件图书管理系统
第1章 需求分析
1.1项目概述
1.1.1 目标
通过对学校图书馆内部的各种机构的划分和管理,以及各种业务的处理过程的分析,设计出一个行之有效的能够在实际中帮助图书馆实施管理现代化、业务信息化,从而大大提高工作效率运行于已有的硬件平台上的图书馆管理系统。
1.1.2 产品描述
根据用户的实际管理要求和图书馆职能的划分,我们将本系统划分为图书查询模块、借阅管理模块、图书管理模块、借阅证管理模块、读者规则管理模块和读者信息模块等六个子系统。
1.1.3 产品功能
在图书管理系统中,对读者来说,图书管理系统需要做到的是:
1.图书查询和读者信息查询
2.读者信息查询
(1) 读者信息查询(2) 书刊借阅查询(3)借阅历史查询(4)违章信息查询(5)读者规则查询
对于管理员来说,管理系统需要做到的是:
(1) 图书馆中有些什么书,它们都存放在哪儿,是不是可以借阅
(2) 本图书馆发放的读者借阅证有哪些,如何管理这些读者证
(3) 这些读者证都借着哪些书
(4) 如何来确定这些读者证是否可用,以及借书的还期
1.2 数据流分析
分析划分系统边界,识别系统的数据来源和去处,得出系统的关联图,如图1.1所示,F1为读者信息,F2为借阅信息,F3为违章信息,F4为读者规则信息,F5为图书信息,F6为借阅信息,F7为借阅证信息,F8为读者规则信息,F9为馆藏地信息,F10为馆藏信息,F11为惩罚信息。若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
图1.1 图书管理系统关联图
根据划分出几个主要的信息管理功能,并明确各功能之间的联系,绘制出系统的顶层数据流图,如图1.2所示,F1为读者信息,F2为借阅信息,F3为违章信息,F4为读者规则信息,F5为图书信息,F6为借阅信息,F7为借阅证信息,F8为读者规则信息,F9为馆藏地信息,F10为馆藏信息,F11为惩罚信息。
图1.2图书管理顶层图
1.3 数据字典
由于数据流图只是对数据处理和彼此之间的关系进行了说明,为了进一步明确数据的详细内容和数据加工过程,应将最底层数据流图中的全部数据流及其组成部分的数据元素、数据存储、数据加工进行详细描述,形成本系统的数据字典,以便于以后系统设计的进行。
1.3.1 数据流
数据流是数据结构在系统内传输的路径。本系统中对数据流的具体描述如下:
1.数据流“F1”可描述如下:
数据流:读者信息
说明:对读者的基本信息进行查询
数据流来源:图书管理系统
数据流去向:读者
2.数据流“F2”可描述如下:
数据流:读者借阅信息
说明: 对读者的借阅信息进行查询
数据流来源:图书管理系统
数据流去向:读者
3.数据流“F3”可描述如下:
数据流:读者规则信息
说明:读者对其读者规则的查询
数据流来源:图书管理系统
数据流去向:读者
4.数据流“F4”可描述如下:
数据流:违章信息
说明:读者对其违章信息的查询
数据流来源:图书管理系统
数据流去向:读者
5.数据流“F5”可描述如下:
数据流:图书信息
说明:管理员对图书的基本信息进行登记
数据流来源:图书
数据去向:图书信息表
6.数据流“F6”可描述如下:
数据流:借阅信息
说明:管理员对读者借阅图书的基本信息进行登记
数据流来源:图书信息、读者信息
数据流去向:借阅信息表
7.数据流“F7”可描述如下:
数据流:借阅证信息
说明:管理员对读者信息进行登记
数据流来源:读者
数据流去向:借阅证表
8.数据流“F8”可描述如下:
数据流:读者规则
说明:管理员对读者规则进行登记
数据流来源:借阅规则
数据流去向:借阅规则表
9.数据流“F9”可描述如下:
数据流:馆藏地信息
说明:管理员对馆藏地信息进行登记操作
数据流来源:馆藏地信息
数据流去向:馆藏地表
10.数据流“F10”可描述如下:
数据流:馆藏信息
说明:管理员对馆藏信息进行登记
数据流来源:图书信息、馆藏地信息
数据流去向:馆藏表
11.数据流“F11”可描述如下:
数据流:惩罚信息
说明:管理员对读者的违章信息进行登记
数据流来源:读者违章信息
数据流去向:惩罚信息表
1.3.2 数据项
以下为本系统的部分数据项进行描述。
1.数据项:bookid
含义说明:唯一标识每本图书
别名:图书编号
长度:4
取值范围:0000至9999
取值含义:按顺序编号。
2.数据项:storeid
含义说明:唯一标识馆藏地
别名:馆编号
长度:4
软件图书管理系统,关联图+DFD图+实体属性图+ER图
取值范围:0000至9999
取值含义:顺序取值
3.数据项:bookclassid
含义说明:唯一标识馆藏信息
别名:馆藏编号
长度:4
取值范围:0000至9999
取值含义:每位按顺序编号
4.数据项:readerid
含义说明:唯一标识每个读者信息
别名:读者编号
长度:4
取值范围:0000至9999
取值含义:按顺序编号。
5.数据项:ruleid
含义说明:唯一标识每条规则信息
别名:规则编号
长度:4
取值范围:0000至9999
取值含义:按顺序编号。
6.数据项:jyid
含义说明:唯一标识借阅信息
别名:借阅编号
长度:4
取值范围:0000至9999
取值含义:每位按顺序编码。
7.数据项:cfid
含义说明:唯一标识惩罚信息。
别名:惩罚编号
长度:4
取值范围:0000至9999
取值含义:每位按顺序编码
1.3.3 数据结构
数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。本系统中对数据结构的具体描述如下:
1.数据结构:图书
含义说明:是图书管理系统的主体数据结构,定义了图书的有关信息
组成:书种类ID、题名、作者、ISBN号、出版发行项、载体信息、个人名称(等同责任者)、责任者、中国图书分类法类号、科图图书分类法类号、论题主题、附注项、出版时间、单价、赔偿金额
2.数据结构:借阅证
含义说明:是图书管理系统中的主体数据结构,定义了读者的有关信息
组成:读者ID、证件号、工号、办证日期、生效日期、过期日期、押金、手续费、累计借书、读者规则ID、状态月份编号,基本工资,职务补助,奖励工资,缺勤次数,单次缺勤罚金
3.数据结构:馆藏
含义说明:是图书管理系统中馆藏地信息的数据结构,定义了馆藏地的信息
组成:书本ID、馆ID、索取号、条码号、年卷号、书刊状态、入馆时间
4.数据结构:馆藏地
含义说明:定义了馆藏地的有关信息
组成:馆ID、名称、位置、负责人、说明
5.数据结构:惩罚
含义说明:是图书管理系统中用来记录读者的惩罚信息
组成:惩罚ID、读者ID、书本ID、惩罚原因、惩罚结果、罚款金额、状态
6.数据结构:借阅
含义说明:是图书管理系统中主体的数据结构,用来记录读者借阅图书的信息
组成:借阅ID、读者ID、书本ID、借阅时间、到期时间、归还日期、状态、续借次数
7.数据结构:读者规则
含义说明:是图书管理系统中用来记录读者规则的有关信息
组成:规则ID、规则名称、可借阅天数、可借阅馆藏地ID、续借天数、最大续借次数、欲保留天数
1.3.4 数据存储
数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。它可以手工文档或手工凭单,也可以是计算机文档。本系统中对数据存储的具体描述如下:
1.图书信息
简述:用来存储有关图书的信息
输入数据:图书信息
输出数据:图书信息
2.读者信息
简述:用来存储读者的基本信息。
输入数据:读者的基本信息
输出数据:读者信息。
3.馆藏地信息
简述:用来存储馆藏地的基本信息。
输入数据:馆藏地信息。
输出数据:馆藏地信息
4.馆藏信息
简述:用来存储图书馆藏的基本信息。
输入数据:馆藏信息。
输出数据:馆藏信息。
5.借阅信息
简述:存储的是读者的借阅信息
输入数据:读者信息、图书信息及其他借阅信息。
输出数据:借阅的基本信息。
6.惩罚信息
简述:用来存储读者的违规信息。
输入数据:图书信息和读者信息。
输出数据:惩罚的基本信息。
7.读者规则信息
简述:用来存储读者的规则。
输入数据:读者信息和规则信息。
输出数据:读者规则信息。
软件图书管理系统,关联图+DFD图+实体属性图+ER图
第2章 概念结构设计
2.1 局部概念模型设计
局部概念模型的设计思想是根据需求分析的内容用E-R图分别表示出各个实体及其
属性,以及用E-R图表示出各实体之间的联系。
图书信息实体属性包括:书种类ID、题名、作者、ISBN号、出版发行项、载体信息、个人名称(等同责任者)、责任者、中国图书分类法类号、科图图书分类法类号、论题主题、附注项、出版时间、单价、赔偿金额,如图2.1所示
图2.1图书信息实体的属性
馆藏地信息实体包括:馆ID、名称、位置、负责人、说明,如图2.2所示
图2.2馆藏地实体的属性
读者(借阅证)信息实体包括:读者ID、证件号、工号、办证日期、生效日期、过期日期、押金、手续费、累计借书、读者规则ID、状态,如图2.3所示
图2.3读者实体的属性
读者规则信息实体包括:规则ID、规则名称、可借阅天数、可借阅馆藏地ID、续借天数、最大续借次数、欲保留天数,如图2.4所示
图2.4读者规则实体的属性
惩罚信息实体包括:惩罚ID、读者ID、书本ID、惩罚原因、惩罚结果、罚款金额、状态,如图2.5所示
图2.5惩罚实体的属性
馆藏信息实体包括:书本ID、馆ID、索取号、条码号、年卷号、书刊状态、入馆时间,
如图2.6所示
图2.6馆藏实体的属性
书籍借阅信息实体包括:借阅ID、读者ID、书本ID、借阅时间、到期时间、归还日期、状态、续借次数,如图2.7所示
图2.7 借阅实体的属性
2.2 全局概念设计
各子系统的分E-R图设计好以后,下一步就是将所有的分E-R图综合成一个总的E-R图。由于各个局部所面向的问题不同,这就导致各个分E-R图之间必定会存在许多不一致的问题,称之为冲突。因此合并分E-R图并不能简单地将各个分E-R图画到一起,而是必须合理消除各分E-R图中的不一致,以形成一个能为全系统中所有用户共同理解和接受的统一的概念模型,是合并E-R图的主要工作和关键。各E-R图之间的冲突主要有三种:属性冲突、命名冲突、结构冲突。全体实体之间的E-R图如2.8所示若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
图2.8 全局E-R图
2.3 CDM图
PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型,可以生成多种客户端开发工具的应用程序,还可为数据仓库制作结构模型,也能对团队设计模型进行控制。它可与许多流行的数据库设计软件,例如:PowerBuilder,Delphi,VB等相配合使用来缩短开发时间和使系统设计更优化,所以利用它来开发图书管理系统是比较方便的。下面的CDM图是用它来开发的。
图书管理系统的CDM如图2.8所示
图 2.8图书管理系统的CDM图第3章 逻辑结构设计
3.1 E-R图向关系模型转换
该系统采用SQL SERVER 2000数据库,根据系统需要,设计七个基本表,如下:
(1) 图书信息表(书种类ID、题名、作者、ISBN号、出版发行项、载体信息、个人名称(等同责任者)、责任者、中国图书分类法类号、科图图书分类法类号、论题主题、附注项、出版时间、单价、赔偿金额)
(2) 馆藏地表(馆ID、名称、位置、负责人、说明)
(3) 馆藏表(书本ID、馆ID、索取号、条码号、年卷号、书刊状态、入馆时间)
(4) 读者(借阅证)表(读者ID、证件号、工号、办证日期、生效日期、过期日期、押金、手续费、累计借书、读者规则ID、状态)
(5) 读者规则表(规则ID、规则名称、可借阅天数、可借阅馆藏地ID、续借天数、最大续借次数、欲保留天数)
(6) 书籍借阅表(借阅ID、读者ID、书本ID、借阅时间、到期时间、归还日期、状态、续借次数)
(7) 惩罚表(惩罚ID、读者ID、书本ID、惩罚原因、惩罚结果、罚款金额、状态)
由关系依赖知,在图书种类表、馆藏地表、馆藏表、读者表、读者规则表、书籍借阅表、惩罚表这7个关系模式中的属性都是不能再分的,为一阶范式。并且都是由主码唯一决定关系中的其他属性,不存在部分函数依赖和传递函数依赖,所以这些个关系都是3NF,皆为最优,关系模型的优化结束。
3.2 PDM图的生成
在POWERDESIGNER中把开发的CDM图生成PDM图,选择TOOL菜单的generate physical data model后出现如图3.1的对话框,点击应用、生成PDM图
软件图书管理系统,关联图+DFD图+实体属性图+ER图
图3.1生成PDM图对话框
图书管理系统的PDM图如图3.2所示
图3.2图书管理系统的PDM图
3.3 物理结构设计
图书管理系统的数据库的表结构如表3.1—3.7所示:
表3.1 图书信息表
图书种类表KJB2_KJXX_BOOK
名称
列名
数据类型
长度
允许空
备注
书种类ID
bookclassid
Int
4
主键
题名
title
varchar
50
作者
author
Varchar
50
√
ISBN号
isbn
Varchar
50
√
出版发行项
cbfxx
Varchar
50
√
载体信息
ztxx
Varchar
50
√
个人名称(等同责任者)
dtzrz
Varchar
50
√
责任者
zrz
Varchar
50
√
中国图书分类法类号
zgtsflflh
Varchar
50
√
科图图书分类法类号
kttsflflh
Varchar
50
√
论题主题
ltzt
Varchar
50
√
附注项
fzx
Varchar
200
√
出版时间
cbsj
Datetime
8
√
单价
dj
Float
8
√
赔偿金额
pcje
Float
8
√
表3.2馆藏地表
馆藏地表KJB2_KJXX_STOREPLACE
名称
列名
数据类型
长度
允许空
备注
馆ID
Storied
Int
4
主键
名称
Mc
Varchar
50
位置
Wz
Varchar
50
√
负责人
Fzr
Varchar
50
√
说明
Sm
Varchar
50
√
表3.3 馆藏表
馆藏表KJB2_KJXX_STORE
名称
列名
数据类型
长度
允许空
备注
书本ID
Bookid
Int
4
主键
种类ID
Bookclassid
Int
4
与book表bookclassid外键关联
馆ID
Storied
Int
4
与storeplace表的storied外键关联
索取号
Sqh
Varchar
50
条码号
Tmh
Varchar
50
√
年卷号
Njh
Varchar
50
√
书刊状态
Zt
Varchar
50
入馆时间
rgsj
Datetime
8
表3.4 读者(借阅证)表
读者(借阅证)表KJB2_KJXX_READER
名称
列名
数据类型
长度
允许空
备注
读者ID
Readerid
Int
4
主键
证件号
Zjh
Varchar
50
√
工号
Gh
Varchar
50
√
办证日期
Bzrq
Datetime
8
√
生效日期
Sxrq
Datetime
8
√
过期日期
Gqrq
Datetime
8
√
押金
yj
Varchar
50
√
手续费
Sxf
Varchar
50
√
累计借书
Ljjs
Int
4
√
读者规则ID
ruleid
Int
4
√
与rule表的ruleid外键关联
状态
zt
Varchar
50
√
表3.5 读者规则表
读者规则表KJB2_KJXX_RULE
名称
列名
数据类型
长度
允许空
备注
规则ID
Ruleid
Int
4
主键
规则名称
Gzmc
Varchar
50
√
可借阅天数
Kjysj
Int
4
√
可借阅馆藏地ID
Kjygcdid
Varchar
50
√
续借天数
Kxjsj
Int
4
√
最大续借天数
kxjcs
Int
4
√
预约保留天数
kyysj
Int
4
√
表3.6 书籍借阅表
书籍借阅表KJB2_KJXX_JYB
名称
列名
数据类型
长度
允许空
备注
借阅ID
Jyid
Int
4
主键
读者ID
Readerid
Int
4
与reader表readerid外键关联
书本ID
Bookid
Int
4
与store表的bookid外键关联
借阅时间
Jysj
Varchar
50
√
到期时间
dqsj
Varchar
50
√
归还日期
Ghrq
Varchar
50
√
状态
Zt
Varchar
50
√
续借次数
Xjcs
Int
4
√
表3.7 惩罚表
惩罚表KJB2_KJXX_CFB
名称
列名
数据类型
长度
允许空
备注
惩罚ID
Cfid
Int
4
主键
读者ID
Readerid
Int
4
与reader表的readerid外键关联
书本ID
Bookid
Int
4
与store表的bookid外键关联
惩罚原因
Cfyy
Varchar
50
√
惩罚结果
Cfjg
Varchar
50
√
罚款金额
Fkje
Float
8
√
状态
Zt
char
1
√
3.4 SQL连接
3.4.1 运行环境设置
本实例是在Windows 2000下开发的,程序测试环境为Windows2000和WindowsXP。用户在Windows 98、Windows 2000和Windows XP下都可使用本实例。程序统一用户名及密码,用户名:111,密码:111。
3.4.2 数据库的实现
配置SQL Server2000数据库
(1)将实例目录“database”文件夹下扩展名为“.MDF”和“.LDF”的两个文件拷贝到SQL Server 2000安装路径下的“MSSQL”/“Data”目录下。
(2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在“数据库”数据项上单击鼠标右键,在弹出的快捷菜单中选择“所有任务”/“附加数据库”菜单项,如图3.3所示
软件图书管理系统,关联图+DFD图+实体属性图+ER图
(4)在该对话框中单击“…”按钮选择所要附加数据库的.mdf文件的路径,例:附加采购管理系统的数据库可以选择 “C:\sql\MSSQL\Data\Data_cggl_Data.MDF”,如图3.5所示。单击【确定】按钮,即可完成数据库的附加操作。
图3.5 选择所要附加的数据库
配置ODBC
(1)单击“控制面板”/“ODBC数据源”,打开“ODBC数据源管理器”。
(2)单击“添加”按钮,打开“创建新数据源”窗口,在此选择“SQL Server”。
(3)单击“完成”按钮,打开“建立新的数据源到SQL Server”窗口,在“名称”文本框中输入“RSDAGLXT”(数据库名称);在“服务器”下拉列表框中输入想连接的SQL Server服务器。如果要连接的SQL Server是安装在本地机上的,那么可以选择local,local表示连接到本地的服务器。如果要连接的SQL Server是安装在其他的服务器上的,则选择所需的服务器名称。
(4)单击“下一步”按钮,打开“创建到SQL Server 的新数据源”窗口,选定“使用用户输入登录ID和密码的SQL Server验证”选项,在“登录ID”文本框中输入“sa”;“密码”文本框为sossos。
(5)单击“下一步”按钮,在弹出的对话框中勾选“更改默认的数据库为”选项,在下拉列表中选择“RSDAGLXT”数据库,单击“下一步”按钮,再单击“完成”按钮,数据源便配置成功了。
3.4.3 表间结构关系
表间的结构关系如图3.6所示
图3.6表间的关系图
第4章 具体实现
4.1 借阅管理
这一部分是对书籍借阅、书籍归还的管理,主要是提供给图书馆工作人员使用的。当读者借书的时候,图书管理员把书籍的编号和读者的借阅证号输入系统,当此次借阅符合借阅规则的时候,借阅成功。
图书借阅界面图如图4.1所示
图4.1图书借阅界面图
借阅管理的JSP页面包括edit.jsp,index.jsp,list.jsp,servlet.jsp,view.jsp5个页面,
Index.jsp为主要的控制页面,view.jsp为界面控制页面,list.jsp为数据显示。
倒入的JavaBean为kjb2.library.bean.BorrowBean
关于图书借阅的Java代码:
Borrowbean继承的类为ParentBean.java文件在main中。
public class BorrowBean extends ParentBean
{
private static String strZero="0";
private static String strOne="1";
private String id = "-1";
//设置借阅ID
public void setID(String i)
{
id = i;
}
//取得所有信息内容
public Vector getData()
{
String sql = "";
sql = "select * from KJB2_KJXX_JYB where ZT='"+strZero+"' order by JYID";
return searchData(sql);
}
//分页取得所有信息
public Vector getPageData(int page)
{
String sql ="";
sql="select * from KJB2_KJXX_JYB where ZT='"+strZero+"' order by JYID";
return getOnePage(sql,page,20);
}
return deleteRecord(sql);
}
//新增借阅记录,参数
public int[] addBorrow(Hashtable hash)
{
System.out.println("批量处理新增借阅。。。。。。");
String sql="";
int intID = makeID("KJB2_KJXX_JYB","JYID","","",true);
String strID=String.valueOf(intID);
String strZJH = ds.toString((String)hash.get("ZJH"));//证件号
String strSQH = ds.toString((String)hash.get("SQH"));//索取号
String strJYSJ = ds.toString((String)hash.get("JYSJ"));//借阅时间
String strREADERID = "";
String strBOOKID = "";
String strDQSJ = "";
String strXJCS = "";
//根据读者证件号取的读者ID//根据读者ID取得规则ID,然后取得可以借阅天数,
sql=" select KJB2_KJXX_READER.RULEID,KJB2_KJXX_READER.READERID,KJB2_KJXX_RULE.KJYSJ "
+" from KJB2_KJXX_READER,KJB2_KJXX_RULE "
+" where KJB2_KJXX_READER.ZJH='"+strZJH+"' and KJB2_KJXX_READER.RULEID=KJB2_KJXX_RULE.RULEID ";
Hashtable hashReId=(Hashtable)searchOneData(sql);
strREADERID=ds.toString((String)hashReId.get("READERID"));
String strKJYSJ=ds.toString((String)hashReId.get("KJYSJ"));
//根据索取号取得书本ID
sql="select BOOKID from KJB2_KJXX_STORE where SQH='"+strSQH+"'";
Hashtable hashBKID=(Hashtable)searchOneData(sql);
strBOOKID = ds.toString((String)hashBKID.get("BOOKID"));
//新增操作
createStatement();
clearBatch();
sql=" insert into KJB2_KJXX_JYB(JYID,READERID,BOOKID,JYSJ,DQSJ,ZT,XJCS) "
+" values("+strID+","+strREADERID+","+strBOOKID+",'"+strJYSJ
+"',to_char((to_date('"+strJYSJ+"','yyyy-MM-dd')+"+strKJYSJ+"),'yyyy-MM-dd')"
+",'"+strZero+"','"+strZero+"')";
addBatch(sql);
sql="update KJB2_KJXX_STORE set ZT='借出' where BOOKID="+strBOOKID;
addBatch(sql);
sql="update KJB2_KJXX_READER set LJJS=LJJS+1 where READERID="+strREADERID;
addBatch(sql);
int result[]=executeBatch();
closeStm();
return result;
}
//取消借阅11
public int[] delBorrow(String id)
{
System.out.println("批量处理取消借阅。。。。。");
String sql="";
sql="select BOOKID from KJB2_KJXX_JYB where JYID="+id;
Hashtable hash=(Hashtable)searchOneData(sql);
String strBOOKID=(String)hash.get("BOOKID");
createStatement();
clearBatch();
sql="update KJB2_KJXX_JYB set ZT='"+strOne+"' where JYID="+id;
addBatch(sql);
sql="update KJB2_KJXX_STORE set ZT='可借' where BOOKID="+strBOOKID;
addBatch(sql);
int result[]=executeBatch();
closeStm();
return result;
}
//判断证件号的合法性
public boolean isValidate(String zjh)
{
String sql="";
sql="select * from KJB2_KJXX_READER where ZJH='"+zjh+"' and ZT='注册'";
Hashtable hash=(Hashtable)searchOneData(sql);
if(hash.isEmpty())
软件图书管理系统,关联图+DFD图+实体属性图+ER图
return false;
else
return true;
}
//判断某书是否可以被借
public boolean ifCanBorrow(String sqh)
{
String sql="";
sql="select * from KJB2_KJXX_STORE where ZT='可借'";
Vector vect=(Vector)searchData(sql);
if(vect.isEmpty())
return false;
else
return true;
}
//还书,参数为索取号
public int[] backBorrow(String sqh)
{
System.out.println("批量处理还书。。。。。");
String sql="";
String strBOOKID=ds.toString((String)toName("KJB2_KJXX_STORE","SQH","BOOKID",sqh));
String strNow = ds.getDateTime();
strNow = strNow.substring(0,10);
createStatement();
clearBatch();
sql="update KJB2_KJXX_JYB set ZT='"+strOne+"',GHRQ='"+strNow+"' where BOOKID="+strBOOKID+" and ZT='"+strZero+"'";
System.out.println("sql1:"+sql);
addBatch(sql);
sql="update KJB2_KJXX_STORE set ZT='可借' where BOOKID="+strBOOKID;
System.out.println("sql2:"+sql);
addBatch(sql);
int result[]=executeBatch();
closeStm();
return result;
}
//根据所还书的索取号取得,此书的信息和是否过期等信息
public Hashtable checkBook(String sqh)
{
String sql="";
String strBOOKID=ds.toString((String)toName("KJB2_KJXX_STORE","SQH","BOOKID",sqh));
if(strBOOKID.equals("")) strBOOKID="-1";
String strBOOKCLASSID=ds.toString((String)toName("KJB2_KJXX_STORE","SQH","BOOKCLASSID",sqh));
if(strBOOKCLASSID.equals("")) strBOOKCLASSID="-1";
sql="select TITLE,AUTHOR,ISBN,CBSJ,DJ,PCJE,READERID,JYSJ,DQSJ "
+" from KJB2_KJXX_BOOK,KJB2_KJXX_JYB "
+" where KJB2_KJXX_BOOK.BOOKCLASSID="+strBOOKCLASSID+" and KJB2_KJXX_JYB.BOOKID="+strBOOKID+" and KJB2_KJXX_JYB.ZT='"+strZero+"'";
return searchOneData(sql);
}
//............................................................................................//
//个人信息
//取得书籍
public Vector getBorBooks(String zgbh,String type)
{
String sql="";
String strNow = ds.getDateTime();
strNow = strNow.substring(0,10);
sql="select READERID from KJB2_KJXX_READER where GH='"+zgbh+"' and(ZT='注册' or ZT='挂失')";
Hashtable hash = (Hashtable)searchOneData(sql);
String strREADERID=ds.toString((String)hash.get("READERID"));
//在借的所有书籍
if(type.equals("0"))
{
sql="select * from KJB2_KJXX_JYB where READERID="+strREADERID+" and ZT='"+strZero+"'";
}
//借阅历史
if(type.equals("1"))
{
sql="select * from KJB2_KJXX_JYB where READERID="+strREADERID+" and ZT='"+strOne+"'";
}
//所有有效预约书
if(type.equals("2"))
{
sql=" select * from KJB2_KJXX_YYB "
+" where READERID="+strREADERID+" and ZT='生效' and DQSJ>='"+strNow+"'";
}
return searchData(sql);
}
//分页取得书籍
public Vector getPageBorBooks(String zgbh,String type,int page)
{
String sql="";
String strNow = ds.getDateTime();
strNow = strNow.substring(0,10);
sql="select READERID from KJB2_KJXX_READER where GH='"+zgbh+"' and(ZT='注册' or ZT='挂失')";
Hashtable hash = (Hashtable)searchOneData(sql);
String strREADERID=ds.toString((String)hash.get("READERID"));
if(strREADERID.equals("")) strREADERID="-1";
//在借的所有书籍
if(type.equals("0"))
{
sql="select * from KJB2_KJXX_JYB where READERID="+strREADERID+" and ZT='"+strZero+"' order by JYSJ";
System.out.println(sql);
}
//借阅历史
if(type.equals("1"))
{
sql="select * from KJB2_KJXX_JYB where READERID="+strREADERID+" and ZT='"+strOne+"' order by GHRQ";
}
//所有有效预约书
if(type.equals("2"))
{
sql=" select * from KJB2_KJXX_YYB "
+" where READERID="+strREADERID+" and ZT='生效' and DQSJ>='"+strNow+"'";
}
return getOnePage(sql,page,20);
}
//续借
public int[] setContinue(String zgbh,String jyid)
{
String sql="";
sql="select KXJSJ from KJB2_KJXX_RULE,KJB2_KJXX_READER "
+" where KJB2_KJXX_READER.GH='"+zgbh+"' and KJB2_KJXX_READER.RULEID=KJB2_KJXX_RULE.RULEID ";
Hashtable hash = (Hashtable)searchOneData(sql);
String strKXJSJ=ds.toString((String)hash.get("KXJSJ"));
sql=" update KJB2_KJXX_JYB set XJCS=XJCS+1,DQSJ=to_char((to_date(DQSJ,'yyyy-MM-dd')+"+strKXJSJ+"),'yyyy-MM-dd') "
+" where JYID="+jyid+"";
System.out.println("sqlsql:"+sql);
/*return deleteRecord(sql);*/
createStatement();
clearBatch();
addBatch(sql);
int result[]=executeBatch();
closeStm();
return result;
}
//取消预约
public int setConcel(String yyid)
{
String sql="";
sql="update KJB2_KJXX_YYB set ZT='取消' where YYID="+yyid;
return deleteRecord(sql);
}
//查找所有的统一函数
private Vector searchData(String sql)
{
Vector vect = new Vector();
ResultSet rs = selectRecord(sql);
//取得列数和列名
Statement stmt = null;
try{
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
需要完整内容的请联系QQ3710167,本文免费,转发请注明源于www.lwfree.cn
}
vect.add(hash);
}
}catch(Exception e){System.out.println("运行时出错:"+e);}
finally{
if(rs!=null)try{ stmt = rs.getStatement(); rs.close();}catch(Exception e){System.out.println("关闭记录集rs时出错"+e);}
if(stmt!=null) try{stmt.close();}catch(Exception e){System.out.println("关闭声明时statement出错"+e);}
}
return vect;
}
软件图书管理系统,关联图+DFD图+实体属性图+ER图
//查找一条记录统一函数
private Hashtable searchOneData(String sql)
{
Hashtable hash = new Hashtable();
ResultSet rs = selectRecord(sql);
Statement stmt = null;
try{
//取得列数和列名
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount();
if(rs.next())
{
for(int i=1;i<=cols;i++)
{
String field = ds.toString(rsmd.getColumnName(i));
String value = ds.toString(rs.getString(i));
hash.put(field,value);
}
}
}catch(Exception e){System.out.println("运行时出错:"+e);}
finally{
if(rs!=null)try{ stmt = rs.getStatement(); rs.close();}catch(Exception e){System.out.println("关闭记录集rs时出错"+e);}
if(stmt!=null) try{stmt.close();}catch(Exception e){System.out.println("关闭声明时statement出错"+e);}
}
return hash;
}
}//设置借阅ID
public void setID(String i)
{
id = i;
}
//取得所有信息内容
public Vector getData()
{
String sql = "";
sql = "select * from KJB2_KJXX_JYB where ZT='"+strZero+"' order by JYID";
return searchData(sql);
}
//分页取得所有信息
public Vector getPageData(int page)
{
String sql ="";
sql="select * from KJB2_KJXX_JYB where ZT='"+strZero+"' order by JYID";
return getOnePage(sql,page,20);
}
//根据借阅号取得此详细信息
public Hashtable getOneData(String id)
{
String sql="";
sql = "select * from KJB2_KJXX_JYB where JYID="+id+"";
return searchOneData(sql);
}
//删除库信息
public int delJYXX(String id)
{
String sql="";
sql="delete from KJB2_KJXX_JYB where JYID="+id;
return deleteRecord(sql);
}
//新增借阅记录,参数
public int[] addBorrow(Hashtable hash)
{
System.out.println("批量处理新增借阅。。。。。。");
String sql="";
int intID = makeID("KJB2_KJXX_JYB","JYID","","",true);
String strID=String.valueOf(intID);
String strZJH = ds.toString((String)hash.get("ZJH"));//证件号
String strSQH = ds.toString((String)hash.get("SQH"));//索取号
String strJYSJ = ds.toString((String)hash.get("JYSJ"));//借阅时间
String strREADERID = "";
String strBOOKID = "";
String strDQSJ = "";
String strXJCS = "";
//根据读者证件号取的读者ID//根据读者ID取得规则ID,然后取得可以借阅天数,
sql=" select KJB2_KJXX_READER.RULEID,KJB2_KJXX_READER.READERID,KJB2_KJXX_RULE.KJYSJ "
+" from KJB2_KJXX_READER,KJB2_KJXX_RULE "
+" where KJB2_KJXX_READER.ZJH='"+strZJH+"' and KJB2_KJXX_READER.RULEID=KJB2_KJXX_RULE.RULEID ";
Hashtable hashReId=(Hashtable)searchOneData(sql);
strREADERID=ds.toString((String)hashReId.get("READERID"));
String strKJYSJ=ds.toString((String)hashReId.get("KJYSJ"));
//根据索取号取得书本ID
sql="select BOOKID from KJB2_KJXX_STORE where SQH='"+strSQH+"'";
Hashtable hashBKID=(Hashtable)searchOneData(sql);
strBOOKID = ds.toString((String)hashBKID.get("BOOKID"));
//新增操作
createStatement();
clearBatch();
sql=" insert into KJB2_KJXX_JYB(JYID,READERID,BOOKID,JYSJ,DQSJ,ZT,XJCS) "
+" values("+strID+","+strREADERID+","+strBOOKID+",'"+strJYSJ
+"',to_char((to_date('"+strJYSJ+"','yyyy-MM-dd')+"+strKJYSJ+"),'yyyy-MM-dd')"
+",'"+strZero+"','"+strZero+"')";
addBatch(sql);
sql="update KJB2_KJXX_STORE set ZT='借出' where BOOKID="+strBOOKID;
addBatch(sql);
sql="update KJB2_KJXX_READER set LJJS=LJJS+1 where READERID="+strREADERID;
addBatch(sql);
int result[]=executeBatch();
closeStm();
return result;
}
//取消借阅11
public int[] delBorrow(String id)
{
System.out.println("批量处理取消借阅。。。。。");
String sql="";
sql="select BOOKID from KJB2_KJXX_JYB where JYID="+id;
Hashtable hash=(Hashtable)searchOneData(sql);
String strBOOKID=(String)hash.get("BOOKID");
createStatement();
clearBatch();
sql="update KJB2_KJXX_JYB set ZT='"+strOne+"' where JYID="+id;
addBatch(sql);
sql="update KJB2_KJXX_STORE set ZT='可借' where BOOKID="+strBOOKID;
addBatch(sql);
int result[]=executeBatch();
closeStm();
return result;
}
//判断证件号的合法性
public boolean isValidate(String zjh)
{
String sql="";
sql="select * from KJB2_KJXX_READER where ZJH='"+zjh+"' and ZT='注册'";
Hashtable hash=(Hashtable)searchOneData(sql);
if(hash.isEmpty())
return false;
else
return true;
}
//判断某书是否可以被借
public boolean ifCanBorrow(String sqh)
{
String sql="";
sql="select * from KJB2_KJXX_STORE where ZT='可借'";
Vector vect=(Vector)searchData(sql);
if(vect.isEmpty())
return false;
else
return true;
}
图书借阅的界面JSP代码:
DealString是main中的一个类,jsp 代码中调用了这个类。
<%
DealString ds = new DealString();
//取得菜单类别
String strType = ds.toString(request.getParameter("txt_type"));
String strType1 = ds.toString(request.getParameter("txt_type1"));
String strEdit = ds.toString(request.getParameter("txt_edit"));
String strID = ds.toString(request.getParameter("txt_id"));
String zgbh = ds.toString((String)session.getAttribute("zgbh"));
书名 |
索取号 |
借阅日期 |
到期日期 |
续借次数 |
状态 |
软件图书管理系统,关联图+DFD图+实体属性图+ER图
操作 |
|
借阅 |
<%
Vector vectAll = (Vector)myBean.getData();
Vector vectPage = (Vector)myBean.getPageData(1);
sum = Integer.parseInt((String)vectPage.get(0));//页数
tnum=vectAll.size();//总条数
String bgcolor = "";
numAll=vectPage.size();
for(int i=1;i
{
if((i%2)==0) bgcolor = "t3";
else bgcolor = "t4";
Hashtable hash = (Hashtable)vectPage.get(i);
String strJYID = (String)hash.get("JYID");
String strREADERID = (String)hash.get("READERID");
//证件号
String strZJH = ds.toString((String)myBean.toName("KJB2_KJXX_READER","READERID","ZJH",strREADERID));
String strBOOKID=(String)hash.get("BOOKID");
//图书类别ID
String strBookClassID = ds.toString((String)myBean.toName("KJB2_KJXX_STORE","BOOKID","BOOKCLASSID",strBOOKID));
//图书标题
String strTitle = ds.toString((String)myBean.toName("KJB2_KJXX_BOOK","BOOKCLASSID","TITLE",strBookClassID));
//索取号
String strSQH = ds.toString((String)myBean.toName("KJB2_KJXX_STORE","BOOKID","SQH",strBOOKID));
String strJYSJ = (String)hash.get("JYSJ");
String strDQSJ=(String)hash.get("DQSJ");
String strZT=(String)hash.get("ZT");
if(strZT.equals("0")) strZT="借阅";
else strZT="归还";
String strXJCS=(String)hash.get("XJCS");
%>
<%=strREADERID%>/<%=strZJH%> |
<%=strTitle%> |
<%=strSQH%> |
<%=strJYSJ%> |
<%=strDQSJ%> |
<%=strXJCS%> |
<%=strZT%> |
查看
|
取消借阅
|
<%}%>
以下是JSP代码中用到的函数
<%
myBean.closeConn();
%>
4.2 借阅管理
图书归还界面图如图4.2所示
图4.2图书归还界面图
关于还书的Java代码:
//还书,参数为索取号
public int[] backBorrow(String sqh)
{
System.out.println("批量处理还书。。。。。");
String sql="";
String strBOOKID=ds.toString((String)toName("KJB2_KJXX_STORE","SQH","BOOKID",sqh));
String strNow = ds.getDateTime();
strNow = strNow.substring(0,10);
createStatement();
closeStm();
return result;
}
//根据所还书的索取号取得,此书的信息和是否过期等信息
public Hashtable checkBook(String sqh)
{
String sql="";
String strBOOKID=ds.toString((String)toName("KJB2_KJXX_STORE","SQH","BOOKID",sqh));
if(strBOOKID.equals("")) strBOOKID="-1";
String strBOOKCLASSID=ds.toString((String)toName("KJB2_KJXX_STORE","SQH","BOOKCLASSID",sqh));
if(strBOOKCLASSID.equals("")) strBOOKCLASSID="-1";
sql="select TITLE,AUTHOR,ISBN,CBSJ,DJ,PCJE,READERID,JYSJ,DQSJ "
+" from KJB2_KJXX_BOOK,KJB2_KJXX_JYB "
+" where KJB2_KJXX_BOOK.BOOKCLASSID="+strBOOKCLASSID+" and KJB2_KJXX_JYB.BOOKID="+strBOOKID+" and KJB2_KJXX_JYB.ZT='"+strZero+"'";
return searchOneData(sql);
}
归还的JSP代码:
调用的JavaBean为kjb2.library.bean.BorrowBean。
界面的JSP代码:
调用是用到的函数:
function toservlet()
{
if(document.all.txt_sqh.value=="")
{
alert("请先输入归还书的索取号!");
return false;
}
if(!confirm("你确认归还此书吗?"))
return false;
document.all.txt_type1.value = "24";
document.all.txt_type1.value = "2.2";
document.all.txt_edit.value = "1";
document.all.txt_id.value = "<%=strID%>";
document.all.txt_ifservlet.value = "-1";
document.all.form1.action = "index.jsp";
document.all.form1.submit();
}
function checkbook()
{
alert("dfdf");
if(document.all.txt_sqh.value=="")
{
alert("请先输入归还书的索取号!");
return false;
}
document.all.txt_type1.value = "24";
document.all.txt_type1.value = "2.2";
document.all.txt_edit.value = "2";
document.all.txt_id.value = "<%=strID%>";
document.all.txt_ifservlet.value = "";
document.all.form1.action = "index.jsp";
document.all.form1.submit();
}
function isDigitNew(str)
{
var strno=".";
var time=0;
var strnone=" ";
var bool = true;
for(var i=0;i { if(str.charAt(i)==strno)
{
if(i==0)
return false;
if(i==str.length-1)
return false;
time++;
}
else
{
if(!(str.charAt(i)>=0&&str.charAt(i)<=9))
{
bool = false;
break;
}
}
}
if(str.indexOf("..")>=0)
return false;
if(time>1)
return false;
if(str.indexOf(" ")>=0)
return false;
return bool;
}
function isDigit(str)
{
var bool = true;
for(var i=0;i {
if(!(str.charAt(i)>=0&&str.charAt(i)<=9))
{
bool = false;
break;
}
}
return bool;
}
document.all.txt_edit.value="";function toservlet()
{
if(document.all.txt_sqh.value=="")
{
alert("请先输入归还书的索取号!");
return false;
}
if(!confirm("你确认归还此书吗?"))
return false;
document.all.txt_type1.value = "24";
document.all.txt_type1.value = "2.2";
document.all.txt_edit.value = "1";
document.all.txt_id.value = "<%=strID%>";
document.all.txt_ifservlet.value = "-1";
document.all.form1.action = "index.jsp";
document.all.form1.submit();
}
软件图书管理系统,关联图+DFD图+实体属性图+ER图
结 论
经过三个星期的学习和设计图书管理系统,我们终于在张老师、范老师和杨老师的指导下和同学的帮助下完成了这次图书管理系统的设计。
在图书管理这个系统中,我们运用面向对象程序设计理念,用JSP进行开发图书管理系统的前台,用SQL SERVER数据库开发后台,最终成功连接起来。
开发系统不是立刻编写代码,这样盲目的去做只会浪费更多的时间,真正的开发是首先要进行需求分析,真正认识到要做什么,怎么样去实现它的功能,然后才能编写出相应的程序。正确对待编写时遇到的各种问题,无论遇到什么困难都应该冷静思考解决之道,以免影响接下来的工作。本系统的开发基本按照软件工程所讲的开发步骤进行的,即需求分析,系统设计,系统实现,系统测试。在系统开发前期进行了比较细致的资料收集和需求分析,查阅了大量的资料,学习了一些SQL Server的知识,了解了一些管理系统的实例,根据对系统需求分析绘制了业务流程图。除了需求分析还进行了总体设计,通过功能模块使系统的功能一步步明确,使系统设计得以完善。
此次课程设计是对我这几年来所学知识的一个系统归纳,应该说此次设计既应用到了学校的理论知识,又应合了社会上做项目的方法。是一个全面结合的过程,这样为我在以后工作打下了坚实的基础。经过三个星期的课程设计以及设计论文的撰写,我学到了很多东西。使我感触很深,不仅明白了程序开发中的很多知识,也学到了许多其他方面的知识,从中体会到了学习的乐趣。还使我加深了对专业知识的掌握,弥补了以前学习中的不足,并使我得到提高,在以后的学习和生活中,我会把在毕业设计中学到的知识和积累的宝贵经验应用到自己的实际工作中去,解决工作过程中的困难和问题,不断提高自己的素质与水平。
其实,本课题在现今社会中要有一定的生命力,有待我们更深入的研究。课程设计之所以进行的如此顺利,得力张老师、范老师和杨老师的信任和支持,得力于组员的真诚配合和勤勉不断的努力!为此,我们深深地感恩!感谢张老师、范老师和杨老师谆谆教导,感谢同学们间的互帮互助,衷心地祝愿老师身体健康!
致 谢
三周的课程设计已经结束了,经过努力钻研和老师的悉心指导,顺利的完成了课程设计,使我实现了对过去所学知识的总结和应用。这不仅仅是完成了大学阶段的学习任务,同时更是对自身能力提高。通过自己的动手实践,让我受益匪浅。在这其中用到了很多以前学过的计算机知识,如数据库方面及一些编程思想等,不仅是理论联系实际的一个很好的过程,还学会了许多新知识。
图书管理系统的设计过程中,由于以前很少使用SQL Server2000语言来设计完整的信息管理系统,所以实践起来遇到很多困难,经过老师的指导和查阅资料,问题终于得到解决。同时提高了解决问题的能力,动手能力和分析问题,。可以说这三周是一个提高自己能力的过程,为以后从事工作做了很好的铺垫 。
在课程设计期间,我的指导教师张欣、范嘉鹏和杨盛,对工作实事求是,深厚的理论水平以及一丝不苟的精神深深地感染着我,使我受益匪浅。在他无微不至地关怀和教导下,我学会了如何勇敢地面对困难与挫折。在这里,向老师说一声:“老师,您辛苦了,谢谢您!”。同时,感谢和我一起寒窗苦读三年的同学们,是他们在我困难时,心情低落时耐心的开导我,使我鼓足勇气重新面对挑战。希望同学们在今后的生活中能牢记我们之间深厚而真挚的情意,在今后的工作中能勤奋刻苦,开创自己美好的未来。
在最后我们要在次感谢我们的母校和对我们有深远影响的老师和同学们。祝你们今后工作顺利。
此文献给他们。