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

一、任务概述

二、目录结构

java实现航班信息查询管理系统_第1张图片

三、详细代码

JDBC工具类模块

package com.kaikeba.task.task010404.utils;

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.*;
import java.util.List;
import java.util.ResourceBundle;

public class JDBCUtils {
     

    // 1、定义初始变量
    // 1.1 连接对象
    private Connection conn;
    // 1.2 预状态通道对象
    private PreparedStatement ps;
    // 1.3 结果集对象
    private ResultSet resultSet;
    // 1.4 存储受影响的行数数据
    private int count;
    // 1.5 数据库连接地址
    private static final String url;
    // 1.6 用户名
    private static final String username;
    // 1.7 密码
    private static final String password;
    // 1.8 驱动地址
    private static final String driverClassName;
    // 1.9 创建德鲁伊数据池连接对象
    private static final DruidDataSource dds = new DruidDataSource();


    // 加载驱动
    static {
     
        // 读取属性文件数据
        ResourceBundle bundle = ResourceBundle.getBundle("dbConfig");
        driverClassName = bundle.getString("driverClassName");
        url = bundle.getString("url");
        username = bundle.getString("username");
        password = bundle.getString("password");
        // 设置属性
        dds.setUsername(username);
        dds.setPassword(password);
        dds.setUrl(url);
        dds.setDriverClassName(driverClassName);  // 驱动地址
        // dds.setInitialSize(20); // 设置初始连接个数
        dds.setTestWhileIdle(false); // 解决报错【testWhileIdle is true, validationQuery not set】
    }


    /**
     * 获得连接
     *
     * @return 连接对象
     */
    public Connection getConn() {
     
        try {
     
            conn = dds.getConnection();
        } catch (SQLException sqlException) {
     
            sqlException.printStackTrace();
        }
        return conn;
    }

    /**
     * 获得预状态通道对象
     *
     * @param sql sql语句
     * @return 预状态通道对象
     */
    public PreparedStatement getPs(String sql) {
     
        try {
     
            ps = getConn().prepareStatement(sql);
        } catch (SQLException sqlException) {
     
            sqlException.printStackTrace();
        }
        return ps;
    }

    /**
     * 绑定参数
     *
     * @param list 参数列表
     */
    private void params(List<Object> list) {
     
        if (list != null && list.size() > 0) {
     
            for (int i = 0; i < list.size(); i++) {
     
                try {
     
                    ps.setObject(i + 1, list.get(i));
                } catch (SQLException sqlException) {
     
                    sqlException.printStackTrace();
                }
            }
        }
    }


    /**
     * 执行【增删改】操作
     *
     * @param sql  sql语句
     * @param list 参数列表
     * @return 影响行数
     */
    public int update(String sql, List<Object> list) {
     
        getPs(sql);
        params(list);
        try {
     
            count = ps.executeUpdate();
        } catch (SQLException sqlException) {
     
            sqlException.printStackTrace();
        }
        return count;
    }

    /**
     * 执行【查询】操作
     *
     * @param sql  sql语句
     * @param list 参数列表
     * @return 查询得到的数据
     */
    public ResultSet query(String sql, List<Object> list) {
     
        getPs(sql);
        params(list);
        try {
     
            resultSet = ps.executeQuery();
        } catch (SQLException sqlException) {
     
            sqlException.printStackTrace();
        }
        return resultSet;
    }

    /**
     * 查询全部数据
     * @param sql SQL语句
     * @return 全部数据
     */
    public ResultSet queryAll(String sql) {
     
        getPs(sql);
        try {
     
            resultSet = ps.executeQuery();
        } catch (SQLException sqlException) {
     
            sqlException.printStackTrace();
        }
        return resultSet;
    }

    /**
     * 关闭所有资源
     */
    public void closeAll() {
     
        try {
     
            if (resultSet != null)
                resultSet.close();
            if (ps != null)
                ps.close();
            if (conn != null)
                conn.close();
        } catch (SQLException sqlException) {
     
            sqlException.printStackTrace();
        }
    }

}

AirInfo

package com.kaikeba.task.task010404.bean;


public class AirInfo {
     

    // 编号
    private int number;
    // 航班号
    private int flightNumber;
    // 目的地
    private String destination;
    // 起飞日期
    private String date;

    public AirInfo() {
     
    }

    public AirInfo(int number, int flightNumber, String destination, String date) {
     
        this.number = number;
        this.flightNumber = flightNumber;
        this.destination = destination;
        this.date = date;
    }

