简单的机票预定系统(纯Java)

功能介绍

        通过控制台界面交互,主要实现了乘客购票以及退票流程,管理员对航班信息的管理。

        界面如下:

项目结构介绍

  • 所有文件如下

说明:其中entity包下放了Flight、Order、User三个实体类,Data是整个项目存放的数据(通过ArrayList来存储数据,没有使用数据库)

enumration包下存放了用户vip等级信息相关内容

Main是程序的主入口

service包下是相关业务的实现

util包下是对service中对数据操作的实现(模拟进行持久化),以及其他的一些功能实现

项目代码

Main

主要以switch做了一个选择界面,选的相应功能调用service函数

package main;

import entity.Data;
import service.FlightService;
import service.Impl.FlightServiceImpl;
import service.Impl.OrderServiceImpl;
import service.Impl.UserServiceImpl;
import service.OrderService;
import service.UserService;
import util.Impl.UserUtilImpl;
import util.UserUtil;

import java.util.Scanner;

/**
 * @author 爱看星星的猪
 * @description
 */
//系统的主入口
public class Main {
    static FlightService flightService=new FlightServiceImpl();
    static OrderService orderService=new OrderServiceImpl();
    static UserService userService=new UserServiceImpl();
    static Integer status=Data.getUser().getStatus();
    public static void main(String[] args) {
        //初始化一些数据
        flightService.initFlight();
        userService.initUser();
        Scanner scanner = new Scanner(System.in);
        boolean exit = false;
        while (!exit) {

            System.out.println("********************欢迎使用机票预定系统!************************");
            System.out.println("请选择需要的功能:");
            System.out.println("1.登录   2.注册   3.机票信息添加   4.机票信息管理  5.用户查询航线信息");
            System.out.println("6.用户购票     7.会员等级     8.用户退票      9.退出");
            System.out.println("****************************************************************");
            String input=scanner.next();
            try{
                Integer choice =Integer.valueOf(input);
                switch (choice) {
                    case 1:
                        System.out.println("进入登录功能");
                        userService.login();
                        status=Data.getUser().getStatus();
                        break;
                    case 2:
                        System.out.println("进入注册功能");
                        userService.register();
                        break;
                    case 3:
                        //检查登录状态
                        if (status!=null){
                            if (status.equals(0)){
                                System.out.println("你的账号已被禁用!");
                            } else if (status.equals(2)) {
                                System.out.println("进入机票信息添加功能");
                                flightService.addFlightInfo(1);
                            } else {
                                System.out.println("你没有权限进行操作");
                            }
                        }else {
                            System.out.println("请先登录!");
                        }
                        break;
                    case 4:
                        if (status!=null){
                            if (status.equals(0)){
                                System.out.println("你的账号已被禁用!");
                            } else if (status.equals(2)) {
                                System.out.println("进入机票信息管理功能");
                                flightService.flightManage();
                            } else {
                                System.out.println("你没有权限进行操作");
                            }
                        }else {
                            System.out.println("请先登录!");
                        }
                        break;
                    case 5:
                        if (status!=null){
                            if (status.equals(0)){
                                System.out.println("你的账号已被禁用!");
                            }else {
                                System.out.println("进入用户查询航线信息功能");
                                flightService.findFlight();
                            }
                        }else {
                            System.out.println("请先登录!");
                        }
                        break;
                    case 6:
                        if (status!=null){
                            if (status.equals(0)){
                                System.out.println("你的账号已被禁用!");
                            }else {
                                System.out.println("进入用户购票功能");
                                orderService.buy();
                            }
                        }else {
                            System.out.println("请先登录!");
                        }
                        break;
                    case 7:
                        if (status!=null){
                            if (status.equals(0)){
                                System.out.println("你的账号已被禁用!");
                            }else {
                                System.out.println("进入会员等级功能");
                                userService.showVip();
                            }
                        }else {
                            System.out.println("请先登录!");
                        }
                        break;
                    case 8:
                        if (status!=null){
                            if (status.equals(0)){
                                System.out.println("你的账号已被禁用!");
                            }else {
                                System.out.println("进入用户退票功能");
                                orderService.refund();
                            }
                        }else {
                            System.out.println("请先登录!");
                        }
                        break;
                    case 9:
                        exit=true;
                        break;
                    default:
                        System.out.println("输入不合法,请重新输入!");
                        break;
                }
            }catch (NumberFormatException e){
                System.out.println("请输入正确的数字序号!");
            }

        }
        System.out.println("退出系统!");
    }
}

