博主介绍:全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战 ⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到

千套JAVA实战项目持续更新中~

上百套小程序实战项目持续更新中~

上百套Python实战项目持续更新中 有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我

❤️文末获取源码联系❤️        ⚠️一定要先收藏⚠️

第4章 系统设计

用户对着浏览器操作,肯定会出现某些不可预料的问题,但是不代表着系统对于用户在浏览器上的操作不进行处理,所以说,要提前考虑可能会出现的问题。

4.1 系统设计思想

系统设计,肯定要把设计的思想进行统一,只有统一的思想才能指导程序的开发,并且可以让众多的程序开发人员更快速的进入状态,提高开发速度。根据当前系统的既定需求,下面将进行本系统设计思想的阐述。

(1)扩展性:开发任何一个系统的时候不可避免要考虑这个问题。软件版本的更迭是一种常识,任何一个软件都不会一次性开发就成永恒,软件是一个不断成长的东西。所以考虑问题的时候需要对当前问题进行数据上的扩大化,然后进行归纳整理,最终形成具有一定扩展性的程序。程序的可扩展性必然会影响开发进度,所以最终需要综合评估程序的可扩展程度,进而有的放矢,循序开发。

(2)实用性:程序设计是一个先高屋建瓴式的设想,然后再具体化,实用性就是具体化的第一个步骤,要充分考虑使用者是不懂程序设计的这一点,使用者只是懂得常规性的上网操作步骤,并不需要对程序进行理解,所以一定要让使用者感觉到便利,感觉到实用性的存在,如果使用者使用程序过程中没发现使用程序的好处,那么程序设计的实用性将大大降低。

(3)安全性:当使用者使用的过程中,会产生大量的相关数据,这些数据必须有安全性的保证,否则当使用者发现数据出现问题的原因是程序设计问题的时候,将会对程序开发者失去信任,甚至可能会产生大量的费用赔偿问题,这是一个不可避免的问题。所以安全性关系开发与使用者双方的经济利益,程序的安全性是一定要保证的。

(4)先进性:程序设计的先进性是开发者进行考虑的,必须要在满足系统功能的前提下,必须要选择好当下最合适的技术。最合适的技术要从开发成本,使用成本以及维护成本里面综合分析,经过综合分析后要让技术实现最优解,保持先进的技术生产力。

(5)维护性:程序开发之初就要考虑以后的维护问题。维护是在程序开发完毕,已经上线可以运作,进入生产试用过程和使用过程中才会发现需要维护的必要。要通过各方面降低维护成本,不是说维护的越少就代表程序开发的越完美,程序既然是人类进行设计制造的,肯定有很多不可避免的问题产生,那么如何维护好程序的正常运作也是一门很重要的学问。

4.2 功能结构设计

图4.1即为设计的管理员功能结构,管理员权限操作的功能包括管理公告,管理图书馆管理系统信息,包括图书管理,图书归还,图书借阅管理,公告等,可以管理阅览室预约。

图4.1 管理员功能结构

4.3 数据库设计

图书馆管理系统管理系统运行中产生的数据需要按照提前设置的存储规则进行保存,设计出一个符合项目的最优数据存储格式,因为它能减少用户的等待时间,还可以对系统的请求在最短时间内进行响应。所以,对数据库设计时,需要对功能需求进行详细的拆分,以及对业务状态的细分,然后设计具体的存储规则,保证数据库能正常运作,缩短数据处理时间,并在一定程度上降低数据冗余,节省存储空间。

4.3.1 数据库概念设计

实体-联系图还有一个名称即E-R图,是Entity Relationship Diagram各英文单词首字母的缩写,它这种概念模型通常用于对现实世界进行描述。同时它还是一种能够直观表达数据中实体,联系,属性的有效手段。绘制E-R图能够选择的工具也有很多,但是Office Visio 这款软件在E-R图的绘制上一般都是作为首选工具,因为它是基于可视化处理,使用它创建E-R图非常简单。使用基本的E-R图构成元素,比如椭圆,菱形,矩形,还有实线段来表达对应的信息,椭圆代表属性,即实体的特征,矩形代表实体,即数据库中的一个具体数据表,菱形代表实体中相互关系,实线段主要是完成椭圆,矩形,菱形的连接。

4.3.2 数据库物理设计

