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

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

案例覆盖的技能点
    (1)理解程序基本概念——程序、变量、数据类型。
    (2)会使用顺序、选择、循环、跳转语句编写程序。
    (3)会使用数组。

难点分析
    1、 使用数组对象保存订单信息
        (1)根据本项目的需求分析可知,每条订单的信息都包括订餐人姓名、选择菜品及份数、送餐时间、送餐地址、订单状态、总金额,并且会有多条订单信息,可以使用数组来保存多条相同的信息。
        (2)定义6个数组分别保存订单的订餐人姓名、选择的菜品及份数、送餐时间、送餐地址、订单状态、总金额。
        (3)各数组中下标相同的元素组成一条订单信息。
            该系统最多接收4条订单。
                String[] names = new String[4];        //保存订餐人姓名
                String[] dishMegs = new String[4];    //保存所选信息,包括菜品及份数
                int[] times = new int[4];            //保存送餐时间
                String[] addresses = new String[4];    //保存送餐地址
                int[] states = new int[4];            //保存订单状态:0表示已预订,1表示已完成
                double[] sumPrices = new double[4];    //保存订单的总金额

2、访问订单信息
        访问各数组中第i+1条订单信息可采用如下方式
        订餐人姓名:names[i]
        所选菜品信息:dishMegs[i]
        送餐时间:times[i]
        送餐地址:addresses[i]
        订单状态:states[i]
        订单的总金额:sumPrices[i]

3、 删除订单信息
        (1)若数组中下标为delID的元素需删除,后面的元素则依次前移一位,即后一位的数据覆盖前一位的数据,可采用如下方式实现:
            for(int j =delId;j<names.length-1;j++){
                names[j] = names[j+1];
                dishMegs[j] = dishMegs[j+1];
                times[j] = times[j+1];
                addresses[j] = addresses[j+1];
                states[j] = states[j+1];
                sumPrices[j] = sumPrices[j+1];
            }
        (2)依次实现后,会将最后一个元素置为空。

4、 计算订单的总金额
        (1)本项目中在,在接收到订单的菜品编号和份数之后,通过“菜品编号-1”得到该菜品单价的保存位置,再利用“单价*份数”公式计算出预定菜品的总金额。
        (2)同时,按“菜品名+份数”格式,使用“+”运算符将菜品名称和预定份数用字符串保存,如“红烧带鱼2份”。
            //用户点菜
            System.out.println("请选择您要点的菜品编号:");
            int chooseDish = input.nextInt();
            System.out.println("请选择您需要的份数:");
            int number = input.nextInt();
            String dishMeg = dishNames[chooseDish-1]+" "+number+"份";
            double sumPrice = price[chooseDish-1]*number;
        (3)利用if选择结构或三元运算符“?:”判断订单的总金额是否够50元。如果订单总金额够50元,免费送餐5元;否则加收5元送餐费。
            //计算送餐费
            double deliCharge = (sumPrice>=50)?0:5;

项目实现思路
    1、 数据初始化
        (1)创建OrderingMgr类,在main()方法中定义6个数组分别存储6类订单信息:
            订餐人姓名(names)、选择菜品信息(dishMegs)、送餐时间(times)、送餐地址(addresses)、订单状态(states)、总金额(sumPrices)。
        (2)创建3个数组,用来存储3种菜品的名称、单价和点赞数等信息。
            //供选择的菜品信息
            String[] dishNames = {"红烧带鱼","鱼香肉丝","时令鲜蔬"};    //菜品名称
            double[] prices = {38.0,20.0,10.0};                    //菜品单价
            int[] praiseNums = new int[3];                        //点赞数
        (3)初始化2条订单信息。
            //初始化第一条订单信息
            names[0] = "张晴";
            dishMegs[0] = "红烧带鱼 2份";
            times[0] = 12;
            addresses[0] = "天成路207号";
            sumPrices[0] = 76.0;
            states[0] = 1;
            
            //初始化第二条订单信息
            names[1] = "张晴";
            dishMegs[1] = "鱼香肉丝 2份";
            times[1] = 18;
            addresses[1] = "天成路207号";
            sumPrices[1] = 45.0;
            states[1] = 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。

代码展示
package cn.bdqn.demo1;
 
import java.util.Scanner;
 