entity

Flight

航班类:记录航班信息

package entity;

import java.time.LocalDateTime;

/**
 * @author 爱看星星的猪
 * @description
 */
public class Flight {
    private Long flightId;
    private String company;
    private Double price;
    private Integer residueTicket;
    private String startAddress;
    private String endAddress;
    private LocalDateTime startTime;
    private LocalDateTime endTime;

    public Flight(Long id,String company, Double price, Integer residueTicket, String startAddress, String endAddress, LocalDateTime startTime, LocalDateTime endTime) {
        this.flightId=id;
        this.company = company;
        this.price = price;
        this.residueTicket = residueTicket;
        this.startAddress = startAddress;
        this.endAddress = endAddress;
        this.startTime = startTime;
        this.endTime = endTime;
    }
    public Flight(String company, Double price, Integer residueTicket, String startAddress, String endAddress, LocalDateTime startTime, LocalDateTime endTime) {
        this.setFlightId((Long) System.currentTimeMillis());
        this.company = company;
        this.price = price;
        this.residueTicket = residueTicket;
        this.startAddress = startAddress;
        this.endAddress = endAddress;
        this.startTime = startTime;
        this.endTime = endTime;
    }

    public Flight() {
    }


    public Long getFlightId() {
        return flightId;
    }

    public void setFlightId(Long flightId) {
        this.flightId = flightId;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Integer getResidueTicket() {
        return residueTicket;
    }

    public void setResidueTicket(Integer residueTicket) {
        this.residueTicket = residueTicket;
    }

    public String getStartAddress() {
        return startAddress;
    }

    public void setStartAddress(String startAddress) {
        this.startAddress = startAddress;
    }

    public String getEndAddress() {
        return endAddress;
    }

    public void setEndAddress(String endAddress) {
        this.endAddress = endAddress;
    }

    public LocalDateTime getStartTime() {
        return startTime;
    }

    public void setStartTime(LocalDateTime startTime) {
        this.startTime = startTime;
    }

    public LocalDateTime getEndTime() {
        return endTime;
    }

    public void setEndTime(LocalDateTime endTime) {
        this.endTime = endTime;
    }

    @Override
    public String toString() {
        return "Flight{" +
                "flightId=" + flightId +
                ", company='" + company + '\'' +
                ", price=" + price +
                ", residueTicket=" + residueTicket +
                ", startAddress='" + startAddress + '\'' +
                ", endAddress='" + endAddress + '\'' +
                ", startTime=" + startTime +
                ", endTime=" + endTime +
                '}';
    }
}

Order

订单类:记录订单信息

package entity;

import java.time.LocalDateTime;


/**
 * @author 爱看星星的猪
 * @description
 */
public class Order {
    private Long userOrderId;
    private Long userId;
    private  Flight flight;
    private Double cost;
    private LocalDateTime orderTime;
    private Integer status;//0未付款,1已付款,2退款

    public Order() {
    }

    public Order(Long userId, Flight flight, Double cost, LocalDateTime orderTime) {
        this.userOrderId=(Long) System.currentTimeMillis();
        this.userId = userId;
        this.flight = flight;
        this.cost = cost;
        this.orderTime = orderTime;
        this.status = 1;
    }


    public Long getUserOrderId() {
        return userOrderId;
    }

