姜梅若数据库主内容

更新时间:2023-04-25 20:53:01 阅读量: 自然科学 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1 绪论

当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,计算机被广泛应用于B/S系统环境。计算机的好处在于它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了安全性。

对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好图书信息而设计的。

1.1 开发背景

图书管理包括的图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书管理系统都是初步开始使用,甚至尚未使用计算机进行信息管理。以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况(如借书天数、超过限定借书时间的天数)的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是图书管理系统开发所要解决的问题。

基于这此问题,有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的进行查询和修改图书情况等图书管理操作。

1.2系统对计算机软、硬件环境的基本要求

硬件要求:386,486,586及兼容机.256M基本内存,及各类奔腾系列机器;

操作系统::windows sever 2000 及以上版本

实现平台:powerbuilder 9.0和sybase 数据

统一的语言:SQL可用于所有用户的DB活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及许多其它类型的终端用户。基本的SQL 命令只需很少时间就能学会,最高级的命令在几天内便可掌握。

1

所有关系数据库的公共语言:由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS(关系数据库管理系统)转到另一个,所有用SQL编写的程序都是可以移植的。

2 需求分析

2.1 系统分析

图书管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。而对于后者则要求应用程序功能完备,易使用等特点。在数据库应用系统开发之前,对开发数据库的基本概念,数据库的结构、开发数据库应用程序的步骤、开发体系及方法都应当有相当清晰的了解和认识。数据库应用系统开发的目标是建立一个满足用户长期需求的产品。开发的主要过程为:理解用户的需求,然后,把它们转变为有效的数据库设计。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。

2.2 系统功能分析

图书馆管理系统应具备借书、还书、图书查询和图书管理(如增加、修改和删除)等基本管理功能,具体如下:

(1)凭借书证借书时,对借书证的有效性、最大借书数和目前能借书数,借书期限进行判断,并记录借书信息。

(2)在还书时,更改借书信息记录,并检查该书是否超期,如超期应计算出罚款金额。

(3)能查询读者基本信息和借书的历史记录。

(4)能对所有图书按分类查询(如作者、书名、出版社等)。

(5)能对图书进行基本管理(如增加、修改和删除)。

(6)能管理读者的基本信息(如增加、修改和删除)。

(7)能对各类读者的权限(有效性、最大借书数目和借书期限等)和超期罚款金额进行设置。

2

2.3总体需求

图书管理系统是一项复杂系统工程,要从实际出发,对实际情况进行客观的分析,深入了解需求。需求调查是为了研究系统设计的开发途径和方法。同时它也是进行概要设计和详细设计的基础,是进行内部维护和测试的依据。具体分析如下:添加操作:在执行操作时首先都要先检查是否已经输入以及数据库中是否已经存在输入的数据,如果存在会报错,程序返回上个页面,不执行添加操作。

删除操作:考虑到了字段在不同表中可能会同时存在的情况,比如:删除图书分类时候该分类下有书或者删除用户时该用户有借书记录,这样的情况下程序会给出提醒并跳转到该分类下的所有图书查看或者是该用户的全部借书查看。直到这种关联取消掉之后才允许进行删除这样的危险操作。

查询操作:考虑到了模糊查询的实现, SQL语句中用“like”,还有组合查询,通过对用户输入情况的判断来确定SQL语句的最终形式,比如用户查询时并未输入图书名字,就是名字匹配任意字符,那么程序给数据库的SQL语句就会是name like ‘%’。组合查询的实现也是程序判断用户所做的选择或者输入,在SQL语句中实现的。

超期统计:假定借书超期的限制是三十天,借书记录中的所有数据的借书时间如果不在当前服务器时间减去三十天和当前服务器时间之间,那么这条借书记录就属于超期记录了。由用户借书记录中的用户编号到用户表中查找该用户。

发送消息:往消息表中添加数据,该数据包含用户名,用户超期的图书,超期时间,罚金等相关警告信息。当用户正常登陆主页后,程序自动检查消息表中是否存在该用户的记录,如果有要给出提示,但是没有强制用户必须查看。

数据库备份和还原操作:程序只要告诉SQL 服务器执行备份和还原SQL语句就可以实现,在还原时程序还在使用系统数据库,此时执行还原操作会因为没有排它使用权出现错误,所以应告诉SQL 服务器使用另外的一个数据库,程序中用的是:秦梦琦数据库。还原操作时用FSO组件首先检查备份数据库文件是否存在,如果不存在则给出提示回到上个页面。所有条件都允许后则执行还原操作,如果数据库数据比较多,备份和还原的时间都可能会比较长。

