图书信息管理系统设计与实现


目录
一、实验题目    3
1.1、题目:    3
1.2、目的性:    3
二、图书管理系统可行性分析    3
2.1可行性方案    3
2.2社会可行性    3
2.3技术可行性    4
2.4经济可行性    5
2.5决定可行性因素    5
2.6法律方面的可行性    5
2.7用户使用可行性    5
三、实践环境分析    6
四、需求分析    6
4.1需求概述    6
4.3性能需求    8
4.4故障处理    9
4.5其他需求    9
4.2、系统设计    10
五、系统测试及运行    11
六、实践小结    21


一、实验题目
1.1、题目:图书信息管理系统
1.2、目的性:课程设计围绕课程的整体教学目标进行,具有一定的综合性和应用性,只靠个别单元的知识一般不能实现课程设计的目标,需要对课程知识进行综合运用。要完成好课程设计,就要对课程知识进行系统学习、复习、总结、应用,达到在实践中学习知识、掌握知识、应用知识和培养能力的目的。
①通过课程设计,进一步熟悉掌握Java语言的基本知识点。
②通过课程设计,达到系统理解、综合运用课程知识的学习目标。
③通过课程设计,学会应用Java语言程序解诀实际问题的方法。
④通过课程设计,掌握程序的局部测试、调试方法,建立程序系统调试、测试的基本概念和思想,学会较大程序的系统测试、调试方法。
通过使用java编程语言实现小型程序项目,巩固对java语言理论知识--面向对象的理解,提升代码编写、bug调试能力。

二、图书管理系统可行性分析
2.1可行性方案
可行性分析的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。可行性研究的目的不是解决问题,而是确定问题是否值得去解决。通过需求分析,逐步细化对软件的需求,描述软件要求处理的数据库,并给软件开发提供一种可能转化为数据设计,结构设计和过程设计的数据与功能表示。
从技术可行性、经济可行性、社会可行性三个方面来研究该系统的可行性。根据技术可行性的考虑初步排除一些不现实的系统和不合理的要求。
2.2社会可行性
   随着计算机应用的日益普及和深化,网上办公已经成为一种趋势。本项目要开发的是基于局域网和互联网的冬书管理系统。由于学校藏书量大,借书的学生多,原来的人工工作方式不仅会造成办理时间的延误和人力资源的浪费,特别是在借书高峰期时这种冲突更加明显,而且存在着各种信息不易存放、易丢失、难以备份和查询等缺点。因此,实现一个将各种图书管理和
服务功能集成起来的管理信息系统就显得十分必要,既可以节省资源,又可以有效存储、更新、查询信息,提高工作和服务效率。 开发的系统要求界面友好,方便直观。既要方便管理员对图书信息进行添加、删除、修改、查
询和统计等管理,又要方便学生借书、还书和续借等业务的办理。将数据库发布到互联网上,进行资源共享,方便学生可以在自己的权限内对图书信息进行访问,查询相关信息和进行续借操作
  2.3技术可行性
  本系统是一个基于局域网、互联网和windows操作的系统,现有技术已较为成熟,利用 现有技术完全可以实现系统开发目标。同时,开发期限较为宽裕,预计可以在规定期限内完成开发任务。就目前使用的开发技术及开发环境来说建议系统的功能目标应该能够达到;利用现有的技术在规定的期限内开发工作基本能够完成;开发人员的数量和质量均符合要求。
(1)功能强大的信息平台目前的图书管理系统开发平台的功能已经
十分强大。Eclispse具有Web开发的强大优势,Microsoft SQL 2008 是性能稳定的服务器平台。SQL Server+ASPNET 正是开发信息系统的黄金组合。
(2)硬件配置
1服务器:Pentium4以上配置的高性能PC机,内存应在256M以上硬盘在 40G以上,确认该计算机已经安装数据库软件。
操作系统:Windows 2000、Windows XP、WindowsNT,分辨率:
1024*768。
客户端:Pentium233 以上配置的 PC 机,内存应在 32M 以上,
2.4经济可行性
随着我国国民经济的飞速发展,图书管理管理已经作为一个新兴的服务行业,经过几十年的发展,已经逐步形成企业化经营、专业化管理和社会化服务的运行机制。社会管理也是伴随着改革开放和房地产业的发展而涌现的新生物,也是图书馆管理体制改革的重要内容。使用计算机对企业单位的各项信息进行管理,具有着手工管理所无法比拟的优点。例如:检索迅速、香询方便、可靠性高、存储量大、保密性好、寿命长和成本低等。目前,几乎所有的图书馆都建立了针对书籍信息的管理系统,这些系统在很大程度上提高了图书馆的工作效率和管理水平。
2.5决定可行性因素
本次可行性分析是按照软件工程的规范步骤进行的,即按复查项目目标和规模,研究目前正使用的系统,导出新系统的高层逻辑模型,重新定义问题这一循环反复的过程进行。然后提出系统的实现方案,推荐最佳方案,对所推荐的方案进行经济、技术、用户操作和法律的可行性分析,最后给出系统是否值得开发的结论。
1.成本/效益分析结果:效益>成本:
2.技术可行:现有技术可完成开发任务;
3.操作可行:系统能被现有的工作人员快速掌握并使用
4.法律可行:所使用工具和技术及数据信息不违反法律。

