1、商丘职业技术学院毕业论文格式 2 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 2 个人收集整理 勿做商业用途 华文行楷,小初 单倍
2、行距,段前0磅,段后12磅 商丘职业技术学院 毕业论文(设计) 楷体,小一 单倍行距,段前22磅,段后6磅 题目:×××××××××× 楷体,二号 单倍行距 字体:楷体,小二号 行距:单倍行距 字体:楷体,小二号 行距:固定值45磅 姓 名: 系 别: 专 业: 学 号: 指导教师: XXXX年 XX月XX日 目
3、 录 引言 1 1 研究现状和设计目标 1 1。1 课题现状 1 1。2 需求分析 1 在现实生活中 1 1。3 数据流图 1 1.3。1逻辑模型和业务流程 1 1.3。2 系统模型和数据流图 1 1.3。3 功能要求 2 2 应用系统开发工具 2 2.1 PB特点 2 2.2 PB与数据库的连接 2 2.3 PB开发过程及步骤 2 3 数据库结构的设计 2 3.1 数据字典 2 3。2数据结构设计 2 3。2。1逻辑结构 2 3。2.2 物理结构 3 3。3 功能结构设计 3 参考文献 5
4、 罗马数字 基于PB的图书馆管理系统设计与分析 黑体,二号 单倍行距 摘 要 本文主要介绍了系统的开发背景,以及功能实现的主要技术,系统设计的设计思想,开发过程和解决方案.此系统是采用PowerBuilder9.0技术中本地数据库来设计的数据库管理系统,并利用ODBC接口来实现软件和本地数据库的连接。根据图书馆管理人员和读者的需要设计了登录界面,查询窗口,图书借还界面,图书出入库管理窗口。 宋体,三号,加粗 单倍行距 宋体,三号,加粗 单倍行距 关键词 Powerbuider9。0;数据库管理系统;ODBC 罗马数字
5、 I 与一级标题相同 引言 随着计算机科学与技术的发展,人们通过计算机认识与获取信息也更加快捷方便了。尤其是在图书管理领域中计算机的应用更为突出,计算机逐渐成为大众化的工具,传统的图书管理方式已经不能满足读者的需要,图书种类及数量日益增多也要求计算机对图书进行管理,可以更方便简单地管理图书,从而可以大大提高管理人员的工作效率,并能让读者省去排队等待的时间。 正文宋体小四号 行距:固定值20磅 图书管理系统是典型的信息管理系统,主要包括建立维护后台数据库和开发前端应用两大块。通过建立数据一致结构完整数据安全的后台数据库和前端应用程序.针对图书管理系统普
6、遍性和特殊性提出了一整套科学全面的管理方法,使用户从繁杂的手工记录工作程序解脱出来。通过自学PB设计了这个图书馆信息管理系统,PB是一种数据库应用程序开发软件,因此利用数据库管理系统创建数据库后台是一切程序设计工作的基础.此系统是针对计算机管理图书的需求而设计的,可以完成图书借还,图书查询,图书管理,会员管理,系统修改与维护等功能. 1 研究现状和设计目标 一级标题宋体三号,加粗 单倍行距 二级标题宋体四号,加粗 单倍行距 1。1 课题现状 图书馆 标题号和内容之间加一空格以下要求相同,二级标题首行不缩进 1.2 需求分析 在现实生活中 1.3 数据流图 1。3.1
7、 逻辑模型和业务流程 三级标题和正文相同,首行不缩进 1.3.2 系统模型和数据流图 由基本系统模型进行逐步细化,得到描绘图书管理信息系统主要功能的数据流图. 阿拉伯数字 2 应用系统开发工具 2。1 PB特点 PB具有独立性,事件驱动的工作方式,面向对象,跨平台性,编程语言PowerScript,数据窗口对象等特点。 2。2 PB与数据库的连接 PB提供了两种数据连接方式,一种是通过ODBC标准接口的方式,一种是通过专用的接口和后台的数据库连接。 2。3 PB开发过程及步骤 (1)创建数据库 (2)创建工作空间 (3)创建窗口
8、 (4)创建数据窗口 (5)设计菜单 (6)编写脚本代码 (7)调试应用程序 (8)发布应用程序 3 数据库结构的设计 3。1 数据字典 3.2 数据结构设计 3。2.1 逻辑结构 根据需求分析,本系统可以设计成5个表: 3。2.2 物理结构 根据逻辑结构,PB本地数据库来创建数据表 3.3 功能结构设计 经过长期观察各类图书馆的现状,再反复研究,得到图书馆管理系统功能如下: (1)操作员登录系统,对系统进行初始化设置。 (2)根据每日对读者的借还情况,图书的出入库情况录入到图书馆管理系统中。 (3)有条件、多条件查询各种信息。 (4)读
9、者信息的制定、输入、修改、查询。 (5)图书信息的制定、输入、修改、查询。 与一级标题相同,宋体三号,加粗单倍行距 (6)图书制作成报表后可以进行打印。 结束语 通过自学PB进行图书馆信息管理系统的设计和分析,其功能基本符合用户需求,能够完成对每一位会员和每一本图书信息的查询,并提供部分系统维护功能,使用户方便地进行数据录入、数据查询和数据删除,对于数据的一致性的问题也通过程序进行了有效的解决. 数据库系统设计,是一个复杂系统的过程,需要花费大量的时间和精力来调查图书馆信息管理系统的现状。并且即便是在数据库已经设计完毕的情况下,由于用户的需求发生变化,提出新的要求,也需要对数据库进
10、行重新设计,但是由于毕业设计时间较短,所以该系统还有许多不尽如人意的地方,比如未做联机帮助文档,用户界面不够美观,出错处理不够完善等多方面问题,这些都有待进一步改善,在未来也将做出品种更多质量更好的数据库软件。 答谢辞 与一级标题相同 …… 参考文献 宋体三号 [1] 李国喜,龚京忠,吴宝中。 PB8.0应用开发技术[M]。 北京:人民邮电出版社,2002. [2] 张遂芹. PB9.0系统工程开发实例[M]. 北京:中国水利水电出版社,2005. [3] 陈华明,郑华。 PowerBuilder应用技巧与常见问题[M]。 北京:中国水利水电出版社,2003. [4] 萨师宣
11、王珊. 数据库系统概论[M]。 北京: 高等教育出版社,2002. [5] 田 捷。 数字图书馆技术与应用[讲稿].北京: 科学出版社, 2002. [6] Object Management Group CORBA: Common Object Request Broker Architecture and Specification Revision 2 [M].2002。 [7] 梁震戈,王文君,杨国福.基于Internet 的高校图书馆集成化信息检索系统[J]。现代情报,2005. [8] 王善平.万维网资源整合工具——Open URL [J].上海交通大学学报,2003(增
12、刊)。 [9] 中国IT认证实验室学习下载频道.http://PPdownload。[DB/OL]。 [10] 王文君, 杨国福.基于网络技术的高校图书馆信息管理系统的研究[J]。现代情报,2006。 [11] Architectural Overview [EB]。http://diligentproject。org/content/ view/ 71/ 99/ 宋体五号 附 录 4.1 借书还书界面代码如下 (1) 借书代码如下: int m,n,i,jls string hybh,jb,tsbh //显示特定会员和图书的借阅记录 dw_1。settrans
13、object(sqlca) dw_1。setfilter(”会员编号=’”+trim(sle_1.text)+"'”) dw_1。retrieve() dw_2。settransobject(sqlca) dw_2。setfilter(”会员编号=’”+trim(sle_1.text)+"’ and 图书编号=’"+trim(sle_2.text)+”’”) dw_2.retrieve() dw_3.settransobject(sqlca) dw_3。setfilter(”图书编号=’”+trim(sle_2.text)+"’" ) dw_3.retrieve() dw_1
14、insertrow(i+1) dw_1。scrolltorow(i+1) //根据输入会员号判断会员级别 hybh=trim(sle_1。text) delete 图书借还表 where 会员编号=:hybh and 还书日期 is not null;//删除还书记录 select 级别 into :jb from 级别表 where 会员编号=:hybh; select count(*) into :jls from 图书借还表 where 会员编号=:hybh and 还书日期 is null; if jb="普通会员" then rb_1.checked = true
15、 dw_1.object。级别[i+1]="普通会员" if jls >=3 then messagebox(”警告!","该读者已借满图书!”) return //结束循环 end if else rb_2.checked = true dw_1。object。级别[i+1]=”高级会员” if jls 〉=5 then messagebox("警告!",”该读者已借满图书!”) return //结束循环 end if end if //得到记录的总行书 //得到借书记录总行数和图书当前行号 if dw_1.retr
16、ieve()=1 and dw_3。retrieve()=1 then i=dw_1。getrow() m=dw_2。rowcount() n=dw_3.getrow() if dw_3.object。库存[n]>0 and dw_1。object。锁定[i]=”否” then //插入借书记录 dw_2.insertrow(m+1) dw_2。scrolltorow(m+1) dw_2。object.会员编号[m+1]=sle_1。text dw_2。object。图书编号[m+1]=sle_2.text d
17、w_2。object。借书日期[m+1]=date(string(today())) dw_2.object。备注[m+1]= ”未归还" //库存减1 dw_3.object.库存[n]=dw_3。object。库存[n]-1 //更新数据库 if dw_2.update()=1 and dw_3。update()=1 then commit; messagebox(”成功!”,"更新数据库成功!") else rollback;
18、 messagebox("失败!","更新数据库失败!") end if else //提示用户不能借书的原因 messagebox("错误!”,"库存不足或您的卡号被锁定,会员或图书不存在,无法借阅!”,exclamation!,ok!,2) end if end if (2)还书代码如下: //显示特定会员和图书的借阅记录 dw_1.settransobject(sqlca) dw_1。setfilter(”会员编号='"+trim(sle_1。text)+"'") dw_1.retrieve() dw_2.s
19、ettransobject(sqlca) dw_2。setfilter("会员编号='”+trim(sle_1。text)+”’and 图书编号='"+trim(sle_2.text)+"’ and 备注='未归还’") dw_2。retrieve() dw_3。settransobject(sqlca) dw_3。setfilter(”图书编号='”+trim(sle_2.text)+”'" ) dw_3.retrieve() //判断哪一行为还书记录 int n n=dw_2。rowcount() if dw_2。retrieve()=1 or n〉1 then
20、 //找到还书记录后修改记录 dw_2。object.还书日期[n]=date(string(today())) dw_2。object。备注[n]= "已归还" //将会员还的书库存加1 int m m=dw_3。getrow() dw_3。object。库存[m]=dw_3。object.库存[m]+1 //判断会员是所借图书是否超期超期 string hybh,jb sle_3.text=string(daysafter(date(dw_2.object。借书日期[n]),date(dw_2.object.还书日期[n]))) hybh=trim(sle_
21、1。text) select 级别 into :jb from 级别表 where 会员编号=:hybh; if jb=”普通会员” then rb_1。checked = true if int(daysafter(date(dw_2.object。借书日期[n]),date(dw_2.object。还书日期[n])))>30 then sle_4.text=string(((daysafter(date(dw_2.object。借书日期[n]),date(dw_2.object。还书日期[n]))) —30)*0.1) int q q=dw_1。getrow()
22、 dw_1。object.锁定[q]="是” messagebox(”超期!",”卡号被锁定!”) dw_2。object.备注[n]= "已归还,超期" end if else rb_2.checked = true if int(daysafter(date(dw_2.object.借书日期[n]),date(dw_2。object.还书日期[n])))>60 then sle_4.text=string(((daysafter(date(dw_2.object。借书日期[n]),date(dw_2。object.还书日期[n]))) —60)*0.05)
23、 int w w=dw_1.getrow() dw_1.object。锁定[q]=”是” messagebox(”超期!”,"卡号被锁定!") dw_2.object.备注[n]= "已归还,超期” end if end if //更新数据库 if dw_1。update()=1 and dw_2。update()=1 and dw_3。update()=1 then commit; messagebox("成功!",”更新数据库成功!") else rollback; messagebox("失败!”,"更新数据库失败!”) end i
24、f else messagebox(”错误!",”没有借书记录!”) end if 4。2 查询窗口主要代码如下: //精确查询模式程序 choose case ddlb_1.text case "会员编号" dw_1。setfilter(”会员编号='”+sle_1.text+”'") case ”姓名” dw_1。setfilter("姓名='"+sle_1.text+"'”) case "家庭住址" dw_1。setfilter("家庭住址=’"+sle_1.text+"'")
25、 //模糊查询模式程序 choose case ddlb_1.text case ”会员编号” dw_1。setfilter("会员编号 like"+”’%"+sle_1.text+”%’") case ”姓名" dw_1.setfilter(”姓名 like"+"’%”+sle_1.text+”%'") case "家庭住址" dw_1。setfilter(”家庭住址 like”+”’%"+sle_1.text+”%’") end choose end choose
26、 4.3 组合查询界面代码如下: string zh zh="" if trim(sle_1.text)〈〉"” then zh=zh+” and "+”图书编号=”+"’"+trim(sle_1。text)+”'” end if if trim(sle_2。text)〈〉”” then zh=zh+” and ”+"书名="+”'"+trim(sle_2。text)+”'" end if if trim(sle_3。text)〈>”” then zh=zh+" and "+”作者="+"’"+trim(sle_3.text)+”’" end if if tri
27、m(sle_4.text)〈〉”” then zh=zh+” and ”+"出版社="+”’”+trim(sle_4.text)+”’” end if if left(zh,4)=” and” then zh=mid(zh,6) end if dw_1。setfilter(zh) dw_1。filter() 4。4登录界面代码如下: string use name, pass_word SELECT 操作员表。用户名, 操作员表。密码 INTO :usename, :pass_word
28、FROM 操作员表 WHERE 操作员表。用户名 = :sle_1。text ; if sle_1。text=”" or sle_2。text=”” then messagebox(”错误!”,”用户名或密码不能为空!”) else if usename=sle_1。text and pass_word=sle_2.text then open(index) close(parent) else messagebox(”错误!”,”用户名或密码错误,请重新输入!”) end if end if 9






