大数据学习——Java项目实战-吃货联盟订餐系统

吃货联盟订餐系统

  • 项目需求
  • 项目环境准备
  • 项目覆盖技能点
  • 阶段划分
  • 难点分析
    • 使用数组对象保存订单信息
    • 访问订单信息
    • 删除订单信息
    • 计算订单的总金额
  • 项目实现思路
    • 数据初始化
    • 实现菜单切换
    • 实现查看餐袋
    • 实现我要订餐
    • 实现签收订单
    • 实现删除订单
    • 实现我要点赞
  • 代码展示

项目需求

现今已进入网络时代,人们的日常生活已离不开网络,如网上购物、看新闻、交友等。“只要点点手指,就能送餐上门”,网上订餐越来越受到都是年轻人的青睐。先要求开发一个网上订餐系统,需要实现我要订餐、查看餐袋、签收订单、删除订单、我要点赞和退出系统6个功能。项目运行结果如下所示:
欢迎使用“吃货联盟订餐系统”
***************************************************、
1、我要订餐
2、查看餐袋
3、签收订单
4、删除订单
5、我要点赞
6、退出系统
****************************************************、

项目环境准备

完成“吃货联盟订餐系统”,对于开发环境的要求如下:
开发工具:MyEclipse,JDK(我用的是IDEA和JDK1.8.0_241)
开发语言:java

项目覆盖技能点

程序基本概念:程序、变量、数据类型
流程控制:顺序、选择、循环、跳转语句
数组

阶段划分

第一阶段:分析数据主体(重难点)
第二阶段:分析并完成整体框架(重难点)
第三阶段:分析并完成退出功能
第四阶段:分析并完成订餐功能
第五阶段:分析并完成查看餐袋功能
第六阶段:分析并完成签收订单功能
第七阶段:分析并完成删除功能(重难点)
第八阶段:分析总完成我要点赞功能

难点分析

使用数组对象保存订单信息

根据本项目的需求分析可知,每条订单的信息都包括订餐人姓名、选择菜名及份数、送餐时间、送餐地址、订单状态、总金额,并且会有多条订单信息,可以使用数组来保存多条相同类型的信息。定义6个分组分别保存订单的订餐人姓名、选择的菜品及份数、送餐时间、送餐地址、订单状态、总金额,各数组中下标相同的元素组成一条订单信息。

访问订单信息

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

删除订单信息

若数组中下标为delld的元素虚删除,后面的元素则依次前移一位,即后一位的数据覆盖前一位的数据。

计算订单的总金额

本项目中,在接收到订单的菜品编号和份数之后,通过“菜品编号-1”得到该菜品单价的保存位置,再利用“单价*份数”公式计算出预定菜品的总金额。同时,按“菜品名+份数”格式,使用“+”运算符将菜品名称和预定份数用字符串保存。

项目实现思路

数据初始化

(1)创建OrderingMgr类,在main()方法定义6个数组分别存储6类订单信息:订单人姓名(name)、选择菜品信息(dishMegs)、送餐时间(times)、送餐地址(addresses)、订单状态(states)、总金额(sumPrice)。
(2)创建3个数组,用来存储3中菜品的名称、单价和点赞数等信息。

实现菜单切换

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

实现查看餐袋

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

实现我要订餐

为用户显示系统中提供的菜品信息,获得订餐人信息,形成订单。每条订单包含如下信息:
(1)订餐人姓名:要求用户输入。
(2)选择菜品及份数:显示3个公选择菜品的序号、名称、单价、点赞数,提示用户输入要选择的菜品序号及份数。
(3)送餐时间:当天10:00-20:00件整点送餐,要求用户输入10~20商务整数,输入有误,重新输入。
(4)送餐地址:要求用户输入。
(5)状态:订单的当前状态。订单有两种状态,0为已预订(默认状态),1为已完成(订单已签收)。
(6)总金额:订单总金额。总金额=菜品单价*份数+送餐费。其中,当单订单单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。

实现签收订单

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

实现删除订单