    public int getNumber() {
     
        return number;
    }

    public void setNumber(int number) {
     
        this.number = number;
    }

    public int getFlightNumber() {
     
        return flightNumber;
    }

    public void setFlightNumber(int flightNumber) {
     
        this.flightNumber = flightNumber;
    }

    public String getDestination() {
     
        return destination;
    }

    public void setDestination(String destination) {
     
        this.destination = destination;
    }

    public String getDate() {
     
        return date;
    }

    public void setDate(String date) {
     
        this.date = date;
    }

    @Override
    public String toString() {
     
        return "AirInfo{" +
                "number=" + number +
                ", flightNumber=" + flightNumber +
                ", destination='" + destination + '\'' +
                ", date=" + date +
                '}';
    }
}

Dao模块

package com.kaikeba.task.task010404.dao;


import com.kaikeba.task.task010404.bean.AirInfo;

import java.util.List;

public interface AirInfoDao {
     

    /**
     * 根据起飞时间查询
     * @param date 起飞时间
     * @return 对应的航班信息
     */
    public List<AirInfo> findByDate(String date);

    /**
     * 根据目的地查询
     * @param destination 目的地
     * @return 对应的航班信息
     */
    public List<AirInfo> findByDestination(String destination);

    /**
     * 查看所有航班
     * @return 所有航班信息
     */
    public List<AirInfo> findAll();

    /**
     * 更新航班信息【根据编号】
     * @param airInfo 航班信息
     * @return 影响行数
     */
    public int update(AirInfo airInfo);

    /**
     * 删除航班信息【根据编号】
     * @param number 编号
     * @return 影响行数
     */
    public int delete(int number);
}

Dao实现类模块

package com.kaikeba.task.task010404.dao.impl;

import com.kaikeba.task.task010404.bean.AirInfo;
import com.kaikeba.task.task010404.dao.AirInfoDao;
import com.kaikeba.task.task010404.utils.JDBCUtils;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class AirInfoDaoImpl extends JDBCUtils implements AirInfoDao {
     

    @Override
    public List<AirInfo> findByDate(String date) {
     
        // 定义SQL查询语句
        String sql = "SELECT number,flightNumber,destination,date FROM air_info WHERE date=?";
        // 声明一个空数组,用于存储查询参数
        List<Object> list = new ArrayList<>();
        // 将查询参数添加到数组中
        list.add(date);
        // 执行查询语句
        ResultSet resultSet = query(sql, list);
        // 声明一个空数组,用于存放查询得到的数据
        List<AirInfo> airInfos = new ArrayList<>();
        try {
     
            while (resultSet.next()) {
     
                // 声明一个 AirInfo 对象
                AirInfo airInfo = new AirInfo();
                // 设置属性
                airInfo.setNumber(resultSet.getInt("number"));
                airInfo.setFlightNumber(resultSet.getInt("flightNumber"));
                airInfo.setDestination(resultSet.getString("destination"));
                airInfo.setDate(resultSet.getString("date"));
                // 将 AirInfo 对象数据添加到列表中
                airInfos.add(airInfo);
            }
        } catch (SQLException throwables) {
     
            throwables.printStackTrace();
        } finally {
     
            // 关闭资源
            closeAll();
        }
        return airInfos;
    }

    @Override
    public List<AirInfo> findByDestination(String destination) {
     
        // 定义SQL查询语句
        String sql = "SELECT number,flightNumber,destination,date FROM air_info WHERE destination=?";
        // 声明一个空数组,用于存储查询参数
        List<Object> list = new ArrayList<>();
        // 将查询参数添加到数组中
        list.add(destination);
        // 执行查询语句
        ResultSet resultSet = query(sql, list);
        // 声明一个空数组,用于存放查询得到的数据
        List<AirInfo> airInfos = new ArrayList<>();
        try {
     
            while (resultSet.next()) {
     
                // 声明一个 AirInfo 对象
                AirInfo airInfo = new AirInfo();
                // 设置属性
                airInfo.setNumber(resultSet.getInt("number"));
                airInfo.setFlightNumber(resultSet.getInt("flightNumber"));
                airInfo.setDestination(resultSet.getString("destination"));
                airInfo.setDate(resultSet.getString("date"));
                // 将 AirInfo 对象数据添加到列表中
                airInfos.add(airInfo);
            }
        } catch (SQLException throwables) {
     
            throwables.printStackTrace();
        } finally {
     
            // 关闭资源
            closeAll();
        }
        return airInfos;
    }

    @Override
    public List<AirInfo> findAll() {
     
        // 声明一个空数组,用于存放查询得到的数据
        List<AirInfo> airInfos = new ArrayList<>();
        // 定义查询SQL语句
        String sql = "SELECT number,flightNumber,destination,date FROM air_info";
        // 执行查询语句,获取查询结果
        ResultSet resultSet = queryAll(sql);
        try {
     
            while (resultSet.next()) {
     
                // 声明一个 AirInfo 对象
                AirInfo airInfo = new AirInfo();
                // 设置属性
                airInfo.setNumber(resultSet.getInt("number"));
                airInfo.setFlightNumber(resultSet.getInt("flightNumber"));
                airInfo.setDestination(resultSet.getString("destination"));
                airInfo.setDate(resultSet.getString("date"));
                // 将 AirInfo 对象数据添加到列表中
                airInfos.add(airInfo);
            }
        } catch (SQLException throwables) {
     
            throwables.printStackTrace();
        } finally {
     
            // 关闭资源
            closeAll();
        }
        return airInfos;
    }

    @Override
    public int update(AirInfo airInfo) {
     
        // 定义SQL查询语句
        String sql = "UPDATE air_info SET flightNumber=?,destination=?,date=? WHERE number=?";
        // 声明一个空数组,用于存储查询参数
        List<Object> list = new ArrayList<>();
        // 将查询参数添加到数组中
        list.add(airInfo.getFlightNumber());
        list.add(airInfo.getDestination());
        list.add(airInfo.getDate());
        list.add(airInfo.getNumber());
        // 执行查询语句
        return update(sql, list);
    }

    @Override
    public int delete(int number) {
     
        // 定义SQL查询语句
        String sql = "DELETE FROM air_info WHERE number=?";
        // 声明一个空数组,用于存储查询参数
        List<Object> list = new ArrayList<>();
        // 将查询参数添加到数组中
        list.add(number);
        // 执行查询语句
        return update(sql, list);
    }
}

