吃货联盟订餐系统(对象+数组)

⛳️项目需求
    (1)现今已经进入网络时代,人们的日常生活已经离不开网络,如网上购物、看新闻、交友等。
    (2)“只要点点手指,就能送餐上门”,网上订餐越来越受到都市年轻人的青睐。
    (3)现要求开发一个网上订餐系统,需要实现我要订餐、查看餐袋、签收订单、删除订单、我要点赞和退出系统6个功能。

⛳️项目环境准备
    (1)开发工具:MyEclipse,JDK1.7。
    (2)开发语言:Java。

⛳️案例覆盖的技能点
    (1)理解程序基本概念——程序、变量、数据类型。
    (2)会使用顺序、选择、循环、跳转语句编写程序。
    (3)会使用数组。
    (4)了解类、对象、方法、私有变量等相关知识。

⛳️难点分析
   ❤️1、 使用数组对象保存订单信息
        (1)根据本项目的需求分析可知,每条订单的信息都包括订餐人姓名、选择菜品及份数、送餐时间、送餐地址、订单状态、总金额,并且会有多条订单信息,可以定义一个Order类,在Order类中将订单的各个信息设置为私有属性,再添加这些属性的有参构造方法以及Get/Set方法。

    private String name;
    private String dishMeg;
    private int time;
    private String address;
    private int state;
    private double sumPrices;
 
    public Order() {
        super();
    }
 
    public Order(String name, String dishMeg, int time, String address,
            int state, double sumPrices) {
        super();
        this.name = name;
        this.dishMeg = dishMeg;
        this.time = time;
        this.address = address;
        this.state = state;
        this.sumPrices = sumPrices;
    }
 
    //添加私有变量的Get/Set方法

        (2)该系统最多接收4条订单,定义一个长度为4的Order[]数组;
                        Order[] orders = new Order[4];       
        (3)初始化两条订单信息,并存入order[]数组中;
            该系统最多接收4条订单。
                orders[0] = new Order("张三", "红烧带鱼 2份", 12, "天成路207号", 1, 76.0);
                orders[1] = new Order("李四", "鱼香肉丝 2份", 12, "天成路207号", 0, 45.0);

    ❤️2、访问订单信息
        访问Order[]数组中第i+1条订单信息可采用如下方式
        订餐人姓名:orders[i].getName()
        所选菜品信息:orders[i].getDishMeg()
        送餐时间:orders[i].getTime()
        送餐地址:orders[i].getAddress()
        订单状态:orders[i].getState()
        订单的总金额:orders[i].getSumPrices()

    ❤️3、 删除订单信息
        若Order[]数组中下标为delID的元素需删除,后面的数据则依次前移一位,即后一位的数据覆盖前一位的数据,可采用如下方式实现:

        if (orders[i] != null) {
            if (orders[i].getState() == 0) {
                System.out.println("该订单仍在预定状态,不能删除!");
                break;
            } else {
                for (int j = i; j < orders.length - 1; j++) {
                    if(orders[j + 1]!=null){
                        orders[j].setName(orders[j + 1].getName());
                        orders[j].setDishMeg(orders[j + 1].getDishMeg());
                        orders[j].setTime(orders[j + 1].getTime());
                        orders[j].setAddress(orders[j + 1].getAddress());
                        orders[j].setSumPrices(orders[j + 1].getSumPrices());
                        orders[j].setState(orders[j + 1].getState());
                    }
                    else{
                        orders[j]=null;
                        break;
                    }
                }
                System.out.println("订单删除成功!");
            }
        }

    ❤️4、 计算订单的总金额
          // 总金额 =菜品单价*份数+送餐费。其中,当单笔订单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。

          double caiPrices = foods[caiNum - 1].getPrice() * fenNum;
          if (caiPrices < 50) {
          caiPrices = caiPrices + 5;
               // orders[i].setSumPrices(caiPrices);
          }