3

4 3 数据库设计

3.1 用户登录流程图

用户登录流程图如下表:

图3.1

用户操作界面 系统 读者信息管理 图书信息管理 重 新登录 修改密

码 退出系

添加 修

查询 添加 修改 查询

5 3.2概念结构设计

图书馆管理系统,总共含有两个实体:图书,读者,它们之间的关系E-R 图如下:

图3.2 系统E-R 图

图书 读者

添加

修改 查

书名 编号 出版社

作者 定价

数量

类型 有效性 已借书数 姓名

班级

系别

编号

3.3 逻辑结构设计

用户登录表:

字段类型长度必填字段允许空格备注

ID int id主键

name char 50 是否名字

pwd char 50 是否密码

表3.1用户登录表

读者基本信息表:

字段名字段类型字段长度是否为空说明

BH Char 8 F 编号(关键字)

XM Char 8 F 姓名

BJ Char 50 T 班级

XB Char 50 F 系别

LXH Char 3 F 类型

YXX Char 1 F 有效性

YJSS Int F 已借书数

表3.2读者基本信息表

图书信息表:

字段名字段类型字段长度是否为空说明

BH Char 8 F 编号(关键字)

SM Char 50 F 书名

ZZ Char 50 F 作者

CBS Char 50 F 出版社

DJ Money F 定价

SL Int F 数量

表3.3 图书信息表

6

借还书记录表:

字段名字段类型字段长度是否为空说明

ID Bigint F 记录序号(关键字)

DZBH Char 8 F 读者编号

TSBH Char 8 F 图书编号

JSRQ SmallDatatime F 借书日期

HSRQ SmallDatatime T 还书日期

CQTS Int T 超期天数

CFJE Money T 处罚金额

表3.4 借还书记录表

读者类型表:

字段名字段类型字段长度是否为空说明

LXH Char 3 F 类型号(关键字)

LXM Char 20 F 类型名

ZDJSQ Int F 最大借书天数

ZDJSS Int F 最大借书数量

CQCF Money F 超期处罚(元/天)

表3.5 读者类型表

3.4创建表的脚本文件

关于创建数据库部分,可以通过SQL Server企业管理器来创建,也可以通过查询分析器来创建,对应的SQL语句如下:

(1)用户登录表:

CREATE user_inf

(

User_id char(10) NOT NULL PRIMARY KEY

User _PWD char(10) NOT NULL

)

7

(2)图书信息表:

CREATE 图书信息

编号char(8)NOT NULL PRIMARY KEY

书名char(50)NOT NULL

作者char(50)NOT NULL

出版社char(50)NOT NULL

定价money(8)NOT NULL

数量int(8)NOT NULL

(3)读者类型表:

CREATE 读者类型

类型号char(3)NOT NULL PRIMARY KEY

类型名char(20)NOT NULL

最大借书天数int(10)NOT FULL

最大借书量int(10)NOT NULL

超期处罚天数money(8)NOT NULL

)

(4)读者信息表:

CREATE 读者信息

(

编号char(10) NOT NULL PRIMARY KEY

姓名char(10) NOT NULL

班级char(50) NOT NULL

系别char(50) NOT NULL

类型char(3)

有效性char(1) NOT NULL

已借书数char(4)

)

(5)借还书记录表:

CREATE 借还书记录

8

(

记录序号bigint( ) NOT NULL PRIMARY KEY

读者编号char(8) NOT NULL

图书编号char(8) NOT NULL

借书记录smalldatatime( ) NOT NULL

还书日期smalldatatime( )

超期天数int(4)

处罚金额money(4)

)

4 详细设计

首先是欢迎进入图书馆管理系统首页,点击进入到用户登录界面,用户输入用户名和密码,就直接进入菜单主页。通过选择用户所要进行的操作如执行添加,修改或查询等功能进行操作管理。各模块组成功能结构以及其实现代码如下:

4.1 系统登录

应用程序代码:

// Profile 123

SQLCA.DBMS = "MSS Microsoft SQL Server"

SQLCA.Database = "姜梅若"

SQLCA.ServerName = "WWW-8C4F29375E3"