2.6法律方面的可行性
所有软件都用正版,技术资料都由提出方保管,数据信息均可保证和合法来源。所以在法律方面可行的。
2.7用户使用可行性
   使用本系统的人员均有一定的计算机应用基础,系统维护员由计算机的专业人员担任,所有人员都要经过本系统的使用培训经过简单啊啊的培训人员就会熟练使用本软件

三、实践环境分析
参考资料:(1)丁振凡.《Java 语言实用教程》,北京:邮电大学出版社,2005
(2) 毕广.《Java程序设计实例教程》, 北京:冶金工业出版社,2007

编程语言:JAVA。
开发环境:Eclipse,JDK。

1.设备 :该系统要求内存256MB以上,硬盘20G以上,CPU 1.4GHz,其他设备不做要求,一般即可。

2.支持软件操作系统:Windows系统和Linux系统。 数据库管理系统:ACCESS数据库系统。
3.接口:本产品的用户一般需要通过终端进行操作,进入主界面后按相应功能需求点击相应的窗口,分别进入相对应的界面(如:输入界面、输出界面)。

4.控制 :该系统的主要输入设备是键盘和条码机。主要输出设备是显示器和打印机。
四、需求分析
4.1需求概述
在图书管理系统中,管理员为每个读者建立一个账户,账户内存储读者个人的详细信息,并依据读者类别的不同给每个读者发放借书卡(提供借书卡号、姓名、部门或班级等信息)。读者可以凭借书卡在图书馆进行图书的借、还、续借、查询等操作,不同类别的读者在借书限额、还书期限以及可续借的次数上要有所不同。 借阅图书时,由管理员录入借书卡号,系统首先验证该卡号的有效性,若无效,则提示无效的原因;若有效,则显示卡号、姓名、借书限额、已借数量、可再借数量等信息,本次实际借书的数量不能超出可再借数量的值。完成借书操作的同时要修改相应图书信息的状态、读者信息中的已借数量、在借阅信息中添加相应的记录。
归还图书时,由管理员录入借书卡号和待归还的图书编号,显示借书卡号、读者姓名、读书编号、读书名称、借书日期、应还日期等信息,并自动计算是否超期以及超期的罚款金额,若进行续借则取消超期和罚款等信息;若图书有损坏,由管理员根据实际情况从系统中选择相应的损坏等级,系统自动计算损坏赔偿金额。完成归还操作的同时,修改相应图书信息的状态、修改读者信息中的已借数量、在借书信息中对相应的借书记录做标记、在还书信息中添加相应的记录。图书管理员不定期地对图书信息进行添加、修改和删除等操作,在图书尚夫归还的情况下不能对冬书信息进行删除。也可以对读者信息进行添加、修改、删除等操作,在读者还有未归还的图书的情况下不能进行删除读者信息。系统管理员主要进行图书管理员权限的设置、读者类别信息的设置、图书类别的设置以及罚款和赔偿标准的设置、数据备份和数据恢复等处理。
4.2功能分析
(a)超级管理员:需要能够添加普通用户信息,能够对图书进行管理,能够查询用户借书记录,创建和删除读者用户信息,添加和删除图书信息;
(b)普通用户:能够搜索图书并执行借还书操作。
(c)列出当前数据文件中的图书信息,读者信息,借阅信息,还书信息等记录
(d)查询功能:书目匹配查询,读者匹配查询,书目和读者匹配查询
(e)添加功能:添加书目和读者记录及借还书记录,添加系统设置相关信息
(f)修改功能:修改书目和读者记录,提供相关确认机制,修改系统设置相关信息,提供相关确认机制
(g)删除功能:删除拿出书目和读者记录,提供相关确认机制,删除系统设置相关信息,提供相关确认机制


图4-1 功能结构图

