图书借阅管理系统

图书借阅管理系统

注意本系统为最简单的增删改查,没有解决并发问题,适合于初学SSM的人练手

本系统采用SSM+MySQL+Maven+MySQL+layui+idea实现

一:写思维导图

写思维导图,能初步的认识本项目需要的功能和对项目的认知,无论是小白还是老白写项目时都应该整理好思维导图,这样,能知道自己应该写什么业务,也能思路条例都清晰,每写完一个流程可以做标记,这样,如果忘记写到那个业务了也能从思维导图看出。
在这里插入图片描述
这即为本项目的项目流程思维导图,可看出本项目分为管理员和用户两个系统。之后,即可以两个系统来开始写项目

二: 数据库

数据库为整个项目数据的来源,更是正式写项目时第一个流程,没有数据库,就没有实体类,就没有之后的所有,所以,数据库的存在和规范极为重要:

引用下大佬写的数据库规范:https://blog.csdn.net/zollty/article/details/85165434
重要的为:要遵守数据的设计规范3NF 规定:

  1. 表内的每一个记录都只能被表达一次。
  2. 表内的每一个记录都应该被唯一的标识(有唯一键)。
  3. 表内不应该存储依赖于其他键的非键信息。

本项目使用了五个表,分别是:
管理员 表:

CREATE TABLE `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(12) DEFAULT NULL,
  `password` int(12) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1002 DEFAULT CHARSET=utf8;

书籍信息 表:

CREATE TABLE `book_info` (
  `book_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `author` varchar(20) DEFAULT NULL,
  `publish` varchar(20) DEFAULT NULL,
  `ISBN` varchar(30) DEFAULT NULL,
  `introduction` varchar(255) DEFAULT NULL,
  `language` varchar(5) DEFAULT NULL,
  `price` double(10,2) DEFAULT NULL,    #价格
  `pubdate` varchar(20) DEFAULT NULL,
  `cid` int(10) DEFAULT NULL,
  `stock` int(11) DEFAULT NULL,
  PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1007 DEFAULT CHARSET=utf8;

书籍类别表:

CREATE TABLE `class_info` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `cname` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

借阅信息表:

