博主介绍: ✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌
文末获取源码联系
精彩专栏 推荐订阅 不然下次找不到哟
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》
互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对汽车客运站售票信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用汽车客运站管理系统可以有效管理,使信息管理能够更加科学和规范。
汽车客运站管理系统在Eclipse环境中,使用Java语言进行编码,使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理员负责售票管理员和检票管理员的信息管理,对车辆,售票和车辆调度信息执行管理,并统计车辆的售票数据。售票管理员查看公告,登记车辆售票信息。检票管理员查看公告,查看售票信息,在线检票。
总之,汽车客运站管理系统集中管理信息,有着保密性强,效率高,存储空间大,成本低等诸多优点。它可以降低信息管理成本,实现信息管理计算机化。
不同的系统提供的服务也不相同,其对应的功能也不相同,所以,系统开工前,需要明确其用途,确定其功能。由此,才可以进行各个任务的开展。
汽车客运站管理系统经过分析,确定了其需要设置管理员的角色,其操作的功能通过用例图展示(见下图)。管理员负责售票管理员和检票管理员的信息管理,对车辆,售票和车辆调度信息执行管理,并统计车辆的售票数据。
图3.5 管理员用例图
汽车客运站管理系统经过分析,确定了其需要设置售票管理员的角色,其操作的功能通过用例图展示(见下图)。售票管理员查看公告,登记车辆售票信息。
图3.6 售票管理员用例图
汽车客运站管理系统经过分析,确定了其需要设置检票管理员的角色,其操作的功能通过用例图展示(见下图)。检票管理员查看公告,查看售票信息,在线检票。
图3.7 检票管理员用例图
管理员进入指定功能操作区之后可以管理管理员信息。其页面见下图。这里的管理员包括了售票管理员和检票管理员的信息,管理员主要是增删改查有关管理员的数据信息。
图5.1 管理员信息页面
管理员进入指定功能操作区之后可以管理车辆信息。其页面见下图。管理员查询车辆有很多种方式,比如根据司机,根据车辆名字,根据车牌号或者是根据始发站以及终点站等都能查询车辆的信息,另外,管理员也能新增车辆,修改页面内的车辆数据。
图5.2 车辆管理页面
管理员进入指定功能操作区之后可以管理车辆调度。其页面见下图。管理员修改车辆的排班信息,新增车辆调度信息,根据排班信息查询车辆调度信息。
图5.3 车辆调度管理页面
管理员进入指定功能操作区之后可以管理系统公告。其页面见下图。只有管理员才可以管理系统公告,发布公告信息,其他角色用户只能查看。
图5.4 系统公告管理页面
管理员进入指定功能操作区之后可以管理售票。其页面见下图。管理员本人也能增删改查售票信息,还可以统计各种车辆的售票信息。
图5.5 售票管理页面
售票管理员进入指定功能操作区之后可以查看系统公告。其页面见下图。售票管理员查看各个公告信息,根据页面提示对公告信息进行检索。
图5.6 系统公告页面
售票管理员进入指定功能操作区之后可以管理售票信息。其页面见下图。售票管理员查看已售车票的售票状态,登记新的售票信息。
图5.7 售票管理页面
检票管理员进入指定功能操作区之后可以对车票进行查看并检票。其页面见下图。检票管理员查询车票,对已售状态的车票进行检票。
图5.8 售票信息页面
检票管理员进入指定功能操作区之后可以检票。其页面见下图。检票管理员检票时主要是核对车辆的始发站以及终点站等相关信息,信息正确即可检票。
图5.9 车票检票页面
/**
* 系统公告
* 后端接口
* @author
* @email
* @date 2021-02-24
*/
@RestController
@Controller
@RequestMapping("/xitonggonggao")
public class XitonggonggaoController {
private static final Logger logger = LoggerFactory.getLogger(XitonggonggaoController.class);
@Autowired
private XitonggonggaoService xitonggonggaoService;
@Autowired
private TokenService tokenService;
//级联表service
//字典表map
Map> dictionaryMap;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map params){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
PageUtils page = xitonggonggaoService.queryPage(params);
//字典表数据转换
List list =(List)page.getList();
ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
dictionaryMap = (Map>) servletContext.getAttribute("dictionaryMap");
for(XitonggonggaoView c:list){
this.dictionaryConvert(c);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
XitonggonggaoEntity xitonggonggao = xitonggonggaoService.selectById(id);
if(xitonggonggao !=null){
//entity转view
XitonggonggaoView view = new XitonggonggaoView();
BeanUtils.copyProperties( xitonggonggao , view );//把实体数据重构到view中
//字典表字典转换
ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
dictionaryMap = (Map>) servletContext.getAttribute("dictionaryMap");
this.dictionaryConvert(view);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody XitonggonggaoEntity xitonggonggao, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,xitonggonggao:{}",this.getClass().getName(),xitonggonggao.toString());
Wrapper queryWrapper = new EntityWrapper()
.eq("biaoti", xitonggonggao.getBiaoti())
.eq("leixing", xitonggonggao.getLeixing())
.eq("neirong", xitonggonggao.getNeirong())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
XitonggonggaoEntity xitonggonggaoEntity = xitonggonggaoService.selectOne(queryWrapper);
if(xitonggonggaoEntity==null){
xitonggonggao.setRiqi(new Date());
xitonggonggao.setAddtime(new Date());
xitonggonggaoService.insert(xitonggonggao);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody XitonggonggaoEntity xitonggonggao, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,xitonggonggao:{}",this.getClass().getName(),xitonggonggao.toString());
//根据字段查询是否有相同数据
Wrapper queryWrapper = new EntityWrapper()
.notIn("id",xitonggonggao.getId())
.eq("biaoti", xitonggonggao.getBiaoti())
.eq("leixing", xitonggonggao.getLeixing())
.eq("neirong", xitonggonggao.getNeirong())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
XitonggonggaoEntity xitonggonggaoEntity = xitonggonggaoService.selectOne(queryWrapper);
if(xitonggonggaoEntity==null){
xitonggonggaoService.updateById(xitonggonggao);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
logger.debug("Controller:"+this.getClass().getName()+",delete");
xitonggonggaoService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
*字典表数据转换
*/
public void dictionaryConvert(XitonggonggaoView xitonggonggaoView){
//当前表的字典字段
//级联表的字典字段
}
}
目 录
第1章 绪论1
1.1 课题背景1
1.2 课题意义1
1.3 研究内容2
第2章 开发环境与技术3
2.1 MYSQL数据库3
2.2 JSP技术3
2.3 SSM框架4
第3章 系统分析5
3.1 可行性分析5
3.1.1 技术可行性5
3.1.2 经济可行性5
3.1.3 操作可行性5
3.2 系统流程6
3.2.1 操作流程6
3.2.2 登录流程6
3.2.3 删除信息流程7
3.2.4 添加信息流程8
3.3 性能需求8
3.4 功能需求9
第4章 系统设计11
4.1 设计原则11
4.2 功能结构设计11
4.3 数据库设计13
4.3.1 数据库概念设计14
4.3.2 数据库物理设计16
第5章 系统实现19
5.1 管理员功能实现19
5.1.1 管理员信息19
5.1.2 车辆管理19
5.1.3 车辆调度管理20
5.1.4 系统公告管理20
5.1.5 售票管理21
5.2 售票管理员功能实现21
5.2.1 系统公告21
5.2.2 售票管理22
5.3 检票管理员功能实现22
5.3.1 售票信息22
5.3.2 车票检票23
第6章 系统测试24
6.1 功能测试24
6.1.1 登录功能测试24
6.1.2 修改密码功能测试25
6.2 测试结果25
结 论26
致 谢27
参考文献28
获取源码:
大家 点赞、收藏、关注、评 论啦 、 查看 获取联系方式
精彩专栏 推荐订阅 :在 下方专栏
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》