Java实战之火车票预订系统的实现

Java实战之火车票预订系统的实现

系统概述

本项目实现一个简单的火车票预订系统,用户可以查询车次、座位信息,并进行订票、改签和退票操作。系统采用Java语言和MySQL数据库进行开发,使用Spring Boot框架构建项目,并搭配Thymeleaf模板引擎实现前端页面渲染。

开发环境

本项目所需的开发环境如下:

  • JDK 1.8+
  • Maven 3.6.2+
  • IntelliJ IDEA
  • MySQL 5.7+

数据库设计

本项目需要设计的数据库表包括:

  • t_train 表,存储火车信息
  • t_seat 表,存储座位信息
  • t_order 表,存储订单信息

其中,t_train表的结构如下:

CREATE TABLE `t_train` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '火车ID',
  `train_no` varchar(10) NOT NULL COMMENT '车次',
  `from_station` varchar(20) NOT NULL COMMENT '起始站',
  `to_station` varchar(20) NOT NULL COMMENT '终到站',
  `start_time` varchar(10) NOT NULL COMMENT '发车时间',
  `end_time` varchar(10) NOT NULL COMMENT '到站时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

t_seat表的结构如下:

CREATE TABLE `t_seat` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '座位ID',
  `train_id` int(11) NOT NULL COMMENT '火车ID',
  `seat_type` varchar(10) NOT NULL COMMENT '座位类型',
  `seat_no` int(11) NOT NULL COMMENT '座位号',
  `status` int(11) NOT NULL DEFAULT '0' COMMENT '座位状态:0-未售,1-已售,2-已锁定',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

t_order表的结构如下:

CREATE TABLE `t_order` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单ID',
  `train_id` int(11) NOT NULL COMMENT '火车ID',
  `seat_type` varchar(10) NOT NULL COMMENT '座位类型',
  `seat_no` int(11) NOT NULL COMMENT '座位号',
  `user_name` varchar(20) NOT NULL COMMENT '购票人姓名',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `status` int(11) NOT NULL DEFAULT '0' COMMENT '订单状态:0-未支付,1-已支付',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

实现步骤

本项目的实现步骤如下:

  1. 首先创建Maven项目,并导入所需的依赖。在pom.xml中添加如下代码:
<dependencies>
    <!-- Spring Boot 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Thymeleaf 模板引擎依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <!-- MySQL 驱动依赖 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- MyBatis 依赖 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.2</version>
    </dependency>
</dependencies>
  1. 配置Spring Boot及MyBatis相关配置。创建application.yml文件,并添加如下代码:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/train?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.train.entity
  1. 创建实体类。在src/main/java/com/example/train/entity/包下创建Train、Seat和Order三个实体类,并为其添加对应的属性和getter/setter方法。

  2. 创建DAO层。在src/main/java/com/example/train/mapper/包下创建TrainMapper、SeatMapper和OrderMapper三个接口,并使用MyBatis的注解方式实现对应的CRUD操作。

  3. 创建服务层。在src/main/java/com/example/train/service/包下创建TrainService、SeatService和OrderService三个服务类,并在其中注入DAO层依赖,实现对应的业务逻辑。

  4. 创建控制器层。在src/main/java/com/example/train/controller/包下创建TrainController、SeatController和OrderController三个控制器,并在其中注入服务层依赖,实现相应的请求处理和页面渲染。

  5. 创建前端页面。在src/main/resources/templates/目录下创建对应的HTML文件,使用Thymeleaf模板引擎进行页面渲染。

示例说明

以下是两个示例说明:

查询车次信息

在网站首页,用户可以进行火车查询操作,输入始发站、终点站和出发日期后,系统会返回符合条件的车次信息。

@GetMapping("/trains")
public String queryTrains(Model model, String from, String to, String time) {
    List<Train> trains = trainService.queryTrains(from, to, time);
    model.addAttribute("trains", trains);
    return "train/trains";
}

订购火车票

在车次详情页面,用户可以进行订票操作,选择座位类型和座位编号,提交后系统会生成相应的订单。

