软件图书管理系统 CDM图 PDM图 表间关系图-课程设计
软件图书管理系统+CDM图+PDM图+表间
关系图-课程设计
软件图书管理系统
第1章 需求
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
1
1(1项目概述 1
1 1(2 数据流分析
1(3 数据字典 2
第2章 概念结构设计 8
2.1 局部概念模型设计 8 2.2 全局概念设计 10
2.3 CDM图 11
第3章 逻辑结构设计 12 3.1 E-R图向关系模型转换 12 3.2 PDM图的生成 12
3.3 物理结构设计 13
3.4 SQL连接 16
第4章 具体实现 19
4.1 借阅管理 19
4.2 借阅管理 28
结 论 33
致 谢 78
[10] ... >>
软件图书管理系统
第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为惩罚信息。若图片无法显示请联系QQ,本论文免费,转发请注明源于myeducs.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
[10] ... >>
软件图书管理系统,关联图+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(读者规则信息
简述:用来存储读者的规则。
输入数据:读者信息和规则信息。
输出数据:读者规则信息。
[10] ... >>
软件图书管理系统,关联图+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所示若图片无法显示请联系QQ,本论文免费,转发请注明源于myeducs.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图
[10] ... >>
软件图书管理系统,关联图+DFD图+实体属性图+ER图
图3.1生成PDM图对话框
图书管理系统的PDM图如图3.2所示
图3.2图书管理系统的PDM图
3.3 物理结构设计
图书管理系统的数据库的表结构如表3.1—3.7所示:
表3.1 图书信息表
图书种类表KJB2_KJXX_BOOK
名称 列名 数据类型 长度 允许空 备注
bookclassid Int 4 书种类ID 主键
title varchar 50 题名
author Varchar 50 作者 ?
isbn Varchar 50 ISBN号 ?
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
名称 列名 数据类型 长度 允许空 备注
Storied Int 4 馆ID 主键
Mc Varchar 50 名称
Wz Varchar 50 位置 ?
Fzr Varchar 50 负责人 ?
Sm Varchar 50 说明 ?
表3.3 馆藏表
馆藏表KJB2_KJXX_STORE
名称 列名 数据类型 长度 允许空 备注 Bookid Int 4 书本ID 主键 Bookclassid Int 4 种类ID 与book表
bookclassid外键关
联 Storied Int 4 馆ID 与storeplace表的
storied外键关联 Sqh Varchar 50 索取号 Tmh Varchar 50 条码号 ? Njh Varchar 50 年卷号 ? Zt Varchar 50 书刊状态 rgsj Datetime 8 入馆时间
表3.4 读者(借阅证)表
读者(借阅证)表KJB2_KJXX_READER
名称 列名 数据类型 长度 允许空 备注 Readerid Int 4 读者ID 主键 Zjh Varchar 50 证件号 ? Gh Varchar 50 工号 ? Bzrq Datetime 8 办证日期 ? Sxrq Datetime 8 生效日期 ?
Gqrq Datetime 8 过期日期 ?
yj Varchar 50 押金 ? Sxf Varchar 50 手续费 ? Ljjs Int 4 累计借书 ? ruleid Int 4 读者规则? 与rule表的
ID ruleid外键关联
zt Varchar 50 状态 ?
表3.5 读者规则表
读者规则表KJB2_KJXX_RULE
名称 列名 数据类型 长度 允许空 备注
Ruleid Int 4 规则ID 主键
Gzmc Varchar 50 规则名称 ?
Kjysj Int 4 可借阅天数 ?
Kjygcdid Varchar 50 可借阅馆藏地?
ID
Kxjsj Int 4 续借天数 ?
kxjcs Int 4 最大续借天数 ?
kyysj Int 4 预约保留天数 ?
表3.6 书籍借阅表
书籍借阅表KJB2_KJXX_JYB
名称 列名 数据类型 长度 允许空 备注 Jyid Int 4 借阅ID 主键 Readerid Int 4 读者ID 与reader表
readerid外键关联 Bookid Int 4 书本ID 与store表的
bookid外键关联 Jysj Varchar 50 借阅时间 ? dqsj Varchar 50 到期时间 ? Ghrq Varchar 50 归还日期 ? Zt Varchar 50 状态 ? Xjcs Int 4 续借次数 ?
表3.7 惩罚表
惩罚表KJB2_KJXX_CFB
名称 列名 数据类型 长度 允许空 备注
Cfid Int 4 惩罚ID 主键
Readerid Int 4 读者ID 与reader表的
readerid外键关
联
Bookid Int 4 书本ID 与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所示
[10] ... >>
软件图书管理系统,关联图+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())
[10] ... >>
软件图书管理系统,关联图+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",sq
h));
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();
需要完整内容的请联系QQ,本文免费,转发请注明源于myeducs.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;
}
[10] ... >>
软件图书管理系统,关联图+DFD图+实体属性图+ER图
//查找一条记录统一函数
private Hashtable searchOneData(String sql)
{
Hashtable hash = new Hashtable();
sql); ResultSet rs = selectRecord(
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"));
书名 |
索取号 |
借阅日期 |
到期日期 |
续借次数 |
状态 |
[10] ... >>
软件图书管理系统,关联图+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
<%=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",sq
h));
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",sq
h));
if(strBOOKID.equals("")) strBOOKID="-1";
String
strBOOKCLASSID=ds.toString((String)toName("KJB2_KJXX_STORE","SQH","BOOKC
LASSID",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=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=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();
}
<< [11] [12]