《毕业论文--书图馆管理系统总体设计与部分代码设计.doc》由会员分享,可在线阅读,更多相关《毕业论文--书图馆管理系统总体设计与部分代码设计.doc(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、题 目:图书馆管理系统总体设计与部分代码设计专 业: 学 号: 姓 名: 成 绩: 指导教师: 目 录一总体设计31.设计过程32、设计原理31、 工具-word绘图+代码流程图分析工具4Bookadd.java5Bookdelete.java6Bookquery.java7BookUpdata.java9Borrow,java10Login.java12ReaderAdd.java13Readerdelete.java14Readerquery.java15ReaderUpdata.java16ShowMian.java17UpdataPassword.java17Book.java18Bo
2、okselect.java19GlobalVar.java19IfBorrowBack.java19DbOp.java20Reader.java21ReaderSelect.java21二 部分代码22a.书籍归还/ Back.java22三 感想体会28一总体设计1.设计过程a、系统应该如何实现?将划分出组成系统的物理元素,例如程序、文件、数据库等。 数据库有图书,读者, 用户信息。 程序有 用户登录程序,修改密码程序;读者查询程序;图书添加,删除,修改,查询;读者信息添加,删除,修改,借书,还书。b、设计软件的总体结构,即确定系统中的每个程序是有哪些模块组成的,每个模块的功能以及模块和模块
3、之间的借口、调用关系等。但所以这些都不要求涉及模块内部过程的细节。用户登录模块由修改密码模块,登录界面模块组成,可调用读者模块,图书模块进行查询。图书模块由查询,添加,删除,修改组成,可调用读者模块进行查询是否可借书,是否还书。读者模块由读者信息添加,删除,修改,借书,还书组成,可调用图书模块。2、设计原理基于Java语言、Access数据库的开发软件。Java是一种编程语言,拥有跨平台、面向对象、泛型编程的特性。Java编程语言的风格十分接近C+语言。继承了C+语言面向对象技术的核心,java舍弃了C+语言中容易引起错误的指针,改以引用取代,同时移除原C+与原理运算符重载,也移除多重继承特性
4、,改用接口取代,增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。所以Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言 Microsoft Office Access(前名Microsoft Access)是微软发布的关系数据库管理系统。通过使用Access Basic可以增加应用程序的执行速度,减少编码量,同时也减少在为Microsoft Windows应用程序接口编程时、在开发应用程序中遇到的问题的技术。谨慎地使用变量和它所占用的存储空间能有效地减少一个应用程序所消耗的
5、资源,同时也全面提高了它的性能。 因java可跨平台的特性,access的简单易用,本系统使用java,access进行开发图书管理,将上述所有模块进行实现。以下数据流程图划分模块的功能。1、 工具-word绘图+代码流程图分析工具Back.java 创建日期变量,其内容为当前日期,使还书按钮有效,填写还书记录如果图书编号或读者编号两者均为空,或者有一个为空,则返回按编号查询图书,结果存入book对象中按编号查询读者,结果存入reader对象中查询指定读者是否借阅过指定图书,且未归还如果查询到结果,将其显示在各文本框中如果查询到结果,将其显示在各文本框中 Bookadd.java异常出版时间格
6、式错误异常库存数量和价格错误,应为数字清空全部文本框异常无法正常读取数据库判断Book表中是否存在指定编号的图书,如果存在,返回true,否则,返回false图书添加成功清空全部文本框检查日期是否有效。如果日期无效,则会产生ParseException异常将记录保存到book表中如果图书编号重复,则记录无效,需修改图书编号如果图书编号为空,则终止保存记录操作 Bookdelete.java 图书编号有误,查无此书清空全部文本框如果查询到结果,将其显示在各文本框中按编号查询图书,结果存入book对象中如果图书编号为空,则查询操作终止图书编号不能为空提示图书信息删除成功图书信息删除失败如果图书编号
7、为空,则删除操作终止 Bookquery.java如果出版社不空,生成sql3字句如果书名和作者有一项不为空如果出版日期不空,生成sql4字句如果书名、作者或出版社有一项不为空如果作者不空,生成sql2字句如果书名不为空 创建一条基本的SQL语句,表示选出表中全部记录如果书名不空,生成sql1字句 创建一个表格出版时间格式错误数据库不存在,或存在错误将查询结果赋予Book数组执行查询如果已设置任意一项条件,则修改SQL语句 为了便于调试程序,特别创建main方法BookUpdata.java 清空全部文本框 出版时间格式错误价格或库存数量错误,应为数字 数据有误,图书信息修改失败 图书信息修改
8、成功清空全部文本框 程序用于检查日期是否有效 如果查询到结果,将其显示在各文本框中保存修改的记录如果图书编号为空,则终止保存记录操作 图书编号有误,查无此书 按编号查询图书,结果存入book对象中 如果图书编号为空,则查询操作终止 Borrow,java 统计读者所借图书数量查询指定读者是否已借过指定图书且未归还读者编号有误,查无此人 按编号查询读者,结果存入reader对象中如果查询到结果,将其显示在各文本框中图书已无库存,无法借阅重新初始化各参数并禁止借出按钮 图书编号有误,查无此书按编号查询图书,结果存入book对象中如果查询到结果,将其显示在各文本框中图书和读者查询如果图书编号或读者编
9、号两者均为空,或者有一个为空,则返回 初始化各参数项并禁止借出按钮增加main()方法,主要为了调试程序界面数据库统计失败填写借出图书记录统计某个读者当前已借图书且未归还的数量该读者借书过多,无法继续借阅如果读者已借图书尚未超出其允许最大借书量,则允许其继续借阅所选图书 Login.java记录登录的用户名调用主程序只有管理员才能使用基础管理和借阅管理菜单释放登录窗体如果此用户存在,则记录其状态(否:不是管理员,是:是管理员)核对用户名和密码如果用户名或密码任一为空,则终止后续操作 异常用户数据库有误 ReaderAdd.java判断Reader表中是否存在指定编号的读者,如果存在,返回tru
10、e,否则,返回false异常;最大可借天数错误,应为整数读者添加成功;清空全部文本框读者编号重复如果读者编号重复,则记录无效,需修改读者编号如果读者编号为空,则终止保存记录操作 清空全部文本框 Readerdelete.java清空全部文本框异常读者编号有误,查无此人按编号查询读者,结果存入reader对象中如果查询到结果,将其显示在各文本框中读者编号不能为空异常读者编号有误,查无此人读者信息删除成功清空全部文本框如果读者编号为空,则终止删除操作 Readerquery.java如果已设置任意一项条件,则修改SQL语句执行查询将查询结果赋予Book数组创建一个表格异常:数据库不存在,或存在错误
11、如果作者不空,生成sql2字句如果读者姓名不空,生成sql1字句创建一条基本的SQL语句,表示选出表中全部记录 ReaderUpdata.java清空全部文本框如果读者编号为空,则终止保存记录操作修改读者信息最大可借数或最大可借如果读者编号为空,则终止查询操作按编号查询读者,结果存入reader对象中如果查询到结果,将其显示在各文本框中 ShowMian.java如果不是管理员,则禁止用户维护图书信息和读者信息以及禁止进行借阅管理,即只能查询 UpdataPassword.java修改密码如果两个密码输入框中输入的内容不一致,则显示错误提示信息并返回如果两个密码输入框中有一个为空,则显示错误提
12、示信息并返回 Book.java获得书的ID号获得书的书名获得书的类型获得书的作者获得书的翻译者获得书的出版社获得书的发行日期获得书的股价获得书的价格并全部返回 Bookselect.java异常无法正常读取数据库按图书编号查询,查询结果保存在Book类的对象中 GlobalVar.java保存登录用户名 IfBorrowBack.java查指定读者是否借过指定图书且未归还 DbOp.java关闭数据库执行数据库更新操作。如果有问题,则返回-1执行数据库查询工作。如果出现异常,返回null构造方法。如果数据库未打开,则通过创建连接打开数据库 Reader.java获得读者的ID号获得读者的名字
13、获得读者的类型获得读者的性别获得读者最大借书数获得读者的还书日期并全部返回 ReaderSelect.java按读者编号查询,结果保存在Reader类的对象中 二 部分代码a.书籍归还/ Back.javapackage 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 Fram
14、e private 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();Button queryBtn = new Button(查询);Label lbbookinfo = new Label(SepL
15、ine + 图书信息 + 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(出版社:);Label tf_publisher = new Label(xx);Label lbpublish_time = new Label(出版时间:);Label tf_publish_time = new Label
16、(xx);Label lbprice = new Label(定价:);Label tf_price = new Label(xx);Label lbstock = new Label(库存数量:);Label tf_stock = new Label(xx);Label lbreaderinfo = new Label(SepLine + 读者信息 + SepLine);Label lbreadername = new Label(读者姓名:);Label tf_readername = new Label(xx);Label lbreadertype = new Label(读者类型:);
17、Label tf_readertype = new Label(xx);Label lbmax_num = new Label(最大可借数:);Label tf_max_num = new Label(xx);Label lbdays_num = 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(
18、xx);Button backBtn = new Button(还书);Button closeBtn = new Button(关闭);public Back() 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_r
19、eaderid.setBounds(260, 40, 90, 20);queryBtn.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.s
20、etBounds(30, 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); / 库存数量tf_stock.setBou
21、nds(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);lbmax_num.setBounds(30, 190, 75, 20); / 最大可借数tf_m
22、ax_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_back_date.setBounds(90, 230, 100, 20);backBtn.setBounds(160, 260, 80, 25);/ 还书按钮
23、backBtn.setEnabled(false); / 开始时禁用还书按钮closeBtn.setBounds(260, 260, 80, 25);/ 关闭按钮queryBtn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) btn_querywActionPerformed(e););backBtn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) btn_bac
24、kActionPerformed(e););closeBtn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) setForeground(Color.BLACK); / 设置前景色为黑色dispose(); / 关闭窗体);/* 关闭窗口*/this.addWindowListener(new WindowAdapter() / 重写windowClosing()方法public void windowClosing(WindowEvent e) setForeground(Co
25、lor.BLACK); / 设置前景色为黑色dispose(); / 关闭窗体);add(lbbookid);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);add(l
26、bback_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);add(tf_price);add(tf_stock);add(tf_readername);add(tf_r
27、eadertype);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.getText();/ 如果图书编号或读者编号两者均为空,或者有一个为空,则返回if (bookid.equals() | readerid.equals() JOptionPane.showMessageDialog
28、(null, 图书编号和读者编号均不能为空!);init(); / 重新初始化各参数并禁止还书按钮return;/ 按编号查询图书,结果存入book对象中Book book = BookSelect.SelectBookById(bookid);/ 如果查询到结果,将其显示在各文本框中if (book != null) tf_bookname.setText(book.getBookname();tf_author.setText(book.getAuthor();tf_publisher.setText(book.getPublisher();tf_publish_time.setText(
29、book.getPublish_time().toString();tf_price.setText(String.valueOf(book.getPrice();tf_stock.setText(String.valueOf(book.getStock(); else JOptionPane.showMessageDialog(null, 图书编号有误,查无此书!);init(); / 重新初始化各参数并禁止还书按钮return;/ 按编号查询读者,结果存入reader对象中Reader reader = ReaderSelect.selectReaderById(readerid);/ 如
30、果查询到结果,将其显示在各文本框中if (reader != null) tf_readername.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();
31、 / 重新初始化各参数并禁止还书按钮return;/ 查询指定读者是否借阅过指定图书,且未归还if (!IfBorrowBack.findbook(bookid,readerid)JOptionPane.showMessageDialog(null, 该读者没有借过此种图书!);init(); / 重新初始化各参数并禁止还书按钮return;SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd);/ 创建日期变量,其内容为当前日期Date currentdate = new Date();/ 将日期按指定格式输出String borrow
32、date = sdf.format(currentdate);tf_back_date.setText(borrowdate);backBtn.setEnabled(true); / 使还书按钮有效/ 填写还书记录private void btn_backActionPerformed(ActionEvent e) String sql;String bookid = tf_bookid.getText();String readerid = tf_readerid.getText();String backdate = tf_back_date.getText();/ 更新borrow表记录
33、sql = update borrow set if_back=是,back_date=;sql = sql + backdate + where ;sql = sql + book_id= + bookid + and ;sql = sql + reader_id= + readerid + and ;sql = sql + if_back=否;DbOp.executeUpdate(sql);/ 将图书库存数量加int istock = Integer.parseInt(tf_stock.getText() + 1;String cstock = String.valueOf(istock)
34、;/ 更新画面中的图书库存数量tf_stock.setText(cstock);/ 更新数据库中的图书库存数量sql = update book set stock= + cstock;sql = sql + where id= + bookid + ;DbOp.executeUpdate(sql);JOptionPane.showMessageDialog(null, 还书成功!);init(); / 重新初始化各参数并禁止还书按钮/ 初始化各参数项并禁止还书按钮private void init() tf_bookname.setText(xx);tf_author.setText(xx)
35、;tf_publisher.setText(xx);tf_publish_time.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()方法,主要为了调试程序界面public static void main(String args) new Back();三 感想体会 通过java程序,总体设计的编写,对软件开发有了深刻的了解。总体设计中,对于流程图的制作也熟练了点,最初是不太了解软件的使用而困难了点,过程艰难,结果是学好了流程图的制作。根据功能分好模块,对后来的功能实现,设计有了明确的方向,编程程序也明确了功能,接口,易于实现。 这次经验有利于以后的软件开发过程中出现的问题,比如技术是否可实现,经济是否可盈利,分工合作是否明确等等。 28
限制150内