    public void setUserOrderId(Long userOrderId) {
        this.userOrderId = userOrderId;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public Flight getFlight() {
        return flight;
    }

    public void setFlight(Flight flight) {
        this.flight = flight;
    }

    public Double getCost() {
        return cost;
    }

    public void setCost(Double cost) {
        this.cost = cost;
    }

    public LocalDateTime getOrderTime() {
        return orderTime;
    }

    public void setOrderTime(LocalDateTime orderTime) {
        this.orderTime = orderTime;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Order{" +
                "userOrderId=" + userOrderId +
                ", userId=" + userId +
                ", flight=" + flight +
                ", cost=" + cost +
                ", orderTime=" + orderTime +
                ", status=" + status +
                '}';
    }
}

User

用户类:记录用户信息

package entity;

import enumeration.VipEunm;

import java.util.Date;

/**
 * @author 爱看星星的猪
 * @description
 */
public class User {
    private Long userId;
    private String username;
    private String password;
    private Character gender;
    private Integer phone;
    private VipEunm vipEunm;
    private Double cost;
    private Double balance;
    private Integer status;//1可用 0禁用 2管理员
    private String email;

    public User() {
        this.setUserId((Long) System.currentTimeMillis());
    }

    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
        this.userId=(Long) System.currentTimeMillis();
        this.status=1;
        this.vipEunm=VipEunm.NORMAL;
        this.cost=0.0;
        this.balance=5000.0;
    }

    public User(String username, String password, Double cost, Double balance, Integer status) {
        this.userId=(Long) System.currentTimeMillis();
        this.username = username;
        this.password = password;
        this.cost = cost;
        this.balance = balance;
        this.status = status;
    }

    public User(String username, String password, Character gender, Integer phone, VipEunm vipEunm, Double cost, Double balance, Integer status, String email) {
        this.setUserId((Long) System.currentTimeMillis());
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.phone = phone;
        this.vipEunm = vipEunm;
        this.cost = cost;
        this.balance = balance;
        this.status = status;
        this.email = email;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Character getGender() {
        return gender;
    }

    public void setGender(Character gender) {
        this.gender = gender;
    }

    public Integer getPhone() {
        return phone;
    }

    public void setPhone(Integer phone) {
        this.phone = phone;
    }

    public VipEunm getVipEunm() {
        return vipEunm;
    }

    public void setVipEunm(VipEunm vipEunm) {
        this.vipEunm = vipEunm;
    }

    public Double getCost() {
        return cost;
    }

    public void setCost(Double cost) {
        this.cost = cost;
    }

    public Double getBalance() {
        return balance;
    }

    public void setBalance(Double balance) {
        this.balance = balance;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender=" + gender +
                ", phone=" + phone +
                ", vipEunm=" + vipEunm +
                ", cost=" + cost +
                ", balance=" + balance +
                ", status=" + status +
                ", email='" + email + '\'' +
                '}';
    }
}

Data

数据类:以ArrayList保存数据,由util的来操作Data中的数据,其中User对象为当前登录的用户,用来保存登录用户的信息

package entity;

import java.util.ArrayList;

/**
 * @author 爱看星星的猪
 * @description
 */
public class Data {
    //公用数据
    public static ArrayList<Flight> flightArrayList=new ArrayList<>();//航班信息
    public static ArrayList<Order> orderArrayList=new ArrayList<>();//订单信息
    public static ArrayList<User> usersArrayList=new ArrayList<>();//用户信息
    public static User user=new User();//当前用户

    public static ArrayList<Flight> getFlightArrayList() {
        return flightArrayList;
    }

    public static void setFlightArrayList(ArrayList<Flight> flightArrayList) {
        Data.flightArrayList = flightArrayList;
    }

    public static ArrayList<Order> getOrderArrayList() {
        return orderArrayList;
    }

    public static void setOrderArrayList(ArrayList<Order> orderArrayList) {
        Data.orderArrayList = orderArrayList;
    }

    public static ArrayList<User> getUsersArrayList() {
        return usersArrayList;
    }

    public static void setUsersArrayList(ArrayList<User> usersArrayList) {
        Data.usersArrayList = usersArrayList;
    }

    public static User getUser() {
        return user;
    }

    public static void setUser(User user) {
        Data.user = user;
    }

}

enumration

枚举会员等级

package enumeration;

/**
 * @author 爱看星星的猪
 * @description
 */
public enum VipEunm {
    NORMAL(0,0,2000,0.98),
    VIP(1,2000,5500,0.92),
    SVIP(2,5000,12000,0.8),
    SSVIP(3,12000,35000,0.71);
    private Integer level;
    private Integer low;
    private Integer hight;
    private Double discount;

    VipEunm() {
    }

    VipEunm(Integer level, Integer low, Integer hight, Double discount) {
        this.level = level;
        this.low = low;
        this.hight = hight;
        this.discount = discount;
    }

    public Integer getLevel() {
        return level;
    }

    public void setLevel(Integer level) {
        this.level = level;
    }

    public Integer getLow() {
        return low;
    }

    public void setLow(Integer low) {
        this.low = low;
    }

    public Integer getHight() {
        return hight;
    }

    public void setHight(Integer hight) {
        this.hight = hight;
    }

    public Double getDiscount() {
        return discount;
    }

    public void setDiscount(Double discount) {
        this.discount = discount;
    }

    @Override
    public String toString() {
        return "VipEunm{" +
                "等级:" + level +
                ", 消费金额(" + low +
                ", " + hight +
                ", )折扣:" + discount +
                '}';
    }
}

service

Interface

FlightService

处理机票相关操作

package service;

/**
 * @author 爱看星星的猪
 * @description
 */
public interface FlightService {
    void addFlightInfo(int when);//机票信息添加
    void flightManage();//机票信息管理
    void findFlight();//航线查询;
    void initFlight();//初始化航线信息

}
OrderService

处理订单相关操作

package service;

/**
 * @author 爱看星星的猪
 * @description
 */
public interface OrderService {
    void buy();//购票
    void refund();//退票
}
UserService

处理用户相关操作

package service;

/**
 * @author 爱看星星的猪
 * @description
 */
public interface UserService {
    void register();//注册
    void login();//登录
    void showVip();//展示会员等级
    void flushVip();//刷新会员等级
    void initUser();//初始化用户信息

}

impl

FlightServiceimpl

此处涉及到一个日期格式相关的使用,注意LocalDateTime和LocalDate虽然由相同的方法,但是独立的,不可混用。LocalDate通过atStartOfDay()方法可转化为LocalDateTime,通过两次trycatch可以实现输入带0月份和不带0月份的兼容

package service.Impl;

import entity.Data;
import entity.Flight;
import service.FlightService;
import util.FlightUtil;
import util.Impl.FlightUtilImpl;

import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

/**
 * @author 爱看星星的猪
 * @description
 */
public class FlightServiceImpl implements FlightService {
    static FlightUtil flightUtil = new FlightUtilImpl();
    static Scanner scanner = new Scanner(System.in);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
    DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-M-dd");

    //机票信息添加
    @Override
    public void addFlightInfo(int when) {
        System.out.println("请输入航班公司");
        String company = scanner.next();

        Double price = null;
        while (true) {
            System.out.println("请输入机票价格");
            price = scanner.nextDouble();
            if (price > 0) {
                break;
            } else {
                System.out.println("价格需大于0,请重新输入!");
            }
        }

        Integer residueTicket = null;
        while (true) {
            System.out.println("请输入剩余票数");
            residueTicket = scanner.nextInt();
            if (residueTicket > 0) {
                break;
            } else {
                System.out.println("剩余票数需大于0,请重新输入!");
            }
        }

        System.out.println("请输入出发地");
        String startAddress = scanner.next();
        System.out.println("请输入目的地");
        String endAddress = scanner.next();

        LocalDateTime st = null;
        LocalDateTime et = null;
        String startTime = null;
        String endTime = null;
        while (true) {
            try {
                scanner.nextLine();
                System.out.println("请输入起飞时间,格式为年-月-日 时:分(yyyy-MM-dd HH:mm:ss)");
                startTime = scanner.nextLine();
                st = LocalDateTime.parse(startTime, formatter);

                System.out.println("请输入降落时间,格式为年-月-日 时:分(yyyy-MM-dd HH:mm:ss)");
                endTime = scanner.nextLine();
                et = LocalDateTime.parse(endTime, formatter);
                if (et.isAfter(st)) {
                    break;
                } else {
                    System.out.println("降落时间要晚于起飞时间!请重新输入!");
                }
            } catch (DateTimeException e) {
                System.out.println("请输入正确的日期格式!!");
            }
        }

        flightUtil.flightAdd(new Flight(company, price, residueTicket, startAddress, endAddress, st, et));
        //when==1为机票增加时,when!=1为修改操作借用时
        if (when == 1) {
            System.out.println("机票信息增加成功!");
        }
    }

    //机票管理
    @Override
    public void flightManage() {
        System.out.println("请输入要进行的操作:");
        System.out.println("1.机票信息删除  2.机票信息修改");
        Integer choice = scanner.nextInt();
        switch (choice) {
            case 1:
                System.out.println("进入机票信息删除...");
                flightUtil.showFlightALL();

                while (true) {
                    System.out.println("请选择要删除的机票编号");
                    Long id = Long.valueOf(scanner.next());
                    if (flightUtil.deletFlight(id)) {
                        System.out.println("机票信息删除成功!");
                        break;
                    } else {
                        System.out.println("请输入正确的编号!");
                    }
                }

                break;
            case 2:
                System.out.println("进入机票信息修改...");
                flightUtil.showFlightALL();
                while (true) {
                    System.out.println("请选择要修改的机票编号");
                    Long id = Long.valueOf(scanner.next());
                    if (flightUtil.deletFlight(id)) {
                        //先删除再增加
                        addFlightInfo(0);
                        break;
                    } else {
                        System.out.println("请输入正确的编号!");
                    }
                }

                System.out.println("机票信息修改成功!");
                break;
        }
    }

    //航线查询
    @Override
    public void findFlight() {
        System.out.println("请输入出发地:");
        String saddress = scanner.next();
        System.out.println("请输入目的地:");
        String eaddress = scanner.next();
        scanner.nextLine();
        System.out.println("请输入出发时间,格式为年-月-日:");
        String time = scanner.nextLine();
        LocalDateTime st = null;

        try {
            st = LocalDate.parse(time, formatter1).atStartOfDay();//将字符串转化为LocalDate,再转化为LocalDateTime
            flightUtil.find(saddress, eaddress, st);
        } catch (DateTimeException e) {
            try {
                st = LocalDate.parse(time, formatter2).atStartOfDay();
                flightUtil.find(saddress, eaddress, st);
            } catch (DateTimeException e1) {
                System.out.println("日期格式输入不正确,请输入格式为年-月-日!");
            }

        }

    }

    @Override
    public void initFlight() {
        flightUtil.initFlight();
    }
}
OrderServiceimpl
package service.Impl;

import entity.Data;
import entity.Flight;
import entity.Order;
import service.OrderService;
import service.UserService;
import util.Impl.OrderUtilImpl;
import util.OrderUtil;

import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Scanner;

/**
 * @author 爱看星星的猪
 * @description
 */
public class OrderServiceImpl implements OrderService {
    static OrderUtil orderUtil=new OrderUtilImpl();
    static Scanner scanner=new Scanner(System.in);
    DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-M-dd");
    @Override
    public void buy() {
        System.out.println("请输入出发地:");
        String saddress=scanner.next();
        System.out.println("请输入目的地:");
        String eaddress=scanner.next();
        scanner.nextLine();
        System.out.println("请输入出发时间,格式为年-月-日:");
        String time=scanner.nextLine();
        LocalDate st=null;
        ArrayList<Flight> arrayList1=null;

        //匹配MM和M两种格式
        try{
            st= LocalDate.parse(time, formatter1);
            arrayList1=orderUtil.find(saddress,eaddress,st.atStartOfDay());//可购买的列表
        }catch (DateTimeException e){
            try{
                st= LocalDate.parse(time, formatter2);
                arrayList1=orderUtil.find(saddress,eaddress,st.atStartOfDay());//可购买的列表
            }catch (DateTimeException e1){
                System.out.println("日期格式输入不正确,请输入格式为年-月-日!");
            }

        }


        if (arrayList1.size()==0){
            System.out.println("对不起,暂无该航班,试试其他时间吧");
        }else {
            for (int i = 0; i < arrayList1.size(); i++) {
                System.out.println((i+1)+". "+arrayList1.get(i));
            }
            while (true){
                System.out.println("请输入要购买的班次编号:");
                //检查输入
                String indexinput=scanner.next();
                Integer index=Integer.valueOf(indexinput);
                if (index>=1&&index<=arrayList1.size()){
                    //计算价格、余额减少、票数减少、消费额增加、判断会员等级
                    //找到航班信息
                    Flight flight=arrayList1.get(index-1);
                    Double price=flight.getPrice()* Data.getUser().getVipEunm().getDiscount();
                    if (Data.getUser().getBalance()>price){
                        //钱足够,可以买
                        Double balance=Data.getUser().getBalance()-price;
                        Double cost=Data.getUser().getCost()+price;
                        Data.getUser().setBalance(balance);//扣费
                        Data.getUser().setCost(cost);//累计消费额
                        flight.setResidueTicket(flight.getResidueTicket()-1);//票量-1

                        //创建订单
                        orderUtil.addOrder(new Order(Data.getUser().getUserId(),flight,price,LocalDateTime.now()));

                        System.out.println("本次消费共计:"+price+
                                "\n余额:"+balance+
                                "\n出发地:" +flight.getStartAddress()+
                                "\n目的地:" +flight.getEndAddress()+
                                "\n时间:"+flight.getStartTime()+" -- "+flight.getEndTime()
                        );
                        //刷新会员等级
                        UserService userService=new UserServiceImpl();
                        userService.flushVip();
                        System.out.println("当前会员等级为:"+Data.getUser().getVipEunm().getLevel());

                    }else {
                        //钱不够了
                        System.out.println("当前余额不足,请及时充值!");
                    }
                    break;
                }else {
                    System.out.println("你的输入有误,请输入正确的序号");
                }
            }
        }

    }


    @Override
    public void refund() {
        orderUtil.showALLOrder();
        while (true){
            System.out.println("选择你要退款的订单标号");
            //string接受后对输入进行检查
            String inputindex=scanner.next();
            Integer index=Integer.valueOf(inputindex);
            if (orderUtil.checkrefund(index)) {
                orderUtil.refund(index);
                System.out.println("退款已完成!");
                break;
            }else {
                System.out.println("你的输入有误!请输入正确的标号");
            }
        }

    }
}
UserServiceimpl

这里包含了一个正则表达式的知识点

package service.Impl;

import entity.Data;
import entity.User;
import enumeration.VipEunm;
import service.UserService;
import util.Impl.UserUtilImpl;
import util.UserUtil;

import java.lang.invoke.StringConcatFactory;
import java.util.Scanner;

/**
 * @author 爱看星星的猪
 * @description
 */
public class UserServiceImpl implements UserService {
    static UserUtil userUtil=new UserUtilImpl();
    static Scanner scanner = new Scanner(System.in);
    @Override
    public void register() {
        System.out.println("请输入用户名:");
        String name=scanner.next();
        System.out.println("请输入密码:");
        String password=scanner.next();
        String email=null;
        //简单检查邮箱格式
        String reg = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$";
        while (true){
            System.out.println("请输入邮箱:");
            email=scanner.next();
            if (email.matches(reg)) {
                break;
            }else {
                System.out.println("你输入的邮箱格式似乎不正确!请重新输入!");
            }
        }

        System.out.println("正在进行注册.....");

        while (true){
            System.out.println("检查用户名...");
            if (userUtil.checkUsername(name)){//检查用户名
                System.out.println("用户名检查通过!");
                userUtil.insert(new User(name,password,email));//保存用户
                System.out.println("注册成功!");
                break;
            }else {
                System.out.println("用户名已存在,请重新输入!");
                System.out.println("请输入用户名:");
                name=scanner.next();
            }
        }
    }

    @Override
    public void login() {
        System.out.println("请输入用户名:");
        String name=scanner.next();
        System.out.println("请输入密码");
        String password=scanner.next();
        System.out.println(userUtil.login(name, password));//输出登录结果
    }

    @Override
    public void showVip() {
        VipEunm[] vipEunms=VipEunm.values();
        for (VipEunm vipEunm : vipEunms) {
            System.out.println(vipEunm);
        }
        System.out.println("你当前会员是"+Data.getUser().getVipEunm());
    }

    @Override
    public void flushVip() {
        userUtil.flushVip();
        System.out.println("会员等级已刷新!");
    }

    @Override
    public void initUser() {
        userUtil.initUser();
    }

}

util

下面都是对一些数据上操作的具体实现,不过多介绍

Interface

FlightUtil
package util;

import entity.Flight;

import java.time.LocalDateTime;

/**
 * @author 爱看星星的猪
 * @description
 */
public interface FlightUtil {
    void flightAdd(Flight flight);
    void showFlightALL();
    Boolean deletFlight(Long id);
    void find(String saddress, String eaddress, LocalDateTime st);
    void initFlight();
}
OrderUtil
package util;

import entity.Flight;
import entity.Order;

import java.time.LocalDateTime;
import java.util.ArrayList;

/**
 * @author 爱看星星的猪
 * @description
 */
public interface OrderUtil {
    ArrayList<Flight> find(String saddress, String eaddress, LocalDateTime st);
    void addOrder(Order order);
    void showALLOrder();
    boolean checkrefund(Integer index);
    void refund(Integer index);
}
UserUtil
package util;

import entity.User;

/**
 * @author 爱看星星的猪
 * @description
 */
public interface UserUtil {
    void initUser();
    boolean checkUsername(String name);
    void insert(User user);
    String login(String name,String password);
    void flushVip();

}

impl

FlightUtilimpl
package util.Impl;

import entity.Data;
import entity.Flight;
import util.FlightUtil;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;

/**
 * @author 爱看星星的猪
 * @description
 */
public class FlightUtilImpl implements FlightUtil {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
    static ArrayList<Flight> arrayList= Data.getFlightArrayList();

    //增加机票信息
    public void flightAdd(Flight flight){
        arrayList.add(flight);
    }


    //展示全部信息
    @Override
    public void showFlightALL() {
        for (Flight flight : arrayList) {
            System.out.println(flight);
        }
    }

    //删除机票信息
    @Override
    public Boolean deletFlight(Long id) {
        for (Flight flight : arrayList) {
            if (flight.getFlightId().equals(id)){
                arrayList.remove(flight);
                return true;
            }
        }
        return false;
    }

    //用户查询机票
    @Override
    public void find(String saddress, String eaddress, LocalDateTime st) {
        LocalDateTime before=st.minusDays(3);//找到三天前的日期
        LocalDateTime after=st.plusDays(7);//找到7天后的日期
        int index=0;//标记找到的航班数
        for (Flight flight : arrayList) {
            if (flight.getStartAddress().equals(saddress)&&flight.getEndAddress().equals(eaddress)
                    &&flight.getStartTime().isBefore(after)&&flight.getStartTime().isAfter(before)&&flight.getResidueTicket()>0){
                System.out.println(flight);
                index++;
            }
        }
        if (index==0){
            System.out.println("对不起,没有符合你要查找的航线");
        }
    }

    @Override
    public void initFlight() {
        arrayList.add(new Flight(1L,"东方航空",1500.0,200,"常州","武汉",LocalDateTime.parse("2024-03-18 15:19",formatter),LocalDateTime.parse("2024-03-18 16:58",formatter)));
        arrayList.add(new Flight(2L,"东方航空",35000.0,30,"常州","武汉",LocalDateTime.parse("2024-03-18 16:19",formatter),LocalDateTime.parse("2024-03-18 17:58",formatter)));
        arrayList.add(new Flight(3L,"南方航空",1000.0,1,"常州","武汉",LocalDateTime.parse("2024-03-18 17:19",formatter),LocalDateTime.parse("2024-03-18 18:58",formatter)));
        arrayList.add(new Flight(4L,"南方航空",1200.0,112,"常州","武汉",LocalDateTime.parse("2024-03-18 18:19",formatter),LocalDateTime.parse("2024-03-18 19:58",formatter)));
        arrayList.add(new Flight(5L,"吉祥航空",1600.0,16,"北京","武汉",LocalDateTime.parse("2024-04-14 15:19",formatter),LocalDateTime.parse("2024-04-14 16:58",formatter)));
        arrayList.add(new Flight(6L,"吉祥航空",1900.0,20,"北京","武汉",LocalDateTime.parse("2024-04-24 13:19",formatter),LocalDateTime.parse("2024-04-24 16:58",formatter)));
        arrayList.add(new Flight(7L,"春秋航空",3000.0,2,"新疆","武汉",LocalDateTime.parse("2024-04-16 15:16",formatter),LocalDateTime.parse("2024-04-16 16:58",formatter)));
        arrayList.add(new Flight(8L,"春秋航空",800.0,1,"新疆","武汉",LocalDateTime.parse("2024-04-20 14:17",formatter),LocalDateTime.parse("2024-04-20 16:58",formatter)));
    }
}
OrderUtilimpl
package util.Impl;

import entity.Data;
import entity.Flight;
import entity.Order;
import jdk.jfr.DataAmount;
import util.OrderUtil;
import util.UserUtil;

import java.time.LocalDateTime;
import java.util.ArrayList;

/**
 * @author 爱看星星的猪
 * @description
 */
public class OrderUtilImpl implements OrderUtil {
    static ArrayList<Flight> arrayList = Data.getFlightArrayList();
    static ArrayList<Order> orderArrayList=Data.getOrderArrayList();

    @Override
    public ArrayList<Flight> find(String saddress, String eaddress, LocalDateTime st) {
        ArrayList<Flight> arrayList1 = new ArrayList<>();
        for (Flight flight : arrayList) {
            if (flight.getStartAddress().equals(saddress) && flight.getEndAddress().equals(eaddress)
                    && flight.getStartTime().isAfter(st)&&flight.getResidueTicket()>0) {
                arrayList1.add(flight);
            }
        }
        return arrayList1;
    }

    @Override
    public void addOrder(Order order) {
        orderArrayList.add(order);
        System.out.println("订单已生成!");
    }

    @Override
    public void showALLOrder() {
        for (int i = 0; i < orderArrayList.size(); i++) {
            System.out.println((i+1)+". "+orderArrayList.get(i));
        }
    }

    @Override
    public boolean checkrefund(Integer index) {
        index=index-1;
        if ((index)>=0&&(index)<orderArrayList.size()){
            return true;
        }else {
            return false;
        }
    }

    @Override
    public void refund(Integer index) {
        index=index-1;
        Order order=orderArrayList.get(index);
        Double balance= Data.getUser().getBalance()+order.getCost();
        Data.getUser().setBalance(balance);
        System.out.println("退回的消费额是"+order.getCost());
        System.out.println("余额是"+balance);
        Double cost=(Double)(Data.getUser().getCost())- (Double)(order.getCost());
        Data.getUser().setCost(cost);
        System.out.println("当前消费金额为:"+cost);
        order.getFlight().setResidueTicket(order.getFlight().getResidueTicket()+1);
        UserUtil userUtil=new UserUtilImpl();
        userUtil.flushVip();
    }
}
UserUtilimpl
package util.Impl;

import entity.Data;
import entity.User;
import enumeration.VipEunm;
import util.UserUtil;

import java.util.ArrayList;
import java.util.Date;

/**
 * @author 爱看星星的猪
 * @description
 */
public class UserUtilImpl implements UserUtil {
    static ArrayList<User> arrayList= Data.getUsersArrayList();//获取全部用户信息

    @Override
    public void initUser() {
        arrayList.add(new User("admin","111",10000.0,26000.0,2));
        arrayList.add(new User("normal","111",2000.0,50000.0,1));
        arrayList.add(new User("nomoney","111",8000.0,1000.0,1));
        arrayList.add(new User("nono","111",8000.0,1000.0,0));
    }

    //检查用户名
    @Override
    public boolean checkUsername(String name) {
        for (User user : arrayList) {
            if (user.getUsername().equals(name)){//发现相同用户名
                return false;//不通过
            }
        }
        //没有重复用户名,通过
        return true;
    }

    //保存注册用户
    @Override
    public void insert(User user) {
        arrayList.add(user);//保存用户
    }

    //用户登录
    @Override
    public String login(String name, String password) {
        for (User user : arrayList) {
            if (user.getUsername().equals(name)){//查找用户名
                if (user.getPassword().equals(password)){//匹配密码
                    Data.setUser(user);//记录当前登录的用户
                    UserUtil userUtil=new UserUtilImpl();
                    userUtil.flushVip();
                    return "登录成功...";
                }else {
                    return "密码错误!";
                }
            }
        }
        return "用户名不存在!";
    }
    @Override
    public void flushVip() {
        User user= Data.getUser();
        Double cost=user.getCost();
        VipEunm[] vipEunm=VipEunm.values();
        for (VipEunm eunm : vipEunm) {
            if (cost>=eunm.getLow()&&cost<eunm.getHight()){
                user.setVipEunm(eunm);
            }
        }
        if (cost>=35000){
            user.setVipEunm(vipEunm[3]);
        }
    }

}

对java学习程度还有限,存在问题或者优化感谢及时指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值