1、 目录一图书馆系统概述3二图书馆系统设计32.1目标与定位32.2 数据库设计32.3 系统模块设计3三系统功能3四心得体会4一图书馆管理系统需求分析当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好图书馆信息而设计的。图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多
2、的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统,规范的信息管理手段。尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。数据处理手工操作,工作量大,出错率高,出错后不易更改。图书馆采取手工方式对图书借阅情况进行
3、人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。如要对很长时间以前的图书进行更改就更加困难了。基于这此问题,我认为有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。二图书馆管理系统设计2.1目标与定位系统设计1. 系统目标设计。本图书馆管理系统可以用于支持图书馆管理员完成一般的工作。有下面3
4、个功能。n 借书还书系统。n 会员和图书录入系统。n 管理员账号管理系统。2. 开发设计思想本系统开发设计有以下几点。n 尽量用现有的软硬件环境,及先进的管理开发方案,从而达到充分利用现有资源。遗稿系统的开发水平和应用效果的目的。n 系统应符合管理的规定,满足日常人事管理的工作需要,并达到操作过程直观、方便、实用等要求。n 系统具备及时根据人员的需求进行数据的添加、删除、修改等操作。3. 开发和运行环境选择用PowerBuilder 9.0作为应用开发工具。Sqlanywhere作为数据库系统。4. 系统功能分析在系统开发总体任务的基础上完成系统功能分析。本系统需要完成以下功能。n 登陆权限设
5、置n 读者注册n 管理员各种信息的输入,图书和读者资料。n 图书的借出归还。n 管理员的账号增加和密码修改。n 图书和会员的基本资料查询。系统功能图注销修改密码系统菜单登录退出权限插入删除认证图书管理x借还处理查询添加管理员关于窗口处理读者信息用户资料 平铺层叠姓名性别用户名职工号密码姓名性别用户名借书证号注册密码手机号2.2 数据库设计2.2.1 E-R图设计账号管理员姓名ID用户名密码性别出版时间图书类型类型ID价格入库时间作者出版社书名号读者价格图书编号还书日期借书证卡号书名借书日期实体之间的E-R图为 管理管理员 用户 图书 借还 管理2.2.2面向对象结构图修改密码注销退出管理员/读
6、者 系统功能查看自己信息查询图书查 查 看 看 借 图书 书信 信息 息读者 信息查询图书插入删除借还书处理图书查询 图书管理 图书管理员 管理员信息 添加管理员图书管理员 查询读者信息2.2.3数据库表结构及数据字典设计2.3代码于程序的实现登陆认证代码/将全局变量-输入用户名和口令的次数赋初值0G_INPUT_TIME=0/定义变量Environment l_envint l_ScrWidth,l_ScrHeight/关闭窗口刷新setRedraw(false)/取得屏幕的高度和宽度GetEnvironment(l_env)l_ScrWidth=PixelsToUnits(l_env.Sc
7、reenWidth,XpixelsToUnits!)l_ScrHeight=PixelsToUnits(l_env.ScreenHeight,YpixelsToUnits!)/移动窗口到屏幕中间Move(l_scrwidth - this.width)/2,(l_scrheight - this.height)/2)/打开窗口刷新setredraw(true)管理员注册if sle_1.text= thenmessageBox(警告:,请输入资料!)returnend ifstring id ,numberid=sle_4.textint i,j/检查有无重号select user_idint
8、o :ifrom user_informationwhere user_id=:id;if i0 thenmessageBox(警告:,账号重复,请重新输入!)returnend ifnumber=sle_3.textselect administrator_numberinto :jfrom administratorwhere administrator_number=:number;if j0 thenmessageBox(警告:,职工号重复,请重新输入!)returnend if INSERT INTO administrator ( administrator_sex, admini
9、strator_name, user_password, user_id, administrator_number ) VALUES ( :sle_2.text, :sle_1.text, :sle_5.text, :sle_4.text, :sle_3.text ) ; if (sqlca.sqlcode 0) then messagebox(,保存失败,错误:+sqlca.sqlerrtext) rollback; elsecommit using sqlca;messagebox(,保存成功) end ifclose(administrator_enroll)添加图书int nn=dw
10、_1.rowcount()dw_1.insertrow(0)dw_1.scrolltorow(n+1)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 windo
11、wIF li_rc = 1 THEN cb_4.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图书查询string conditioncondition=book_number+=+sle_1.text+dw_1.setfilter(co
12、ndition)filter(dw_1)sle_1.text=sle_1.setfocus()if dw_1.retrieve()=0 then messagebox(提示,图书馆没有此书!)借书处理代码string Is_bookid,Is_cert_id,Il_m,Il_n,Il_f,Il_l,Il_p,checkdate Is_returndates datetime Is_loandates,Il_j,Il_kinteger Il_a,Is_flag,Il_v,Il_d,Il_bcheck=是if sle_1.text=thenmessagebox(缺少数据,请输入借书证书ID) sl
13、e_1.setfocus() returnelseif sle_2.text=thenmessagebox(缺少数据,请输入图书编号) sle_2.setfocus() returnend ifIs_cert_id=sle_1.textIs_bookid=sle_2.textIs_loandates=datetime(today()Is_returndates=relativedate (today(),30)select return_dateinto:Il_jfrom borrower_informationwhere book_number=:Is_cert_id and borrowe
14、_date:Is_loandates ;select book_numberinto:Il_mfrom bookwhere book_number=:Is_bookid;if Il_m Is_bookid thenmessagebox(信息错误,数据库内没有此图书信息!) sle_1.setfocus()returnend ifselect borrower_card_numberinto:Il_nfrom readerwhere borrower_card_number=:Is_cert_id;if Il_n Is_cert_id thenmessagebox(信息错误,数据库内不存在此证!
15、) sle_1.setfocus()returnend ifselect borrow_or_notinto:Il_pfrom bookwhere book_number=:Is_bookid;if Il_p=check thenmessagebox(信息错误,图书已借出!)sle_1.setfocus()returnend ifselect book_name into:Il_lfrom bookwhere book_number=:Is_bookid;insert into borrower_information(return_date,borrowe_date,borrower_car
16、d_number,book_number,book_name) values(:lib_date, :Is_loandates, :Il_n, :Il_m, :Il_l );UPDATE book SET borrow_or_not = 是 WHERE book_number=:Is_bookid;dw_1.retrieve(Is_cert_id)messagebox(提示信息,图书编号为+Is_bookid+的图书已借成功)/dw_1.update()sle_1.text=sle_2.text=em_1.text=sle_1.setfocus()还书代码string Is_cert_id,I
17、s_bookid,Il_adatetime Il_k,Is_sjtime,l_returntime,l_loandatestring Il_e,Il_h,Il_l,l_cid,l_bid,c_ciddouble m_money,emoney,sum,Is_priceinteger l_flagIs_bookid=sle_4.textIs_sjtime=datetime(today()Is_cert_id=sle_3.textif sle_3.text= thenmessagebox(缺少数据,请输入借书证书号) sle_3.setfocus() returnelseif sle_4.text=
18、 thenmessagebox(缺少数据,请输入图书编号) sle_4.setfocus() returnend if/判断证件是否借过书或借书证不存在select borrower_card_numberinto:c_cidfrom readerwhere borrower_card_number=:Is_cert_id;if c_cid sle_3.text then messagebox(信息错误,您的借书证号不存在,请询问管理员!) sle_3.setfocus()returnend ifselect book_numberinto:l_bidfrom borrower_informa
19、tionwhere book_number=:Is_bookid;if l_bid sle_4.text thenmessagebox(信息错误,该书未借出!)sle_4.setfocus()returnend ifUPDATE bookSET borrow_or_not = 否 WHERE book_number=:Is_bookid;messageBox(提示信息,图书编号为+Is_bookid+的图书已还书成功)delete from borrower_informationwhere book_number=:Is_bookid;sle_3.text=sle_4.text=sle_3.
20、setfocus()修改密码string pwpw=SLE_2.TEXT /输入次数加1G_INPUT_TIME =G_INPUT_TIME+1/判断两次输入的新口令是否一致IF SLE_2.TEXT SLE_3.TEXT THENIF G_INPUT_TIME 3 THENMESSAGEBOX(警告,输入的次数太多!)CLOSE(CHANGE_PASSWORD)ELSEMESSAGEBOX(警告,两次输入的口令不一致,请重新输入)END IFELSE/判断输入的原口令是否正确IF SLE_1.TEXT G_PWD THENIF G_INPUT_TIME 3 THENMESSAGEBOX(警告
21、,输入的次数太多!)CLOSE(CHANGE_PASSWORD)ELSEMESSAGEBOX(警告,输入的原口令不正确,请重新输入)END IFELSE/修改数据库中的该用户的口令UPDATE user_information SET user_password =:pw WHERE user_id=:G_USER;MESSAGEBOX(注意,你的口令已经修改,请牢记)/提交修改,关闭口令修改窗口commit using sqlca;CLOSE(CHANGE_PASSWORD)END IFEND IFif (sqlca.sqlcode 0) then messagebox(,保存失败,错误:+
22、sqlca.sqlerrtext) rollback; elsecommit using sqlca;messagebox(,保存成功) end if读者用户注册if sle_1.text= thenmessageBox(警告:,请输入资料!)returnend ifstring id ,numberid=sle_2.textint i,j/检查有无重号select user_idinto :ifrom user_informationwhere user_id=:id;if i0 thenmessageBox(警告:,账号重复,请重新输入!)returnend ifnumber=sle_5.
23、textselect borrower_card_numberinto :jfrom readerwhere borrower_card_number=:number;if j0 thenmessageBox(警告:,借书证号重复,请重新输入!)returnend if INSERT INTO reader ( reader_sex, reader_name, user_password, user_id, borrower_card_number , reder_mobile_phone_number) VALUES ( :sle_4.text, :sle_1.text, :sle_3.te
24、xt, :sle_2.text, :sle_5.text, :sle_6.text) ; if (sqlca.sqlcode 0) then messagebox(,保存失败,错误:+sqlca.sqlerrtext) rollback; elsecommit using sqlca;messagebox(,保存成功) end ifclose(reder_enroll)三系统功能上图为登录界面,点击进入可用借书卡号注册普通为普通用户这是普通用户注册界面填写上述信息可添加到数据库中登陆普通读者号登陆进入主程序读者可根据菜单选择相应的处理如图书查询图书管理图书查询读者可根据图书编号、书名、作者、种
25、类查询在查询窗口中还可查到图书是否已被借出可在用户信息项查看自己的信息以及本人已借书籍的信息管理员账号登陆可以进行图书入库,删除,进行借还书处理,添加管理员,读者信息查询操作插入操作:点击窗口的添加按钮,在数据窗口中输入图书相应信息,让后点保存即可完成图书入库。删除:在数据窗口中选择要删除的行,点击删除即可。图书借还处理选择相应选项卡,如借书:输入借书证号,图书编号后点击确定完成借书处理管理员可查询更新读者基本信息选择查询种类,点击查询,在数据窗口中更改需要更改的信息,点击更新完成读者信息更新添加管理员输入相应信息后,点击添加,完成添加四心得体会在这次设计中,涉及到了之前关于PB学习的很多知识
26、点,让我对一个软件的设计开发过程有了更深的了解,重新复习了之前学习到的东西。查询曾经借过的书的记录和未还书的记录时不能全部显示,要出来对应证件号码的信息。在设计软件过程中遇到了很多困难,需要反复的改写,思考,有时候因为书看的不仔细或者上课的时候不认真,自己盲目的做而耽误了不少时间。不过多天来一直研究PB也使自己的PB编程和设计思想和水平有了稍许的提高。一开始,我觉得老师让做系统不如让我们笔试,但是经过编程、设计,使自己掌握了不少知识与技巧,这样实践性强的期末考试形式很好,可以真正的提高就业能力和动手能力。对于软件工程的学习,只有真正参与到设计和编程才能够积累经验,提高自己的软件编程能力。动手能
27、力对于一个程序员来说至关重要。由于设计系统开发经验不足,时间有限,而我的设计只能提供其基本的功能。还有许多的设想由于时间和自身和因素无法得以实现。虽然我们小组完成了系统的调研、分析、设计和调试的工作,但是仍然有许多不足之处。不过,至少它已经启发了自己的思维,提高了我的动手能力,这是我在课本中学不到的。它为我们在以后的工作岗位上发挥自己的才能奠定了坚实的基础。 心得体会这次选用的编程工具是Power Builder9.0,对于一个数据库软件的开发,PB对数据库的操作很方便,特别是提供的数据窗口控件这次程序设计复习巩固了以前学习的数据库知识,进一步掌握了PB的一些基本操作,了解到一些程序设计的基本过程,学习到一些追踪程序错误及解决问题的方法。通过这次程序实践让增强了自己的动手能力也我了解到自己的许多不足,一些设想的功能也未能实现,希望随着以后知识和经验的累计能够设计出更加完善的程序。 27