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

咚咚咚,咱们的“吃货”第二版本来咯,开森~

“吃货”1.0版本是我们刚学了Java基础入门,在数组的基础上实现的一些小项目,

1.0具体博文>>传送门:https://blog.csdn.net/weixin_42567749/article/details/81014255

接下来就用我们学到的面向对象的思想来初步对我们的“吃货”做一些改进吧!

我们都知道,面向对象思想,它有一特大好处就是把问题看成若干个对象,而这些对象之间各自又是独立的,但又可以灵活的相互配合、协调,从而共同完成整个程序要实现的任务和功能。这更便于后期的维护和升级,这可以说是面向对象的一大福利了!!

来吧!废话不多看,下面看干货:每段代码都有详细的注释,我就不细讲了哈,有问题的可以直接联系我。

代码如下:

首先,我们先定义一个接口类,里面有我们要实现的各个功能:

package im.meetly.oop_ordersys;

//接口类
	public interface UserDao {
	//添加订单信息
	
	public boolean add();
	//查看餐带
	
	public void show();
	
	//签收订单
	public boolean sign();
	
	//删除订单
	public boolean delete();
	
	//点赞
	public void praise();

}

然后定义两个类,来初始化菜品信息

//菜品类
public class Dish {
	//定义菜品属性私有化
	private String dishName;
	private double price;
	private int  praise;
	private int num;
	
	//构造方法<有参无参构造>
	public Dish() {}
	public Dish(String dishName, double price, int praise, int num) {
		this.dishName = dishName;
		this.price = price;
		this.praise = praise;
		this.num = num;
	}
	
	//setter/getter方法
	public String getDishName() {
		return dishName;
	}
	public void setDishName(String dishName) {
		this.dishName = dishName;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public int getPraise() {
		return praise;
	}
	public void setPraise(int praise) {
		this.praise = praise;
	}
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
}
//订单类
public class Order {
	//订单姓名
		private String name;
		//订单电话
		private String tel;
		//订单地址
		private String address;
		//送单时间
		private String time;
		//菜品信息
		private Dish dish;
		//份数
		private int copies;
		//订单状态
		private int status;
		//订单的总金额
		private double price;
		
		public Order() {}

		public Order(String name, String tel, String address, String time,Dish dish, int copies, int status, double price) {
			this.name = name;
			this.tel = tel;
			this.address = address;
			this.time = time;
			this.dish = dish;
			this.copies = copies;
			this.status = status;
			this.price = price;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public String getTel() {
			return tel;
		}

		public void setTel(String tel) {
			this.tel = tel;
		}

		public String getAddress() {
			return address;
		}

		public void setAddress(String address) {
			this.address = address;
		}

		public String getTime() {
			return time;
		}

		public void setTime(String time) {
			this.time = time;
		}

		public Dish getDish() {
			return dish;
		}

		public void setDish(Dish dish) {
			this.dish = dish;
		}

		public int getCopies() {
			return copies;
		}

		public void setCopies(int copies) {
			this.copies = copies;
		}

		public int getStatus() {
			return status;
		}

		public void setStatus(int status) {
			this.status = status;
		}

		public double getPrice() {
			return price;
		}

		public void setPrice(double price) {
			this.price = price;
		}
}

下面是一个管理类

import java.util.Scanner;
/**
 *	管理类   主菜单
 * @author KarlChu
 */
public class Manager {
	//保存菜品信息
	public static Dish [] dishArray=new Dish[3];
	
	//保存订单信息
	public static Order [] orderArray=new Order[4];
	
	//初始化菜单信息
	public void init(){
		Dish dish=new Dish("鱼香肉丝", 38, 15, 1);
		dishArray[0]=dish;
		
		Dish dish1=new Dish("红烧带鱼", 20, 13, 2);
		dishArray[1]=dish1;
		
		Dish dish2=new Dish("时令鲜蔬", 10, 19, 3);
		dishArray[2]=dish2;
	}
	//显示菜品信息
	public void showDish(){
		System.out.println("序号\t\t菜品名称\t\t单价\t\t点赞数");
		for(Dish dish:dishArray){
			System.out.println(dish.getNum()+"\t\t"+dish.getDishName()+"\t\t"+dish.getPrice()+"\t\t"+dish.getPraise());
		}
	}
	
