这个项目是对java基础知识的一个综合练习,旨在对学习到的零散的java基础知识进行一个整合
重点:思想永远大于代码编写,在编写代码之前一定要有一个清晰的结构
具体实现代码如下:
CustomerTable.java
package com.gcy;
/**
* 具体餐桌的信息
* @author Administrator
*
*/
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class CustomerTable implements Serializable {
private int cid;
private int pcount;
private double totalPrice;
private List<MenuItem> list=new ArrayList<MenuItem>();
public CustomerTable() {
super();
}
public CustomerTable(int cid, int pcount, double totalPrice, List<MenuItem> list) {
super();
this.cid = cid;
this.pcount = pcount;
this.totalPrice = totalPrice;
this.list = list;
}
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public int getPcount() {
return pcount;
}
public void setPcount(int pcount) {
this.pcount = pcount;
}
public double getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(double totalPrice) {
this.totalPrice = totalPrice;
}
public List<MenuItem> getList() {
return list;
}
public void setList(List<MenuItem> list) {
this.list = list;
}
@Override
public String toString() {
return "CustomerTable [cid=" + cid + ", pcount=" + pcount + ", totalPrice=" + totalPrice + ", list=" + list
+ "]";
}
}
MenuItem.java
package com.gcy;
import java.io.Serializable;
/**
* 菜品的详细信息
* @author Administrator
*
*/
public class MenuItem implements Serializable,Cloneable{
private String name;
private double price;
private int id;
public MenuItem() {
super();
}
public MenuItem(String name, double price, int id) {
super();
this.name = name;
this.price = price;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "MenuItem [name=" + name + ", price=" + price + ", id=" + id + "]";
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
程序的入口:
Entrance.java
package com.gcy;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.TreeMap;
import org.omg.CORBA.PUBLIC_MEMBER;
public class Entrance {
public static List<MenuItem> miList = new ArrayList<MenuItem>();
public static CustomerTable ct = new CustomerTable();
public static void main(String[] args) throws CloneNotSupportedException {
showMainMenu();
// 创建餐桌对象
ct.setCid(9);
ct.setPcount(3);
createMenu();
// 创建一个Scanner对象
Scanner input = new Scanner(System.in);
// 为了能够循环输入,在这边需要使用循环
while (true) {
String ins = input.nextLine();
// 创建二级菜单扫描器
Scanner s1 = new Scanner(System.in);
if ("#".equals(ins)) {
showMainMenu();
continue;
}
if ("1".equals(ins)) {
// 显示菜品信息,需要提前准备
showMenu();
// 点菜时,应该可以进行循环而不是点一个就退出
while (true) {
// 获得二级菜单的输入
String miId = s1.nextLine();
// 在点菜成功后需要一个退出的条件
if ("*".equals(miId)) {
System.out.println("点菜成功 ! 返回上级菜单请按#号键");
break;
}
// 获取主菜单中的菜,注意在这菜单编号,和在主菜单中的集合编号不一致,需要处理一下
MenuItem mi = miList.get((new Integer(miId) - 1));
// 复制菜单中菜的对象
MenuItem micopy = (MenuItem) mi.clone();
// 完成点菜,并成功与餐桌建立了联系
ct.getList().add(micopy);
System.out.println("已点" + mi.getName());
}
}
if ("2".equals(ins)) {
// 进行已点菜单的展示
showMenued(ct);
// 点菜时,应该可以进行循环而不是点一个就退出
while (true) {
// 获得二级菜单的输入
String miId = s1.nextLine();
// 在点菜成功后需要一个退出的条件
if ("*".equals(miId)) {
System.out.println("修改已点菜成功 ! 返回上级菜单请按#号键");
break;
}
// 如果想要删除一个菜,例如-3
miId.substring(1);
// 删除已经点的菜
deleteMenued(ct, miId);
showMenued(ct);
}
}
if ("3".equals(ins)) {
// 结账操作
payMenu(ct);
// 获得二级菜单的输入
String miId = s1.nextLine();
// 在点菜成功后需要一个退出的条件
if ("*".equals(miId)) {
System.out.println("结账成功 ! 返回上级菜单请按#号键");
break;
}
}
}
}
/**
* 进行结账
*
* @param ct
*/
public static void payMenu(CustomerTable ct) {
// 首先查看一下已点菜单
System.out.println("结账成功,按#号键返回上一级菜单");
System.out.println("+--------结账---------+");
double totalPrice = 0;
for (MenuItem m : ct.getList()) {
System.out.println(m.getName() + " " + m.getPrice());
totalPrice += m.getPrice();
}
System.out.println(" 合计:" + totalPrice);
System.out.println("+-----------------------+");
}
/**
* 展示主菜单
*
*/
public static void showMainMenu() {
System.out.println("***欢迎进入点餐系统*** ");
System.out.println("---主菜单---");
System.out.println("点菜 1
查看已点 2
结账 3
退出 4
帮助 5
请指示-:");
}
/**
* 创建菜品信息
*/
public static void createMenu() {
MenuItem mi1 = new MenuItem("鱼香肉丝", 28.0, 1);
MenuItem mi2 = new MenuItem("红烧茄子", 25.0, 2);
MenuItem mi3 = new MenuItem("大盘鸡", 68.0, 3);
MenuItem mi4 = new MenuItem("干煸豆角", 18.0, 4);
MenuItem mi5 = new MenuItem("西红柿炒鸡蛋", 35.0, 5);
MenuItem mi6 = new MenuItem("糖醋里脊", 38.0, 6);
// 将菜装入到集合中
miList.add(mi1);
miList.add(mi2);
miList.add(mi3);
miList.add(mi4);
miList.add(mi5);
miList.add(mi6);
}
/**
* 进行菜单展示
*/
public static void showMenu() {
System.out.println("根据菜的编号进行点菜,按#号键返回上一级菜单");
System.out.println("+--------请点菜---------+");
for (MenuItem m : miList) {
System.out.println(m.getId() + " " + m.getName() + " " + m.getPrice());
}
System.out.println("+-----------------------+");
}
/**
* 显示已经点的菜
*
* @param ct
*/
public static void showMenued(CustomerTable ct) {
System.out.println("根据-菜的编号进行删除,按#号键返回上一级菜单");
System.out.println("+--------已点菜---------+");
for (MenuItem m : ct.getList()) {
System.out.println(m.getId() + " " + m.getName() + " " + m.getPrice());
}
System.out.println("+-----------------------+");
}
/**
* 删除已经点的菜
*
* @param miId
* @param ct
*/
public static void deleteMenued(CustomerTable ct, String miId) {
// 从集合中删除一个元素
// 注意在这只能使用普通的for循环,不能使用增强for循环,因为增强for循环不允许进行一边遍历,一边循环
List<MenuItem> itemList = ct.getList();
for (int i = 0; i < itemList.size(); i++) {
// 加入和传进来的miId吻合,就进行删除
MenuItem menuItem = itemList.get(i);
if ((menuItem.getId() + "").equals(miId)) {
itemList.remove(i);
break;
}
}
}
}
还有4,5小功能没有实现,有兴趣的可以玩玩