SQLCA.LogId = "dba"

SQLCA.AutoCommit = False

SQLCA.DBParm = ""

connect;

open(sy)

9

图书馆管理系统首页截图:

图4.1 欢迎进入图书馆管理系统页面

窗口下输入如下代码:

integer G_INPUT_TIME=0,total,yjss,zdjsl;

string G_PWD,CORRECT_PSWD,G_U,lxh;

图书馆系统登录:

图4.2 用户登录窗口

10

登录按键的代码:

STRING G_USER;

IF sle_1.text="" THEN

messagebox("payattention!","用户名不能为空")

sle_1.setfocus()

elseif sle_2.text="" then

messagebox("payattention!","密码不能为空")

sle_2.setfocus()

ELSE

G_INPUT_TIME=G_INPUT_TIME+1

G_USER=sle_1.text

G_U=G_USER

G_PWD=sle_2.text

select user_PWD INTO:CORRECT_PSWD FROM USER_inf

where user_id=:G_USER;

IF G_PWD=CORRECT_PSWD THEN

open(w_cd)

close(dl)

ELSE

IF G_INPUT_TIME>3 THEN

messagebox("警告","输入用户口令的次数太多!")

close(dl)

else

messagebox("警告","输入用户口令有误,请重新输入")

end if

end if

end if

取消按的键代码:

close(dl)

open(sy)

11

4.2 主菜单页面

用户登录后进入主菜单页面,用户根据需要的操作点击相应功能,在下拉菜单中进行选择。

截图如下:

图4.3主菜单页面

4.3系统界面

点击系统有重新登录,修改密码和退出三项选择。

(1)若选择重新登录则返回登录界面,如下界面:

图4.4 重新登录窗口

12

(2)若选择修改密码则出现如下页面:

图4.5 修改密码窗口

确定键的代码:

STRING G_P,G_L;

G_P=SLE_2.TEXT

G_INPUT_TIME=G_INPUT_TIME+1

IF SLE_2.TEXT<>SLE_3.TEXT THEN

IF G_INPUT_TIME>3 THEN

MESSAGEBOX("警告","输入次数太多!")

close(w_xgmm)

ELSE

MESSAGEBOX("警告","两次输入的口令不一致,请重新输入") END IF

ELSE

IF SLE_1.TEXT<>G_PWD THEN

IF G_INPUT_TIME>3 THEN

MESSAGEBOX("警告","输入次数太多!")

CLOSE(w_xgmm)

ELSE

MESSAGEBOX("警告","输入的原口令不正确,请重新输入")

END IF

ELSE

UPDATE USER_inf SET user_PWD=:G_P

13

WHERE user_id=:G_U;

MESSAGEBOX("注意","你的口令已经修改,请牢记")

COMMIT;

CLOSE(w_xgmm)

END IF

END IF

(3)若选择退出则退出图书馆管理系统。

4.4读者信息管理

点击读者信息管理则会有添加,修改和查询三项选择。

(1)若选择添加则会进入如下页面:

图4.6 添加读者信息窗口

前一条按键的代码:

integer row_current

row_current=dw_1.ScrollPriorRow()

if row_current=1 then

MessageBox("警告","以是最前一条")

14

end if

后一条按键的代码:

integer row_current

integer row_count

row_current=dw_1.ScrollNextRow()

row_count=dw_1.RowCount()

if row_current=row_count then

MessageBox("警告","以是最后一条")

end if

添加按键的代码:

dw_1.object.datawindow.readonly = "no"

long g_RowNumber

g_RowNumber=dw_1.InsertRow(0)

dw_1.ScrollToRow(g_RowNumber)

dw_1.Setrow(g_RowNumber)

dw_1.Setfocus()

保存按键的代码:

if update(dw_1,true,false)=1 then

dw_1.resetupdate()

commit;

messagebox("错误!!!","数据保存成功")

else

rollback;

messagebox("错误!!!","数据保存失败")

end if

退出按键的代码:

int MCount

int UPdateOrNot

MCount=w_tj.dw_1.ModifiedCount()

if MCount=0 then

close(w_tj);

elseif MCount>0 then

15

UPdateOrNot=messagebox("保存修改","您修改了数据窗口中的数据,现在是否保存?",Question!,YesNoCancel!)

if UPdateOrNot=1 then

if update(w_tj.dw_1,true,false)=1 then

