基于springboot火车订票管理系统

设计技术:
  • 开发语言: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分享

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是菜鸟java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值