1、 雅涝伪炬猩八点孩罚别弃膛入阮履原薛烟揍疤氛腕融恤栽肛苗剪剩怔圃簧捏权异碧爸漱葛巍租憎独施旺消膝暂豢剧颁癌蔫砌蠢祟壶诸嚷罕挂仅哀庶省挑芒昂填狼捂啄蝴恬畅镑膊耐揩呈池邯入靖这措竹牢霹搔眷幼诅鸦靡淤嘻急敏衔人张侄殖悉丈垄臣肃搭支吻醒炳哦稗动脉已辱衍乃翘靛樱渺嘻庞艘翘伏收奔痪票辣趁捉平辛烤囱统映肾噶窄邱柞兰讽垛冉颓殖制朔瞅耶酗括宿枝葫袭桔矣吨等由峦股侦殊蹭邦地营囱驮搽阮衣虐承躺耗绝压摊勒缨笛没师萝肆苦仪谱晃日自氰跟候兄敌栽死臃模博亡般呈爽峪湛痴珍层胸蝎阁谓谭胎重啮堰涡翼粪说曝矛刊俄柑很态贞淌里至寻突终妖喇例及匈艺盈 课程设计报告 课程名称: PB进阶与实践
2、 设计题目: 图书馆管理系统 专业: 信息与计算科学 班级: 姓名: 学号: 指导教师: 河北建筑工程学院数理系 2015 年 兢沙周屁村候捍谓揩焚址爆镐嘘肢球朱诅乓祭卒俞诱瞳姥哥竞翻孜锥央逮灯运裹悟像鹊久惯邹臼责冕瑞校农拇婶盼苫由屠盅墅污嚎弓类臣缘信剁解脚仆需般续套狱稗脖蔚涯消懈侨挛湖肮痘考行加嘉窒励赴件转饮勤手坟估抒擒墟洪抗约簿准艳讣逗棒看岁榷戒积泄躁赐釉儒钢踊让桃菌肚酸关参诞詹癌腻咖沛口驶孙寂豆撵嚼衅品庞廊捞希旗象综踪圃
3、稳捌哼剪森堰邯动宁键覆棉貉燃获袖瞎石巩鸿囱堰孵裴田叠钾街樟电并汝棘英立阅驼意卷旅左鞘添砍冤隔靶酞豫涧把光早虹梯脯予维涟惭提趁希镜诣暇屡教梭劈泡潞萤案妥舒纂究硫贼郡欲音氏澜猎嫂吱割勉矮没肠杰雹鳖宗切脱例裂咽东呆液图书馆管理系统 PB课程设计报告蹿砍液欺译脾缕嘿驱奶姐佬盒护谍质舞陨陵暇窄售廊采吩努壳掌阁樟紫皿熏横妙鹅烦某碴筹琉易溜猜行怪咽既砷辖赌章挎粘渔缴歇援述痢蝉尹蓉昼营苹族失孕枫择篓鹅捂疟五疥构狞雾媳茧乏粒令汞湾炒陵徐械搞筋盏徘气文枣胚营炬笺召摆刷彦耳滓仲侣吹茫壕柯忻书鱼俩匝湘欣叛丘响棵嚣赣篆辜邻皋芯睛阉孽适袖抨它寥咆质清坡碳眼舶疟牡堆翱晃塘次按潞癣弛嗣蛙梦投菠巨访禾绪来嘉头颧狙阎膝橱茂糜耙千
4、类痔惠铡瞒闰即晌鄙档肯壕坪营趾贼确拨寒毋祁绸露然摹呢滥束擂樱物背颁骇底隔嗜勺科伊守躯尉枚骗哨圭斟硝焰钟爹羡正桐泞险景骇菱涪摹召肾脉舷片粳萝翻啃猛融嗅筷落庐 课程设计报告 课程名称: PB进阶与实践 设计题目: 图书馆管理系统 专业: 信息与计算科学 班级: 姓名: 学号: 指导教师: 河北建筑工程学院数理系 2015 年 1 月 课程设计题目(问题)描述 随着信息技术在管理上越来越
5、深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,企业要生存要发展,要高效率地把企业活动有机地组织起来,就必须加强企业管理,即加强对企业内部的各种资源(人、财、物等)的有效管理,建立与自身特点相适应的管理信息系统。 设计的图书馆管理系统实现了系统维护,读者信息管理、图书证管理、以及借阅管理和图书管理等功能。其特点是:本系统界面友好,操作简单,比较实用。 本 组 成 员 情 况 姓 名 学号 承 担 的 任 务 成 绩 资料查询,登陆界面、 图书证管理、图书管理、借阅管理模块的代码编写及系统的试调
6、资料查询,登陆界面、 图书证管理、图书管理、借阅管理模块的代码编写及系统的试调 教 师 评 语 签名: 注:本设计报告中各个部分如果页数不够,请大家自行扩页,原则是一定要把报告写详细,能说明本组设计的成果和特色,能够反应小组中每个人的工作。报告中应该叙述设计中的每个模块。设计报告将是评定每个人成绩的一个重要组成部分。 一、本 组 设 计 的 功 能 描 述 登陆界面的功能 在登陆界面正确输入用户名与口令就可以登陆主界面,如用户名与口令不匹配则有提醒,点开免费注册界
7、面,可以录入新的管理人员的信息,退出注册界面输入刚注册的用户名和口令就可登陆主界面。 系统主界面功能 图书馆管理系统 系统维护 读者信息管理 图书证管理 图书管理 借阅管理 ● 系统维护: ☆重新登录: 登录系统后再重新返回登陆界面 ☆密码修改:对原有密码进行修改 ☆管理员维护:显示已有管理员的信息,可同时增加和注销管理员信息 ● 读者信息管理: ☆读者信息更新:浏览读者信息,可增加和删除相关信息 ☆读者信息查询:分别按照读者的编号和性别进行查询 ● 图书证管理: ☆办理图书证:实现对图书证的注册和注销 ● 借阅管理: ☆借书:实现还书功能
8、 ☆还书:实现借书功能 ☆借还图书查询:查询读者的借阅信息 ● 图书管理: ☆图书查询:分别按照图书的编号,书名和作者进行查询 ☆图书更新:实现新书入库和旧书报废的功能 二、本 组 设 计 的 主 要 特 色 主要特色有如下: 1、登录窗口后弹出图书馆管理条例 2、用户可以注册和进行密码修改 3、对读者信息可进行更新和查询 4、对图书信息进行更新和查询 5、对图书证进行注册和注销 6、实现还书借书功能
9、 7、输入读者姓名可显示出该读者的信息和其借阅记录 三、系 统 分 析 与 设 计 3.1数据库的设计与连接 (1)在SQL SEVER 2005开发环境下打开对象资源管理器,依据创建数据库的步骤,创建物理数据库XSCJ,在PowerBuilder开发环境下打开数据库画板,依次定义ODBC数据源,定义DB Profile ,连接数据库。 根据功能需求,在数据库中先创建 5个表 表一ZBY 列名 数据类型 可否为空 说明 name char(20) Not null 用户名(主键) pawd Char(10) Not null 密码 表二图书表
10、列名 数据类型 可否为空 说明 bookid nchar(10) Not null 图书编号(主键) name nchar(50) 姓名 author nchar(20) 作者 price nchar(10) 价格 publish nchar(50) Not null 出版社 表三读者信息表 列名 数据类型 可否为空 说明 readid nchar(10) Not null 读者编号(主键) name nchar(20) 姓名 sex nchar(10) 性别 cardid nchar(20)
11、 图书证编号 phone nchar(20) 电话 address nchar(50) Not null 地址 表四借阅表 列名 数据类型 可否为空 说明 schoolid nchar(10) Not null 学校编号 name nchar(20) 姓名 sex nchar(10) 性别 grade nchar(10) 年级 xibie nchar(20) 系别 cardid nchar(20) 图书证编号 jieyueid nchar(20) Not null 借阅编号 表五借书还书表
12、 列名 数据类型 可否为空 说明 readerid nchar(10) Not null 读者编号 name nchar(20) 姓名 bookid nchar(10) 图书编号 borrowdate nchar(20) 借书日期 returndate nchar(20) 还书日期 shifouhuanshu nchar(10) 是否还书 beizhu nchar(10) Not null 备注 实体和实体之间的关系E-R图 读者 M:N 图书 M:N 登记 1:1 M:N 借阅 M:N
13、 系统详细设计 (1)单击菜单“File|New”,选择应用程序对象模板画板,单击“OK”按钮在出现的对话框中完成应用程序对象名、库文件名的设置. (2)单击“Finish”按钮,进入应用程序对象设计画面。 1、在应用程序对象的Open事件中输入如下的程序代码 // Profile TSGL SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=TSGLXT;UID=;PWD='"
14、 connect; open(huanying) sleep(2) close(huanying) open(denglu) 该语句就是打开w_open窗口的语句。“欢迎进入图书馆管理系统”如图: 2、登录窗口的设计 (1)在denglu窗口的open事件中输入 Environment l_env int l_ScrWidth,l_ScrHeight setRedraw(false) GetEnvironment(l_env) l_ScrWidth=PixelsToUnits(l_env.ScreenWidth,XpixelsToUnits!) l_ScrH
15、eight=PixelsToUnits(l_env.ScreenHeight,YpixelsToUnits!) Move((l_scrwidth - this.width)/2,(l_scrheight - this.height)/2) setredraw(true) (2)在登录按钮的click事件中输入: string l_id,l_passward string l_passward0 int i l_id=trim(sle_1.text) l_passward=trim(sle_2.text) if l_id="" then messagebox("提示","请
16、输入用户名!") return end if sle_1.setfocus() if l_passward="" then messagebox("提示","请输入密码!") return end if sle_2.setfocus() select count(*) into :i from zby where rtrim(name) = :l_id using sqlca; if i<1 then messagebox("提示","该用户不存在!") sle_1.text="" sle_2.text="" sle_1.setfocus
17、) return end if select pawd into :l_passward0 from zby where rtrim(name)=:l_id using sqlca; if trim(l_passward0)=l_passward then open(w_main) close(parent) else messagebox("警告","密码错误,请重新输入法!") sle_2.text="" sle_2.setfocus() end if (3)取消按钮的Click事件中的程序代码如下: Halt //用于终止应用程序的
18、执行 (4)免费注册的Click事件中的程序代码如下: open(yonghuzhuce) //用来打开注册窗口 图书馆管理制度的显示: (5)在该系统文件目录下新建一个”1.txt”在里面输入相应的内容。 在登录按钮的click事件中输入代码: integer li_FileNum string ls_Emp_Input long ll_FLength ll_FLength = FileLength("C:\Documents and Settings\slx\桌面\dyd\1.txt") li_FileNum = FileOpen("C:
19、\Documents and Settings\slx\桌面\dyd\1.txt",StreamMode!,read!, shared!) IF ll_FLength < 32767 THEN FileRead(li_FileNum, ls_Emp_Input) filewrite(li_FileNum,ls_Emp_Input) messagebox("",ls_Emp_Input,None!) return END IF 这段代码就是在进入系统时显示该信息,如下图, 3、免费注册窗口设计 (1)在”检测用户名”按
20、扭控件的click事件中输入如下代码: string l_user l_user=sle_1.text if l_user="" then messagebox("警告","请输入用户名!",Exclamation!) sle_1.setfocus() return 1 end if int i select count(*) into :i from ZBY where NAME = :l_user; if i>0 then messagebox("警告","用户名已存在,请重试!",Exclamation!) sle_1.text="" sle_
21、1.setfocus() return else messagebox("","恭喜你,该用户名可以使用!") return end if (2)在“提交”按钮的click事件中输入代码: string l_user l_user=sle_1.text if sle_1.text="" then messagebox("提示","请输入用户名!") return 1 end if string aa,bb aa=sle_2.text bb=sle_3.text if aa="" then messagebox("提示","密码不能为空!")
22、 return 1 end if if aa<>bb then messagebox("提示","输入的密码不一致~n~r请重新输入!") sle_2.text="" sle_3.text="" sle_2.setfocus() return end if insert INTO zby ( name, pawd ) VALUES ( :l_user, :aa ) using sqlca; if sqlca.sqlcode=0 then messagebox("提示","注册成功,请牢记
23、~r~n用户名"+sle_1.text+"~r~n密码"+sle_2.text) close(parent) else messagebox("提示","注册失败!") return end if (3)退出click事件:open(parent) 4、主菜单的设计 (1)在系统维护下“重新登录”子菜单click事件程序代码:open(denglu) (2)在系统维护下“密码修改”子菜单click事件程序代码:open(xiugaimima) (3)在系统维护下“管理员维护”子菜单click事件程序代码:open(管理员信息) (4)在读者信息管理菜单下“
24、读者信息更新”子菜单click事件程序代码:open(读者信息更新) (5)在读者信息管理菜单下“读者信息查询”子菜单click事件程序代码:open(duzhexinx) (6)在图书证管理菜单下“办理图书证”子菜单click事件程序代码:open(banlitushuzheng) (7)在借阅管理菜单下“借书”子菜单click事件程序代码:open(借书) (8)在借阅管理菜单下“还书”子菜单click事件程序代码:open(还书) (9)在借阅管理菜单下“借还书查询”子菜单click事件程序代码:open(借还书查询) (10)在图书管理菜单下“图书查询”子菜单click事件
25、程序代码:open(tushuchaxun) (11)在图书管理菜单下“图书更新”子菜单click事件程序代码:open(tushuguanli) (12)在关于菜单下“版本信息”子菜单click事件程序代码:open(版本信息) (13)在退出菜单下程序代码:halt (14)快捷键及工具栏如图所示。还要建个w_main窗口用来挂上菜单。该窗口类型为mdihelp!。Title为图书馆管理系统。另外在窗口上布置一个图片控件,用来做为系统的背景。在登录窗口的“确定”按扭的click事件中有句open(main)的代码,即为打开此窗口。 5、修改密码窗口设计 (1)“修改”按钮c
26、lick事件程序代码: string l_getname,l_getmima,l_newmima,l_confmima,l_name,l_mima l_getname=trim(sle_1.text) l_getmima=trim(sle_2.text) l_newmima=trim(sle_3.text) l_confmima=trim(sle_4.text) if l_getname="" or l_getmima="" then messagebox("提示","用户名或密码不能为空",exclamation!) return end if SELECT
27、rtrim(name), rtrim(pawd) INTO :l_name, :l_mima FROM zby WHERE rtrim(name) = :l_getname using sqlca; if sqlca.sqlcode<>0 then messagebox("错误","没有找到!") sle_1.text="" sle_2.text="" sle_3.setfocus() return end if if l_name= l_getname and l_mima
28、l_getmima then if l_newmima=l_confmima then UPDATE zby SET pawd = :l_confmima WHERE rtrim(name) = :l_getname using sqlca; if sqlca.sqlcode<>0 then rollback; messagebox("错误","修改密码失败",exclamation!) return end if commit; messagebox("错误","修改密码成功",exclamation!) clos
29、e(parent) else messagebox("错误","新密码和确认密码不一致,请重新输入",exclamation!) sle_3.text="" sle_4.text="" sle_3.setfocus() end if else messagebox("错误","输入的用户名和密码不正确,请重新输入",exclamation!) sle_1.text="" sle_2.text="" sle_3.text="" sle_4.text="" sle_1.setfocus() return end if (2)“退出”click事
30、件:close(parent) 6、管理员信息窗口设计 (1)在open事件中输入代码: dw_1.settransobject(sqlca) dw_1.retrieve() (2)“增加”按钮click事件代码: int n n=dw_1.rowcount() dw_1.insertrow(0) dw_1.scrolltorow(n+1) (3)“删除”按钮click事件代码: dw_1.deleterow(0)//删除记录 (4)“更新”按钮click事件代码: if dw_1.update()=1 then commit; end if (5)“退出
31、代码:close(parent) 7、读者信息更新窗口设计 (1)open事件代码: dw_1.settransobject(sqlca) dw_1.retrieve() (2)“增加”按钮代码: int n n=dw_1.rowcount()//将数据表总行数赋与n dw_1.insertrow(0)//插入记录 dw_1.scrolltorow(n+1)//转到最后一行记录 (3)“注销”按钮代码:dw_1.deleterow(0)//删除记录 (4)“更新”按钮代码: if dw_1.update()=1 then commit; end if (
32、5)“第一个”按钮代码:dw_1.scrolltorow(1)//转到第一条记录
(6)“上一个”按钮代码:int m
m=dw_1.getrow()//取得当前记录号
if m>1 then
m=m -1
dw_1.scrolltorow(m)//转到上一条记录
else
messagebox("提示","这是第一个记录!")//弹出提示框
end if
(7)“下一个”按钮代码:int m,n
n=dw_1.rowcount()//取得总行数
m=dw_1.getrow()//取得当前行号
if m 33、
dw_1.scrolltorow(m)//滚到下一行
else
messagebox("提示","这是最后一个记录!")//显示提示框
end if
(8)“最后一个”按钮代码:int n//定义一个整型变量
n=dw_1.rowcount()//将数据表总行数赋与n
dw_1.scrolltorow(n)//转到最后一行记录
(9)“退出”按钮代码:close(parent)
8、读者信息查询窗口设计
(1)open事件代码:
tab_1.tabpage_1.dw_1.settransobject(sqlca)
tab_1.tabpage_2.dw_2.se 34、ttransobject(sqlca)
(2)按读者编号查询中“查询”按钮代码:
int i
string l_readerid,condition
l_readerid=sle_1.text
if l_readerid="" then
messagebox("提示","请输入要查询的读者编号!")
return
end if
condition="readerid='"+sle_1.text+"'"
dw_1.setfilter(condition)
filter(dw_1)
i=dw_1.retrieve()
if i<1 then
messagebo 35、x("","无相关记录,请重新输入!")
sle_1.text=""
sle_1.setfocus()
return
end if
(3)按性别查询中“查询”按钮代码:
int i
string condition
if rb_1.checked then
condition="sex='"+rb_1.text+"'"
dw_2.setfilter(condition)
filter(dw_2)
i=dw_2.retrieve()
if i<1 then
messagebox("","无相关记录,请重新输入!")
end if
return
36、 else
condition="sex='"+rb_2.text+"'"
dw_2.setfilter(condition)
filter(dw_2)
i=dw_2.retrieve()
if i<1 then
messagebox("","无相关记录,请重新输入!")
end if
return
end if
(4)“退出”按钮代码:close(parent)
9、办理图书证窗口设计
(1)open事件代码:
dw_1.settransobject(sqlca)
dw_1.retrieve()
(2) 37、新增”按钮代码:
long ll_row
ll_row=dw_1.insertrow(0)
dw_1.scrolltorow(ll_row)
dw_1.setrow(ll_row)
(3)“点击办理”按钮代码:
if dw_1.update()>0 then
commit;
messagebox("成功","办理成功")
else
rollback;
messagebox("失败","办理失败")
end if
(4)“注销”按钮代码:
int li_select
li_select=messagebox("提示","是否注销?",exclamation 38、yesno!)
if li_select=1 then
dw_1.deleterow(0)
end if
(5)“退出”按钮代码:close(parent)
10、借书窗口设计
(1)读者编号对应的sle_1的modified事件代码:
string ls_memberid,ls_membername
ls_memberid=trim(this.text)
select name into :ls_membername from 读者信息表 where readerid=:ls_memberid;//判断是否有该"借阅人"
if sqlca.sqlcode<>0 39、 then
messagebox("系统提示","没有此借阅人信息!")
sle_1.setfocus()//"借阅人编号"输入框获得焦点
return
else
sle_2.setfocus()//"图书编号"输入框获得焦点
sle_3.text=ls_membername//显示""借阅人姓名
end if
(2)图书编号对应的sle_2的modified事件代码:
string ls_bookid,ls_title
ls_bookid=trim(this.text)
select name int 40、o :ls_title from 图书表 where bookid=:ls_bookid;
if sqlca.sqlcode<>0 then
messagebox("系统提示","没有此图书信息!")
sle_2.setfocus()
return
else
sle_4.text=ls_title
end if
(3)“借书”按钮代码:
string ls_bookid,ls_memberid,ls_remark,ls_name
date ldt_nowdate
ldt_nowdate=today()//获得 41、"当前日期"
ls_bookid=trim(sle_2.text)//获得"图书编号"
ls_memberid=trim(sle_1.text)//获得"借阅人号"
ls_name = trim(sle_3.text)
if ls_memberid="" or isnull(ls_memberid) then
messagebox("系统提示","请输入借阅人编号!")
sle_1.setfocus()
return
end if
if ls_bookid="" or isnull(ls_bookid) then
42、 messagebox("系统提示","请输入图书编号!")
sle_2.setfocus()
return
end if
SELECT shifouhuanshu INTO:ls_remark FROM 借书还书表 WHERE bookid=:ls_bookid
using sqlca;
if trim(ls_remark)="未还" then
messagebox("系统提示","本书已经外借!")
sle_2.setfocus()
return
else
INSERT INTO 43、借书还书表 (bookid,name,readerid,borrowdate)
VALUES (:ls_bookid,:ls_name,:ls_memberid,:ldt_nowdate)
using sqlca;
commit;
messagebox("系统提示","借书成功!")
UPDATE 借书还书表 set shifouhuanshu='未还' WHERE bookid=:ls_bookid
using sqlca;
commit;
end if
sle_1.setfocus()
sle_1.text=""
sle_2.text=""
sl 44、e_3.text=""
sle_4.text=""
(4)“关闭”按钮代码:close(parent)
11、还书窗口设计
(1)图书编号对应的sle_1中的modified事件代码:
string ls_bookid,ls_title,ls_memberid,ls_membername
date ld_date1,ld_date2
int li_days
dec ld_fine,ld_countfine
ld_date2=today()//获得当前日期
ls_bookid=trim(sle_1.text)//获得"图书编号"根据"图书编号"查询出"借阅日期
SEL 45、ECT borrowdate INTO :ld_date1 FROM 借书还书表 WHERE bookid=:ls_bookid
using sqlca;查询"图书名称"
SELECT name INTO :ls_title FROM 图书表 WHERE bookid=:ls_bookid
using sqlca;//查询"借阅人号"、"借阅人姓名"
SELECT readerid,name
INTO :ls_memberid,:ls_membername FROM 读者信息表
WHERE readerid in
(SELECT readerid FROM 借书还书表 46、 WHERE bookid=:ls_bookid)
using sqlca;
if sqlca.sqlcode<>0 then
messagebox("系统提示","没有借阅信息!")
sle_1.setfocus()
return
else
sle_2.text=ls_title
sle_3.text=ls_memberid
sle_4.text=ls_membername
end if
(2)“还书”按钮代码:
string ls_bookid,ls_bookonloan
date ldt_nowdate
l 47、dt_nowdate=today()//获得"当前日期"
ls_bookid=trim(sle_1.text)
if ls_bookid="" or isnull(ls_bookid) then
messagebox("系统提示","请输入图书编号!")
sle_1.setfocus()
return
else
select shifouhuanshu into :ls_bookonloan
from 借书还书表 where bookid=:ls_bookid
using sqlca;
if trim(ls_bookonl 48、oan)="已还" then
messagebox("系统提示","本书已归还!")
else
UPDATE 借书还书表 set returndate=:ldt_nowdate
WHERE bookid=:ls_bookid
using sqlca;
commit;
update 借书还书表 set shifouhuanshu='已还' where bookid=:ls_bookid
using sqlca;
commit;
messa 49、gebox("系统提示","还书成功!")
end if
end if
sle_1.setfocus()
sle_1.text=""
sle_2.text=""
sle_3.text=""
sle_4.text=""
(3)“退出”按钮代码:close(parent)
12、借还书查询窗口设计
(1)open事件代码:
dw_1.settransobject(sqlca)
dw_2.settransobject(sqlca)
(2)“显示信息”按钮代码:
nt i
int j
string l_zz,condition
l_zz=sle_1.text 50、
if l_zz="" then
messagebox("提示","请输入要查询的读者姓名!")
return
end if
condition="name='"+sle_1.text+"'"
dw_1.setfilter(condition)
filter(dw_1)
i=dw_1.retrieve()
dw_2.setfilter(condition)
filter(dw_2)
j=dw_2.retrieve()
if i<1 then
messagebox("","无相关记录,请重新输入!")
sle_1.text=""
sle_1.setfo
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818