(附源码)springboot 智能停车场系统 毕业设计065415
springboot智能停车场管理系统
摘 要
科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设智能停车场管理系统。
本设计主要实现集人性化、高效率、便捷等优点于一身的智能停车场管理系统,完成首页、站点管理(轮播图、公告栏)用户管理(管理员、普通用户)内容管理(汽车资讯、资讯分类)更多管理(车位信息、停车信息、出库信息信息、IC卡信息)等功能模块。系统通过浏览器与服务器进行通信,实现数据的交互与变更。本系统通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上的错误和遗漏。智能停车场管理系统使用Java语言,采用基于 MVVM模式的springboot框架进行开发,使用 Eclipse 2017 CI 10 编译器编写,数据方面主要采用的是微软的MySQL关系型数据库来作为数据存储媒介,配合前台HTML+CSS 技术完成系统的开发。
关键词:智能停车场管理;Java语言;关系型数据库;SSM框架
Springboot intelligent parking lot management system
Abstract
The rapid development of scientific and technological progress has caused great changes in people's daily life. The rapid development of electronic information technology has popularized and applied the application level of electronic information technology in various fields. The advent of the information age has become an irresistible fashion trend, and the history of human development is entering a new era. In practical application, according to the working rules and development steps of the application software, Java technology is used to build an intelligent parking lot management system.
This design mainly realizes the intelligent parking lot management system with the advantages of humanization, high efficiency and convenience, and completes the functional modules such as home page, site management (rotation map, bulletin board), user management (administrator, ordinary users), content management (automobile information, information classification) and more management (parking space information, parking information, warehouse out information, IC card information). The system communicates with the server through the browser to realize the interaction and change of data. Through scientific management and convenient service, the system improves work efficiency and reduces errors and omissions in data storage. The intelligent parking lot management system uses Java language, adopts the springboot framework based on MVVM mode for development, and is written with eclipse 2017 CI 10 compiler. In terms of data, it mainly uses Microsoft's MySQL relational database as the data storage medium, and completes the development of the system with the foreground HTML + CSS Technology.
Key words: intelligent parking lot management; Java language; Relational database; SSM framework
目 录
第1章 绪论
1.1 研究背景与意义
1.2 开发现状
1.3 本文的组织结构
第2章 相关技术介绍
2.1 开发工具及技术
2.2 MVVM模式
2.3 MySQL数据库
2.4 B/S结构
2.5 Springboot框架介绍
2.6 Vue.js 主要功能
第3章 系统分析
3.1 可行性分析
3.1.1 技术可行性分析
3.1.2 经济可行性分析
3.1.3 操作可行性分析
3.2 功能需求分析
3.3 非功能需求分析
3.4 数据流程分析
第4章 系统设计
4.1 系统架构设计
4.2 系统功能结构
4.3 功能模块设计
4.4 数据库设计
4.4.1 概念模型
4.4.2 关系模型
4.4.3 数据表
第5章 系统实现
5.1 登录模块的实现
5.2 用户子系统模块的实现
5.2.1 用户首页模块
5.2.2 注册模块
5.3 管理员子系统模块的实现
5.3.1 用户管理模块
5.3.2 个人资料管理模块
5.3.3 停车位管理模块
5.3.4 车辆出库信息模块
第6章 系统测试
6.1 测试目的
6.2 测试过程
6.3 测试结果
第7章 总结与展望
参考文献
致谢
第一章是绪论,本文章的开头部分,对本题目的研究背景和研究意义等一些做文字性的描述。
第二章研究了智能停车场管理系统的所采用的开发技术和开发工具。
第三章是系统分析部分,包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时,Vue.js 也能驱动复杂的单页应用。
本次设计基于B/S 模式下,运用Java、JSP技术采用的是MySQL数据库和Eclipse 实现,总体的可行性共分为以下三个方面。
智能停车场管理系统在对需求做解析后,整个系统主要分为两个部分:管理员和普通用户,每个模块下的分支功能不一样。对功能做出如下说明:
维护普通用户,审核普通用户的账号,可以冻结普通用户的登录权限,或者删除普通用户账号。
发布停车位,并可以销毁某个停车位,更新停车位数据,模糊搜索停车位数据等。
系统非功能需求有非常多,比如性能需求、可承载最大用户数、稳定性、易用性需求等。本系统分析时考虑到易用性需求,因为系统是给人使用的,所以必须充分从用户的角度出发,考虑用户体验,使系统易理解易上手易操作。
一层数据流程图包括了登录注册、用户功能和检索维护等模块,在登录注册模块使用到的数据存储有用户账户文档,用户功能模块需要的存储是用户各功能模块数据文档,检索维护是使用以上这些数据文档通过关键词进行检索。
操作人来录入停车位数据,点击停车位录入按钮,依次填写要录入的停车位数据,点击提交按钮,将数据提交至数据库,然后刷新停车位数据页面,每条数据右边有删除和编辑按钮,来完成相应的删除和更新功能。
车辆驶入停车场后,管理员将车辆的入场时间记录下来,关系为一对多,根据车辆编号来将车辆数据传入到入场数据中,操作人为普通用户,然后生成入场列表,普通用户查看个人历史入场列表,可以进行数据销毁。
操作人来录入车辆数据,点击车辆录入按钮,依次填写要录入的车辆数据,点击提交按钮,将数据提交至数据库,然后刷新车辆数据页面,每条数据右边有删除和编辑按钮,来完成相应的删除和更新功能。
管理员点击通知公告管理菜单,点击通知公告添加子菜单,添加通知公告数据,填写标题、内容、类别、图片,提交成功后,通知公告数据页面刷新,新数据成功载入页面。
普通用户(普通用户id、用户名、姓名、车牌号、车型、品牌)
通知公告数据(通知公告id、标题、类别、首页图片、点击率、发布人)
停车位(停车位id、车位号、位置、状态、车位类型)
出库信息(出库信息id、用户名、车牌号、入场时间、离开时间、停放时长、费用、是否支付)
入场(入场id、用户名、车牌号、车型、入场时间)
数据库逻辑结构就是将E-R图在数据库中用具体的字段进行描述。用字段和数据类型描述来使对象特征实体化,最后形成具有一定逻辑关系的数据库表结构。智能停车场管理系统所需要的部分数据结构表如下表所示。
ic_card_information |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
ic_card_information_id |
int |
11 |
否 |
主键 |
IC卡信息ID |
user_number |
int |
11 |
是 |
用户编号 |
|
user_name |
varchar |
64 |
是 |
用户姓名 |
|
user_vehicle |
varchar |
64 |
是 |
用户车辆 |
|
license_plate_number |
varchar |
64 |
是 |
车牌号 |
|
ic_card_number |
varchar |
64 |
否 |
IC卡号 |
|
balance |
int |
11 |
是 |
余额 |
|
recommend |
int |
11 |
否 |
智能推荐 |
|
create_time |
datetime |
0 |
否 |
创建时间 |
|
update_time |
timestamp |
0 |
否 |
更新时间 |
|
notice |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
notice_id |
mediumint |
8 |
否 |
主键 |
公告id |
title |
varchar |
125 |
否 |
标题 |
|
content |
longtext |
0 |
是 |
正文 |
|
create_time |
timestamp |
0 |
否 |
创建时间 |
|
update_time |
timestamp |
0 |
否 |
更新时间 |
|
ordinary_users |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
ordinary_users_id |
int |
11 |
否 |
主键 |
普通用户ID |
user_name |
varchar |
64 |
是 |
用户姓名 |
|
user_gender |
varchar |
64 |
是 |
用户性别 |
|
user_number |
varchar |
64 |
否 |
用户编号 |
|
user_vehicle |
varchar |
64 |
是 |
用户车辆 |
|
license_plate_number |
varchar |
64 |
是 |
车牌号 |
|
examine_state |
varchar |
16 |
否 |
审核状态 |
|
recommend |
int |
11 |
否 |
智能推荐 |
|
user_id |
int |
11 |
否 |
用户ID |
|
create_time |
datetime |
0 |
否 |
创建时间 |
|
update_time |
timestamp |
0 |
否 |
更新时间 |
|
outbound_information |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
outbound_information_id |
int |
11 |
否 |
主键 |
出库信息信息ID |
parking_space_name |
varchar |
64 |
是 |
车位名称 |
|
location |
varchar |
64 |
是 |
所在地区 |
|
charging_standard |
varchar |
64 |
是 |
收费标准 |
|
user_number |
int |
11 |
是 |
用户编号 |
|
user_name |
varchar |
64 |
是 |
用户姓名 |
|
user_vehicle |
varchar |
64 |
是 |
用户车辆 |
|
license_plate_number |
varchar |
64 |
是 |
车牌号 |
|
parking_duration |
datetime |
0 |
是 |
停车时间 |
|
end_time |
datetime |
0 |
是 |
结束时间 |
|
total_parking |
int |
11 |
是 |
共计停车 |
|
parking_fee |
varchar |
64 |
是 |
停车费用 |
|
occupied_parking_space |
varchar |
64 |
是 |
占用车位 |
|
pay_state |
varchar |
16 |
否 |
支付状态 |
|
pay_type |
varchar |
16 |
是 |
支付类型 微信、支付宝、网银 |
|
recommend |
int |
11 |
否 |
智能推荐 |
|
create_time |
datetime |
0 |
否 |
创建时间 |
|
update_time |
timestamp |
0 |
否 |
更新时间 |
|
parking_information |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
parking_information_id |
int |
11 |
否 |
主键 |
停车信息ID |
parking_space_name |
varchar |
64 |
是 |
车位名称 |
|
location |
varchar |
64 |
是 |
所在地区 |
|
charging_standard |
varchar |
64 |
是 |
收费标准 |
|
parking_stall |
varchar |
64 |
是 |
停车车位 |
|
user_number |
int |
11 |
是 |
用户编号 |
|
user_name |
varchar |
64 |
是 |
用户姓名 |
|
user_vehicle |
varchar |
64 |
是 |
用户车辆 |
|
license_plate_number |
varchar |
64 |
是 |
车牌号 |
|
parking_duration |
datetime |
0 |
是 |
停车时间 |
|
occupied_parking_space |
varchar |
64 |
是 |
占用车位 |
|
recommend |
int |
11 |
否 |
智能推荐 |
|
create_time |
datetime |
0 |
否 |
创建时间 |
|
update_time |
timestamp |
0 |
否 |
更新时间 |
|
parking_space_information |
|||||
字段名称 |
类型 |
长度 |
不是null |
主键 |
字段说明 |
parking_space_information_id |
int |
11 |
否 |
主键 |
车位信息ID |
parking_space_name |
varchar |
64 |
是 |
车位名称 |
|
location |
varchar |
64 |
是 |
所在地区 |
|
parking_space_picture |
varchar |
255 |
是 |
车位图片 |
|
remaining_parking_spaces |
int |
11 |
是 |
剩余车位 |
|
charging_standard |
int |
11 |
是 |
收费标准 |
|
parking_space_details |
text |
0 |
是 |
车位详情 |
|
hits |
int |
11 |
否 |
点击数 |
|
recommend |
int |
11 |
否 |
智能推荐 |
|
create_time |
datetime |
0 |
否 |
创建时间 |
|
update_time |
timestamp |
0 |
否 |
更新时间 |
系统的登录窗口是用户的入口,用户只有在登录成功后才可以进入访问。通过在登录提交表单,后台处理判断是否为合法用户,进行页面跳转,进入系统中去。
登录合法性判断过程:用户输入账号和密码后,系统首先确定输入输入数据合法性,然后在login.jsp页面发送登录请求,调用src下的mainctrl类的dopost方法来验证。
2)从数据库中提取记录,并储存在本地的session中(timeout默认=30min)。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
系统呈现出一种简洁大方的首页:界面简约、鳞次栉比,用户能轻车熟路的使用。出于对系统使用群体广泛的顾虑,应有良好性能的后台。
@SpringBootApplication
@EnableJpaRepositories
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
此页面实现普通用户的注册,必须注册登录后才能使用系统大部分功能,用户名不允许重复如果重复将会注册失败,并弹出相应的提示,通过js实现对输入的验证。
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
Query select = service.select(service.readQuery(request), service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
public Query select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return runEntitySql(sql.toString());
}
/**
* 修改密码
* @param data
* @param request
* @return
*/
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// 根据Token获取UserId
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
// 根据UserId和旧密码获取用户
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
query.put("user_id" ,String.valueOf(userId));
query.put("password" ,service.encryption(o_password));
Query ret = service.count(query, service.readConfig(request));
List list = ret.getResultList();
Object s = list.get(0);
int count = Integer.parseInt(list.get(0).toString());
if(count > 0){
// 修改密码
Map<String,Object> form = new HashMap<>();
form.put("password",service.encryption(data.get("password")));
service.update(query,service.readConfig(request),form);
return success(1);
}
return error(10000,"密码修改失败!");
}
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
Query select = service.select(service.readQuery(request), service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
public Query select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return runEntitySql(sql.toString());
}
在对该系统进行完详细设计和编码之后,就要对智能停车场管理系统的程序进行测试,检测程序是否运行无误,反复进行测试和修改,使之最后成为完整的软件,满足用户的需求,实现预期的功能。
测试性能 |
新用户注册 |
||
用例目的 |
测试系统新用户个人信息注册功能的功能和安全性 |
||
前提条件 |
进入注册页面填写个人信息 |
||
输入条件 |
预期输出 |
实际情况 |
|
各项基本信息输入不完整 |
不允许注册,无法点击注册按钮 |
一致 |
|
填写已存在的用户名 |
系统显示出提示信息,要求重新填写 |
一致 |
|
两次密码输入不一致 |
系统显示出提示信息,要求重新填写 |
一致 |
|
填写的各项信息没有符合提示的长度和字符要求 |
系统显示出提示信息,要求重新填写 |
一致 |
|
胡乱填写电话号码 |
收不到验证码 |
一致 |
|
填写验证码与收到的不一致 |
系统显示提示信息告知用户验证码错误,不予注册 |
一致 |
测试性能 |
用户或操作员登录系统 |
||
用例目的 |
测试用户或操作员登录系统时功能是否正常 |
||
前提条件 |
进入用户登录页面或操作员登录页面 |
||
输入条件 |
预期输出 |
实际情况 |
|
各项信息不予填写,直接点击登陆按钮 |
不允许登录,提示填写账号相关信息 |
一致 |
|
填写错误的登录名或密码后点击登录系统 |
提示用户名或密码错误,要求重新填写进行登录 |
一致 |
|
填写与验证码信息不一致的信息 |
系统显示出提示信息,表明验证码错误,要求重新填写 |
一致 |
测试性能 |
停车位相关信息管理功能 |
||
用例目的 |
测试系统操作者对停车位相关信息进行管理的功能是否正常 |
||
前提条件 |
登录系统进入相关管理页面 |
||
输入条件 |
预期输出 |
实际情况 |
|
进入停车位管理界面,点击“录入”按钮,填写所有必填项,点击提交 |
提示“录入成功”,并返回查询界面 |
一致 |
|
进入停车位管理界面,点击“录入”按钮,未填写一个或者多个必填项,点击提交 |
提示“录入失败”,请填写必填项 |
一致 |
|
进入停车位管理界面,选择要修改的一条数据,点击该条数据后面的“修改”按钮 |
节目跳转至修改界面 |
一致 |
|
在修改界面,修改可修改项后,点击“提交”按钮 |
提示“修改成功”,并返回查询界面 |
一致 |
|
进入停车位管理界面,点击某条数据后面的删除按钮 |
提示“是否要删除该数据”,如果用户点击“确定”按钮,则成功删除该条数据,并提示“删除成功”,之后返回查询界面 |
一致 |
本次系统上线成功后,得到了用户的高度认可,但是在功能上和性能上还需做进一步的研究处理,使其有更高的性能和更好的用户体验。
系统在以后的升级过程中,需要解决一系列用户所提出的问题,例如打印过程中如何避免浏览器的兼容性问题,大量用户访问时,如何保持较高的响应速度,在系统今后的升级过程中将着重解决这些安全性问题。
参考文献
[1]徐佩.新时期计算机软件开发技术的应用及发展趋势[J].农家参谋,2019(08):167.
[2]张帅,崔婀娜,魏立波.互联网+健康在线服务平台的设计与实现[J].科技创新与应用,2019(10):91-92.
[3]谷利国,陈存田,张甲瑞.基于B/S模式的人事教育信息管理系统的分析与设计[J].电脑知识与技术,2019,15(10):58-59.
[4]胥新政,强毅.基于JSP的常用金属材料标准检索平台开发设计[J].制造业自动化,2019,41(03):41-43+69.
[5]王祖维,南淮耀,张英.“互联网+”视域下的高校学生公寓管理系统设计与实现——以沈阳师范大学为例[J].现代商贸工业,2019,40(08):187-188.
[6]廖明华,齐攀.学生职业能力测评管理系统的设计与实现[J].广东交通职业技术学院学报,2019,18(01):48-52.
[7]李冬冬,刘华明,毕学慧,王秀友.旧衣申领系统的设计与实现[J].电脑知识与技术,2019,15(08):47-50.
[8]李庆年.“互联网+”视域下的人才招聘管理系统设计与实现[J].国际公关,2019(03):164-165.
[9]刘婷,彭焕峰,邵淑婷.基于云平台的高校监考管理系统[J].电脑知识与技术,2019,15(07):91-92.
[10]赵丙秀.基于百度AI平台的Web人脸注册和登录系统的实现[J].电脑知识与技术,2019,15(07):114-115.
[11]戴昭颖,尹涛.钢铁行业成本预算系统开发应用实践[J].电子技术与软件工程,2019(04):29-30.
[12]曹灿,刘志刚.基于SSH和Layui的工程科学前沿与实践系统[J].工业控制计算机,2019,32(02):91-92+96.
[13]谢路.基于Web的考务管理系统设计与实现[J].福建电脑,2019,35(01):136-137.
[14]张继东.MySQL数据库基于JSP的访问技术[J/OL].电子技术与软件工程,2017,(15):169(2017-08-03).
致谢
首先感谢我的指导老师,设计的完成离不开老师的一系列指导。在毕业设计的完成过程中,老师给出了很多中肯的建议,正是由于老师一丝不苟的工作态度,我的设计才能顺利的完成。
最后,感谢在大学生涯中每一位教导我的老师,是你们教给了我丰富的知识,更教会了我遇到问题时,如何去应对并解决。谢谢你们的帮助与支持。
免费领取本源代码,请关注点赞+私聊
(附源码)springboot 智能停车场系统 毕业设计065415相关推荐
- (附源码)springboot 在线考试系统 毕业设计461317
Springboot在线考试系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术 ...
- (附源码)spring boot智能停车场系统 毕业设计065415
springboot智能停车场管理系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时 ...
- (附源码)springboot企业人力资源管理系统 毕业设计291816
springboot企业人力资源管理系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的 ...
- (附源码)智能车APP 毕业设计 250623
智能车小程序的开发 摘 要 智能车是一种集环境感知.规划决策.多等级辅助驾驶等功能于一体的综合系统,它集中运用了微处理器.现代传感器.信息融合.通讯.人工智能及自动控制等技术,是典型的高新技术综合体. ...
- (附源码)ssm跨平台教学系统 毕业设计 280843
跨平台教学系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题 ...
- (附源码)ssm宠物领养系统 毕业设计 031654
SSM宠物领养系统 摘 要 如今,随着人们生活水平不断提高,人们的生活在物质满足的基础上,更多的人将生活的重点放在追求精神享受的过程中.于此同时,Internet铺天盖地的普及,使得这样的人纷纷通过I ...
- (附源码)ssm医院挂号系统 毕业设计 250858
医院挂号系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题. ...
- (附源码)springboot客户信息管理系统 毕业设计 181936
基于springboot的anjuleanjule客户信息管理系统 摘 要 本论文主要论述了如何使用Java语言开发一个anjule客户信息管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采 ...
- (附源码)springboot校园疫情管理系统 毕业设计 021506
校园疫情管理系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对校 ...
最新文章
- 读懂ConnectString 中 enlist 设置的含义
- 计算机科学与技术与cs,CSgo! | 遇见CS—带你走进传说中的计算机专业
- Kafka之Purgatory Redesign Proposal (翻译)
- windows无法新建计算机对象,win10系统ie浏览器提示“Automation 服务器不能创建对象”的办法...
- 如何通过dblink truncate远程数据库上的表
- 初识Entity Framework CodeFirst(2)
- or函数 java_Java OptionalInt orElseGet()用法及代码示例
- java getid_Java TimeZone getID()方法与示例
- 使用Keras和CNN进行自定义AI人脸识别
- 2021总结和2022展望
- 这 8 个 Python 技巧让你的数据分析提升数倍!
- Linux磁盘分区及文件系统格式化和挂载
- 基于MATLAB语音识别系统GUI界面
- c#开发环境下用Directx载入3D模型
- 2,Jenkins实战应用_Jenkins初始部署与简单配置
- 不收费的Word软件推荐
- 怎样看待中小学stem教育特点
- 从Internet说起
- 游戏运营是什么?具体负责的工作有哪些?
- 韩星张东健接3岁半儿子放学 父子首张合影曝光
热门文章
- 分布式文件系统:HDFS 核心原理
- 成功解决keil识别不到单片机芯片,下载不了程序
- Windows Server2016 WSUS服务部署
- [附源码]java毕业设计企业职工福利发放管理系统
- 腾讯、阿里、百度、网易等18家中秋月饼设计盘点!(完整版)
- 如何用代码实现图片,音频视频的复制粘贴
- m_p,m_n,CStudent等变量前缀的理解
- 解决xxx by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the requested resource问题
- sql 2008 数据库每天增量备份,每周完整备份
- 多张照片拼成另一个照片-想制作一个不一样的惊喜?还得用这款神器 AndreaMosaic,我们就叫它拼凑图片神器