基于Java+SpringBoot+vue+element实现火车订票平台管理系统

举报
Java李杨勇 发表于 2022/03/31 22:00:53 2022/03/31
【摘要】 前言介绍:     随着网络的不断普及和发展,在网络技术的支持下,列车订票管理系统得到了迅速的发展。首先,我们要从用户的实际需求出发。通过了解用户的需求,开发有针对性的主页、个人中心、用户管理、车辆信息管理、订票信息管理、火车票订单管理、退票订单管理、系统管理等功能,网络的使用方便给用户带来了这个功能来调整系统,系统的设计让用户使用更加方便,本系统的主要目的是给用户带来快捷、高效、安全,用户...

前言介绍:

     随着网络的不断普及和发展,在网络技术的支持下,列车订票管理系统得到了迅速的发展。首先,我们要从用户的实际需求出发。通过了解用户的需求,开发有针对性的主页、个人中心、用户管理、车辆信息管理、订票信息管理、火车票订单管理、退票订单管理、系统管理等功能,网络的使用方便给用户带来了这个功能来调整系统,系统的设计让用户使用更加方便,本系统的主要目的是给用户带来快捷、高效、安全,用户只要在家里就可以操作。同时随着电子商务的发展,网上火车票订票管理系统也受到了广大用户的关注。

     互联网发展至今,已经解决了很多我们解决不了的难题,使得我们工作更加便捷,提高了我们的工作效率。目前各行各业都在运用网络信息管理程序,不同的用户也都接触到信息管理,特别是在各大电商行业广泛的应运起来。通过对当前网络环境发展的分析与总结,开发火车订票管理系统可以改变以往的火车订票管理系统方式,改变传统线下火车订票管理系统的状态,由于用户的不断增多,使用传统的线下火车订票管理系统模式已经远远不能满足于用户需求了,而且越来越多的国有企业也在开通线上进行火车订票管理系统,所以开发一个火车订票管理系统可以解决国有企业不利于线下火车订票管理系统的问题,设计的网站保证信息的完整安全,这样才能提高工作效率,保证系统安全正常的运行。

功能设计:

火车订票管理系统主要包括大功能模块,即用户功能模块管理员功能模块。

(1)管理员模块:系统中的核心用户是管理员,管理员登录后,通过管理员功能来管理后台系统。主要功能有:首页、个人中心、用户管理、车型信息管理、车次信息管理、购票订单管理、改签订单管理、退票订单管理、系统管理等功能。管理员用例图如图所示。

(2)用户:首页、个人中心、购票订单管理、改签订单、退票订单管理等功能,用户如图所示。

3前台首页:首页、车次信息、火车资讯、个人中心、后台管理等功能,前台首页如图所示。

功能截图:

管理员登录:通过填写注册时输入的用户名、密码、角色进行登录

用户主页:

车次信息:

火车资讯:

个人中心:

改签信息:

订单信息:

后台管理:

用户管理:

车型管理:

车次管理:

订票管理:

退票管理:


改签管理:

火车资讯:

轮播图等

关键源码:


/**
 * 登录相关
 */
@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<UserEntity>().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<UserEntity>().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<UserEntity>().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<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	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<UserEntity> ew = new EntityWrapper<UserEntity>();
      	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<UserEntity>().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);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	@Async
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		File upload = new File("D:/work/");
		if(!upload.exists()) {
			upload.mkdirs();
		}
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(upload+"/"+fileName);

		file.transferTo(dest);
		if(StringUtils.isNotBlank(type) && type.equals("1")) {
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) {
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			} else {
				configEntity.setValue(fileName);
			}
			configService.insertOrUpdate(configEntity);
		}
		return R.ok().put("file", fileName);
	}
	
	/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public ResponseEntity<byte[]> download(@RequestParam String fileName) {
		try {
			File path = new File(ResourceUtils.getURL("classpath:static").getPath());
			if(!path.exists()) {
			    path = new File("");
			}
			File upload = new File(path.getAbsolutePath(),"/upload/");
			if(!upload.exists()) {
			    upload.mkdirs();
			}
			File file = new File(upload.getAbsolutePath()+"/"+fileName);
			if(file.exists()){
				/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
					getResponse().sendError(403);
				}*/
				HttpHeaders headers = new HttpHeaders();
			    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
			    headers.setContentDispositionFormData("attachment", fileName);    
			    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
	}
	
}