⛳️项目实现思路
   ❤️1、 数据初始化
(1)创建订单类:Order类
        订单属性信息有(加private封装):订餐人姓名(name)、选择菜品信息(dishMeg)、送餐时间(time)、送餐地址(address)、订单状态(state)、总金额(sumPrices)。

(2)创建菜品类:Food类
        订单属性信息有(加private封装):菜品名称(disName)、菜品单价(price)、点赞数(praiseNum)。

(3)创建数组
        // 初始化Order数组
        Order[] orders = new Order[4];
        // 初始化Food数组
        Food[] foods = new Food[3];

(4)添加初始化数据

        // 初始化两条订单Order信息,并存入数组中
        orders[0] = new Order("张三", "红烧带鱼 2份", 12, "天成路207号", 1, 76.0);
        orders[1] = new Order("李四", "鱼香肉丝 2份", 12, "天成路207号", 0, 45.0);

        // 供选择的菜品信息
        foods[0] = new Food("红烧带鱼", 38.0, 0);
        foods[1] = new Food("鱼香肉丝", 20.0, 0);
        foods[2] = new Food("时令鲜蔬", 10.0, 0);

    ❤️2、 实现菜单切换
        执行程序,输出系统主菜单。用户根据显示的主菜单,输入功能编号实现菜单的显示和菜单的切换,具体要求如下:
            (1)当输入1~5时,输出相关的菜单项信息。
            (2)显示“输入0返回”。输入0,则返回主菜单,否则,退出系统,终止程序的运行,输出提示信息“谢谢使用,欢迎下次光临!”。

    ❤️3、 实现查看餐袋
        遍历系统中已有的订单,并逐条显示输出,内容包括序号、订餐人姓名、订餐信息(菜品名和份数)、送餐时间、送餐地址、总金额、订单状态(已预订或已完成)。

    ❤️4、 实现我要订餐
        为用户显示系统中提供的菜品信息,获得订餐人信息,形成订单。每条订单包含如下信息。
            (1)订餐人姓名:要求用户输入。
            (2)选择菜品及份数:显示3个供选择菜品的序号、名称、单价、点赞数,提示用户输入要选择的菜品序号及份数。
            (3)送餐时间:当天10:00~20:00间整点送餐,要求用户输入10~20的整数,输入错误,重新输入。
            (4)送餐地址:要求用户输入。
            (5)状态:订单的当前状态。订单有两种状态,0为已预订状态(默认状态),1为已完成(订单已签收)。
            (6)总金额:订单总金额。总金额 = 菜品单价*份数+送餐费。其中,当单笔订单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。
        各数组中相同下标的数据组成一条订单信息,因此向每个数组相同下标的位置各增加一条数据并保存。

    ❤️5、 实现签收订单
        送餐完成后,要将用户签收订单的状态由“已预订”修改为“已完成”。业务要求如下:
            (1)如果订单的当前状态为:“已预订”且数组下标为用户输入的订单序号减1,就签收。
            (2)如果订单的当前状态为:“已完成”且数组下标为用户输入的订单序号减1,不可签收。
            控制台接收要签收的订单序号。利用for循环结构遍历全部订单,利用if选择结构判断names数组中订餐人姓名是否为null,订单状态是否为已预订且数组下标是指定订单序号减1。
            如果条件成立,该订单的状态值修改为1(即已完成)。

    ❤️6、 实现删除订单
        我们可以删除系统中处于“已完成”状态的订单,具体要求如下:
            (1)接收要删除的订单序号。
            (2)如果指定订单的状态为“已完成”且数组下标值为用户输入的订单序号减1,执行删除操作。
            (3)如果指定订单的状态为“已预订”且数组下标值为用户输入的订单序号减1,不能删除。
        执行删除操作,其他情况给出相应提示信息。

    ❤️7、 实现我要点赞
        选择执行“我要点赞”菜单项。
            (1)界面显示菜品序号、菜品名、单价、点赞数(如为0可不显示),提示用户输入要点赞的菜品序号。
            (2)接收要点赞的菜品序号。
            (3)praiseNums中对应菜品的点赞数加1。
            

