SSM之车票管理系统(Java课设)

1、设计题目

        功能需求如下: (1)班次信息包括:班次、发车时间、起点站、终点站、行车时间、额定载量。  车票信息包括:日期、班次、额定载量(人)、已售(张)。例如:(2022/5/12, 3,40,5),表示2022年5月12日,班次3,额定载量40人,已售5张 (2)系统功能要求: 1)班次信息的增、删、改、浏览功能; 2)查询路线:可按班次号、起点站、终点站查询; 3)统计售票情况:统计指定日期的全部班次售票数量。 4)售票和退票功能        A:输入日期、班次、预购票数量,当预购票数量<=剩余车票,才能售票;售票后,自动更新已定票人数。        B:输入日期、班次、退票数量;退票后,自动更新已定票人数。 (3)数据组织及存储要求 1)班次信息、车票信息分别存储在2个文件(.txt)中,增、删、改、查、浏览等操作都是对文件操作; 2)班次、车票的信息在内存中要求使用泛型集合方式组织,具体实现类型自定。 (4)测试数据要求:存储班次信息及车票信息的两个文件,至少各有10条数据(不同班次、不同售票日期)。

2、 概要设计

2.1功能模块设计

1、数据库设计:

设计两张表,一个用于存储班次信息,另一个用于存储车票信息。

确定数据库的结构,包括字段和索引的设计。

使用SQL语句对数据库进行增删改查。

 

 

2、班次信息管理模块:

设计班次信息界面,提供增删改查班次信息的功能。

实现班次信息的增删改查操作,通过SQL语句操作对数据库进行更新。

需要验证输入的班次信息的合法性。

3、路线查询模块:

设计界面,提供按班次号、起点站、终点站查询路线的功能。

实现按班次号、起点站、终点站查询路线的功能,通过文件操作从数据库中检索符合条件的班次信息并显示到界面中。

4、售票统计模块:

设计总界面,提供统计指定日期的全部班次售票数量的功能。

实现统计指定日期的全部班次售票数量的功能,通过文件操作从数据库中获取符合日期条件的班次信息并计算已售票数量。

5、售票和退票模块:

设计界面,提供售票和退票功能的输入界面。

实现售票和退票功能,根据输入的日期、班次、票数量,进行剩余票量的验证和更新已售票数量的操作。

系统功能模块图:如图2-1所示

 

图2-1车票管理系统功能模块图

各个类图如图所示:

Trip类图如图2-2所示

图2-2

Ticket类图如图2-3所示:

 

图2-3

2.2 系统流程

班次信息管理流程图如2-4图所示:

 

图2-4

3. 详细设计

3.1 算法思路

这个系统采用三层架构(MVC)模式,这样做的好处是模块管理清晰,逻辑结构也符合实际情况,能够提供良好的代码结构和分离关注点的能力,提高系统的可扩展性、可维护性和可重用性,同时也促进开发效率。

班次信息管理模块类(Trip):

  - 班次信息数据库(schedules)

  方法:

  - 浏览班次信息(selectCondition):

- 从班次信息数据库中读取并显示所有班次信息

- 要是什么条件都不输入,则输出全部的班次信息,要是输入对应的条件,则根据条件输对应车次信息

  - 增加班次信息(addTrip):

    - 接收新的班次信息作为参数

    - 将新的班次信息添加到班次信息数据库

  - 修改班次信息(updateTrip):

    - 接收要修改的班次号和新的班次信息作为参数

    - 在班次信息数据库中找到对应班次号的班次信息并更新为新的班次信息

  - 删除班次信息(deleteTrip):

    - 接收要删除的班次号作为参数

- 在班次信息数据库中找到对应班次号的班次信息并删除

车票信息管理模块(Ticket):

方法:

  - 统计指定日期的全部班次售票数量(countTicketsByDate):

    - 接收日期作为参数

    - 在班次信息数据库中查找符合日期条件的班次信息,并计算已售票数量

    - 返回统计结果

- 售票功能(sellTicket):

    - 接收日期、班次和预购票数量作为参数

    - 在车票信息数据库中找到对应日期和班次的车票信息

    - 验证剩余车票数量是否足够

    - 如果足够,更新已售票数量

    - 返回售票结果

  - 退票功能(refundTicket):

    - 接收日期、班次和退票数量作为参数

    - 在车票信息数据库中找到对应日期和班次的车票信息

    - 更新已售票数量,增加退票数量

    - 返回退票结果

