功能介绍
通过控制台界面交互,主要实现了乘客购票以及退票流程,管理员对航班信息的管理。
界面如下:
项目结构介绍
- 所有文件如下
说明:其中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学习程度还有限,存在问题或者优化感谢及时指出!