4.3性能需求
学校对系统性能无特殊的要求,只要查询图书的时候没有明显的延迟就可以了,查询的时间不要超过3秒钟。
条件、假定和限制:
1)系统最小寿命:系统应该能在无重大改动的条件下正常运行5年以上。
2)对设备的要求:要求计算机稳定性良好,整套系统经济实惠。
3)可以利用的信息和资源:图书管已经配置了所有的计算机,以及网络设备,
4)图书管员工受过较好的计算机方面的培训,在调研的时候感觉有不少员工有计算机方面的专业经验。
4.4故障处理
正常使用时不应出错,对于用户的输入错误应给出适当的改正提示,若运行时遇到不可恢复的系统错误,也必须包拯数据库完好无损。
1) 内部故障处理
在开发阶段可以随即修改数据库里的相应内容。2) 外部故障处理
对编辑的程序进行重装载时,第一次装载认为错,修改。第二次运行,在需求调用时出错,有错误提示,重试。
本软件可能产生的错误为数据库的错误信息,应由数 库管理员对数据库进行维护。为了确保系统恢复的能力,数据库管理员要定期对数据库进行备份。
4.5其他需求
要求发布的软件达到用户的预期目标,运行时基本无错误,在一般条件下,应不出故障。对于浏览、查询、增加、删除、更新和密码设置的一般操作,要求及时响应,在 1-2 秒内。要求能在发生意外(如掉电)的情况下,保证不丢失数据。
同时还需具备以下几点:
安全性:有用户登入界面,要求提供身份验证,只有通过了身份验证才可以登陆该软件,密码输入三次不正确,则强行关闭该软件。
可维护性:当软件运行发生错误时,能够快速、准确对其定位、诊断和修改恢复。
可理解性:对于本软件提供的各种菜单、按钮,其功能应该一目了然,易于理解。

4.2、系统设计 
(1)登录界面:操作者输入对应的登录账户和密码,进入对应的操作界面。
(2)超级管理员界面:提供查询图书功能,在操作成功后显示查询页面;提供添加图书功能,在添加图书界面填写相关图书信息,添加成功则弹出提示“添加成功”,反之弹出提示“添加失败”;提供删除图书功能,在删除图书界面填写相关图书信息,添加成功则弹出提示“删除成功”,反之弹出提示“删除失败”;提供添加用户功能,在添加用户界面填写用户相关信息,添加成功则弹出提示“添加成功”,反之弹出提示“添加失败”;提供借阅查询功能,在新页面展示所有借阅记录,可根据条件进行相应的查询。
(3)普通用户界面:主页面展示用户个人信息;点击“我要借书”进入借阅面板,可根据条件查询所需图书,单击图书后点击“借书”,若借书成功则弹出提示“借书成功”,反之弹出“借书失败”;点击“我要还书”进入归还面板,单击图书后点击“还书”,若还书成功则弹出提示“还书成功”,反之弹出“还书失败”。
(4)退出系统:点击主界面右上角的叉号即可退出管理系统。

图4-2 总体流程图

五、系统测试及运行
(1)登录验证
输入对应的账户密码后从数据库后台查询相应的用户信息,验证是否匹配,若不匹配则提示“用户名或密码错误”。图4-3为登录界面,图4-4为验证流程图。


图4-3 登录界面


