数据库期末作品设计分析报告Word文档格式.docx

上传人:b****2 文档编号:4516172 上传时间:2023-05-03 格式:DOCX 页数:30 大小:345.35KB
下载 相关 举报
数据库期末作品设计分析报告Word文档格式.docx_第1页
第1页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第2页
第2页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第3页
第3页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第4页
第4页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第5页
第5页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第6页
第6页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第7页
第7页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第8页
第8页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第9页
第9页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第10页
第10页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第11页
第11页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第12页
第12页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第13页
第13页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第14页
第14页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第15页
第15页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第16页
第16页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第17页
第17页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第18页
第18页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第19页
第19页 / 共30页
数据库期末作品设计分析报告Word文档格式.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据库期末作品设计分析报告Word文档格式.docx

《数据库期末作品设计分析报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据库期末作品设计分析报告Word文档格式.docx(30页珍藏版)》请在冰点文库上搜索。

数据库期末作品设计分析报告Word文档格式.docx

2.5图书类型窗口编程……………………………………18

2.6查找窗口编程…………………………………………19

2.7用户窗口编程…………………………………………25

2.8图书信息窗口编程……………………………………26

2.9记录信息窗口编程……………………………………28

2.10数据显示控件编程……………………………………31

3实训心得………………………………………………………33

1数据库设计

熟悉《PowerBuilder数据库开发技术》实训环境,熟练掌握数据库、表、窗口界面的设计、图形按钮的添加、数据库的链接及函数的创建与应用,确立数据库创建的方向,对图书管理系统进行分析并设计系统实现需要哪几张表以及各表结构,确立数据库创建的要求,优化数据库界面的设计。

1.1需求分析

书籍是人类不可缺少的精神食粮,对学校来说,显得尤为重要。

所以图书馆管理系统应该是能够为读者提供充足的信息和快捷的查询手段的一种方式。

但一直以来人们都是使用传统的人工方式来管理图书,这就给图书馆的管理和图书信息的查阅带来了很大的不便,使得图书管理的效率低下、保密性差,时间一长,还容易造成文件和数据的丢失,给查找、更新和维护带来了很大的困难。

图书管理工作繁琐,借阅频繁,包含大量的信息数据,因此就需要一个完善的图书管理系统来实现对这些数据的有效管理。

从而达到对图书、读者、员工、借阅信息、查询进行统一管理,满足各类用户的需求。

随着计算机信息技术的发展,数据库作为信息技术的一部分也在飞速的发展着。

使用数据库对图书资源进行管理具有着手工管理无法比拟的优点,它检索迅速、查找方便、可靠性高、存储量大、成本低,所以数据库成为了图书馆管理最主要的选择。

1.2数据库设计内容

利用PowerBuilder开发一个基于SQLAnywhere数据库的小型图书管理系统。

该图书管理系统主要具有如下五个功能:

图书类型信息的查询和编辑,图书信息的查询和编辑,用户信息的查询和编辑,借还书记录的生成和查询,指定用户借还书记录的查询。

其中前三个功能是必须实现的功能,后两个功能为选做。

此外,可根据思考题(见群共享中压缩文件PB0520)中的要求优化图书管理系统的功能,也可自行对系统进行功能的优化。

1.3概念设计

概念设计是在需求分析上的,用概念数据模型来表示数据以及数据之间的相互联系,从上述的分析中规划处图书馆管理系统的实体有图书信息实体、图书类型实体、用户实体、借书记录实体。

用户实体E-R图

图书信息表

作者

图书编号

图书名称

类型编号

出版社

图书信息实体E-R图

图书类型实体E-R图

借书记录表

记录编号

用户编号

借出日期

归还日期

借书记录实体E-R图

1.4逻辑设计

数据库逻辑设计是整个设计的前半段,包括所需的实体和关系,实体规范化等工作,在图书馆管理系统的数据库设计中,实体与实体之间通过关系得到了很好的连接,主要体现在一对一的关系、一对多的关系、多对多的关系。

一个1:

n联系可以转换为一个独立的关系模式

1联系可以转换为一个独立的关系模式

一个n:

1.5窗体界面设计以及控件的添加

窗口设计和控件的添加是数据库开发必不可少的步骤之一,在图书馆管理系统数据库中也是如此,图书馆管理系统的窗口设计采用的是普通方式和继承方式并存的方法。

如下图所示:

图1—1登录窗口

图1-2查找窗口

图1-3记录窗口

图1-4祖先窗口(数据显示窗口)

设置好祖先窗口后,就要进行四个子孙窗口的设置分别是:

图书类型窗口、图书信息窗口、用户信息窗口、记录信息窗口。

在完成窗口和控件的设置之后,我们就要对控件createdatawindow的dataobject属性进行设置,使其与之相关的表格进行关联。

图1-5操作窗口图1-6系统树窗口

1.6表的设计以及表中数据的添加

在数据库中表的设计以及表中数据的添加都是至关重要的,此次实训设计中的表格以及数据如下图所示:

图1-7图书信息表