视图模块

package com.kaikeba.task.task010404.view;

import com.kaikeba.task.task010404.bean.AirInfo;

import java.util.List;
import java.util.Scanner;

public class Views {
     

    // 声明一个数据输入对象
    Scanner input_in = new Scanner(System.in);

    /**
     * 欢迎语
     */
    public void welcome() {
     
        System.out.println("********* 欢迎使用航班信息管理系统 *********");
    }

    /**
     * 开始菜单
     *
     * @return 服务编号
     */
    public int menu() {
     
        // 提示用户输入服务编号
        System.out.print("请选择操作(1、列出所有航班;2、按起飞时间查询;3、按目的地查询;4、删除航班;5、更新航班;6、离开系统):");
        // 接收用户输入数据,并校验,数据校验正确,将其返回
        return checkData(1, 6);
    }

    /**
     * 校验数据
     *
     * @param start 开始数字
     * @param end   结束数字
     * @return 校验无误的数据
     */
    public int checkData(int start, int end) {
     
        // 声明一个整数变量用于接受用户输入的服务编号
        int num;
        // 开启 while 循环用于校验用户输入数据是否有误
        while (true) {
     
            // 接受用户输入的数据
            String input_text = input_in.nextLine();
            try {
     
                // 将用户输入的数据转换为 int 类型
                num = Integer.parseInt(input_text);
            } catch (Exception e) {
     
                System.out.println("输入有误,请重新输入!");
                continue;
            }
            // 判断用户输入数据是否小于初始值或大于结束值
            if (num < start || num > end) {
     
                System.out.println("输入有误,请重新输入!");
                continue;
            }
            // 返回数据
            return num;
        }
    }

    /**
     * 校验用户输入数据是否可转换为整数类型
     *
     * @return 用户输入数据
     */
    public int checkInt() {
     
        // 声明一个整数变量用于接受用户输入的服务编号
        int num;
        // 开启 while 循环用于校验用户输入数据是否有误
        while (true) {
     
            // 接受用户输入的数据
            String input_text = input_in.nextLine();
            try {
     
                // 将用户输入的数据转换为 int 类型
                num = Integer.parseInt(input_text);
            } catch (Exception e) {
     
                System.out.println("输入有误,请重新输入!");
                continue;
            }
            // 返回数据
            return num;
        }
    }