本小节主要任务即是根据上述内容进行数据存储结构的设计,实体的属性就用来表示字段名称,不同的字段表示的数据类型以及取值都不相同,以及该表各个字段是否能够保持空等进行说明,设计完成一张数据表的结构之后,在保存时同样要命名,尽量选择英文名称进行命名并保存,还不容易导致系统出错。接下来就对设计的表进行简单说明。

表4.1字典表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 dic_code String 字段 是 3 dic_name String 字段名 是 4 code_index Integer 编码 是 5 index_name String 编码名字 是 6 super_id Integer 父字段id 是 7 beizhu String 备注 是 8 create_time Date 创建时间 是

表4.2公告表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 gonggao_name String 公告名称 是 3 gonggao_photo String 公告图片 是 4 gonggao_types Integer 公告类型 是 5 insert_time Date 公告发布时间 是 6 gonggao_content String 公告详情 是 7 create_time Date 创建时间 是

表4.3资讯表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 news_name String 资讯名称 是 3 news_photo String 资讯图片 是 4 news_types Integer 资讯类型 是 5 insert_time Date 资讯发布时间 是 6 news_content String 资讯详情 是 7 create_time Date 创建时间 是

表4.4图书表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 tushu_name String 图书名称 是 3 tushu_uuid_number String 图书编号 是 4 tushu_photo String 图书照片 是 5 tushu_zuozhe String 图书作者 是 6 tushu_types Integer 图书类型 是 7 tushu_content String 图书介绍 是 8 chuban_time Date 出版时间 是 9 tushu_delete Integer 逻辑删除 是 10 insert_time Date 录入时间 是 11 create_time Date 创建时间 是

表4.5图书评论表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 tushu_id Integer 图书 是 3 yonghu_id Integer 用户 是 4 tushu_liuyan_text String 评论内容 是 5 insert_time Date 评论时间 是 6 reply_text String 回复内容 是 7 update_time Date 回复时间 是 8 create_time Date 创建时间 是

表4.6图书借阅表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 tushu_id Integer 图书 是 3 yonghu_id Integer 用户 是 4 tushu_order_types Integer 借阅类型 是 5 insert_time Date 订单创建时间 是 6 create_time Date 创建时间 是

表4.7图书归还申请表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 tushu_id Integer 图书 是 3 yonghu_id Integer 用户 是 4 tushu_yuyue_text String 理由 是 5 tushu_yuyue_yesno_types Integer 报名状态 是 6 tushu_yuyue_yesno_text String 审核回复 是 7 tushu_yuyue_shenhe_time Date 审核时间 是 8 insert_time Date 活动报名时间 是 9 create_time Date 创建时间 是

表4.8用户表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 yonghu_name String 用户姓名 是 3 yonghu_phone String 用户手机号 是 4 yonghu_id_number String 用户身份证号 是 5 yonghu_photo String 用户头像 是 6 yonghu_email String 电子邮箱 是 7 create_time Date 创建时间 是

表4.9阅览室表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 yuelanshi_name String 阅览室名称 是 3 yuelanshi_photo String 阅览室照片 是 4 yuelanshi_types Integer 阅览室类型 是 5 section_number Integer 房间 是 6 zuowei_number Integer 座位 是 7 yuelanshi_delete Integer 逻辑删除 是 8 yuelanshi_content String 阅览室简介 是 9 create_time Date 创建时间 是

表4.10阅览室座位预约表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 yuelanshi_order_uuid_number String 订单号 是 3 yuelanshi_id Integer 阅览室 是 4 yonghu_id Integer 用户 是 5 yuelanshi_order_true_price BigDecimal 实付价格 是 6 yuelanshi_order_types Integer 订单类型 是 7 buy_section_number Integer 房间 是 8 buy_zuowei_number String 预约的座位 是 9 buy_yuelanshi_time Date 订购日期 是 10 insert_time Date 订单创建时间 是 11 create_time Date 创建时间 是

表4.11管理员表

序号 列名 数据类型 说明 允许空 1 Id Int id 否 2 username String 儿童名 是 3 password String 密码 是 4 role String 角色 是 5 addtime Date 新增时间 是

第5章 系统实现

编程人员在搭建的开发环境中,会让各种编程技术一起呈现出最终效果。本节就展示关键部分的页面效果。

5.1 管理员功能实现

5.1.1 图书管理

图5.1 即为编码实现的图书管理界面,管理员在图书管理界面中可以对界面中显示,可以对图书信息的图书状态进行查看,可以添加新的图书信息等。

图5.1 图书管理界面

5.1.2 图书借阅管理

