java实现航班信息查询管理系统

Java实现航班信息查询管理系统攻略

系统概述

航班信息查询管理系统是管理机场航班信息的系统,它可以提供航班信息的查询、添加、修改和删除等功能。该系统使用Java语言进行开发,采用MVC架构,使用MySQL数据库存储数据。

系统需求

该系统具备以下功能:

  1. 前端页面展示所有航班信息。
  2. 管理员登录,可添加、修改和删除航班信息。
  3. 普通用户不需要登录,可查询航班信息。
  4. 支持根据出发地、目的地、日期等条件查询航班信息。

开发流程

系统开发的主要流程如下:

  1. 设计数据库表结构。
  2. 搭建项目框架,使用Maven管理依赖。
  3. 使用Spring Boot框架进行开发,搭建Controller、Service和Dao层。
  4. 实现前端展示和用户操作页面。
  5. 对系统进行测试和调试。
  6. 部署系统运行。

代码实现

1. 配置数据源

使用Spring Boot框架,配置数据源相关信息和MySQL驱动:

spring.datasource.url=jdbc:mysql://localhost:3306/flight_management?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

2. 建立实体类

建立对应的Flight实体类,与数据库表t_flight相对应:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "t_flight")
public class Flight {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String flightNo;

    @Column(nullable = false)
    private String departure;

    @Column(nullable = false)
    private String arrival;