CREATE TABLE `lend_list` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `reader_id` int(12) DEFAULT NULL,
  `book_id` int(12) DEFAULT NULL,
  `lend_date` varchar(20) DEFAULT NULL,
  `back_date` varchar(20) DEFAULT NULL,
  `fine` double(10,2) DEFAULT NULL,
  `state` varchar(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

读者用户 表:

CREATE TABLE `reader_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `reader_id` int(11) NOT NULL,
  `name` varchar(12) NOT NULL,
  `password` int(12) NOT NULL,
  `sex` varchar(5) DEFAULT NULL,
  `birthday` varchar(20) DEFAULT NULL,
  `address` varchar(100) DEFAULT NULL,
  `telephone` varchar(11) DEFAULT NULL,
  `card_state` int(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

三:具体代码实现and静态资源

见我写的gitee地址:https://gitee.com/CYS1847527897/ssmBuild

四:本项目所写的错误and经验

第一个思想问题:mvc里管理员和普通用户登录判断 : 直接采用用户名密码登录?? 通过下拉框选择管理员或者用户?
解决办法:根据下拉框的值来判断是管理员还是读者
第二个代码问题:前端页面报404: 想法:会不会因为在前端页面在web-inf里,介于上周显示出来了,这周突然显示不出,排除
但是为什么在这项目里出不来,在另一个空项目里前端页面放在web-inf外,空项目能出来,疑问
问题解决:将jsp页面放在web-inf外,解决! 为什么?
第三个前端页面问题:视图解析器跳转不到页面,没有拼接路径:为了测试是否因为不在web-inf的原因,将jsp再次放入web-inf,
结果还是没有跳转过去,页面也点不出来了,23333… 不是这个原因
找到解决思路:配置文件或web.xml写错了,框架搭错
第四个Tomcat启动报错问题:解决 :多打了个war包,重新打war包
第五个Tomcat启动报错问题:[2020-08-05 07:03:22,224] Artifact SSMMyLibrary:war exploded: Error during artifact deployment. See server log for details.
解决 :重新注入配置文件 解决:大哥帮忙写配置文件
第六个问题:Error:(3, 20) java: 程序包com.sms.pojo不存在
思路: ps:一分钟前运行到页面了,配置文件删了重新copy了,可能是配置文件的问题,也可以是maven的问题
解决:maven刷新,idea重启
第七个问题:前端提示中文乱码问题: 好像本来后台传到前端的时候就乱码了,大哥传字符串能传过去不乱码
解决:layui书籍传到前端需要官网的转义
第八个问题: No converter found for return value of type: class com.sms.util.SuccessUtil
SuccessUtil类不能作为mvc返回类型,需转为jackson类型
解决:导入jackson三个jar包
第九个问题: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/exc/InvalidDefinitionException
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1318)
问题出现:导入jackson三个jar包后,页面不出来,直接报500
重复第八个问题:org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException Resolved [org.springframework.http.converter.
HttpMessageNotWritableException: No converter found for return value of type: class com.sms.util.SuccessUtil]
思路:可能jackson版本和spring版本不匹配 将spring版本降低 原来:5.2.8 降为:4.1.9.RELEASE
问题解决:spring版本和jackson版本不匹配
第十个错误:class com.github.pagehelper.PageHelper cannot be cast to class org.apache.ibatis.plugin.Interceptor
问题解决:pageHelper版本过高,接口名字已修改,将配置文件修改成: com.github.pagehelper.PageInterceptor
第十一个问题:Caused by: java.lang.ClassNotFoundException: mysql
问题解决: pageHelper版本过高,已经可以自动匹配数据库类型,不需要指定数据库,把配置文件 <property name="dialect" value="mysql"/> 删掉即可
第十二个问题:Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 5
由错误提示可知,查询的结果是期望一条记录或者为空,但是返回的结果有5条,也就是说你的sql查询结果返回多条了
解决办法
(1)检查Mybatis配置文件中返回的结果类型与Java中返回类型是否一致
(2)检查传递参数的个数
(3)检查数据库数据是否正确
(4)检查映射SQL中返回resultType 或resultMap,接口里的返回类型
(5)select语句加上limit 1 …
第十三个问题:后端传参数给前端layui框架数据列表乱码 解决:SpringMvc json传到前端layui需要转换为官网要求
第十四个问题:前端页面突然没有页面效果: 解决:清理浏览器缓存
第十五个问题:前端id出不来:“数据库字段和java变量名有一个默认的映射规则”,
“name_id 对应 nameId” “对不上就无法赋值”
“因为是用的反射机制实现的赋值”
第十六个问题: java.lang.NumberFormatException: null
解决:前端book_id 改为bookId
第十七个问题:用户的头像出不来 : 有时出的来,有时出不来 :解决:用户头文件和管理员头文件分开
第十八个问题:模糊查询一直出不来 :解决:map.put里面的键 需要和 sql语句里面的 条件 对应
第十九个问题:前端有东西乱码(分页,自带的提示框)
第二十个问题:借阅管理前端和后端交互 :解决:见第十六个问题方法
第二十一个思想问题:查询时:如果默认查询全部的话,那模糊查询不知道插在哪里,如果直接模糊查询,默认为空,
那分页不知道怎么添加
解决:直接用模糊查询,分页参数和条件参数全放在map里

学会的新经验:1、将经常在不同类里但值一样的变量放在工具类里设为静态常量,减少引用,
要用的时候直接调用,session.setAttribute键直接调用,不打用引号,“你要是把他打引号了,怎么可能用这个类调用他的”,
“他是个静态的常量。直接可以用类名点儿调用。”
2、mapper.xml里resultMap column是数据库字段 property是实体类属性,为了让两个对应
“resultmap最主要作用是结果集,自定义想要返回的结果”
3.@ResponseBody:它就不会走视图解析器,会直接返回个字一符串
4.判断页面跳转用前端下拉框判断,0为管理员,走管理员页面 1为读者,走读者页面 跳转走前端ajax判断跳转
5.ssm 控制层就像一个大拼图,拼图是缺角补角,总会有两个拼图的缺口和角能拼在一起,我们需要做的,就是写拼图,并且把拼图全部拼好成为一个完整的大拼图
6.整合ssm:“最简单的就是一个spring的一个springmvc的就可以了”,“mybatis的其实不用也可以’”,
“spring的就配置个数据源,mybatis工厂,包扫描代理,事务管理器”,
“springmvc就配置下静态资源映射,注解驱动,视图解析器就差不多了”,
“web.xml的配置顺序是上下文参数-监听器-过滤器-servlet”
7.关于mvc接收前端值:“为什么我在这里写access就能得到前端的access参数呢?如果前端和后端参数名一样,他不会冲突吗?”
“你这个问题,他们是通过name匹配的,匹配到就自动给你注入进去了 ,我之前写过一遍博客,介绍属性注入的实例。”
“http://xieahui.com/2018/05/17/%E6%8A%80%E6%9C%AF/spring%E4%B8%AD%E8%87%AA%E5%8A%A8%E6%B3%A8%E5%85%A5%E5%89%8D%E7%AB%AF%E4%BC%A0%E9%80%92%E7%9A%84%E5%90%84%E7%A7%8D%E7%B1%BB%E5%9E%8B%E7%9A%84%E6%95%B0%E6%8D%AElist-map-bean-array/”
8.为什么要在接口上就throws:“老子没有犯过的错,儿子也不能犯了! 如果儿子犯错了,自己偷偷的处理(try…catch),不要让老子知道(throws)!!”
9.pageHelper的使用
10.idea类列表分行 (见有道云笔记)
11.逆向工程 Generator 12:关于业务逻辑层和控制层:业务逻辑层写好判断,写好逻辑后,控制层直接调用就会返回所要的数据了,而不是在控制层写逻辑判断
13:翻译插件:Translation 14:查看sql语句:Mybatis Log Plugin (需要加log4j)
15:SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
//Date转换为String
lendInfo.setLend_date(sdf.format(date)); 16:Calendar 类 :得到时间,设置时间,计算时间 17:sql: 计算从哪一条数据开始取

  • 14
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
2.2 主要功能说明: 一.欢迎界面:改界面主要是作为本系统的封面,程序运行后该界面会出 现在屏幕中间,操作者可以点击该界面即可计入下一个窗体。 二.入口:本系统中权限的设置主要是靠入口,选择不同的登录身份进入 系统后将会得到不一样的执行权限。若选择退出系统,则将会退出整个软件。 三. 读者登陆界面:该窗体主要是给一般读者登陆系统执行图书的查询和借阅功能的,当读者输入的编号和密码正确后即可进入系统,当用户输入用户名和密码出现错误后,系统会提示用户重新输入。当用户三次输入均出现错误时,系统会自动关闭。 四.管理员登陆界面:该窗体主要是提供给系统管理员进入系统进行操作的,其中用法和读者登陆界面一样,不同的是进入系统后具有的操作权限不同。管理员具有全部权限。 五.图书管理:(1)图书信息录入界面:此界面主要用于首次录入图书信 息,因此该界面应该具有输入图书所有信息的元素, 如图书编号,书名,书号,作者…. (2)图书信息修改界面:此界面主要是用于已经存在馆里的图书的信息的修改,因此该界面应该有查找和修改的功能,所以除了具有图书信息录入界面的元素外,还应该有上一条,下一条,查询等元素。 六.读者管理:(1)读者注册界面:此界面主要是用于录入新读者的信息, 因此此界面应该具有读者的所有信息,另外应该还具 有赋予读者一个进入系统的密码的元素。 (2)读者信息修改:此界面主要用于对已经注册过本系统 的读者的信息的修改,包括密码等等元素。 七.图书服务:(1)图书查询界面:此界面主要是用于查询,借阅,预 约图书,查询时可按图书的书名,作者,出版社来 查询,查询到的图书用表格显示,并且可以显示图书借阅情况。 (2)借书还书界面:该界面主要是用于读者的借书和还 书的情况,并且读者可以归还图书。 八.数据安全:(1)数据备份界面:该界面主要用于对本系统的重要数 据进行备份,以便不小心失去数据后可以恢复数据 提高系统的安全性。 (2)数据恢复界面:该界面是和数据备份界面配合使用的,当需要恢复已经备份的数据时,即可使用该窗体。 九.系统管理:(1)帮助和相关界面:该界面主要是向使用本系统的读者或者管理员提供相应的提示和帮助,同时显示一些关于本系统的相关信息。 (2)密码设置界面:该界面主要是用于管理员的注册和密码修改,注册界面可以注册新的管理员,密码修改界面可以对已经存在的管理员的信息的修改。 (3)退出本系统界面:该界面主要是用来安全退出整个软件,包括退出了vfp软件 (4)恢复vfp系统界面:该界面主要是用来退出当前运行的图书管理系统,恢复到vfp系统继续进行操作。
该代码文件用于本科生计算机科学与技术专业数据库课程设计,图书借阅管理子系统,数据库用户名sa,密码gsw,数据库名名称BookManageSystem,这些都可以在DButil.java文件中修改。功能有学生账号注册登录借书还书,罚款计算,同时设有管理员,账号固定在login.Java代码中为administrator,密码password,可自行在代码中修改,管理员可查询图书情况,学生账户情况,修改图书信息等等功能,内容十分简单,十分适合大二大三本科生参考 设计本系统模拟学生在图书借阅图书的管理内容,包括查询图书、借书、借阅后的查询、统计、超期罚款等的处理情况,简化的系统需要管理的情况如下: 1、可随时查询出可借阅图书的详细情况,如图书编号(BNO)、图书名称(BNA)、出版日期(BDA)、图书出版社(BPU)、图书存放位置(BPL)、图书总数量(BNU)等,这样便于学生选借。 2、学生查询图书情况后即可借阅所需图书,可借阅多种图书,每种图书一般只借一本,若已有图书超期请交清罚金后,才能开始本次借阅; 3、为了唯一标识每一学生,图书室办借书证需如下信息:学生姓名(SNA)、学生系别(SDE)、学生所学专业(SSP)、借书上限数(SUP)及唯一的借书证号(SNO)。 4、每学生一次可借多本书,但不能超出该生允许借阅上限数,每个学生可多次借阅,允许重复借阅同一本书。规定借书期限为二个月,超期每天罚二分。 5、学生可以进行借阅、续借、归还和查询书籍。借阅时要登记相应的借书日期;归还时要记录还书日期;续借相当于归还书后重新借阅。 根据以上信息完成如下要求: 1、请认真作系统需求分析,设计出反映本系统的E-R图(需求分析、概念设计)。 2、写出已设计E-R图相应的关系模式,根据设计需要还可增加辅助关系模式,并找出各关系模式的关键字(逻辑设计)。 3、在已设计的关系模式基础上开发设计功能子系统,要求子系统能完成如下功能要求(物理设计、设施与试运行): 1)在某数据库管理系统中建立各关系模式对应的库表,并设计所需的视图、索引等。 2)能对各库表进行输入、修改、删除、添加、查询、打印等基本操作。 3)能根据学生要求借阅图书库中有的书,并完成一次借阅任务后汇总已借书本总数,报告还可借书量,已超期的需付清罚款金额后才可借书。 4)能明细查询某学生的借书情况及图书的借出情况。 5)能统计出某图书的总借出数量与库存量及某学生借书总数,当天为止总罚金。 6)其他你认为子系统应有的查询、统计功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值