w_tj.dw_1.resetupdate()

commit;

else

rollback;

messagebox("错误!!!","数据保存失败")

end if

close(w_tj)

elseif UPdateOrNot=2 then

rollback;

close(w_tj)

end if

end if

(2)若选择修改则会进入如下页面:

图4.7读者信息窗口

16

窗口下输入如下代码:

dw_1.settransobject(sqlca)

dw_1.retrieve()

dw_1.object.datawindow.readonly = "yes"

修改按键的代码:

string oldsql,newsql

int total_row

dw_1.object.datawindow.readonly = "NO"

dw_1.Object.类型.Protect=1

if sle_1.text="" then

MessageBox("注意","请输入内容!")

else

oldsql=dw_1.getsqlselect()

newsql=oldsql+" where 编号="+"'"+sle_1.text+"'"

dw_1.setsqlselect(newsql)

dw_1.retrieve()

dw_1.setsqlselect(oldsql)

total_row=dw_1.rowcount()

if total_row=0 then

MessageBox("注意","没有符合条件的内容")

end if

end if

删除按键的代码:

long current_row

if sle_1.text="" then

MessageBox("注意","请输入内容!")

else

current_row=dw_1.getrow()

deleterow(dw_1,current_row)

end if

17

保存的代码:

if update(dw_1,true,false)=1 then

dw_1.resetupdate()

commit;

messagebox("","数据保存成功")

else

rollback;

messagebox("错误!!!","数据保存失败")

end if

退出按键的代码:

int MCount

int UPdateOrNot

MCount=w_xg.dw_1.ModifiedCount()

if MCount=0 then

close(w_xg);

elseif MCount>0 then

UPdateOrNot=messagebox("保存修改","您修改了数据窗口中的数据,现在是否保存?",Question!,YesNoCancel!)

if UPdateOrNot=1 then

if update(w_xg.dw_1,true,false)=1 then

w_xg.dw_1.resetupdate()

commit;

else

rollback;

messagebox("错误!!!","数据保存失败")

end if

close(w_xg)

elseif UPdateOrNot=2 then

rollback;

close(w_xg)

end if

end if

18

(3)若选择查询则会进入如下页面:

图4.8查询窗口

窗口下输入如下代码:

dw_1.settransobject(sqlca)

dw_1.retrieve()

dw_1.object.datawindow.readonly = "yes"

查询按键的代码:

string oldsql,newsql

int total_row

if sle_1.text="" then

MessageBox("注意","请输入内容!")

else

oldsql=dw_1.getsqlselect()

newsql=oldsql+" where 编号="+"'"+sle_1.text+"'"

dw_1.setsqlselect(newsql)

dw_1.retrieve()

dw_1.setsqlselect(oldsql)

total_row=dw_1.rowcount()

19

if total_row=0 then

MessageBox("注意","没有符合条件的内容")

end if

end if

退出按键的代码:

close(w_cx)

4.5图书信息管理

点击图书信息管理则会有添加,修改和查询三项选择。

(1)若选择添加则会进入如下页面:

图4.9 添加图书信息窗口

窗口下输入如下代码:

dw_1.settransobject(sqlca)

dw_1.retrieve()

dw_1.object.datawindow.readonly = "yes"

前一条按键的代码:

integer row_current

row_current=dw_1.ScrollPriorRow()

20

if row_current=1 then

MessageBox("警告","以是最前一条")

end if

后一条按键的代码:

integer row_current

integer row_count

row_current=dw_1.ScrollNextRow()

row_count=dw_1.RowCount()

if row_current=row_count then

MessageBox("警告","以是最后一条")

end if

添加按键的代码:

dw_1.object.datawindow.readonly = "no"

long g_RowNumber

g_RowNumber=dw_1.InsertRow(0)

dw_1.ScrollToRow(g_RowNumber)

dw_1.Setrow(g_RowNumber)

dw_1.Setfocus()

保存按键的代码:

if update(dw_1,true,false)=1 then

dw_1.resetupdate()

commit;

messagebox("错误!!!","数据保存成功")

else

rollback;

messagebox("错误!!!","数据保存失败")

end if

退出按键的代码:

int MCount

int UPdateOrNot

MCount=w_tj.dw_1.ModifiedCount()

if MCount=0 then

21

本文来源:https://www.bwwdw.com/article/cwbq.html

Top