您的位置:首页 > 其它

吃货联盟订餐系统 类和对象

2017-10-20 22:54 645 查看

运用类和对象实现订餐系统

package chihuo2;

/**
* 我们通过定义类,封装多个相关信息
*
* @author Administrator
*
*/
public class Cai {
public String name; // 菜名
public double price;// 单价
public int population; // 人气值

}


/**
* 订单信息
*
* @author Administrator
*
*/
public class Order {
public int no; // 订单编号
public String customer; // 顾客姓名
public Cai cai; // 复杂类型, 所定的菜。
public int quantity;// 数量
public String address; // 地址
public int hour;// 订餐的时间。
public int status;// 状态 0:未处理 1:已完成

// 属性的初始化。
public double fee = 5; // 运费:总价低于50时收5元运费

public String show() {

StringBuffer buffer = new StringBuffer();
buffer.append(no + "\t");
buffer.append(customer + "\t");
buffer.append(cai.name + "  " + quantity + "份\t");
buffer.append(hour + "\t");
buffer.append(address + "\t");
buffer.append(getAmount() + "\t");
buffer.append(status == 1 ? "已完成" : "未处理");
return buffer.toString();
}

/**
* 计算订单总金额(运费)
*
* @return返回总金额
*/
public double getAmount() {
if (cai == null)
return 0;
double amount = this.quantity * cai.price;
if (amount < 50)
amount += fee;
return amount;
}

}


package chihuo2;

import java.util.Scanner;

/**
* 帮助类(封装一些常用的功能,和业务无关)
*
* @author Administrator
*
*/
public class Helper {
/**
* 获取一个整数
*
* @return msg 提示信息
* @return errorMsg 输入错误后的提示信息
* @return 返回整数
*/
public static int getInteger(String msg, String errorMsg) {
// 首先输出提示信息
System.out.println(msg);

Scanner input = new Scanner(System.in);

while (!input.hasNextInt()) {
// 用掉用户输入的错误值
input.next();
System.out.println(errorMsg);
}
int result = input.nextInt();
return result;
}

/**
* 接收用戶 提示信息,返回一個字符串
*
* @param msg提示信息
* @return
*/
public static String getString(String msg) {
System.out.println(msg);
Scanner input = new Scanner(System.in);
String answer = input.next();
return answer;
}

public static Order[] createNewArray(Order[] oldArray) {
// 判断是否是第一次
if (oldArray == null) {
Order[] newArray = new Order[1];
return newArray;
} else {
Order[] newArray = new Order[oldArray.length + 1];
// 将原始数组中的学员都转入新数组中
for (int i = 0; i < oldArray.length; i++) {
newArray[i] = oldArray[i];
}
return newArray;

}
}
}