⛳️部分代码展示
    ❤️1、订单信息:Order类(全部代码)
package cn.bdqn.demo01;
 
//定义一个订单类
public class Order {
 
    private String name;
    private String dishMeg;
    private int time;
    private String address;
    private int state;
    private double sumPrices;
 
    public Order() {
        super();
    }
 
    public Order(String name, String dishMeg, int time, String address,
            int state, double sumPrices) {
        super();
        this.name = name;
        this.dishMeg = dishMeg;
        this.time = time;
        this.address = address;
        this.state = state;
        this.sumPrices = sumPrices;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getDishMeg() {
        return dishMeg;
    }
 
    public void setDishMeg(String dishMeg) {
        this.dishMeg = dishMeg;
    }
 
    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 getSumPrices() {
        return sumPrices;
    }
 
    public void setSumPrices(double sumPrices) {
        this.sumPrices = sumPrices;
    }
 
}

    ❤️2、菜品:Food类(部分代码)
        逻辑部分参照吃货联盟订餐系统的逻辑改写即可

package cn.bdqn.demo01;
 
import java.util.Scanner;
 
//定义菜品类
public class Food {
    static Scanner input = new Scanner(System.in);
    private String disName;
    private double price;
    private int praiseNum;
 
    public Food() {
        super();
    }
 
    public Food(String disName, double price, int praiseNum) {
        super();
        this.disName = disName;
        this.price = price;
        this.praiseNum = praiseNum;
    }
 
    public String getDisName() {
        return disName;
    }
 
    public void setDisName(String disName) {
        this.disName = disName;
    }
 
    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;
    }
}

    ❤️3、订餐系统:OrderSystem类(全部代码)
package cn.bdqn.demo01;
 
import java.util.Scanner;
 
public class OrderSystem {
 
    public static void main(String[] args) {
 
        Scanner input = new Scanner(System.in);
        // 初始化Order数组
        Order[] orders = new Order[4];
        // 初始化Food数组
        Food[] foods = new Food[3];
 
        // 初始化两条订单Order信息,并存入数组中
        orders[0] = new Order("张三", "红烧带鱼 2份", 12, "天成路207号", 1, 76.0);
        orders[1] = new Order("李四", "鱼香肉丝 2份", 12, "天成路207号", 0, 45.0);
 
        // 供选择的菜品信息
        foods[0] = new Food("红烧带鱼", 38.0, 0);
        foods[1] = new Food("鱼香肉丝", 20.0, 0);
        foods[2] = new Food("时令鲜蔬", 10.0, 0);
 
        // 默认初始值
        boolean flag = true;
        // 循环初始值
        int num = -1;
        do {
            // 输出欢迎菜单
            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("请选择:");
            int choose = input.nextInt();
            switch (choose) {
            case 1:
                // 我要订餐
                Food.myOrder(orders, foods);
                break;
            case 2:
                // 查看餐袋
                Food.lookOrder(orders);
                break;
            case 3:
                // 签收订单
                Food.signOrder(orders);
                break;
            case 4:
                // 删除订单
                Food.delOrder(orders);
                break;
            case 5:
                // 我要点赞
                Food.myLike(orders, foods);
                break;
            case 6:
                // 退出系统
                flag = false;
                break;
            default:
                flag = false;
                break;
            }
            if (flag) {
                System.out.println("输入0返回:");
                num = input.nextInt();
            } else {
 
                break;
            }
        } while (num == 0);
        System.out.println("谢谢使用,欢迎下次光临");
    }
}

 源码链接:吃货联盟订餐系统(Java+对象+数组)
 

你可能感兴趣的:(初学Java,myeclipse,java,servlet)