《图书管理系统论文.doc》由会员分享,可在线阅读,更多相关《图书管理系统论文.doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流图书管理系统论文.精品文档.铜 陵 职 业 技 术 学 院毕 业 设 计班级名称 07计算机应用技术1 专业名称 计算机应用技术 所属系部 信息工程系 课题名称 图书信息管理系统 学生姓名 赵云丽 指导教师 查艳 铜 陵 职 业 技 术 学 院 教 务 处 印 制目录1 绪论11.1 开发背景11.2 开发工具的选用及介绍12总体分析与设计32.1系统分析32.2 系统目标32.3总体需求42.4系统模块流程图52.5数据库设计63 详细设计83.1 用户登陆页面83.2图书查询页面93.3统计超期113.4数据库备份和还原123.5图书添加
2、133.6用户管理153.7最新添加的图书163.8图书分类浏览173.9给超期用户发消息提醒184参考文献22关键词ASP 2总体分析与设计2.1 系统分析图书管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。而对于后者则要求应用程序功能完备,易使用等特点。 在数据库应用系统开发之前,对开发数据库的基本概念,数据库的结构、开发数据库应用程序的步骤、开发体系及方法都应当有相当清晰的了解和认识。数据库应用系统开发的目标是建立一个满足用户长期需求的产品。开发的主要过程为:理解用户的需求,然
3、后,把它们转变为有效的数据库设计。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。考虑到使用的方便性,程序用ADO技术来操作数据库,免去了注册DSN步骤。因此本人结合上述要求对MS SQL Server 2000数据库管理系统、SQL语言原理、ASP程序设计,ADO数据库技术进行了较深入的学习和应用。2.2 系统目标(1)用户方便进行图书查询,图书浏览和图书分类浏览,进行图书借阅并了解自己的借书情况和个人情况。(2)用户在借书超期的情况下得到来自管理员的提醒。(3)管理员可以方便进行图书管理,用户管理,管理员管理。图书管理包括图书信息以及图书分类的添加,修改,删除。用户管理
4、包括用户信息的添加,删除,修改和锁定(限制用户的正常使用功能,使其无法登陆)。管理员管理包括管理员信息的添加,删除,修改等。(4)用户和管理员可以修改自己的密码,修改前需先核实自己的原始密码。(5)未注册用户(游客)也可以浏览所有的图书信息和分类信息,但是无法借阅。 (6)实现模糊查询,使用户得到更多的相关记录。并且考虑使用的方便性,一些经常使用的输入无须用户输入,比如进行图书查询时图书分类只须用户做选择就可以。(7)考虑程序执行操作时可能出现的情况,比如删除图书分类时该分类下存在图书,程序自动跳转该分类图书查看。删除某个用户,如果存在借书记录则不允许删除,跳转到该用户的借书记录。等待管理员确
5、认该用户所借图书已经全部归还之后才允许删除该用户信息。2.3总体需求图书管理系统是一项复杂系统工程,要从实际出发,对实际情况进行客观的分析,深入了解需求。系统利用Asp与数据库结合的技术建立数据库管理系统,采用交互式的动态的Asp页面来实现。需求调查是为了研究系统设计的开发途径和方法。同时它也是进行概要设计和详细设计的基础,是进行内部维护和测试的依据。具体分析如下:添加操作:在执行操作时首先都要先检查是否已经输入以及数据库中是否已经存在输入的数据,如果存在会报错,程序返回上个页面,不执行添加操作。删除操作:考虑到了字段在不同表中可能会同时存在的情况,比如:删除图书分类时候该分类下有书或者删除用
6、户时该用户有借书记录,这样的情况下程序会给出提醒并跳转到该分类下的所有图书查看或者是该用户的全部借书查看。直到这种关联取消掉之后才允许进行删除这样的危险操作。查询操作:考虑到了模糊查询的实现, SQL语句中用“like”,还有组合查询,通过对用户输入情况的判断来确定SQL语句的最终形式,比如用户查询时并未输入图书名字,就是名字匹配任意字符,那么程序给数据库的SQL语句就会是name like %。组合查询的实现也是程序判断用户所做的选择或者输入,在SQL语句中实现的。超期统计:假定借书超期的限制是三十天,借书记录中的所有数据的借书时间如果不在当前服务器时间减去三十天和当前服务器时间之间,那么这
7、条借书记录就属于超期记录了。由用户借书记录中的用户编号到用户表中查找该用户。发送消息:往消息表中添加数据,该数据包含用户名,用户超期的图书,超期时间,罚金等相关警告信息。当用户正常登陆主页后,程序自动检查消息表中是否存在该用户的记录,如果有要给出提示,但是没有强制用户必须查看。数据库备份和还原操作:程序只要告诉SQL 服务器执行备份和还原SQL语句就可以实现,在还原时程序还在使用系统数据库,此时执行还原操作会因为没有排它使用权出现错误,所以应告诉SQL 服务器使用另外的一个数据库,程序中用的是:use master。还原操作时用FSO组件首先检查备份数据库文件是否存在,如果不存在则给出提示回到
8、上个页面。所有条件都允许后则执行还原操作,如果数据库数据比较多,备份和还原的时间都可能会比较长。登陆页面游客操作页面用户操作页面管理员操作页面2.4系统模块流程图2.4.1 系统登陆流程图用户操作页面消息查看修改密码退出登陆分类查看图书查询全部图书查看借书详情还书2.4.2 用户流程图管理员操作页面修改密码备份还原数据库所有图书及分类查看图书查询统计超期添加,删除分类添加,删除图书用户,管理员相关2.4.3 管理员流程图2.5数据库设计表2.5.1 管理员字段类型长度必填字段允许空格备注ID数字id主键name文本50是否名字pwd文本50是否密码表 2.5.2 图书信息字段类型长度必填字段允
9、许空值备注id数字否id主键booktype文本50是否图书类别publishing文本50是否出版社bookmoney数字20是否货币pdate日期时间是否出版时间bookname文本50是否图书名称num数字8是否图书数量表 2.5.3 图书类别字段类型长度必填字段允许空值备注idid主键booktype文本50是否图书类别表 2.5.4 借出信息字段类型长度必填字段允许空值备注id数字否id主键bid数字50是否图书编号time日期时间借书时间uid数字20是否用户编号表2.5.5 消息表字段类型长度必填字段允许空值备注id数字否id主键content文本500是否消息内容uid数字20
10、是否用户编号表2.5.6 用户表字段类型长度必填字段允许空值备注id数字否id主键name文本50是否名字pwd文本50是否密码lock是/否是否锁定loan_num数字20是否借书数量3 详细设计3.1 用户登陆页面该页面用于用户登陆,包括游客,用户和管理员。成功登陆则取得用户的session用于以后的操作权限认定。程序执行时首先判断用户类型,如果是游客则对session赋值为游客类型,然后直接进入主页;如果不是游客则执行查询语句,看数据库中是否存在这样的用户名和密码,根据选择用户类型的不同在不同的表中进行操作,成功则进入主页,否则提示输入错误。截图如下:图3.1.1 用户登陆代码:% if
11、 request(login) then if request(usertype) then 用户类型不空,核实数据真实If Request(usertype)=user Thensql = select * from u where name=&request(name)& and pwd=&request(pwd)&Else sql = SELECT * FROM admin WHERE name=&Request(name)& and pwd=&Request(pwd)&End IfSet rs=db.execute(sql)If not rs.EOF Or Not rs.BOF The
12、n 输入数据存在If Request(usertype)=user ThenIf rs(lock) Then response.Writealert(您已被锁定了!);window.location.href=login.aspelseSession(usertype)=userSession(userid)=rs(id)Session(name)=rs(name)Response.Redirect(index.asp)end ifElseSession(usertype)=adminSession(adminid)=rs(id)Session(name)=rs(name)Response.R
13、edirect(index.asp)End IfElse response.Writealert(输入错误!);window.location.href=login.asprs.close End if else用户类型空 response.Writealert(没有选择用户类型!);window.location.href=login.asp end ifend if3.2图书查询页面该页面用于用户的图书查询,利用查询语句的like %替代任意长度字符实现了模糊查询。所有查询的字段用户都可以不输入,如果输入了某个数据,程序执行时自己会判断,输入了就会加上相应的SQL语句。考虑到使用方便性,图
14、书类型,价格范围,出版日期都无须用户输入,已经设定了合理的初始值。图书类型如果不做选择就默认在所有图书类型中查找。考虑到找到的记录可能会很多,引入了分页显示,在记录集循环显示的时候引入参数i来实现,设定i10,初始值为0,这样每页显示的记录数为10条。 图3.2.1图书查询代码:%定义记录集和变量set rs=server.createobject(adodb.recordset)bookname=trim(request(bookname)booktype=request(booktype)publishing=trim(request(publishing)money1=trim(requ
15、est(money1)money2=trim(request(money2)date1=trim(request(date1)date11=trim(request(date11)date2=trim(request(date2)date22=trim(request(date22)date3=trim(request(date3)date33=trim(request(date33)date111=date1&-&date2&-&date3date222=date11&-&date22&-&date33查询的实现sql=select * from book where 1 if bookty
16、pe thensql=sql+and booktype like %&booktype&%else if bookname thensql=sql+and bookname like %&bookname&%else if publishing thensql=sql+and publishing like %&publishing&% end ifend ifend ifsql=sql+and bookmoney=&money1& and bookmoney=&money2& and pdate between &date111& and &date222& order by id desc
17、rs.open sql,db,1,3if rs.eof or rs.bof thenresponse.write 对不起没有搜索到记录response.endelse页面显示dim pagenum,irs.pagesize=10pagecount1=rs.pagecountif request.querystring(pagenum)=0 or request.querystring(pagenum)= thenpagenum=1elsepagenum=trim(request(pagenum)rs.absolutepage=trim(request(pagenum)end if%分页实现re
18、sponse.write 总共&pagecount1&页,当前&pagenum&/&pagecount1&, 首页% if pagenum1 thenresponse.write 上一页 elseresponse.write 上一页 end ifif pagenum trim(pagecount1) thenresponse.write 下一页 elseresponse.write 下一页end if% response.write 尾页3.3统计超期方便管理员清楚图书借出后的归还情况,并可以给超期的用户发送消息提醒,或者锁定该用户,使其无法登
19、陆系统。超期判定用dateserial()函数来实现将当前系统时间的格式转化为YY-MM-DD,这样方便后面的日期比较操作。设置一个变量来代表当前系统时间减去三十天,如果用户借书的时间不在这两个时间之间那么就是超期。页面开始首先进行管理员身份核实,用到了前面登陆页面说的session。点击左边菜单的统计超期后系统自动完成统计,并将结果显示在右边,管理员可以进行的操作有:锁定,给单个用户发消息,群发消息。截图如下:图3.3.1 统计超期代码:%:从loans表导出时间超期的数据 更改系统时间来实现超期 管理员验证 分页显示 管理员发消息提醒还书if session(usertype)admin
20、then response.write alert(不是管理员,请先登陆! );window.location.href=go.aspend ifdim loan_time 现在时间和借书时间相差三十天则超期loan_time = dateserial(year(date),month(date),day(date)-30)转换日期格式2007-3-31,函数参考 sql1=select * from loansset rs1=db.execute(sql1)sql2=select book.bookname as b_name,book.booktype as booktype,* from
21、 loans,u ,book where loans.time not between #&loan_time and #&date and u.id=loans.uid and book.id=loans.bid set rs2=db.execute(sql2)sql3=select * from u where id=&(rs2(uid)&set rs3=db.execute(sql3)3.4数据库备份和还原为了防止因意外对系统数据库造成的破坏,设置了数据库的备份和还原操作,其实现是用SQL本身的备份和还原功能,程序只要告诉SQL服务器执行就可以了,还原还首先检查是否存在备份文件,
22、如果没有则报错并终止还原操作,执行还原操作时因为当前系统的数据库正在使用,无法被还原,所以要先选择SQL服务器上的其他数据库为当前活动数据库,系统用use master来实现将当前正在使用的数据库更改为master数据库。系统设定备份文件存放在IIS主目录下,后缀是.BAK,方便管理员查看。截图:图3.4.1数据库备份和还原代码:if request(do)=bak thendim pathpath=server.MapPath(./)response.Write&path&sql=backup database 谢贵文 to disk=&path&谢贵文.bak with initdb.ex
23、ecute(sql)response.Writealert(备份成功. 备份文件在目录下);history.go(-1)end if%if request(do)=restore then判断备份文件是否存在set iFso=server.CreateObject(Scripting.FileSystemObject)FSO组件dim bak_pathbak_path=server.MapPath(./谢贵文.bak)if not iFso.FileExists(bak_path) thenresponse.Writealert(备份文件不存在);history.go(-1)elsesql1=
24、use master获得排它访问权 断开与当前系统数据的连接sql=restore database 谢贵文 from disk=&server.MapPath(./)&谢贵文.bak db.execute(sql1)db.execute(sql)response.Writealert(还原成功.);history.go(-1)end ifend if页面history.go(-1)时自己会重新连接数据库 3.5图书添加实现图书添加功能。当管理员需要添加图书时,通过管理菜单点击“添加图书”就进入这个页面,考虑到输入的方便性图书分类和出版时间都可以进行选择,无须手工输入。图书添加操作要求全部数据
25、都必须输入,否则报错。添加操作实际上是将数据写入数据库,写入新图书信息之前首先检查图书名是否重复,重复则报错返回上个页面,输入正确而且数据库中原本没有这样的数据则执行写入操作。截图如下:图3.5.1 图书添加代码:%图书增加if request(query)=book_add thensql=select * from booktypeset rs=db.execute(sql) if request(active)= then else if request(name)= or request(money)= or request(num)= or request(publishing)=
26、or request(select)= then response.write alert(输入错误);history.go(-1) else set rs2=server.createobject(adodb.recordset) date1=request(date1) date2=request(date2) date3=request(date3) qdate=date1&-&date2&-&date3 sql=select * from book rs2.open sql,db,1,3 rs2.addnew rs2(bookname)=trim(request(name) rs2(b
27、ookmoney)=trim(request(money) rs2(num)=trim(request(num) rs2(publishing)=trim(request(publishing) rs2(pdate)=date1&-&date2&-&date3 rs2(booktype)=trim(request(select) rs2.update response.write alert(添加图书成功);window.location.href(book.asp?query=all_book) end if end if3.6用户管理实现用户管理全部功能,包括查看全部用户,添加,修改,删除
28、,锁定,查看其借书记录。其中锁定针对于借书超期用户,管理员可以在超期统计页面知道哪些用户借书超期。添加用户时程序首先判断是否已经存在这个用户名,存在则终止操作,返回上个页面;删除用户时如果该用户存在借书记录则不允许删除,程序跳转到该用户的借书记录页面。更改操作同样考虑到了用户名重复的问题,避免混淆。截图如下:图3.6.1 用户管理代码如下:%从数据库导出所有用户数据if request(action)= thensql=select * from uset rs=server.CreateObject(adodb.recordset)rs.open sql,db,1,3实现用户查看,添加,删除
29、,修改等.%添加新的用户if request(action)=add thenif request(add) then检查是否重名set chk=db.execute(select * from u where name=&trim(request(name)&)if chk.eof or chk.bof then 插入u表rs.addnewrs(name)=request(name)rs(pwd)=request(pwd)rs.updateresponse.write alert(添加成功咯);window.location.href=user.aspelse response.write
30、alert(用户名重复);history.go(-1)end ifelse%删除用户if request(action)=del thenif request(id) thenqq=select count(*) as xx from loans where uid=&request(id)set q=db.execute(qq)if q(xx)0 thenresponse.write alert(存在借书记录,不能删除。);window.location.href=my_borrow.asp?id=&request(id)&elsesql=delete * from u where id=&
31、request(id)db.execute(sql)response.write alert(删除成功);window.location.href=user.aspend ifelse%更改用户 过程:如果有更改请求,如果有ID,导出数据,如果确认更改,执行检查过程;检查成功则更新 否则返回错误。该功能已经包含用户锁定功能的实现。if request(query)=type_mod thenif request(id) thensql=select * from u where id=&request(id)set rs1=server.CreateObject(adodb.recordset
32、)rs1.open sql,db,1,3if request(mod)=yes then确认请求set chk=db.execute(select * from u where name=&request(name)&and id&request(id)if not chk.eof thenresponse.write alert(已经存在的名咯);history.go(-1)response.End()elseif request(islock)=True then qq=update u set name=&request(name)&,pwd=&request(pwd)&,lock=1
33、where id=&request(id)elseqq=update u set name=&request(name)&,pwd=&request(pwd)&,lock=0 where id=&request(id)end ifdb.execute(qq)response.write alert(更改成功);window.location.href=user.aspend ifelse3.7最新添加的图书放在index.asp框架的右边,主要是向所有人展现最新增加的图书信息,方便所有人的使用。其实现是从数据库book表中导出top 10个数据。截图如下:图3.7.1 最新添加的图书代码:%最
34、新图书数据导出sql=select top 10 * from book order by id desc set rs=server.CreateObject(adodb.recordset)rs.open sql,db,1,33.8图书分类浏览放在首页的右边,起着导航作用,实现所有图书分类的查看,使得所有人都可以方便的浏览自己感兴趣的图书分类下的书,点击图书分类名就进入了该分类下的所有图书浏览。截图如下:图3.8.1 图书分类浏览代码:%图书类型到处sql1=select * from booktype order by id desc set rs1=server.CreateObjec
35、t(adodb.recordset)rs1.open sql1,db,1,33.9给超期用户发消息提醒主要功能是实现管理员可以对借书超期的用户进行提醒,其操作是往msg表里添加数据,当用户正常登陆后系统会检查msg表内是否有该用户的消息数据,如果有则会自动给出提醒,提醒用户查看消息。截图如下:图3.9.1 给超期用户发消息代码:%if request(act)=all_send_msg thendim loan_time 现在时间和借书时间相差三十天则超期loan_time = dateserial(year(date),month(date),day(date)-30)转换日期格式2007-
36、3-31 sql2=select book.bookname as b_name,book.booktype as booktype,* from loans,u ,book where loans.time not between #&loan_time and #&date and u.id=loans.uid and book.id=loans.bid set rs2=db.execute(sql2)dim uid,contentuid=rs2(uid)response.Write(提交的数据(测试是否设置好))do while not rs2.eof uid=rs2(uid)c
37、ontent=&rs2(name)&,你借的&rs2(b_name)&一书已经超期&datediff(d,rs2(time),date()-30&天了,快点还咯response.Write(uid&:&content)测试是否设置好了sql=insert into msg(content,uid) values(&content&,&uid&)db.execute(sql)rs2.movenextloopresponse.write alert(群发消息成功!);window.location.href=lock.aspelseresponse.Write提交的数据(测试是否设置好)&request(content)&sql=insert into msg(uid,content) values(&request(uid)&,&request(content)&)db.execute(sql)response.write alert(发消息成功!);window.location.href=lock.aspend if图3.9.2 用户登陆后的消息提醒代码:%if session(usertype)=user then uid=session(userid) msg导出数据,如果有的话 sql=select count
限制150内