数据库设计:

checixinxi表:

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4


10


2

addtime


150


255


3

checimingcheng


150


255


4

huochemingcheng

DateTime

8


255


5

chepai


150


255


6

tupian

DateTime

8


255


7

qidianzhan


150


255


8

zhongdianzhan

DateTime

8


255


9

tujing


150


255


10

riqi

DateTime

8


255


11

chufashijian


150


255


12

shizhang

DateTime

8


255


13

zuoweileixing


150


255


14

jiage

DateTime

8


255


15

piaoshu


150


255


chexingxinxi表:

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4


10


2

addtime


150


255


3

huochebianhao


150


255


4

huochemingcheng

DateTime

8


255


5

shisu


150


255


6

zuoweishu

DateTime

8


255


7

chepai


150


255


gaiqiandingdan表:

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4


10


2

addtime


150


255


3

dingdanbianhao


150


255


4

checimingcheng


150


255


5

chepai

DateTime

8


255


6

qidianzhan

shangpinleixing

DateTime

8

255


7

zhongdianzhan




255


8

zongjiage

DateTime



255


9

gaiqianriqi

DateTime



255


10

yonghuming

DateTime



255


11

xingming

DateTime



255


12

shouji

DateTime



255


goupiaodingdan表:

序号

字段名称

字段类型

大小

允许为空

最大长度

备注

1

id

Int

4


10


2

addtime


150


255


3

dingdanbianhao


150


255


4

checimingcheng


150


255


5

chepai

DateTime

8


255


6

qidianzhan

DateTime



255


7

zhongdianzhan




255


8

chufashijian

shangpinleixing

DateTime

8

255


9

zuoweileixing

shangpinleixing

DateTime

8

255


10

jiage

shangpinleixing

DateTime

8

255


11

piaoshu

shangpinleixing

DateTime

8

255


12

zongjiage

shangpinleixing

DateTime

8

255


13

zongjiage

shangpinleixing

DateTime

8

255


14

goumairiqi

shangpinleixing

DateTime

8

255


15

yonghuming

shangpinleixing

DateTime

8

255


16

xingming

shangpinleixing

DateTime

8

255


17

shouji

shangpinleixing

DateTime

8

255


18

shenfenzheng

shangpinleixing

DateTime

8

255


论文报告:

摘 要

1 绪论

1.1研究背景

1.2研究现状

1.3研究内容

2 系统关键技术

2.1 Spring Boot框架

2.2 JAVA技术

2.3 MYSQL数据库

2.4 B/S结构

3 系统分析

3.1 可行性分析

3.1.1 技术可行性

3.1.2经济可行性

3.1.3操作可行性

3.2 系统性能分析

3.3 系统功能分析

3.4系统流程分析

3.4.1登录流程

3.4.2注册流程

3.4.3添加信息流程

3.4.4删除信息流程

4 系统设计

4.1系统概要设计

4.2系统结构设计

4.3系统顺序图设计

4.3.1登录模块顺序图

4.3.2添加信息模块顺序图

4.4数据库设计

4.4.1数据库E-R图设计

4.4.2数据库表设计

第5章 系统详细设计

5.1前台首页功能模块

5.2管理员功能模块

5.3用户功能模块

6 系统测试

6.1 测试定义

6.2 测试目的

6.3测试方案

(1)模块测试

(2)集成测试:

(3)验收测试:

6.4系统分析

7 结论

参考文献

谢辞


源码获取:

 大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻

打卡 文章 更新 208/  365天

 精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

Java项目精品实战案例《100套》

web前端期末大作业网页实战《100套》

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。