小型图书管理系统 毕业设计.doc_第1页
小型图书管理系统 毕业设计.doc_第2页
小型图书管理系统 毕业设计.doc_第3页
小型图书管理系统 毕业设计.doc_第4页
小型图书管理系统 毕业设计.doc_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前言为了提高图书管理的工作效率,及时有效地了解各种信息,特开发此“小型图书管理系统”。该系统本着简单、实用、方便的宗旨,为管理人员、读者提供快捷有效的软件平台,从而,提高图书管理工作效率,节省大量人力和时间,提高了图书馆的信息化程度。本系统具有易学、易用的特点,用户可以很快掌握其操作方法,方便、快捷完成各项工作,正确无误地进行各种信息的处理工作。本系统是由本人在杨成、郗亚辉老师的指导下开发完成的。为了这次毕业设计本人做了大量的准备和努力,但由于本人知识和能力有限,系统难免存在许多不完善的地方甚至漏洞,敬请各位老师不吝提出宝贵建议,本人将不胜感激! 一、系统分析1.1系统功能分析 系统开发的总体任务是实现各种信息的系统化、归范化。图书管理是图书馆管理工作的重要组成部分,为了提高图书管理工作的效率,利用计算机和数据库技术设计开发了图书管理系统是图书管理工作的迫切需要。本系统的主要功能如下:l 有关读者基本信息的输入,包括读者编号、读者类别、读者姓名、读者性别、工作单位、家庭住址、电话号码、电子邮件、办证日期、备注等。l 读者基本信息的查询、修改,包括读者编号、读者姓名、读者类别、读者性别、工作单位、家庭住址、电话号码、电子邮件、办证日期、备注等。l 图书信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社、出日期、书籍价格、书籍类别、登记日期、备注信息等。l 图书信息的查询、修改,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期、书籍价格、书籍类别、登记日期、备注信息等。l 借书信息的输入,包括借书信息编号、读者编号、读者姓名、书籍编号、书籍名称、借书日期、备注等。l 借书信息的查询、修改,包括借书信息编号、读者编号、读者姓名、书籍编号、书籍名称、借书日期、备注等。l 还书信息的输入、查询和修改,包括还书信息编号、读者编号、读者姓名、书籍编号、书籍名称等。l 还书信息的查询和修改,包括还书信息编号、读者编号、读者姓名、书籍编号、书籍名称等。二、系统设计2.1总体设计结构结构设计主要包括运行模式选择、操作系统选择、数据库管理系统选择、系统功能结构设计。选用单机模式,有一台奔腾以上的微型计算机,操作系统选择windows 98/2000,开发工具选择powerbuilder8.0,数据库管理系统(dbms)选择powerbuilder8.0自带sybase sql anywhere 7.0。2.2详细设计详细设计主要包括用户界面设计和数据库设计。 用户界面设计用户运行该系统时,首先出现一个登录窗口,提示输入用户名或编号、密码,输入正确进入系统主窗口,如图:(2-1) 图2-1主窗口的上部是菜单和工具栏,系统中的受所有功能通过选择菜单项或单击工具栏中的图标即可。通过选择各个菜单项或工具栏图标,分别进入各个具体界面,实现不同的操作功能。 数据库设计l 数据库需求分析 系统的数据流程图如下:读者数据基本信息录入读者信息登记 借阅信息借阅 书籍数据基本信息录入书籍信息登记 针对上述图书管理工作过程的内容和数据流程图分析,设计如下所述的数据项和数据结构。l 读者信息,包括的数据项有:读者编号、读者类别、读者姓名、读者性别、工作单位、家庭住址、电话号码、电子邮件、办证日期、备注等。l 图书信息,包括数据项有:书籍编号、书籍名称、书籍类别、作者姓名、出版社、出版日期、书籍价格、书籍类别、登记日期、备注信息等。l 借书信息,包括数据项有:借书信息编号、读者编号、读者姓名、书籍编号、书籍名称、借书日期、备注等。l 用户表信息,包括的数据项有:读者编号、读者姓名、权限。l 图书类别信息,包括的数据项有:类别编号、图书类别。l 数据库概念设计根据上面设计,规划出的实体有:读者信息实体、书籍信息实体、借阅信息实体、用户实体、读者信息实体。e-r图如图所示:读者信息实体读者信息登记读者信息登记读者姓名读者编号读者地址 。书籍信息实体书籍名称书籍编号出版社。借阅信息实体书籍名称借阅编号借阅日期。读者信息管理书籍信息管理借阅书籍借阅信息管理m(1) ( e-r图)l 数据库逻辑结构设计图书管理系统各个表设计如下:(图书信息表)(书籍类别表)(借阅信息表)(读者信息表)(用户表)(各个表的主键)三、系统实施在系统中主要实现对图书信息、读者信息、借阅信息以及用户表中数据的增、删、改、查询等功能。.建立应用对象设置sqlca的属性以及数据库的连接参数应用对象open事件脚本如下:/ profile guoshushengsqlca.dbms = odbcsqlca.autocommit = falsesqlca.dbparm = connectstring=dsn=guoshusheng;uid=dba;pwd=sqlconnect;/错误处理if sqlca.sqlcode 0 then messagebox (cannot connect to database, sqlca.sqlerrtext) returnend if/打开启动窗口open(w_start)idle(10)在事件中加入如下脚本:disconnect using sqlca;.2登录界面窗口对于该信统用户分为三类:系统管理员、数据管理员、普通用户。登录窗口w_login的主要是验证用身份并确定权限,如图所示:其登录按钮代码如下:if sle_1.text = then/pop a message boxmessagebox(payattention!,the user name cant be null)/sle_1 get the focussle_1.setfocus()elseif sle_2.text = then/pop a message boxmessagebox(payattention!,the password cant be null)/sle_2 get the focussle_2.setfocus()elseg_input_time =g_input_time+1g_user = sle_1.textg_pwd =sle_2.text/取出数据库用户口令表格中对应用户的口令select user_pwd ,purview into :correct_pswd,:g_right from user_info where user_id=:g_user or username=:g_user;/将数据库中保存的口令和用户输入的口令作比较if g_pwd=correct_pswd then/输入正确,打开主窗口open(w_main)close(w_login)else/不正确,在3次以内可重新输入,超过3次结束程序if g_input_time 3 thenmessagebox(警告,输入用户口令的次数太多!)close(w_login)elsemessagebox(警告,输入的用户口令有误,请重新输入)end ifend ifend ifclose(w_start) (w_login)3.3启动界面设计open事件代码如下:prog+hpb_1.position=progst_2.text=string(prog)+%if prog=100 thentimer(0)w_start.visible=falseopen(w_login)end ifw_start.屏幕保护界面 (w_screen)3.4 菜单设计菜单项代码如下:opensheet (w_login_re,w_main,6,layered!)opensheet (w_change_password,w_main,6,layered!)opensheet (w_user,w_main,6,layered!)close(w_main) opensheet (w_readers,w_main,6,layered!)opensheet (w_readers_grid,w_main,6,layered!)opensheet (w_readers_find,w_main,6,layered!)opensheet (w_books,w_main,6,layered!)opensheet (w_books_grid,w_main,6,layered!)opensheet (w_books_find,w_main,6,layered!)opensheet (w_borrow,w_main,6,layered!) opensheet (w_return,w_main,6,layered!)opensheet (w_borrow_find,w_main,6,layered!)opensheet (w_store,w_main,6,layered!)opensheet (w_kucun,w_main,6,layered!)w_main.arrangesheets(cascade!)w_main.arrangesheets(layer!)close(w_about)close(w_books)close(w_books_find)close(w_books_grid)close(w_borrow)close(w_borrow_find)close(w_change_password)close(w_kucun)close(w_login)close(w_login_re)close(w_readers)close(w_readers_find)close(w_readers_grid)close(w_return)close(w_user)opensheet (w_about,w_main,6,original!)重新登录界面如下:确定按钮代码如下:string correct_pswdif sle_1.text = then/pop a message boxmessagebox(payattention!,the user name cant be null)/sle_1 get the focussle_1.setfocus()elseif sle_2.text = then/pop a message boxmessagebox(payattention!,the password cant be null)/sle_2 get the focussle_2.setfocus()elseg_input_time =g_input_time+1g_user = sle_1.textg_pwd =sle_2.text/取出数据库用户口令表格中对应用户的口令select user_pwd ,purview into :correct_pswd,:g_right from user_info where user_id=:g_user or username=:g_user;/将数据库中保存的口令和用户输入的口令作比较if g_pwd=correct_pswd then/输入正确,打开主窗口open(w_main)/setredraw(false) close(w_login_re)else/不正确,在3次以内可重新输入,超过3次结束程序if g_input_time 3 thenmessagebox(警告,输入用户口令的次数太多!)close(w_login_re)elsemessagebox(警告,输入的用户口令有误,请重新输入)end ifend ifend ifif g_right1 then m_main.m_1.m_13.enabled=falseend if修改用户信息界面如下:确定按钮代码如下:/输入次数加1g_input_time =g_input_time+1/判断两次输入的新口令是否一致if sle_2.text sle_3.text thenif g_input_time 3 thenmessagebox(警告,输入的次数太多!)close(w_change_password)elsemessagebox(警告,两次输入的口令不一致,请重新输入)end ifelse/判断输入的原口令是否正确if sle_1.text g_pwd thenif g_input_time 3 thenmessagebox(警告,输入的次数太多!)close(w_change_password)elsemessagebox(警告,输入的原口令不正确,请重新输入)end ifelse/修改数据库中的该用户的口令update user_infoset user_pwd=:sle_2.text where user_id=:g_user or username=:g_user;messagebox(注意,你的口令已经修改,请牢记)/提交修改,关闭口令修改窗口 commit;close(w_change_password)end ifend ifopen事件代码如下:/将全局变量-输入用户名和口令的次数赋初值0g_input_time=0/定义变量environment l_envint l_scrwidth,l_scrheight/关闭窗口刷新setredraw(false)/取得屏幕的高度和宽度getenvironment(l_env)l_scrwidth=pixelstounits(l_env.screenwidth,xpixelstounits!)l_scrheight=pixelstounits(l_env.screenheight,ypixelstounits!)/移动窗口到屏幕中间move(l_scrwidth - this.width)/2,(l_scrheight - this.height)/2)/打开窗口刷新setredraw(true)用户管理界面如下:添加按钮代码如下:/insert a row in the end of dw_1g_rownumber=dw_1.insertrow(0)/dw_1 get the focusdw_1.setfocus()/到当前行dw_1.scrolltorow(g_rownumber) /the first column get the focusdw_1.setcolumn(1)删除按钮代码如下:/得到当前记录 g_rownumber=dw_1.getrow()/将当前记录中的员工号取出赋值给全局变量emp_nodeleterow(dw_1,g_rownumber)int a a=messagebox(提示,确实要删除吗?,question!, yesnocancel!, 3)if a=1 then cb_3.triggerevent( clicked!)else dw_1.retrieve()end if保存按钮代码如下:if update(dw_1,true,false)=1 then/保存修改成功,提交修改dw_1.resetupdate()commit;messagebox(提示!,数据更新成功!)else/保存修改失败,取消所作的修改rollback;/弹出一个对话框警告messagebox(错误!,数据更新失败!)end ifcolsequery事件如下:integer li_rc/ accept the last data entered into the datawindowdw_1.accepttext()/check to see if any data has changed if dw_1.modifiedcount() 0 thenli_rc = messagebox(提示, &是否保存所做的修改?, question!, &yesnocancel!, 3)/user chose to updata and close windowif li_rc = 1 then cb_3.triggerevent( clicked!)return 0/user chose to close window without updatingelseif li_rc = 2 thenreturn 0/user canceledelsereturn 1 end ifelse/ no changes to the data, window will just closereturn 0 end if添加读者信息界面如下:前一条:/定义参数当前行行数integer row_current /数据窗口向前滚动一条记录row_current=dw_1.scrollpriorrow()/如果已经到达第一条记录,则弹出一个对话框警告if row_current=1 thenmessagebox(警告,已经是最前一条记录)end if后一条:/定义参数 表的总行数integer row_count /定义参数 当前行integer row_current /数据窗口向后滚动一条纪录row_current=dw_1.scrollnextrow()/得到表的总行数row_count=dw_1.rowcount()/判断是否是最后一条记录if row_current= row_count thenmessagebox(警告,已经是最后一条记录)end if保存:/if update(dw_1,true,false)=1 then/保存修改成功,提交修改/dw_1.resetupdate()/commit;/messagebox(提示!,数据更新成功!)/else/保存修改失败,取消所作的修改/rollback;/弹出一个对话框警告/messagebox(错误!,数据更新失败!)/end ifif update(dw_1,true,false)=1 then/保存修改成功,提交修改dw_1.resetupdate()commit;messagebox(提示!,数据更新成功!)end if if update(dw_1,true,false)=2 then/保存修改失败,取消所作的修改rollback;/弹出一个对话框警告messagebox(错误!,数据更新失败!)end if添加:/insert a row in the end of dw_1g_rownumber=dw_1.insertrow(0)/dw_1 get the focusdw_1.setfocus()/到当前行dw_1.scrolltorow(g_rownumber) /the first column get the focusdw_1.setcolumn(1)删除:/得到当前记录 g_rownumber=dw_1.getrow()/将当前记录中的员工号取出赋值给全局变量emp_nodeleterow(dw_1,g_rownumber)int a a=messagebox(提示,确实要删除吗?,question!, yesnocancel!, 3)if a=1 then cb_3.triggerevent( clicked!)else dw_1.retrieve()end ifclosequery事件:integer li_rc/ accept the last data entered into the datawindowdw_1.accepttext()/check to see if any data has changed if dw_1.modifiedcount() 0 thenli_rc = messagebox(提示, &是否保存所做的修改?, question!, &yesnocancel!, 3)/user chose to updata and close windowif li_rc = 1 then cb_3.triggerevent( clicked!)return 0/user chose to close window without updatingelseif li_rc = 2 thenreturn 0/user canceledelsereturn 1 end ifelse/ no changes to the data, window will just closereturn 0 end if退出:integer li_rc/ accept the last data entered into the datawindowdw_1.accepttext()/check to see if any data has changed if dw_1.modifiedcount() 0 thenli_rc = messagebox(提示, &是否保存所做的修改?, question!, &yesnocancel!, 3)/user chose to updata and close windowif li_rc = 1 then cb_3.triggerevent( clicked!)return 0/user chose to close window without updatingelseif li_rc = 2 thenreturn 0/user canceledelsereturn 1 end ifelse/ no changes to the data, window will just closereturn 0 end if修改读者信息界面如下:添加:/insert a row in the end of dw_1g_rownumber=dw_1.insertrow(0)/dw_1 get the focusdw_1.setfocus()/到当前行dw_1.scrolltorow(g_rownumber) /the first column get the focusdw_1.setcolumn(1)删除:/得到当前记录 g_rownumber=dw_1.getrow()/将当前记录中的员工号取出赋值给全局变量emp_nodeleterow(dw_1,g_rownumber)int a a=messagebox(提示,确实要删除吗?,question!, yesnocancel!, 3)if a=1 then cb_3.triggerevent( clicked!)else dw_1.retrieve()end if保存:if update(dw_1,true,false)=1 then/保存修改成功,提交修改dw_1.resetupdate()commit;messagebox(提示!,数据更新成功!)else/保存修改失败,取消所作的修改rollback;/弹出一个对话框警告messagebox(错误!,数据更新失败!)end ifclosequery事件如前。退出:close(parent)修改读者信息界面:添加:/insert a row in the end of dw_1g_rownumber=dw_1.insertrow(0)/dw_1 get the focusdw_1.setfocus()/到当前行dw_1.scrolltorow(g_rownumber) /the first column get the focusdw_1.setcolumn(1)删除:/得到当前记录 g_rownumber=dw_1.getrow()/将当前记录中的员工号取出赋值给全局变量emp_nodeleterow(dw_1,g_rownumber)int a a=messagebox(提示,确实要删除吗?,question!, yesnocancel!, 3)if a=1 then cb_3.triggerevent( clicked!)else dw_1.retrieve()end if保存:if update(dw_1,true,false)=1 then/保存修改成功,提交修改dw_1.resetupdate()commit;messagebox(提示!,数据更新成功!)else/保存修改失败,取消所作的修改rollback;/弹出一个对话框警告messagebox(错误!,数据更新失败!)end if退出:close(parent)添加读者信息界面:前一条:/定义参数当前行行数integer row_current /数据窗口向前滚动一条记录row_current=dw_1.scrollpriorrow()/如果已经到达第一条记录,则弹出一个对话框警告if row_current=1 thenmessagebox(警告,已经是最前一条记录)end if后一条:/定义参数 表的总行数integer row_count /定义参数 当前行integer row_current /数据窗口向后滚动一条纪录row_current=dw_1.scrollnextrow()/得到表的总行数row_count=dw_1.rowcount()/判断是否是最后一条记录if row_current= row_count thenmessagebox(警告,已经是最后一条记录)end if保存:if update(dw_1,true,false)=1 then/保存修改成功,提交修改dw_1.resetupdate()commit;messagebox(提示!,数据更新成功!)else/保存修改失败,取消所作的修改rollback;/弹出一个对话框警告messagebox(错误!,数据更新失败!)end if添加:/insert a row in the end of dw_1g_rownumber=dw_1.insertrow(0)/dw_1 get the focusdw_1.setfocus()/到当前行dw_1.scrolltorow(g_rownumber) /the first column get the focusdw_1.setcolumn(1)删除:/得到当前记录 g_rownumber=dw_1.getrow()/将当前记录中的员工号取出赋值给全局变量emp_nodeleterow(dw_1,g_rownumber)int a a=messagebox(提示,确实要删除吗?,question!, yesnocancel!, 3)if a=1 then cb_3.triggerevent( clicked!)else dw_1.retrieve()end if退出:/定义两个变量int mcount /修改后没有保存的行数int updateornot /是否修改/得到修改后没有保存的行数mcount=w_books.dw_1.modifiedcount()if mcount=0 then/没有未保存的修改close(w_books)elseif mcount0 then/询问是否保存所做的修改updateornot=messagebox(保存修改,您修改了数据窗口中的数据,现在是否保存?,question!,yesnocancel!)if updateornot=1 then/保存if update(w_books.dw_1,true,false)=1 then/保存修改成功,提交修改w_books.dw_1.resetupdate()commit;else/保存修改失败,取消所作的修改rollback;/弹出一个对话框警告messagebox(错误!,数据保存失败)end ifclose(w_books)elseif updateornot=2 then/不保存rollback;close(w_books)end ifendif 修改书籍界面如下:添加:/insert a row in the end of dw_1g_rownumber=dw_1.insertrow(0)/dw_1 get the focusdw_1.setfocus()/到当前行dw_1.scrolltorow(g_rownumber) /the first column get the focusdw_1.setcolumn(1)删除:/得到当前记录 g_rownumber=dw_1.getrow()/将当前记录中的员工号取出赋值给全局变量emp_nodeleterow(dw_1,g_rownumber)int a a=messagebox(提示,确实要删除吗?,question!, yesnocancel!, 3)if a=1 then cb_3.triggerevent( clicked!)else dw_1.retrieve()end if保存:if update(dw_1,true,false)=1 then/保存修改成功,提交修改dw_1.resetupdate()commit;messagebox(提示!,数据更新成功!)else/保存修改失败,取消所作的修改rollback;/弹出一个对话框警告messagebox(错误!,数据更新失败!)end if退出:close(parent)书籍查询界面如下:查询:/定义参数:查询条件综合结果string lookforcondition1string lookforcondition/定义参数:要查询的列string lookforitem1/定义参数:查询的符号string lookforhow1/定义参数:要查询的内容string lookforwhat1/定义参数:当前的行号int current_row1/定义参数:总的行数int total_row1/定义参数:满足条件的行号int find_row1/date lookforwhat1/查询符号的选择lookforhow1=ddlb_2.text/查询子段和查询内容的选择if ddlb_1.text=书号 thenlookforitem1 =bookidlookforwhat1=+trim(sle_1.text)+elseif ddlb_1.text=书名 thenlookforitem1=booknamelookforwhat1=+trim(sle_1.text)+elseif ddlb_1.text=种类 thenlookforitem1=booktypelookforwhat1=+trim(sle_1.text)+elseif ddlb_1.text=出版社 thenlookforitem1=bookpublookforwhat1=+trim(sle_1.text)+elseif ddlb_1.text=作者 thenlookforitem1=bookauthorlookforwhat1=+trim(sle_1.text)+elseif ddlb_1.text=是否借出 thenlookforitem1=putuplookforwhat1=+trim(sle_1.text)+elseif ddlb_1.text=类型 thenlookforitem1=booktypelookforwhat1=+trim(sle_1.text)+lookforcondition1=lookforitem1+lookforhow1+lookforwhat1elseif ddlb_1.text=登记日期 thenlookforitem1=bookindatelookforwhat1=sle_1.textelseif ddlb_1.text=出版日期 thenlookforitem1=bookpubdatelookforwhat1=sle_1.textelseif ddlb_1.text=价格 thenlookforitem1=pricelookforwhat1=sle_1.textend iflookforcondition1=lookforitem1+lookforhow1+lookforwhat1/定义参数:查询条件综合结果string lookforcondition2/定义参数:要查询的列string lookforitem2/定义参数:查询的符号string lookforhow2/定义参数:要查询的内容string lookforwhat2string operator1,operator2,operator3/查询符号的选择lookforhow2=ddlb_5.text/查询子段和查询内容的选择if ddlb_4.text=书号 thenlookforitem2 =bookidlookforwhat2=+trim(sle_2.text)+elseif ddlb_4.text=书名 thenlookforitem2=booknamelookforwhat2=+trim(sle_2.text)+elseif ddlb_4.text=种类 thenlookforitem2=booktypelookforwhat2=+trim(sle_2.text)+elseif ddlb_4.text=出版社 thenlookforitem2=bookpublookforwhat2=+trim(sle_2.text)+elseif ddlb_4.text=作者 thenlookforitem2=bookauthorlookforwhat2=+trim(sle_2.text)+elseif ddlb_4.text=是否借出 thenlookforitem2=putuplookforwhat2=+trim(sle_2.text)+elseif ddlb_4.text=类型 thenlookforitem2=booktypelookforwhat2=+trim(sle_2.text)+ lookforcondition2=lookforitem2+lookforhow2+lookforwhat2elseif ddlb_4.text=登记日期 thenlookforitem2=bookindatelookforwhat2=sle_2.textelseif ddlb_4.text=出版日期 thenlookforitem2=bookpubdatelookforwhat2=sle_2.textelseif ddlb_4.text=价格 thenlookforitem2=pricelookforwhat2=sle_2.textend iflookforcondition2=lookforitem2+lookforhow2+lookforwhat2/定义参数:查询条件综合结果string lookforcondition3/定义参数:要查询的列string lookforitem3/定义参数:查询的符号string lookforhow3/定义参数:要查询的内容string lookforwhat3/查询符号的选择lookforhow3=ddlb_8.text/查询子段和查询内容的选择if ddlb_7.text=书号 thenlookforitem3 =bookidlookforwhat3=+trim(sle_3.text)+elseif ddlb_7.text=书名 thenlook

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论