🍅 作者简介:CSDN特邀作者?、博客专家?、java领域优质创作者💪
🍅关注公众号【java李杨勇】? 简历模板、学习资料、面试题库等都给你💪
🍅文末获取源码联系🍅
前言介绍:
? ? ?随着网络的不断普及和发展,在网络技术的支持下,列车订票管理系统得到了迅速的发展。首先,我们要从用户的实际需求出发。通过了解用户的需求,开发有针对性的主页、个人中心、用户管理、车辆信息管理、订票信息管理、火车票订单管理、退票订单管理、系统管理等功能,网络的使用方便给用户带来了这个功能来调整系统,系统的设计让用户使用更加方便,本系统的主要目的是给用户带来快捷、高效、安全,用户只要在家里就可以操作。同时随着电子商务的发展,网上火车票订票管理系统也受到了广大用户的关注。
? ? ?互联网发展至今,已经解决了很多我们解决不了的难题,使得我们工作更加便捷,提高了我们的工作效率。目前各行各业都在运用网络信息管理程序,不同的用户也都接触到信息管理,特别是在各大电商行业广泛的应运起来。通过对当前网络环境发展的分析与总结,开发火车订票管理系统可以改变以往的火车订票管理系统方式,改变传统线下火车订票管理系统的状态,由于用户的不断增多,使用传统的线下火车订票管理系统模式已经远远不能满足于用户需求了,而且越来越多的国有企业也在开通线上进行火车订票管理系统,所以开发一个火车订票管理系统可以解决国有企业不利于线下火车订票管理系统的问题,设计的网站保证信息的完整安全,这样才能提高工作效率,保证系统安全正常的运行。
功能设计:
本火车订票管理系统主要包括二大功能模块,即用户功能模块和管理员功能模块。
(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套》
|