图书馆管理系统课程设计论文.docx
《图书馆管理系统课程设计论文.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统课程设计论文.docx(24页珍藏版)》请在冰豆网上搜索。
图书馆管理系统课程设计论文
摘要
随着信息技术的发展,计算机已被广泛的应用于社会的各个领域,成为推动社会发展的技术动力。
而在计算机应用中,软件的作用十分突出,软件已经发展成为信息技术的核心,主导着信息产品的开发和信息技术市场的进一步的开拓。
软件产业已成为社会信息化进程中的一个战略性产业。
在软件技术的应用中软件的开发技术尤其是应用型软件产品的开发技术成了重中之重。
不断开发适应用户需求、市场需要的新型软件产品。
尤其是在校园里,各种软件的应用无处不在,为我们的学习和生活提供了方便。
学校的图书馆不仅给我们提供看书学习的地方,还给我们提供了一套功能齐全的图书馆系统,方便我们搜索书籍、借阅图书。
我们本次的Java课程设计的最终目标是实现一个图书馆管理系统,使其具有一般图书管理系统所具有的功能,可以实现管理员日志、管理员添加、管理员退出、读者添加、读者修改、读者查询、读者删除、新书入库、书籍查询、书籍借阅与归还等功能。
因为Java是一门很优秀的编程语言,具有面向对象、与平台无关、安全、稳定和多线程等特点,所以用Java编程为我们本次程序的编写提供了方便。
关键字:
图书馆管理系统,Java,Access数据库
一、课程设计目的
根据整个课程设计的要求,设计一个图书管理系统必不可少的必须对全管书籍进行分类汇总。
而这就是我们所说的数据库设计的第一阶段:
需求分析。
在这一阶段除了对具体情况诸如实行对管理员的管理、对读者的管理、书籍管理、书籍的借阅与归还、借阅超时等功能的实现,还需要对用户的需求进行调查和分析,否则就失去了设计这个系统的意义了。
对于界面的设计我们应该追求的是:
美观、易读性强、清晰度高;原则是:
不能因为刻意追求美观而以整个界面的清晰度的牺牲作为代价,不能为了清晰度而抛弃对易读性的追求。
再设计的过程中我们应该根据实际的情况进行设计,做到具体问题具体分析,不刻意追求原则。
在对应的界面与Access数据库建立连接,并实现对应的SQL语句进行实现将产生的结果显示出来。
并运用捕捉异常的方法,将异常信息显示出来。
通过此课程设计,能够达到巩固Java基础,运用Java编写相应的前台以及后台的程序。
熟练掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。
二、设计方案的论证
2.1背景及意义
随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。
随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。
书籍做为人类的精神食粮,在现代社会中越来越受到重视,大量的书籍出现在市场上,人们有了各种各样不同的选择。
与此同时,为了管理大量的图书,图书管理系统也大量的出现,随着图书的大量增加,其管理难度也越来越大,如何优化管理也就成为了一个大众化的问题。
现已有的图书管理系统,其功能已十分强大,为了便于管理员对图书管理系统进行妥善的管理和读者的查询,图书管理系统为管理员提供了管理日志、管理员添加、管理员切换、读者添加、读者修改、读者查询、读者删除、新书入库等功能,为读者提供了书籍查询、读者借阅信息查询、图书网上续借等很多功能。
2.2技术路线
开发环境的选择会影响到数据库的设计,所以在这里给出图书管理系统开发与运行环境的选择如下:
开发环境:
Window7旗舰版
开发工具:
MyEclipse7.0
三、设计实现过程
3.1、概要设计
系统管理模块分为管理员、读者管理、书籍管理、书籍借阅归还。
系统体系结构框图如下图
图3-1图书管理系统功能模块图
3.2、详细设计
由于本课程设计涉及的模块比较多,流程大致相同,所以我们只展示图书管理模块和读者管理模块的流程图,首先是创建图书的流程图,首先要按照提示对各个数据进行输入,系统判断,输入是否合法,如果不合法,不显示信息且不录入数据库,反之,录入数据库,流程图如下:
图3-2创建图书处理流程图
借阅功能,输入图书编号,确定是否借阅。
不借阅则返回,借阅则继续。
流程图如下:
图3-3图书借阅处理流程图
退还功能,输入图书编号,确定是否退还,退还则继续,不退还则返回,流程图如下:
图3-4图书退还处理流程图
读者的管理主要分为增,删,改,查四个部分,以图书证号为凭据,添加读者流程图:
图3-5创建读者处理流程图
修改读者信息,确定是否要修改读者信息,确定则继续,不确定则返回,流程图如下:
图3-6修改读者信息的处理流程图
删除读者信息流程图:
确定要删除的读者信息,开始输入,确定是否要删除读者信息。
图如下:
图3-7删除读者信息的处理流程图
3.3、数据库设计
药品管理系统主要涉及到几个表,即:
管理员信息表,管理日志表,图书表,读者表,借阅表。
管理员信息表,设置了用户名,密码二个列,管理员信息表设计如下表:
表3-1管理员信息表
字段名称
数据类型
长度
备注
用户名
文本
10
密码
文本
15
管理日志表中记录借还书日志,用于存下所有对图书操作的记录,以便以后可以翻阅和查找。
表3-2管理日志表
字段名称
数据类型
长度
备注
书号
文本
10
书名
文本
15
作者
文本
15
出版社
文本
15
入库时间
DATE
15
已付款额
文本
10
图书表中记录了库内所有图书的所有资料,书名、书号、作者、出版社等信息,如下图
表3-3图书表
字段名称
数据类型
长度
备注
书号
文本
10
书名
文本
15
作者
文本
15
出版社
文本
15
入库时间
DATE
15
是否借出
文本
10
价格
文本
10
表中记录库中所有读者的相关信息,如图书证号、姓名、性别、系别、班级这五项。
表3-4读者表
字段名称
数据类型
长度
备注
图书证号
文本
10
姓名
文本
15
性别
文本
15
系别
文本
15
班级
文本
15
表内记录了此时图书的借阅情况,有图书证号、书号、借阅日期、应还日期。
四、调试运行及结果分析
图书管理系统管理员模块是整个系统最主要的部分,管理员可以通过此模块实现进入其余各个模块如管理日志、管理员添加、管理员切换、读者添加、读者修改、读者查询、读者删除、新书入库、书籍查询、借阅书籍、归还书籍、借阅超时及退出的功能。
图书管理系统管理员界面如图4-1所示。
图4-1图书管理系统管理员界面
管理日志模块通过定义类WinTable继承顶层容器JFrame,再添加普通容器JScrollPane、Jpanel,然后通过BorderLayout布局创建界面,最后主要通过数组利用while循环在连接好的数据库中查找表Admirz中的内容,从而实现了可以清楚的显示出书籍借阅与归还信息的功能。
管理日志界面如图4-2所示。
图4-2管理日志界面
图书入库模块主要完成的功能是往数据库book表中添加新书的记录,在book表中可查看最新的记录。
在新书信息输入的过程中,会出现一些异常处理,如某个字段的信息没有填写;新书信息输入字段的过程中,输入的字段类型与给定的字段类型与输入不匹配(如:
货币、日期);输入的信息长度超过给定的字段长度等。
如果填写的内容正确则可以成功将新书添加入库。
图4-3图书入库界面
查询功能统包含两项一是检索项令一个是检索词,在检索项中用户可以根据自己的需求来选择所要查询的项目并在检索词中添写自己所要查询的内容。
本系统副带四个按钮:
确定、取消、查看全库。
图4-4图书查询界面
在该系统中为了用户使用方便还设有查看全库一项,用户可以通过这一功能来查看全库的图书,所查询的内容将在下方的文本区中显示。
图4-5图书查询界面
五、测试及问题探讨
5.1系统测试分析
软件测试的本质是针对要测试的内容确定一组测试用例。
在讨论之前,我先把要测试各个模块的计划和要点列出:
1、借阅书籍功能,输入图书编号错误,按回车键则会弹出图书编号错误对话框,点击借阅按钮则会弹出图书借阅成功对话框.
2、归还书籍功能,归还书籍时确定书名书号符合不符合。
点击还书按钮会弹出归还成功对话框。
归还书籍功能
3、借阅超时功能,数据库borrowbook(借书表)表中的“应还日期”字段中的时间与当前时间相比较,若比当前时间早则说明该书借阅超时,那么该条记录将在此被显示出来。
下面是测试的几种情况,首先是借阅书籍功能的测试,输入图书证号“0001”后点击查看按钮,可显示该读者信息,若输入图书证号错误,点击查看按钮则会弹出借书证错误对话框。
输入图书编号“0000003”按回车键,可显示该图书信息,若输入图书编号错误,按回车键则会弹出图书编号错误对话框所示。
点击借阅按钮则会弹出图书借阅成功对话框。
借阅书籍功能的具体实现。
图5-1借书证、图书编号错误图
图5-2借阅书籍图
归还书籍功能,输入图书编号“0000003”点击回车键,则该界面右侧会显示借书者的信息,若图书编号错误则会弹出图书编号错告对话框。
点击还书按钮会弹出归还成功对话框。
归还书籍功能的具体实现。
图5-3图书名字错误
图5-4归还图书
借阅超时功能数据库borrowbook(借书表)表中的“应还日期”字段中的时间与当前时间相比较,若比当前时间早则说明该书借阅超时,那么该条记录将在此被显示出来。
借阅超时功能具体实现。
图5-5过期图书信息图
5.2问题探讨
连接数据库是思路不够清晰,导致连接数据库出现问题,在初期的开发过程中,这样的问题困扰我很久,后来查询资料发现数据库的连接和对应数据的操作是有一定的思路的,需要打开,操作,然后关闭。
在有思路的情况下,后面的编写工作也变得相对比较容易了。
由此发现,编写代码时,思路很重要,没有思路,整个系统开发会相当费时费力。
在程序中我主要用了awt包和swing包,界面排版主要用轻量级容器box来实现,页面位置、大小是通过设置setbounds来控制的。
我不但成功的连接了数据库,也成功实现了很多功能:
在管理员方面实现了管理员登陆、管理日志、管理员添加、管理员切换四个功能,在读者管理方面实现了读者添加、读者修改、读者查询、读者删除四个功能,在书籍管理方面实现了新书入库、书籍查询两个功能,在书籍借阅与归还方面实现了借阅书籍、归还书籍两个功能,在借阅超时方面也成功实现了此功能。
在众多功能中刚开始时借阅书籍方面出了问题,但最后在我认真思考、仔细研究下终于改正了错误,使此功能终于可以正常使用了。
六、课设总结与体会
这次的课程设计可以看作是一次理论与实践相结合的桥梁,通过这次的课程设计,我学习到了许多的知识,也认识到了自己目前的不足,那就是缺乏相应的知识与经验,所以在运用和操作方面都不是那么的得心应手。
但是,经过这段时间对相关书籍的阅读和分析,我组顺利的完成了设计,我还明白了在编写程序的时候,应该尽量使界面简洁大方,布局统一。
变量类型的定义,一定要够用就好,这样程序就可以尽可能的减少对系统资源的占用。
在设计时也免不了存在着一些不足,所以在今后的学习中我会努力取得更大的进步,对于我不足的地方希望老师能够及时给予批评,以便我在今后的学习或工作中能够及时的改正。
总之,这次课程设计为我提供了与众不同的学习方法,在书本中面对现实,为我将来在社会上立足提供了良好的前提。
在这次课程设计中我通过努力完成了任务,学习到了很多知识。
虽然只是短短的几天时间,可是在这几天我把课堂里老师讲的知识用到实践中去了,感到非常高兴。
在这次课设中我不仅学到了知识,还锻练了自己动手去做一些东西的能力,在这次课设中我真正体会到了动手实践的重要性,这对我以后的工作有很大的帮助。
七、致谢
课程设计虽然结束了,但我感觉要想把课程设计做好,那必须把基础知识学透彻,当然更离不开老师的指导,因为老师的教导是做有用的。
人生有数,学无止境,学习生活是无穷尽的,只有掌握更多的、更新的知识才能使自己始终立于不败之地。
如果只为现在所取得的成绩而沉浸于喜悦、骄傲之中的话,那么,我想我不会前进,只能停留在原来的地方,甚至还会倒退。
所以我应该从这几天的课程设计中所暴露出的问题入手,不断完善自己的欠缺和不足。
相信此次课程设计为我以后继续从事计算机工作打下了扎实的基础,也明确了以后的学习方向。
虽然这几天的时间很短暂,但是我相信在这次课程设计中学到的东西会是我永远的珍藏。
最后再次感谢在课程设计过程中给予我帮助的老师和同学们,他们的帮助不仅使我开阔了视野,拓宽了思路,增长了学识,为我今后的工作和学习打下了牢固的基础,也使我增强了对系统开发的兴趣,特别是Java语言的系统开发。
在这里再一次表示衷心的感谢。
八、参考文献
[1]耿祥义.JAVA2实用教程.北京:
清华大学出版社,2006
[2]朱仲杰.JAVA2全方位学习.北京:
机械工业出版社,2006
[3]张思民.JAVA程序设计实践教程.北京:
清华大学出版社,2006
[4]汤一平.Java语言程序设计.北京:
科学出版社,2006
[5]刘艺.Java程序设计大学教程.北京:
机械工业出版社,2006
[6]耿祥义.Java课程设计.北京:
清华大学出版社,2003
[7]SharonZakhour.Java教程.北京:
人民邮电出版社,2007
九、附录
主要程序代码如下:
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==itemAdmiqh)
{
this.dispose();
Inwinin=newIn("系统登陆");
}
if(e.getSource()==itemtc)
{
System.exit(0);
}
if(e.getSource()==itemAdmixj)
{
CreatAdmicreatAdmi=newCreatAdmi("管理员添加");
}
if(e.getSource()==itemAdmirz)
{
WinTablewintable=newWinTable("管理日志");
}
if(e.getSource()==itemBookrk)
{
AddInfyaddInfy=newAddInfy();
}
if(e.getSource()==itemPersonlr)
{
Winpersonaddwinperson=newWinpersonadd("读者添加");
}
if(e.getSource()==itemPersoncx)
{
Winpersonsearchwinperson=newWinpersonsearch("读者信息查询");
}
if(e.getSource()==itemPersonxg)
{
Winpersonmodifywinperson=newWinpersonmodify("读者信息修改");
}
if(e.getSource()==itemPersonsc)
{
Winpersondeletewinperson=newWinpersondelete("读者删除");
}
if(e.getSource()==itemBookcx)
{
Windowjjok=newWindowjj();
}
if(e.getSource()==itemchaoshi)
{
daywin=newday();
}
if(e.getSource()==itemBorrowjs)
{
Borrowbookwin=newBorrowbook();
}
if(e.getSource()==itemBorrowhs)
{
Returnbookwin=newReturnbook();
}
}
WinTable(Strings)
{
super(s);
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundExceptione)
{System.out.println(""+e);
}
try{con=DriverManager.getConnection("jdbc:
odbc:
sun","123","123");
sql=con.createStatement();
rs=sql.executeQuery("SELECT*FROMAdmirz");
while(rs.next())
{
k++;
}
}
catch(SQLExceptione)
{System.out.println(""+e);
}
try{con=DriverManager.getConnection("jdbc:
odbc:
sun","123","123");
sql=con.createStatement();
rs=sql.executeQuery("SELECT*FROMAdmirz");
a=newObject[k][6];
while(rs.next())
{
for(intj=0;j<6;j++)
{
if(j<5)
a[i][j]=rs.getString(j+1);
else
{
a[i][j]=rs.getDouble(j+1);
i++;
}
}
}
con.close();
}
catch(SQLExceptione)
{System.out.println(""+e);
}
table=newJTable(a,name);
Containercon=getContentPane();
getContentPane().add(newJScrollPane(table),BorderLayout.CENTER);
setBounds(120,125,700,500);
setVisible(true);
validate();
addWindowListener(newDisposeListener());
}
}
publicvoidactionPerformed(ActionEventc)
{
Stringb=textUser.getText();
Stringd=textPassword1.getText();
Stringg=textPassword2.getText();
if(c.getSource()==buttonqk)
{textUser.setText(null);
textPassword1.setText(null);
textPassword2.setText(null);
}
if(c.getSource()==buttonEnter||c.getSource()==textPassword2)
{
if(b.length()<3||b.length()>10)
{
JOptionPane.showMessageDialog(null,"用户名应在3~10个字符之间");
textUser.setText(null);
}
else
{
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundExceptione)
{System.out.println(""+e);
}
try{con=DriverManager.getConnection("jdbc:
odbc:
sun","123","123");
sql=con.createStatement();
rs=sql.executeQuery("SELECT*FROMAdmiWHERE用户名="+"'"+b+"'");
if(rs.next())
{
Stringuser=rs.getString
(1);
if(b.equals(user))
{
JOptionPane.showMessageDialog(null,"此管理员已被注册","警告",JOptionPane.WARNING_MESSAGE);
}
}
else
{
if(d.equals(g))
{
sql.executeUpdate("INSERTINTOAdmiVALUES"+"("+"'"+b+"'"+","+"'"+d+"'"+")");
this.dispose();
JOptionPane.showMessageDialog(null,"管理员注册成功");
}
elseJOptionPane.showMessageDialog(null,"两次输入密码不一致","警告",JOptionPane.ERROR_MESSAGE);
}
con.close();
}
catch(SQLExceptione)
{System.out.println(""+e);
}
}}
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==button1)//添加
{
Stringch=text1.getText();
if(ch.length()!
=5){
JOptionPane.showMessageDialog(null,"请输入5位图书证号!
");
text1.setText(null);
}
else{
……//连接数据库
Stringnumber,name,sex,dept,classes,record,insertStr;
number=text1.getText();
name=text2.getT