    /**
     * 输入时间
     *
     * @return 时间
     */
    public String enterDate() {
     
        System.out.print("请输入日期(格式:2021-01-01):");
        return input_in.nextLine();
    }

    /**
     * 输入目的地
     *
     * @return 目的地数据
     */
    public String enterDestination() {
     
        System.out.print("请输入目的地:");
        return input_in.nextLine();
    }

    /**
     * 删除航班
     *
     * @return 航班编号
     */
    public int delete() {
     
        System.out.print("请输入需要删除的航班编号:");
        return checkInt();
    }


    /**
     * 删除成功
     */
    public void deleteSuccess() {
     
        System.out.println("删除成功!");
    }

    /**
     * 删除失败
     */
    public void deleteFail() {
     
        System.out.println("删除失败,请检查航班编号是否存在!");
    }


    /**
     * 更新航班
     *
     * @return AirInfo 对象
     */
    public AirInfo update() {
     
        AirInfo airInfo = new AirInfo();
        System.out.print("请输入需要更新的航班编号:");
        airInfo.setNumber(checkInt());
        System.out.print("请输入新的航班号:");
        airInfo.setFlightNumber(checkInt());
        System.out.print("请输入新的目的地:");
        airInfo.setDestination(input_in.nextLine());
        System.out.print("请输入新的起飞日期(格式:2021-01-01):");
        airInfo.setDate(input_in.nextLine());
        return airInfo;
    }

    /**
     * 更新成功
     */
    public void updateSuccess() {
     
        System.out.println("更新成功!");
    }

    /**
     * 更新失败
     */
    public void updateFail() {
     
        System.out.println("更新失败,请检查航班编号是否存在!");
    }

    /**
     * 退出提示
     */
    public void signOut() {
     
        System.out.println("很高兴为您服务,期待您的再次使用!");
    }


    /**
     * 展示航班信息
     *
     * @param list 航班数据列表
     */
    public void show(List<AirInfo> list) {
     
        System.out.println("\t编号 \t航班号 \t目的地 \t起飞日期");
        if (list.size()>0){
     
            for (AirInfo airInfo : list) {
     
                System.out.println("\t" + airInfo.getNumber() + " \t\t" + airInfo.getFlightNumber() + " \t" + airInfo.getDestination() + " \t" + airInfo.getDate());
            }
        }else {
     
            System.out.println("当前航班信息为空");
        }
    }
}

调度模块

package com.kaikeba.task.task010404;

import com.kaikeba.task.task010404.bean.AirInfo;
import com.kaikeba.task.task010404.dao.AirInfoDao;
import com.kaikeba.task.task010404.dao.impl.AirInfoDaoImpl;
import com.kaikeba.task.task010404.view.Views;

import java.util.List;


public class Main {
     
    public static void main(String[] args) {
     
        // 声明一个视图对象
        Views vs = new Views();
        // 声明一个数据库对象
        AirInfoDao dao = new AirInfoDaoImpl();
        // 声明一个 List 集合用于存放数据
        List<AirInfo> data;
        // 初始化变量
        int number;
        int result;

        // 欢迎语句
        vs.welcome();

        w:
        while (true) {
     
            // 菜单选项,接收用户输入服务编号
            number = vs.menu();
            switch (number) {
     
                // 列出所有航班
                case 1:
                    data = dao.findAll();
                    vs.show(data);
                    break;
                // 按起飞时间查询
                case 2:
                    String date = vs.enterDate();
                    data = dao.findByDate(date);
                    vs.show(data);
                    break;
                // 按目的地查询
                case 3:
                    String destination = vs.enterDestination();
                    data = dao.findByDestination(destination);
                    vs.show(data);
                    break;
                // 删除航班
                case 4:
                    int num = vs.delete();
                    result = dao.delete(num);
                    if (result > 0) {
     
                        vs.deleteSuccess();
                    } else {
     
                        vs.deleteFail();
                    }
                    break;
                // 更新航班
                case 5:
                    AirInfo airInfo = vs.update();
                    result = dao.update(airInfo);
                    if (result > 0) {
     
                        vs.updateSuccess();
                    } else {
     
                        vs.updateFail();
                    }
                    break;
                // 离开系统
                case 6:
                    vs.signOut();
                    break w;
            }
        }
    }
}

四、运行截图

java实现航班信息查询管理系统_第2张图片
java实现航班信息查询管理系统_第3张图片

你可能感兴趣的:(Java学习笔记,java)