	//显示主界面
	public void show(){
		//调用init方法,显示初始化菜单信息
		init();
		
		UserDao user=new User();
		boolean flag;
		do{
			
			flag=true;//用来结束最外层do-while循环
			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.print("请选择:");
			do{//防止录入的非整数
				Scanner input=new Scanner(System.in);
				if(input.hasNextInt()){//判断录入的是否为整数
					int num=input.nextInt();
					switch(num){
						case		1:
							System.out.println("我要点餐");
							showDish();
							boolean flag1=user.add();
							if(flag1){
								System.out.println("订餐成功!\n");
							}else{
								System.out.println("订餐失败!\n");
							}
							break;
						case		2:
							System.out.println("查看餐袋");
							user.show();
							break;
						case		3:
							System.out.println("签收订单");
							boolean flag2=user.sign();
							if(flag2){
								System.out.println("签收成功!\n");
							}else{
								System.out.println("签收失败!\n");
							}
							break;
						case		4:
							System.out.println("删除订单");
							boolean flag3=user.delete();
							if(flag3){
								System.out.println("删除成功!\n");
							}else{
								System.out.println("删除失败!\n");
							}
							break;
						case		5:
							System.out.println("我要点赞");
							user.praise();
							break;
						case		6:
							System.out.println("退出系统");
							flag=false;
							break;
						default:
							System.out.println("没有该选项");
							break;
					}
					break;//结束内层do-while循环
				}else{
					System.out.print("你输入的不是整数,请重新输入:");
				}
			}while(true);
		}while(flag);
	}
}

用户类,用户登录界面:

import java.util.Scanner;
//用户类
public class User implements UserDao{

	public boolean add() {
		int index=0;
		boolean flag=true;
		//判断订单是否已满
		for(int i=0;i50?
							order.getDish().getPrice()*order.getCopies():
								order.getDish().getPrice()*order.getCopies()+5;
					order.setPrice(price);
					//设置订单状态
					order.setStatus(0);
					
					System.out.println("订单信息:选择的菜品为"+order.getDish().getDishName()+"\t份数:"+order.getCopies());
					System.out.println("送餐时间为:"+order.getTime()+"\t总金额:"+order.getPrice());
					
					//将订单放到订单数组中
					Manager.orderArray[index]=order;
					break;
				}catch (Exception e) {
					System.err.println("你选择的菜品序号有误,请重新选择:");
				}
			}while(true);
			
			
			return true;
		}else{
			System.err.println("餐袋已满!");
			return false;
		}
	}
	//显示订餐信息
	public void show() {
		int i=0;
		System.out.println("序号\t姓名\t\t菜品信息\t\t送餐时间\t\t地址\t\t电话\t\t金额\t\t状态");
		for(Order order:Manager.orderArray){
			if(order!=null){
				i++;
				System.out.print(i+"\t");
				System.out.print(order.getName()+"\t\t");
				System.out.print(order.getDish().getDishName()+" "+order.getCopies()+"\t\t");
				System.out.print(order.getTime()+"\t\t");
				System.out.print(order.getAddress()+"\t\t");
				System.out.print(order.getTel()+"\t\t");
				System.out.print(order.getPrice()+"\t\t");
				String status=order.getStatus()==0?"未完成":"已完成";
				System.out.print(status+"\n");
			}
		}
	}
	
	//显示签收状态
	public boolean sign() {
		show();
		System.out.print("请输入要签收的订单的序号:");
		do{
			Scanner input=new Scanner(System.in);
			if(input.hasNextInt()){
				int num=input.nextInt();
				try{
					if(Manager.orderArray[num-1].getStatus()==0){
						Manager.orderArray[num-1].setStatus(1);
						return true;
					}else{
						System.out.println("订单已签收!");
						return false;
					}
				}catch (Exception e) {
					System.err.println("输入的序号不存在,请重新输入:");
				}
			}else{
				System.err.println("输入的不是数字,请重新输入:");
			}
		}while(true);
	}
	
	//删除订餐
	public boolean delete() {
		show();
		System.out.println("请输入要删除的订单序号:");
		do{
			Scanner input=new Scanner(System.in);
			if(input.hasNextInt()){
				int num=input.nextInt();
				
				try{
					if(Manager.orderArray[num-1]!=null){
						for(int i=num;i

最后建一个测试类,测试一下:

//测试类
public class Test {
	public static void main(String[] args) {
		//创建管理员对象,调用show方法测试各个功能
		Manager ma=new Manager();
		ma.show();
	}
}

好了,以上就是我们利用简单的面向对象来把我们的“吃货联盟”重构了一遍,

这样用面向对象是不是思路清晰了些呢?!

但是我们的这个小项目有一个很大的漏洞,在哪里呢?

就是订单数据我们是用数组去存储的,而数组的长度是固定不可变的,现实生活中,订餐人数是每天都在变化的,很显然它满足不了现实生活中的需求,那么有没有方法去优化一下呢?当然有咯!那当然<集合>莫属了,因为集合的长度是不固定的、可变的,所以我们的3.0版本会用集合的方法再重构一遍“吃货联盟”,这样来使我们学到的所有东西能物尽其用,让我们在以后面向对象的编程中,活学活用,慢慢使我们的项目越做越好!

 

你可能感兴趣的:(专栏)