Java面向对象课程设计指导书--图书信息管理系统(共45页).doc

上传人:飞****2 文档编号:27120198 上传时间:2022-07-22 格式:DOC 页数:45 大小:1.11MB
返回 下载 相关 举报
Java面向对象课程设计指导书--图书信息管理系统(共45页).doc_第1页
第1页 / 共45页
Java面向对象课程设计指导书--图书信息管理系统(共45页).doc_第2页
第2页 / 共45页
点击查看更多>>
资源描述

《Java面向对象课程设计指导书--图书信息管理系统(共45页).doc》由会员分享,可在线阅读,更多相关《Java面向对象课程设计指导书--图书信息管理系统(共45页).doc(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上湖南科技学院课程设计报告课程名称:面向对象程序设计课程设计课程设计题目:图书信息管理系统系:专 业:年级、班:姓 名:学 号:指导教师:职 称:2012年6月目录摘要-31系统需求分析-32 可行性分析-33 系统设计-43.1系统总体设计-43.2系统流程图-53.3系统详细设计-54 数据库设计-74.1数据库需求分析-74.2数据库概念结构设计-84.3数据库逻辑结构设计-85 编码-96系统测试-377 设计总结-438 参考文献-45摘要数据库是数据管理的最新技术,是计算机科学的重要分支,随着数据库技术深入而广泛的应用,使用数据库技术管理图书信息已经越来越成

2、熟,另一方面,Java Swing在图形界面的开发上应用越来越广泛,综合使用数据库技术与Java Swing编程技术来进行图书信息管理的开发,简单高效。本次课程设计采用“自上而下地总体规划,自下而上地应用开发”的策略开发,通过分析传统命令行界面的不足,创建了一套使用图形界面来进行图书信息管理的方案。文章介绍了图书信息管理系统的系统分析部分,包括可行性分析、业务流程分析等;系统设计部分主要介绍了系统功能设计和数据库设计及代码设计;系统实现部分说明了几个主要模块的算法, 本系统面友好,操作简单,比较实用。关键词:Java Swing、 MySQL、图书信息管理一 系统需求分析为了广大学生学习,开阔

3、学生的视野,大部分学校都设立了图书馆。学生可以根据自己的兴趣爱好,到图书馆借阅自己喜欢的图书,由于图书馆的图书数量众多,利用手工操作管理图书的不仅仅会耗费学生和工作人员大量的时间和精力。效率以及准确性也很低。如何让图书管理更方便更高效,已成为一个重要的问题。利用数据库进行图书信息的管理,不仅仅能够保证准确、无误、快速输出,而且还可以利用数据库对有关信息进行查询,检索迅速、查找方便、可靠性高、存储量大、保密性好。要科学的实现图书信息的信息化管理,开发一个能够进行图书信息存储、查询、修改等功能的图书信息管理系统是十分必要的; 通过调查,要求图书信息管理系统需要有以下功能:1图书信息包括图书编号、书

4、名、作者、出版社、出版日期、图书简介及图书类别等。2 由于操作人员的计算机知识普遍较差,要求有良好的人机界面;3 图书信息修改,支持一次修改多个属性4 方便的图书信息查询,支持多条件查询5图书信息的删除二 可行性分析由于本系统管理的对象单一,都是图书生,且每个数据内容具有较强的关联性,涉及的过程不是很复杂。因此,比较适合于采用数据库管理。在技术难度方面,由于有指导老师的指导和相关参考文献,因此完全可以实现。 本系统的设计是在Windows XP操作系统环境下,使用Java开发而成的。数据库是图书信息管理系统中的重要支持技术,在图书信息管理系统的开发过程中,如何选择数据库是一个重要的问题,本系统

5、采用MySQL数据库来进行图书信息的管理,采用MySQL数据库的理由如下:1 简单 由于本系统的开发是基于本地客户端的,仅仅利用数据库来进行数据的查询,增加,修改,删除,并不涉及数据库的高级操作,如触发器,存储过程,同时,由于本系统是基于本地化的,不涉及网络方面的应用,而MySQL遵循SQL的语法,完全支持标准SQl的各种操作,完全满足上述需要。本系统数据量不是很大,不用使用大型的数据库来存储数据。2 方便 MySQL安装和卸载都很方便,不会出现卸载不干净等问题,同时MySQL提供定制安装,可以满足客户的个性化要求,利用MySQL操作数据也很方便,如果不想在命令行下进行操作,可以利用Navic

6、at Premium在图形界面下操作数据,第三,MySQL完全支持标准SQL的语法,比如Select,Delete,Insert,Update这些常用操作。3 高效 MySQL检索数据速度很快,占用的内存资源很小,对硬件的要求很低,操作时不会出现操作缓慢的问题,在使用MySQL时,用户可以很快的查询到需要的数据。综上所述,MySQL小巧高效,完全满足本系统的需要。三 系统设计3.1 系统总体设计系统开发的总体任务是实现图书信息管理的系统化,规范化和自动化。图书信息管理系统需要完成的功能主要有:图书信息的添加,信息包括图书编号、书名、作者、出版社、出版日期、图书简介及图书类别。图书信息的修改图书

7、信息的删除对上述各功能进行集中、分块、按照结构化程序设计的要求。图书信息管理系统图书信息添加图书信息修改图书信息查询图书信息删除3.2 系统流程图选择操作开始退出系统图书信息添加图书信息修改图书信息删除改图书信息查询结束3.3系统详细设计系统设计的总体任务是实现图书信息管理的系统化,规范化和自动化。要求实现的功能有1图书信息的输入,包括图书编号、书名、作者、出版社、出版日期、图书简介及图书类别等。2 图书信息的查询,包括根据用户的要求实现利用图书编号、书名、作者、出版社、出版日期、图书简介及图书类别等信息的查询。3 图书信息的修改,要求能包括根据用户的要求实现利用图书编号、书名、作者、出版社、

8、出版日期、图书简介及图书类别等信息的修改等首先,考虑到由于操作人员的计算机知识可能较差,要求有良好的人机界面,我决定使用图形界面的方式,采用Java Swing来提供一个表格将图书信息全部显示出来,这样方便用户浏览,当用户对其中的图书信息感兴趣时,可以用鼠标点击表格中的单元格,在表格的下面我提供了一个文件面板,上面放置了很多文本区域,将用户选择的信息全部显示在文本区域中,这样用户可以更加方便的对信息进行添加,修改,删除操作。利用图形界面,提供一个更加友好的方式。用户就不会面对黑乎乎的命令行界面,可以利用鼠标来实现图书信息的修改删除,这样的系统就可以降低对用户的要求,通过将系统的各种功能封装,只

9、是提供给用户一个简单的按钮,用户通过简单的利用鼠标点击按钮,就可以实现各种复杂的操作,这样就可以,提高系统的可用性。 当然 复杂的实现过程对用户来说是不可以见的。第二,考虑到使用图形界面的方式,当有很多数据时,就有必要使用数据库来保存数据了,使用数据库可以很好的利用数据库的海量存储功能,保存信息更加的方便。理由之二是由于本系统管理的对象图书,都是学生,且每个数据内容具有较强的关联性,涉及的过程不是很复杂。因此,比较适合于采用数据库管理。理由之三是因为当对数据进行各种修改操作时,使用数据库可以更加方便的保存用户的各种修改操作。理由之四是将数据库与图形界面向结合能提供一个更加友好的界面。第三,关于

10、图书信息的录入功能,我是在表格下面提供一个面板,在面板上放置很多文本按钮,用户可以在文本区域中录入图书信息,考虑到本系统实现的只是一个很简单的图书信息管理。而对图书来说录入图书编号、书名、作者、出版社、出版日期、图书简介及图书类别就已经足够了,其他的信息对于图书来说就不必要了。在图书信息的录入时,考虑到图书信息的规范性,同时也考虑到实用性,对与图书来说,图书编号一般采用ISBN开头,所以用户在录入图书信息时,也要要求用户对图书额编号采用ISBN开头,ISBN后面的内容用户可以根据自己喜好进行自定义,系统不做具体要求,由于数据表Book采用图书编号作为主键,所以对于用户输入的图书编号必须保证唯一

11、性,唯一性是通过查询数据库来实现的。当图书编号相同时,同时用户编号重复,要求用户重新输入。用户在修改图书信息时要求不能修改图书编号,因为图书编号是主键,在更新图书信息时,是采用判断图书编号信息的来实现图书信息的修改的,关于图书信息的删除,很简单,利用图书主键就可以很快的删除图书信息。最后一点是,在用户选择图书信息时,要求一次只能选择一条图书记录,因为选择多条图书记录不能确定到底显示哪一条数据的信息,这主要是通过设置表格的单选属性实现的。第四,图书信息中包含出版日期,而一般图书日期是采用YYYY-MM-DD的形式,很少采用YYYY-MM-DD-HH-MM-SS形式的,所以出版日期也采用YYYY-

12、MM-DD的形式。而数据库在存储时间格式的数据时,会检测数据的有效性,如果数据错误,就会抛出异常,当出现这样的情况时,用户所做的所有操作将会全部撤销,而且当用户面对一堆错误信息时,往往不知道怎样处理,这样会导致用户的不满意,如果能在用户输入时就开始检测用户输入信息的有效性,就可以将错误消灭在萌芽状态。时间的正确与否是通过判断出版日期的年份,月份,日来实现的,一般来说首先就要判断是否为闰年,闰年的判断是通过判断如果能被四整除同时不能被100整除,或者能整除100,满足时则为闰年,为闰年判断二月天数是否超过29天,不为闰年时则判断2月的天数是否大于28天。其他月份则判断是否有31天这种情况,一般来

13、说1月,3月,5月,7月,8月,10月,12月有31天,所以如果月份为上述值时,日期可以有31天,其他月份最大天数则为30天,同时还有判断用户输入的月份能是否合理,正常情况下,一年有12个月,所以必须判断用户输入的月份是否大于12,还有一种情况是年月日必须大于0,这也是一种对非正常情况的处理,防止恶意用户输入非法数据来实现非法目的,同时也能防止,用户无意间输入了非法数据。第五,判断日期是否正确具有普遍意义,以为在用户修改图书的出版日期,通过出版日期来实现图书信息的查询时,也要判断日期是否合理,所以可以将判断日期合理的功能封装为一个函数,在判断时,直接调用函数就可以了。其中在查询图书信息时,考虑

14、到用户可能利用月份与日来查询信息,所以还必须通过一个利用月份与日来判断时间输入正确与否的函数,也与上面的函数极其相似。这里就不讨论了。第六,在查询图书信息时,要求能利用多种条件来实现复合查询,比如说利用出版时间与图书信息来查询,或者通过出版社与时间来查询,这就要求查询能灵活处理各种情况,既能够使用单关键字来查询,也能够使用多关键字来查询。首先要解决的时如何判断用户的到底是想用单关键字还是使用多关键字来查询,思路是通过提供给用户一个复选框,当用户想使用某个关键字时,可以勾选关键字前面的复选框,从而实现单关键字与多关键字的判断,第二是由于多关键字可以组合出很多中情况,如果一一实现是不可能,同时也是

15、不必要的,所以必须通过通用的查询函数来实现多关键字的查询,思路是通过判断关键字是否为空来实现的,如果关键字不为空就可以增加一个条件来实现多关键字的查询。第七,在通过多关键字的查询时,要求在利用时间来查询时,能够查询小于 大于给点时间的记录,思路是提供一个组合框,将大于,小于,等于,大于等于,小于等于放入组合框中,通过监听组合框选项的变化得到用户的选择,从而实现查询大于,或者小于某个时间范围的记录,而默认查询是查询全部数据的。当然用户根据自己喜好利用多关键字实现复合查询操作第八,在表格中数据很多时,要求能利用表格某列数据为关键字实现对数据的排序,这是利用RowSorter sorter = ne

16、w TableRowSorter(tablemodel);jTable1.setRowSorter(sorter);实现的。最后一点,是在进行图书信息的插入,修改,删除时,要求能显示执行结果,成功或者失败,在操作失败时要求能提供失败信息,主要是通过判断执行语句的返回值是否为真。为真说明执行成功,为假则说明操作失败,这时系统会打印堆栈信息,同时提示用户操作失败。如果操作成功要求能自动刷新,将最新结果显示出来,这主要是通过refresh的事件监听实现的,当操作成功时,重新执行查询操作,查询数据库中最新的结果。并显示出来,以上是基本思路。四 数据库设计4.1数据库需求分析图书基本信息:包括的数据项有

17、:图书编号、书名、作者、出版社、出版日期、图书简介及图书类别图书信息管理系统图书基本信息 数据库图4-1图书信息管理系统数据流程图4.2数据库概念结构设计本系统的实体有:图书实体。具体的描述E-R图如图下所示。图书信息书名图书编号图书简介图书类别作者出版日期出版社图4-2 图书信息图现在需要将上面的数据库概念结构转化为MySQL 数据库系统所支持的实际数据模型,也就是数据库的逻辑结构学生管理系统数据库中数据表的设计结果如下所示。+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| BID | var

18、char(20) | NO | PRI | NULL | | Bname | varchar(20) | NO | | NULL | | Bauthor | varchar(16) | NO | | NULL | | Press | varchar(20) | NO | | NULL | | BInfo | varchar(50) | NO | | NULL | | BDate | date | NO | | NULL | | Bclass | varchar(20) | NO | | NULL | |+-+-+-+-+-+-+表4-3 图书信息表4.3数据库逻辑结构的实现创建图书信息表Cre

19、ate table book(BID varchar(20) primary key,Bname varchar(20) not null ,Bauthor varchar(16) not null ,Press varchar(20) not null ,BInfo varchar(50) not null ,BDate date not null,Bclass varchar(20) not null ,);五 编码5.1源代码及注释/图书类,主要提供setter与getter方法Book.javapublic class Book String BID;/图书编号String Year;

20、/出版时间-年String Month;/出版时间-月String Day;/出版时间-日String Bname;/图书名称String Bauthor;/作者String Press;/出版社String Binfo;/图书信息String Bclass;/图书类别public Book(String bID, String bname,String bauthor, String press,String year, String month, String day, String binfo,String bclass)/带参构造函数BID = bID;Bname = bname;Ba

21、uthor = bauthor;Press = press;Year = year;Month = month;Day = day;Binfo = binfo;Bclass = bclass;/setter getter方法public String getYear() return Year;public void setYear(String year) if(Integer.parseInt(year)0)Year = year;public String getMonth() return Month;public void setMonth(String month) if(Inte

22、ger.parseInt(month)0&Integer.parseInt(month)0&Integer.parseInt(day)=31)Day = day;public String getBname() return Bname;public void setBname(String bname) Bname = bname;public String getBauthor() return Bauthor;public void setBauthor(String bauthor) Bauthor = bauthor;public String getPress() return P

23、ress;public void setPress(String press) Press = press;public String getBinfo() return Binfo;public void setBinfo(String binfo) Binfo = binfo;public String getBclass() return Bclass;public void setBclass(String bclass) Bclass = bclass;public String getBID() return BID;public void setBID(String bID) B

24、ID = bID;/自定义画板类LoginPanel.javaimport java.awt.Graphics;import java.awt.Image;import javax.swing.ImageIcon;import javax.swing.JPanel;public class LoginPanel extends JPanel protected ImageIcon icon;public int width,height;public LoginPanel(String res) super();icon = new ImageIcon(res);width = icon.ge

25、tIconWidth();height = icon.getIconHeight();setSize(width, height);protected void paintComponent(Graphics g) super.paintComponent(g);Image img = icon.getImage();g.drawImage(img, 0, 0,getParent();/实现表格方法类ToTable.javaimport javax.swing.table.DefaultTableModel;import java.sql.ResultSet;import java.sql.C

26、onnection;import java.sql.ResultSetMetaData;import java.util.Vector;import java.util.Collection;public class ToTable private Connection connection = null; private ResultSet rs = null; private ResultSetMetaData rsmd = null; public ToTable() public CollectionVector getTableCollection(String sqlStr) Sy

27、stem.out.println(执行的集合查询为 : + sqlStr); CollectionVector collection = new VectorVector(); connection = Query.getConnection(); try rs = connection.prepareStatement(sqlStr).executeQuery(); rsmd = rs.getMetaData(); while(rs.next() Vector vdata = new Vector(); for ( int i = 1 ; i = rsmd.getColumnCount()

28、; i +) vdata.addElement(rs.getObject(i); collection.add(vdata); catch(java.sql.SQLException sql) sql.printStackTrace(); return null; return collection; public DefaultTableModel getTableModel(String name,String sqlStr) Vector vname = new Vector(); for (int i = 0 ; i name.length ; i+) vname.addElement

29、(namei); DefaultTableModel tableModel = new DefaultTableModel(vname,0); connection = Query.getConnection(); try rs = connection.prepareStatement(sqlStr).executeQuery(); rsmd = rs.getMetaData(); while(rs.next() Vector vdata = new Vector(); for ( int i = 1 ; i = rsmd.getColumnCount() ; i +) vdata.addE

30、lement(rs.getObject(i); tableModel.addRow(vdata); catch(java.sql.SQLException sql) sql.printStackTrace(); return null; return tableModel; /获得满足条件的数据 public Vector getObjectRow(String sqlStr) Vector vdata = new Vector(); connection = Query.getConnection(); try rs = connection.prepareStatement(sqlStr)

31、.executeQuery(); rsmd = rs.getMetaData(); while(rs.next() for ( int i = 1 ; i = rsmd.getColumnCount() ; i +) vdata.addElement(rs.getObject(i); catch(java.sql.SQLException sql) sql.printStackTrace(); return null; return vdata; /封装连接 MySQL数据库与按条件进行数据库查询操作Query.javaimport java.sql.*;import javax.swing.

32、JOptionPane;public class Query public static Connection conection = null;static Connection getConnection()/连接MySQL数据库tryClass.forName(org.gjt.mm.mysql.Driver);/加载驱动conection = DriverManager.getConnection(/连接字符串jdbc:mysql:/localhost:3306/book,root,123);System.out.println(数据库连接成功);catch(java.lang.Clas

33、sNotFoundException classnotfound)classnotfound.printStackTrace();/驱动未找到catch(java.sql.SQLException sql)sql.printStackTrace();/SQL执行时发生异常,打印栈信息return conection;public static boolean Insert(Book aBook) /插入一条图书记录Connection connect=getConnection();/得到连接boolean res=false;try Statement stmt = connect.crea

34、teStatement();/查询集String sql = select * from book where BID=+aBook.getBID()+;ResultSet rs=stmt.executeQuery(sql);/执行SQL命令,返回结果集if (rs.next()/图书编号存在res=false;JOptionPane.showMessageDialog(null,学生信息插入失败,该学生ID号已存在,警告,JOptionPane.WARNING_MESSAGE);rs.close();stmt.close();else /不存在String sqlString=insert

35、into book values(+aBook.getBID()+,+aBook.getBname()+,+aBook.getBauthor()+,+aBook.getPress()+,+aBook.getBinfo()+,+aBook.getYear()+-+aBook.getMonth()+-+aBook.getDay()+,+ aBook.getBclass()+);res =stmt.execute(sqlString);res=true;if(res)JOptionPane.showMessageDialog(null,图书信息插入成功,成功,JOptionPane.INFORMAT

36、ION_MESSAGE);rs.close(); elseres=false;JOptionPane.showMessageDialog(null,图书信息插入失败,警告,JOptionPane.WARNING_MESSAGE);rs.close();catch (SQLException e) /捕获异常res=false;System.out.print(Error loading Mysql Driver!);e.printStackTrace();return res;public static boolean modifyBook(Book oldBook) /修改图书信息Conne

37、ction connect=getConnection();boolean flag=false;try Statement stmt = connect.createStatement(); /查询集 String sqlString=update book set Bname=+oldBook.getBname()+,Bauthor=+oldBook.getBauthor()+, Press=+oldBook.getPress()+, BInfo=+oldBook.getBinfo()+, BDate=+oldBook.getYear()+-+oldBook.getMonth()+-+oldBook.getDay()+, Bclass=+oldBook.getBclass()+ where BID=+oldBook.getBID()+;stmt.executeUpdate(sqlString);JOptionPane.showMessageDialog(null,图书信

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