19、Java——吃货联盟订餐系统(对象+集合)

发布于:2022-12-06 ⋅ 阅读:(388) ⋅ 点赞:(0)

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

🍎个人主页:乐趣国学的博客

🍊个人信条:不迁怒,不贰过。小知识,大智慧。

💞当前专栏:Java案例分享专栏

✨特色专栏:国学周更-心性养成之路

🥭本文内容:Java——吃货联盟订餐系统(对象+集合)

更多内容点击👇

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

目录

⛳️项目需求

⛳️项目环境准备

⛳️案例覆盖的技能点

⛳️难点分析

    ❤️1、 使用集合保存订单信息

    ❤️2、访问订单信息

    ❤️3、 删除订单信息

    ❤️4、 计算订单的总金额

⛳️项目实现思路

    ❤️1、 数据初始化

    ❤️2、 实现菜单切换

    ❤️3、 实现查看餐袋

    ❤️4、 实现我要订餐

    ❤️5、 实现签收订单

    ❤️6、 实现删除订单

    ❤️7、 实现我要点赞

⛳️代码展示

    ❤️1、订单信息:Order类(全部代码)

    ❤️2、菜品:Food类

    ❤️3、操作方法:OrderMethod类

    ❤️4、订餐系统:OrderSystem类


⛳️项目需求

    (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)定义一个两个集合

                               // 初始化Order集合
                                ArrayList<Order> orders=new ArrayList<Order>();
                               // 初始化Food集合
                                ArrayList<Food> foods = new ArrayList<Food>();    
        (3)初始化数据,并存入两个集合中;

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

		// 供选择的菜品信息
		Food fd1 = new Food("红烧带鱼", 38.0, 0);
		Food fd2 = new Food("鱼香肉丝", 20.0, 0);
		Food fd3 = new Food("时令鲜蔬", 10.0, 0);
		foods.add(fd1);
		foods.add(fd2);
		foods.add(fd3);

    ❤️2、访问订单信息

        访问 ArrayList<Order>集合中第i+1条订单信息可采用如下方式
        订餐人姓名:orders.get(i).getName()
        所选菜品信息:orders.get(i).getDishMeg()
        送餐时间:orders.get(i).getTime()
        送餐地址:orders.get(i).getAddress()
        订单状态:orders.get(i).getState()
        订单的总金额:orders.get(i).getSumPrices()

    ❤️3、 删除订单信息

        直接用orders.remove(i);

    ❤️4、 计算订单的总金额

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

    // (6)总金额 = 菜品单价*份数+送餐费。
    // 其中,当单笔订单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。
    double caiPrices = foods.get(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)创建方法类:OrderMethod类
                // 我要订餐
                OrderMethod.myOrder(orders, foods);
                // 查看餐袋
                OrderMethod.lookOrder(orders);
                // 签收订单
                OrderMethod.signOrder(orders);
                // 删除订单
                OrderMethod.delOrder(orders);
                // 我要点赞
                OrderMethod.myLike(orders, foods);

(4)创建测试类:OrderSystem

    ❤️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、 实现删除订单

    ❤️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;
	}
	
	//定义订单类get/set方法
	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;
	}
	
	//定义菜品类get/set方法
	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、操作方法:OrderMethod类

package cn.bdqn.demo01;

import java.util.ArrayList;
import java.util.Scanner;

public class OrderMethod {
	static Scanner input = new Scanner(System.in);

	// 定义一个欢迎菜单方法
	public static void showOrder() {
		// 输出欢迎菜单
		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("-------------------------");
	}

	// 定义一个“我要订餐”的方法
	public static void myOrder(ArrayList<Order> orders, ArrayList<Food> foods) {
		for (int i = 0; i < orders.size(); i++) {

			System.out.println("--新增订单--");
			// (1)订餐人姓名
			System.out.println("请输入订餐人姓名:");
			String orderName = input.next();
			// orders[i].setName(orderName);

			// (2)选择菜品及份数
			System.out.println("序号\t名称\t\t单价\t点赞数");
			for (int j = 0; j < foods.size(); j++) {
				System.out.println((j + 1) + "\t" + foods.get(j).getDisName()
						+ "\t\t" + foods.get(j).getPrice() + "\t"
						+ foods.get(j).getPraiseNum());
			}
			System.out.println("请选择菜品序号:");
			int caiNum = input.nextInt();
			System.out.println("选择份数:");
			int fenNum = input.nextInt();
			String dishFen = foods.get(caiNum - 1).getDisName() + " " + fenNum
					+ "份";

			// (3)送餐时间
			System.out.println("请选择送餐时间(10:00-20:00整点送餐):");
			int orderTime = input.nextInt();
			while (orderTime < 10 || orderTime > 20) {
				System.out.println("输入错误,请重新输入:");
				orderTime = input.nextInt();
				// orders[i].setTime(input.nextInt());
			}

			// (4)送餐地址
			System.out.println("请输入送餐地址:");
			String orderAddress = input.next();
			// orders[i].setAddress(input.next());

			// (5)状态(新增时,订单状态均为默认状态0)
			// orders[i].setState(0);

			// (6)总金额 =
			// 菜品单价*份数+送餐费。其中,当单笔订单金额达到50元时,免收送餐费;否则,需交纳5元送餐费。
			double caiPrices = foods.get(caiNum - 1).getPrice() * fenNum;
			if (caiPrices < 50) {
				caiPrices = caiPrices + 5;
				// orders[i].setSumPrices(caiPrices);
			}

			// 将订餐数据添加到order数组中
			Order od = new Order(orderName, dishFen, orderTime, orderAddress,
					0, caiPrices);
			orders.add(od);
			break;

		}
	}

