1.订单实体类
public class Order {
private String name;// 订餐人姓名
private String food;// 所选菜品
private int time;// 送餐时间
private String address;// 送餐地址
private int state;// 订单状态
private double sumPrice;// 餐品总金额
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getFood() {
return food;
}
public void setFood(String food) {
this.food = food;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public double getSumPrice() {
return sumPrice;
}
public void setSumPrice(double sumPrice) {
this.sumPrice = sumPrice;
}
// 构造方法
public Order(String name, String food, int time, String address, int state,
double sumPrice) {
super();
this.name = name;
this.food = food;
this.time = time;
this.address = address;
this.state = state;
this.sumPrice = sumPrice;
}
}
2.菜单实体类
public class Food {
private String foodName;//菜品名称
private double price;//单价
private int praiseNum;//点赞数
public String getFoodName() {
return foodName;
}
public void setFoodName(String foodName) {
this.foodName = foodName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getPraiseNum() {
return praiseNum;
}
public void setPraiseNum(int praiseNum) {
this.praiseNum = praiseNum;
}
//构造方法
public Food(String foodName, double price, int praiseNum) {
super();
this.foodName = foodName;
this.price = price;
this.praiseNum = praiseNum;
}
}
3.业务逻辑类
import java.util.Scanner;
public class OrderMgr {
public static final Scanner sc = new Scanner(System.in);
Order[] orders = new Order[5];
Food[] foods = new Food[3];
public void init() {
// 默认菜品并添加到数组
Food food1 = new Food("小炒肉", 11.0, 0);
Food food2 = new Food("红烧肉", 15.0, 0);
Food food3 = new Food("黄焖鸡", 16.0, 0);
foods[0] = food1;
foods[1] = food2;
foods[2] = food3;
// 默认有两条订单
Order order1 = new Order("**涛", "黄焖鸡1份", 12, "幸福大街一号", 0, 22.0);
Order order2 = new Order("**涛", "小炒肉1份", 12, "幸福大街一号", 0, 17.0);
// 添加到数组
orders[0] = order1;
orders[1] = order2;
}
public void start() {
int index;
do {
// 菜单栏
menu();
// 手动输入菜单栏选项
index = sc.nextInt();
while (index > 6 || index <= 0) {
System.out.println("对不起您输入的有误,请重新输入!");
menu();
index = sc.nextInt();
}
switch (index) {
case 1:
// 我要订餐
orderFood(orders, foods);
break;
case 2:
// 查看餐袋
look(orders);
break;
case 3:
// 签收订单
signFor(orders);
break;
case 4:
// 删除订单
delOrder(orders);
break;
case 5:
// 我要点赞
praise(foods);
break;
case 6:
// 退出系统
System.out.println("谢谢使用!");
System.exit(0);
break;
}
while (index != 0) {
System.out.println("输入0返回:");
index = sc.nextInt();
}
} while (index == 0);
}
// 菜单栏
public void menu() {
System.out.println("欢迎使用“吃货联盟订餐系统”");
System.out.println("****************************");
System.out.println("1.我要订餐");
System.out.println("2.查看餐袋");
System.out.println("3.签收订单");
System.out.println("4.删除订单");
System.out.println("5.我要点赞");
System.out.println("6.退出系统");
System.out.println("****************************");
System.out.println("请选择:");
}
// 我要订餐
public void orderFood(Order[] orders, Food[] foods) {
boolean isAdd = false;// true:记录找到一个为空的位置,可以插入,false:没有找到
// 查找要插入的位置
for (int i = 0; i < orders.length; i++) {
if (orders[i] == null) {
isAdd = true;// 记录一下,已经找到一个为空的位置
System.out.println("序号\t菜名\t单价\t点赞数");
for (int j = 0; j < foods.length; j++) {
System.out.println((j + 1) + "\t" + foods[j].getFoodName()
+ "\t" + foods[j].getPrice() + "元\t"
+ foods[j].getPraiseNum() + "赞");
}
// 输入所选餐品编号,份数,订餐人姓名,送餐时间,送餐地址
int foodId;
while (true) {
System.out.print("请选择您要点的菜品编号:");
foodId = sc.nextInt();
if (foodId <= 3 && foodId >= 1) {
break;
} else {
System.out.println("对不起,您输入的有错误请重新输入!");
}
}
int foodNums;
while (true) {
System.out.print("请选择您要点的菜品份数:");
foodNums = sc.nextInt();
if (foodNums > 0) {
break;
} else {
System.out.println("对不起,您输入的有错误请重新输入!");
}
}
System.out.print("请输入订餐人姓名:");
String name = sc.next();
System.out.print("请输入送餐时间(送餐时间为10点到20点准时送餐):");
int time = sc.nextInt();
while (time > 20 || time < 10) {
System.out.println("对不起您输入的时间不在送餐时间范围内,请输入10~20之间的整数:");
time = sc.nextInt();
}
System.out.print("请输入送餐地址:");
String address = sc.next();
// 计算餐费
double sumPrice = foods[foodId - 1].getPrice() * foodNums;
// 送餐费,餐费达到50元免6元送餐费
double deliCharge = sumPrice >= 50 ? 0.0 : 6.0;
// 显示订单信息
System.out.println("订餐成功!");
System.out.println("您订的是:" + foods[foodId - 1].getFoodName()
+ " " + foodNums + "份");
System.out.println("订餐人:" + name);
System.out.println("送餐时间:" + time + "点");
System.out.println("送餐地址:" + address);
System.out.println("餐费:" + sumPrice + ",送餐费:" + deliCharge
+ "元");
System.out.println("订单总金额:" + (sumPrice + deliCharge) + "元");
// 保存数据
String foodName = foods[foodId - 1].getFoodName() + foodNums
+ "份";
Order order = new Order(name, foodName, time, address, 0,
sumPrice);
orders[i] = order;
break;
}
}
// 如果没有找到为空的位置,则提示信息
if (!isAdd) {
System.out.println("对不起,您的餐袋已满!");
}
}
// 查看餐袋
public void look(Order[] orders) {
System.out.println("********查看餐袋********");
System.out.println("序号\t订餐人\t所订餐品信息\t送餐时间\t送餐地址\t\t总金额\t状态");
// 遍历数组
for (int i = 0; i < orders.length; i++) {
if (orders[i] != null) {
String state = orders[i].getState() == 0 ? "已预订" : "已完成";
System.out.println((i + 1) + "\t" + orders[i].getName() + "\t"
+ orders[i].getFood() + "\t" + orders[i].getTime()
+ "点\t" + orders[i].getAddress() + "\t"
+ orders[i].getSumPrice() + "\t" + state);
}
}
}
// 签收订单
public void signFor(Order[] orders) {
System.out.println("********签收订单********");
System.out.println("请输入要签收的订单编号:");
int signOrderId = sc.nextInt();
boolean isFind = false;// 记录这条订单true:表示找到,false:表示没有找到
// 查找这条订单
for (int i = 0; i < orders.length; i++) {
// 找到是已完成;提示不能签收,状态是预定:可以签收
if (orders[i] != null && orders[i].getState() == 1
&& signOrderId == i + 1) {
isFind = true;
System.out.println("对不起,您的订单已经完成签收,不能再次签收!");
break;
} else if (orders[i] != null && orders[i].getState() == 0
&& signOrderId == i + 1) {
isFind = true;
orders[i].setState(1);// 状态值改为已完成状态
System.out.println("订单签收成功!");
break;
}
}
// 没找到订单
if (!isFind) {
System.out.println("对不起,此订单不存在!");
}
}
// 删除订单
public void delOrder(Order[] orders) {
System.out.println("********删除订单********");
System.out.println("请输入要删除的订单号:");
int delId = sc.nextInt();
int delIndex = -1;// 删除订单的下标
boolean isDelFind = false;
// 循环查找这条订单
for (int i = 0; i < orders.length; i++) {
// 找到此订单,已签收:执行删除操作,未签收:输出提示信息
if (orders[i] != null && orders[i].getState() == 1
&& delId == i + 1) {
delIndex = i;
isDelFind = true;
break;
} else if (orders[i] != null && orders[i].getState() == 0
&& delId == i + 1) {
isDelFind = true;
System.out.println("您选择的订单未签收,不能删除!");
break;
}
}
// 未找到此订单
if (!isDelFind) {
System.out.println("对不起,此条订单不存在!");
}
// 执行删除操作
if (delIndex != -1) {
// 循环移位(从前往后)
for (int i = delIndex + 1; i <= orders.length - 1; i++) {
orders[i - 1] = orders[i];
}
// 最后一位清空
orders[orders.length - 1] = null;
System.out.println("订单删除成功!");
}
}
public void praise(Food[] foods) {
// 我要点赞
System.out.println("********我要点赞********");
// 显示所有餐品信息
System.out.println("序号\t菜名\t单价\t点赞数");
for (int j = 0; j < foods.length; j++) {
System.out.println((j + 1) + "\t" + foods[j].getFoodName() + "\t"
+ foods[j].getPrice() + "元\t" + foods[j].getPraiseNum()
+ "赞");
}
// 输入要点赞的餐品序号
int dishId;
while (true) {
System.out.print("请选择您要点的菜品编号:");
dishId = sc.nextInt();
if (dishId <= 3 && dishId >= 1) {
break;
} else {
System.out.println("对不起,您输入的有错误请重新输入!");
}
}
// 该序号的餐品点赞数加一
foods[dishId - 1].setPraiseNum(foods[dishId - 1].getPraiseNum() + 1);
// 显示
System.out.println("点赞成功!");
System.out.println(foods[dishId - 1].getFoodName() + " "
+ foods[dishId - 1].getPraiseNum() + "赞");
}
}
4.测试类
public class Test {
public static void main(String[] args) {
OrderMgr om = new OrderMgr();
om.init();
om.start();
}
}