设计技术:
- 开发语言:Java
- 数据库:MySQL
- 技术:Springboot+Mybatis
- 工具:IDEA、Maven、Navicat
主要功能:
本火车订票管理系统主要包括二大功能模块,即用户功能模块和管理员功能模块。
(1)管理员模块:系统中的核心用户是管理员,管理员登录后,通过管理员功能来管理后台系统。主要功能有:首页、个人中心、用户管理、车型信息管理、车次信息管理、购票订单管理、改签订单管理、退票订单管理、系统管理等功能。管理员用例图如图3-1所示。
图3-1 管理员用例图
(2)用户:首页、个人中心、购票订单管理、改签订单管理、退票订单管理等功能,用户如图3-2所示。
图3-2 用户用例图
(3)前台首页:首页、车次信息、火车资讯、个人中心、后台管理等功能,前台首页如图3-3所示。
图3-3 前台首页用例图
前台首页功能模块
火车订票管理系统 ,在系统首页可以查看首页、车次信息、火车资讯、个人中心、后台管理等内容,如图5-1所示。
图5-1前台首页功能界面图
登录、用户注册,在用户注册页面可以填写用户名、密码、姓名、性别、头像、身份证、手机等信息进行注册,如图5-2所示。
车次信息,在车次信息页面通过填写车次名称、火车名称、车牌、图片、起点站、终点站、途经、日期、出发时间、时长、座位类型、价格、票数等信息。如图5-3所示。
图5-3车次信息界面图
管理员功能模块
管理员登录,通过填写注册时输入的用户名、密码、角色进行登录,如图5-4所示。
图5-4管理员登录界面图
管理员登录进入火车订票管理系统可以查看首页、个人中心、用户管理、车型信息管理、车次信息管理、购票订单管理、改签订单管理、退票订单管理、系统管理等信息。
个人信息,在个人信息页面中可以通过填写用户名等内容进行修改、添加,如图5-5所示。还可以根据需要对用户管理的用户名、密码、姓名、性别、头像、身份证、手机进行添加,修改或删除等详细操作,如图5-6所示
车型信息管理,在车型信息管理页面中可以填写火车编号、火车名称、实速、座位数、车牌等信息,并可根据需要对已有车型信息管理进行修改或删除等操作,如图5-7所示。
图5-7车型信息管理界面图
车次信息管理,在车次信息管理页面中可以填写车次名称、火车名称、车牌、图片、起点站、终点站、途经、日期、出发时间、时长、座位类型、价格、票数等信息,并可根据需要对已有车次信息管理进行修改或删除等详细操作,如图5-8所示。
图5-8车次信息管理界面图
购票订单管理,在购票订单管理页面中可以查看订单编号、车次名称、车牌、起点站、终点站、出发时间、座位类型、价格、票数、总价格、购买日期、用户名、姓名、手机、身份证等内容,并且根据需要对已有购票订单管理进行修改或删除、详情等操作,如图5-9所示。
改签订单管理,在改签订单管理页面中可以查看订单编号、车次名称、车牌、起点站、终点站、总价格、改签日期、用户名、姓名、手机、审核回复、审核状态、审核等内容,并且根据需要对已有改签订单管理进行修改或删除等详细操作,如图5-10所示。
图5-10改签订单管理界面图
轮播图;该页面为轮播图管理界面。管理员可以在此页面进行首页轮播图的管理,通过新建操作可在轮播图中加入新的图片,还可以对以上传的图片进行修改操作,以及图片的删除操作,如图5-11所示。
图5-11轮播图管理界面图
用户功能模块
用户登录进入火车订票管理系统可以查看首页、个人中心、购票订单管理、改签订单管理、退票订单管理等内容。
个人中心,在个人中心页面中通过填写原密码、新密码、确认密码等信息,还可以根据需要对个人中心进行修改、删除如图5-12所示。
图5-12个人中心界面图
个人信息,在个人信息页面中可以查看用户名、密码、姓名、性别、头像、身份证、手机等信息内容,并且根据需要对已有个人信息进行修改等其他详细操作,如图5-13所示。
图5-13个人信息界面图
改签订单,在改签订单管理页面中通过填写订单编号、车次名称、车牌、起点站、终点站、总价格、改签日期、用户名、姓名、手机、审核回复、审核状态、审核等内容进行查看、删除,如图5-14所示。
package com.cqjtu.studentdocument.controller;
import com.cqjtu.studentdocument.advice.ExceptionEnums;
import com.cqjtu.studentdocument.advice.MyException;
import com.cqjtu.studentdocument.entity.User;
import com.cqjtu.studentdocument.service.UserService;
import com.cqjtu.studentdocument.utils.MD5Utils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.util.List;
@Slf4j
@Api(description = "用户相关接口")
@Controller
@RequestMapping(value = "api/user")
public class UserController extends BaseController<UserService,User,Integer> {
@Override
public ResponseEntity<User> save(@RequestBody User entity) {
if (entity.getRoleId() == null){
entity.setRoleId(2);
}
if (entity.getUsername() == null){
entity.setUsername(entity.getStuNo());
}
if (entity.getPassword()==null){
entity.setPassword("123");
}
if (StringUtils.isBlank(entity.getUsername())){
throw new MyException(ExceptionEnums.ADD_ERROR);
}
if (this.service.findByUsername(entity.getUsername())!=null){
throw new MyException(ExceptionEnums.ACCOUNT_IS_EXIT);
}
entity.setPassword(MD5Utils.encrypt(entity.getUsername(), entity.getPassword()));
entity.setUpdateDatetime(new Timestamp(System.currentTimeMillis())); // Set current timestamp
return super.save(entity);
}
@Override
public ResponseEntity<User> update(@RequestBody User entity) {
if (this.service.selectByKey(entity.getId()).getPassword().equals(entity.getPassword())){
entity.setUpdateDatetime(new Timestamp(System.currentTimeMillis())); // Set current timestamp
return super.update(entity);
}else {
entity.setPassword(MD5Utils.encrypt(entity.getUsername(), entity.getPassword()));
entity.setUpdateDatetime(new Timestamp(System.currentTimeMillis())); // Set current timestamp
return super.update(entity);
}
}
@PostMapping("/updateUser")
public ResponseEntity<User> updateUserName(@RequestBody User entity){
Subject subject = SecurityUtils.getSubject();
User user = (User) subject.getPrincipal();
if (this.service.findByUsername(entity.getUsername())!=null && !entity.getUsername().equals(user.getUsername())){
throw new MyException(ExceptionEnums.ACCOUNT_IS_EXIT);
}
if (this.service.selectByKey(entity.getId()).getPassword().equals(entity.getPassword())){
entity.setUpdateDatetime(new Timestamp(System.currentTimeMillis())); // Set current timestamp
return super.update(entity);
}else {
entity.setPassword(MD5Utils.encrypt(entity.getUsername(), entity.getPassword()));
entity.setUpdateDatetime(new Timestamp(System.currentTimeMillis())); // Set current timestamp
return super.update(entity);
}
}
@Override
@GetMapping(value = "delete/{id}")
public ResponseEntity<String> delete(@PathVariable("id")Integer id) {
return super.delete(id);
}
@ApiOperation(value = "用户登录接口")
@RequestMapping("login")
public ResponseEntity<User> login(@RequestBody User entity, HttpServletRequest request){
UsernamePasswordToken token = new UsernamePasswordToken(entity.getUsername(), entity.getPassword());
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);
User user = (User) subject.getPrincipal();
return ResponseEntity.ok(user);
} catch (Exception e) {
log.info("登陆失败:"+e.getMessage());
throw e;
}
}
@ApiOperation(value = "用户注销接口")
@GetMapping("/loginOut")
public ResponseEntity<String> loginOut(){
Subject subject = SecurityUtils.getSubject();
if (subject!=null){
subject.logout();
}
return ResponseEntity.ok("退出登录");
}
@ApiOperation(value = "获取所有相应角色用户")
@GetMapping("/getAllStudent/{roleId}")
public ResponseEntity<List<User>> getAllStudent(@PathVariable("roleId") String roleId){
Example example = new Example(User.class);
example.createCriteria().andEqualTo("roleId",roleId);
List<User> users = this.service.selectByExample(example);
return ResponseEntity.ok(users);
}
@ApiOperation(value = "获取所有用户")
@GetMapping("/getAll")
public ResponseEntity<List<User>> getAll(){
Example example = new Example(User.class);
List<User> users = this.service.selectByExample(example);
return ResponseEntity.ok(users);
}
}
需要加V分享