图书馆管理系统项目开发设计报告大学论文.doc
项目开发设计报告文档编号:R-4版 本 号: 换图 项目名称: 图书馆管理系统 项目负责人: 王娟 项目团队成员: 陈亚敏 张蓝月 王增波 陈靖飒 常利娜 丛光亮 填写时间: 2013.5.20 目 录1 系统分析11.1系统开发背景、开发范围、建设目标与必要性11.2业务流程分析11.3数据流程图2顶层数据流程图2第一层数据流程图22 系统设计32.1 功能模块设计32.2 系统运行环境32.3 数据库设计42.3.1数据库逻辑设计42.3.2 数据库逻辑设计52.4 输入/输出设计62.4.1 公告模块设计62.4.2 系统界面模块设计73 系统实施94 参考文献11附录(程序关键代码)11小组成员分工说明25项目开发设计总结251 系统分析1.1系统开发背景、开发范围、建设目标与必要性随着互联网的普及,以及电子书的出现,传统的以纸质文献进行阅读的方式它自有的弊端更加明显地暴露出来:信息检索速度落后,质量较差,不符合当今快节奏的生活方式。图书馆信息管理系统是运行在WINDOWS系统平台上的多任务系统,对书籍及读者进行统一管理的系统,具体包括读者的借书、还书处理;包括增加图书信息、删除和更新图书信息,添加、更新、删除、查询借阅信息、增加读者信息、删除或更新读者信息以及查询读者信息。因此,我们设计的系统需要能够提供友好的用户界面,使用户信息安全保密。使操作人员的工作量最大限度的减少;系统具有良好的运行效率,能够达到提高工作效率的目的;平台的设计具有一定的灵活性;使用户在进行图书信息的查询能够更快、质量更高,因此建立图书管理信息系统是非常重要的。 1.2业务流程分析 图 41 业务流程图通过图4-1业务流程图读者可以通过借阅请求,还书请求进行信息查询。办理借阅进行借阅登记,办理还书进行借阅记录。管理员通过办理借阅,办理还书帮助读者信息查询,图书信息要通过办理借阅办理还书进行更新修改。读者信息也通过办理借阅办理还书进行更新修改。1.3数据流程图 顶层数据流程图 图4-2数据流程图1 第一层数据流程图图4-3数据流程图22 系统设计2.1 功能模块设计图4-4功能图 系统开发的主要目的是实现图书馆信息管理的系统化、规范化和自动化。 图书馆信息管理系统主要提供对图书信息的管理及读者信息的管理。需要完成的主要功能有:有关读者信息的输入、更新和查询; 图书信息的输入、更新和查询。系统管理主要负责密码管理和用户管理,用户的登陆管理员对用户信息的管理。读者信息系统主要负责管理读者信息的功能。书籍信息管理主要负责书籍种类的分类,书籍信息等的管理功能。借阅信息管理主要负责借书、还书信息的管理等功能进而对书籍信息及时更新。2.2 系统运行环境我们采用的设备为Intel奔腾四以上系列等PC台式机和便携式电脑;采用WINDOWS操作系统,运用,硬件接口采用标准的键盘、鼠标控制接口;运用eclipse 开发软件基于Java的可扩展开发平台的运行环境。2.3 数据库设计2.3.1数据库逻辑设计图4-5 E-R图图中各实体属性如下:读者信息:学号,姓名,性别,借阅证号,专业,班级借阅证:借阅证号,姓名,性别,办证日期管理员:管理员编号,管理员姓名,登陆密码库存表:书号,书名借出书库:书号,借阅证号,借书日期,归还日期图书档案:书号,书名,作者,出版社,类别,总数,在册数2.3.2 数据库逻辑设计表1读书者信息表格表中列名数据类型可否为空说明 readernonumeric Not null读者编号 readername varchar(10)Not null读者姓名readersexvarchar(5) Not null读者性别readerindatedatetimeNot null借阅日期表2 图书信息表格表中列名数据类型可否为空说明BookidnumericNot null(主键)图书书号Booknamevarchar(10)null图书名Booktypevarchar(10) Not null图书类别Bookauthor varchar(10) Not null作者booktpubvarchar(20) not null图书出版社bookpubdatedatetime Not null图书出版日期 Bookkeyword bookindate varchar(10) datetime Not nullNot null关键字入库时间 bookputup varchar(5) Not null是否借出booktypeno numeric null图书种类编号表3 图书类别信息表表中列名 数据类型可否为空说明booktypenonumericnot null图书类别编号booktypenamevarchar(10)not null图书类别名booktypekeywordvarchar(10)not null图书关键词表4 用户信息表表中列名数据类型可否为空说明usernamevarchar(10) not null用户姓名password numeric not null用户密码表5图书借阅表表中列名数据类型可否为空说明borrownonumericNot nul借阅编号bookidnumericnull图书书号readernonumericNot null读者编号booktypenonumericnull图书类别编号readernamevarchar(10)Not null读者姓名booknonumericNot null图书编号booknamevarchar(10)Not null书籍名称borrowdatedatetimeNot null借出日期returndatedatetimeNot null还书日期booktypenamevarchar(10)Not null图书类别名2.4 输入/输出设计2.4.1 公告模块设计确定数据依赖关系名主 要 函 数 依 赖管理员管理员编号(管理员姓名,登陆密码)库存信息书号书名等借出信息(书号)(借书日期,借阅证号,归还日期)借阅证借阅证号(借阅证号,读者姓名,性别,专业,已借书册书,是否允许借书)图书信息书号(书号,书名,作者,出版社,单价,图书类别,入库日期)还书信息借阅证号(姓名,书号,书名,借出日期,还书日期)关系模式的优化 (1) 借阅证信息:借阅证 (借阅证号,姓名,性别,单位,发证日期,已借书册书,是否允许借阅) (2) 管理员信息:管理员信息(管理员编号,管理员姓名,登陆密码)(3) 库存信息:库存信息(书号,书名) (4) 借书信息:借书信息(书号,借阅证号,姓名,书名,借书日期)(5) 还书信息:还书信息(姓名,书号,书名,借出日期,还书日期)(6) 图书信息:图书档案(书号,书名,作者,图书类别,出版社,进册书,总数)关系模式的调整虽然在关系模式的优化中将各种关系满足了BCNF范式的要求,但是对某些数据库的操作却并没有简化,相反导致了查询等操作的效率低下。于是对借阅证信息,和图书信息作出了以下调整。(1) 借阅证信息:借阅证(借阅证号,姓名,性别,单位,已借书册数,借书许可)(2) 图书信息: 图书档案(书号,书名,作者,出版社,类别,在册数,总数) 2.4.2 系统界面模块设计1) 登陆界面:为用户提供登录功能,登陆时将检查用户名以及用户密码。2) 管理员界面:管理员所拥有的功能。3) 添加读者信息:下面的添加图书信息、添加借阅信息给添加读者信息一样的步骤。,需要注意的是添加图书信息和添加借阅信息时有外键,要根据具体的信息进行添加。4) 读者信息更新: 更新所需要变动的读者信息。图书信息更新、借阅信息更新给更新读者信息一样的步骤。5) 读者信息查询:查询所需要的读者信息。图书信息查询、借阅信息查询给读者信息查询一样的步骤。6) 进行删除读者信息:删除所不需要的读者信息。删除图书信息、删除借阅信息给删除读者信息一样的步骤。3 系统实施如实现添加读者信息界面: package frame;.省略 JTextField t=new JTextField();JTextField t1=new JTextField();JTextField t2=new JTextField();JTextField t3=new JTextField();JLabel l=new JLabel("请输入你要添加的读者信息");JLabel l1=new JLabel(" 读者编号: ");JLabel l2=new JLabel(" 读者姓名: ");JLabel l3=new JLabel(" 读者性别: ");JLabel l4=new JLabel(" 读者借书日期:");JButton j=new JButton("添加");GridBagLayout grid;GridBagConstraints cts;public Insertr(JFrame s,String title).省略实现如下界面:如实现读者信息删除界面:package frame;.省略public class Deleter extends JDialog JTextField t=new JTextField();JLabel l=new JLabel("请输入你要删除的读者编号");JButton j=new JButton("删除");String readerno;GridBagLayout grid;GridBagConstraints cts;public Deleter(JFrame s,String title).catch(Exceptionex)JOptionPane.showMessageDialog(null, "请输入你要删除的读者编号n");return; readersDao.delete(readerno););setResizable(false);setVisible(true);实现如下界面: 4 参考文献 Java+SQL Server项目开发实践,中国铁道出版社,苏年乐 主编 软件工程导论(第四版),清华大学出版社, 张海藩主编 JAVA语言程序设计(第三版),清华大学出版社, 邵丽萍主编 数据库设计与开发,熊壮老师课件 数据库原理与应用,高等教育出版社,李红 主编附录(程序关键代码) 前台界面实现代码package frame;import javax.swing.*;import bean.readers;import dao.DAO;import dao.readersDao;import java.awt.*;import java.awt.event.*;import java.io.Reader;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;public class LogicFrame Containerc; GridBagLayout grid; GridBagConstraints cts; JRadioButton r,m; ButtonGroup btg; JTextField text1,text2; static String zhanghao; static String mima="" JFrame f; int itemjishu=0; public LogicFrame() grid = new GridBagLayout(); cts=new GridBagConstraints(); r=new JRadioButton(" 读者 "); m=new JRadioButton(" 管理员",true); btg=new ButtonGroup(); btg.add(r); btg.add(m); cts.gridx=4; cts.gridy=6; cts.gridwidth=1; cts.gridheight=1; grid.setConstraints(r,cts); cts.gridx=5; cts.gridy=6; cts.gridwidth=1; cts.gridheight=1; grid.setConstraints(m,cts); f=new JFrame("中原工学院信息商务学院"); c=f.getContentPane(); c.setLayout(grid); c.setBackground(Color.green); Jradio j=new Jradio (); m.addItemListener(j); r.addItemListener(j); c.add(m); c.add(r); addLabel(); cts.gridx=4; cts.gridy=7; cts.gridwidth=1; cts.gridheight=1;JButton button1=new JButton("登陆 "); grid.setConstraints(button1,cts); cts.gridx=5; cts.gridy=7; cts.gridwidth=1; cts.gridheight=1; JButton button2=new JButton(" 退出 "); grid.setConstraints(button2,cts); c.add(button1); button1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String zhanghao1;tryzhanghao1=text1.getText();catch (Exception ex)JOptionPane.showMessageDialog(null, "请输入有效的账户名!n");return;String mima1=text2.getText(); try Connection conn = new DAO().getConn(); / 获得连接String sql = "select username,password from userinformation where username=?" PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, zhanghao1);/ 通过实体类的实例为第1个参数赋值 ResultSet rs = ps.executeQuery();/执行查询 while(rs.next() zhanghao = rs.getString("username"); mima =rs.getString("password"); rs.close(); ps.close(); conn.close(); if(zhanghao.equals(zhanghao1)&&(mima.equals(mima1)User a=new User(); f.setVisible(false); else JOptionPane.showMessageDialog(null, "请核对您的个人信息!n"); catch (Exception ex) JOptionPane.showMessageDialog(null, "数据库链接失败!n" + ex.getMessage(); );c.add(button2);button2.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) System.exit(0); ); cts.gridx=3; cts.gridy=4; cts.gridwidth=4; cts.gridheight=1; cts.fill=1; text1=new JTextField(); text1.setBackground(Color.orange); text1.setEditable(true); grid.setConstraints(text1,cts); cts.gridx=3; cts.gridy=5; cts.gridwidth=4; cts.gridheight=1; cts.fill=1; text2=new JTextField(); text2.setBackground(Color.orange); text2.setEditable(true); grid.setConstraints(text2,cts); c.add(text1); c.add(text2); f.setBounds(500,300,350,300); try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch(Exception e) e.printStackTrace(); f.setResizable(false); f.setVisible(true); public JLabel setLabel(int x,int y,int kuan,int chang,String title) cts.gridx=x; cts.gridy=y; cts.gridwidth=kuan; cts.gridheight=chang; JLabel label = new JLabel(title); grid.setConstraints(label,cts); return label; void addLabel() c.add(setLabel(3,2,4,1,"图书管理系统"); c.add(setLabel(2,4,1,1,"账户:"); c.add(setLabel(2,5,1,1,"密码:"); public static void main(String args) new LogicFrame(); private class Jradio implements ItemListener public void itemStateChanged(ItemEvent e) itemjishu+; 用户界面代码package frame;import javax.swing.*;import java.awt.*;import java.awt.event.*;import frame.Deleter;/管理员界面class User extends JFrameJFrame fm;public User() fm=new JFrame("管理员界面"); fm.setBounds(500,300,400,400); Container cm=fm.getContentPane(); cm.setLayout(new FlowLayout(); cm.setBackground(Color.magenta); JButton b31=new JButton(" 添加读者信息 "); b31.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Insertr i=new Insertr(fm,"添加读者信息");); JButton b32=new JButton(" 更新读者信息 "); b32.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Updater d=new Updater(fm,"更新读者信息");); JButton b33=new JButton(" 删除读者信息 "); b33.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Deleter d=new Deleter(fm,"删除读者信息");); JButton b34=new JButton(" 查询读者信息 "); b34.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Querry1 c=new Querry1(fm,"读者信息查询");); JButton b35=new JButton(" 添加图书信息 "); b35.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Insertb i=new Insertb(fm,"添加图书信息");); JButton b36=new JButton(" 更新图书信息 "); b36.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Updateb d=new Updateb(fm,"更新图书信息");); JButton b37=new JButton(" 删除图书信息 "); b37.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Deleteb d=new Deleteb(fm,"删除图书信息");); JButton b38=new JButton(" 查询图书信息 "); b38.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Querry c=new Querry(fm,"图书信息查询"););JButton b39=new JButton(" 添加借阅信息 "); b39.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Insertbr i=new Insertbr(fm,"添加借阅信息");); JButton b40=new JButton(" 更新借阅信息 "); b40.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Updatebr d=new Updatebr(fm,"更新借阅信息");); JButton b41=new JButton(" 删除借阅信息 "); b41.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Deletebr d=new Deletebr(fm,"删除借阅信息");); JButton b42=new JButton(" 查询借阅信息 "); b42.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Querry2 c=new Querry2(fm,"借阅信息查询");); JButton b44=new JButton(" 退出 "); cm.add(b31); cm.add(b32); cm.add(b33); cm.add(b34); cm.add(b35); cm.add(b36); cm.add(b37); cm.add(b38); cm.add(b39); cm.add(b40); cm.add(b41); cm.add(b42); cm.add(b44); b44.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) System.exit(0); ); tryUIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch(Exception e) e.printStackTrace();fm.setResizable(true);fm.setVisible(true); public static void main(String args) new User();读者信息添加代码 package frame;import javax.swing.*;import dao.DAO;import bean.readers;import dao.readersDao;import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;public class Insertr extends JDialog JTextField t=new JTextField();JTextField t1=new JTextField();JTextField t2=new JTextField();JTextField t3=new JTextField();JLabel l=new JLabel("请输入你要添加的读者信息");JLabel l1=new JLabel(" 读者编号: ");JLabel l2=new JLabel(" 读者姓名: ");JLabel l3=new JLabel(" 读者性别: ");JLabel l4=new JLabel(" 读者借书日期:");JButton j=new JButton("添加");GridBagLayout grid;GridBagConstraints cts;public Insertr(JFrame s,String title)super(s,title);grid = new GridBagLayout();cts=new GridBagConstraints();setBounds(550,350,300,300);Container c=getContentPane();c.setLayout(grid);c.setBackground(Color.cyan); try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch(Exception