图书管理系统 毕业设计

图书管理系统 毕业设计

摘 要

摘要:二十一世纪是信息的世纪,随着社会经济的发展,社会信息化程度也越来越高,学校作为教育与科技的先行者,优秀的技术往往会被所率先学校采用。优秀的学校管理决策者一定会毫不犹豫地选择或者自主开发一个适合本校校情的图书管理系统。

图书管理系统实现了分角色登录功能,读者只能进行查询,借阅,归还。图书管理员能实现图书借阅、图书归还、新书入库,人员管理等功能。Spring 是目前最流行的 Web 开发框架技术之一,它基于Java JDK 1.8 环境开发,具体的开发平台使用的是 Idea Intellij 2020,在数据库方面使用的是 MySQL 5.7。本系统开发的总体任务是实现与图书相关的各种信息的系统化,规范化和自动化。

关键词: SpringBoot;JavaEE;MySQL

Abstract

Abstract: The 21st century is a century of information. With the development of social economy, the degree of social informatization is also higher and higher. As the forerunner of education and science and technology, schools often take the lead in adopting excellent technology. Excellent school management decision-makers will not hesitate to choose or independently develop a suitable library management system for our school.

The library management system realizes the login function by role, so readers can only query, borrow and return. Librarians can realize the functions of book borrowing, book return, new book storage, personnel management and so on. Spring is one of the most popular web development framework technologies, which is based on Java JDK 1.8 environment. The specific development platform is idea IntelliJ 2020, and the database is MySQL 5.7. The overall task of the system development is to realize the systematization, standardization and automation of all kinds of information related to books.

Keywords: SpringBoot; JavaEE; MySQL

目 录

摘 要

Abstract

1 绪论

1.1 论文研究背景与意义

1.2 系统开发意义

1.3 图书馆信息化

2环境搭建与需求分析

2.1 开发环境介绍

2.2 相关技术背景

2.2.1 Spring框架

2.2.2 MySQL

2.2.3 MyBatis

2.3 业务分析

2.3.1 数据库设计

2.3.2实体设计

2.3.3 系统业务流程图

3 代码设计与功能实现

3.1 MVC

3.2 登录模块

3.3 管理员模块

3.3.1 用户管理

3.3.2 书本管理

3.4 借阅归还模块

3.4.1 借阅

3.4.2 归还

3.5 用户详情

结论

参考文献

致谢

附录

1 绪论

1.1 论文研究背景与意义

随着现在科学技术的进步,人类社会正逐渐走向信息化,图书馆拥有丰富的文献信息资源,是社会系统的重要组成部分,在信息社会中作用越来越重要,在我国图书馆计算机等 信息技术的应用起步于 20 世纪 70 年代末期,随着改革开放的步伐的迅

速发展,特别是 90 年代以后,我国图书馆信息网络建设取得了较大发展,图书馆信息化建设迈向了一个新台阶。

1.2 系统开发意义

图书管理系统是图书管理工作中不可缺少的部分,它的内容对于图书馆的管理员和使用者来说都至关重要。所以图书管理系统应该能够为管理员或读者提供充足的信息和快捷的数据处理手段。作为计算机应用的一部分,使用计算机对图书信息进行管理,具有手工管理所无法比拟的优点,如:检索迅速、查找方便、易修改、可靠性高、存储量大、数据处理快捷、保密性好、寿命长、成本低、便于打印等。这些优点能够极大地提高图书管理的效率,也是图书馆的科学化、正规化管理,与世界接轨的重要条件。因此,开发这样一套管理软件成为很有必要的事情。

1.3 图书馆信息化

图书馆的信息化从最初地对图书馆业务管理实行信息化发展到对图书馆各个业务流程进行系统和网络化管理,并建立大规模以个体文献目录联机查询为主的资源共享系统。进入 21 世纪,允许利用计算机网络和信息技术,逐步实现不同载体的实体文献的信息化管理和多方位的联机查询。图书馆的计算机信息化管理,就是将传统图书馆业务的手工操作转变成由计算机管理,既图书馆的图书期刊、音像资料等各种载体文献的采编、典藏、流通、检索及常规业务管理等工作,利用计算机技术,进行高效、准确的信息化管理。其根本目的是实现区域及地区、国家、国家间的资源共享。要达到资源共享的目的,必须制定一定的标准,只有各个系统都遵循这些标准,不同的系统间才可以实现联机查询、资源共享的效果。

2环境搭建与需求分析

2.1 开发环境介绍

Java版本:Jdk1.8

前端:html,js,thymeleaf,semanticui

后端:java,spring,springboot,springmvc,mybatis

数据库:mysql

2.2 相关技术背景

2.2.1 Spring框架

