《图书管理系统项目系统编程文档.doc》由会员分享,可在线阅读,更多相关《图书管理系统项目系统编程文档.doc(27页珍藏版)》请在三一办公上搜索。
1、图书管理系统项目系统编程文档题目: 图书管理系统 班级: 08信息管理与信息系统本科班 姓名: 指导老师: 2009年12月28日版 本 历 史版本/状态作者参与者起止日期备注版本1祝灵叶祝灵叶、同学帮助加老师指导2009-12-102009-12-18完成基本界面的设置,实现不同身份登陆不同界面,能够进行不同的操作版本2祝灵叶祝灵叶、同学帮助加老师指导2008-12-202009-12-24实现了各个按钮的监听及页面的跳转版本3祝灵叶祝灵叶、同学帮助加老师指导2009-12-252010-12-28连接上了数据库,实现了增删改查基本功能,并且实现了界面的整体美化效果一、需求分析1.开发背景和
2、意义图书管理是高校内每一个系部或院部都必须切实面对的工作,但一直以来人们使用传统的人工方式管理图书资料。这种方式存在着许多缺点,如效率低、保密性差且较为繁琐。另外,随着图书资料数量的增加,其工作量也将大大增加,这必将增加图书资料管理者的工作量和劳动强度,这将给图书资料信息的查找、更新和维护都带来了很多困难。经过详细的调查,目前我国各类高等学校中有相当一部分单位图书资料管理还停留在人工管理的基础上。这样的管理机制已经不能适应时代的发展,其管理方法将浪费许多人力和物力。随着科学技术的不断提高,这种传统的手工管理方法必然被以计算机为基础的信息管理方法所取代。图书管理作为计算机应用的一个分支,有着手工
3、管理无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高图书管理的效率。因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书管理系统,将是非常必要的,也是十分及时的。2.系统需求概况2.1任务概述经过对我校图书馆详细调查,加深了对现行图书管理业务的深刻了解,与此同时,将整个图书管理系统的业务流程抽象描述如下:1、新的图书购进后,管理员对其分门别类地进行汇总、编号、上架,以备学生借阅。2、旧的图书需要撤架,管理员对其信息删除,以备馆藏。3、如有图书信息需要修改,管理员可以修改其相应的信息。4、管理员可以对有权借阅书籍的同学进行增加和
4、删除。5、学生如需借书,则应在其借阅表上进行相应的登记。6、学生可以在一定的条件下续借一定的书籍。7、学生借阅图书后,应及时归还,并在借阅表中删除相应的借阅信息。2.2 功能需求以下是图书管理系统必须具备的功能:1.新进图书的登记功能:对于购进的新书,系统必须具备图书信息资料(编号、书名、图书类型、出版社、作者、定价)的录入功能。2.图书的查询修改功能:当图书资料发生变化,如图书丢失或有错误信息输入时,则应能够及时对数据进行修改和补充。3.图书的删除功能:当一部分图书因受损严重时,需要对其信息删除并进行馆藏。3.借阅的登记、续借的登记及归还的登记功能:系统的主要功能之一,供本校学生借阅图书、续
5、借图书和归还图书,并进行登记。4.学生信息的增加、删除和修改功能:系统主要功能之一,建立学生信息,并对其进行维护。2.3性能需求为了保证系统能够长期、安全、稳定、可靠、高效的运行,图书管理系统应该满足以下的性能需求:1、系统处理的准确性和及时性系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足学校对信息处理的需求。2、系统的开放性和系统的可扩充性图书管理系统在开发过程中,应该充分考虑以后的可扩充性。例如用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这
6、一点,应通过系统的开放性来完成,即系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。3、系统的易用性和易维护性图书管理系统是直接面对使用人员的,而使用人员往往对计算机并不时非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。4、系统的标准性系统在设计开发使用过程中都要涉及到很多计算机硬件、软件。所有这些都要符合主流国际、国家和行业标准。针对新的业务流程,
7、现具体描述其功能如下:1.用户登录:系统对用户合法性进行检查,并适合不同身份的人员进行登录。2.图书入库:对新购进的图书分类进行编号,并把图书基本信息录入计算机。3.图书撤架:旧的图书需要撤架,管理员对其信息删除,以备馆藏。4.图书信息的修改:如有图书信息需要修改,管理员可以修改其相应的信息。4.学生权限的修改:管理员可以对有权借阅书籍的同学进行增加和删除。5.图书借阅:对已入库的图书,学生可以借阅,并进行登记。6.图书续借:对学生续借的图书进行登记。7.图书归还:对学生已归还的图书进行相应的归还登记。 8.信息查询:即对所有图书的借阅情况,或学生的基本情况和借阅情况进行查询。二、概念结构设计
8、类型读者读者编号读者姓名图书借阅密码家庭住址性别图书编号图书名称图书名称出生年月出版社名图书作者图书编号读者编号读者姓名联系电话借书量是否归还价格入库量三、逻辑结构设计转换的原则将实体转换成一个单个的表,实体的属性转换成关系的属性如果是多对多的话,一定要把它转换一个单独的关系,关系的属性是两端实体的码和自身所带的属性组成如果是一对多,则把它的任意一端合并到n端去如果是一对一则合并任意段即可将图书管理系统的E-R图转换为关系数据库的数据模型,其关系模式为(其中加下划线的属性为主码):管理员信息表(编号、姓名、性别、出生年月、联系电话、家庭住址、密码);读者信息表(读者编号、读者姓名、性别、出生年
9、月、联系电话、家庭住址、密码、借书量);图书(图书编号、图书名称、图书作者、出版社名、定价、入库量、类别、内容简介、是否借出);借阅信息表(读者编号、图书编号、读者姓名、图书名称、是否归还);四、物理结构设计与实现(1)结构设计 物理结构主要是指数据库的存储记录格式、存储记录的安排和存取方法。表结构设计:(各表字段名、类型长度、空否、说明)读者信息表字段名数据类型可否为空说明UidChar(10)否读者编号【主键】UnameChar(10)否读者姓名UsexChar(10)否读者性别BirthdayChar(10)可空出生年月PhoneChar(15)可空联系电话AddressVarchar(
10、50)可空家庭住址PasswordChar(10)否密码SumbookChar(10)可空借书量图书信息表字段名数据类型可否为空说明IdChar(10)否图书编号【主键】NameChar(30)否图书名称AuthorChar(10)可空图书作者PublisherChar(30)可空出版社名PriceChar(10)可空定价SumChar(10)可空入库量SortChar(10)可空类别PreviewChar(50)可空内容简介借阅信息表字段名数据类型可否为空说明UidChar(10)否读者编号【主键】UnameChar(10)可空读者姓名IdChar(10)否图书编号【主键】NameChar(
11、20)可空图书名称ObkeepChar(10)否是否归还管理员信息表字段名数据类型可否为空说明IdChar(10)否编号NameChar(10)否姓名SexChar(10)否性别BirthdayChar(10)可空出生年月PhoneChar(15)可空联系电话AddressVarchar(50)可空家庭住址PasswordChar(10)否密码(2)建立数据库1建立数据库及其表(主要叙述如何建立)通过企业管理器,在图书管理系统数据库的图书、读者、管理员和借阅4张表中各输入相应条数的纪录。同时满足数据的约束要求和表间关联的纪录。以实现对图书管理系统数据库的图书、读者、和借阅3张表中数据的插入、删
12、除和修改操作。2.创建约束、默认和规则通过对表结构的设计,对图书管理系统数据库的图书、读者和借阅3张表内的属性进行恰当的完整性约束、默认和规则。以达到列级完整性的约束条件。二、功能描述1. 登录模块程序名称图书管理系统功能描述实现了图书管理系统的登录界面,包括学生和管理员不同身份实现功能的主界面。开发者祝灵叶起止日期2009-12-102009-12-131. 登陆界面: 2. 学生功能的主界面: 3. 管理员功能的主界面: 4.在实现不同用户身份登录的时候,由于不会设约束,就直接从两张表里查询实现登录。核心的sql语句如下: ConnDb db = ConnDb.createInstance
13、();String sql1; System.out.println(tfUsername.getText()+tfPassword.getText();try sql1 = select * from Users where Uid=? and Password=?;db.setPs(sql1);db.getPs().setString(1, tfUsername.getText();db.getPs().setString(2, tfPassword.getText();db.setRs(db.getPs().executeQuery();String sql2 = select * fr
14、om Manager where Id=? and Password=?;db.setPs(sql2);db.getPs().setString(1, tfUsername.getText();db.getPs().setString(2, tfPassword.getText();ResultSet rs = db.getPs().executeQuery();if(db.getRs().next()/成功登录后,显示读者界面Login.this.setVisible(false);Login.this.dispose();new Readers(图书管理系统);else if(rs.nex
15、t() /成功登录后,显示管理员界面 Login.this.setVisible(false); Login.this.dispose(); new Manager(图书管理系统);elseJOptionPane.showOptionDialog(Login.this,用户名或密码有误,请重新输入!,登录错误, JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,null, null, null); catch (SQLException e1) e1.printStackTrace();问题1:不知道怎么实现不同的身份登录不
16、同的界面。对策:在连接数据库的表中,设置两张表,使用不同的sql语句进行查询,从而实现了不同身份用户的登录。在一开始的时候,我把不同用户的登录想的比较简单,以为只是在数据库里设置一种约束就行,但事实并非如此,这种约束并不是那么好设。最后,我选择了通过在数据库中调用两张表实现了此功能。启发:做事不能钻牛角尖,要学会变通,要学会知识的灵活掌握,不拘泥于课本,一切知识要源于课本并且高于课本。2. 增加功能模块程序名称图书管理系统功能描述实现了读者和图书的增加功能开发者祝灵叶起止日期2008-12-132009-12-151.新书入库的界面:实现监听的核心代码如下:btnSubmit.addActio
17、nListener(new ActionListener()public void actionPerformed(ActionEvent e) /如果以上验证均通过则开始添加新数据int num = 0;ConnDb db = ConnDb.createInstance();String id = txtId.getText();String name = txtName.getText();String author = txtAuthor.getText();String publisher = txtPublisher.getText();String price = txtPrice
18、.getText();String sum = txtSum.getText();String cbsort = (String)cbSort.getSelectedItem();System.out.println(cbsort);String preview = txtPreview.getText();String sql = insert into Books values (+id+,+name+,+author+,+publisher+,+price+,+sum+,+cbsort+,+preview+);db.update1(sql); );2.添加新读者的界面:实现监听的核心代码
19、如下:btnSubmit.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) if (txtId.getText().equals()|txtName.getText().equals() |txtBirthday.getText().equals()| cblSex.getSelectedItem().equals() |txtPhone.getText().equals() | txtAddress.getText().equals() ) javax.swing.JOptionP
20、ane.showMessageDialog(AddReader.this, 各栏均不能为空!); else ConnDb db = ConnDb.createInstance(); String id = txtId.getText();String name = txtName.getText();String birthday = txtBirthday.getText();String sex = (String)cblSex.getSelectedItem();String phone = txtPhone.getText();String address = txtAddress.g
21、etText(); String sql1 = INSERT Users VALUES (+id+,+name+,+sex+,+birthday+,+phone+,+address+,+id+,0); db.update1(sql1); String sql = SELECT Uid FROM Users WHERE Uname = +txtName.getText() + + ORDER BY Uregtime DESC; db.setPs(sql); ResultSet rs = db.getRs(); String ids = null; try if(rs.next() ids = r
22、s.getString(Uid); javax.swing.JOptionPane.showMessageDialog(AddReader.this,读者添加成功!读者编号为: + id + 请牢记!); else javax.swing.JOptionPane.showMessageDialog(AddReader.this,读者添加失败!请重试。); catch (SQLException ex1) javax.swing.JOptionPane.showMessageDialog(AddReader.this,ex1.getMessage().toString(); );由于数据库学的不
23、是很好,所以开始的时候一些增、删、改、查的sql语句弄得我焦头烂额,在同学的帮助下,这部分终于成功了。启发:在遇到困难的时候,如果自己故居奋战不能把问题解决,那么就要求救于人或是上网查些资料,不要自己死抠,以免钻入死胡同,有时候还是集体的智慧比较厉害。3. 删除功能模块程序名称图书管理系统功能描述实现了读者和图书的删除功能开发者祝灵叶起止日期2009-12-152010-12-181.旧书撤出的界面: 实现监听的核心代码如下: btnSubmit.addActionListener(new ActionListener()public void actionPerformed(ActionEv
24、ent e) / TODO 自动生成方法存根String id = txtId.getText().trim();String sql = delete from Books where Id=+id+;db = ConnDb.createInstance();/连接数据库db.update1(sql);String sql1 = select * from Books where Id=+id+;db.setPs(sql1);db.query1(sql1);try if(!db.getRs().next()JOptionPane.showOptionDialog(DeleteBook.thi
25、s,删除成功,提示框, JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,null, null, null); elseJOptionPane.showOptionDialog(DeleteBook.this,删除不成功,提示框, JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE,null, null, null); catch (HeadlessException e1) / TODO Auto-generated catch blocke1.print
26、StackTrace(); catch (SQLException e1) / TODO Auto-generated catch blocke1.printStackTrace();2.删除读者的界面: 实现监听的核心代码如下: btnSubmit.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) if (txtId.getText().equals() | cblSex.getSelectedItem().equals() |txtPhone.getText().equals()
27、 | txtAddress.getText().equals() | txtName.getText().equals()| txtBirthday.getText().equals() javax.swing.JOptionPane.showMessageDialog(DeleteReader.this, 各栏位不能为空,请重填!); else ConnDb db = ConnDb.createInstance(); String readId = txtId.getText().trim(); String sql = delete from Users where Uid=+readId
28、+; db.update1(sql); String sql1 = select * from Books where Id=+readId+;db.setPs(sql1);db.query1(sql1); try if (!db.getRs().next() javax.swing.JOptionPane.showMessageDialog(DeleteReader.this,编号为 + readId + 的读者已被成功删除!); else javax.swing.JOptionPane.showMessageDialog(DeleteReader.this, 删除失败!请再试。); cat
29、ch (HeadlessException e1) / TODO Auto-generated catch blocke1.printStackTrace(); catch (SQLException e1) / TODO Auto-generated catch blocke1.printStackTrace(); );.由于数据库学的不是很好,所以开始的时候一些增、删、改、查的sql语句弄得我焦头烂额,在同学的帮助下,这部分终于成功了。启发:在遇到困难的时候,如果自己故居奋战不能把问题解决,那么就要求救于人或是上网查些资料,不要自己死抠,以免钻入死胡同,有时候还是集体的智慧比较厉害。4.
30、更新功能模块程序名称图书管理系统功能描述实现了读者和图书的更新功能开发者祝灵叶起止日期2009-12-182010-12-201.图书信息更新的界面: 实现监听的核心代码如下: btnSure.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) ConnDb db = ConnDb.createInstance(); String sql = UPDATE Books SET Id = + txtBid.getText() +,Name = + txtBname.getText()
31、+,Author = + txtBauthor.getText() + ,Publisher = + txtPublisher.getText() +,Price = + Double.parseDouble(txtPrice.getText() + ,Sums = +txtBsum.getText() + ,Sort = + (String) cbSort.getSelectedItem() +,Preview = +txtBpreview.getText() + WHERE Id =+id+ ; db.update1(sql); javax.swing.JOptionPane.showMe
32、ssageDialog(UpdateBook.this, 图书信息修改成功!); );2.读者信息更新的界面: 实现监听的核心代码如下: btnSure.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) ConnDb db = ConnDb.createInstance();String sql = UPDATE Users SET Uname=+txtUname.getText().trim()+,Phone= + txtPhone.getText().trim() +,Addre
33、ss= + txtAddress.getText().trim() +,Usex= + txtUsex.getText().trim() +,Birthday= + txtBirthday.getText().trim()+ WHERE Uid = + id.trim()+;db.update1(sql);javax.swing.JOptionPane.showMessageDialog(UpdateReader.this, 信息修改成功!););由于数据库学的不是很好,所以开始的时候一些增、删、改、查的sql语句弄得我焦头烂额,在同学的帮助下,这部分终于成功了。启发:在遇到困难的时候,如果自
34、己故居奋战不能把问题解决,那么就要求救于人或是上网查些资料,不要自己死抠,以免钻入死胡同,有时候还是集体的智慧比较厉害。5.查询功能模块程序名称图书管理系统功能描述实现了读者和图书的查询功能开发者祝灵叶起止日期2009-12-212010-12-231. 图书信息查询的界面: 实现监听的核心代码如下: btnFind.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) if (txtWhat.getText().equals() javax.swing.JOptionPane.show
35、MessageDialog(BookManage.this, 请输入查询信息!); return; ConnDb db = ConnDb.createInstance(); String sql = ; if (String) cbWay.getSelectedItem().equals(图书编号) /Integer.parseInt(txtWhat.getText(); sql = SELECT * FROM Books WHERE Id = +txtWhat.getText()+; else if (String) cbWay.getSelectedItem().equals(图书名称)
36、sql = SELECT * FROM Books WHERE Name = + txtWhat.getText() +; else if (String) cbWay.getSelectedItem().equals(类别) sql = SELECT * FROM Books WHERE Sort = + txtWhat.getText() + ; else if (String) cbWay.getSelectedItem().equals(图书作者) sql = SELECT * FROM Books WHERE Author = + txtWhat.getText() +; else
37、sql = SELECT * FROM Books WHERE Publisher = + txtWhat.getText() +; JTable table = initTable(sql); JScrollPane jsp = new JScrollPane(table); jsp.setBounds(20, 150, 650, 250); / p1.add(jsp); panel.add(jsp);BookManage.this.setVisible(true);db.closeAll(););2.读者信息查询的界面: 实现监听的核心代码如下: btnFind.addActionList
38、ener(new ActionListener()public void actionPerformed(ActionEvent e) if (txtWhat.getText().equals() javax.swing.JOptionPane.showMessageDialog(ReaderManage.this, 请输入查询信息!); return; ConnDb db =ConnDb.createInstance(); String sql = ; if (String) cbWay.getSelectedItem().equals(读者编号) sql = SELECT * FROM U
39、sers WHERE Uid = +Integer.parseInt(txtWhat.getText(); else sql = SELECT * FROM Users WHERE Uname = + txtWhat.getText() + ; /开始查询 db.setPs(sql); db.query1(sql); ResultSet rs = db.getRs(); int count = 0; try /count用于查询共有多少条包含指定条件的信息 while (rs.next() count+; rs.close(); catch (SQLException ex1) javax.swing.JOptionPane.showMessageDialog(ReaderManage.this,ex1.getMessage().toString(