JAVA课程设计说明书.doc_第1页
JAVA课程设计说明书.doc_第2页
JAVA课程设计说明书.doc_第3页
JAVA课程设计说明书.doc_第4页
JAVA课程设计说明书.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

湖北医药学院公共管理学院Java课程设计说明书(2012/2013学年第一 学期)课程名称 : java 语言程序设计 题 目 : 图书馆管理系统 专业班级 : 信管专业 2010级学生姓名 :XXX学号: XXXXXXXX指导教师 :XXX设计周数 :7周设计成绩 : 2012 年 11 月 29 日1课程设计说明书一、 课程设计目的1、通过图书馆管理信息系统的设计,熟练掌握NetBeans、Access 2003等工具软件,系统地掌握需求分析、数据库设计、编码实现、测试等软件开发的流程,提高自身分析问题、解决问题的能力2、通过实际的编程与学习,了解自己的学习情况和实际的动手能力,从而提高自己解决问题的能力,熟悉java的编程过程和软件的使用技巧。二、 设计内容1、 进行功能分析,功能模块设计,设计系统的框架与组件;2、 向面板上添加按钮与组件并给每个面板添加相关事件;3、对功能分析进行数据库设计,建立数据表;4、代码设计,根据设计的数据库逻辑结构,分模块设计代码,建java工程项目和包;5、 设计事件的响应,实现系统的各个功能。三、需求分析现在许多中小型图书馆信息管理工作仍是由专人进行图书档案的登记,修改,增删,查询,效率低下,出错率高,数据不安全。这就要求我们在信息技术高速发展的今天,图书馆管理运用网络技术,通过信息系统的开发,在图书馆之间互通有无,有利于提高图书的利用率。为了使图书馆的管理更科学、更规范,减少重复劳动,节省图书馆建设和管理中的人力、财力,方便读者查询和借阅书籍,所以有必要建立一个图书馆管理系统。3.1 功能需求分析本系统主要由图书管理、读者管理、借阅管理、系统管理四大功能,其中每个功能由若干个相关联的子功能模块组成。如图所示:图1.1 系统功能 模块图书信息管理系统图 书 管 理读 者 管 理借 阅 管 理系 统 管 理图书查询图书修改图书删除图书添加读者查询读者修改读者删除读者添加借 书还 书修改密码添加用户 (1) 图书管理图书管理功能模块用于管理图书的相关信息,包括查询、添加、修改和删除功能。在进行图书信息的添加时,系统会自动检测所添加的图书信息中的图书编码在book表中是否已经存在,如果存在,会提示用户该书已经存在。在进行图书信息的删除时,要首先弹出提示窗口让用户确认是否删除,只有用户确认后才能进行图书信息的删除。在进行图书修改时,不准用户修改图书编码,因为图书编码作为数据库中book表的主键是不同书籍的唯一标识,不准修改图书编码可以防止不经意将图书编码改错;如果确实要修改图书编码,可以先将错误图书信息删除再添加正确的书籍信息,这样在删除时会弹出提示窗口让用户确认是否删除,给用户以提示,防止意外错误。图书查询功能模块用于查询图书的相关信息,包括图书编号、书名、图书类别、作者、出版社、价格、库存。(2) 读者管理 读者管理功能模块用于管理读者的相关信息,同样也包括查询、添加、修改、删除功能。读者查询功能模块用于查询读者的相关信息,包括读者学号、姓名、类别、性别、可借数量、限期。读者添加功能模块用于添加新读者的相关信息,包括读者读者学号、姓名、类别、性别、可借数量、限期,读者信息修改功能模块用于修改已存读者的需修改的信息,读者学号不能修改。读者信息删除功能模块用于删除读者的所有信息。(3) 借阅管理图书馆管理员通过此模块来进行借书和还书操作。借书功能用于登记读者借阅图书的记录并减少在库图书的库存量,登记内容包括读者学号、图书编号、书名、借书日期、限期。还书功能用于登记读者归还图书的记录并增加在库图书的库存量,登记内容包括读者编号、读者姓名、读者类别、图书编号、书名、库存量、借书日期、归还日期。(4) 系统管理 系统管理主要管理用户相关信息,包括修改密码和添加用户以及退出系统。3.2 数据库需求分析1、针对图书馆管理系统的需求分析,得出如下需求信息。一位读者可以借阅多本图书。一位读者对应一个借阅信息。一本书只能有一位读者借阅。2、针对本系统功能分析,总结出如下的需求信息。用户,包括数据项:用户名、密码、权限。图书,包括数据项:图书编号、图书名、图书类型、作者、价格、库存量、出版社。读者,包括数据项:学号、姓名、读者类型、性别、可借数量、借书限期。借阅信息,包括数据项:读者编号、读者姓名、图书编号、书名、借书时间、借书限期。3、从本系统中规划出的实体有:管理员实体、图书实体、读者实体、借阅信息实体。实体之间关系的E-R图如图3-1所示:读 者管理员图 书借阅信息管理借阅借/还书管理管理图3-1 实体之间的E-R图管理员实体的E-R图,如图3-2所示。图书实体的E-R图,如图3-3所示。读者实体的E-R图,如图3-4所示。借阅信息实体的E-R图,如图3-5所示。管理员ID用户名密码权限图书库存量价格作者书名图书类别出版社图书编号图3-2图3-3读者借书限期学号姓名性别读者类型可借数量图3-4借阅信息学号姓名图书编号书名借阅限期借阅日期图3-5管理员接收事务检查读者是否有效检查读者借书记录查询图书存在情况读者借书登记图书0借书信息图书信息读者信息事务事务读者信息图书信息读者目录文件图书目录文件借书文件借书信息借书信息注:图中读者借书称为一个事务管理员读 者接收事务检查图书是否过期更新借书文件处理还书事务事务借书信息还书信息还书信息借书文件借书信息还书信息注:图中读者还书称为一个事务4、数据字典 名字:读者信息描述:每一位读者的具体信息定义:读者信息=学号+名字+性别+读者类别+可借数量+借书限期位置:读者目录文件名字:图书信息描述:每一本图书的详细信息定义:图书信息=图书编号+书名+图书类别+出版社+作者+库存量+价格位置:图书目录文件名字:借阅信息描述:每一位读者所借图书的具体信息定义:借书信息=学号+读者姓名+图书编号+书名+借阅日期+借阅限期位置:位置:借书文件3.3 系统流程图在用户需求分析的基础上把系统划分为三个子模块:读者信息管理、图书信息管理、借阅管理。这三个模块之间,紧密结合,共享信息资源,形成一种完美的学校图书管理系统流程图。如下图所示:读者信息管理管理员图书信息管理读者信息借阅管理图书信息图书借阅图书归还图1.2 系统流程图3.3 性能需求为了保证系统能够长期、安全、稳定、可靠、高效的运行,图书管理系统应该满足以下的性能需求:l 系统处理的准确性和及时性,充分考虑考虑当前和将来的工作量,系统处理能力和响应时间,响应时间越短性能越优良。l 充分考虑系统的开放性和系统的可扩充性,l 能够提供提供良好的用户接口和易用的人机交互界面 l 系统的标准性符合国际软件和硬件的标准l 系统功能不断完善四、功能设计4.1 系统设计目标对于典型的图书馆信息管理系统必须要满足使用方便、操作灵活等设计要求。本系统在设计时应该满足以下几个目标:l 采用人机对话的操作方式,界面设计美观友好、信息查询灵活、方便、快捷、准确、数据存储安全可靠。l 全面浏览图书馆内所有的图书。l 管理员能对相关数据进行操作,可添加用户和修改自己的用户密码。l 系统最大限度地实现了易维护性和易操作性。l 系统运行稳定、安全可靠。4.2 系统的基本功能 1. 用户登录:管理员输入用户名和密码请求进入系统,系统将对用户名和密码进行验证,验证成功则进入系统,否则弹出对话框拒绝进入系统,2. 图书管理:l 空字段可以查询到所有图书信息,选择图书编号或者书名可查询 到该图书的信息,若该图书不存在,则无法查询;l 管理员可通过输入图书编号将得到的查询结果进行修改,如果对图书编号进行修改,则无法修改;l 管理员可通过输入图书编号将查询结果显示在表格内,确认删除后该图书的所有信息消失。l 通过添加图书信息,确认添加后弹出对话框图书信息添加成功,所有文本框清空。3. 读者管理:l 空字段可以查询到所有读者信息,输入图书编号可查询到该读者的信息,若该读者不存在,则无法查询;l 管理员可通过输入读者学号将得到的查询结果进行修改,如果对读者学号进行修改,则无法修改;l 管理员可通过输读者学号将查询结果显示在表格内,确认删除后该读者的所有信息消失。l 通过添加读者信息,确认添加后弹出对话框读者信息添加成功,所有文本框清空。4. 借阅信息:l 输入读者学号和图书编号可将有关查询结果信息显示在界面中,如果读者学号或图书编号有误或者为空,则查询终止,如果输入正确按借书按钮,则借书信息将会显示在读者借阅信息的表格内,库存量就会减1;l 输入读者学号和图书编号可将该读者的借阅信息显示在界面中,如果输入的读者学号与所借的图书编号不符,则查询终止,如果读者编号与所借的图书编号正确,则可进行还书操作,库存量加1。5. 系统管理:l 管理员输入用户名和密码后进入系统,则系统记住该用户信息,直接输入原始密码和新密码两次确认后可对用户密码进行修改。l 用户分为超级管理员和管理员,超级管理员的权限为1,管理员权限为2。添加用户只能由超级管理员添加,进入系统时,系统对用户进行权限设置,1则为超级管理员,2为管理员。若为1,管理员便可添加用户;若为2,主界面的添加用户菜单设置为阴影,不能进行用户添加操作。l 退出系统,不能作任何操作。五、程序源代码(详细设计)根据各功能模块,在NetBeans中建立工程项目(Library),在该项目下建立3个包publicplace、Manage和images,其中images 放置图片。1、公共模块包(publicplace)由于该系统对数据库的很多操作都是一样,所以可以模块化,模拟了DAO相关功能,简化代码,在该包里面建立了公共类,有: 连接数据库,实现查询,更新,关闭数据库的类DbOp. java;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import javax.swing.JOptionPane;public class DbOp private static String driver = sun.jdbc.odbc.JdbcOdbcDriver;/ JDBC-ODBC驱动程序private static String url = jdbc:odbc:driver=Microsoft Access Driver (*.mdb);DBQ=L.mdb;/ 数据库url路径private static Connection con = null; / 如果数据库未打开,则通过创建连接打开数据库private DbOp() try / 如果当前未创建连接,则加载JDBC驱动程序,然后创建连接if (con = null) Class.forName(driver);con = DriverManager.getConnection(url); catch (Exception e) JOptionPane.showMessageDialog(null, 数据库未能打开!); / 执行数据库查询工作。如果出现异常,返回nullpublic static ResultSet executeQuery(String sql) try / 如果未创建数据库连接,则创建连接if (con = null)new DbOp();/ 返回查询结果return con.createStatement().executeQuery(sql); catch (SQLException e) JOptionPane.showMessageDialog(null, 数据库不存在,或存在错误!);return null;/ 执行数据库更新操作。如果有问题,则返回-1public static int executeUpdate(String sql) try / 如果未创建数据库连接,则创建连接if (con = null)new DbOp();/ 返回操作结果return con.createStatement().executeUpdate(sql); catch (SQLException e) JOptionPane.showMessageDialog(null, 数据有误,记录无法正常保存或更新!);return -1;/ 关闭数据库public static void Close() try / 如果数据库已打开,则关闭之if (con != null)con.close(); catch (SQLException e) JOptionPane.showMessageDialog(null, 数据库未打开!); 保存登陆用户名的类Admin.java;public class Admin public static String AdminName; / 该变量用来保存登录用户名,用于改密码2、主模块包(Manage)该包下的类是由jFrame做的图形用户界面,有按钮及其相应驱动事件,以下是界面截图和事件驱动的主要代码。用户登陆界面First.java;package Manage;import publicplace.DbOp;import java.awt.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.*;import publicplace.User;private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) username=jTextField1.getText(); String pass=jPasswordField1.getText(); String admin; if (username.equals()|pass.equals() JOptionPane.showMessageDialog(null, 用户名或密码不能为空!);return;try / 核对用户名和密码String sql = select * from User where Uname= + + username+ and Upass= + + pass + ;ResultSet rs = DbOp.executeQuery(sql);/ 如果此用户存在,则记录其状态(1:超级管理员 2:管理员)if (rs.next() admin = rs.getString(limits); else JOptionPane.showMessageDialog(null, 用户名或密码不正确!);return;User.UserName = username; / 记录登录的用户名Main show = new Main(); / 调用主程序/ 只有管理员才能添加用户 show.setRights(admin); show.setVisible(true);dispose(); / 释放当前窗体 catch (SQLException e1) JOptionPane.showMessageDialog(null, 用户数据库有误!); 管理员登录的主界面(Main.java;)public class Main extends javax.swing.JFrame void setRights(String admin) /* 如果不是超级管理员,则禁止进行用户添加*/ if (admin.equals(2) jMenu1.setEnabled(false); public Main() initComponents(); this.setLocationRelativeTo(null);图书管理下的各个子菜单:图书查询类BookQuery.Java;import publicplace.DbOp;import java.sql.ResultSet;import java.sql.SQLException;import javax.swing.JOptionPane;import javax.swing.JTable;import java.util.ArrayList; private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) try String A=jComboBox1.getSelectedItem().toString(); String Q=jTextField1.getText(); String sql,sql1; if(A.equals(图书编号) if(Q.equals() sql=select * from Book ; else sql=select * from Book where isbn=+Q+; ResultSet rs = DbOp.executeQuery(sql); Object book = new Object207;int i = 0; while (rs.next() / 将查询结果赋予Book数组booki0 = rs.getString(isbn);booki1 = rs.getString(Bname); booki2 = rs.getString(Btype);booki3 = rs.getString(author);booki4 = rs.getString(press);booki5 = rs.getFloat(price);booki6 = rs.getInt(stock);i+;for(i=0;i20;i+) for(int j=0;j7;j+) jTable2.setValueAt(bookij, i, j); ResultSet rs1= DbOp.executeQuery(sql); else if(Q.equals() sql1=select * from Book ; else sql1=select * from Book where Bname=+Q+; ResultSet rs = DbOp.executeQuery(sql1); Object book = new Object207;int i = 0; while (rs.next() / 将查询结果赋予Book数组booki0 = rs.getString(isbn);booki1 = rs.getString(Bname); booki2 = rs.getString(Btype);booki3 = rs.getString(author);booki4 = rs.getString(press);booki5 = rs.getFloat(price);booki6 = rs.getInt(stock);i+;for(i=0;i20;i+) for(int j=0;j7;j+) jTable2.setValueAt(bookij, i, j); catch(Exception e) JOptionPane.showMessageDialog(null, 你输入的书名有误,请重新输入!); 图书修改类 BookUpdate.Java;import java.awt.*;import java.awt.event.*;import java.text.ParseException;import java.text.SimpleDateFormat;import javax.swing.*;import publicmodule.*;点击查询按钮所执行的操作:private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) String isbn = jTextField7.getText(); /如果图书编号为空,则查询操作终止 if (isbn.equals() JOptionPane.showMessageDialog(null,图书编号不能为空!); return; Book book=BookSelect.SelectBookById(isbn);/按图书编号查询,将结果录入到book中 /将查询到的结果显示在各个文本框中 if(book !=null) jLabel10.setText(book.getISBN(); jTextField2.setText(book.getBname(); jTextField3.setText(book.getAuthor(); jTextField4.setText(book.getPress(); jTextField5.setText(book.getBtype(); jTextField6.setText(String.valueOf(book.getPrice(); else JOptionPane.showMessageDialog(null, 您输入的图书编号有误,请重新输入); 点击删除按钮所执行的操作private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) String isbn = jLabel10.getText(); String bookname=jTextField2.getText(); String author=jTextField3.getText(); String press=jTextField4.getText(); String booktype=jTextField5.getText(); if(isbn.equals() JOptionPane.showMessageDialog(null, 图书编号不能为空!); return; if(bookname.equals() JOptionPane.showMessageDialog(null,书名不能为空!); return; if(author.equals() JOptionPane.showMessageDialog(null, 作者不能为空!); return; if(press.equals() JOptionPane.showMessageDialog(null, 出版社不能为空!); return; if(booktype.equals() JOptionPane.showMessageDialog(null,图书类型不能为空!); return; try float price = Float.parseFloat(jTextField6.getText(); String sql = update Book set Bname= + bookname+ ,author=+author+,press=+press+,Btype=+booktype+,price=+price+ where isbn= + isbn + ; int i = DbOp.executeUpdate(sql); if (i = 1) JOptionPane.showMessageDialog(null, 图书信息修改成功!); elseJOptionPane.showMessageDialog(null, 您输入的数据有误,请重新确认!); catch (NumberFormatException e1) JOptionPane.showMessageDialog(null, 价格输入错误,应输入数字!); 图书删除类BookDelete.java;import java.sql.ResultSet;import java.sql.SQLException;import javax.swing.JOptionPane;import publicplace.DbOp;点击查询按钮所执行的操作: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) String isbn = jTextField1.getText(); / 如果图书编号为空,则查询操作终止 try if (isbn.equals() JOptionPane.showMessageDialog(null, 图书编号不能为空!);return; if(Exist(isbn) JOptionPane.showMessageDialog(null, 该书不存在,请重新输入!);return; String sql=select * from Book where isbn=+isbn+; ResultSet rs = DbOp.executeQuery(sql);Object book = new Object47;int i = 0; while (rs.next() / 将查询结果赋予Book数组booki0 = rs.getString(isbn);booki1 = rs.getString(bname); booki2 = rs.getString(btype);booki3 = rs.getString(author);booki4 = rs.getString(press);booki5 = rs.getFloat(price);booki6 = rs.getInt(stock);i+;for(i=0;i4;i+) for(int j=0;j7;j+) jTable1.setValueAt(bookij, i, j); catch(Exception e) private boolean Exist(String isbn) String sql = select * from Book where isbn=+isbn+;ResultSet rs = DbOp.executeQuery(sql);try if (rs.next()return false;elsereturn true; catch (SQLException e) JOptionPane.showMessageDialog(null, 无法正常读取数据库!);return false;点击删除按钮所进行的操作:private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) String isbn = jTextField1.getText();/ 如果图书编号为空,则删除操作终止if (isbn.equals() JOptionPane.showMessageDialog(null, 图书编号不能为空!);return;String sql = delete from book where ISBN= + isbn + ;int i = DbOp.executeUpdate(sql);if (i = 1) JOptionPane.showMessageDialog(null, 图书信息删除成功!); elseJOptionPane.showMessageDialog(null, 图书信息删除失败!); 图书添加类 BookAdd.java;import java.sql.ResultSet;import java.sql.SQLException;import javax.swing.JOptionPane;import publicplace.DbOp;点击删除按钮所执行的操作: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) String isbn = jTextField1.getText(); String press = jTextField2.getText();String bookname = jTextField4.getText(); String author = jTextField5.getText();String booktype = jComboBox2.getSelectedItem().toString(); / 如果图书编号为空,则终止保存记录操作if (isbn.equals() JOptionPane.showMessageDialog(null, 图书编号不能为空!);return; /如果出版社为空,则终止保存记录操作 if (press.equals() JOptionPane.showMessageDialog(null, 出版社不能为空!); return; if (bookname.equals() JOptionPane.showMessageDialog(null, 书名不能为空!); return; if (author.equals() JOptionPane.showMessageDialog(null, 作者不能为空!); return; / 如果图书编号重复,则记录无效,需修改图书编号if (IfBookIdExit(isbn) JOptionPane.showMessageDialog(null, 图书编号重复!);return; tryfloat price = Float.parseFloat(jTextField3.getText();int stock = Integer.parseInt(jTextField6.getText();/ 将记录保存到book表中 String sql = INSERT INTO Book(isbn,Bname,Btype,author,press,price,stock) +VALUES( + isbn+ , + bookname + , + booktype + , + author+ , + press + , + price +, + stock + );int i = DbOp.executeUpdate(sql);if (i = 1) JOptionPane.showMessageDialog(null, 图书添加成功!);jTextField1.setText(); jTextField2.setText(); jTextField3.setText(); jTextField4.setText

温馨提示

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

评论

0/150

提交评论