




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录1 绪论01.1课题背景01.2系统开发关键技术介绍12 系统分析12.1 图书管理工作流程12.2 图书管理需求13 系统设计13.1 设计思想13.3模块功能设计24 系统数据库设计24.1系统数据库的建立34.2 系统E-R图34.3 各个数据表的创建34.4 数据库的连接45 系统实现65.1 系统实现工具与支持平台65.2系统界面及其实现方法76 总结与展望176.1收获与体会17参考文献181 绪论1.1课题背景 图书管理系统以方便、快捷、费用低的优点正慢慢地进入人们的生活,将传统的图书管理方式彻底地解脱出来,提高效率,减轻工作人员以往繁忙的工作,减小出错的概率,使读者可以花更多的时间在选择书和看书上。从而使人们有更多时间来获取信息、了解信息和掌握信息。一个好的图书馆不仅仅看它的藏书的种类和数量是否齐全,还要看它的管理机制是否健全。本系统根据图书馆的日常业务运作而设计,更好的管理借书,还书,统计图书类别等业务,系统操作流程与图书馆的业务流程相一致。界面友好、操作容易、维护简单;系统数据库稳定、安全,有图书管理业务操作知识的人皆能方便操作。1.2系统开发关键技术介绍此模型具有架构清晰、模块独立性强、以及易维护和扩展等优点,采用Eclipse作为前端开发工具,后台用SQL Server 2000实现数据存取,另外还通过存储过程的实现把一些处理放在数据库端执行,使的数据存取效率大大提高,系统的性能也得以提升。通过Java 类连接数据库,为各种常用数据库提供无缝联接的技术。2 系统分析2.1 图书管理工作流程系统完成就图书借阅管理的借书、还书、操作;书籍、学生、借阅记录的查阅、添加、更新及删除等功能,此外系统还具备管理员注册管理等功能。能更好的对图书进行分类管理,提高了利用率,为读者借阅提供方便。2.2 图书管理需求图书馆要求能随时查询书库中图书的库存量,以便及时准确、及时、方便地为读者提供借阅信息,但不能修改数据,无信息处理权,即可以打印清单、浏览数据等,管理权限由系统管理员掌握和分配。图书管理系统以方便、快捷、费用低的优点正慢慢地进入人们的生活,将传统的图书管理方式彻底的解脱出来,提高效率,减轻工作人员以往繁忙的工作,减小出错的概率,使读者可以花更多的时间在选择书和看书上。从而使人们有更多时间来获取信息、了解信息、掌握信息。图书馆作为提供学习的场所,不仅要求便于管理,而且要求对读者和借阅者提供方便快速的查找,借阅和登记手续。3 系统设计3.1 设计思想(1) 进行合理的需求分析,用Eclipse实现前台的应用程序框架。(2) 详细的数据库系统设计,用SQL Server 2000实现数据存取。(3) 选择合理的数据库连接。3.2 系统功能结构图3.3模块功能设计 (1)管理员注册模块:填写注册的用户名和密码,就可以完成注册,主要是为了管理的方便,添加了该模块。(2)图书查询模块:完成以图书名称,索引号,图书编号,模糊查询,分类名,出版社进行查询,考虑到用户的方便性,本查询,除了索引号和图书编号进行查询外,全部采用模糊查询。大大的方便了借阅者的查询。 (3)读者查询模块:通过输入要查询读者的借阅证号或者姓名,将符合其一要求的信息查询并显示在下面的图标中。采用图标显示的方式,在查到的信息内容之上显示相应的数据的标题,便于用户的理解。4 系统数据库设计4.1系统数据库的建立该系统采用C/S模式设计,数据库部分同应用程序一样起着至关重要的作用,因此必须对数据库进行详细的设计。该系统使用SQL Server 2000数据库,首先应以保证数据的独立性和一致性作为出发点,避免数据冗余,在设计方面,把数据库分模块相应内容存在相应的数据库中。 4.2 系统E-R图 E-R模型分类号绍图书数量入库日期分类名图书名称管理图书用户名作者借还ISBN码密码管理人员出版社姓名读者有效日期性别注册日期读者类别读者单位借阅证号读者编号4.3 各个数据表的创建数据库共有六个表,分别包括:书籍表(book),借书表 (borrow),登陆表 (login),读者信息表 (reader),图书分类信息表(index),读者类别表(reader_class)4.3.1、书籍表(book)列名数据类型长度允许为空默认值字段名说明Bannercodevarchar30图书编号唯一约束Booknamevarchar30图书名称自动增长Searchcodevarchar30索书号ISBNunm varchar30ISBN号Kindnumvarchar3分类号kindnamevarchar30分类名positionnumvarchar30排架号publishingcompanyvarchar30出版社publishtimeDate出版日期YYYY-MM_DDstateVarchar4在架状态BooknumInt4图书数量authorvarchar30作者4.3.2、登陆表 (login)列名数据类型长度允许为空默认值字段名说明usernamevarchar30用户名主键,自动增长pswVarchar30密码4.3.3、图书分类信息表(index)列名数据类型长度允许为空默认值字段名说明kindnumvarchar30分类号kindbookvarchar30图书种类4.4 数据库的连接DBAccess.javapackage com.book.Dbconn; import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement; public class DBAccess private Connection m_conn; private Statement m_stmt; private String driver = com.microsoft.jdbc.sqlserver.SQLServerDriver; private String url = jdbc:microsoft:sqlserver:/localhost:1433;databasename=bookmanage; private String uName = sa; private String uPwd = sa; public DBAccess() this.setDriver(driver); this.setConnection(url, uName, uPwd); public DBAccess(String driver, String url, String userName, String userPWD) try m_conn = DriverManager.getConnection(url, userName, userPWD); m_stmt = m_conn.createStatement(); catch (SQLException e) e.printStackTrace(); public boolean setDriver(String driver) try Class.forName(driver); return true; catch (Exception e) e.printStackTrace(); return false; public boolean setConnection(String url, String userName, String userPWD) try m_conn = DriverManager.getConnection(url, userName, userPWD); m_stmt = m_conn.createStatement(); return true; catch (Exception e) e.printStackTrace(); return false; public ResultSet sendQuery(String sql) try ResultSet m_rs = m_stmt.executeQuery(sql); return m_rs; catch (SQLException e) e.printStackTrace(); return null; public int sendUpdate(String sql) try return m_stmt.executeUpdate(sql); catch (SQLException e) e.printStackTrace(); return -1; public static void main(String arg) DBAccess db = new DBAccess(); String sql = select * from book; ResultSet rs = db.sendQuery(sql); try if (rs != null) while (rs.next() System.out.println(rs.getString(Bookname); catch (SQLException e) e.printStackTrace(); 5 系统实现5.1 系统实现工具与支持平台(1) 用户界面本系统采用Eclipse设计,用户交互界面采用的是基于Windows的窗口界面。(2) 硬件接口运行本系统的硬件基本要求如下:CPU:Intel P4及以上;内存:512MB及以上;硬盘:80GB及以上。(3) 软件接口数据库服务器:SQL Server 2000。5.2系统界面及其实现方法1.下面为运行后的界面图: 实现如下: Mainwin.java public class mainwin private ButtonGroup buttonGroup = new ButtonGroup();private JFrame frame; public static void main(String args) try mainwin window = new mainwin();window.frame.setVisible(true); catch (Exception e) e.printStackTrace();public mainwin() createContents();private void createContents() frame = new JFrame();frame.setTitle(欢迎访问图书管理系统);frame.getContentPane().setLayout(null);frame.setBounds(100, 100, 700, 500);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);final JLabel label = new JLabel();label.setForeground(new Color(0, 128, 0);label.setFont(new Font(仿宋_GB2312, Font.PLAIN, 14);label.setText(用户名:);label.setBounds(38, 76, 58, 18);frame.getContentPane().add(label);final JTextField textField = new JTextField();textField.setBounds(92, 75, 92, 20);frame.getContentPane().add(textField);final JLabel label_1 = new JLabel();label_1.setForeground(new Color(0, 128, 0);label_1.setFont(new Font(仿宋_GB2312, Font.PLAIN, 14);label_1.setText(密 码:);label_1.setBounds(225, 76, 59, 18);frame.getContentPane().add(label_1);final JPasswordField passwordField = new JPasswordField();passwordField.setBounds(290, 77, 92, 18);frame.getContentPane().add(passwordField);final JButton button = new JButton();button.addActionListener(new ActionListener() public void actionPerformed(final ActionEvent arg0) if(textField.getText().equals() |passwordField.getText().equals()JOptionPane.showMessageDialog(null, 请输入用户名和密码!);elseString sql = select count(*) from login where username=+textField.getText()+ and psw=+passwordField.getText()+;DBAccess db = new DBAccess();ResultSet rs = db.sendQuery(sql);try if(rs != null)if(rs.next() & rs.getInt(1)0)ManageMain manageMain = new ManageMain();manageMain.getFrame().setVisible(true);getFrame().setVisible(false);elseJOptionPane.showMessageDialog(null, 用户名或密码错误!); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();finallytry rs.close(); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace(););button.setText(登陆);button.setBounds(429, 76, 66, 18);frame.getContentPane().add(button);final JButton button_1 = new JButton();button_1.addActionListener(new ActionListener() public void actionPerformed(final ActionEvent arg0) ManagerAdd managerAdd = new ManagerAdd();managerAdd.getFrame().setVisible(true); getFrame().setVisible(false););button_1.setText(注册);button_1.setBounds(560, 76, 66, 18);frame.getContentPane().add(button_1);final JRadioButton radioButton = new JRadioButton();radioButton.setForeground(new Color(0, 128, 0);radioButton.setFont(new Font(仿宋_GB2312, Font.PLAIN, 14);radioButton.setText(图书名称);buttonGroup.add(radioButton);radioButton.setBounds(35, 125, 84, 26);frame.getContentPane().add(radioButton);final JRadioButton radioButton_1 = new JRadioButton();radioButton_1.setForeground(new Color(0, 128, 0);radioButton_1.setFont(new Font(仿宋_GB2312, Font.PLAIN, 14);buttonGroup.add(radioButton_1);radioButton_1.setText(索引号);radioButton_1.setBounds(141, 125, 77, 26);frame.getContentPane().add(radioButton_1);final JRadioButton radioButton_2 = new JRadioButton();radioButton_2.setForeground(new Color(0, 128, 0);radioButton_2.setFont(new Font(仿宋_GB2312, Font.PLAIN, 14);buttonGroup.add(radioButton_2);radioButton_2.setText(图书编号);radioButton_2.setBounds(246, 125, 92, 26);frame.getContentPane().add(radioButton_2);final JRadioButton radioButton_3 = new JRadioButton();radioButton_3.setForeground(new Color(0, 128, 0);radioButton_3.setFont(new Font(仿宋_GB2312, Font.PLAIN, 14);buttonGroup.add(radioButton_3);radioButton_3.setText(模糊查询);radioButton_3.setBounds(352, 125, 92, 26);frame.getContentPane().add(radioButton_3);final JRadioButton radioButton_4 = new JRadioButton();radioButton_4.setForeground(new Color(0, 128, 0);radioButton_4.setFont(new Font(仿宋_GB2312, Font.PLAIN, 14);buttonGroup.add(radioButton_4);radioButton_4.setText(分类名);radioButton_4.setBounds(462, 125, 77, 26);frame.getContentPane().add(radioButton_4);final JRadioButton radioButton_5 = new JRadioButton();radioButton_5.setForeground(new Color(0, 128, 0);radioButton_5.setFont(new Font(仿宋_GB2312, Font.PLAIN, 14);buttonGroup.add(radioButton_5);radioButton_5.setText(出版社);radioButton_5.setBounds(569, 125, 77, 26);frame.getContentPane().add(radioButton_5);final JTextField textField_1 = new JTextField();textField_1.setBounds(45, 162, 270, 22);frame.getContentPane().add(textField_1);final JLabel label_2 = new JLabel();label_2.setForeground(new Color(0, 0, 255);label_2.setFont(new Font(仿宋_GB2312, Font.PLAIN, 15);label_2.setText(请选择查询);label_2.setBounds(25, 105, 84, 18);frame.getContentPane().add(label_2);final JTable table = new JTable();table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);table.setName(图书管理系统);table.setBounds(10, 219, 676, 247);frame.getContentPane().add(table);final JLabel label_5 = new JLabel();label_5.setForeground(new Color(255, 0, 255);label_5.setFont(new Font(仿宋_GB2312, Font.PLAIN, 36);label_5.setText(欢迎使用本图书管理系统);label_5.setBounds(133, 9, 406, 60);frame.getContentPane().add(label_5);final JButton button_2 = new JButton();button_2.setAutoscrolls(true);button_2.addActionListener(new ActionListener() public void actionPerformed(final ActionEvent arg0) Stringsql = null;if(textField_1.getText().equals()JOptionPane.showMessageDialog(null, 请输入查询内容!);elseif(radioButton.isSelected()sql = select * from book where bookname like %+textField_1.getText()+%;else if(radioButton_1.isSelected()sql = select * from book where searchcode = +textField_1.getText()+;else if(radioButton_2.isSelected()sql = select * from book where bannercode = +textField_1.getText()+;else if(radioButton_3.isSelected()sql = select * from book where bookname like %+textField_1.getText()+%;else if(radioButton_4.isSelected()sql = select * from book where kindname like %+textField_1.getText()+%;else if(radioButton_5.isSelected()sql = select * from book where publishingcompany like %+textField_1.getText()+%;elseJOptionPane.showMessageDialog(null, 请选择查询方法!);return;DBAccess db = new DBAccess();ResultSet rs = db.sendQuery(sql);/*/boolean hasRecords;try hasRecords = rs.next(); if (!hasRecords) / 记录集为空,提示一条消息 JOptionPane.showMessageDialog(table, 无相关记录,请检查输入!, ,JOptionPane.ERROR_MESSAGE); return; catch (SQLException e) e.printStackTrace();Vector columnHeads = new Vector(); Vector rows = new Vector();/ 用于存储记录行 try ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 1; i = rsmd.getColumnCount(); +i) columnHeads.addElement(rsmd.getColumnName(i); do / 获取记录集 rows.addElement(getNextRow(rs, rsmd); while (rs.next(); / 建立相应的TableModel,并将TableModel应用到Table中显示出来 DefaultTableModel model = new DefaultTableModel(rows, columnHeads); table.setModel(model); return; catch (SQLException exc) JOptionPane.showMessageDialog(table, exc.toString(),查询失败!, JOptionPane.ERROR_MESSAGE); return; );button_2.setText(查询);button_2.setBounds(532, 162, 92, 22);frame.getContentPane().add(button_2);2.下图为查询读者的信息图实现代码如下:UserInfo .javapublic class UserInfo private JFrame frame;public static void main(String args) try UserInfo window = new UserInfo();window.frame.setVisible(true); catch (Exception e) e.printStackTrace();public UserInfo() createContents();private void createContents() frame = new JFrame();frame.getContentPane().setLayout(null);frame.setBounds(100, 100, 700, 500);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);final JLabel label = new JLabel();label.setForeground(new Color(255, 0, 255);label.setFont(new Font(仿宋_GB2312, Font.BOLD, 36);label.setText(查 询 借 阅 者 信 息);label.setBounds(125, 24, 412, 47);frame.getContentPane().add(label);final JLabel label_7 = new JLabel();label_7.setForeground(new Color(0, 0, 255);label_7.setFont(new Font(仿宋_GB2312, Font.PLAIN, 12);label_7.setText(请输入借阅证号和姓名);label_7.setBounds(377, 77, 135, 28);frame.getContentPane().add(label_7);final JLabel label_1 = new JLabel();label_1.setForeground(new Color(0, 128, 0);label_1.setFont(new Font(仿宋_GB2312, Font.PLAIN, 14);label_1.setText(借阅证号*:);label_1.setBounds(77, 155, 77, 18);frame.getContentPane().add(label_1);final JLabel label_2 = new JLabel();label_2.setForeground(new Color(0, 128, 0);label_2.setFont(new Font(仿宋_GB2312, Font.PLAIN, 14);label_2.setText(姓 名:);label_2.setBounds(253, 155, 77, 18);frame.getContentPane().add(label_2);final JTextField textField = new JTextField();textField.setBounds(160, 154, 87, 22);frame.getContentPane().add(textField);final JTextField textField_1 = new JTextField();textField_1.setBounds(323, 154, 87, 22);frame.getContentPane().add(textField_1);final JTable table = new JTable();table.setBounds(39, 233, 616, 223);frame.getContentPane().add(table);final JButton button = new JButton();button.addActionListener(new ActionListener() public void actionPerformed(final ActionEvent arg0) String sql = select * from reader where readercardnum=+textField.getText()+ or readername = +textField_1.getText()+;DBAccess db = new DBAccess();ResultSet rs = db.sendQuery(sql);boolean hasRecords;try hasRecords = rs.next(); if (!hasRecords) / 记录集为空,提示一条消息 JOptionPane.showMessageDialog(table, 无相关记录,请检查输入!, ,JOptionPane.ERROR_MESSAGE); return; catch (SQLException e) e.printStackTrace();Vector columnHeads = new Vector();/ 用于存储表头字段(列名) Vector rows = new Vector();/ 用于存储记录行 try / 获取字段的名称 ResultSetMetaData rsmd = rs.getMetaData(); for (int i = 1; i = rsmd.getColumnCount(); +i) columnHeads.addElement(rsmd.getColumnName(i); do / 获取记录集 rows.addElement(getNextRow(rs, rsmd); while (rs.next(); / 建立相应的TableModel,并将TableModel应用到Table中显示出来 DefaultTableModel model = new DefaultTableModel(rows, columnHeads); table.setModel(model); return; catch (SQLException exc) JOptionPane.showMessageDialog(table, exc.toString(),查询失败!, JOptionPane.ERROR_MESSAGE); return; );button.setText(查询);button.setBounds(451, 151, 60, 28);frame.getContentPane().add(button); final JButton button_1 = new JButton();button_1.addActionListener(new ActionListener() public void actionPerformed(final ActionEvent arg0) ManageMain managemain = new ManageMain();managemain.getFrame().setVisible(true); getFrame().setVisible(false););button_1.setText(返回);button_1.setBounds(552, 151, 60, 28);frame.getContentPane().add(button_1);private static Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException Vector currentRow = new Vector();for (int i = 1; i = rsmd.getColumnCount(); +i)currentRow.addElement(rs.getString(i);return currentRow; / 返回一条记录3.管理员注册界面如下:实现方法如下:ManagerAdd.java public class
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省红河县2025年上半年事业单位公开遴选试题含答案分析
- 云南省富源县2025年上半年事业单位公开遴选试题含答案分析
- 河北省邯郸县2025年上半年公开招聘村务工作者试题含答案分析
- 2025版社保缴纳与职工工资待遇挂钩补充协议
- 2025年点工合同范本:现代服务业合作协议
- 2025年地产项目合作合同:产业园区合作开发协议
- 2025版塔吊租赁及操作人员资质认证合同
- 2025房产中介合同(含房屋装修监理)
- 2025年智能制造系统集成服务合同
- 2025版大型吊车租赁及工程进度跟踪合同
- 双馈风机送出线路的暂态响应特性及保护适应性分析
- 2025年江苏东台市国有资产经营有限公司招聘笔试参考题库含答案解析
- 信息技术(基础模块)课件 第5章-新一代信息技术概述
- “教联体”在家校社协同育人中的实践
- 《居住区景观设计》课件
- 2025年上半年哈尔滨理工大学招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2025年永磁发电机项目可行性研究报告-20250101-231648
- 四川省成都盐道街中学2025届高考考前模拟数学试题含解析
- 新北师大版二年级上册数学总复习课件
- 信息技术公司数据中心能源管理制度
- CNAS-SC170:2024 信息安全管理体系认证机构认可方案
评论
0/150
提交评论