图4-4 随机数产生流程图
关键代码如下:
public static int checkUser(String id, String password) {
        Connection conn = JDBCUtils.getConnection();
        String sql = "select user_pass from users where user_id=?";
        try {
            PreparedStatement preps = conn.prepareStatement(sql);
            preps.setString(1, id);
            ResultSet rs = preps.executeQuery();
            if(rs.next()) {
                if(rs.getString(1).equals(password)) {// 验证通过
                    if(id.equals("admin")) {// 是管理员用户
                        return 2;
                    } else {// 是学生用户
                        return 1;
                    }
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }
(2)超级管理员界面
登录超级管理员界面,可执行图书和用户相关操作。


图4-5 超级管理员界面

图4-6 搜索结果


图4-7 添加图书

图4-8 新增用户


图4-9 借书记录
关键代码如下:
// 添加书籍
    public static boolean addBook(String book_name, String book_publisher, String book_classify) {
        Connection conn = JDBCUtils.getConnection();
        String sql = "insert into books (book_name, book_publisher, book_classify, book_status) "
                + "values (?, ?, ?, 1)";
        try {
            PreparedStatement preps = conn.prepareStatement(sql);
            preps.setString(1, book_name);
            preps.setString(2, book_publisher);
            preps.setString(3, book_classify);
            if(!preps.execute()) {
                JDBCUtils.release(conn, preps);
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
    
    // 删除书籍
    public static boolean deleteBook(int id) {
        Connection conn = JDBCUtils.getConnection();
        String sql = "delete from books where book_id=?";
        try {
            PreparedStatement preps = conn.prepareStatement(sql);
            preps.setInt(1, id);
            if(!preps.execute()) {
                JDBCUtils.release(conn, preps);
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return false;
    }

// 新增用户
    public static boolean addUser(String id, String name, String pass, String depart, String clazz) {
        Connection conn = JDBCUtils.getConnection();
        String sql = "insert into users (user_id, user_name, user_pass, user_depart, user_class) "
                + "values (?, ?, ?, ?, ?)";
        try {
            PreparedStatement preps = conn.prepareStatement(sql);
            preps.setString(1, id);
            preps.setString(2, name);
            preps.setString(3, MD5Utils.md5(pass));
            preps.setString(4, depart);
            preps.setString(5, clazz);
            if(!preps.execute()) {
                JDBCUtils.release(conn, preps);
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

普通用户界面
显示用户个人信息,可执行借阅、归还图书操作。


图4-10 普通用户界面


图4-11 借阅界面


图4-11 归还界面
关键代码如下:
    // 完成借书操作
    public static boolean borrowBook(int book_id, String user_id) {
        Connection conn = JDBCUtils.getConnection();
        Calendar cal = Calendar.getInstance();
        int y = cal.get(Calendar.YEAR);      
        int m = cal.get(Calendar.MONTH);      
        int d = cal.get(Calendar.DATE);      
        int h = cal.get(Calendar.HOUR_OF_DAY);      
        int mi = cal.get(Calendar.MINUTE);      
        int s = cal.get(Calendar.SECOND);
        String date = "" + y + "-" + m + "-" + d + "-" + h + "-" + mi + "-" + s;// 拼装时间
        String sql = "insert into borrows (borrow_id, user_id, book_id, borrow_date, return_date) VALUES (null, ?, ?, ?, '')";// 执行插入操作
        try {
            PreparedStatement preps = conn.prepareStatement(sql);
            preps.setString(1, user_id);// 设置对应的?的值
            preps.setInt(2, book_id);
            preps.setString(3, date);
            System.out.println(preps.toString());// 打印sql语句
            preps.execute();// 执行插入
            sql = "update books set book_status=0 where book_id=?";// 更新书籍状态
            preps = conn.prepareStatement(sql);
            preps.setInt(1, book_id);
            preps.executeUpdate();
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return false;
    }

// 完成还书操作
    public static boolean returnBook(int book_id, String user_id) {
        Connection conn = JDBCUtils.getConnection();
        Calendar cal = Calendar.getInstance();
        int y = cal.get(Calendar.YEAR);      
        int m = cal.get(Calendar.MONTH);      
        int d = cal.get(Calendar.DATE);      
        int h = cal.get(Calendar.HOUR_OF_DAY);      
        int mi = cal.get(Calendar.MINUTE);      
        int s = cal.get(Calendar.SECOND);
        String date = "" + y + "-" + m + "-" + d + "-" + h + "-" + mi + "-" + s;
        String sql = "update borrows set return_date=? where book_id=? and user_id=? and return_date=''";// 执行更新操作
        try {
            PreparedStatement preps = conn.prepareStatement(sql);
            preps.setString(1, date);
            preps.setInt(2, book_id);
            preps.setString(3, user_id);
            System.out.println(preps.toString());
            preps.executeUpdate();
            sql = "update books set book_status=1 where book_id=?";// 更新书籍状态
            preps = conn.prepareStatement(sql);
            preps.setInt(1, book_id);
            preps.executeUpdate();
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return false;
    }

// 查找当前用户所有未还图书
    public static Object[][] searchUserAllUnreturnBook(String user_id) {
        Connection conn = JDBCUtils.getConnection();
        String sql = "select borrow_id, book_id, borrow_date from borrows where user_id=? and return_date=''";
        try {
            PreparedStatement preps = conn.prepareStatement(sql);
            preps.setString(1, user_id);
            ResultSet rs = preps.executeQuery();
            return RS2Object.rs2Object2(rs);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return null;
    }


六、实践小结
通过选择图书信息管理系统这个题目,让我们掌握Java语言的用处,并且可以灵活的使用Eclipse软件。同时更加深入的了解图形化界面的编程过程,使我们更加熟练的掌握Java语言,代码的规范性和完整性有了很大提高,同时对相应代码的模块化也有了相当的认识。
在分析阶段,要进行面向对象的需求分析、系统设计,列出相应的需求文档、绘制系统设计模型图,这些工作很好的锻炼了我们的逻辑思维能力,同时,我们也学到了很多有关于软件管理方面的知识。在这次实践中,我们都有很大的收获,这为我们未来更好的学习打下了牢固的基础。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等天晴i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值