PowerBuilder实习报告.docx
《PowerBuilder实习报告.docx》由会员分享,可在线阅读,更多相关《PowerBuilder实习报告.docx(33页珍藏版)》请在冰豆网上搜索。
PowerBuilder实习报告
实验报告图书管理与查询系统
随着IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。
近年来,随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的图书管理系统,对图书资料进行集中统一的管理。
本次实验就是运用PowerBuilder和SQLServer开发一个小型的图书管理系统。
一.实验目的
(1)培养综合应用PowerBuilder进行应用程序设计和解决实际问题的能力。
(2)加深对PowerBuilder的编程环境和编程方法的理解。
(3)发挥个人的想像能力和分析能力,扩展思维空间。
(4)掌握应用程序的基本设计方法。
(5)巩固已经学到的编程技术,学会在编程中学会编程。
二.实验要求
(1)按照应用程序设计的四个阶段进行,熟悉每个阶段需要解决的问题以及解决问题的方法。
(2)使用SQLSERVER2000设计数据库和数据表,注意把握设计数据库的设计原则。
(3)要求设计的应用程序界面友好,操作方便。
(4)应用程序的界面和风格没有具体要求,个人按照自己的思路去做,发挥自己的创造能力。
(5)提供较为完善的差错控制与友好的用户界面,尽量避免误操作。
(6)系统开发的总目标是实现内部图书借阅管理的系统化、规范化和自动化。
三.系统功能分析
图书管理系统是该系统软件的重要内容之一,该子系统为图书资料的管理和动态调整提供了决策依据,有利于及时针对性的对新书进行订货入库。
它的主要功能包括:
新书入库,旧书注销,借书,还书,图书统计,帮助信息等。
下面是图书管理系统的主要功能的简单描述:
1.图书管理
这是图书馆最重要的模块之一,它将对图书馆中的书籍进行管理操作,所有的原始数据输入都是在这里实现的,有了这里的数据输入,才能开始以后的诸如借书、还书等操作。
(1)新书入库管理
该功能是进行新书的入库登记,即将新书信息加入到BookInfo表中。
(2)旧书注销管理
该功能是将需要淘汰或销毁的旧书通过两种检索方式检索出来并从数据库表BookInfo中删除。
(3)出版社信息管理
该功能是管理出版社信息,具有添加、删除、修改、确认等功能。
2.图书检索管理
图书查询系统是该系统软件的另一个重要内容之一。
它是一个面向读者的综合查询系统,采用与管理系统相同的数据库,具有唯一的功能即查询。
它提供了如下几种查询方式:
(1)按作者姓名查询,要求使用者输入作者姓名进行模糊查询。
(2)按出版日期查询,在这种查询方式下又分为几种查询。
有:
按某个阶段查询,查询某个时间段内出版的图书;按某个日期查询,查询某个日期出版的图书;按某个日期之前查询,查询某个日期之前出版的图书;按某个日期之后,查询某个日期之后出版的图书。
(3)按出版社名称查询,要求使用者输入出版社名称进行模糊查询。
(4)按书名查询,按图书的名称进行图书的模糊查询。
(5)按关键字查询,按图书的关键字进行图书的模糊查询。
3.图书租借管理
(1)借书管理
该功能是办理图书借书登记,将借书信息添加到Loan表中。
(2)还书管理
该功能是办理还书手续在Loan表中填写还书日期登记和加注删除标志。
4.图书浏览管理
(1)阅读摘要
该功能是浏览图书和图书的摘要,通过查询某书的名称来浏览该书的摘要内容。
(2)新书预览
该功能是最近半年内出版的新书以及该书的摘要。
5.统计资料管理
(1)各类图书比例
该功能是按照图书分类,统计各类图书数量占该图书总量的比例。
(2)库存与借出比例
该功能是统计库存和借出的比例。
(3)热门图书统计
该功能是对一些借出图书的频率较高的图书进行统计。
6.帮助信息
该功能提供系统的帮助信息,版本信息以及系统的一些设置。
四.系统设计过程
1.系统功能模块图
2.数据库设计
表P.1bookinfo
字段名
意义
数据类型
宽度
NULL
primarykey
bookid
图书编号
numeric
8
no
是
ISBN
ISBN书号
char
30
yes
bookclass
图书分类代码
numeric
8
yes
title
书名
char
yes
publishdate
出版日期
date
yes
author
作者
char
16
yes
Words
字数
integer
yes
publisher
出版社名称
numeric
30
yes
number
印刷册数
integer
yes
price
定价
money
yes
keywords
关键字
char
30
yes
abstract
摘要
vchar
400
yes
表P.2bookclass
字段名
意义
数据类型
宽度
NULL
primarykey
classID
图书分类代码
numeric
8
no
是
classname
图书分类名称
char
30
yes
表P.3publisherinfo
字段名
意义
数据类型
宽度
NULL
primarykey
publisher
出版社名称
char
30
yes
address
出版社地址
char
50
yes
tel
电话
char
16
yes
publisherid
出版社ID
numeric
4
no
是
fax
传真
char
16
yes
postcode
邮政编码
numeric
6
yes
http
网址
char
16
yes
表P.4loan
字段名
意义
数据类型
宽度
NULL
primarykey
bookid
图书编号
numeric
8
no
是
Stud_id
学生ID号
numeric
8
no
是
loandate
借书日期
date
yes
loanruturn
还书日期
date
yes
fine
罚金
money
yes
delflag
删除标志
tinyint
yes
3.系统窗口设计和代码编写
(1)系统登录窗口(w_login)
给确认命令按钮cb_1的事件clicked编写代码:
setpointer(hourglass!
)
ifparent.wf_connect(sle_userid.text,sle_password.text)=-1then
messagebox("连接数据库错误!
","连接失败"+sqlca.sqlerrtext)
halt
else
open(w_main)
close(parent)
endif
给返回命令按钮cb_2的事件clicked编写代码:
close(parent)
(2)主窗口(w_main)
给图片P_2的事件clicked编写代码:
Open(w_1)
给图片P_3的事件clicked编写代码:
Open(w_2)
给图片P_4的事件clicked编写代码:
Open(w_3)
给图片P_5的事件clicked编写代码:
Open(w_4)
给图片P_6的事件clicked编写代码:
Open(w_5)
给图片P_7的事件clicked编写代码:
close(parent)
(3)统计资料窗口(w_1)
给图片P_1的事件clicked编写代码:
Open(w_1_1)
给图片P_2的事件clicked编写代码:
Open(w_1_2)
给图片P_3的事件clicked编写代码:
Open(w_1_3)
a.各类图书比例窗口(w_1_1)
给窗口w_1_1的事件open编写代码:
dw_1.settransobject(sqlca)
给查询命令按钮cb_1的事件clicked编写代码:
dw_1.retrieve()
给返回命令按钮cb_2的事件clicked编写代码:
Close(parent)
b.热门图书统计窗口(w_1_2)
给窗口w_1_2的事件open编写代码:
gr_1.addseries("计算机")
gr_1.addseries("哲学")
gr_1.addseries("经济学")
gr_1.adddata(1,100,1)
gr_1.adddata(2,80,1)
gr_1.adddata(3,60,1)
gr_1.adddata(4,130,1)
gr_1.adddata(1,88,2)
gr_1.adddata(2,60,2)
gr_1.adddata(3,66,2)
gr_1.adddata(4,100,2)
gr_1.adddata(1,60,3)
gr_1.adddata(2,100,3)
gr_1.adddata(3,70,3)
gr_1.adddata(4,100,3)
gr_1.adddata(1,130,4)
gr_1.adddata(2,80,4)
gr_1.adddata(3,99,4)
gr_1.adddata(4,120,4)
给图片按钮pb_1的事件clicked编写代码:
Close(parent)
c.库存与借出比例窗口(w_1_3)
给窗口w_1_3的事件open编写代码:
gr_1.elevation=12
gr_1.rotation=10
gr_1.spacing=150
gr_1.addcategory("一季度")
gr_1.addcategory("二季度")
gr_1.addcategory("三季度")
gr_1.addcategory("四季度")
gr_1.addseries("借出数量")
gr_1.addseries("库存数量")
gr_1.adddata(1,80,1)
gr_1.adddata(2,100,1)
gr_1.adddata(1,150,2)
gr_1.adddata(2,200,2)
gr_1.adddata(1,100,3)
gr_1.adddata(2,300,3)
gr_1.adddata(1,100,4)
gr_1.adddata(2,500,4)
给图片按钮pb_1的事件clicked编写代码:
Close(parent)
(4)图书浏览窗口(w_2)
给图片P_1的事件clicked编写代码:
Open(w_2_1)
给图片P_2的事件clicked编写代码:
Open(w_2_2)
a.阅读摘要窗口(w_2_1)
给窗口w_2_1的事件open编写代码:
dw_1.settransobject(sqlca)
给检索命令按钮cb_1的事件clicked编写代码:
stringls_title
ls_title=trim(sle_1.text)
ifnotls_title=""then
dw_1.retrieve(ls_title)
else
messagebox("数据不全!
","请输入要查询的书名!
")
endif
sle_1.setfocus()
b.新书预览窗口(w_2_2)
给窗口w_2_2的事件open编写代码:
dw_1.settransobject(sqlca)
dw_1.retrieve()
给上一条命令按钮cb_1的事件clicked编写代码:
dw_1.scrollpriorrow()
给返回命令按钮cb_2的事件clicked编写代码:
close(parent)
给下一条命令按钮cb_3的事件clicked编写代码:
dw_1.scrollnextrow()
(5)图书管理窗口(w_3)
给图片P_1的事件clicked编写代码:
Open(w_3_1)
给图片P_2的事件clicked编写代码:
Open(w_3_2)
给图片P_3的事件clicked编写代码:
Open(w_3_3)
a.新书录入窗口(w_3_1)
给确认命令按钮cb_1的事件clicked编写代码:
longll_bookid,ll_publishid,ll_i
dateld_publishdate
stringls_ISBN,ls_title,ls_author,ls_keywords,ls_words,ls_number,ls_price
ifsle_1.text=""orisnull(sle_1.text)then
messagebox("缺少数据","请输入图书编号")
sle_1.setfocus()
return
elseifsle_3.text=""orisnull(sle_3.text)then
messagebox("缺少数据","请输入书名")
sle_3.setfocus()
return
endif
ifsle_4.text<>""andnotisnull(sle_4)then
ifisdate(sle_4.text)then
ld_publishdate=date(sle_4.text)
else
messagebox("输入数据错误","请使用“年—月—日”的日期格式")
sle_4.setfocus()
return
endif
endif
ll_bookid=long(sle_1.text)
selecttsgl.bookid
into:
ll_i
fromtsgl
wheretsgl.bookid=:
ll_bookid;
ifll_i<>0then
messagebox("错误信息","图书编号第"+string(ll_i)+"号重号!
请更正。
")
sle_1.setfocus()
return
endif
ls_ISBN=trim(sle_2.text)
ls_title=trim(sle_3.text)
ls_author=trim(sle_5.text)
ls_words=trim(sle_6.text)
ls_number=trim(sle_8.text)
ls_price=trim(sle_9.text)
ls_keywords=trim(sle_10.text)
insertinto"tsgl"
("bookid",
"ISBN",
"title",
"publishdate",
"author",
"words",
"publishid",
"number",
"price",
"keywords",
"abstract")
values
(:
ll_bookid,
:
ll_publishid,
:
ls_ISBN,
:
ld_publishdate,
:
ls_title,
:
ls_author,
:
ls_keywords,
:
ls_words,
:
ls_price,
:
ls_number
:
mle_1.text);
sle_1.text=""
sle_2.text=""
sle_3.text=""
mle_1.text=""
sle_4.text=""
sle_5.text=""
sle_6.text=""
sle_7.text=""
sle_8.text=""
sle_9.text=""
sle_10.text=""
sle_1.setfocus()
给返回命令按钮cb_2的事件clicked编写代码:
close(parent)
b.旧书销毁窗口(w_3_2)
给窗口w_3_2的事件open编写代码:
dw_1.settransobject(sqlca)
给查询命令按钮cb_1的事件clicked编写代码:
stringls_title
ls_title=trim(sle_1.text)
ifnotls_title=""then
dw_1.retrieve(ls_title)
else
messagebox("数据不全!
","请输入要查询的书名!
")
endif
sle_1.setfocus()
给删除命令按钮cb_2的事件clicked编写代码:
dw_1.deleterow(dw_1.getrow())
给返回命令按钮cb_3的事件clicked编写代码:
close(parent)
c.出版社窗口(w_3_3)
给窗口w_3_3的事件open编写代码:
dw_1.settransobject(sqlca)
给上一条命令按钮cb_1的事件clicked编写代码:
dw_1.scrollpriorrow()
给下一条命令按钮cb_2的事件clicked编写代码:
dw_1.scrollnextrow()
给添加命令按钮cb_3的事件clicked编写代码:
longrow
row=dw_1.insertrow(dw_1.getrow())
dw_1.setrow(row)
dw_1.scrolltorow(row)
dw_1.setfocus()
给删除命令按钮cb_4的事件clicked编写代码:
dw_1.deleterow(dw_1.getrow())
给修改命令按钮cb_5的事件clicked编写代码:
dw_1.update()
给显示命令按钮cb_6的事件clicked编写代码:
dw_1.retrieve()
给返回命令按钮cb_7的事件clicked编写代码:
close(parent)
给存盘命令按钮cb_8的事件clicked编写代码:
dw_1.update()
(6)图书租借窗口(w_4)
给图片P_1的事件clicked编写代码:
Open(w_4_1)
给图片P_2的事件clicked编写代码:
Open(w_4_2)
a.借书窗口(w_4_1)
给窗口w_4_1的事件open编写代码:
dw_1.settransobject(sqlca)
dw_2.settransobject(sqlca)
给查询命令按钮cb_1的事件clicked编写代码:
stringls_bookid
ls_bookid=trim(sle_2.text)
ifnotls_bookid=""then
dw_1.retrieve(ls_bookid)
else
messagebox("数据不全!
","请输入图书编号!
")
endif
sle_2.setfocus()
longrow
row=dw_2.insertrow(0)
dw_2.setrow(row)
dw_2.scrolltorow(row)
dw_2.setfocus()
给借书命令按钮cb_2的事件clicked编写代码:
dw_2.update()
给切换到还书命令按钮cb_3的事件clicked编写代码:
close(parent)
open(w_4_2)
给返回命令按钮cb_4的事件clicked编写代码:
close(parent)
b.还书窗口(w_4_2)
给窗口w_4_1的事件open编写代码:
dw_1.settransobject(sqlca)
dw_2.settransobject(sqlca)
给查询命令按钮cb_1的事件clicked编写代码:
stringls_bookid
ls_bookid=trim(sle_2.text)
ifnotls_bookid=""then
dw_1.retrieve(ls_bookid)
else
messagebox("数据不全!
","请输入图书编号!
")
endif
sle_2.setfocus()
longrow
row=dw_2.insertrow(0)
dw_2.setrow(row)
dw_2.scrolltorow(row)
dw_2.setfocus()
给借书命令按钮cb_2的事件clicked编写代码:
dw_2.update()
给切换到还书命令按钮cb_3的事件clicked编写代码:
close(parent)
open(w_4_1)
给返回命令按钮cb_4的事件clicked编写代码:
close(parent)
(7)图书检索窗口(w_5)
给窗口w_5的事件open编写代码:
tab_1.tabpage_1.dw_1.settransobject(sqlca)
tab_1.tabpage_2.dw_2.settransobject(sqlca)
tab_1.tabpage_3.dw_3.settransobject(sqlca)
tab_1.tabpage_4.dw_4.settransobject(sqlca)
tab_1.tabpage_5.dw_5.settransobject(sqlca)
tab_1.tabpage_6.dw_6.settransobject(sqlca)
给推退出命令按钮cb_1的事件clicked编写代码:
close(parent)
下面的图片和代码是:
按作者姓名“查询”的事件clicked代码:
stringls_author
ls_author=trim(sle_1.text)
ifnotls_author=""then
dw_1.retrieve(ls_author)
else
messagebox("数据不全!
","请输入作者的姓名!
")
endif
sle_1.setfocus()
按出版日期“查询”的事件clicked代码:
stringls_start,ls_end
dateld_start,ld_end
ifisdate(sle_2.text)then
ifisdate(sle_3.text)then
ld_start=date(sle_2.text)
ld_end=date(sle_3.text)
dw_2.retrieve(ld_start,ld_end)
else
messagebox("数据错误","请重新输入结束时间!
")
endif
else
messagebox("数据错误","请重新输入开始时间!
")
endif
sle_2.setfocus()
按出版社名称“查询”的事件clicked代码:
stringls_publisher
ls_publisher=trim(sle_4.text)
ifnotls_publi