《《高级语言程序设计》课程设计报告--图书馆信息管理.docx》由会员分享,可在线阅读,更多相关《《高级语言程序设计》课程设计报告--图书馆信息管理.docx(21页珍藏版)》请在课桌文档上搜索。
1、高级语言程序设计课程设计报告课题名称:图书馆信息管理目录第1章课题概述1Ll课题的目的11.2课题的要求1第2章概要设计22.1整个程序的模块结构及流程22.2窗口面板布局问题22.2.1登陆界面的布局22.2.2图书馆管理系统主页面32.2.3图书信息浏览32.2.4图书信息检索32.2.5图书信息增加32.2.6图书信息删除32.2.7图书信息更新32. 3各个图书信息操作的描述32.1.1 图书信息更新32.1.2 图书信息增加42.1.3 图书信息删除操作52.1.4 图书信息检索52.1.5 图书信息排序6第3章程序功能的实现73. 1图书信息更新的实现73. 2图书信息增加的实现8
2、3. 3图书信息检索的实现9第4章程序测试及分析12第5章总结18参考文献19第1章课题概述本次图形界面课程设计的题目是设计并实现图书信息的更新、删除、增加、排序及检索。Ll课题的目的以前的图书馆对图书的管理采取手工方法。手工管理时,读者要保留读者证、借书证,看书、借书手续繁多,容易出错,并且读者手上证件太多容易丢失。丢失后挂失同样手续繁多,并且借书的证件易被盗用,造成读者的经济损失。借书、还书、挂失也会给图书管理人员造成很大的混乱。引入计算机进行管理图书馆,可以大大提高工作人员的工作效率,方便读者借书、还书、续借、查询,并且挂失方便高效,消除图书馆以前的混乱局面,使图书馆管理有序化,高效化。
3、图书相关信息包括:ISBN、书名、作者、译者、出版日期、价格、分类号、出版社。1.2课题的要求添加、删除、修改图书的基本信息。图书馆管理人员可以浏览、查询、添加图书的基本信息及删除图书的基本信息,能实现对图书信息的管理和统计。(1)图书信息的具体存储可以采用流写入文件的方式,并且要求每一次对信息的操作后都再将修改过后的(2)一般情况下,图书管理员必须通过登陆自己的账号来实现对图书信息的相关更改。(3)可以通过图书名称、作者的名字查询完整的图书信息,要求精确查询。(4)图书馆管理员可以实现图书信息的更新。(5)图书馆管理员可以实现图书信息的增加。(6)图书馆管理员可以实现图书信息的删除。(7)图
4、书馆管理员可以实现图书信息的浏览。第2章概要设计2.1 整个程序的模块结构及流程根据课题要求,整个程序按功能可划分为图书信息更新、增加、删除及浏览四个主要模块。除上述主要功能模块之外,为更好地提供程序的人机交互能力,程序还应提供退出程序、重置、异常处理、排序及检索等辅助模块。程序各功能模块的划分及主要流程如图2-1所示。开始登陆注册菜单结束图2-1整个程序各功能模块间的流程2.2 窗口面板布局问题2.2.1登陆界面的布局此界面共分为三个主要部分:北部面板、中部面板、南部面板,所以需要先定义一个Container,并且使他显示在桌面的中间。中部面板在布局的过程中个人感觉中部面板的实现比较麻烦一些
5、因为要使“用户名:”、“密码:”这两个标签左对齐,连同后面要求用户输入的账号和密码共四个部分居中显示,这就增加了难度。所以中部面板需要采用GridLayOUt(2,1)的网格布局来实现,再分成两个JPane1,每一行是一个JPaneI,并且两个JPanel都采用FlowLayout布局实现。北部面板较为简单,使用图片,定义为uJLabelnorth=newJLabel();,0南部面板两个按钮:登陆、注册。小技巧:south.SetLayout(newFIoWLayOUt(FloWLayoUt.CENTER,18,10);18控制两个按钮的距离,10是按扭距离下边界的距离。2.2.2图书馆管理
6、系统主页面因为是主页面,所有的功能按钮都排布在这个界面上,所以用到菜单选项川enu,其中基础信息修改是主要也是核心按钮,他的下拉菜单包括信息更新、信息删除、信息增加、信息浏览,均已按钮的形式呈现在下拉项里。2.2.3图书信息浏览主要难点是表格的设计与优化,添加组件,更换新的布局方式可使界面更加友好。如采用BorderLayoutO布局使表格随着窗体的变化而变化,添加滑动组件,2.2.4图书信息检索要求能同时显示所有与之相关的信息,所以应该用一个JTabIe显示出来。2.2.5图书信息增加主要是利用GridlayoUt()布局。2.2.6图书信息删除主要是利用GriCnayoUt()布局。2.
7、2.7图书信息更新主要是利用GridIayOUt()布局。2.3各个图书信息操作的描述2.3.1图书信息更新首先判断输入的信息是否完全,即要求各个文本框输入的字符串的长度都大于零,如果判断为假,则会报出“信息输入不完整”的错误;如果判断为真,则进入下一循环:判断图书信息库中是否含有所输入ISBN码,若含有,定义一个bookinfo类型的对象,将输入的所有信息赋给相应在b中存在的位置,然后删除集合中旧的图书信息,将新定义并已经赋值的对象b添加到集合中,最后保存一下,这样就实现了点击确定可完成对图书信息的更新功能,若不含有则会报出“此书不存在!”的错误,上述所有的程序运行完后,都会将输入的信息清空
8、,以便下一次更新操作。具体的过程如图2-2图2-2信息更新2.3.2图书信息增加首先判断输入的信息是否完全,即要求各个文本框输入的字符串的长度都大于零,如果判断为假,则会报出“信息输入不完整”的错误;如果判断为真,则进入下一循环:判断图书信息库中是否含有所输入ISBN码,若含有,则爆出异常情况“此书已存在!”;如不存则执行添加命令。具体的过程如图2-3图2-3图书信息排序2.3.3图书信息删除操作首先判断输入的信息是否完全,即要求各个文本框输入的字符串的长度都大于零,如果判断为假,则会报出“信息输入不完整”的错误;如果判断为真,则进入下一循环:判断图书信息库中是否含有所输入ISBN码,若不含有
9、,则爆出异常情况“此书不存在!”;如存在所输入的ISBN,则将此集合删除,最后保存一下,跳出信息提示“已删除成功!,这样就实现了点击确定可完成对图书信息的删除功能。上述所有的程序运行完后,都会将输入的信息清空,以便下一次删除操作。2.3.4图书信息检索图书信息检索可以分为按“书名”进行的检索、按作者进行的检索,所以事先定义一个ChoiCe类型的下拉框下拉框内容为书名、作者,当管理员点击书名时,在后面的文本框输入要检索的书的名字,点一下确定即可跳出一个含表格的窗口,表格里面所列的书即是用户想要检索的书,由于是按书名来检索的,所以只要是符合输入书名的所有书籍都会被列在表格内;其内部程序是这样实现的
10、:如果原集合中有符合文本框所输入的信息,则定义一个二维数组,目的是为了方便将所有检索到的信息添加到表格中。2.3.5图书信息排序图书信息检索可以分为按“ISBN”进行的排序、按“分类号”进行的排序,所以事先定义一个ChOiCe类型的下拉框下拉框内容为ISBN、分类号,当管理员点击ISBN时,点击下后面的确定按钮,即可实现按ISBN由大到小的排序功能;其内部程序是这样实现的:首先写一个冒泡排序法其中定义i和j,其中i控制第i个集合,j控制第j个集合,并使用parselnt方法将字符串转换为int类型的整数(前提是输入的字符串全部是数字),冒泡排序法的原理是这样的:将转换出的整型数字相比较,以IS
11、BN为例,默认为jO&bookname.getText().length()O&trsler.getText().length()O&date.getText().length()O&publish.getText().length()O&price.getText().length()O&auther.getText().length()O&kind.getText().length()O)/判断输入的信息是否全面for(inti=O;iO&bookname.getText().length()O&trsler.getTextO.length()O&date.getText().length
12、()O&publish.getText().length()O&price.getText().length()O&auther.getText().length()O&kind.getText().length()O)for(inti=O;iMessage.size();i+)if(ma.getText()!=Message.get(i).ma)b=newbookinfo(ma.getTextO,bookname.getText(),trsler.getText(),date.getText(),publish.getText(),price.getText(),auther.getText
13、(),kind.getText();Message.add(b);/将类放到集合中save();/保存JOptionPane.ShowMessageDialog(this,”添加成功!,);break;elseJOptionPane.ShowMessageDialog(this,”此书已存在!);break;)elseJOptionPane.ShowMessageDialog(this,信息输入不完整!”);)ma.setText(,);bookname.setText();trsler.setText();date.setText(,);publish.setText;price.setTe
14、xt();anther.setText();kind.setText();elseif(e.getSource()=close)/dispose();dispose();)33图书信息检索的实现图书信息检索的主体代码实现如下:publicclasssearchendextendsJDialogpublicsearchend()Containerv=this.getContentPane();List1=newArrayListO;/定义一个对象,里面封装图书信息JTableendjtabel;Stringstr二ISBN,书名,译者,出版日期,出版社”,价格,作者”,分类号;for(intj=
15、0;j0;i一)控制第i个集合for(intj=0;jInteger.parselnt(add.Message,get(j).ma)/如果后面的大于前面的/则交换顺序Stringkindl;Stringmal;Stringautherl;Stringpublishl;Stringtrslerl;Stringdatel;Stringpricel;Stringbookname1;/相当于装满油的桶,和装满水的桶,互换的时候,需要一个空的桶。temp现在就是那个空桶kindl=add.Message,get(i).kind;add.Message,get(i).kindadd.Message,get
16、(j).kind;add.Message,get(j).kind=kindl;mal=add.Message,get(i).ma;add.Message,get(i).ma-add.Message,get(j).ma;add.Message,get(j).ma=mal;autherl=add.Message,get(i).auther;add.Message,get(i).auther=add.Message,get(j).auther;add.Message,get(j).auther=autherl;publishl=add.Message,get(i).publish;add.Messa
17、ge,get(i).publish-add.Message,get(j).publish;add.Message,get(j).publish=publishl;trslerl=add.Message,get(i).trsler;add.Message,get(i).trsler-add.Message,get(j).trsler;add.Message,get(j).trsler=trslerl;datel=add.Message,get(i).date;add.Message,get(i).date-add.Message,get(j).date;add.Message,get(j).da
18、te=datel;pricel=add.Message,get(i).price;add.Message,get(i).price=add.Message,get(j).price;add.Message,get(j).price=pricel;bookname1=add.Message,get(i).bookname;add.Message,get(i).bookname=add.Message,get(j).bookname;add.Message,get(j).bookname=bookname1;第4章程序测试及分析运行程序,首先显示图书馆管理界面登陆界面。由于文件中已经预设密码为12
19、3456(并且用*显示),用户名为ZhangyU,所以只要点击登陆即可,也可注册新用户然后登陆。图4-1所示,是对预设密码账户的检验。图4-1预设密码账户登陆输入新的用户名和密码来进行登陆画图书馆管理系统登录一口图4-2注册密码账户登陆主页面主要是各种功能的按钮的排布,点击相应的按钮可以实现相应的功能。图4-3登陆主页面以图书条形码1111111111为例实现添加的效果,点击确定按钮后再次打开图书排序与查询按钮可以看到被加入的图书信息显示在窗体的表格中。图排序与籁帐:缪VU嵯tt枪索:I榴UII 审定;图4-4图书信息增加以图书条形码“6541”、作者“张三”为例实现删除的效果,点击确定按钮后
20、再次打开图书排序与查询按钮可以看到被删除的图书信息不显示在窗体表格中。信息删除IMraIiR-1Be消息删除成功!确定图45图书信息删除以图书条形码“65416”为例实现图书信息更新的效果,点击确定按钮后再次打开图书排序与查询按钮可以看到被更新的图书信息显示在窗体表格中。ISBN书名译者出版日期的的12015.6i541金仃的.2000,654明天李小璐2004.6z65风尹与2010.6,6平凡的尹与2012.66552惊妈尹与2015.6;6541653阿哥尹与2015.6:6541645挡风城尹与2015.665416.经济说法李刚2015.6|一一一,一6541旅行的尹与2000654
21、明天李小璐2004.665风尹与2010.66平凡的:尹与2012.66552惊湍尹与2015.6信息浏览排序:不类号检索:书名V2015.6信息浏览ISBN 书名译者出版日野排序65416j经济说法谭刚2015.6冠凰出53尹百565416入名出时)张岱英6516541653帆哥;尹与图4-6图书信息更新点击下拉选择框中的“分类号”,点击确定按钮,可以看到窗体中的分类号一栏数字大小按照从大到小的顺序排列。点击下拉选择框中的“ISBN”,点击确定按钮,可以看到窗体中的ISBN一栏数字大小按照从大到小的顺序排列。ffi排序与查询排序:分类号T确定检索:书名w二)匚手定信息浏览ISBN修者出版日期
22、出版社伯格作者分类号65416.隆济说法李刚2015.6凤凰出53尹与5654166平凡的尹与2012.6长存出.53张建545326541653阿哥尹与2015.6大连出53尹与5205411111.华夏文明张度2001华夏出165张度4165165416时间张岱莫2000人名出时间张岱英551654明天李小璐2004.6人民出53王五5736552惊魂尹与2015.6济南出53尹与54565风尹与2010.6人民出53赵六556541645挡风城尹与2015.6清华出53尹与544_力峋排序与查询.:IlSBNVl碉定松素:和SV睇E信自测觉IS8N65416452交齐说法5541653喝
23、5541645纲坡55416盼的盘义5552亨鸦5541丧行的意义654肽55S.WW尹与尹与2015.62015.62015.6国华出版社|532015.6|人民出版社|532015济南出版社532000人民出版社叵2004.6R532010.6|人民出版社532016 lgH 53作者与与与与与三五六 国同声串河掰ii分类号 犯乂 16 52054 54- 52- 545 587 573 55 54532-图4-7图书信息排序点击下拉选择框中的“作者”,输入想要查询的书的作者,点击确定按钮,可以看到跳出的窗体显示的是想要查询的书的全部信息。图4-8图书信息检索17图书馆管理界面第5章总结通
24、过一周的课程设计,终于独立写出了近1300行代码的程序,还学会了自己布局和异常处理的方法。更重要的是通过这次实践,加深了我对各种分支循环相关知识的理解。总结起来,主要有以下几点体会:1想学好Java,基础知识一定要扎实。编程的过程中遇到一些问题后,即使知道问题出在哪里,还是无法自己解决,这个原因就是因为自己基础知识不牢固,导致在实际运用中感到很吃力,比如将字符串转换为整数类型,只记得有一个方法是可以用的,但具体哪个方法就忘得一干二净了,后来通过上网查资料知道了Integer.parselnt()这个方法;再如ifelsebreak语句,如果把此语句放在for循环中而不加break,则可能会跳出
25、多个相同的结果,加上break就只会得到一个结果。2、程序的编写过程,是对人的一种思维逻辑的考验,你必须像机器一样有逻辑的去运行自己的大脑,不要想当然的以为是这样或那样运行,程序运行是一个非常严谨的过程。编程是一件需要长时间调试运行、不断完善直至完美的过程。编写程序,特别是编写功能庞大,且逻辑结构较为复杂的程序,不要妄想一口气将所有的功能都非常完美地实现。一般是先将整个程序的框架(主函数,以及各个主要模块的函数头)先搭建起来,再尝试着按预定的算法先去实现那些最底层的被调函数,然后由底层向上层依次实现各个函数的功能。必要的时候,通过设置断点和单步调试的方式,及时验证当前已完成的代码是否能按照预定算法的思路来执行,如SyStem.out.printin(),如果不能,则说明已完成的代码中存在语义错误,需要先解决这些错误之后再继续往下编写。感谢在此过程中帮助过我的指导老师王中华和各位同学!参考文献LlJ明日科技编著.Java从入门到精通.第三版.北京:清华大学出版社,2012.92JaVa课程设计