1、 题 目:图书馆管理系统总体设计与部分代码设计 专 业: 学 号: 姓 名: 成 绩: 指导教师: 目 录 一.总体设计 3 1.设计过程 3
2、 2、设计原理 3 1、 工具---word绘图+代码流程图分析工具 4 Bookadd.java 5 Bookdelete.java 6 Bookquery.java 7 BookUpdata.java 9 Borrow,java 10 Login.java 12 ReaderAdd.java 13 Readerdelete.java 14 Readerquery.java 15 ReaderUpdata.java 16 ShowMian.java 17 UpdataPassword.java 17 Book.java 18 Bookselect.java 19
3、 GlobalVar.java 19 IfBorrowBack.java 19 DbOp.java 20 Reader.java 21 ReaderSelect.java 21 二. 部分代码 22 a.书籍归还// Back.java 22 三. 感想体会 28 一.总体设计 1.设计过程 a、系统应该如何实现?将划分出组成系统的物理元素,例如程序、文件、数据库等。 数据库有图书,读者, 用户信息。 程序有 用户登录程序,修改密码程序;读者查询程序;图书添加,删除,修改,查询;读者信息添加,删除,修改,借书,还书。 b
4、设计软件的总体结构,即确定系统中的每个程序是有哪些模块组成的,每个模块的功能以及模块和模块之间的借口、调用关系等。但所以这些都不要求涉及模块内部过程的细节。 用户登录模块由修改密码模块,登录界面模块组成,可调用读者模块,图书模块进行查询。 图书模块由查询,添加,删除,修改组成,可调用读者模块进行查询是否可借书,是否还书。 读者模块由读者信息添加,删除,修改,借书,还书组成,可调用图书模块。 2、设计原理 基于Java语言、Access数据库的开发软件。 Java是一种编程语言,拥有跨平台、面向对象、泛型编程的特性。Java编程语言的风格十分接近C++语言。继承了C++语言面向对象
5、技术的核心,java舍弃了C++语言中容易引起错误的指针,改以引用取代,同时移除原C++与原理运算符重载,也移除多重继承特性,改用接口取代,增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。所以Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言 Microsoft Office Access(前名Microsoft Access)是微软发布的关系数据库管理系统。通过使用Access Basic可以增加应用程序的执行速度,减少编码量,同时也减少在为Microsoft Wi
6、ndows应用程序接口编程时、在开发应用程序中遇到的问题的技术。谨慎地使用变量和它所占用的存储空间能有效地减少一个应用程序所消耗的资源,同时也全面提高了它的性能。 因java可跨平台的特性,access的简单易用,本系统使用java,access进行开发图书管理,将上述所有模块进行实现。以下数据流程图划分模块的功能。 1、 工具---word绘图+代码流程图分析工具 Back.java
7、 创建日期变量,其内容为当前日期,使还书按钮有效,填写还书记录 如果图书编号或读者编号两者均为空,或者有一个为空,则返回 按编号查询图书,结果存入book对象中 按编号查询读者,结果存入reader对象中 查询指定读者是否借阅过指定图书,且未归还 如果查询到结果,将其显示在各文本框中 如果查询到结果,将其显示在各文本框中 Bookadd.jav
8、a 异常 出版时间格式错误 异常 库存数量和价格错误,应为数字 清空全部文本框 异常 无法正常读取数据库 判断Book表中是否存在指定编号的图书,如果存在,返回true,否则,返回false 图书添加成功 清空全部文本框 检查日期是否有效。如果日期无效,则会 产生ParseException异常 将记录保存到book表中 如果图书编号重复,则记录无效,需修改图书编号 如果图书编号为空,则终止保存记录操作 Bookdelete.java 图书编号有误,查无此书 清空全部文本框 如果查询到结
9、果,将其显示在各文本框中 按编号查询图书,结果存入book对象中 如果图书编号为空,则查询操作终止 图书编号不能为空 提示 图书信息删除成功 图书信息删除失败 如果图书编号为空,则删除操作终止 Bookquery.java 如果出版社不空,生成sql3字句 如果书名和作者有一项不为空 如果出版日期不空,生成sql4字句 如果书名、作者或出版社有一项不为空 如果作者不空,生成sql2字句 如果书名不为空 创建一条基本的SQL语句,表示选出表中全部记录 如果书名不空,生成sql1字句
10、 创建一个表格 出版时间格式错误 数据库不存在,或存在错误 将查询结果赋予Book数组 执行查询 如果已设置任意一项条件,则修改SQL语句 为了便于调试程序,特别创建main方法 BookUpdata.java 清空全部文本框 出版时间格式错误 价格或库存数量错误,应为数字 数据有误,图书信息修改失败 图书信息修改成功 清空全部文本框 程序用于检查日期是否有效 如果查询到结果,
11、将其显示在各文本框中 保存修改的记录 如果图书编号为空,则终止保存记录操作 图书编号有误,查无此书 按编号查询图书,结果存入book对象中 如果图书编号为空,则查询操作终止 Borrow,java 统计读者所借图书数量 查询指定读者是否已借过指定图书且未归还 读者编号有误,查无此人 按编号查询读者,结果存入reader对象中 如果查询到结果,将其显示在各文本框中 图书已无库存,无法借阅 重新初始化各参数并禁止借出按钮 图书编号有误,查无此书 按编号查询图书,结果存入book对象中 如果
12、查询到结果,将其显示在各文本框中 图书和读者查询 如果图书编号或读者编号两者均为空,或者有一个为空,则返回 初始化各参数项并禁止借出按钮 增加main()方法,主要为了调试程序界面 数据库统计失败 填写借出图书记录 统计某个读者当前已借图书且未归还的数量 该读者借书过多,无法继续借阅 如果读者已借图书尚未超出其允许最大借书量,则允许其继续借阅所选图书 Login.java 记录登录的用户名 调用主程序 只有管理员才能使用"基础管理"和"
13、借阅管理"菜单 释放登录窗体 如果此用户存在,则记录其状态(否:不是管理员,是:是管理员) 核对用户名和密码 如果用户名或密码任一为空,则终止后续操作 异常 用户数据库有误 ReaderAdd.java 判断Reader表中是否存在指定编号的读者,如果存在,返回true,否则,返回false 异常;最大可借天数错误,应为整数 读者添加成功; 清空全部文本框 读者编号重复 如果读者编号重复,则记录无效,需修改读者编号 如果读者编号为空,则终止保存记录操作 清空全部
14、文本框 Readerdelete.java 清空全部文本框 异常 读者编号有误,查无此人 按编号查询读者,结果存入reader对象中 如果查询到结果,将其显示在各文本框中 读者编号不能为空 异常 读者编号有误,查无此人 读者信息删除成功 清空全部文本框 如果读者编号为空,则终止删除操作 Readerquery.java 如果已设置任意一项条件,则修改SQL语句 执行查询 将查询结果赋予Book数组 创建一个表格 异常:数据库不
15、存在,或存在错误 如果作者不空,生成sql2字句 如果读者姓名不空,生成sql1字句 创建一条基本的SQL语句,表示选出表中全部记录 ReaderUpdata.java 清空全部文本框 如果读者编号为空,则终止保存记录操作 修改读者信息 最大可借数或最大可借 如果读者编号为空,则终止查询操作 按编号查询读者,结果存入reader对象中 如果查询到结果,将其显示在各文本框中 ShowMian.java 如果不是管理员,则
16、禁止用户维护图书信息和读者信息 以及禁止进行借阅管理,即只能查询 UpdataPassword.java 修改密码 如果两个密码输入框中输入的内容不一致,则显示错误提示信息并返回 如果两个密码输入框中有一个为空,则显示错误提示信息并返回 Book.java 获得书的ID号 获得书的书名 获得书的类型 获得书的作者 获得书的翻译者 获得书的出版社 获得书的发行日期 获得书的股价 获得书的价格 并全部返回
17、 Bookselect.java 异常 无法正常读取数据库 按图书编号查询,查询结果保存在Book类的对象中 GlobalVar.java 保存登录用户名 IfBorrowBack.java 查指定读者是否借过指定图书且未归还 DbOp.java 关闭数据库 执行数据库更新操作。如果有问
18、题,则返回-1 执行数据库查询工作。如果出现异常,返回null 构造方法。如果数据库未打开,则通过创建连接打开数据库 Reader.java 获得读者的ID号 获得读者的名字 获得读者的类型 获得读者的性别 获得读者最大借书数 获得读者的还书日期 并全部返回 ReaderSelect.java 按读者编
19、号查询,结果保存在Reader类的对象中 二. 部分代码 a.书籍归还// Back.java package MainPro; import java.awt.*; import java.awt.event.*; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JOptionPane; import PublicModule.*; public class Back extends Frame { pri
20、vate static final long serialVersionUID = -1036076990599464079L; String SepLine = "-------------------------------------------------"; Label lbbookid = new Label("图书编号"); Label lbreaderid = new Label("读者编号"); TextField tf_bookid = new TextField(); TextField tf_readerid = new TextField();
21、 Button queryBtn = new Button("查询"); Label lbbookinfo = new Label(SepLine + "图书信息" + SepLine); Label lbbookname = new Label("图书名称:"); Label tf_bookname = new Label("xx"); Label lbauthor = new Label("作者:"); Label tf_author = new Label("xx"); Label lbpublisher = new Label("出版社:"); Labe
22、l tf_publisher = new Label("xx"); Label lbpublish_time = new Label("出版时间:"); Label tf_publish_time = new Label("xx"); Label lbprice = new Label("定价:"); Label tf_price = new Label("xx"); Label lbstock = new Label("库存数量:"); Label tf_stock = new Label("xx"); Label lbreaderinfo = new Lab
23、el(SepLine + "读者信息" + SepLine); Label lbreadername = new Label("读者姓名:"); Label tf_readername = new Label("xx"); Label lbreadertype = new Label("读者类型:"); Label tf_readertype = new Label("xx"); Label lbmax_num = new Label("最大可借数:"); Label tf_max_num = new Label("xx"); Label lbdays_num =
24、new Label("最大可借天数:"); Label tf_days_num = new Label("xx"); Label lbbackinfo = new Label(SepLine + "还书信息" + SepLine); Label lbback_date = new Label("还书日期:"); Label tf_back_date = new Label("xx"); Button backBtn = new Button("还书"); Button closeBtn = new Button("关闭"); public Back() {
25、 setLayout(null); setTitle("还回图书"); setSize(500, 310); this.setForeground(Color.BLACK); // 设置前景色为黑色 lbbookid.setBounds(30, 40, 50, 20);// 图书编号 tf_bookid.setBounds(90, 40, 90, 20); lbreaderid.setBounds(200, 40, 50, 20);// 读者编号 tf_readerid.setBounds(260, 40, 90, 20); queryBtn
26、setBounds(370, 40, 80, 20); // 查询按钮 lbbookinfo.setBounds(30, 70, 440, 20); // 图书信息提示条 lbbookname.setBounds(30, 90, 60, 20); // 图书名称 tf_bookname.setBounds(90, 90, 200, 20); lbauthor.setBounds(310, 90, 60, 20); // 作者 tf_author.setBounds(370, 90, 90, 20); lbpublisher.setBounds(30,
27、110, 60, 20);// 出版社 tf_publisher.setBounds(90, 110, 200, 20); lbpublish_time.setBounds(310, 110, 60, 20);// 出版时间 tf_publish_time.setBounds(370, 110, 90, 20); lbprice.setBounds(30, 130, 60, 20); // 定价 tf_price.setBounds(90, 130, 200, 20); lbstock.setBounds(310, 130, 60, 20); // 库存数量
28、 tf_stock.setBounds(370, 130, 90, 20); lbreaderinfo.setBounds(30, 150, 440, 20); // 读者信息提示条 lbreadername.setBounds(30, 170, 60, 20); // 读者姓名 tf_readername.setBounds(90, 170, 90, 20); lbreadertype.setBounds(310, 170, 60, 20); // 读者类型 tf_readertype.setBounds(370, 170, 90, 20); l
29、bmax_num.setBounds(30, 190, 75, 20); // 最大可借数 tf_max_num.setBounds(105, 190, 90, 20); lbdays_num.setBounds(310, 190, 85, 20); // 最大可借天数 tf_days_num.setBounds(395, 190, 70, 20); lbbackinfo.setBounds(30, 210, 440, 20); // 还书信息提示条 lbback_date.setBounds(30, 230, 60, 20);// 还书日期 tf_ba
30、ck_date.setBounds(90, 230, 100, 20); backBtn.setBounds(160, 260, 80, 25);// 还书按钮 backBtn.setEnabled(false); // 开始时禁用还书按钮 closeBtn.setBounds(260, 260, 80, 25);// 关闭按钮 queryBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btn_querywActi
31、onPerformed(e); } }); backBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btn_backActionPerformed(e); } }); closeBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setForeground
32、Color.BLACK); // 设置前景色为黑色 dispose(); // 关闭窗体 } }); /* 关闭窗口*/ this.addWindowListener(new WindowAdapter() { // 重写windowClosing()方法 public void windowClosing(WindowEvent e) { setForeground(Color.BLACK); // 设置前景色为黑色 dispose(); // 关闭窗体 } }); add(lbbookid);
33、 add(lbreaderid); add(queryBtn); add(lbbookinfo); add(lbbookname); add(lbauthor); add(lbpublisher); add(lbpublish_time); add(lbprice); add(lbstock); add(lbreaderinfo); add(lbreadername); add(lbreadertype); add(lbmax_num); add(lbdays_num); add(lbbackinfo);
34、 add(lbback_date); add(backBtn); add(closeBtn); setLocationRelativeTo(null); // 使窗体在屏幕上居中放置 setVisible(true); // 使窗体可见 setForeground(Color.RED); // 设置前景色为红色 add(tf_bookid); add(tf_readerid); add(tf_bookname); add(tf_author); add(tf_publisher); add(tf_publish_time)
35、 add(tf_price); add(tf_stock); add(tf_readername); add(tf_readertype); add(tf_max_num); add(tf_days_num); add(tf_back_date); } // 图书和读者查询 private void btn_querywActionPerformed(ActionEvent e) { String bookid = tf_bookid.getText(); String readerid = tf_readerid.get
36、Text(); // 如果图书编号或读者编号两者均为空,或者有一个为空,则返回 if (bookid.equals("") || readerid.equals("")) { JOptionPane.showMessageDialog(null, "图书编号和读者编号均不能为空!"); init(); // 重新初始化各参数并禁止还书按钮 return; } // 按编号查询图书,结果存入book对象中 Book book = BookSelect.SelectBookById(bookid); // 如果查询到结果,将其显示在各文本
37、框中 if (book != null) { tf_bookname.setText(book.getBookname()); tf_author.setText(book.getAuthor()); tf_publisher.setText(book.getPublisher()); tf_publish_time.setText(book.getPublish_time().toString()); tf_price.setText(String.valueOf((book.getPrice()))); tf_stock.setText
38、String.valueOf(book.getStock())); } else { JOptionPane.showMessageDialog(null, "图书编号有误,查无此书!"); init(); // 重新初始化各参数并禁止还书按钮 return; } // 按编号查询读者,结果存入reader对象中 Reader reader = ReaderSelect.selectReaderById(readerid); // 如果查询到结果,将其显示在各文本框中 if (reader != null) { tf_rea
39、dername.setText(reader.getReadername()); tf_readertype.setText(reader.getReadertype()); tf_max_num.setText(String.valueOf(reader.getMax_num())); tf_days_num.setText(String.valueOf(reader.getDays_num())); } else { JOptionPane.showMessageDialog(null, "读者编号有误,查无此人!"); init(); //
40、重新初始化各参数并禁止还书按钮 return; } // 查询指定读者是否借阅过指定图书,且未归还 if (!IfBorrowBack.findbook(bookid,readerid)){ JOptionPane.showMessageDialog(null, "该读者没有借过此种图书!"); init(); // 重新初始化各参数并禁止还书按钮 return; } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 创建日期变量,其内容为当前日期
41、 Date currentdate = new Date(); // 将日期按指定格式输出 String borrowdate = sdf.format(currentdate); tf_back_date.setText(borrowdate); backBtn.setEnabled(true); // 使还书按钮有效 } // 填写还书记录 private void btn_backActionPerformed(ActionEvent e) { String sql; String bookid = tf_bookid.getText(
42、); String readerid = tf_readerid.getText(); String backdate = tf_back_date.getText(); // 更新borrow表记录 sql = "update borrow set if_back='是',back_date='"; sql = sql + backdate + "' where "; sql = sql + " book_id='" + bookid + "' and "; sql = sql + "reader_id='" + readerid + "' and
43、"; sql = sql + "if_back='否'"; DbOp.executeUpdate(sql); // 将图书库存数量加 int istock = Integer.parseInt(tf_stock.getText()) + 1; String cstock = String.valueOf(istock); // 更新画面中的图书库存数量 tf_stock.setText(cstock); // 更新数据库中的图书库存数量 sql = "update book set stock='" + cstock; sql = s
44、ql + "' where id='" + bookid + "'"; DbOp.executeUpdate(sql); JOptionPane.showMessageDialog(null, "还书成功!"); init(); // 重新初始化各参数并禁止还书按钮 } // 初始化各参数项并禁止还书按钮 private void init() { tf_bookname.setText("xx"); tf_author.setText("xx"); tf_publisher.setText("xx"); tf_publish_time
45、setText("xx"); tf_price.setText("xx"); tf_stock.setText("xx"); tf_readername.setText("xx"); tf_readertype.setText("xx"); tf_max_num.setText("xx"); tf_days_num.setText("xx"); tf_back_date.setText("xx"); backBtn.setEnabled(false); // 禁止还书按钮 } // 增加main()方法,主要为了调试程序界面
46、public static void main(String[] args) { new Back(); } } 三. 感想体会 通过java程序,总体设计的编写,对软件开发有了深刻的了解。总体设计中,对于流程图的制作也熟练了点,最初是不太了解软件的使用而困难了点,过程艰难,结果是学好了流程图的制作。根据功能分好模块,对后来的功能实现,设计有了明确的方向,编程程序也明确了功能,接口,易于实现。 这次经验有利于以后的软件开发过程中出现的问题,比如技术是否可实现,经济是否可盈利,分工合作是否明确等等。
47、 1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究 2. 基于单片机的嵌入式Web服务器的研究 3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究 4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制 5. 基于MCS-51系列单片机的通用控制模块的研究 6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器 7. 单片机控制的二级倒立摆系统的研究 8. 基于增强型51系列单片机的TCP/IP协议栈的实现 9. 基于单片机的蓄电池自动监测系统 10.
48、 基于32位嵌入式单片机系统的图像采集与处理技术的研究 11. 基于单片机的作物营养诊断专家系统的研究 12. 基于单片机的交流伺服电机运动控制系统研究与开发 13. 基于单片机的泵管内壁硬度测试仪的研制 14. 基于单片机的自动找平控制系统研究 15. 基于C8051F040单片机的嵌入式系统开发 16. 基于单片机的液压动力系统状态监测仪开发 17. 模糊Smith智能控制方法的研究及其单片机实现 18. 一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制 19. 基于双单片机冲床数控系统的研究 20. 基于CYGNAL单片机的在线间歇式浊度
49、仪的研制 21. 基于单片机的喷油泵试验台控制器的研制 22. 基于单片机的软起动器的研究和设计 23. 基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究 24. 基于单片机的机电产品控制系统开发 25. 基于PIC单片机的智能手机充电器 26. 基于单片机的实时内核设计及其应用研究 27. 基于单片机的远程抄表系统的设计与研究 28. 基于单片机的烟气二氧化硫浓度检测仪的研制 29. 基于微型光谱仪的单片机系统 30. 单片机系统软件构件开发的技术研究 31. 基于单片机的液体点滴速度自动检测仪的研制 32. 基于单片机系统的多功能温
50、度测量仪的研制 33. 基于PIC单片机的电能采集终端的设计和应用 34. 基于单片机的光纤光栅解调仪的研制 35. 气压式线性摩擦焊机单片机控制系统的研制 36. 基于单片机的数字磁通门传感器 37. 基于单片机的旋转变压器-数字转换器的研究 38. 基于单片机的光纤Bragg光栅解调系统的研究 39. 单片机控制的便携式多功能乳腺治疗仪的研制 40. 基于C8051F020单片机的多生理信号检测仪 41. 基于单片机的电机运动控制系统设计 42. Pico专用单片机核的可测性设计研究 43. 基于MCS-51单片机的热量计 44. 基于双单片
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818