1、图书馆管理系统本科毕业论文 作者: 日期:2 个人收集整理 勿做商业用途毕业设计(论文) 题目: 图书馆管理系统 姓 名 陈 平 学 号 专 业 计算机网络 指导教师 周亚凤 南京航空航天大学2012年4月目录摘要III前言IV第一章 图书馆管理系统分析11.1 需求分析11。2 功能分析21。3 系统用例图设计21.4 绘制系统流程图31.5 系统的开发环境4第二章 数据库分析与设计52.1 数据库分析52.2 数据库概念设计52。3 数据逻辑结构设计72。4 各表之间的联系图9第三章 系统设计与功能实现103。1 数据库Dao类的构建103.2 系统登录模块113.3 主窗体模块133.4
2、 图书类别管理模块153.5 图书信息管理模块173。6 读者信息管理模块213.7 图书订购管理模块243。8 图书借阅管理模块273。9 系统维护模块30第四章 系统测试354。1 测试项目354.2 测试用例35结束语37参考文献38图书馆管理系统摘要图书馆管理系统是采用Java做前台,后台数据库则采用的是SQL Server 2005,本系统提供6个功能模块,分别是图书类别管理模块、图书信息管理模块、读者信息管理模块、新书订购管理模块、图书借阅模块,以及系统维护模块。这6个模块里又有许多子模块,通过这些模块之间的相互连接与配合,完成操作员发出的各种指令。图书馆管理系统是一个供内部人员使
3、用的系统.而图书馆的工作人员也分为两类,一类是操作人员,主要负责图书的借阅和归还的工作;一类是管理员,除了操作人员的所有功能外,还能够对书籍列表、书籍信息、读者信息等进行管理。论文将全面介绍所设计的图书馆管理系统的系统功能和业务流程,并对系统进行详细的数据分析和设计,最终使用Java完成系统开发.关键词:图书馆管理系统,SQL Server 2005,Java前言随着社会的发展,人们对于知识的需求也在不断地增长。书籍作为人们获取并增长知识的主要途径,使得图书馆在人们生活中占有了一定位置。但是近几年来,随着书量的不断增长,造成了书库空间极度不足,图书挤压,管理不善。这些都直接影响了读者对图书馆藏
4、书的充分利用。这时图书馆就特别需要开发一套图书馆管理系统,通过该系统来提高图书馆的管理效率,从而减少管理方面的工作流和成本。一个现代化的图书馆在正常运营中总是面对大量的读者信息,书籍信息以及两者相互作用产生的借书信息,还书信息.面对图书馆数以万计的图书,纷繁复杂的读者信息,频繁更替的借还书信息,传统的直接方法不但管理出现漏洞,造成损失。因此有一个智能化、系统化、信息化的图书管理系统十分重要的.充分利用计算机的功能实现对读者管理、书籍管理,借阅管理等自动化控制,将会使图书馆的工作大大减弱。方便友好的图形界面、简便的操作、完善的数据库管理.将会使得图书馆系统极大限度的应用于现代化图书管理中.33第
5、一章 图书馆管理系统分析1。1 需求分析图书馆管理系统是一个高度集成的图书信息处理系统,通过将图书馆的各种功能进行整合,从而达到显示检索信息,提高工作效率,降低管理成本等目的。一个典型的图书馆管理系统应该能够管理所有的图书种类,图书信息以及读者信息,还需要提供各种图书信息的检索查询功能.该系统还需要能够对图书的借阅,归还进行管理,并对读者的罚款进行自动计算。通过该系统的自动化管理,能够大大减少图书馆管理人员,还能减少管理人员的工作任务,从而降低管理开销和成本。一个完整的图书馆管理系统包括前台和后台,前台主要是显示在计算机屏幕上的显示界面,有各种指令按钮,操作框以及文本框,后台主要是为前台的一些
6、操作提供一些必要的数据,也就是一个相对于系统比较完整的数据库,操作员以及各类图书的信息,借书者的信息等等。一个最基本的图书馆管理系统要有如下几个重要功能:(1) 用户在借书超期的情况下得到来自管理员的提醒。(2) 管理员可以方便进行图书管理,用户管理,管理员管理。图书管理包括图书信息以及图书分类的添加,修改,删除。用户管理包括用户信息的添加,删除,修改。管理员管理包括管理员信息的添加,删除,修改等。(3) 用户和管理员可以修改自己的密码,修改前需先核实自己的原始密码。(4) 未注册用户(游客)也可以浏览所有的图书信息和分类信息,但是无法借阅. (5)实现模糊查询,使用户得到更多的相关记录。并且
7、考虑使用的方便性,一些经常使用的输入无须用户输入,比如进行图书查询时图书分类只须用户做选择就可以. (6)考虑程序执行操作时可能出现的情况,比如删除图书分类时该分类下存在图书,程序自动跳转该分类图书查看。删除某个用户,如果存在借书记录则不允许删除,跳转到该用户的借书记录。等待管理员确认该用户所借图书已经全部归还之后才允许删除该用户信息.一个图书馆管理系统要是能实现以上的各种功能,那么这个图书馆管理系统也就算是比较成功的一个系统了。1.2 功能分析 根据以上需求分析,我所设计的图书馆管理系统有6个功能模块,分别是图书类别管理模块,图书信息管理模块,读者信息管理模块,新书订购管理模块,图书借阅模块
8、以及系统维护模块.其中各功能模块的具体说明如下:图书类别管理模块:该模块主要负责管理图书馆的图书种类信息,如图书种类的名称、可借天数、罚款数目等信息。图书信息管理模块:该模块主要负责管理图书馆的图书信息,如图书编号、图书名称、作者、出版社等信息。读者信息管理模块:该模块主要负责管理图书馆的读者信息,如读者编号、读者信息、证件号码、最大借书量等信息。图书订购管理模块:该模块主要负责管理图书馆的新书订购信息、包括新书订购和验收新书两个子模块。图书借阅管理模块:该模块主要负责图书馆的书籍借阅和归还信息,包括图书借阅、图书归还、图书搜索3个子模块.系统维护模块:该模块主要负责图书馆的工作人员信息,包括
9、用户管理和更改系统口令两个子模块.1.3 系统用例图设计图书馆管理系统是一个内部人员使用的系统,也就是说不是所有的人都能够使用它,只有图书馆的工作人员才能使用.而图书馆的工作人员也分为两类,一类是操作人员,主要负责图书的借阅和归还的工作;一类是管理员,除了操作人员的所有功能外,还能够对书籍列表,书籍信息,读者信息等进行管理。下面以管理员为例绘制其所对应的用例图如图1.1所示. 图1.1 管理员用例图1.4 绘制系统流程图本系统首先需要对用户的身份进行识别,只有合法的用户才能进入系统,否则将无法进入系统.进入系统后,首先打开系统主窗体,在系统首页的菜单栏或者功能区可以选择各种导航链接来进行各种操
10、作.由于不同权限的用户对于系统有不同的功能,下面以功能最多的管理员为例,其系统流程图如图1.2所示.图1。2 系统流程图1.5 系统的开发环境图书馆管理系统的具体开发环境要求如下:(1) 系统开发平台:Eclipse 3。4。(2) 数据库管理系统软件:SQL Server 2005。(3) 运行平台:Windows 7。(4) Java开发包:JDK 5。0以上.(5) 分辨率:800600以上。(6) GUI开发包:Swing。第二章 数据库分析与设计2。1 数据库分析在开发图书馆管理系统时,考虑到图书量大,数据库维护大的特点,选用SQL Server 2005作为数据库管理系统。在SQL
11、 Server 2005中新增一个数据库,其数据库名为db_library.数据库中可以包含图书信息、图书类别信息、图书借阅信息、操作员信息、图书订购信息及读者信息等实体,用来存储不同的信息.2。2 数据库概念设计本系统一共设计规划出6个实体,分别是图书类别信息实体、图书信息实体、读者信息实体、操作员实体、图书借阅信息实体以及图书订购信息实体。图书的类别有很多,因此可以建立一个图书馆类别信息表,专门用来保存图书的类别信息。同时因为每种类别的书籍阅读时间有所不同,所以需要在类别表中保存该类别可借天数信息.图书类别信息实体ER图如图2。1所示.图2.1 图书类别信息实体E-R图对于图书馆来说最重要
12、的就是要管理其下的书籍,所以需要建立一个图书信息表,用来保存图书的所有信息.图书信息实体E-R图如图2。2所示.图2。2 图书信息实体E-R图要想在图书馆借书首先需要进行登记并交付押金。领取读书卡才能借书。所以需要建立一个读者信息表来保存图书馆的所有读者的登记信息.读者信息实体E-R图如图2。3所示。图2。3 读者信息实体E-R图图书馆里一般有一个以上的系统操作员,需要建立一个操作员信息表,用来保存操作员的身份信息。操作员信息实体ER图如图2.4所示。图2.4 操作员信息实体ER图图书馆最大的功能就是能够借书,这时需要建立一个图书借阅信息表,用来保存读者的借书信息。图书的借阅信息实体ER图如图
13、2.5所示.图2.5 图书的借阅信息实体E-R图图书馆除了借书,还需要到出版社或其他代理商订购新书,这是需要建立一个图书订购信息表,用来保存所有的订购信息.图书订购信息实体E-R图如图2.6所示。图2.6 图书订购信息实体ER图2.3 数据逻辑结构设计根据设计好的各实体ER图创建数据库的逻辑结构,数据库各表的结构如下: (1)图书类别信息采表用来储存所有的图书类别信息,包括图书类别编号、图书类别名称、可借天数以及迟还一天的罚款数目4个字段.该表的逻辑结构如表2.1所示.表2.1 图书类别信息表字 段 名数 据 类 型是 否 主 键描 述id整数(int)是图书类别编号typeName文本(va
14、rchar)否图书类别名称days整数(int)否可借天数fk浮点数否迟还一天的罚款数目 (2)图书信息表用来储存所有的图书信息,包括图书编号、类别编号、图书名称、作者、译者、出版社、出版日期以及书籍价格8个字段.该表的逻辑结构如表2。2所示.表2.2 图书信息表字 段 名数 据 类 型是 否 主 键描 述ISBN文本(varchar)是图书编号typeId整数(int)否(外键)类别编号bookname文本(varchar)否图书名称writer文本(varchar)否作者translator文本(varchar)否译者publisher文本(varchar)否出版社date日期时间(dat
15、etime)否出版日期price金钱货币(money)否书籍价格(3)读者信息表用来储存所有的读者信息,包括读者姓名、性别、年龄、证件号码、会员证有效日期、最大借书量、电话号码、押金、证件类型、职业、读者编号以及办证日期12个字段.该表的逻辑结构如表2。3所示。表2.3 读者信息表字 段 名数 据 类 型是 否 主 键描 述name文本(varchar)是读者姓名sex文本(varchar)否(外键)读者性别age整数(int)否读者年龄identityCard文本(varchar)否证件号码date日期时间(datetime)否会员证有效日期maxNum整数(int)否最大借书量tel文本(
16、varchar)否电话号码keepMoney金钱货币(money)否押金zj整数(int)否证件类型zy文本(varchar)否职业ISBN文本(varchar)是读者编号bztime日期时间(datetime)否办证日期 (4)操作员信息表用来保存操作员信息,包括操作员编号、用户名、性别、年龄、证件号码、工作时间、电话号码、是否为管理员、密码9个字段。该表的逻辑结构如表2。4所示。表2.4 操作员信息表字 段 名数 据 类 型是 否 主 键描 述id整数(int)是(自动递增)操作员编号name文本(varchar)否用户名sex文本(varchar)否性别age整数(int)否年龄iden
17、tityCard文本(varchar)否证件号码workdate日期时间(datetime)否工作时间tel文本(varchar)否电话号码admin整数(int)否是否为管理员password文本(varchar)否密码 (5)图书借阅信息表用来保存所有图书的借阅信息,包括借阅编号、书籍编号、操作员编号、读者编号、是够归还、借书日期以及应还日期7字段。该表的逻辑结构如表2.5所示。表2。5 图书借阅信息表字 段 名数 据 类 型是 否 主 键描 述id整数(int)是(自动递增)借阅编号bookISBN文本(varchar)否(外键)书籍编号operatorId整数(int)否(外键)操作员
18、编号readerISBN文本(varchar)否(外键)读者编号isback整数(int)否是否归还borrowDate日期时间(datetime)否借书日期backdate日期时间(datetime)否应还日期 (6)图书订购信息表用来保存图书馆的所有订购信息,包括书籍编号、订购日期、订购数量、操作员、是否验收以及书籍折扣6个字段。该表的逻辑结构如表2。6所示。表2.6 图书订购信息表字 段 名数 据 类 型是 否 主 键描 述ISBn文本(varchar)是书籍编号date日期时间(datetime)否订购日期number整数(int)否订购数量operator文本(varchar)否操作
19、员checkAndAccept整数(int)否是否验收zk浮点否书籍折扣2.4 各表之间的联系图各表间的联系图如图2.7所示。图2.7 各表间联系图第三章 系统设计与功能实现3。1 数据库Dao类的构建首先定义了一个类Dao,并为该类添加了4中方法,分别是构造方法Dao、查询方法executeQuery、更新方法executeUpdate以及关闭连接方法close。public class Dao protected static String dbClassName = ”com.microsoft。sqlserver。jdbc。SQLServerDriver”;/数据库连接驱动类prote
20、cted static String dbUrl = ”jdbc:sqlserver:/localhost:1433;+ DatabaseName=db_library;/数据库连接URLprotected static String dbUser = sa;/数据库用户名protected static String dbPwd = 123;/数据库密码private static Connection conn = null;/数据库连接对象private static String ISBN;private Dao() /构造方法 try if (conn = null) /如果连接对象
21、为空 Class。forName(dbClassName);/加载驱动类 conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);/获得连接对象 catch (Exception ee) ee。printStackTrace();private static ResultSet executeQuery(String sql) /查询方法 try if(conn=null) new Dao(); /如果连接对象为空,则重新调用构造方法 return conn。createStatement(ResultSet。TYPE_SCROLL_S
22、ENSITIVE,ResultSet。CONCUR_UPDATABLE)。executeQuery(sql);/执行查询 catch (SQLException e) e。printStackTrace(); return null;/返回null值 finally private static int executeUpdate(String sql) /更新方法 try if(conn=null) new Dao();/如果连接对象为空,则重新调用构造方法 return conn.createStatement()。executeUpdate(sql);/执行更新 catch (SQLEx
23、ception e) e。printStackTrace(); return 1; finally public static void close() /关闭方法 try conn。close();/关闭连接对象 catch (SQLException e) e.printStackTrace(); finally conn = null;/设置连接对象为null值 3。2 系统登录模块 对于图书馆管理系统而言,不是所有的用户都是可以使用的,所有需要添加一个登陆模块。通过该模块来对用户的合法性进行判断,只有合法的用户才能进入到系统。整个登陆模块的实现非常简单,相信读者能够快速掌握其开发过程.
24、登录模块的运行结果如图3。1所示。图3.1 系统登录界面3。2。1 登陆窗体界面设计与实现 登陆窗体的界面设计我依然采用的是比较传统的方法,新建一个类BookLoginFrame类,用来显示登录窗体。在该窗体中需要使用到四类控件,分别是JLabel、JTextFieid、JPasswordField以及JButton。其中控件JLabel是用来显示顶部的图片以及标签文本;控件JTextFieid用来接收用户名输入信息;控件JPasswordField用来接收密码输入信息;控件JButton用来创建登陆和重置按钮。3。2。2 操作员登陆在Dao类中新增一个方法check,通过该方法来检测用户信息
25、是否合法.该方法接收两个参数,分别是操作员用户名name,操作员密码passsward。主要方法如下:public static Operater check(String name, String password) Operater operater=new Operater();/操作员信息对象String sql = select * from tb_operator where name=” + name+ ” and password= + password + and admin=1;ResultSet rs = Dao.executeQuery(sql);try while (
26、rs.next() operater。setId(rs。getString(id”);operater。setName(rs.getString(name”));operater.setGrade(rs。getString(”admin);operater。setPassword(rs.getString(password); 3。3 主窗体模块图书馆管理系统的主窗体模式是由三个部分组成的。第一部分是位于主窗体上组上端的系统菜单栏,用来实现链接系统功能菜单。第二部分位于菜单栏下面的工具栏,用来提供各种常用功能链接。第三部分位于工具下的系统功能窗口区域,主要用来显示各种功能窗口.3.3.1 主窗
27、体界面设计在主窗体中可以显示其他功能窗体,所以需要在该窗体中加入一个桌面窗体.通过将其他功能窗体加入到该窗体中.从而实现多窗体显。同时在主窗口体中,还需要添加一个main方法,该方法为系统入口的方法,通过执行该方法来执行系统。其主要代码如下: public class Library extends JFrame private static final JDesktopPane DESKTOP_PANE = new JDesktopPane();/桌面窗体public static void main(String args) try UIManager.setLookAndFeel(UIM
28、anager 。getSystemLookAndFeelClassName();/设置系统界面外观 new BookLoginIFrame();/登录窗口 catch (Exception ex) ex。printStackTrace(); public static void addIFame(JInternalFrame iframe) / 添加子窗体的方法DESKTOP_PANE.add(iframe);/新增子窗体下面再来配置主窗体的其他属性,首先需要设置其大小和位置,然后还要设置其菜单栏和工具栏,最后需要在桌面窗体中添加一个背景图片。其代码实现如下.public Library()
29、super();setDefaultCloseOperation(WindowConstants。EXIT_ON_CLOSE);/设置关闭按钮处理事件Toolkit tool = Toolkit。getDefaultToolkit();/获得默认的工具箱Dimension screenSize = tool。getScreenSize();/获得屏幕的大小setSize(800, 600);/设置窗体大小setLocation((screenSize.width - getWidth() / 2,(screenSize。height - getHeight()) / 2);/设置窗体位置set
30、Title(”图书馆管理系统);/设置窗体标题JMenuBar menuBar = createMenu(); /调用创建菜单栏的方法setJMenuBar(menuBar);/设置菜单栏JToolBar toolBar = createToolBar(); / 调用创建工具栏的方法getContentPane().add(toolBar, BorderLayout。NORTH);/设置工具栏final JLabel label = new JLabel();/创建一个标签,用来显示图片label。setBounds(0, 0, 0, 0);/设置窗体的大小和位置label。setIcon(n
31、ull); / 窗体背景DESKTOP_PANE。addComponentListener(new ComponentAdapter() public void componentResized(final ComponentEvent e) Dimension size = e.getComponent()。getSize();/获得组件大小label。setSize(e。getComponent().getSize());/设置标签大小label.setText(”img width= + size.width + ” height=+ size。height + ” src=+ this
32、.getClass().getResource(”/backImg。jpg)+ );/设置标签文本;DESKTOP_PANE.add(label,new Integer(Integer。MIN_VALUE));/将标签添加到桌面窗体getContentPane().add(DESKTOP_PANE);/将桌面窗体添加到主窗体中3.3.2 主窗体菜单栏设计 在Library类中定义一个createMenu方法,在该方法中实现菜单栏的设计。其运行界面如图3。2所示。图3。2 主窗体界面3.4 图书类别管理模块图书类别管理模块包含两个子模块,分别是图书类别添加和图书类别修改。其中图书类别添加模块用来
33、录入新的图书类别信息,图书列别修改模块用来修改已有的图书列别信息。系统界面如图3.3所示.图3.3 图书类别修改界面3.4。1 图书类别添加模块要添加图书类别信息,首先要在Dao中添加一个InsertbookType方法,通过该方法来接受用户输入的所有书籍类别信息,然后执行插入操作.其主要方法如下:public static int InsertBookType(String bookTypeName,String days,double fk) int i=0;tryString sql=insert intotb_bookType(typeName,days,fk)values(+book
34、TypeName+”,”+days+,+fk+); i=Dao.executeUpdate(sql);/执行插入操作 3.4.2 图书类别修改模块修改图书类别信息同保存图书类别信息非常类似,首先在Dao中添加一个方法UpdatebookType。通过该方法来接收图书修改表单中提交的书籍类别信息.其代码如下:public static int UpdatebookType(String id,String typeName,String days,String fk)int i=0;tryString sql=update tb_bookType set typeName=”+typeName+
35、”,days=”+days+,fk=”+fk+” where id=”+id+”;/System.out.println(sql); i=Dao。executeUpdate(sql);/执行更新操作 修改图书类别信息,是通过单击修改按钮执行的,上面我们已经为修改按钮注册了一个监听器,其对应的监听器类为ButtonActionLinter。下面来实现该监听器类,其实现代码如下:class ButtonAddListener implements ActionListenerpublic void actionPerformed(ActionEvent e)Object selectedItem
36、= bookTypeModel.getSelectedItem();int i=Dao。UpdatebookType(BookTypeId.getText()。trim(),selectedItem。toString(), days。getText().trim(),fk。getText()。trim();System.out。println(i);if(i=1)/如果返回值为1,则表示修改成功JOptionPane。showMessageDialog(null, 修改成功);Object results=getFileStates(Dao。selectBookCategory());mode
37、l。setDataVector(results,columnNames);table。setModel(model); 3.5 图书信息管理模块图书信息管理模块包含两个子模块,分别是图书信息添加和图书信息修改.其中图书信息添加模块用来录入新的图书信息,图书信息修改模块用来修改已有的图书信息.3.5.1 图书信息添加界面设计图书信息添加窗体一共包含三个部分,第一部分是位于窗体最上端的图片。第二部分是位于中间的主面板,用来提供各种标签和表单元素。第三部分是位于主面板下的按钮面板,用来提供添加和关闭两个按钮。其运行界面如图3。4所示。图3.4 图书信息添加界面主面板是整个窗体最重要也是最核心的部分,
38、其部分实现代码如下:public BookAddIFrame() super();final BorderLayout borderLayout = new BorderLayout();/创建边框布局管理器getContentPane()。setLayout(borderLayout);/设置布局setIconifiable(true);/ 设置窗体可最小化setClosable(true);/ 设置窗体可关闭setTitle(图书信息添加);/ 设置窗体标题setBounds(100, 100, 396, 260);/ 设置窗体位置和大小final JPanel mainPanel = n
39、ew JPanel();/创建中心面板mainPanel.setBorder(new EmptyBorder(5, 10, 5, 10);/设置边框final GridLayout gridLayout = new GridLayout(0, 4);/创建表格布局管理器gridLayout。setVgap(5);/设置组件之间垂直距离gridLayout。setHgap(5);/设置组件之间平行距离mainPanel。setLayout(gridLayout);/设置布局getContentPane()。add(mainPanel);/将中心面板加入到窗体final JLabel ISBNLa
40、bel = new JLabel();/创建图书编号标签ISBNLabel。setText(”图书编号:);/设置标签文本mainPanel。add(ISBNLabel);/添加到中心面板ISBN = new JTextField(请输入13位书号,13);/创建书号文本框ISBN。setDocument(new MyDocument(13)); /设置书号文本框最大输入值为13ISBN。setColumns(13);/设置文本框长度ISBN。addKeyListener(new ISBNkeyListener();/注册监听器ISBN.addFocusListener(new ISBNFoc
41、usListener());/注册监听器mainPanel.add(ISBN); 3.5.2 检测书籍编号是否已存在因为不可能存在重复的书籍编号。为了防止操作员的操作错误,所以需要提供一个书籍编号监测系统.如果该书籍号已存在,则不能进行添加,否则可以进行添加.要检测书籍编号是否存在,需要在Dao类中添加一个方法,该方法用来接收输入的书籍编号,然后查询该书籍编号对应的书籍记录,其主要方法如下:public static List selectBookInfo(String ISBN) /根据图书编号查询图书List list=new ArrayList();/保存所有查询到的书籍信息String
42、 sql = select * from tb_bookInfo where ISBN=”+ISBN+;ResultSet rs = Dao.executeQuery(sql);/执行查询/插入数据,关闭连接对书籍编号进行检测,一般是在操作员输入完书籍编号,并准备输入其他信息时来完成。这是需要新建一个ISBNFFocusListener监听类,该类继承了FocusAdoper类,并实现其中的focusLost,其实现代码如下:class ISBNFocusListener extends FocusAdapter public void focusLost(FocusEvent e)if(!Dao.selectBookInfo(ISBN.ge