图5.2 即为编码实现的图书借阅管理界面,管理员在图书借阅管理界面中查看奖罚种类信息,奖罚描述信息,可以导出图书借阅信息,新增图书借阅信息等。

图5.2 图书借阅管理界面

5.1.3 阅览室预约管理

图5.3 即为编码实现的阅览室预约管理界面,管理员在阅览室预约管理界面中新增阅览室预约,可以删除阅览室预约。

图5.3 阅览室预约管理界面

代码实现

package com.controller;

import java.util.Arrays;

import java.util.Calendar;

import java.util.Date;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;

import com.baomidou.mybatisplus.mapper.EntityWrapper;

import com.entity.TokenEntity;

import com.entity.UserEntity;

import com.service.TokenService;

import com.service.UserService;

import com.utils.CommonUtil;

import com.utils.MD5Util;

import com.utils.MPUtil;

import com.utils.PageUtils;

import com.utils.R;

import com.utils.ValidatorUtils;

/**

* 登录相关

*/

@RequestMapping("users")

@RestController

public class UserController{

@Autowired

private UserService userService;

@Autowired

private TokenService tokenService;

/**

* 登录

*/

@IgnoreAuth

@PostMapping(value = "/login")

public R login(String username, String password, String captcha, HttpServletRequest request) {

UserEntity user = userService.selectOne(new EntityWrapper().eq("username", username));

if(user==null || !user.getPassword().equals(password)) {

return R.error("账号或密码不正确");

}

String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());

return R.ok().put("token", token);

}

/**

* 注册

*/

@IgnoreAuth

@PostMapping(value = "/register")

public R register(@RequestBody UserEntity user){

// ValidatorUtils.validateEntity(user);

if(userService.selectOne(new EntityWrapper().eq("username", user.getUsername())) !=null) {

return R.error("用户已存在");

}

userService.insert(user);

return R.ok();

}

/**

* 退出

*/

@GetMapping(value = "logout")

public R logout(HttpServletRequest request) {

request.getSession().invalidate();

return R.ok("退出成功");

}

/**

* 密码重置

*/

@IgnoreAuth

@RequestMapping(value = "/resetPass")

public R resetPass(String username, HttpServletRequest request){

UserEntity user = userService.selectOne(new EntityWrapper().eq("username", username));

if(user==null) {

return R.error("账号不存在");

}

user.setPassword("123456");

userService.update(user,null);

return R.ok("密码已重置为:123456");

}

/**

* 列表

*/

@RequestMapping("/page")

public R page(@RequestParam Map params,UserEntity user){

EntityWrapper ew = new EntityWrapper();

PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));

return R.ok().put("data", page);

}

/**

* 列表

*/

@RequestMapping("/list")

public R list( UserEntity user){

EntityWrapper ew = new EntityWrapper();

ew.allEq(MPUtil.allEQMapPre( user, "user"));

return R.ok().put("data", userService.selectListView(ew));

}

/**

* 信息

*/

@RequestMapping("/info/{id}")

public R info(@PathVariable("id") String id){

UserEntity user = userService.selectById(id);

return R.ok().put("data", user);

}

/**

* 获取用户的session用户信息

*/

@RequestMapping("/session")

public R getCurrUser(HttpServletRequest request){

Long id = (Long)request.getSession().getAttribute("userId");

UserEntity user = userService.selectById(id);

return R.ok().put("data", user);

}

/**

* 保存

*/

@PostMapping("/save")

public R save(@RequestBody UserEntity user){

// ValidatorUtils.validateEntity(user);

if(userService.selectOne(new EntityWrapper().eq("username", user.getUsername())) !=null) {

return R.error("用户已存在");

}

userService.insert(user);

return R.ok();

}

/**

* 修改

*/

@RequestMapping("/update")

public R update(@RequestBody UserEntity user){

// ValidatorUtils.validateEntity(user);

UserEntity u = userService.selectOne(new EntityWrapper().eq("username", user.getUsername()));

if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {

return R.error("用户名已存在。");

}

userService.updateById(user);//全部更新

return R.ok();

}

/**

* 删除

*/

@RequestMapping("/delete")

public R delete(@RequestBody Long[] ids){

userService.deleteBatchIds(Arrays.asList(ids));

return R.ok();

}

}

源码获取

大家点赞、收藏、关注 ,让更多需要的同学看到

不同开发语言专栏推荐订阅:

千套JAVA实战项目持续更新中~

上百套小程序实战项目持续更新中~

上百套Python实战项目持续更新中

下方有我的微信名片

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。