Spring框架是一个开放源代码J2EE应用程序框架,由[Rod Johnson](https://baike.baidu.com/item/Rod Johnson/1423612)发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于JEE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。

2.2.2 MySQL

MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL 的初始开发人员 David Axmark 和 Michael Monty Widenius 于 1995 年建立的。

2.2.3 MyBatis

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。

2.3 业务分析

2.3.1 数据库设计

如下图 2-1所示:

img

图2-1 数据库结构

表2-1 数据库结构

2.3.2实体设计

书本实体

img

图2-2 书本实体

用户实体

img

图2-3 用户实体

参数实体

img

图2-4 参数实体

借阅实体

img

图2-5 借阅实体

2.3.3 系统业务流程图

img

图2-6 系统业务流程

3 代码设计与功能实现

3.1 MVC

本系统的设计的最大的特色是采用了MVC分层的设计思想,系统界面采用 Web 页面作为表现层和数据粘合层,为了进行一些常用的逻辑处理的需要还创建了业务逻辑 层,为了为逻辑处理提供数据有创建了数据层,同时为了数据访问创建了数据模型层。

img

图3-1 MVC模型

3.2 登录模块

img

如果使用系统就必须先登录到系统,用户使用登录模块登录系统界面效果如图3-2

图3-2 登录界面

单击“提交”按钮的处理代码如下:

@RequestMapping("/login")
public String login(User user, RedirectAttributes attributes,Model model, HttpSession session){
    
    
    String username = user.getUsername();
    String password = Md5.getMD5String(user.getPassword());
    User user1 = userMapper.findUserByUsername(username);
    System.out.println(user1.toString());
    if (user1!=null){
    
    
        if (user1.getPassword().equals(password)){
    
    
            session.setAttribute("username",username);
            session.setAttribute("isadmin",user1.getIsadmin());
            session.setAttribute("id",user1.getId());
            return "redirect:index";
        }else{
    
    
            model.addAttribute("msg2","密码输入错误");
            return "login";
        }
    }else{
    
    
        model.addAttribute("msg1","用户名不存在");
        return "login";
    }
}

(1)这行代码获取用户是否为管理信息 session.setAttribute(“isadmin”,user1.getIsadmin());

(2)登录密码通过MD5进行加密

String password = Md5.getMD5String(user.getPassword());

如果登录失败,给出提示,如:图3-3

img

图3-3 登录提示界面

登录成功获取数据返回主页

img

图3-4 主页界面

代码

@RequestMapping("/index")
public String index(Model model, HttpSession session){
    
    
    Param param = paramMapper.findParamByName("views");
    if(param!=null){
    
    
        paramMapper.updateParamById(param.getId());
    }else{
    
    
        paramMapper.addParam(
            new Param(UUID.randomUUID().toString().replace("-",""),
                      "views",1)
        );
    }
    Integer views = paramMapper.findParamByName("views").getNum();
    List<Book> books = bookMapper.findAllBooks();
    Integer sum = 0;
    for (Book b :
         books) {
    
    
        sum += b.getNum();
    }
    model.addAttribute("views",views);
    System.out.println("sum:"+sum);
    model.addAttribute("total",sum);
    model.addAttribute("books",books);
    model.addAttribute("num",books.size());
    model.addAttribute("isadmin",session.getAttribute("isadmin"));
    return "index";
}

3.3 管理员模块

3.3.1 用户管理

img

图3-5 用户管理界面

用户管理代码

删除

@RequestMapping("/user_delete")
public String user_delete(@RequestParam("id") String id){
    
    
    System.out.println(id);
    userMapper.deleteUserById(id);
    userBorrowMapper.deleteUserBorrowByUserId(id);
    return "redirect:user";
}

更新

img

图3-6 用户更新页面

代码

@RequestMapping("/update_user")
public String update_user(User user){
    
    
    System.out.println("update_user:"+user.toString());
    userMapper.updateUserById(user);
    return "redirect:user";
}

3.3.2 书本管理

书本管理主页

img

图3-7 书籍管理界面

代码

@RequestMapping("/book")
public String book(Model model,HttpSession session){
    
    
    Param param = paramMapper.findParamByName("views");
    if(param!=null){
    
    
        paramMapper.updateParamById(param.getId());
    }else{
    
    
        paramMapper.addParam(
            new Param(UUID.randomUUID().toString().replace("-",""),
                      "views",1)
        );
    }
    Integer views = paramMapper.findParamByName("views").getNum();
    List<Book> books = bookMapper.findAllBooks();
    Integer sum = 0;
    for (Book b :
         books) {
    
    
        sum += b.getNum();
    }
    System.out.println("sum:"+sum);
    model.addAttribute("total",sum);
    model.addAttribute("books",books);
    model.addAttribute("num",books.size());
    model.addAttribute("views",views);
    model.addAttribute("username",session.getAttribute("username"));
    model.addAttribute("isadmin",session.getAttribute("isadmin"));
    return "book";
}

删除

@RequestMapping("/book_delete")
public String book_delete(@RequestParam("id") String id){
    
    
    System.out.println(id);
    Book book = bookMapper.findBookById(id);
    Integer booknum = book.getNum();
    if (booknum>1){
    
    
        bookMapper.updateBookNumById(id);
    }else{
    
    
        userBorrowMapper.deleteUserBorrowByBookId(id);
        bookMapper.deleteBookById(id);
    }
    return "redirect:book";
}

更新

img

图3-8 书本更新页面

代码

@RequestMapping("/book_update")
public String book_update(Book book,Model model){
    
    
    bookMapper.updateBookById(book);
    return "redirect:book";
}

添加

img

图3-9 书本添加页面

代码

@RequestMapping("/add_book")
public String add_book(Book book){
    
    
    book.setId(UUID.randomUUID().toString().replace("-",""));
    bookMapper.addBook(book);
    return "redirect:book";
}

搜索

img

图3-10 书籍管理书本搜索结果页面

代码

@RequestMapping("/book_search")
public String book_search(String keywords,Model model,HttpSession session){
    
    
    System.out.println("keywords:"+keywords);
    List<Book> books = bookMapper.findBooksByKeywords(keywords);
    Integer sum = 0;
    for (Book b :
         books) {
    
    
        sum+=b.getNum();
    }
    model.addAttribute("books",books);
    model.addAttribute("num",books.size());
    model.addAttribute("sum",sum);
    model.addAttribute("isadmin",session.getAttribute("isadmin"));
    return "search_book_page";
}

3.4 借阅归还模块

3.4.1 借阅

img

图3-11 书本详情页面

借阅代码

@RequestMapping("/borrow")
public String borrow(@RequestParam("id") String id,Model model,HttpSession session){
    
    
    String uid = (String)session.getAttribute("id");
    String bid = id;
    Book book = bookMapper.findBookById(id);
    UserBorrow userBorrow = userBorrowMapper.findUserBorrowByUidAndBid(uid,id);
    if (userBorrow==null){
    
    
        String tid = UUID.randomUUID().toString().replace("-","");
        userBorrow = new UserBorrow(tid,uid,bid,1,new Date(System.currentTimeMillis()),null);
        userBorrowMapper.addUserBorrow(userBorrow);
    }else{
    
    
        userBorrowMapper.updateUserBorrowByIdBorrow(userBorrow.getId(),1);
    }
    UserBorrow userBorrow1 = userBorrowMapper.findUserBorrowByUidAndBid(uid,bid);
    model.addAttribute("book",book);
    model.addAttribute("username",session.getAttribute("username"));
    model.addAttribute("isBorrow",userBorrow1.getIsValid());
    return "book_detail";
}

3.4.2 归还

img

图3-12 书本详情页面

归还代码

@RequestMapping("/return_book")
public String return_book(@RequestParam("id") String id,Model model,HttpSession session){
    
    
    String uid = (String)session.getAttribute("id");
    String bid = id;
    Date returnTime = new Date(System.currentTimeMillis());
    UserBorrow userBorrow = userBorrowMapper.findUserBorrowByUidAndBid(uid,id);
    userBorrowMapper.updateUserBorrowByIdReturn(userBorrow.getId(),0,returnTime);
    UserBorrow userBorrow1 = userBorrowMapper.findUserBorrowByUidAndBid(uid,id);
    System.out.println("return_book:"+userBorrow1.toString());
    Book book = bookMapper.findBookById(id);
    model.addAttribute("book",book);
    model.addAttribute("username",session.getAttribute("username"));
    model.addAttribute("isBorrow",userBorrow1.getIsValid());
    return "book_detail";
}

3.5 用户详情

img

图3-13 用户详情页面

代码

@RequestMapping("/user_profile")
public String user_profile(@RequestParam("id") String id,Model model,HttpSession session){
    
    
    List<Profile> books = bookMapper.findBookListOfUserByUserId(id);
    //     System.out.println("user_profile:book="+books.get(0).toString());
    User temp = userMapper.findUserById((String) session.getAttribute("id"));
    System.out.println("user_profile:user="+temp.toString());
    model.addAttribute("user",temp);
    model.addAttribute("books",books);
    return "user_profile";
}

结论

本设计使用MySQL创建后台数据库,使用Idea IntelliJ工具实现对图书管理系统的功能操作。本图书管理系统实现了图书管理的基本功能,经过调试运行,表明该系统具有可行性和可扩充性。但数据库还有待进一步的完善与规划,操作系统还有待于进一步的改善,使系统更加高效,更加人性化。

通过这次毕业设计,我体会到以下几点:
(1) 通过这次开发过程,使自己有了软件开发的概念。软件开发从用户需求出发,一切工作围绕它展开,首先要满足用户的需要,开发过程中强调理论和实践结合,将以往学习的知识作为软件开发的理论基础,以坚实的基础完成系统开发是必要前提。

(2) 该系统所使用面向对象的集成开发环境,为开发人员提供了交互式的开发方式,编译用户进行书写代码和进行系统的调试。应用程序可以使用窗体和组件的各种工具进行设计。

(3) 在设计中更使我感觉到同学之间的团队合作精神是多么的重要,虽然是自己独立设计但是没有老师和同学的帮助是不可能实现的。

(4) 系统还有不足的地方,它的实行受到系统配置限制和环境变化,还有一些功能的设计考虑的不够全面,会在以后的工作和学习中继续改进,在原有基础上更加完整。

(5) 通过实际操作,使我将以往的所学融会贯通,同时也拓展了我的知识面,培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。

(6) 通过实际编译系统的分析设计、编程调试、掌握软件技术的分析方法和工程设计方法。根据我在课程设计中遇到的问题,我讲在以后的学习当中注意以下几点:
1、认真上好专业课,多在实践中锻炼自己。
2、写程序的过程中要考虑周到,严密。
3、在做设计的时候要有信息,有耐心,切勿浮躁。
4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。
5、在课余时间里多写程序,熟练掌握早调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。

总体来说,由于水平还不高,项目开发经验不足,以及毕业设计时间较短,该系统还有许多不尽如人意的地方,这些都有待进一步改善。通过这次毕业设计,我发现自己的知识还很不够,还不能完全适应市场需求。在今后的学习和工作中,我将努力完善,不断地扩充各方面的知识。通过不断的学习和改进,希望能够进一步提高自己的水平。

参考文献

参考文献示例:

a 专著、会议录、学位论文、报告

[1]刘国钧,陈绍业,王凤翥.图书馆目录[M].北京:高等教育出版社,1957.

[2]辛希孟.信息技术与信息服务国际研讨会论文集:A集[C].北京:中国社会科学出版社,1994.

[3]张筑生.微分半动力系统的不变集[D].北京:北京大学数学系数学研究所,1983.

[4]冯西桥.核反应堆压力管道与压力容器的LBB分析[R].北京:清华大学核能技术设计研究院,1997. b 期刊文章

[5] 金显贺,王昌长,王忠东,等.一种用于在线检测局部放电的数字滤波技术[J].清华大学学报(自然科学版),1993,33(4):62-67. c 专著中的析出文献

[6] 钟文发.非线性规划在可燃毒物配置中的应用[C].赵炜.运筹学的理论与应用——中国运筹学会第五届大会论文集[C].西安:西安电子科技大学出版社,1996:468-471. d 报纸文章

[7] 谢希德.创造学习的新思路[N].人民日报,1998-12-25(10). e 国际、国家标准

[8] GB/T16159-1996,汉语拼音正词法基本规则[S]. f 专利

[9] 姜锡洲.一种温热外敷药制备方案:中国,88105607.3[P].1989-07-26. g 电子文献

[10]王明亮.关于中国学术期刊标准化数据库系统工程的进展[EB/OL].http:// www.Cajcd.edu.cn/pub/wml.txt/980810-2.html,1998-08-16/1998-10-04.

[3]张筑生.微分半动力系统的不变集[D].北京:北京大学数学系数学研究所,1983.

[4]冯西桥.核反应堆压力管道与压力容器的LBB分析[R].北京:清华大学核能技术设计研究院,1997. b 期刊文章

[5] 金显贺,王昌长,王忠东,等.一种用于在线检测局部放电的数字滤波技术[J].清华大学学报(自然科学版),1993,33(4):62-67. c 专著中的析出文献

[6] 钟文发.非线性规划在可燃毒物配置中的应用[C].赵炜.运筹学的理论与应用——中国运筹学会第五届大会论文集[C].西安:西安电子科技大学出版社,1996:468-471. d 报纸文章

[7] 谢希德.创造学习的新思路[N].人民日报,1998-12-25(10). e 国际、国家标准

[8] GB/T16159-1996,汉语拼音正词法基本规则[S]. f 专利

[9] 姜锡洲.一种温热外敷药制备方案:中国,88105607.3[P].1989-07-26. g 电子文献

[10]王明亮.关于中国学术期刊标准化数据库系统工程的进展[EB/OL].http:// www.Cajcd.edu.cn/pub/wml.txt/980810-2.html,1998-08-16/1998-10-04.

[11] 万锦坤.中国大学学报论文文摘(1983-1993).英文版[DB/CD].北京:中国大百科全书出版社,1996.

猜你喜欢

转载自blog.csdn.net/weixin_41405524/article/details/132637558