咚咚咚,咱们的“吃货”第二版本来咯,开森~
“吃货”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版本会用集合的方法再重构一遍“吃货联盟”,这样来使我们学到的所有东西能物尽其用,让我们在以后面向对象的编程中,活学活用,慢慢使我们的项目越做越好!