图1-8借书记录表

图1-9图书类型表图1-10用户信息表

2数据库编程

无论是采用哪种开发工具开发应用程序,编写代码是必不可少的。

编写代码的过程也就是平常所说的编程,在PowerBuilde中采用的是Powerscript语言,它简单易学,编写程序的格式比较自由,用Powerscript语言编程能够更好、更快捷、更方便的创建数据库,更加准确的添加数据及其实现数据库一系列的功能。

2.1数据库链接代码

应用对象的open事件

SQLCA.DBMS="

ODBC"

SQLCA.AutoCommit=False

SQLCA.DBParm="

ConnectString='

DSN=mybook;

UID=caowei;

PWD=7077'

"

connectusingSQLCA;

ifSQLCA.SQLCode<

>

0then

messagebox("

连接失败"

"

原因:

+sqlca.sqlerrtext,stopsign!

haltclose

endif

open(dljm)

2.2操作界面编程

(1)界面设置代码如下:

w_main的closequery事件

stringwtitle="

ifnotcb_type.enabledthen

wtitle="

图书类型"

elseifnotcb_book.enabledthen

图书信息"

elseifnotcb_user.enabledthen

用户信息"

elseifnotcb_log.enabledthen

借书记录"

elseifnotcb_query.enabledthen

记录查询"

ifwtitle<

then

messagebox("

系统提示"

"

请先关闭【"

+wtitle+"

】窗口!

exclamation!

return-1

(2)窗口关闭代码如下:

cb_close的clicked事件

close(parent)

2.3数据显示窗口编程(祖先窗口代码编辑)

(1)数据读取代码如下所示:

dw_base的open事件

this.x=w_main.x+w_main.width

this.y=w_main.y

this.tag=this.title//保存窗口的标题

dw_1.settransobject(SQLCA)//连接事务对象

dw_1.retrieve()//读取数据

dw_1.object.datawindow.readonly=true

dw_1.setrowfocusindicator(hand!

)//设置行指示标记

(2)函数设置代码如下:

1)dw_base的closequery事件

stringmsg="

部分数据被改动!

是否存盘?

ifthis.title<

this.tagthen

choosecasemessagebox("

提示"

msg,question!

yesnocancel!

1)

case1

cb_save.eventclicked()

case2

return0

case3

return1

endchoose

endif

2)f_checkempty自定义函数

stringmsg

dw_1.setcolumn(col_name)//设置当前列

ifdw_1.gettext()="

msg="

["

+col_title+"

]值不能为空!

请修改..."

msg,exclamation!

return-1

else

return1

3)f_resetitem自定义函数

stringorg_value

integeri,cols//i为计数变量,col存放列总数

longcurrow//记录当前行

currow=dw_1.getrow()//获得当前行的行号

choosecasedw_1.getitemstatus(currow,0,primary!

casenew!

newmodified!

//new表示新插入行,还没设任何值

dw_1.deleterow(0)//直接删除该行

casedatamodified!

//如果数据被修改过则进行恢复

cols=integer(dw_1.object.datawindow.column.count)

fori=1tocols//采用循环方式恢复所有数据列的值

ifdw_1.getitemstatus(currow,i,primary!

)=datamodified!

thenorg_value=dw_1.getitemstring(currow,i,primary!

true)

dw_1.setitem(currow,i,org_value)

next

endchoose

4)f_setstatus自定义函数

longcurrow//存放当前记录行的行号

f_setstart()

dw_1.object.datawindow.readonly=viewmode

cb_add.enabled=viewmode

cb_del.enabled=viewmode

cb_find.enabled=viewmode

cb_reload.enabled=viewmode

cb_close.enabled=viewmode

ifviewmodethen//若是浏览状态

cb_edit.text="

编辑"

cb_save.text="

保存"

dw_1.tag="

//清除数据窗口控件保存的当前记录行的行号

else

cb_edit.text="

取消"

cb_save.text="

确定"

//设置数据窗口控件的初始编辑状态

currow=dw_1.getrow()//获得当前行的行号

dw_1.tag=string(currow)

dw_1.scrolltorow(currow)//滚屏,确保当前行可见

dw_1.selectrow(currow,false)//去掉加亮

dw_1.setfocus()//将输入焦点移到数据窗口控件中

dw_1.setcolumn

(1)//将第一列设为当前列

dw_1.selecttext(1,len(dw_1.gettext()))

f_setend()

(5)dw_1的losefocus事件:

this.accepttext()//数据窗口控件失去输入焦点时接收悬浮数据

dw_1的itemfocuschanged事件

longeditrow//存放当前记录行的行号

ifthis.tag<

then//若为编辑状态,见f_setstatus函数

editrow=long(this.tag)//获得当前正在编辑的记录行号

ifeditrow<

rowthen//判断是否是当前行号

this.setrow(editrow)//不是则修改当前行号

this.scrolltorow(editrow)//让当前行可显示

2.4窗口按钮编程

(1)cb_add(添加)按钮:

longnewrow

newrow=dw_1.insertrow(0)//插入新行到最后

