《高级语言程序设计》课程设计报告-图书馆信息管理_第1页
《高级语言程序设计》课程设计报告-图书馆信息管理_第2页
《高级语言程序设计》课程设计报告-图书馆信息管理_第3页
《高级语言程序设计》课程设计报告-图书馆信息管理_第4页
《高级语言程序设计》课程设计报告-图书馆信息管理_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《高级语言程序设计》课程设计报告课题名称:图书馆信息管理目录第1章课题概述 第1章课题概述本次图形界面课程设计的题目是设计并实现图书信息的更新、删除、增加、排序及检索。1.1课题的目的以前的图书馆对图书的管理采取手工方法。手工管理时,读者要保留读者证、借书证,看书、借书手续繁多,容易出错,并且读者手上证件太多容易丢失。丢失后挂失同样手续繁多,并且借书的证件易被盗用,造成读者的经济损失。借书、还书、挂失也会给图书管理人员造成很大的混乱。引入计算机进行管理图书馆,可以大大提高工作人员的工作效率,方便读者借书、还书、续借、查询,并且挂失方便高效,消除图书馆以前的混乱局面,使图书馆管理有序化,高效化。图书相关信息包括: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)的网格布局来实现,再分成两个JPanel,每一行是一个JPanel,并且两个JPanel都采用FlowLayout布局实现。北部面板较为简单,使用图片,定义为“JLabelnorth=newJLabel();”。南部面板两个按钮:登陆、注册。小技巧:south.setLayout(newFlowLayout(FlowLayout.CENTER,18,10));18控制两个按钮的距离,10是按扭距离下边界的距离。2.2.2图书馆管理系统主页面因为是主页面,所有的功能按钮都排布在这个界面上,所以用到菜单选项JMenu,其中基础信息修改是主要也是核心按钮,他的下拉菜单包括信息更新、信息删除、信息增加、信息浏览,均已按钮的形式呈现在下拉项里。2.2.3图书信息浏览主要难点是表格的设计与优化,添加组件,更换新的布局方式可使界面更加友好。如采用BorderLayout()布局使表格随着窗体的变化而变化,添加滑动组件,2.2.4图书信息检索要求能同时显示所有与之相关的信息,所以应该用一个JTable显示出来。2.2.5图书信息增加主要是利用Gridlayout()布局。2.2.6图书信息删除主要是利用Gridlayout()布局。2.2.7图书信息更新主要是利用Gridlayout()布局。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个集合,并使用parseInt方法将字符串转换为int类型的整数(前提是输入的字符串全部是数字),冒泡排序法的原理是这样的:将转换出的整型数字相比较,以ISBN为例,默认为j<I,如发现第j个集合的ISBN小于第i集合的ISBN,则通过事先定义好的第三个String类型的标识符将i、j集合里的ISBN互换,完了再调用下getArray()这个方法,此方法参数类型是集合,方法的返回值类型是二维数组,最后将二维数组添加到表格中,由此实现图书信息按照ISBN排序的功能;按照“分类号”排序的功能实现原理亦然。第3章程序功能的实现3.1图书信息更新的实现图书信息更新的代码实现如下://动作监听器 publicvoidactionPerformed(ActionEvente1){ if(e1.getSource()==yes){//更新的确定按钮 if(ma.getText().length()>0&&bookname.getText().length()>0 &&trsler.getText().length()>0 &&date.getText().length()>0 &&publish.getText().length()>0 &&price.getText().length()>0 &&auther.getText().length()>0 &&kind.getText().length()>0){//判断输入的信息是否全面 for(inti=0;i<add.Message.size()-1;i++){//遍历集合 if(add.Message.get(i).ma.equals(ma.getText())){ //将文本框输入的信息挨个赋值给对象newMessage bookinfonewMessage=newbookinfo(); 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.getText(); add.Message.remove(i); add.Message.add(newMessage); add.save(); JOptionPane.showMessageDialog(this,"成功"); break; }else{ JOptionPane.showMessageDialog(this,"此书不存在!"); break; } } }else{ JOptionPane.showMessageDialog(this,"信息输入不全!"); } //将文本框信息清空 ma.setText(""); bookname.setText(""); trsler.setText(""); date.setText(""); publish.setText(""); price.setText(""); auther.setText(""); kind.setText(""); }elseif(e1.getSource()==out){ dispose();//点击关闭按钮退出 } }3.2图书信息增加的实现图书信息增加的代码实现如下: //动作监听器 publicvoidactionPerformed(ActionEvente){ bookinfob=null; if(e.getSource()==add){ if(ma.getText().length()>0&&bookname.getText().length()>0 &&trsler.getText().length()>0 &&date.getText().length()>0 &&publish.getText().length()>0 &&price.getText().length()>0 &&auther.getText().length()>0 &&kind.getText().length()>0){ for(inti=0;i<Message.size();i++){ if(ma.getText()!=Message.get(i).ma){ b=newbookinfo(ma.getText(),bookname.getText(), trsler.getText(),date.getText(), publish.getText(),price.getText(), auther.getText(),kind.getText()); Message.add(b);//将类放到集合中 save();//保存 JOptionPane.showMessageDialog(this,"添加成功!"); break; }else{ JOptionPane.showMessageDialog(this,"此书已存在!"); break; } } }else{ JOptionPane.showMessageDialog(this,"信息输入不完整!"); } ma.setText(""); bookname.setText(""); trsler.setText(""); date.setText(""); publish.setText(""); price.setText(""); auther.setText(""); kind.setText(""); }elseif(e.getSource()==close){ //dispose(); dispose(); } }3.3图书信息检索的实现图书信息检索的主体代码实现如下:publicclasssearchendextendsJDialog{ publicsearchend(){ Containerv=this.getContentPane(); List<bookinfo>l=newArrayList();//定义一个对象,里面封装图书信息 JTableendJtabel; Stringstr[]={"ISBN","书名","译者","出版日期","出版社","价格","作者","分类号"}; for(intj=0;j<add.Message.size();j++){// if(searchxu.search.getSelectedItem()=="作者"){ if(add.Message.get(j).auther.equals(searchxu.searchText .getText())){//比较输入信息与即合理的信息是否相同 l.add(add.Message.get(j));//将第j个集合里的信息添加到add.Message setSize(450,350); Toolkittoolkit=Toolkit.getDefaultToolkit(); DimensionscreenSize=toolkit.getScreenSize(); intx=(screenSize.width-getSize().width)/2; inty=(screenSize.height-getSize().height)/2; setLocation(x,y); setTitle("检索结果"); } } 图书信息冒泡法排序的主体代码实现如下:for(inti=add.Message.size()-1;i>0;i--){//控制第i个集合 for(intj=0;j<i;j++){//控制第j个集合 if(kindISBN.getSelectedItem()=="ISBN"){ if(Integer.parseInt(add.Message.get(i).ma)>Integer .parseInt(add.Message.get(j).ma))//如果后面的大于前面的 //则交换顺序 { Stringkind1; Stringma1; Stringauther1; Stringpublish1; Stringtrsler1; Stringdate1; Stringprice1; Stringbookname1; //相当于装满油的桶,和装满水的桶,互换的时候,需要一个空的桶。temp现在就是那个空桶 kind1=add.Message.get(i).kind; add.Message.get(i).kind=add.Message.get(j).kind; add.Message.get(j).kind=kind1; ma1=add.Message.get(i).ma; add.Message.get(i).ma=add.Message.get(j).ma; add.Message.get(j).ma=ma1; auther1=add.Message.get(i).auther; add.Message.get(i).auther=add.Message.get(j).auther; add.Message.get(j).auther=auther1; publish1=add.Message.get(i).publish; add.Message.get(i).publish=add.Message.get(j).publish; add.Message.get(j).publish=publish1; trsler1=add.Message.get(i).trsler; add.Message.get(i).trsler=add.Message.get(j).trsler; add.Message.get(j).trsler=trsler1; date1=add.Message.get(i).date; add.Message.get(i).date=add.Message.get(j).date; add.Message.get(j).date=date1; price1=add.Message.get(i).price; add.Message.get(i).price=add.Message.get(j).price; add.Message.get(j).price=price1; bookname1=add.Message.get(i).bookname; add.Message.get(i).bookname=add.Message.get(j).bookname; add.Message.get(j).bookname=bookname1; } }第4章程序测试及分析运行程序,首先显示图书馆管理界面登陆界面。由于文件中已经预设密码为123456(并且用*显示),用户名为zhangyu,所以只要点击登陆即可,也可注册新用户然后登陆。图4-1所示,是对预设密码账户的检验。图4-1预设密码账户登陆输入新的用户名和密码来进行登陆图4-2注册密码账户登陆主页面主要是各种功能的按钮的排布,点击相应的按钮可以实现相应的功能。图4-3登陆主页面以图书条形码“1111111111”为例实现添加的效果,点击确定按钮后再次打开图书排序与查询按钮可以看到被加入的图书信息显示在窗体的表格中。图4-4图书信息增加以图书条形码“6541”、作者“张三”为例实现删除的效果,点击确定按钮后再次打开图书排序与查询按钮可以看到被删除的图书信息不显示在窗体表格中。图4-5图书信息删除以图书条形码“65416”为例实现图书信息更新的效果,点击确定按钮后再次打开图书排序与查询按钮可以看到被更新的图书信息显示在窗体表格中。图4-6图书信息更新点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论