6

JavaWeb图书管理系统,老程序员花一天一夜回忆学生时代!

 3 years ago
source link: https://blog.csdn.net/dkm123456/article/details/117536930
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Java图书管理系统,老程序员花了一天一夜

系统界面图一张在这里插入图片描述

前几天群里的小伙伴说想搞个web图书管理系统(用Java最基础的语法:jsp+servlet ),于是就有人说谁还搞那个东西,都过时了的东西,我就想说一句:甭管过不过时,很多基础的东西,对于很多同学和Java基础不是很好的小伙伴来说,用来学习一波是最合适的,是真的香,于是我连夜写了这个小管理系统,我就玩!

难度系数(易入)

因为才有比较基础的语法,对Java初学者、基础不是太好的小伙伴来说,也是比较容易上手的
后端:
1.使用Java Servlet 本身就是Java语法,无缝链接,也无效更种配置,web.xml轻松配置一次既可。
2.采用C3P0连接数据库,配置文件、代码、jar包,均已就位,无需二次操作。
3.代码采用Service、Dao分层逻辑,清晰实用,代码简单易懂。
前端:
1.Jsp也是Java语法,无需学习新东西,直接写Java代码。
2.HTML仅仅只需最简单的常用标签的语法,小白也能轻松明白。
3.css只是一点点页面的样式,很容易。
4.JavaScript需要了解基本的语法,学web必备。
5.Jquery是JavaScript的插件库,这里仅仅是用来与后台交互,仅仅会使用 $.post 与后台交互即可。

最重要的,就是通过比较简单、基础的语法,让你了解用Java怎么开发一个web系统,完整的了解整个开发流程,进而提升学习的信心和增加成就感。

仅仅是我个人的喜欢用,也可以自己选自己喜欢的
开发工具:eclipse/myEclipse
数据库:mysql
web容器:tomcat
jdk版本:1.6

在这里插入图片描述

1.超级管理员
权限:超级管理员是权限最大的角色,有系统所有的权限。
在这里插入图片描述
2.系统管理员
权限:教师/学生管理、分类管理、图书管理、借阅信息管理、密码管理、登陆模块。
在这里插入图片描述
3.教师 / 学生
权限:权限最小的角色,仅有修改密码、注册登陆登出系统、查询图书信息、查询自己的借阅信息。
在这里插入图片描述

表结构介绍

用户表

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment COMMENT '主键',
  `no` varchar(20) default NULL COMMENT '账号-学生一般用学号',
  `name` varchar(100) not NULL COMMENT '名字',
  `password` varchar(20) not NULL COMMENT '密码',
  `sex` varchar(20) default NULL COMMENT '性别',
  `phone` varchar(20) default NULL COMMENT '电话',
  `role_id` int(11) default NULL COMMENT '角色 0超级管理员,1管理员,2老师,3学生',
  `isValid` varchar(4) default 'Y' COMMENT '是否有效,Y有效,其他无效',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

默认插入超级管理员数据

INSERT INTO `user` VALUES ('1', 'sa', '超级管理', '321', '1', '111', '0', 'Y');

菜单表