	// 定义一个“查看餐袋”的方法
	public static void lookOrder(ArrayList<Order> orders) {
		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 < orders.size(); i++) {
			if (orders.get(i) != null) {
				String time = orders.get(i).getTime() + "点";
				String sumPrice = orders.get(i).getSumPrices() + "元";
				String state;
				if (orders.get(i).getState() == 0) {
					state = "已预订";
				} else {
					state = "已完成";
				}
				System.out.println((i + 1) + "\t\t" + orders.get(i).getName()
						+ "\t\t" + orders.get(i).getDishMeg() + "\t\t" + time
						+ "\t\t" + orders.get(i).getAddress() + "\t\t" + sumPrice
						+ "\t\t" + state);
			}
		}
	}

	// 定义一个“签收订单”的方法
	public static void signOrder(ArrayList<Order> orders) {
		System.out.println("--签收订单--");
		System.out.println("请选择需要签收的订单序号:");
		int orderNum = input.nextInt();
		for (int i = 0; i < orders.size(); i++) {
			if (orderNum == i + 1) {
				if (orders.get(i) != null) {
					if (orders.get(i).getState() == 0) {
						orders.get(i).setState(1);
						System.out.println("订单签收完成!");
					} else {
						System.out.println("你选择的订单已完成,不能再次签收订单!");
					}
				}
			}
		}
	}

	// 定义一个“删除订单”的方法
	public static void delOrder(ArrayList<Order> orders) {
		System.out.println("--删除订单--");
		System.out.println("请选择需要删除的订单序号:");
		int orderNum1 = input.nextInt();
		for (int i = 0; i < orders.size(); i++) {
			if (orderNum1 == i + 1) {
				if (orders.get(i)!= null) {
					if (orders.get(i).getState() == 0) {
						System.out.println("该订单仍在预定状态,不能删除!");
						break;
					} else {
						orders.remove(i);
						System.out.println("订单删除成功!");
					}
				}
			}
		}
	}

	// 定义一个“我要点赞”的方法
	public static void myLike(ArrayList<Order> orders, ArrayList<Food> foods) {
		System.out.println("--我要点赞--");
		System.out.println("序号\t名称\t\t单价\t点赞数");
		for (int j = 0; j < foods.size(); j++) {
			System.out.println((j + 1) + "\t" + foods.get(j).getDisName() + "\t\t"
					+ foods.get(j).getPrice() + "\t" + foods.get(j).getPraiseNum());
		}
		System.out.println("请选择点赞的菜品序号:");
		int caiZanNum = input.nextInt();
		for (int j = 0; j < foods.size(); j++) {
			if (caiZanNum == j + 1) {
				foods.get(j).setPraiseNum(foods.get(j).getPraiseNum() + 1);
			}
		}
		System.out.println("点赞后的菜品展示:");
		System.out.println("序号\t名称\t\t单价\t点赞数");
		for (int j = 0; j < foods.size(); j++) {
			System.out.println((j + 1) + "\t" + foods.get(j).getDisName() + "\t\t"
					+ foods.get(j).getPrice() + "\t" + foods.get(j).getPraiseNum());
		}
	}

}

    ❤️4、订餐系统:OrderSystem类

package cn.bdqn.demo01;

import java.util.ArrayList;
import java.util.Scanner;

public class OrderSystem {

	public static void main(String[] args) {

		Scanner input = new Scanner(System.in);
		// 初始化Order集合
		ArrayList<Order> orders=new ArrayList<Order>();
		// 初始化Food集合
		ArrayList<Food> foods = new ArrayList<Food>();

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

		// 供选择的菜品信息
		Food fd1 = new Food("红烧带鱼", 38.0, 0);
		Food fd2 = new Food("鱼香肉丝", 20.0, 0);
		Food fd3 = new Food("时令鲜蔬", 10.0, 0);
		foods.add(fd1);
		foods.add(fd2);
		foods.add(fd3);
		
		// 默认初始值
		boolean flag = true;
		// 循环初始值
		int num = -1;
		do {
			//欢迎菜单
			OrderMethod.showOrder();
			System.out.println("请选择:");
			int choose = input.nextInt();
			switch (choose) {
			case 1:
				// 我要订餐
				OrderMethod.myOrder(orders, foods);
				break;
			case 2:
				// 查看餐袋
				OrderMethod.lookOrder(orders);
				break;
			case 3:
				// 签收订单
				OrderMethod.signOrder(orders);
				break;
			case 4:
				// 删除订单
				OrderMethod.delOrder(orders);
				break;
			case 5:
				// 我要点赞
				OrderMethod.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知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到