图书馆管理系统设计报告.docx
《图书馆管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
图书馆管理系统设计报告
系统名称图书馆管理系统
专业计算机科学与技术
班级
姓名
学号
指导教师
2009年12月
重庆邮电大学课程设计任务书
学院_专业_班级__
指导教师课程名学年学期第学期
主要内容、方法和要求
填写示例:
(一)图书馆管理系统
1,系统基本功能
结合所学知识,利用PowerBuilder9.0为平台设计一个通用性较强、实用的系统,以提高图书管理水平,实现信息资源的共享。
图书管理系统是一种基于集中统一规划的数据库数据管理新模式。
在对图书、读者的管理,其实是对图书、读者数据的管理。
本系统的建成无疑会为管理者对图书管理系统提供极大的帮助。
使用该系统之后,图书馆管理人员可以管理读者的登记、图书的入库、借出、归还以及注销等;还可以查询某位读者、某本图书的借阅情况,对当前借阅情况给出一些统计,给出统计表格,以全面掌握图书的流通情况。
本系统的宗旨是提高图书管理工作的效率,减少相关人员的工作量,使学校的图书管理工作真正做到科学、合理的规划,系统、高效的实施。
(2)产品功能
登录系统:
注销用户、修改密码、系统退出。
管理:
用户管理、图书管理、读者管理、借阅管理。
查询:
图书查询、读者查询、借阅查询、帮助。
主要参考文献
分工
一《图书馆管理系统》需求分析
当今时代是飞速发展的信息时代。
在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。
计算机的最大好处在于利用它能够进行信息管理。
使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。
本系统就是为了管理好图书馆信息而设计的。
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。
根据调查得知,他们以前对信息管理的主要方式是基于文本、表格等纸介质的手工处理,对于图书借阅情况的统计和核实等往往采用对借书卡的人工检查进行,对借阅者的借阅权限、以及借阅天数等用人工计算、手抄进行。
数据信息处理工作量大,容易出错;由于数据繁多,容易丢失,且不易查找。
总的来说,缺乏系统,规范的信息管理手段。
尽管有的图书馆有计算机,但是尚未用于信息管理,没有发挥它的效力,资源闲置比较突出,这就是管理信息系统的开发的基本环境。
数据处理手工操作,工作量大,出错率高,出错后不易更改。
图书馆采取手工方式对图书借阅情况进行人工管理,由于信息比较多,图书借阅信息的管理工作混乱而又复杂;一般借阅情况是记录在借书证上,图书的数目和内容记录在文件中,图书馆的工作人员和管理员也只是当时对它比较清楚,时间一长,如再要进行查询,就得在众多的资料中翻阅、查找了,造成查询费时、费力。
如要对很长时间以前的图书进行更改就更加困难了。
基于这此问题,我认为有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
二《图书馆管理系统》设计
2.1目标与定位
系统设计
1.系统目标设计。
本图书馆管理系统可以用于支持图书馆管理员完成一般的工作。
有下面3个功能。
⏹借书还书系统。
⏹会员和图书录入系统。
⏹管理员账号管理系统。
2.开发设计思想
本系统开发设计有以下几点。
⏹尽量用现有的软硬件环境,及先进的管理开发方案,从而达到充分利用现有资源。
遗稿系统的开发水平和应用效果的目的。
⏹系统应符合管理的规定,满足日常人事管理的工作需要,并达到操作过程直观、方便、实用等要求。
⏹系统具备及时根据人员的需求进行数据的添加、删除、修改等操作。
3.开发和运行环境选择
用PowerBuilder9.0作为应用开发工具。
Sqlanywhere作为数据库系统。
4.系统功能分析
在系统开发总体任务的基础上完成系统功能分析。
本系统需要完成以下功能。
⏹登陆权限设置
⏹读者注册
⏹管理员各种信息的输入,图书和读者资料。
⏹图书的借出归还。
⏹管理员的账号增加和密码修改。
⏹图书和会员的基本资料查询。
系统功能图
权限
认证
x
2.2数据库设计
2.2.1E-R图设计
号
实体之间的E-R图为
2.2.2面向对象结构图
系统功能
查查
看看
借图
书书
信信
息息
信息查询
2.2.3数据库表结构及数据字典设计
2.3代码于程序的实现
登陆认证代码
//将全局变量-输入用户名和口令的次数赋初值0
G_INPUT_TIME=0
//定义变量
Environmentl_env
intl_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)
管理员注册
ifsle_1.text=""then
messageBox("警告:
","请输入资料!
")
return
endif
stringid,number
id=sle_4.text
inti,j
//检查有无重号
selectuser_id
into:
i
fromuser_information
whereuser_id=:
id;
ifi<>0then
messageBox("警告:
","账号重复,请重新输入!
")
return
endif
number=sle_3.text
selectadministrator_number
into:
j
fromadministrator
whereadministrator_number=:
number;
ifj<>0then
messageBox("警告:
","职工号重复,请重新输入!
")
return
endif
INSERTINTO"administrator"
("administrator_sex",
"administrator_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;
else
commitusingsqlca;
messagebox("","保存成功")
endif
close(administrator_enroll)
添加图书
intn
n=dw_1.rowcount()
dw_1.insertrow(0)
dw_1.scrolltorow(n+1)
integerli_rc
//Acceptthelastdataenteredintothedatawindow
dw_1.AcceptText()
//Checktoseeifanydatahaschanged
IFdw_1.ModifiedCount()>0THEN
li_rc=MessageBox("提示",&
"是否保存所做的修改?
",Question!
&
YesNoCancel!
3)
//Userchosetoupdataandclosewindow
IFli_rc=1THEN
cb_4.triggerevent(Clicked!
)
RETURN0
//Userchosetoclosewindowwithoutupdating
ELSEIFli_rc=2THEN
RETURN0
//Usercanceled
ELSE
RETURN1
ENDIF
ELSE
//Nochangestothedata,windowwilljustclose
RETURN0
ENDIF
图书查询
stringcondition
condition='book_number'+'='+"'"+sle_1.text+"'"
dw_1.setfilter(condition)
filter(dw_1)
sle_1.text=""
sle_1.setfocus()
ifdw_1.retrieve()=0thenmessagebox('提示','图书馆没有此书!
')
借书处理代码
stringIs_bookid,Is_cert_id,Il_m,Il_n,Il_f,Il_l,Il_p,check
dateIs_returndates
datetimeIs_loandates,Il_j,Il_k
integerIl_a,Is_flag,Il_v,Il_d,Il_b
check="是"
ifsle_1.text=""then
messagebox("缺少数据","请输入借书证书ID")
sle_1.setfocus()
return
elseifsle_2.text=""then
messagebox("缺少数据","请输入图书编号")
sle_2.setfocus()
return
endif
Is_cert_id=sle_1.text
Is_bookid=sle_2.text
Is_loandates=datetime(today())
Is_returndates=relativedate(today(),30)
selectreturn_date
into:
Il_j
fromborrower_information
wherebook_number=:
Is_cert_idandborrowe_date<:
Is_loandates;
selectbook_number
into:
Il_m
frombook
wherebook_number=:
Is_bookid;
ifIl_m<>Is_bookidthen
messagebox("信息错误","数据库内没有此图书信息!
")
sle_1.setfocus()
return
endif
selectborrower_card_number
into:
Il_n
fromreader
whereborrower_card_number=:
Is_cert_id;
ifIl_n<>Is_cert_idthen
messagebox("信息错误","数据库内不存在此证!
")
sle_1.setfocus()
return
endif
selectborrow_or_not
into:
Il_p
frombook
wherebook_number=:
Is_bookid;
ifIl_p=checkthen
messagebox("信息错误","图书已借出!
")
sle_1.setfocus()
return
endif
selectbook_name
into:
Il_l
frombook
wherebook_number=:
Is_bookid;
insertintoborrower_information(return_date,borrowe_date,borrower_card_number,book_number,book_name)
values(:
lib_date,
:
Is_loandates,
:
Il_n,
:
Il_m,
:
Il_l
);
UPDATEbookSETborrow_or_not='是'WHEREbook_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()
还书代码
stringIs_cert_id,Is_bookid,Il_a
datetimeIl_k,Is_sjtime,l_returntime,l_loandate
stringIl_e,Il_h,Il_l,l_cid,l_bid,c_cid
doublem_money,emoney,sum,Is_price
integerl_flag
Is_bookid=sle_4.text
Is_sjtime=datetime(today())
Is_cert_id=sle_3.text
ifsle_3.text=""then
messagebox("缺少数据","请输入借书证书号")
sle_3.setfocus()
return
elseifsle_4.text=""then
messagebox("缺少数据","请输入图书编号")
sle_4.setfocus()
return
endif
//判断证件是否借过书或借书证不存在
selectborrower_card_number
into:
c_cid
fromreader
whereborrower_card_number=:
Is_cert_id;
ifc_cid<>sle_3.textthen
messagebox("信息错误","您的借书证号不存在,请询问管理员!
")
sle_3.setfocus()
return
endif
selectbook_number
into:
l_bid
fromborrower_information
wherebook_number=:
Is_bookid;
ifl_bid<>sle_4.textthen
messagebox("信息错误","该书未借出!
")
sle_4.setfocus()
return
endif
UPDATEbook
SETborrow_or_not='否'
WHEREbook_number=:
Is_bookid;
messageBox("提示信息","图书编号为"+Is_bookid+"的图书已还书成功")
delete
fromborrower_information
wherebook_number=:
Is_bookid;
sle_3.text=""
sle_4.text=""
sle_3.setfocus()
修改密码
stringpw
pw=SLE_2.TEXT
//输入次数加1
G_INPUT_TIME=G_INPUT_TIME+1
//判断两次输入的新口令是否一致
IFSLE_2.TEXT<>SLE_3.TEXTTHEN
IFG_INPUT_TIME>3THEN
MESSAGEBOX("警告","输入的次数太多!
")
CLOSE(CHANGE_PASSWORD)
ELSE
MESSAGEBOX("警告","两次输入的口令不一致,请重新输入")
ENDIF
ELSE
//判断输入的原口令是否正确
IFSLE_1.TEXT<>G_PWDTHEN
IFG_INPUT_TIME>3THEN
MESSAGEBOX("警告","输入的次数太多!
")
CLOSE(CHANGE_PASSWORD)
ELSE
MESSAGEBOX("警告","输入的原口令不正确,请重新输入")
ENDIF
ELSE
//修改数据库中的该用户的口令
UPDATEuser_informationSETuser_password=:
pw
WHEREuser_id=:
G_USER;
MESSAGEBOX("注意","你的口令已经修改,请牢记")
//提交修改,关闭口令修改窗口
commitusingsqlca;
CLOSE(CHANGE_PASSWORD)
ENDIF
ENDIF
if(sqlca.sqlcode<>0)then
messagebox("","保存失败,错误:
"+sqlca.sqlerrtext)
rollback;
else
commitusingsqlca;
messagebox("","保存成功")
endif
读者用户注册
ifsle_1.text=""then
messageBox("警告:
","请输入资料!
")
return
endif
stringid,number
id=sle_2.text
inti,j
//检查有无重号
selectuser_id
into:
i
fromuser_information
whereuser_id=:
id;
ifi<>0then
messageBox("警告:
","账号重复,请重新输入!
")
return
endif
number=sle_5.text
selectborrower_card_number
into:
j
fromreader
whereborrower_card_number=:
number;
ifj<>0then
messageBox("警告:
","借书证号重复,请重新输入!
")
return
endif
INSERTINTO"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.text,
:
sle_2.text,
:
sle_5.text,
:
sle_6.text);
if(sqlca.sqlcode<>0)then
messagebox("","保存失败,错误:
"+sqlca.sqlerrtext)
rollback;
else
commitusingsqlca;
messagebox("","保存成功")
endif
close(reder_enroll)
三系统功能
上图为登录界面,点击进入
可用借书卡号注册普通为普通用户
这是普通用户注册界面
填写上述信息可添加到数据库中
登陆
普通读者号登陆
进入主程序读者可根据菜单选择相应的处理
如图书查询
图书管理图书查询
读者可根据图书编号、书名、作者、种类查询
在查询窗口中还可查到图书是否已被借出
可在用户信息项查看自己的信息以及本人已借书籍的信息
管理员账号登陆
可以进行图书入库,删除,进行借还书处理,添加管理员,读者信息查询操作
插入操作:
点击窗口的添加按钮,在数据窗口中输入图书相应信息,让后点保存即可完成图书入库。
删除:
在数据窗口中选择要删除的行,点击删除即可。
图书借还处理
选择相应选项卡,如借书:
输入借书证号,图书编号后点击确定完成借书处理
管理员可查询更新读者基本信息
选择查询种类,点击查询,在数据窗口中更改需要更改的信息,点击更新完成读者信息更新
添加管理员
输入相应信息后,点击添加,完成添加
四心得体会
在这次设计中,涉及到了之前关于PB学习的很多知识点,让我对一个软件的设计开发过程有了更深的了解,重新复习了之前学习到的东西。
查询曾经借过的书的记录和未还书的记录时不能全部显示,要出来对应证件号码的信息。
在设计软件过程中遇到了很多困难,需要反复的改写,思考,有时候因为书看的不仔细或者上课的时候不认真,自己盲目的做而耽误了不少时间。
不过多天来一直研究PB也使自己的PB编程和设计思想和水平有了稍许的提高。
一开始,我觉得老师让做系统不如让我们笔试,但是经过编程、设计,使自己掌握了不少知识与技巧,这样实践性强的期末考试形式很好,可以真正的提高就业能力和动手能力。
对于软件工程的学习,只有真正参与到设计和编程才能够积累经验,提高自己的软件编程能力。
动手能力对于一个程序员来说至关重要。
由于设计系统开发经验不足,时间有限,而我的设计只能提供其基本的功能。
还有许多的设想由于时间和自身和因素无法得以实现。
虽然我们小组完成了系统的调研、分析、设计和调试的工作,但是仍然有许多不足之处。
不过,至少它已经启发了自己的思维,提高了我的动手能力,这是我在课本中学不到的。
它为我们在以后的工作岗位上发挥自己的才能奠定了坚实的基础。
心得体会
这次选用的编程工具是PowerBuilder9.0,对于一个数据库软件的开发,PB对数据库的操作很方便,特别是提供的数据窗口控件
这次程序设计复习巩固了以前学习的数据库知识,进一步掌握了PB的一些基本操作,了解到一些程序设计的基本过程,学习到一些追踪程序错误及解决问题的方法。
通过这次程序实践让增强了自己的动手能力也我了解到自己的许多不足,一些设想的功能也未能实现,希望随着以后知识和经验的累计能够设计出更加完善的程序。