    @Column(nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date departureTime;

    @Column(nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date arrivalTime;

    @Column(nullable = false)
    private Integer economySeats;

    @Column(nullable = false)
    private Integer businessSeats;

    @Column(nullable = false)
    private Double economyPrice;

    @Column(nullable = false)
    private Double businessPrice;

    @Column(nullable = false)
    private String status;

    private String notes;

}

3. 建立DAO层

编写对应的FlightDAO接口,继承JpaRepository接口,实现数据的增删改查:

public interface FlightDAO extends JpaRepository<Flight, Long> {

    Page<Flight> findByDepartureLikeAndArrivalLikeAndDepartureTimeBetween(
            String departure, String arrival, Date departureTimeStart, Date departureTimeEnd, Pageable pageable);

    Page<Flight> findByDepartureLikeAndArrivalLikeAndDepartureTimeBetweenAndStatus(
            String departure, String arrival, Date departureTimeStart, Date departureTimeEnd, String status, Pageable pageable);

}

4. 建立Service层

建立对应的FlightService接口,实现业务逻辑的功能:

public interface FlightService {

    void addFlight(Flight flight);

    void updateFlight(Long id, Flight flight);

    void deleteFlight(Long id);

    Flight getFlight(Long id);

    Page<Flight> searchFlight(String departure, String arrival, Date departureTimeStart, Date departureTimeEnd, String status, Pageable pageable, boolean isAdmin);

}

5. 建立Controller层

建立对应的FlightController接口,实现前端页面的接口:

@RestController
@RequestMapping("/api/flight")
public class FlightController {

    @Autowired
    private FlightService flightService;

    @PostMapping("/")
    public ResultVO addFlight(@RequestBody Flight flight) {
        flightService.addFlight(flight);
        return ResultVOUtil.success();
    }

    @PutMapping("/{id}")
    public ResultVO updateFlight(@PathVariable Long id, @RequestBody Flight flight) {
        flightService.updateFlight(id, flight);
        return ResultVOUtil.success();
    }

    @DeleteMapping("/{id}")
    public ResultVO deleteFlight(@PathVariable Long id) {
        flightService.deleteFlight(id);
        return ResultVOUtil.success();
    }

    @GetMapping("/{id}")
    public ResultVO getFlight(@PathVariable Long id) {
        Flight flight = flightService.getFlight(id);
        return ResultVOUtil.success(flight);
    }

    @GetMapping("/")
    public ResultVO searchFlight(@RequestParam(required = false) String departure, @RequestParam(required = false) String arrival,
                                 @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date departureTimeStart,
                                 @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date departureTimeEnd,
                                 @RequestParam(required = false) String status,
                                 @RequestParam(defaultValue = "0") Integer pageNum,
                                 @RequestParam(defaultValue = "5") Integer pageSize,
                                 @SessionAttribute(required = false) User user) {

        boolean isAdmin = false;
        if (user != null) {
            if (user.getRole() == RoleEnum.ADMIN.getCode()) {
                isAdmin = true;
            }
        }
        PageRequest pageable = PageRequest.of(pageNum, pageSize, Sort.Direction.ASC, "departureTime");
        return ResultVOUtil.success(flightService.searchFlight(departure, arrival, departureTimeStart, departureTimeEnd, status, pageable, isAdmin));
    }

}

6. 建立前端页面

实现对应的HTML、CSS和JavaScript文件,实现前端页面展示和用户操作的功能。

示例说明

以下是几个功能的示例说明:

添加航班信息

请求:

POST http://localhost:8080/api/flight/
Content-Type: application/json

{
    "flightNo": "HU011",
    "departure": "北京",
    "arrival": "上海",
    "departureTime": "2021-12-20 14:00:00",
    "arrivalTime": "2021-12-20 16:30:00",
    "economySeats": 100,
    "businessSeats": 20,
    "economyPrice": 1000.00,
    "businessPrice": 2000.00,
    "status": "Unpublished",
    "notes": ""
}

响应:

{
    "code": 0,
    "msg": "成功"
}

查询航班信息

请求:

GET http://localhost:8080/api/flight/?departure=北京&arrival=上海&departureTimeStart=2021-12-20%2000:00:00&departureTimeEnd=2021-12-21%2000:00:00&status=Published&pageNum=0&pageSize=5

响应:

{
    "code": 0,
    "msg": "成功",
    "data": {
        "content": [
            {
                "id": 1,
                "flightNo": "HU011",
                "departure": "北京",
                "arrival": "上海",
                "departureTime": "2021-12-20 14:00:00",
                "arrivalTime": "2021-12-20 16:30:00",
                "economySeats": 100,
                "businessSeats": 20,
                "economyPrice": 1000.0,
                "businessPrice": 2000.0,
                "status": "Published",
                "notes": ""
            }
        ],
        "pageable": {
            "sort": {
                "sorted": true,
                "unsorted": false,
                "empty": false
            },
            "offset": 0,
            "pageSize": 5,
            "pageNumber": 0,
            "unpaged": false,
            "paged": true
        },
        "last": true,
        "totalPages": 1,
        "totalElements": 1,
        "number": 0,
        "size": 5,
        "sort": {
            "sorted": true,
            "unsorted": false,
            "empty": false
        },
        "first": true,
        "numberOfElements": 1,
        "empty": false
    }
}

系统部署

将项目打包为jar包,并在服务器上运行命令:

java -jar flight-management-1.0.0.jar

该命令会在服务器上启动应用,监听8080端口,等待请求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现航班信息查询管理系统 - Python技术站

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

相关文章

  • MyBatis开发Dao层的两种方式实现(原始Dao层开发)

    下面就来详细讲解”MyBatis开发Dao层的两种方式实现(原始Dao层开发)”的完整攻略。 1. 简介 Dao层是指数据访问对象层,负责与数据存储交互,实现数据的增删改查等一系列数据操作。在MyBatis开发中,Dao层有两种实现方式:原始Dao层开发和Mapper接口方式开发。 本文将详细介绍原始Dao层开发的实现流程和具体代码实现。原始Dao层开发是最…

    Java 2023年5月19日
    00
  • Java SSM框架讲解

    一、Java SSM框架讲解 Java SSM框架是指使用Spring + Spring MVC + MyBatis的组合方式来进行Java Web开发的一种框架搭建方式。此框架的优点是可以将三大框架的优点结合起来,实现业务逻辑清晰明了、代码优雅简洁、易于维护等特点。 二、框架搭建步骤 环境搭建 在使用Java SSM框架时,必须要配置好相关环境。首先需要安…

    Java 2023年6月15日
    00
  • Java ArrayList与LinkedList使用方法详解

    Java ArrayList与LinkedList使用方法详解 在Java中,常用的数据结构有ArrayList和LinkedList,这两种结构都可以用来存储一系列的数据。本文将详细讲解这两种结构的使用方法,以及它们之间的区别和适用场景。 ArrayList 基本使用方法 ArrayList是基于动态数组实现的,它的大小可以根据实际存储的元素动态变化。下面…

    Java 2023年5月29日
    00
  • Java Apache Commons报错“JXPathException”的原因与解决方法

    “JXPathException”是Java的Apache Commons类库中的一个异常,通常由以下原因之一引起: 无效的XPath表达式:如果XPath表达式无效,则可能会出现此错误。在这种情况下,需要检查XPath表达式以解决此问题。 无效的对象模型:如果对象模型无效,则可能会出现此错误。在这种情况下,需要检查对象模型以解决此问题。 以下是两个实例: …

    Java 2023年5月5日
    00
  • SpringBoot自定义加载yml实现方式,附源码解读

    首先我们需要了解在SpringBoot中如何读取配置文件。SpringBoot 支持的主配置文件类型有两种: .properties 和 .yml 文件格式。在默认情况下,SpringBoot 会优先读取 .properties 文件,如果同时存在两种格式,.yml 文件会覆盖.properties 文件。 然而,有些时候我们需要动态加载一些配置文件,而这些…

    Java 2023年6月15日
    00
  • java正则表达式实现提取需要的字符并放入数组【ArrayList数组去重复功能】

    针对这个问题,我将分成两个部分进行回答。 第一部分:Java正则表达式实现提取需要的字符并放入数组 基本概念 正则表达式是用于描述字符串模式的一个表达式。可以根据正则表达式来匹配、查找、替换符合特定模式的文本。在 Java 中,正则表达式需要使用java.util.regex包中的类来实现。 正则表达式语法 下面是常用的正则表达式语法: . 匹配任何一个字符…

    Java 2023年5月26日
    00
  • 快速掌握SpringBoot应用的启动入口

    让我来详细讲解一下“快速掌握SpringBoot应用的启动入口”的完整攻略。 1. 确定SpringBoot应用的启动入口 要了解SpringBoot应用的启动入口,我们需要先了解SpringBoot应用的结构。 SpringBoot应用的结构大致如下: – src – main – java – com.example.demo // 代码所在的包名 – …

    Java 2023年5月15日
    00
  • Java数组(Array)最全汇总(中篇)

    Java数组(Array)最全汇总(中篇) 一、概述 本文讲解Java数组的相关知识点,包括定义数组、初始化、数组访问、遍历、数组长度、多维数组等。 二、定义数组 Java数组是一个存储相同类型元素的容器。数组的定义需要指定元素类型和数组大小。 使用以下语法来定义一个数组: dataType[] arrayName; //或者 dataType arrayN…

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