@PostMapping("/order")
public String order(User user, @RequestParam("trainId") Integer trainId, @RequestParam("seatType") String seatType,
                    @RequestParam("seatNo") Integer seatNo, Model model) {
    Order order = orderService.bookOrder(user, trainId, seatType, seatNo);
    model.addAttribute("order", order);
    return "order/detail";
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实战之火车票预订系统的实现 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Java Optional实践(小结)

    Java Optional实践(小结) 什么是Java Optional? Optional 是 Java 8 引入的一个新特性,可以作为一种容器,对空值的处理提供更为优美的解决方案。 通常情况下我们在使用 Java 的时候经常会遇到 NullPointerException,就比如一个变量为 null,我们调用其方法时就可能会抛出该异常。而 Optiona…

    Java 2023年5月26日
    00
  • 完美解决java读取大文件内存溢出的问题

    针对Java读取大文件内存溢出的问题,可以采取以下措施解决: 1. 使用BufferedInputStream Java原生的InputStream是逐字节读取的方式,而一次性读取大文件容易导致内存溢出,因此可以使用BufferedInputStream进行读取,其内部会缓存一定量的数据,降低对内存的直接压力。 以下是使用BufferedInputStrea…

    Java 2023年5月20日
    00
  • Tomcat中catalina.out 和 catalina.log的区别和用途详解

    题目:Tomcat中catalina.out 和 catalina.log的区别和用途详解 概述 在Tomcat的日志输出中,经常出现catalina.out和catalina.log两个常用的日志文件,本篇攻略主要介绍这两个日志文件的区别和用途。 区别 在Tomcat中,catalina.out和catalina.log两个日志文件的区别主要表现在以下几个…

    Java 2023年6月2日
    00
  • SpringBoot封装JDBC的实现步骤

    下面是SpringBoot封装JDBC的实现步骤的完整攻略。 1. 添加依赖 首先,在SpringBoot的pom.xml文件中添加jdbc和mysql-connector-java的依赖: <dependency> <groupId>org.springframework.boot</groupId> <artif…

    Java 2023年5月20日
    00
  • java集合框架 arrayblockingqueue应用分析

    Java集合框架ArrayBlockingQueue应用分析 一、ArrayBlockingQueue介绍 ArrayBlockingQueue是Java集合框架中的一种阻塞队列,它是线程安全的有限队列,底层是使用数组实现的,它具有FIFO(先进先出)的特性,支持高效的并发访问。ArrayBlockingQueue是一种固定长度的队列,当队列已满时,会阻塞插…

    Java 2023年5月26日
    00
  • 从搭建Struts2 开发环境说起

    下面我将详细介绍“从搭建Struts2 开发环境说起”的完整攻略。 1. 安装Java环境 在使用 Struts2 开发前,首先需要安装 Java 开发环境。可以到官网下载并安装 JDK,这里我以 JDK 1.8 为例。 下载JDK 1.8安装包,并安装到你的电脑上。 配置JAVA_HOME环境变量,将JDK安装路径添加到PATH环境变量中,以便在命令行中可…

    Java 2023年5月20日
    00
  • JavaScript中浅讲ajax图文详解

    JavaScript中浅讲ajax图文详解 1. 什么是ajax AJAX 的全名是“异步 JavaScript 和 XML”。它是一种用于创建快速动态网页的编程技术。简单来说,它可以使网页通过后台与服务器通信并交换数据,而不需要重新加载整个页面。这就意味着,通过 AJAX,页面可以在不刷新的情况下更新部分内容,这尤其对于 Web 应用程序非常实用。 2. …

    Java 2023年5月23日
    00
  • SpringBoot登录拦截配置详解(实测可用)

    我来为您详细讲解“SpringBoot登录拦截配置详解(实测可用)”的完整攻略。 1. 概述 SpringBoot是一款广受欢迎的Java Web框架,它为用户提供了便利的开发方式和高效的运行效率。在开发Web应用中,安全问题一直都是我们需要重视的问题。为了保护Web应用的安全,我们可以通过登录拦截的方式进行控制。本文将带大家详细讲解SpringBoot的登…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部