实验图书管理系统.docx
《实验图书管理系统.docx》由会员分享,可在线阅读,更多相关《实验图书管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
实验图书管理系统
实验图书管理系统
一实验目的
(1)培养综合应用PowerBuilder进行应用程序设计和解决实际问题的能力;
(2)加深对PowerBuilder编程环境和编程方法的理解;
(3)发挥各人的想像能力和分析能力,拓展思维空间;
(4)掌握应用程序设计的基本方法;
(5)巩固已经学到的编程技术,学会在编程中学习编程。
二实验要求
(1)图书信息的录入和删除,出版社信息管理等;
(2)图书的检索(包括按作者姓名、出版时间、出版社名称、图书类别、书名、关键宇等);
(3)图书的租借(包括借书登记、限借数量控制、还书登记、过期罚款计算等);
(4)借书证件的管理(包括办新证件,挂失、注销等)
(5)系统设置(主要是不同类型证件的可借书的总量和借书时间等)
三实验内容
详细步骤:
数据库的设计:
创建数据库,数据库名user,在数据库里建表1~表4,表1Bookinfo为存放图书信息表,表2certificateinfo证件表为证件表,表3LOAN图书租借表,表4SET系统设置表,表如下:
表1Bookinfo
字段名
意义
数据类型
宽度
Null
PrimaryKey
BookID
图书编号
Char
8
No
√
ISBN
ISBN书号
Char
30
Yse
Title
书名
Char
40
Yse
Publish
出版日期
Char
Yse
Author
作者
Char
30
Yse
Words
字数(千字)
Integer
Yse
PublisherID
出版社ID
Char
4
Yse
Number
印刷册数
Char
Yse
Price
定价
Money
Yse
Keyword
关键字
Char
30
Yse
Abstract
摘要
Varchar
400
Yse
表2certificateinfo
字段名
意义
数据类型
宽度
Null
PrimaryKey
Cert_id
借书证书ID
Char
5
No
√
Cert_name
证件名称
Char
10
Yes
Cert_value
证件号码
Char
18
Yes
Name
姓名
Char
8
Yes
Depart
所在部门
Char
20
Yes
flag
标记
Tinyint
Yes
表3LOAN
表4SET
1.创建菜单
创建一个菜单,菜单名为caidan,所有窗口在菜单中实现。
2.创建窗口对象
登陆界面
(1)主界面:
创建一个新的弹出式窗口对象,Title为“图书管理系统”关联菜单“caidan”
界面如下:
(2)图书管理:
a.新书录入界面:
创建一个新的弹出式窗口对象,
(1)布置窗口中的静态文本控件
窗口中只有一个标题使用静态文本控件,在窗口控件下拉列表工具栏图标中选择静态文本控件,然后在窗口上单击,生成静态文本控件。
在Text属性栏中输入“新书录入”。
(2)布置窗口中的单行编辑框控件
在窗口控件下拉列表工具栏图标中选择单行编辑框控件,然后在窗口上单击,生成单行编辑框控件。
使用Ctrl和T组合键进行外观复制生成5个单行编辑框。
单行编辑框的名称
控件名称
说明字段
Sle_bookid
图书编号
Sle_isbn
ISBN书号
Sle_publish
书名
Sle_author
作者
Sle_words
字数
Sle_publisberid
出版社ID
Sle_number
印刷册数
Sle_price
定价
Sle_keyword
关键字
Sle_abstract
摘要
(3)布置窗口中的多行编辑框控件
在窗口控件下拉列表工具栏图标中选择多行编辑框控件,然后在窗口上单击,生成多行编辑框控件。
其名称Name为“dw_abstract”,选中Hscrollbar和Vscrollbar。
多行编辑框控件用于输入摘要。
(4)布置窗口中的“确定”按钮控件
在窗口控件下拉列表工具栏图标中选择命令按钮控件,然后在窗口上单击,生成命令按钮控件。
窗口中共有两个命令按钮控件,设置一个按钮的Text属性为“确定”,名称为cb_ok.选中default属性。
“确定”按钮的Clicked事件脚本为;
stringstr_BookId,str_ISBN,str_Title,str_Author,str_PublisherID,str_Keyword,str_Abstract
longI_Words,I_price,i,I_Number,Flag1
datestr_Publish
ifsle_bookid.text=""thenreturnmessagebox("缺少数据","请输入图书编号")
str_BookId=trim(sle_bookid.text)
str_ISBN=trim(sle_isbn.text)
str_Title=trim(sle_title.text)
str_Publish=date(sle_publish.text)
str_Author=trim(sle_author.text)
str_PublisherID=trim(sle_publisherid.text)
I_Number=long(sle_number.text)
str_Keyword=trim(sle_keyword.text)
str_Abstract=trim(mle_abstract.text)
I_Words=long(sle_words.text)
I_Price=long(sle_price.text)
Flag1=0
selectBookID
into:
i
fromBookInfo
whereBookID=:
str_BookId;
ifi<>0thenmessagebox("书号重复","书号重复,请重新输入!
")
INSERTINTO"BookInfo"
("BookID",
"ISBN",
"Title",
"Publish",
"Author",
"Words",
"PublisherID",
"Number",
"Keyword",
"Abstract",
"Price",
"Flag")
VALUES
(:
str_BookId,
:
str_ISBN,
:
str_Title,
:
str_Publish,
:
str_Author,
:
I_Words,
:
str_PublisherID,
:
I_Number,
:
str_Keyword,
:
str_Abstract,
:
I_Price,
:
Flag1);
sle_bookid.text=""
sle_isbn.text=""
sle_title.text=""
sle_publish.text=""
sle_author.text=""
sle_publisherid.text=""
sle_number.text=""
sle_publisherid.text=""
sle_keyword.text=""
mle_abstract.text=""
sle_words.text=""
sle_price.text=""
sle_bookid.setfocus()
(3)关联新书录入窗口m到菜单中
打开创建主菜单选择新书录入菜单,添加事件的脚本为:
open(m)
(4)具体界面如下:
b.旧书销毁界面:
创建一个新的弹出式窗口对象
(1)布置窗口中的静态文本控件
窗口中只有一个标题使用静态文本控件,在窗口控件下拉列表工具栏图标中选择静态文本控件,然后在窗口上单击,生成静态文本控件。
在Text属性栏中输入“旧书销毁”。
(2)按书号检索
按书号查询的数据窗口对象是一个条件查询的数据窗口,其设计步骤为:
l)单击New图标按钮,弹出“New”对话框;
2)选择DataWindow选项页,双击FreeForm图标,弹出“ChooseDataSourceforFreeFormDataWindow”对话框;
3)选择“SQLSelect”数据源方式,单击“Next”按钮,弹出“SelectTable”对话框;
4)在Table列表框中选择student表,单击“Open”按钮,这时弹出Select画板;
5)单击菜单Design∣RetrievalArguments…弹出SpecifyRetrievalArguments”对话框,在Name栏中输入ls_name,在Type下拉列表框中选择String,单击“OK”按钮,对话框关闭:
6)在Select画板的TableLayout子窗口中的表框中列出了student表的全部字段的名称,每单击一个字段,该字段就变为蓝底白字,表示选中,同时,会在上面的“SelectionList:
”区域中排列出该宇段。
如果单击选中的字段,就会变为不被选中,该字段从上面的排列中消失。
单击每一个字段,将全部字段选中;
7)在Select画板的Where子窗口中单击Colunm栏,右边出现一个“▼”符号,单击“▼”按钮,弹出student表的所有字段,选择“student”.“name”,在右边的Value栏中,单击右键,选择弹出菜单中的“Arguments...”,弹出一个小窗口,内部有刚才定义的变量“:
Is_name”,单击选中它,单击“Paste”按钮,“:
ls_name”就出现在Value栏中。
8)单击“Return”图标按钮,弹出“SelectColorlBorderSettings”对话枢,单击“Next”按钮,弹出“ReadytoCreateFreeFormDataWindow”对话框。
,该对话框对数据窗口对象的主要属性进行了小结。
单击“Finish”按钮,弹出“SpecifyRetrievalArguments”对话框,要求对检索变量ls_name进行赋值,以便对数据库进行数据检索,并将检索结果放到Preview子窗口中。
可以在Value栏中输人一个姓名后按“OK”键进行检索,也可以按“Cancel”键不进行检索,然后进入数据窗口对象画板。
9)在数据窗口对象画板中,将字段名称改为中文,调整字段的位置和大小,设置文字颜色、背景颜色和字段边框;
10)选择菜单Edit∣Select∣SelectColunms,将所有字段全部选中,然后在Properties属性卡中选择Edit页,选中“DisplayOnly”复选框,不选中“AutoSelection”复选框;
11)保存数据窗口对象名称为d1。
(4)编写脚本:
在“查询”按钮的Clicked事件脚本为;
stringstr_bookid
str_bookid=trim(sle_bookid.text)
ifnotstr_bookid=""then
dw_bookid.retrieve(str_bookid)
else
MessageBOX("数据不全","请输入待删除的书名。
")
endif
sle_bookid.setFocus()
在“确定销毁”按钮的Clicked事件脚本为;
stringstr_bookid
longi
str_bookid=trim(sle_bookid.text)
delete
from"BookInfo"
whereBookID=:
str_bookid;
dw_bookid.retrieve(str_bookid)
selectBookID
into:
i
from"BookInfo"
whereBookID=:
str_bookid;
ifi=0thenmessagebox("提示",string(str_bookid)+"的信息已经不存在")
sle_bookid.text=""
(5)关联新书录入窗口n到菜单中
打开创建主菜单选择旧书销毁菜单中,添加事件的脚本为:
open(n)
(6)具体界面如下:
(4)图书查询:
图书查询包括两个查询:
按书名查询,按日期查询。
(这里只写按书名查询详细步骤,按日期查询和按书名查询功能一样,略之)
1)设计步骤如下:
创建一个新的弹出式窗口对象。
数据窗口对象选择Grid风格。
增加一个检索参数RetrievalArgument为ls_author,在Select画板的Where子窗口中设计的条件为:
"bookinfo"."author"like:
ls_author
保存数据窗口对象
(2)布置一个静态文本控件,其Text为“按书名查询”,一个单行编辑框,为Name为“sle_author”;一个命令按钮,Text属性为“查询”,选中“Default”复选框;还有一个数据窗口控件,其Name为dw_author”;DataObject为d5,选中HScrollBar和VScrollBar复选框。
保存所做的工作。
(3)编写脚本:
在“确定”按钮的Clicked事件脚本为;
stringstr_title
str_title=trim(sle_title.text)
ifnotstr_title=""then
dw_title.retrieve(str_title)
else
MessageBOX("数据不全","请输入书名(可以不全)!
")
endif
sle_title.setFocus()
在a窗口的Open事件中,再增加数据窗口dw_author使用数据库的事物对象和初始化的代码:
dw_author.SetTransObject(SQLCA)
(4)关联新书录入窗口m到菜单中
打开创建主菜单选择按作者查询菜单,添加事件的脚本为:
open(a)
两个界面如下:
按书名查询
按日期查询
(5)证件管理:
a.办新证件
创建一个新的弹出式窗口对象,窗口名“student”。
(1)布置窗口中的静态文本控件
窗口中只有一个标题使用静态文本控件,在窗口控件下拉列表工具栏图标中选择静态文本控件,然后在窗口上单击,生成静态文本控件。
在Text属性栏中输入“办新证件”。
2)布置窗口中的单行编辑框控件
在窗口控件下拉列表工具栏图标中选择单行编辑框控件,然后在窗口上单击,生成单行编辑框控件。
使用Ctrl和T组合键进行外观复制生成5个单行编辑框。
单行编辑框的名称
控件名称
说明字段
Sle_cert_id
借书证ID
Sle_cert_value
证件号码
Sle_departy
所在部门
(3)布置窗口中的单选钮和组合框控件
窗口中共有两组单选钮,一组为性别选择,另一组为党团员选择。
性别选择单选钮的设计方法为:
在窗口控件下拉列表工具栏图标中选择组合框控件,然后在窗口上单击,生成组合框控件、再选择单选钮控件,在组合框中单击,生成单选钮控件。
设置其名称为rb_zero,Text为“0”,选中Checked属性;同样再在组合框中放置一个单选钮控件,设置其名称为rb_first,Text为“1”,不选中Checked属性;rb_two,Text为“2”,不选中Checked属性。
(说明:
标记中的0是合法用户能借阅书籍,1是该证已挂失,2是该用户已经在黑名单里。
)
(4)布置窗口中的下拉列表框控件
在窗口控件下拉列表工具栏图标中选择下拉列表框控件,然后在窗口上单击,生成下拉列表框控件。
输入下拉列表框控件名称为ddlb_cert_name,不选中Sorted属性,选中Vscrollbar属性。
单击下拉列表框控件后拖动下边框,调整下拉列表框展开后的长度。
同样输入下拉列表框控件名称为ddlb_departy,不选中Sorted属性,选中Vscrollbar属性。
单击下拉列表框控件后拖动下边框。
(5)布置窗口中的命令按钮控件
在窗口控件下拉列表工具栏图标中选择命令按钮控件,然后在窗口上单击,生成命令按钮控件。
窗口中共有两个命令按钮控件,设置一个按钮的Text属性为“提交”,名称为cb_ok.选中default属性;设置一个按钮的Text属件为“退出”,名称为cb_exit,选中Cancel属性。
(6)编写脚本:
单击选中证件名称下拉列表框控件,选择右键弹出菜单中的Script菜单项,进人SCript子窗口,选择事件下拉列表框中的Constructor事件,输人以下脚本:
this.additem("教师")
this.additem("学生")
同时在所在部门下拉列表框控件,选择右键弹出菜单中的Script菜单项,进人SCript子窗口,选择事件下拉列表框中的Constructor事件,输人以下脚本:
this.additem("计算机科学系")
this.additem("英语系")
this.additem("工商管理系")
this.additem("经济系")
this.additem("信息管理系")
this.additem("艺术系")
this.additem("机械系")
this.additem("建筑系")
在“确定”按钮的Clicked事件脚本为;
stringID,depart,name,Cname,Cvalue,Ctype,flag
inti
ID=trim(sle_cert_id.text)
selectCert_id
into:
i
fromCertificateInfo
whereCert_id=:
ID;
ifi<>0then
messagebox("重复","借书证ID重复,请重新输入!
")
sle_cert_id.text=""
sle_cert_id.setfocus()
return
endif
ifsle_cert_id.text=""then
messagebox("缺少数据","请输入借书证ID")
sle_cert_id.setfocus()
return
elseifsle_name.text=""then
messagebox("缺少数据","请输入姓名")
sle_name.setfocus()
return
endif
ifsle_cert_value.text=""then
messagebox("缺少数据","请输入证件号")
return
elseifsle_depart.text=""then
messagebox("缺少数据","请输入系别或部门")
return
endif
ifddlb_cert_type.text=""then
messagebox("缺少数据","请选择借书证类型")
return
elseifddlb_cert_name.text=""then
messagebox("缺少数据","请输入证件名称")
return
endif
name=trim(sle_name.text)
Cvalue=trim(sle_cert_value.text)
Cname=trim(ddlb_cert_name.text)
depart=trim(sle_depart.text)
Ctype=trim(ddlb_cert_type.text)
flag="0";
insertinto"CertificateInfo"
("Cert_id",
"Name",
"Cert_name",
"Cert_value",
"Depart",
"Cert_type",
"flag"
)
values
(:
ID,
:
name,
:
Cname,
:
Cvalue,
:
depart,
:
Ctype,
:
flag
);
sle_cert_id.text=""
sle_name.text=""
ddlb_cert_name.text=""
sle_cert_value.text=""
sle_depart.text=""
ddlb_cert_type.text=""
sle_cert_id.setfocus()
在“退出”按钮的Clicked事件脚本为;
close(book_jszzhuce)
(7)关联新书录入窗口student到菜单中
打开创建主菜单到办新证件菜单中,添加事件的脚本为:
open(student)
(8)具体界面如下:
b.证件管理
创建一个新的弹出式窗口对象,窗口名“lose”。
设计步骤如下:
1)首先按借书证ID进行检索,显示出这个人的证件信息,之后设置四个按钮:
确定、挂失、解锁、销毁,之后在每个按钮里输入脚本。
2)编写脚本:
在“确定”按钮的Clicked事件脚本为;
stringID
ID=trim(sle_ID.text)
ifnotsle_ID.text=""then
dw_ID.retrieve(ID)
else
messagebox("错误","请输入借书证号")
endif
在“挂失”按钮的Clicked事件脚本为;
stringID
longi
ID=trim(sle_ID.text)
update"CertificateInfo"
set"flag"=1
where"Cert_id"=:
ID;
ifnotsle_ID.text=""then
dw_ID.retrieve(ID)
else
messagebox("错误","请输入借书证ID")
endif
在“解锁”按钮的Clicked事件脚本为;
stringID
longi
ID=trim(sle_ID.text)
update"CertificateInfo"
set"flag"=0
where"Cert_id"=:
ID;
ifnotsle_ID.text=""then
dw_ID.retrieve(ID)
else
messagebox("错误","请输入借书证ID")
endif
在“销毁”按钮的Clicked事件脚本为;
stringID
longi
ID=trim(sle_ID.text)
delete
from"CertificateInfo"
where"Cert_id"=:
ID;
ifnotsle_ID.text=""then
dw_ID.retrieve(ID)
else
messagebox("错误","请输入借书证ID")
endif
在lose窗口的Open事件中,再增加数据窗口dw_cert_id