《高级语言程序设计》课程设计报告--图书馆信息管理.docx
高级语言程序设计课程设计报告课题名称:图书馆信息管理目录第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图书信息增加的实现83. 3图书信息检索的实现9第4章程序测试及分析12第5章总结18参考文献19第1章课题概述本次图形界面课程设计的题目是设计并实现图书信息的更新、删除、增加、排序及检索。Ll课题的目的以前的图书馆对图书的管理采取手工方法。手工管理时,读者要保留读者证、借书证,看书、借书手续繁多,容易出错,并且读者手上证件太多容易丢失。丢失后挂失同样手续繁多,并且借书的证件易被盗用,造成读者的经济损失。借书、还书、挂失也会给图书管理人员造成很大的混乱。引入计算机进行管理图书馆,可以大大提高工作人员的工作效率,方便读者借书、还书、续借、查询,并且挂失方便高效,消除图书馆以前的混乱局面,使图书馆管理有序化,高效化。图书相关信息包括:ISBN、书名、作者、译者、出版日期、价格、分类号、出版社。1.2课题的要求添加、删除、修改图书的基本信息。图书馆管理人员可以浏览、查询、添加图书的基本信息及删除图书的基本信息,能实现对图书信息的管理和统计。(1)图书信息的具体存储可以采用流写入文件的方式,并且要求每一次对信息的操作后都再将修改过后的(2)一般情况下,图书管理员必须通过登陆自己的账号来实现对图书信息的相关更改。(3)可以通过图书名称、作者的名字查询完整的图书信息,要求精确查询。(4)图书馆管理员可以实现图书信息的更新。(5)图书馆管理员可以实现图书信息的增加。(6)图书馆管理员可以实现图书信息的删除。(7)图书馆管理员可以实现图书信息的浏览。第2章概要设计2.1 整个程序的模块结构及流程根据课题要求,整个程序按功能可划分为图书信息更新、增加、删除及浏览四个主要模块。除上述主要功能模块之外,为更好地提供程序的人机交互能力,程序还应提供退出程序、重置、异常处理、排序及检索等辅助模块。程序各功能模块的划分及主要流程如图2-1所示。开始登陆注册菜单结束图2-1整个程序各功能模块间的流程2.2 窗口面板布局问题2.2.1登陆界面的布局此界面共分为三个主要部分:北部面板、中部面板、南部面板,所以需要先定义一个Container,并且使他显示在桌面的中间。中部面板在布局的过程中个人感觉中部面板的实现比较麻烦一些因为要使“用户名:”、“密码:”这两个标签左对齐,连同后面要求用户输入的账号和密码共四个部分居中显示,这就增加了难度。所以中部面板需要采用GridLayOUt(2,1)的网格布局来实现,再分成两个JPane1,每一行是一个JPaneI,并且两个JPanel都采用FlowLayout布局实现。北部面板较为简单,使用图片,定义为uJLabelnorth=newJLabel();,0南部面板两个按钮:登陆、注册。小技巧:south.SetLayout(newFIoWLayOUt(FloWLayoUt.CENTER,18,10);18控制两个按钮的距离,10是按扭距离下边界的距离。2.2.2图书馆管理系统主页面因为是主页面,所有的功能按钮都排布在这个界面上,所以用到菜单选项川enu,其中基础信息修改是主要也是核心按钮,他的下拉菜单包括信息更新、信息删除、信息增加、信息浏览,均已按钮的形式呈现在下拉项里。2.2.3图书信息浏览主要难点是表格的设计与优化,添加组件,更换新的布局方式可使界面更加友好。如采用BorderLayoutO布局使表格随着窗体的变化而变化,添加滑动组件,2.2.4图书信息检索要求能同时显示所有与之相关的信息,所以应该用一个JTabIe显示出来。2.2.5图书信息增加主要是利用GridlayoUt()布局。2.2.6图书信息删除主要是利用GriCnayoUt()布局。2. 2.7图书信息更新主要是利用GridIayOUt()布局。2.3各个图书信息操作的描述2.3.1图书信息更新首先判断输入的信息是否完全,即要求各个文本框输入的字符串的长度都大于零,如果判断为假,则会报出“信息输入不完整”的错误;如果判断为真,则进入下一循环:判断图书信息库中是否含有所输入ISBN码,若含有,定义一个bookinfo类型的对象,将输入的所有信息赋给相应在b中存在的位置,然后删除集合中旧的图书信息,将新定义并已经赋值的对象b添加到集合中,最后保存一下,这样就实现了点击确定可完成对图书信息的更新功能,若不含有则会报出“此书不存在!”的错误,上述所有的程序运行完后,都会将输入的信息清空,以便下一次更新操作。具体的过程如图2-2图2-2信息更新2.3.2图书信息增加首先判断输入的信息是否完全,即要求各个文本框输入的字符串的长度都大于零,如果判断为假,则会报出“信息输入不完整”的错误;如果判断为真,则进入下一循环:判断图书信息库中是否含有所输入ISBN码,若含有,则爆出异常情况“此书已存在!”;如不存则执行添加命令。具体的过程如图2-3图2-3图书信息排序2.3.3图书信息删除操作首先判断输入的信息是否完全,即要求各个文本框输入的字符串的长度都大于零,如果判断为假,则会报出“信息输入不完整”的错误;如果判断为真,则进入下一循环:判断图书信息库中是否含有所输入ISBN码,若不含有,则爆出异常情况“此书不存在!”;如存在所输入的ISBN,则将此集合删除,最后保存一下,跳出信息提示“已删除成功!",这样就实现了点击确定可完成对图书信息的删除功能。上述所有的程序运行完后,都会将输入的信息清空,以便下一次删除操作。2.3.4图书信息检索图书信息检索可以分为按“书名”进行的检索、按作者进行的检索,所以事先定义一个ChoiCe类型的下拉框下拉框内容为书名、作者,当管理员点击书名时,在后面的文本框输入要检索的书的名字,点一下确定即可跳出一个含表格的窗口,表格里面所列的书即是用户想要检索的书,由于是按书名来检索的,所以只要是符合输入书名的所有书籍都会被列在表格内;其内部程序是这样实现的:如果原集合中有符合文本框所输入的信息,则定义一个二维数组,目的是为了方便将所有检索到的信息添加到表格中。2.3.5图书信息排序图书信息检索可以分为按“ISBN”进行的排序、按“分类号”进行的排序,所以事先定义一个ChOiCe类型的下拉框下拉框内容为ISBN、分类号,当管理员点击ISBN时,点击下后面的确定按钮,即可实现按ISBN由大到小的排序功能;其内部程序是这样实现的:首先写一个冒泡排序法其中定义i和j,其中i控制第i个集合,j控制第j个集合,并使用parselnt方法将字符串转换为int类型的整数(前提是输入的字符串全部是数字),冒泡排序法的原理是这样的:将转换出的整型数字相比较,以ISBN为例,默认为j<I,如发现第j个集合的ISBN小于第i集合的ISBN,则通过事先定义好的第三个String类型的标识符将i、j集合里的ISBN互换,完了再调用下getArray()这个方法,此方法参数类型是集合,方法的返回值类型是二维数组,最后将二维数组添加到表格中,由此实现图书信息按照ISBN排序的功能;按照“分类号”排序的功能实现原理亦然。第3章程序功能的实现3.1图书信息更新的实现图书信息更新的代码实现如下:/动作监听器publicvoidactionPerformed(ActionEventel)if(el.getSource()=yes)/更新的确定按钮if(ma.getText().length()>O&&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;i<add.Message.size()-1;i+)/遍历集合if(add.Message.get(i).ma.equals(ma.getText()/将文本框输入的信息挨个赋值给对象newMessagebookinfonewMessage=newbookinfoO;newMessage.ma=ma.getText();newMessage.bookname=bookname.getText();newMessage.trsler=trsler.getText();newMessage.date=date.getText();newMessage.publish=publish.getText();newMessage.price=price.getText();newMessage.auther=auther.getText();newMessage.kind=kind.getTextO;add.Message.remove(i);add.Message.add(newMessage);add.save();JOptionPane.ShowMessageDialog(this,"成功");break;elseJOptionPane.ShowMessageDialog(this,”此书不存在!,);break;)elseJOptionPane.ShowMessageDialog(this,”信息输入不全!");)将文本框信息清空ma.SetText("");bookname.setText("");trsler.setText(,");date.setText("");publish.setText("");price.setText(,");auther.setText(");kind.setText("");elseif(el.getSource()=out)dispose();/点击关闭按钮退出3.2图书信息增加的实现图书信息增加的代码实现如下:/动作监听器publicvoidactionPerformed(ActionEvente)bookinfob=null;if(e.getSourceO=add)if(ma.getText().length()>O&&bookname.getText().length()>O&&trsler.getTextO.length()>O&&date.getText().length()>O&&publish.getText().length()>O&&price.getText().length()>O&&auth