dw_1.setrow(newrow)//将新行设为当前行

f_setstatus(false)调用f_setstatus函数将窗口设为编辑状态

(2)cb_del(删除)按钮:

是否删除当前记录?

请确定..."

dw_1.selectrow(dw_1.getrow(),true)//加亮显示要删除的行

ifmessagebox("

msg,Question!

YesNo!

2)=1then

dw_1.deleterow(0)//删除当前行

else

dw_1.selectrow(dw_1.getrow(),false)//取消行的加亮显示

(3)cb_edit(编辑)按钮:

ifthis.text="

f_setstatus(false)//若文本为“编辑”设为编辑状态

f_setstatus(true)//若文本为“取消”设为浏览状态

f_resetitem()//恢复原始数据值

(4)cb_save(保存)按钮:

integerrtn

rtn=dw_1.update()//更新操作

ifrtn=1then//更新成功

COMMITUSINGSQLCA;

//提交语句

else//更新失败

ROLLBACKUSINGSQLCA;

//回滚语句

parent.title=parent.tag//让窗口的title恢复为原始title

(5)cb_close(关闭)按钮:

(6)cb_reload(重载)按钮:

dw_1.retrieve()

2.5图书类型窗口编程

(1)w_type窗口的close事件

w_main.cb_type.enabled=true

(2)cb_save的clicked事件

iff_checkempty("

id"

编号"

)=-1thenreturn

iff_checkempty("

title"

名称"

f_setstatus(true)//退出编辑状态

parent.title=parent.tag+"

(*)"

//用户进行了编辑且未保存,修

(3)主窗口cb_type按钮的clicked事件:

open(w_type)

this.enabled=false

其执行结果如下图2-1所示

2.6查找窗口编程

(1)w_find窗口的编程:

定义sharedvariables:

dw_basepwin//注意祖先窗口名

(2)w_find的open事件

this.width=3000

this.height=1200

pwin=parentwindow()

choosecasepwin.classname()

case"

w_type

ddlb_1.additem(“编号*id”)

ddlb_1.additem(“类型*title"

w_user"

ddlb_1.additem(“编号*id"

ddlb_1.additem("

姓名*name"

w_book"

编号*id"

类型*typeid"

书名*title"

作者*author"

出版社*company"

w_log"

记录编号*id"

ddlb_1.additem("

图书编号*bookid"

用户编号*userid"

借出日期*borrow"

归还日期*return"

ddlb_1.selectitem

(1)

ddlb_2.selectitem

(1)

ddlb_2.enabled=false//按记录行查找时禁止选择查找关系

cb_next.tag="

1"

//存放查找记录的起始行

cb_next.enabled=false//开始时不能操作“下一个”按钮

sle_1.tag=string(pwin.dw_1.rowcount())//存放总的记录行数

sle_1.text="

sle_1.setfocus()

(3)find的deactivate事件

ifthis.width<

3000then

this.width=3000

(4)find窗口中ddlb_1控件的selectionchanged事件:

ifindex=1then//若指定按记录行查找

ddlb_2.selectitem

(1)//查找关系默认为“=”

ddlb_2.enabled=false//禁止选择查找关系

cb_next.enabled=false

else//按其他方式查找

ddlb_2.enabled=true

(5)w_find窗口中cb_find按钮的clicked事件:

fstr="

//fstr用于存放查询条件文本串

integernbit

longfrow//存放查找到的记录行的行号

pwin.dw_1.selectrow(0,false)//取消之前所有行的加亮显示

ifsle_1.text="

查询目标不能为空!

请输入..."

return

nbit=pos(ddlb_1.text,"

*"

fstr=mid(ddlb_1.text,nbit+1)

choosecasefstr

row"

ifnotisnumber(sle_1.text)orsle_1.text="

0"

or&

long(sle_1.text)>

long(sle_1.tag)then

【记录行】的范围是1-"

+sle_1.tag+"

!

sle_1.setfocus()

return

frow=long(sle_1.text)

pwin.dw_1.scrolltorow(frow)

pwin.dw_1.selectrow(frow,true)

parent.width=300

parent.height=100

cb_close.setfocus()//以便按enter键关闭w_find窗口

return//不再执行后续代码

borrow"

return"

//查找日期型数据

fstr="

string("

+fstr+"

'

yy-mm-dd'

)"

+ddlb_2.text+"

'

+sle_1.text+"

fstr+="

cb_find.tag=fstr//查询条件保存到cb_find.tag

cb_next.tag="

//设置查询起始行

cb_next.eventclicked()

(6)cb_find窗口中cb_next按钮的clicked事件:

stringfstr,msg

longsrow,erow,frow

fstr=cb_find.tag//获得查询条件

srow=long(cb_next.tag)

erow=long(sle_1.tag)

frow=pwin.dw_1.find(fstr,srow,erow)

iffrow=0then

没找到满足条件的记录!

请重新设置条件..."

cb_find.tag="

//清除存放在cb_find.tag中的查找条件即fstr

s

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2