public class OrderingUtil {
public static Cai[] cais = null;
public static Order[] orders = null;

/**
* 订单管理数据初始化
*/
public static void initial() {

initialCais();
initialOrders();
}

/**
* 开始业务
*/
public static void start() {
// 初始化
initial();

String answer = "-1";
// 循环做业务
do {
boolean result = startMenu();
if (result == false) {
return;
}
answer = Helper.getString("输入0 返回");

} while (answer.equals("0"));

}

/**
* 显示操作菜单
*/
public static void showMenu() {
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("************************");

}

/**
* 开始选择菜单 是否要詢問用戶是否繼續
*/
public static boolean startMenu() {
showMenu();
int choose = Helper.getInteger("请选择", "请重新选择");

switch (choose) {
case 6:
System.out.println("谢谢使用,欢迎下次光临");
return false;
case 5:
System.out.println("***我要点赞***");
praise();
break;
case 4:
delete();
break;
case 3:
sign();
break;
case 2:
display();
break;
case 1:
add();
break;
default:
System.out.println("输入了非法值");
break;
}
return true;
}

/**
* 删除订单
*/
public static void delete() {
// 1.获取订单号,根据订单号查找订单
int no = Helper.getInteger("请输入订单号", "请重新输入");
Order order = getOrder(no);
if (order == null) {
System.out.println("订单不存在");
return;
}

// 2.判断订单状态(只能删除已完成的订单)
if (order.status != 1) {
System.out.println("未完成的订单不能删除!");
return;
}

// 3.修改订单数组(移走订单后,订单数组要收缩)
deleteOrder(order);

System.out.println("订单删除成功!");
}

/**
* 删除指定订单,收缩数组
*
* @param order
*            要删除的订单
*/
public static void deleteOrder(Order order) {

// 创建新的订单数组
Order[] temp = new Order[orders.length - 1];

// 拷贝
int i = 0; // i代表新数组中元素的下标
// 依次循环遍历原始数组,遇到null是跳过 一个一个拷贝到temp中
for (int j = 0; j < orders.length; j++) {
if (orders[j].no == order.no) {
continue;
}

temp[i] = orders[j];
i++; // 切记只有当拷贝了一个order过来,i才增加

}
// 用新订单数组替换原来的订单数组
orders = temp;

}

/**
* 签收订单
*/
public static void sign() {
int no = Helper.getInteger("请输入订单号", "请重新输入");

// 根据订单号查找订单
Order order = getOrder(no);
if (order == null) {
System.out.println("订单不存在");
return;
}
// 判断用户民是否一致
String name = Helper.getString("请输入顾客名称");
if (name.equals(order.customer) == false) {
System.out.println("顾客名输入错误");
return;
}

// 更改订单状态
order.status = 1;
System.out.println("订单签收成功");
}

/**
* 根据订单编号查找订单
*
* @param no
*            要查找的订单编号
* @return 对应的订单,如果订单不存在,返回null
*/
public static Order getOrder(int no) {
for (int i = 0; i < orders.length; i++) {
if (orders[i].no == no) {
return orders[i];
}
}

// 如果运行到本行代码,程序都没有结束,说明没有和次订单对应的订单
return null;
}

/**
* 我要点餐
*/
public static void add() {
System.out.println("**********我要订餐***********");
// 1.显示所有的菜品
showAllCais();
// 2.收集订单信息
Order order = getOrderInfo();

// 3. 将订单添加到订单数组中, 并生成订单号
int no = addOrder(order);

// 4. 显示订单详情,包含订单号。

}

/**
* 添加订单到订单数组
*
* @param order
*            要添加的订单信息
* @return 返回新订单的订单号
*/
public static int addOrder(Order order) {
// last最后一个first第一个
Order lastOrder = orders[orders.length - 1];

// 新订单编号
int newNo = lastOrder.no + 1;
order.no = newNo; // 用新生成的订单号;

// 扩展订单初始
orders = Helper.createNewArray(orders);

// 将新订单放到最后一位
orders[orders.length - 1] = order;

return newNo;
}

public static Order getOrderInfo() {
Order order = new Order();

order.customer = Helper.getString("请输入你的姓名:");
int num = Helper.getInteger("请选择要点的菜品", "请重新输入");
order.cai = cais[num - 1];

int quantity = Helper.getInteger("请问要点多少份?", "请重新输入");
order.quantity = quantity;

int hour = Helper.getInteger("请问什么时候送到?", "请重新输入");

order.hour = hour;

String address = Helper.getString("地址是?");
order.address = address;

return order;
}

public static void showAllCais() {
// 1.输出标题
System.out.println("序号\t菜名\t单价\t点赞数");

StringBuffer buffer = null; // 声明变量
// 2. 循环显示菜的信息
for (int i = 0; i < cais.length; i++) {
// 实例化buffer
buffer = new StringBuffer();
buffer.append((i + 1) + "\t");
buffer.append(cais[i].name + "\t");
buffer.append(cais[i].price + "\t");
buffer.append(cais[i].population + "\t");
System.out.println(buffer.toString());

}

}

/**
* 显示餐袋(顾客姓名不为空)
*/
public static void display() {
System.out.println("查看餐袋");
System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t地址\t总金额\t状态");
// 遍历所有的订单 顾客信息如果为空 转入下一行
for (int i = 0; i < orders.length; i++) {
if (orders[i].customer == null) {
continue;
}
System.out.println(orders[i].show());

}

}

/**
* 订单数据初始化
*/
public static void initialOrders() {
orders = new Order[2];

orders[0] = new Order();
orders[0].address = "东莞庄";
orders[0].no = 1;
orders[0].cai = cais[0];
orders[0].quantity = 2;
orders[0].customer = "张三";
orders[0].hour = 3;
orders[0].status = 1;

orders[1] = new Order();
orders[1].address = "东莞庄一横路123";
orders[1].no = 2;
orders[1].cai = cais[1];
orders[1].quantity = 3<
ac07
/span>;
orders[1].customer = "李四";
orders[1].hour = 12;
orders[1].status = 0;

}

/**
* 菜的数据初始化
*/
public static void initialCais() {
cais = new Cai[3]; // 创建数组

cais[0] = new Cai(); // 创建第一个菜
cais[0].name = "鱼香肉丝";
cais[0].population = 0;
cais[0].price = 20;

cais[1] = new Cai();
cais[1].name = "红烧带鱼";
cais[1].population = 0;
cais[1].price = 12;

cais[2] = new Cai();
cais[2].name = "蔬菜";
cais[2].population = 0;
cais[2].price = 22;

}

/**
* 点赞系统
*/
public static void praise() {
// 显示菜品信息
showAllCais();

// 输入要点赞的菜品编号
int praiseNum = Helper.getInteger("请选择您要点赞的菜品编号:", "输入错误,请重新输入。");
cais[praiseNum - 1].population++;
System.out.println("点赞成功!");
}
}


public class Test {

public static void main(String[] args) {
OrderingUtil.start();
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string 对象 class