zoukankan      html  css  js  c++  java
  • 点餐系统

    这个项目是对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小功能没有实现,有兴趣的可以玩玩

  • 相关阅读:
    jq绑定on事件无效
    数字以0补全
    redis常用操作
    mysql数据操作日常
    centos端口映射
    centos7防火墙操作
    mysql5.7order by问题
    centos无法上网解决方法
    面试题
    ztree 获取子节点所有父节点的name的拼接
  • 原文地址:https://www.cnblogs.com/juddy/p/12011883.html
Copyright © 2011-2022 走看看