PowerBuilder实习报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告图书管理与查询系统
随着IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。

近年来,随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的图书管理系统,对图书资料进行集中统一的管理。

本次实验就是运用PowerBuilder和SQL Server开发一个小型的图书管理系统。

一.实验目的
(1)培养综合应用PowerBuilder进行应用程序设计和解决实际问题的能力。

(2)加深对PowerBuilder的编程环境和编程方法的理解。

(3)发挥个人的想像能力和分析能力,扩展思维空间。

(4)掌握应用程序的基本设计方法。

(5)巩固已经学到的编程技术,学会在编程中学会编程。

二.实验要求
(1)按照应用程序设计的四个阶段进行,熟悉每个阶段需要解决的问题以及解决问题的方法。

(2)使用SQL SERVER2000 设计数据库和数据表,注意把握设计数据库的设计原则。

(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.数据库设计
3.系统窗口设计和代码编写(1)系统登录窗口(w_login)
给确认命令按钮cb_1的事件clicked编写代码:
setpointer(hourglass!)
if parent.wf_connect(sle_userid.text,sle_password.text)=-1 then
messagebox("连接数据库错误!","连接失败"+sqlca.sqlerrtext)
halt
else
open(w_main)
close(parent)
end if
给返回命令按钮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(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(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编写代码:
string ls_title
ls_title=trim(sle_1.text)
if not ls_title=""then
dw_1.retrieve(ls_title)
else
messagebox("数据不全!","请输入要查询的书名!") end if
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编写代码:long ll_bookid,ll_publishid,ll_i
date ld_publishdate
string
ls_ISBN,ls_title,ls_author,ls_keywords,ls_words,ls_number,
ls_price
if sle_1.text="" or isnull(sle_1.text) then
messagebox("缺少数据","请输入图书编号")
sle_1.setfocus()
return
elseif sle_3.text="" or isnull(sle_3.text) then
messagebox("缺少数据","请输入书名")
sle_3.setfocus()
return
end if
if sle_4.text<>"" and not isnull(sle_4) then
if isdate(sle_4.text) then
ld_publishdate=date(sle_4.text)
else
messagebox("输入数据错误","请使用“年—月—日”的日期格式")
sle_4.setfocus()
return
end if
end if
ll_bookid=long(sle_1.text)
select tsgl.bookid
into:ll_i
from tsgl
where tsgl.bookid=:ll_bookid;
if ll_i<>0 then
messagebox("错误信息","图书编号第"+string(ll_i)+"号重号!请更正。

")
sle_1.setfocus()
return
end if
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)
insert into "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编写代码:
string ls_title
ls_title=trim(sle_1.text)
if not ls_title=""then
dw_1.retrieve(ls_title)
else
messagebox("数据不全!","请输入要查询的书名!") end if
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编写代码:
long row
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编写代码:
string ls_bookid
ls_bookid=trim(sle_2.text)
if not ls_bookid=""then
dw_1.retrieve(ls_bookid)
else
messagebox("数据不全!","请输入图书编号!") end if
sle_2.setfocus()
long row
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编写代码:
string ls_bookid
ls_bookid=trim(sle_2.text)
if not ls_bookid=""then
dw_1.retrieve(ls_bookid)
else
messagebox("数据不全!","请输入图书编号!") end if
sle_2.setfocus()
long row
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代码:
string ls_author
ls_author=trim(sle_1.text)
if not ls_author="" then
dw_1.retrieve(ls_author)
else
messagebox("数据不全!","请输入作者的姓名!") end if
sle_1.setfocus()
按出版日期“查询”的事件clicked代码:
string ls_start,ls_end
date ld_start,ld_end
if isdate(sle_2.text) then
if isdate(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("数据错误","请重新输入结束时间!") end if
else
messagebox("数据错误","请重新输入开始时间!")
end if
sle_2.setfocus()
按出版社名称“查询”的事件clicked代码:
string ls_publisher
ls_publisher=trim(sle_4.text)
if not ls_publisher="" then
dw_3.retrieve(ls_publisher)
else
messagebox("数据不全","请输入待查询的出版社名称!") end if
sle_4.setfocus()
按图书分类“查询”的事件clicked代码:
string ls_bookclass
ls_bookclass=trim(sle_5.text)
if not ls_bookclass="" then
dw_4.retrieve(ls_bookclass)
else
messagebox("数据不全","请输入待查询的图书类别!") end if
sle_5.setfocus()
按书名“查询”的事件clicked代码:
string ls_title
ls_title=trim(sle_6.text)
if not ls_title="" then
dw_5.retrieve(ls_title)
else
messagebox("数据不全","请输入待查询书名!")
end if
sle_6.setfocus()
按关键字“查询”的事件clicked代码:
string ls_keywords
ls_keywords=trim(sle_7.text)
if not ls_keywords="" then
dw_6.retrieve(ls_keywords)
else
messagebox("数据不全","请输入待查询的关键字!") end if
sle_7.setfocus()
(8)帮助窗口
a.帮助窗口(w_help_1)
b.版本信息窗口(w_help_2)
五.实验总结
在对PowerBuilder实用教程和上学期的SQL Server数据库的学习,本学期期末,我们进行了为期四周的管理信息系统设计与开发实习,即创建一个小型图书管理和查询系统。

系统基本实现了内部图书借阅管理的系统化和自动化。

例如对图书进行登记,对旧书进行注毁;添加出版社资料;图书的借阅、归还;可以按作者、出版日期、出版社等信息对图书进行查询。

实现了简单的统计分析功能,可以展示各类图书的比例。

并能对借阅规则进行设置。

在对该系统的设计、开发和调试过程中,我了解了管理信息系统的开发过程与方法,同时进一步掌握了PowerBuilder开发工具的使用方法,熟悉了窗口、菜单以及一些可视化控件的使用方法以及代码编写的基本方法。

通过使用还了解到窗口对象、数据窗口对象、各类控件的属性与方法。

虽然在系统开发过程中遇到了不少问题和困难,但通过查阅书籍、上网查资料及同学之间的相互讨论得到
了解决。

整个实验过程还很顺利。

相关文档
最新文档