系统模块构架如图所示:

 

 

4、小细节

1、在实体类我用的时间类型是Date,在涉及到时间字段的时候,这个类型输出的时间是系统规定的,对用户不友好,因此要进行时间格式的转化

做法很简单,就是在涉及时间的参数是在它的前面加上这个注解:

@DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date date;

2、在设计多表查询时,要用到 mybatis 强大重要的结果映射 类resultMap。

        resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的数千行代码。ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。

就好比在这个课设题目中,我要在两张表里抽取某些字段出来,这时就用到了resultMap

resultMap就可以这样配置,属性column 时绑定数据库表的字段,property属性是实体类字

段,通过这个resultMap就可以进行数据映射了

<resultMap id="TripMap" type="com.zst.pojo.Trip">
        <!-- 班次表 -->
        <result column="classes" property="classes"/>
        <result column="start_time" property="startTime"/>
        <result column="start_station" property="startStation"/>
        <result column="end_station" property="endStation"/>
        <result column="travel_time" property="travelTime"/>
        <result column="capacity" property="capacity"/>
       
        <!-- 车票表 -->
       <association property="ticket" javaType="com.zst.pojo.Ticket">
           <result column="sold_tickets" property="soldTickets"/>
       </association>

    </resultMap>

在SQL语句就得这么写了,这个多表查询是通过classes来查的

<select id="selectByCondition" resultMap="TripMap" parameterType="java.util.Map">

        select s.classes,s.start_time,s.start_station,s.end_station,s.travel_time,s.capacity,t.sold_tickets
        from schedules s, tickets t
        where
        s.classes = t.classes
       
    </select>
@Test
    public void select() throws ParseException {
        SqlSession session = MybatisUtils.getSession();
        TripMapper ticketMapper = session.getMapper(TripMapper.class);
        
        List<Trip> tripList = ticketMapper.listTrips();
        
        tripList.stream().forEach(System.out::println);
    }

4、总结

这个只是为了应付课设的完成,并没有在其中把每个细节做到完美,就是在车票的方面,过期的车票啊,没有能做到过期自动销毁,过期不能买票的功能,还有弹窗的方式只是用了Ajax的自带弹窗,没有优化好,做这个笔记只是以此来记录一下这个过程。

要是有小伙伴也遇到这个相关的课设就可以找我交流一下,项目含金量不高,但应对大一的课设是游刃有余的了。

最终效果图

 

 

 源代码链接:https://github.com/suzimoyyds/tickets.giticon-default.png?t=N5F7https://github.com/suzimoyyds/tickets.git

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ssm电子投票管理系统是一种基于Spring+SpringMVC+MyBatis框架的课设项目,主要用于实现在线投票功能。该系统的设计目的是为了方便投票的组织者进行选举管理,并提供一个便捷的投票平台给参与投票的用户。 系统的功能主要包括用户管理、投票管理和统计分析。 用户管理方面,该系统需要实现用户注册、登录和权限管理等功能。用户可以通过注册账号和登录系统来参与投票活动,并根据不同的用户角色来确定其在系统中的权限。 投票管理方面,系统可以实现创建投票、编辑投票、发布投票和投票管理等功能。投票创建者可以根据需要设置投票的标题、截止时间和候选人选项等信息,可以随时修改和删除投票。发布投票后,用户可以在规定的时间内进行投票。 统计分析方面,该系统可以提供投票结果的统计和分析功能。投票结束后,系统可以自动计算并展示每个候选人的得票数和占比,还可以生成统计图表供用户查看。 此外,系统还可以提供一些额外的功能,如验证用户的唯一性、防止重复投票、提供投票详情页面和投票结果页面等。同时,系统也应该考虑到对用户隐私的保护,确保投票结果的安全性和准确性。 总的来说,ssm电子投票管理系统是一个功能完善、操作简便的投票平台。通过该系统的实现,可以有效提高投票的效率和准确性,方便组织者进行选举管理,并为用户提供一个方便参与投票的平台。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值