public class DingCan {
    public static void main(String[] args) {
        // 吃货联盟订餐系统
 
        Scanner input = new Scanner(System.in);
 
        // 订餐系统相关信息
        String[] names = new String[4]; // 保存订餐人姓名
        String[] dishMegs = new String[4]; // 保存所选信息,包括菜品及份数
        int[] times = new int[4]; // 保存送餐时间
        String[] addresses = new String[4]; // 保存送餐地址
        int[] states = new int[4]; // 保存订单状态:0表示已预订,1表示已完成
        double[] sumPrices = new double[4]; // 保存订单的总金额
 
        // 供选择的菜品信息
        String[] dishNames = { "红烧带鱼", "鱼香肉丝", "时令鲜蔬" }; // 菜品名称
        double[] prices = { 38.0, 20.0, 10.0 }; // 菜品单价
        int[] praiseNums = new int[3]; // 点赞数
 
        // 初始化第一条订单信息
        names[0] = "张晴";
        dishMegs[0] = "红烧带鱼 2份";
        times[0] = 12;
        addresses[0] = "天成路207号";
        sumPrices[0] = 76.0;
        states[0] = 1;
 
        // 初始化第二条订单信息
        names[1] = "张晴";
        dishMegs[1] = "鱼香肉丝 2份";
        times[1] = 18;
        addresses[1] = "天成路207号";
        sumPrices[1] = 45.0;
        states[1] = 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:
                // 我要订餐
                // 判断数组中哪个位置为空,从此处开始插入数据,若没有位置为空,则提示“餐袋已满”
                int numNull = 0;
                for (int i = 0; i < names.length; i++) {
                    if (names[i] == null) {
 
                        System.out.println("--新增订单--");
                        // (1)订餐人姓名
                        System.out.println("请输入订餐人姓名:");
                        names[i] = input.next();
 
                        // (2)选择菜品及份数
                        System.out.println("序号\t名称\t\t单价\t点赞数");
                        for (int j = 0; j < dishNames.length; j++) {
                            System.out.println((j + 1) + "\t" + dishNames[j]+ "\t\t" + prices[j] + "\t"+ praiseNums[j]);
                        }
                        System.out.println("请选择菜品序号:");
                        int caiNum = input.nextInt();
                        System.out.println("选择份数:");
                        int fenNum = input.nextInt();
                        dishMegs[i] = dishNames[caiNum - 1] + " " + fenNum
                                + "份";
 
                        // (3)送餐时间
                        System.out.println("请选择送餐时间(10:00-20:00整点送餐):");
                        int time0 = input.nextInt();
                        while (time0 < 10 || time0 > 20) {
                            System.out.println("输入错误,请重新输入:");
                            time0 = input.nextInt();
                        }
                        times[i] = time0;
 
                        // (4)送餐地址
                        System.out.println("请输入送餐地址:");
                        addresses[i] = input.next();
 
                        // (5)状态(新增时,订单状态均为默认状态0)
                        states[i] = 0;
 
                        // (6)总金额 =
                        // 菜品单价*份数+送餐费。其中,当单笔订单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。
                        double caiPrices = prices[caiNum - 1] * fenNum;
                        if (caiPrices >= 50) {
                            sumPrices[i] = caiPrices;
                        } else {
                            sumPrices[i] = caiPrices + 5;
                        }
                        break;
                    } else {
                        numNull = i;
                    }
                }
                if (numNull == names.length - 1) {
                    System.out.println("餐袋已满,请及时处理。");
                }
                break;
            case 2:
                // 查看餐袋
                System.out.println("--查看餐袋--");
                System.out
                        .println("序号\t\t订餐人\t\t餐品信息\t\t\t送餐时间\t\t送餐地址\t\t\t总金额\t\t订单状态");
                for (int i = 0; i < names.length; i++) {
                    if (names[i] != null) {
                        String time = times[i] + "点";
                        String sumPrice = sumPrices[i] + "元";
                        String state;
                        if (states[i] == 0) {
                            state = "已预订";
                        } else {
                            state = "已完成";
                        }
                        System.out.println((i + 1) + "\t\t" + names[i] + "\t\t"+ dishMegs[i] + "\t\t" + time + "\t\t"+ addresses[i] + "\t\t" + sumPrice + "\t\t"+ state);
                    }
                }
                break;
            case 3:
                // 签收订单
                System.out.println("--签收订单--");
                System.out.println("请选择需要签收的订单序号:");
                int orderNum = input.nextInt();
                for (int i = 0; i < names.length; i++) {
                    if (orderNum == i + 1) {
                        if (names[i] != null) {
                            if (states[i] == 0) {
                                states[i]=1;
                                System.out.println("订单签收完成!");
                            } else {
                                System.out.println("你选择的订单已完成,不能再次签收订单!");
                            }
                        }
                    }
                }
                break;
            case 4:
                // 删除订单
                System.out.println("--删除订单--");
                System.out.println("请选择需要删除的订单序号:");
                int orderNum1 = input.nextInt();
                for (int i = 0; i < names.length; i++) {
                    if (orderNum1 == i + 1) {
                        if (names[i] != null) {
                            if (states[i] == 0) {
                                System.out.println("该订单仍在预定状态,不能删除!");
                            } else {
                                names[i]=null;                                
                                System.out.println("订单删除成功!");
                            }
                        }
                    }
                    if(names[i]==null){
                        for (int j = i; j < names.length - 1; j++) {
                            names[j] = names[j + 1];
                            dishMegs[j] = dishMegs[j + 1];
                            times[j] = times[j + 1];
                            addresses[j] = addresses[j + 1];
                            sumPrices[j] = sumPrices[j + 1];
                            states[j] = states[j + 1];
                        }
                    }
                }
                break;
            case 5:
                // 我要点赞
                System.out.println("--我要点赞--");
                System.out.println("序号\t名称\t\t单价\t点赞数");
                for (int j = 0; j < dishNames.length; j++) {
                    System.out.println((j + 1) + "\t" + dishNames[j]+ "\t\t" + prices[j] + "\t"+ praiseNums[j]);
                }
                System.out.println("请选择点赞的菜品序号:");
                int caiZanNum = input.nextInt();
                for (int j = 0; j < dishNames.length; j++) {
                    if(caiZanNum==j+1){
                        praiseNums[j]+=1;
                    }
                }
                System.out.println("点赞后的菜品展示:");
                System.out.println("序号\t名称\t\t单价\t点赞数");
                for (int j = 0; j < dishNames.length; j++) {
                    System.out.println((j + 1) + "\t" + dishNames[j]+ "\t\t" + prices[j] + "\t"+ praiseNums[j]);
                }
                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——吃货联盟订餐系统(基础知识)相关推荐

  1. 10、Java——吃货联盟订餐系统(基础知识)

    目录 项目需求 项目环境准备 案例覆盖的技能点 难点分析 1. 使用数组对象保存订单信息 2.访问订单信息 3. 删除订单信息 4. 计算订单的总金额 项目实现思路 1. 数据初始化 2. 实现菜单切 ...

  2. Java吃货联盟订餐系统1.3-面向对象+I/O流

    吃货联盟订餐系统 author:luckyboy! version:1.3 知识储备:变量.数据类型.选择结构.循环结构.数组.面向对象.集合和I/O流 吃货联盟订餐系统概述 现在的互联网时代,足不出 ...

  3. Java吃货联盟订餐系统

    OrderingUtil类 import java.util.Scanner;public class OrderingUtil {Scanner input = new Scanner(System ...

  4. 29、Java——吃货联盟订餐系统(对象+XML)

    ​ ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

  5. 11、Java——吃货联盟订餐系统(对象+数组)

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

  6. 37、Java——吃货联盟订餐系统(JDBC+MySQL+Apache DBUtils)

    ✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进.

  7. Java基础 吃货联盟订餐系统

    Java基础 吃货联盟订餐系统 需求分析 系统概述 搭建框架 编写功能 项目总结 需求分析 系统概述 "只要动动手指,就能送餐上门",网上订餐深受现代人青睐,现开发一个网上订餐系统 ...

  8. Java基础之吃货联盟订餐系统Version1.0

    注意:此项目为刚学完Java基础至数组的入门程序. 吃货联盟订餐系统Version1.0是在数组的基础上完成的一个小项目,由于只是运用数组实现了一些简单的功能, 所以我管它叫Version1.0,即1 ...

  9. Java基础——吃货联盟订餐系统

    吃货联盟订餐系统 刚刚学完java基础入门,主要学习Java基本环境搭建,定义变量.选择结构,循环结构.数组等.本阶段结束尝试接触此次吃货联盟订餐系统,第一次敲这么长的代码,后面多见识见识应该就好了, ...

最新文章

  1. C语言 string.h 中函数的实现
  2. 2运行内存多大_电脑笔记本满血复活之内存升级篇
  3. 14行代码AC_SCU 4440 Rectangle(公式+矩阵对称性)
  4. 深入剖析阿里云推荐引擎——新架构,新体验
  5. 1. 栈和队列的数组实现
  6. web前端到底是什么?有前途吗
  7. Spring学习笔记之AOP配置篇(一) 注解配置
  8. ListView的getFirstVisiblePosition等方法返回的是哪个对象
  9. 遇冷的斗鱼直播,还“斗”得动吗?| 畅言
  10. 指针以及二重指针的理解
  11. SLAM会议笔记(五)LLOAM
  12. About_php_封装函数
  13. 数据库实时同步技术解决方案
  14. 3步快速彻底卸载MySQL
  15. java jvm dump文件_各种获取JVM DUMP的方法
  16. 向日葵android客户端,向日葵安卓3.1客户端教程
  17. Python3 猴子第一天摘下若干个桃子,当即吃了一半..
  18. 图表可视化配色学习——自动提取图片主色调与配色方案(python、pillow、haishoku和seaborn),并生成十六进制颜色编码
  19. 如何提高数据处理中的准确性
  20. android中数据库sql语句删除指定日期或之前之后的数据

热门文章

  1. Derek Sivers:记日记和专题记录的收获(译)
  2. C语言的FILE类型使用
  3. 简单记录下电脑Ubuntu系统卡死后无法正常开机的解救方式
  4. 计算机论文致谢词范文500字,专科论文致谢词范文500字(通用8篇)
  5. (转)去掉office2003盗版五角星的办法
  6. C语言两个按键分别控制两个灯,用C语言模拟楼道灯开关控制程序,两个开关都能控制灯的亮灭...
  7. 戴尔g3数字键盘失灵的情况解决
  8. 老年人全身皮肤瘙痒案
  9. 昨夜一梦,梦醒我的青春
  10. 计算机论文期刊文献,优秀计算机期刊文章参考文献 优秀计算机专著类参考文献有哪些...