吃货联盟订餐系统 类和对象
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(); } }
相关文章推荐
- 吃货联盟订餐系统 java
- Java——吃货联盟订餐系统
- 吃货联盟订餐系统
- Windows系统剖析[2]-系统机制之对象模型
- Android系统的Binder机制之三——服务代理对象(2)
- 关于SQL系统对象
- 足球联赛管理系统所有数据库对象
- Linux内核编程之文件系统-VFS中的目录项对象和文件对象
- 初学java--利用面向对象概念做一个简单的新闻系统
- 第六讲 使用内部对象系统
- 文件系统vs对象存储——选型和趋势
- [译]OOSE第4章:面向对象系统的研发 4.1 Introduction
- 在做系统分析时,用到的几种对象之间的关系
- 系统服务中的Binder对象
- (转)FindFirstChangeNotification,创建一个文件通知对象,该对象用于监视文件系统发生的变化
- 第二讲 ASP.NET系统对象和状态管理(一)
- B/S系统中刷屏后定位到对象
- jeecms系统_自定义对象流程
- js中的Date对象在IOS系统中无法正常工作
- Oracle 用户、对象权限、系统权限