




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程课程设计说明书软件工程课程设计说明书 设计题目:图书管理员系统专 业:计算机科学与技术班 级:4学 号:20140902410姓 名:李东峻指导教师:赵俊峰二一六 年 月 日目 录目录【摘要】1【关键词】2【任务概述】21.系统功能22.运行环境2【可行性研究】21、经济可行性:32、技术可行性:33、运行可行性:3【系统需求分析】4【概要设计】41,处理流程42,功能分块63,总体结构7【详细设计与实现】8一、系统流程图8二、主要实现代码9【软件测试】22【课程设计总结】-30【参考文献】31【摘要】软件工程 (Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。围绕工程设计、工程支持以及工程管理已提出了以下四条基本原则:(1)选取适宜的开发模型该原则与系统设计有关。在系统设计中,软件需求、硬件需求以及其它因素间是相互制约和影响的,经常需要权衡。因此,必需认识需求定义的易变性,采用适当的开发模型,保证软件产品满足用户的要求。(2)采用合适的设计方法在软件设计中,通常需要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方法有助于这些特征的实现,以达到软件工程的目标。(3)提供高质量的工程支撑工欲善其事,必先利其器。在软件工程中,软件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。(4)重视软件工程的管理软件工程的管理直接影响可用资源的有效利用,生产满足目标的软件产品以及提高软件组织的生产能力等问题。因此,仅当软件过程予以有效管理时,才能实现有效的软件工程。【关键词】图书管理员系统 C+ SV 2005【任务概述】1.系统功能这次我们做的这个图书管理员管理系统是用来模拟管理学校图书馆学生借阅图书信息的。可用来查询,插入,更新,删除学生借阅信息。2.运行环境软件环境:Windows XPVisual studio 2005Oracle 9硬件环境:服务器端:处理器:Intel PentiumIII 以上 内存:推荐512或更高客户机:处理器:Intel PentiumIII 以上 内存:256M以上推荐512协议:TCP/IP浏览器:Internet Explore 6.0【可行性研究】可行性研究是为了弄清楚系统开发的项目是不是可以实现和值得进行研究的过程,实际上是一次大大简化系统分析和系统设计的过程,所以,进行可执行性的分析是非常必要的,也是很重要的。1、经济可行性:经济上的投入主要包括人力和物力。这次我们编写的图书管理员系统的原理比较简单,实现起来也比较容易,所以物力上的投入比较少,主要的还是人力的投入,我们小组一共5人,人力资源比较丰富。所以我们小组完全可以承担这个系统的开发2、技术可行性:这次我们编写的图书管理员系统主要功能是在界面上显示数据库中的学生信息,并且对数据库中的学生借阅信息进行查询,插入,更新,删除操作。这些功能可以用visual studio 2005开发工具,用c#技术实现。而且,c#语言与c语言比较相似,学习起来也比较容易,可以在短时间内上手并完成这个学生信息管理系统。所以在技术上也是可行的。3、运行可行性:本系统采用基于Windows的图形用户界面,而该系统是大家熟悉的操作系统,对于那些有一般的计算机知识的人员就可以轻松上手。而整个学生信息管理系统采用友好的交互界面,简洁明了,对数据库的操作也比较简单。由此,该系统的操作是可行的,有必要开发该系统。综合以上三方面,该系统具有很高的开发可行性,无论是从技术上或者经济上还是操作上。因此,可以设计该系统的数据流图,建立数据字典。【系统需求分析】本软件终端用户应该是图书馆管理人员,各个年龄层次的读者。对于图书馆管理人员来说,应该对这个软件的流程很熟悉,所以本软件在设计时尽量追求可操作性和简洁大方的人机界面的设计,力求尽量减少用户直接输入性东西,大量使用可选框。对于读者,本软件将为其设计更加方便的界面,尽量不使用直接输入性信息,追求操作的最简单化。【概要设计】1,处理流程通过对学校图书馆管理系统的使用和跟有关人员的访谈,我初步认为该系统应该有以下功能约定:1).每个读者最多在借数目为5;2).每种书只剩一本时,禁止外借;3).读者编号是10位数字,初始密码和编号相同,提示读者修改密码;4).管理员编号是5位数字,初始密码和编号相同,提示管理员修改密码;5).当读者挂失图书且未缴纳罚款时,禁止该读者借阅续借和挂失其他图书,直到罚款交齐为止;6).尽可能多的用可选项代替文本框,减少人为输入错误发生的概率;7).当可选项为编号时,为了方便查阅详细信息,设置按钮显示其详细信息;8).读者界面应该显示读者当前在借图书的详细信息;9).为了方便读者查询,应该提供多种查询图书的方式;10).图书挂失后,读者应该缴纳三倍书价的罚款作为赔偿;11).修改密码时,应提供原密码作为验证,两次输入新密码;12).用户登陆时,需根据用户身份,进入各自的主界面;通过对以上功能约定的分析,我将这个系统分为以下11个模块,它们分别是登陆模块、添加管理员、读者、书籍信息模块、借书模块、还书模块、续借模块、图书挂失模块、挂失处理模块、修改个人密码模块、删除操作记录、读者信息模块,查询图书模块等等。下面用IPO表分别写出对上述模块的功能要求进行定性和定量的叙述:1、登陆模块:模块名称登陆模块输入数据用户编号,密码,级别处理过程调用数据库数据进行验证输出数据无 表3-1 登陆模块IPO表2、添加管理员与读者模块模块名称添加管理员和读者模块输入数据新管理员编号和姓名处理过程编号唯一性验证,向数据库添加数据输出数据无 表3-2 添加管理员和读者模块IPO表3、添加书籍信息模块模块名称添加书籍信息模块输入数据书条形码号,书名,作者,分类,价格,数目处理过程编号唯一性验证,向数据库添加数据输出数据无 表3-3 添加书籍信息模块IPO表4、借书模块模块名称借书模块输入数据读者编号、书条形码号处理过程验证编号,向数据库添加数据输出数据无 表3-4 借书模块IPO表5、还书模块模块名称借书模块输入数据读者编号、书条形码号处理过程验证编号,修改数据库数据输出数据无 表3-5 还书模块IPO表6、续借模块模块名称续借模块输入数据读者编号、书条形码号处理过程验证编号,修改数据库数据输出数据无 表3-6 续借模块IPO表7、图书挂失模块模块名称图书挂失模块输入数据读者编号、书条形码号处理过程验证编号,修改数据库数据输出数据书名、应缴纳的罚款数额 表3-7 图书挂失模块IPO表8、图书挂失处理模块模块名称图书挂失处理模块输入数据读者编号处理过程查询挂失信息输出数据书名,罚款数额 表3-8 图书挂失处理模块IPO表9、修改个人密码模块模块名称修改个人密码模块输入数据读者编号,旧密码,新密码处理过程验证旧密码正确性,修改数据库数据输出数据无 表3-9 修改个人密码模块IPO表10、删除操作记录模块模块名称删除操作记录模块输入数据无处理过程删除数据库中操作记录表的信息输出数据无 表3-10 删除操作记录模块IPO表11、删除读者信息模块模块名称删除读者信息模块输入数据读者编号处理过程验证能否删除,删除数据库数据输出数据无 表3-11 删除读者信息模块IPO表12、查询图书信息模块模块名称查询图书信息模块输入数据图书编号或分类信息或书名关键字处理过程查询图书表输出数据相关图书信息2,功能分块1-【登陆模块】用来获得更大的权限2-【添加管理员与读者模块】3-【续借模块】4-【借书模块】5-【还书模块】6-【续借模块】7-【图书挂失模块】8-【图书挂失处理模块】9-【修改个人密码模块】10-【删除操作记录模块】11-【删除读者信息模块】12-【查询图书信息模块】3,总体结构本课程设计连接数据库是Oracle9i,用的方式是JDBC桥,因此数据库设计尤为重要;本系统E-R图如图3-4 图书管理系统的系统层次结构图图5-2 管理员表和操作记录表的E-R图【详细设计与实现】一、 系统流程图图3-5 图书管理系统的软件结构图下:图5-1读者表和书表的E-R图二、主要实现代码该系统访问数据库使用的是JDBC-ODBC桥的方式,为了节省工作量,需要编写一个类专门用户访问Oracle数据库,这个类的代码如下:package librarysystem.tools;import java.sql.ResultSet;import java.sql.*;public class DBClass implements DBinterface public DBClass() Connection conn=null; Statement stmt=null; ResultSet rs=null; protected static final String DRIVER=oracle.jdbc.driver.OracleDriver; protected static final String URL=jdbc:oracle:thin:localhost:1521:ora9i; public boolean createConnect() try Class.forName(DRIVER); conn=DriverManager.getConnection(URL,lmsm,1234); return true; catch(Exception e) e.printStackTrace(); return false; public int getExecuteUpdate(String sql) try stmt=conn.createStatement(); int n=stmt.executeUpdate(sql); return n; catch(Exception e) e.printStackTrace(); return -1; public ResultSet getExecuteQuery(String sql) try stmt = conn.createStatement(); rs = stmt.executeQuery(sql); return rs; catch(Exception e) e.printStackTrace(); return null; public void closeConnect1() try if(rs!=null) rs.close(); catch(Exception e) e.printStackTrace(); public void closeConnect2() try if(stmt!=null) stmt.close(); catch(Exception e) e.printStackTrace(); public void closeConnect3() try if(conn!=null) conn.close(); catch(Exception e) e.printStackTrace(); 有了这个类,再访问数据库时,只需创建该类的对象,调用方法就可以了,不必在每次访问数据时都要设置很多参数变量。7.3.2 登陆模块由于这个系统是用JBuider2006开发的,界面设计代码不用自己写,只需要将所需的控件拖到合适的位置就大功告成了,所以我省去那些系统生成的代码,如果代码是自己写的,就把代码写在实验报告中吧!图7-1是登陆模块的界面。在这个系统实现中,主要代码是消息响应方法,对于每个模块我都把它消息响应代码写在实验报告中,重复的就不再写了。public void actionPerformed(ActionEvent e) /读取界面输入数据. if (e.getActionCommand().equals(登陆) /验证信息,详见源代码/ /验证成功 if (flag) /判断用户类型 if (jibie.equals(管理员) /控制信息详见源代码/. lc = new LoginControl();/验证用户名和密码与数据库中是否一致 if (lc.checkManager(manager) /控制信息.详见源代码 if (grade = 1) /显示超级管理员登陆成功 this.showInformation(超级管理员登陆成功); /操作记录表中添加记录 record = 超级管理员 + manager.getName() + 登陆成功!;/控制信息/详见源代码/进入超级管理员界面 this.setVisible(false); new SuperManagerWindow(); else / this.showInformation(管理员登陆成功); record = 一般管理员 + manager.getName() + 登陆成功!;/提示改密码 if (manager.getId().equals(manager.getPwd() this.showInformation(为了您信息安全,请尽快修改密码!); /进入管理员界面 new ManagerWindow(); else /显示登陆失败信息 this.showError(用户名或密码错误,请查验!); record = 某管理员登陆失败!; else /读者登陆验证代码省略 /向操作记录表中添加信息 rc = new RecordControl(); rc.InsertRecord(record); else /响应退出按钮 this.setVisible(false); 7.3.3 添加管理员、读者、书籍信息模块这三个模块在设计思路上大同小异,故放在一起分析,以添加书籍模块为例,设计界面如图7-2所示,其余两个详见系统测试部分,下面是消息响应方法的思路及关键代码;图7-1登陆界面图7-2 添加图书信息public void actionPerformed(ActionEvent e) /得到文本框中输入的内容 if (e.getActionCommand().equals(提交) /控制验证详见源代码 /进行主键唯一性验证 if(ibc.checkID(id) flag=false; this.showError(条形码已经被使用,请更换!); if(flag)/设置Book对象中的内容./插入数据库 if(ibc.InsertBook(book) /向操作记录表中添加信息 else this.showError(价格出现问题,请核实!); else if(e.getActionCommand().equals(重置) /将五个文本框恢复到初始状态下 else/响应取消按钮 this.dispose(); 7.3.4 借书模块借书模块的设计充分体现了减少键盘输入的思想,用户只需选择就可以完成操作,但如果书很多,或读者很多时,选择速度会很慢,现在大部分都用模式识别技术,直接去扫描条形码,所以这个设计有点落伍。图7-3是借书模块界面的图。图7-3 添加借阅记录(借书模块)界面消息响应方法思路如下: public void actionPerformed(ActionEvent e) if (e.getActionCommand().equals(显示读者信息) String id = (String) cbx1.getSelectedItem(); Reader r = imco.showReader(id); ShowReaderView srv = new ShowReaderView(r); else if (e.getActionCommand().equals(关于该书) /显示书的信息,和读者信息一致,省去 else if (e.getActionCommand().equals(提交) /得到文本框的内容/取得该编号的所有信息 Reader r=imco.showReader(r_id); Book b=imco.showBook(b_id);/如果读者不能借书 if(r.getBooknum()=0) flag=false; this.showError(读者已不能再借书,已经借满了!); /如果读者挂失图书未缴纳罚款 if(r.getIsUse()=0) flag=false; this.showError(该读者未交挂失书罚款,已不能再借书了!); /如果书只剩一本 if(b.getLsnum()=1) flag=false; this.showError(该书不能借出,只有一本了!); if(flag)/插入信息 if (imco.InsertMessage(r_id, b_id) /控制代码/插入操作记录表对应信息 else this.showError(借书操作失败!请查验!);7.3.5还书模块还书模块我设计了两个界面,第一个界面得到还书人的编号,然后用它去数据库查询该读者未还的书,把未还的书的编号显示在第二个界面的可选框中,然后选择就可以完成操作了。图7-4是第一个界面,图7-5是第二个界面。图7-4还书界面A图7-5还书界面B还书界面A的消息响应框架:public void actionPerformed(ActionEvent e) String id=(String)cmb.getSelectedItem(); if(e.getActionCommand().equals(读者详细信息) Reader r=imco.showReader(id); new ShowReaderView(r); else /响应下一步按钮 this.setVisible(false); ReturnBookA_r_id=id;/进入界面B new ReturnViewB(); 还书界面B的消息响应方法框架: public void actionPerformed(ActionEvent e) /得到输入信息 if (e.getActionCommand().equals(查看书的信息) /显示书的详细信息 else if(e.getActionCommand().equals(取消) this.setVisible(false); else /得到读者和书在表中的所有信息/修改借阅信息表的数据 if(rbco.upDateMessage(b_id,r_id)/修改读者信息表和书籍信息表的信息 imco.updateReaderBook(r,b);/插入操作记录/给出相关提示 else /错误信息提示n 7.3.6 续借和挂失模块经分析,这两个模块初始条件是一样的,因此用同一个界面设计,处理过程方面都是去修改借阅信息表中的标识位的具体数值,0代表借书没有续借;1代表借书已经续借;2代表书已经还了;3代表挂失没有交罚款;4代表挂失已缴纳罚款。如果该书续借过了,给出提示;图7-6是这两个模块的界面。图7-6 续借挂失界面续借挂失界面的消息响应方法框架是: public void actionPerformed(ActionEvent e) /得到Book Reader 的对象/得到选择框内容 if (e.getSource() = btn2) /响应续借按钮 /验证代码. if (flag) /修改借阅信息表的信息 if (rco.updateConMessage(b_id) /插入操作记录表的信息 else if (e.getSource() = btn1) /查看书的信息 else if (e.getSource() = btn3) ./响应挂失的按钮 if (rco.updateLose(b_id) /向操作记录表中插入信息,并提示读者尽快缴纳罚款 else /响应取消按钮,回到读者主界面 7.3.7处理挂失信息模块该模块是管理员在读者前来缴纳罚款时使用的,如果没有挂失信息,给出管理员提示;有挂失信息,给出挂失的读者的编号,管理员选择合适的编号后进入第二个界面,显示挂失的书名和应该缴纳的罚款数,读者缴纳罚款后,管理员将单击缴纳罚款按钮,完成处理挂失的操作;第一个界面初始化是我自己写的,现将代码写入实验报告: private void jbInit() throws Exception panel.setLayout(borderLayout1); this.getContentPane().add(panel, java.awt.BorderLayout.CENTER);/分别初始化有无挂失信息的处理界面 if (this.getNum() = 0) lbl.setText(目前没有读者挂失图书!); panel.add(lbl, BorderLayout.NORTH); btn = new JButton(返回); panel.add(btn, BorderLayout.SOUTH); this.setSize(100, 200); this.setLocation(100, 100); this.setVisible(true); else String text = 有 + this.getNum() + 位读者挂失图书; lbl.setText(text); cmb = new JComboBox(this.getNo(); btn = new JButton(处理); panel.add(lbl, BorderLayout.NORTH); panel.add(cmb, BorderLayout.CENTER); panel.add(btn, BorderLayout.SOUTH); this.setSize(200, 200); this.setLocation(100, 100); this.setVisible(true); btn.addActionListener(this); JPanel panel = new JPanel(); JLabel lbl = new JLabel();JComboBox cmb = null; JButton btn = null;BorderLayout borderLayout1 = new BorderLayout();图7-7处理挂失记录1 图7-8处理挂失记录2图7-8中如果单击处理按钮会出现以下界面:图7-9显示缴纳罚款界面显示缴纳罚款界面中缴纳罚款的消息响应代码如下: /将该用户的状态改为可用,然后向操作记录表中添加信息if (lbico.updateReaderUse() RecordControl rc = new RecordControl(); InsertMessageControl imco = new InsertMessageControl(); Reader r = imco.showReader(lbico.getR_id(); String message = r.getName() + 已交纳罚款 + tfd2.getText() + 操作员: + LoginV; rc.InsertRecord(message); else this.showError(出现问题,请查验!); 7.3.8 修改个人密码模块该模块首先需要输入一次旧密码,然后需要输入两次新密码,如果修改成功,向操作信息表中添加记录。图7-10是该模块的界面;图7-10修改个人密码提交按钮的消息处理代码: /取三个密码框中输入的数据,分别存入pwd1,pwd2,pwd3中/验证是否为空 if (pwd1.length() = 0) | (pwd2.length() = 0) | (pwd3.length() = 0) flag = false; this.showError(密码长度不能为空!请查验!); /验证首字母是否为空格 if (pwd1.length() != 0) & (pwd1.charAt(0) = ) | (pwd2.length() != 0) & (pwd2.charAt(0) = ) | (pwd3.length() != 0) & (pwd3.charAt(0) = ) flag = false; this.showError(密码长度不能为空!请查验!); /验证与旧密码是否一致 if (!pwd1.equals(LoginView.oldpwd) flag = false; this.showError(旧密码输入有误,请查验!);/验证两次新密码是否相同 if (!pwd2.equals(pwd3) flag = false; this.showError(新密码两次输入不一致,请查验); 修改表中的数据 if (flag & upco.updatePwd(LoginView.tablename, LoginView.no, pwd2) /向操作记录表中添加信息String message = LoginV + 修改个人密码成功!; rc.InsertRecord(message); this.setVisible(false); if (LoginView.no.length() = 10) new ReaderWindow(); 7.3.9删除操作记录和读者、管理员信息模块该模块只限超级管理员使用,目的是在读者注销后,完成对读者和其借阅记录的删除,操作记录表如信息过多,也要进行删除,即使这样,也应该慎用这个模块,我为了测试的需要每次删除操作记录表中的5条离现在最远的记录;其消息响应代码和前面大同小异,在这我就不再描述了,界面详见系统测试部分。7.3.10查询图书模块该模块为读者提供三种查询方式,按书的条形码查询,书的类别查询,书名的模糊匹配查询;当读者输入(选择)要查询的内容后如果没有该类信息,给出提示,有的话,把所有信息以表格形式输出;界面设计核心代码如下: if (qbco.getNum() = 0) lbl.setText(图书馆没有您所查询的书!); panel.add(lbl, BorderLayout.CENTER); panel.add(btn1, BorderLayout.SOUTH); this.setSize(100, 100); this.setLocation(100, 100); this.setVisible(true); else String message = 您所查询的书有 + qbco.getNum() + 种; lbl.setText(message); records = qbco.getBook(colomnNames.length); t = new JTable(records, colomnNames); panel.add(lbl, BorderLayout.NORTH); panel.add(new JScrollPane(t), BorderLayout.CENTER); panel.add(btn1, BorderLayout.SOUTH); this.setSize(600, 400); this.setLocation(100, 100); this.setVisible(true); 如果有记录,请见图7-11,无记录,请见7-12;图7-11 查询图书A图7-12 查询图书B7.3.11一些重要的访问数据库代码本系统需要大量访问数据库,做完后才发现,访问数据库的代码比编界面和响应代码要多得多,由于这些代码的结构基本相同,只不过是SQL语句和返回类型不同罢了,所以在详细设计的最后我有选择的写几个这样的方法在实验报告中,其余的详见源代码吧!DBClass db=new DBClass();初始化借阅信息表中选择框的代码: public int checkReaderNum() int num = 0; if (db.createConnect() String sql = select * from reader; rs = db.getExecuteQuery(sql); try while (rs.next() num+; this.closeConnection(db); return num; catch (SQLException ex) return 0; return num; public String getReaderNo() String no = new Stringthis.checkReaderNum(); if (db.createConnect() String sql = select r_no from reader; int i = 0; rs = db.getExecuteQuery(sql); try while (rs.next() noi = rs.getString(r_no); i+; this.closeConnection(db); return no; catch (SQLException ex) return null; return null;添加读者信息的代码: public void InsertReader(Reader r) String id=r.getId(); String name=r.getName(); String pwd=r.getPwd(); int bnum=r.getBooknum(); int isUse=r.getIsUse(); String sql=insert into reader values(+id+,+na
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新光源助航灯光设备合作协议书
- 银行金融产品合作协议
- 法律实务中的合同法知识考点梳理
- 小区物业农村合作种植协议
- 电影行业在线票务平台功能完善与推广方案
- 商业投资出资金额及结构证明书(8篇)
- 农业种植技术合作支持及服务协议
- 造纸行业智能化生产流程优化方案
- 电商平台售后服务评价体系建立服务协议
- 农业灾害风险预防及应对措施服务合同书
- 消化系统(宠物解剖生理)
- 急重症脓毒症及脓毒性休克患者液体治疗
- 山东省铅酸蓄电池收集和转移管理制度试点工作方案
- 2023年仙居县小升初英语考试模拟试题及答案解析
- 电子商务中网络交易平台商标侵权责任研究
- 污水运行工理论知识考试题库(含答案)
- 教学设计 《找次品》教学设计 全国一等奖
- 新型功能材料-漂珠
- GB/T 26398-2017衣料用洗涤剂去污性能、耗水量与节水性能评估指南模拟家庭洗涤试验法
- GB/T 21632-2008危险品喷雾剂泡沫可燃性试验方法
- 职业危害因素识别(加油站)
评论
0/150
提交评论