我们可以删除系统中处于“已完成”状态的订单,具体要求如下:
(1)接收要删除的订单序号。
(2)如果指定订单的状态为“已完成”且数组下标值为用户输入的订单序号减1,执行删除操作。
(3)如果指定订单的状态为“已预订”且数组下标值为用户输入的订单序号减1,不能删除。
执行删除操作,其他情况给出相应提示信息。
分步实现以下功能:
(1)查找订单序号相符、订单名称不为空,且状态为“已完成”的订单。
(2)执行删除该序号订单的操作,即后一位元素覆盖前一位元素,最后一位清空。
(3)如果指定订单的状态是“已预订”,则不允许删除。

实现我要点赞

选择执行“我要点赞”菜单项,界面显示菜品序号、菜品名、单价、点赞数,提示用户输入要点赞的菜品序号。

代码展示

import java.util.Scanner;
public class Chihuo {
    public static void main(String[] args) {
        final double NO_SEND_MONEY = 80;
        String[] dishes = {"东坡肉", "地锅鸡", "水煮鱼", "佛跳墙"};
        double[] prices = {45, 38, 28, 99};
        int[] like = {11, 22, 33, 44};
        int choseNum;
        String[][] bills = new String[1024][];
        String name = null;
        int pcs = 0;//份数
        int time = 0;
        String address = null;
        String status = null;
        Scanner sc = new Scanner(System.in);
        int chose = 0;
        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("请选择:");
            chose = sc.nextInt();
            switch (chose) {
                case 1:
                    System.out.println("****我要订餐****");
                    System.out.print("请输入订餐人姓名:");
                    name = sc.next();
                    System.out.println("序号\t菜品\t单价");
                    for (int i = 0; i < dishes.length; i++) {
                        System.out.println(i + 1 + "\t" + dishes[i] + "\t" + prices[i] + "元");
                    }
                    do {
                        System.out.print("请选择您要点的菜品编号:");
                        choseNum = sc.nextInt();
                        if (choseNum > 0 && choseNum <= dishes.length) {
                            break;
                        } else {
                            System.out.println("您的输入有误,重新输入!");
                        }
                    } while (true);
                    do {
                        System.out.print("请选择您需要的份数");
                        pcs = sc.nextInt();
                        if (pcs > 0) break;
                        System.out.println("份数不能小于0,重新输入!");
                    } while (true);
                    do {
                        System.out.print("请输入送餐的时间(10点至20点整点送餐):");
                        time = sc.nextInt();
                        if (time >= 10 && time <= 20) break;
                        System.out.println("输入有误,重新输入!");
                    } while (true);
                    System.out.print("请输入送餐地址:");
                    address = sc.next();
                    System.out.print("订餐成功!");
                    System.out.print("您订的是:" + dishes[choseNum - 1]);
                    System.out.print("送餐时间:" + time + "点");
                    double dishPrice = prices[choseNum - 1] * pcs;
                    int sendMoney = 0;
                    if (dishPrice < NO_SEND_MONEY) {
                        sendMoney = 6;
                    }
                    double totalPrice = dishPrice + sendMoney;
                    System.out.print("餐费:" + dishPrice + "元,送餐费" + sendMoney + "元,总计" + totalPrice + "元");
                    //插入订单,遍历订单,如果为空,则插入
                    for (int i = 0; i < bills.length; i++) {
                        if (bills[i] == null) {
                            bills[i] = new String[7];
                            bills[i][0] = name;
                            bills[i][1] = dishes[choseNum - 1] + " " + pcs + "份";
                            bills[i][2] = time + "点";
                            bills[i][3] = address;
                            bills[i][4] = totalPrice + "元";
                            bills[i][5] = "已预订";
                            break;
                        }
                    }
                    System.out.print("输入0返回");
                    chose = sc.nextInt();
                    break;
                case 2:
                    System.out.println("****查看餐袋****");
                    System.out.println("序号\t订餐人\t餐品信息\t送餐时间\t送餐地址\t总金额\t订单状态");
                    for (int i = 0; i < bills.length; i++) {
                        if (bills[i] == null) {
                            break;
                        }
                        System.out.println(i + 1 + "\t" + bills[i][0] + "\t" + bills[i][1] + "\t" + bills[i][2] + "\t" + bills
                                [i][3] + "\t" + bills[i][4] + "\t" + bills[i][5]);
                    }
                    System.out.print("输入0返回");
                    chose = sc.nextInt();
                    break;
                case 3:
                    System.out.println("****签收订单****");
                    if (bills[0] == null) {
                        System.out.println("订单为空,不可签收!");
                        System.out.print("输入0返回:");
                        chose = sc.nextInt();
                        break;
                    }
                    System.out.println("序号\t订餐人\t餐品信息\t总金额\t订单状态");
                    int i = 0;
                    for (; i < bills.length; i++) {
                        if (bills[i] == null) {
                            break;
                        }
                        System.out.println(i + 1 + "\t" + bills[i][0] + "\t" + bills[i][1] + "\t" + bills[i][4] + "\t" + bills[i][5]);
                    }
                    int signNum;
                    do {
                        System.out.println("请选择要签收的订单编号:");
                        signNum = sc.nextInt();
                        if (signNum > 0 && signNum <= i) break;
                        System.out.println("订单不存在,重新输入!!");
                    } while (true);
                    if (bills[signNum - 1][5].equals("已完成"))
                        System.out.println("订单已经完成签收,不需要重复签收");
                    else
                        bills[signNum - 1][5] = "已完成";
                    System.out.print("输入0返回:");
                    chose = sc.nextInt();
                    break;
                case 4:
                    System.out.println("****删除订单****");
                    if (bills[0] == null) {
                        System.out.println("订单为空,不可删除!");
                        System.out.print("输入0返回:");
                        chose = sc.nextInt();
                        break;
                    }
                    System.out.println("序号\t订餐人\t餐品信息\t总金额\t订单状态");
                    int k = 0;
                    for (; k < bills.length; k++) {
                        if (bills[k] == null) {
                            break;
                        }
                        System.out.println(k + 1 + "\t" + bills[k][0] + "\t" + bills[k][1] + "\t" + bills[k][4] + "\t" + bills[k][5]);
                    }
                    int delNum;
                    do {
                        System.out.println("请选择要删除的订单编号:");
                        delNum = sc.nextInt();
                        if (bills[0] == null) break;
                        {

                        }
                        if (delNum > 0 && delNum <= k) break;
                        System.out.println("订单不存在,重新输入!!");
                    } while (true);

                    //未完成的订单不能删除
                    //删除订单需要考虑选择的订单删除后,后面的订单需要前移
                    if (!bills[delNum - 1][5].equals("已完成"))
                        System.out.println("未完成的订单不能删除!");
                    else {
                        for (int s = delNum - 1; bills[s] != null; s++) {
                            if (delNum == bills.length) {
                                bills[delNum - 1] = null;
                            } else {
                                bills[s] = bills[s + 1];
                            }
                        }
                        System.out.println("删除完成!");
                    }
                    System.out.print("输入0返回");
                    chose = sc.nextInt();
                    break;
                case 5:
                    System.out.println("****我要点赞****");
                    System.out.println("序号\t菜品\t\t单价\t点赞数");
                    for (int j = 0; j < dishes.length; j++) {
                        System.out.println(j + 1 + "\t" + dishes[j] + "\t" + prices[j] + "元" + "\t" + like[j]);
                    }
                    int likeNum;
                    do {
                        System.out.println("请选择要点赞的菜品:");
                        likeNum = sc.nextInt();
                        if (likeNum > 0 && likeNum <= like.length) break;
                        System.out.println("没有这个菜品,请重新输入!");
                    } while (true);
                    like[likeNum - 1]++;
                    System.out.println("谢谢点赞");
                    System.out.print("输入0返回");
                    chose = sc.nextInt();
                    break;
            }
        } while (chose == 0);
        System.out.println("谢谢使用,欢迎下次光临!");
    }
}

输出结果:
大数据学习——Java项目实战-吃货联盟订餐系统_第1张图片

你可能感兴趣的:(大数据,java)