CREATE TABLE `menu` (
  `id` int(11) NOT NULL,
  `menuCode` varchar(8) default NULL COMMENT '菜单编码',
  `menuName` varchar(16) default NULL COMMENT '菜单名字',
  `menuLevel` varchar(2) default NULL COMMENT '菜单级别',
  `menuParentCode` varchar(8) default NULL COMMENT '菜单的父code',
  `menuClick` varchar(16) default NULL COMMENT '点击触发的函数',
  `menuRight` varchar(8) default NULL COMMENT '权限3表示学生,2表示老师,1表示管理员,0超级管理员,可以用逗号组合使用',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

默认插入的数据(建议一行行的插入,反正我的mysql一条条的弄,不然后面的中文会乱码)

NSERT INTO `menu` VALUES ('1', '001', '管理员管理', '1', null, 'adminManage', '0');
INSERT INTO `menu` VALUES ('2', '002', '教师/学生管理', '1', null, 'userManage', '0,1');
INSERT INTO `menu` VALUES ('3', '003', '分类管理', '1', null, 'categoryManage', '0,1');
INSERT INTO `menu` VALUES ('4', '004', '图书管理', '1', null, 'booksManage', '0,1,2,3');
INSERT INTO `menu` VALUES ('5', '005', '借阅信息管理', '1', null, 'recordManage', '0,1,2,3');
INSERT INTO `menu` VALUES ('6', '006', '修改密码', '1', null, 'modPwd', '0,1,2,3');
INSERT INTO `menu` VALUES ('7', '007', '退出系统', '1', null, 'logout', '0,1,2,3');

分类信息表

CREATE TABLE `category` (
  `id` int(11) NOT NULL auto_increment COMMENT '主键',
  `name` varchar(100) not NULL COMMENT '分类名',
  `remark` varchar(1000) default NULL COMMENT '备注',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

图书表

CREATE TABLE `books` (
  `id` int(11) NOT NULL auto_increment COMMENT '主键',
  `name` varchar(100) not NULL COMMENT '书名',
  `category` int(11) not NULL COMMENT '分类',
  `count` int(11) default NULL COMMENT '数量',
  `curCount` int(11) default NULL COMMENT '现存数量',
  `remark` varchar(1000) default NULL COMMENT '备注',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

借阅信息表

CREATE TABLE `record` (
  `id` int(11) NOT NULL auto_increment COMMENT '主键',
  `book` int(11) not NULL COMMENT '书id',
  `userId` int(11) not NULL COMMENT '借阅人',
   `start_date` date default NULL COMMENT '开始日期',
   `end_date` date default NULL COMMENT '结束日期',
   `return_date` date default NULL COMMENT '归还日期',   
  `state` int(1) not NULL COMMENT '状态:1 借阅  2 归还 3 续借',
  `admin_id` int(11) default NULL COMMENT '操作人id',
  `remark` varchar(1000) default NULL COMMENT '备注',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

系统模块介绍

系统管理员管理

超级管理员才有的权限,可以增加、修改、删除系统管理员。
在这里插入图片描述
在这里插入图片描述

教师/学生管理

管理员和超管都可以操作,新增、修改、删除等操作。
1.管理员和超管新增的默认是激活状态。
2.教师和学生注册申请过来的,需要管理员激活(也就是账号审核功能)。
在这里插入图片描述
在这里插入图片描述

管理员和超管都可以操作,新增、修改、删除等操作。
在这里插入图片描述

管理员和超管都可以操作,新增、修改、删除、借阅等操作。
学生/教师 仅仅有查看图书功能
在这里插入图片描述
借阅操作是在此界面进行操作的,选择书本后进行借阅操作
1.借阅人需要选择
2.数量现在默认是1
3.需选择归还日期
在这里插入图片描述
选择借阅人界面
在这里插入图片描述

借阅信息管理

管理员和超管都可以操作,归还、续借等操作。
学生/教师 仅仅只能查看自己的借阅信息
在这里插入图片描述
续借和归还也只能由管理员来操作

在这里插入图片描述

在这里插入图片描述

java文件
在这里插入图片描述
页面
在这里插入图片描述
后端分层
在这里插入图片描述

借阅信息查询

public Map queryByPage(RecordVO vo, int start, int pageSize)
{
   String status="-1";
   String content="";
   Map retMap = new HashMap();
   try
   {
      String sqlStrCount = "select count(1) from  Record a,books b,user c where 1=1 and a.book=b.id and c.id=a.userId ";
      String sqlStr = "select a.*,b.name bookName,c.name userName," +
             " (select name from user c where c.id=a.admin_id) admin_name from  Record a,books b,user c where 1=1 and a.book=b.id and c.id=a.userId ";
      
      String bookName = vo.getBookName();
      
      if(!"".equals(bookName)){
         sqlStrCount +=" and b.name like'%"+bookName+"%'";
         sqlStr +=" and b.name like'%"+bookName+"%'";
      }
      
      String userName = vo.getUserName();
      if(!"".equals(userName)){
         sqlStrCount +=" and c.name like'%"+userName+"%'";
         sqlStr +=" and c.name like'%"+userName+"%'";
      }
      
      Timestamp date =vo.getStart_date();
      if(date!=null){
         sqlStrCount +=" and a.start_date='"+date+"'";
         sqlStr +=" and a.start_date='"+date+"'";
      }
      
      String userId = StringHelper.convertStringNull(vo.getUserId());
      if(!"".equals(userId)){
         sqlStrCount +=" and a.userid='"+userId+"'";
         sqlStr +=" and a.userid='"+userId+"'";
      }
 
      sqlStr +="order by a.id limit "+start+", "+pageSize ;
      
      ps = this.getWrappedConnection().prepareStatement(sqlStrCount);
      rs = ps.executeQuery();
      int totalCount=0;
      if (rs.next())
      {
         totalCount = rs.getInt(1);
      }
      retMap.put("totalCount", String.valueOf(totalCount));
      rs=null;
      
      ps = this.getWrappedConnection().prepareStatement(sqlStr);
      rs = ps.executeQuery();
      
      List list = new ArrayList();
      RecordVO recordVO = null;
      while (rs.next())
      {
         recordVO =  new RecordVO();
         recordVO.setId(rs.getString("id"));
         recordVO.setBook(rs.getString("book"));
         recordVO.setBookName(rs.getString("bookName"));
         recordVO.setUserId(rs.getString("userId"));
         recordVO.setUserName(rs.getString("userName"));
         recordVO.setStart_date(rs.getTimestamp("start_date"));
         recordVO.setEnd_date(rs.getTimestamp("end_date"));
         recordVO.setReturn_date(rs.getTimestamp("return_date"));
         recordVO.setState(rs.getString("state"));
         recordVO.setAdmin_id(rs.getString("admin_id"));
         recordVO.setAdmin_name(rs.getString("admin_name"));
         recordVO.setRemark(rs.getString("remark"));
         
         list.add(recordVO);
      }
      retMap.put("list", list);
      status="1";
   }
   catch (Exception e)
   {
      e.printStackTrace();
   }finally{
      try
      {
         this.cleanUp();
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
   }
   
   
   retMap.put("status", status);
   retMap.put("content", content);
   return retMap; 
}

借阅记录添加

public Map add(RecordVO recordVO)
{
   String status="-1";
   String content="";
   String id="";
   Map retMap = new HashMap();
   try
   {
      String sqlStr = "insert into Record(book,userId,start_date,end_date,state,admin_id,remark) values (?,?,?,?,?,?,?)";
      ps = this.getWrappedConnection().prepareStatement(sqlStr,Statement.RETURN_GENERATED_KEYS);
      ps.setString(1, recordVO.getBook());
      ps.setString(2, recordVO.getUserId());
      ps.setTimestamp(3, recordVO.getStart_date());
      ps.setTimestamp(4, recordVO.getEnd_date());
      ps.setString(5, recordVO.getState());
      ps.setString(6, recordVO.getAdmin_id());
      ps.setString(7, recordVO.getRemark());
      int state = ps.executeUpdate();
      
      ResultSet generatedKeys = ps.getGeneratedKeys();
      if (generatedKeys.next()) {
         id=String.valueOf(generatedKeys.getInt(1));//主键
      }
      
      if(state>0){
         status="1";
      }
   }
   catch (Exception e)
   {
      e.printStackTrace();
   }finally{
      try
      {
         this.cleanUp();
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
   }
   retMap.put("status", status);
   retMap.put("content", content);
   retMap.put("id", id);
   return retMap; 
}

因为有之前类似系统的积累,所以编码效率比较高吧,这也是老程序员的能力,有代码参考 CV 的很快,哈哈!也希望能够给朋友们带来些许帮助!
注意点
1.样式比较简单,可能不太好看,因为没有去花精力做样式。
2.表设计可能不是特别完善、功能也比较简单,离校太久有点想不起来了。
3.难免会有些bug吧,不过也不是上线用的,参考学习的话我觉得是足够了。
4.代码里面会放个部署文档,小伙伴们可以试试怎么部署。

**看到这里的大佬,动动发财的小手 点赞 + 回复 + 收藏,能【 关注 】一波就更好了。

想要代码的 加微信 或 私聊 我!

为了帮助更多小白从零进阶 Java 工程师,从CSDN官方那边搞来了一套 《Java 工程师学习成长知识图谱》,尺寸 870mm x 560mm,展开后有一张办公桌大小,也可以折叠成一本书的尺寸,原件129元现价 29 元,先到先得,有兴趣的小伙伴可以了解一下!
在这里插入图片描述

★ 更多精彩

♥ Java 连连看 ♥

♥ Java飞机大战 ♥

♥ Java植物大战僵尸 ♥

♥ Java坦克大战,回忆童年!♥

♥ Java扫雷小游戏,以前上学经常玩 ♥

♥ Java学生宿舍管理系统 ♥

♥ Java实验室预约管理系统 ♥

♥ Java学生成绩管理系统 ♥


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK