java——实战项目(模拟吃货联盟订餐系统)

  1. 学习知识点
  2. 掌握OOP思想
  3. 熟悉操作数组,循环,判断等基础语法
  4. 从实战中累计经验

需求分析:

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


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

思路:需要一个订餐系统,用键盘输入来判断功能,这里肯定需要switch循环,订餐就是添加菜单,最后返回的肯定是一条订单,我们可以创建一个订单类,还需要一个菜单来提供给我们点菜,最后点完的菜需要放进数组中存储,后面的功能来 操作数组即可;

代码如下

首先创建两个对象

1.订单类

package xiangmu_2;

import jdk.dynalink.beans.StaticClass;

/**
 * po为订单类,一次可生成一条订单
 * 该类中只提供了构造方法和get,set方法
 * @lihuilong
 */
public class Po {
    private String Name;//订单姓名
    private String Address;//订单地址
    private String DishMegs;//订单中选择的餐袋,从菜单中选择的菜品放进餐袋中
    private int time;//订单时间
    private  int State=0;//订单状态
    private double Sumprice;//订单总金额
    private int df;//订单份数

    public Po() {
    }

    public int getDf() {
        return df;
    }

    public void setDf(int df) {
        this.df = df;
    }

    public int getState() {
        return State;
    }

    public void setState(int state) {
        State = state;
    }

    public Po(String name, String address, String dishMegs, int time, double sumprice, int df, int State) {
        Name = name;
        Address = address;
        DishMegs = dishMegs;
        this.time = time;
        Sumprice = sumprice;
        this.df=df;
        this.State=State;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getAddress() {
        return Address;
    }

    public void setAddress(String address) {
        Address = address;
    }

    public String getDishMegs() {
        return DishMegs;
    }

    public void setDishMegs(String dishMegs) {
        DishMegs = dishMegs;
    }

    public int getTime() {
        return time;
    }

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

    public double getSumprice() {
        return Sumprice;
    }

    public void setSumprice(double sumprice) {
        Sumprice = sumprice;
    }



}

2.菜单类

package xiangmu_2;

/**
 * 该订单为系统给出的两个菜单
 * 该类提供了构造方法和get,set方法,和一个输出菜单的方法
 * @lihuilong
 */
public class Dish {
    private int Dno;//菜的序号
    private String name;//菜名
    private double price;//菜的单价
    private int praiseNums;//菜品的点赞量

    public Dish() {
    }

    public int getDno() {
        return Dno;
    }

    public void setDno(int dno) {
        Dno = dno;
    }

    public Dish(int Dno, String name, double price, int praiseNums) {
        this.Dno=Dno;
        this.name = name;
        this.price = price;
        this.praiseNums = praiseNums;
    }

    public String getName() {
        return name;
    }

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

    public double getPrice() {
        return price;
    }

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

    public int getPraiseNums() {
        return praiseNums;
    }

    public void setPraiseNums(int praiseNums) {
        this.praiseNums = praiseNums;
    }
    public  void info(){
        System.out.println(Dno+"\t\t\t\t"+name+"\t\t\t\t"+price+"\t\t\t\t"+praiseNums);
    }

}

程序运行代码如下

package xiangmu_2;
/**该类为主要程序入口
 * 实现最基础的增删改查
 * @lihuilong
 */

import java.util.Scanner;

public class OrderingMgr {
    public static void main(String[] args) {
        Methood.outinfo();//调用了输出界面的方法
        Methood methood = new Methood();//实例化方法
        Scanner sc = new Scanner(System.in);
        while(true){//循环

           int SC = sc.nextInt();//键盘输入数字进入switch选择
            switch (SC) {
                case 0:
                    Methood.outinfo();//当输入0的时候返回程序主页
                    continue;
                case 1:

                    methood.dishinfo();//调用了查看菜单的方法
                    methood.createPo();//生成一条订单
                    continue;

                case 2:
                     methood.AllInfo();//调用查看所有菜袋的方法

                    continue;
                case 3:
                    methood.signPo();//调用签收菜袋的方法
                    continue;
                case 4:
                    methood.del();///调用删除菜袋的方法
                    continue;
                case 5:
                    methood.like();//实现点赞功能
                    continue;
                default:
                    System.out.println("输入的操作有误\t\t\t\t欢迎下次光临");//退出程序
                    break;//退出switch

            }
            break;//退出循环
        }
    }

}

3.方法类(所有的主要的步骤都在这一类,也是难点的地方)

(1)先初始化两个菜单供客人选择

public class Methood {
    /**默认给出两个菜单,将菜单存放到数组中
     * @lihuilong
     */
    //默认给出两个菜单
    Dish dish1 = new Dish(1, "鱼香肉丝", 25, 15);
    Dish dish2 = new Dish(2, "酸菜鱼", 30, 25);
    Dish[] dishes = new Dish[]{dish1, dish2};
    //定义一个数组,将两条菜单放进去
    dishMegs[] dis = new dishMegs[4];

(2)创建订单的实例将 他们放进数组中,默认订单总共为6条

 //分配4个Po数组对象的空间
    Po[] PO = new Po[]{new Po(),new Po(),new Po(),new Po()};

(3)在后面的代码中我们需要重复使用到循环订单,取出订单为空的那条,在这里,我们将他作为方法拿出来

 //取出数组中午的空索引位置
public int suoyin(){
    int index= PO.length;
    for (int i = 0; i < 4; i++) {
        if (PO[i].getName()==null){
            index=i;
            break;
        }
    }
return index;
}

(4)输出菜单代码

//输出菜单信息
    public void dishinfo() {
        System.out.println("欢迎点餐,本店有以下几种菜品");
        System.out.println("序号\t\t\t\t菜名\t\t\t\t\t单价\t\t\t\t点赞量");
        System.out.println();
        dish1.info();
        dish2.info();
    }

(5)输出主程序的方法

//输出语句
    public static void outinfo() {
        System.out.println("--------------                        请输入您要执行的操作                      --------------");
        System.out.println();
        System.out.println("0.返回菜单\t\t\t1.我要订餐\t\t\t2.查看餐袋\t\t\t3.签收订单\t\t\t4.删除订单\t\t\t5.我要点赞\t\t\t");
    }

(6)订餐模块具体代码

 //我要订餐

    /**
     * 订单时间要求大于10小于20
     * 增加一个配送费fee,如果订单超过50,配送费为0,否则增加6元配送费
     * @lihuilong
     */
    public Po[] createPo() {
        int index = suoyin();
        Scanner sc = new Scanner(System.in);
        int fee=0;

        for (int i = index; i < 4; i++) {
            if (index!=5){
                System.out.println("请输入您需要的菜品序号");
                int dn = sc.nextInt();
              PO[index].setDishMegs(dishes[dn-1].getName());

                System.out.println("请输入您需要的份数");
                PO[index].setDf(sc.nextInt());
                System.out.println("请输入您的姓名");
                String Sname = sc.next();
                PO[index].setName(Sname);
                System.out.println("请输入您的收货地址");
                String Saddress = sc.next();
                PO[index].setAddress(Saddress);
                System.out.println("请输入收货时间10-20");
                int Stime = sc.nextInt();
                while(true) {
                    if (Stime < 10 || Stime > 20) {
                        System.out.println("时间输入错误,请重新输入");
                        Stime = sc.nextInt();
                    }PO[index].setTime(Stime);
                    break;
                }
                 fee=(dishes[dn-1].getPrice()*PO[index].getDf()>50)?0:6;
                PO[index].setSumprice(PO[index].getDf()*dishes[dn-1].getPrice()+fee);


            }else {
                System.out.println("订单已满");
                return null;
            }
            break;
        }
        /**
         * 将创建的订单打印出来
         * @lihuilong
         */
        System.out.println("您的订单为:");
        System.out.println("姓名:\t\t"+PO[index].getName());
        System.out.println("地址:\t\t"+PO[index].getAddress());
        System.out.println("送餐时间:\t\t"+PO[index].getTime());
        System.out.println("菜品:\t\t"+PO[index].getDishMegs()+PO[index].getDf()+"份");
        System.out.println("配送费:\t"+fee+"\t总金额:"+PO[index].getSumprice());

       return PO ;
    }

(7)查看餐袋

//查看菜单
    public void AllInfo (){

        int index = suoyin();
        System.out.println("订单号\t\t\t订单姓名\t\t\t订单地址\t\t\t订单时间\t\t\t订单菜品\t\t\t订单总金额\t\t\t状态");

        for (int i = 0; i <index; i++) {

            System.out.print(i+1+"\t\t\t\t"+PO[i].getName()+"\t\t\t\t"+PO[i].getAddress()+"\t\t\t\t"
                    +PO[i].getTime()+"\t\t\t\t"
                    +PO[i].getDishMegs()+PO[i].getDf()+"份"+"\t\t\t\t"+PO[i].getSumprice());
            if (PO[i].getState()==0){
                System.out.print("\t\t\t已预定");
            }else {

                System.out.print("\t\t\t已完成");
            }
            System.out.println();
        }


    }

(8)签收模块

/**1.签收菜单模块
     * 2.判断菜袋的状态如果为0,则可以签收,否则失败
     * @lihuilong
     */
    public void signPo(){
        System.out.println("请输入你想签收的订单序号");
        Scanner sc = new Scanner(System.in);
        int i1 = sc.nextInt();
        for (int i = 0; i < 4; i++) {
            if (i1==i+1){
                if (PO[i].getState()==0){
                    PO[i].setState(1);
                    System.out.println("签收完毕");
                    break;
                }
                else{
                    System.out.println("订单已签收");
                }
            }
            if (i1>PO.length){
                System.out.println("没有找到该订单");
            }

        }

    }

(9)删除菜袋

  /**难点1.找到订单并判断,如果订单未签收不能删除
     *     2.将删除后的订单从后依次往前移一位
     * @lihuilong
     */
    public void del(){
        System.out.println("请输入你想删除的订单序号");
        int suoyin = suoyin();
        Scanner sc = new Scanner(System.in);
        int i1 = sc.nextInt();
        for (int i = 0; i < suoyin-1; i++) {
            if (i1==i+1){
                if (PO[i].getState()==0){
                    System.out.println("订单未签收,请签收");
                }else{
                        PO[i].setName(null);
                    System.out.println("删除成功");
                }
            }

        }
        //将删除后的订单依次往前移动一位
        for (int i = 0; i < suoyin; i++) {
            PO[i].setName(PO[i+1].getName());
            PO[i].setAddress(PO[i+1].getAddress());
            PO[i].setTime(PO[i+1].getTime());
            PO[i].setDishMegs(PO[i+1].getDishMegs());
            PO[i].setDf(PO[i+1].getDf());
            PO[i].setSumprice(PO[i+1].getSumprice());
            PO[i].setState(PO[i+1].getState());

        }
        PO[PO.length-1].setName(null);

    }

(10)点赞模块

  //我要点赞
    public void like(){
    dishinfo();
    System.out.println("请输入你要点赞的菜品序号");
        Scanner sc = new Scanner(System.in);
        int i1 = sc.nextInt();
        for (int i = 0; i < dishes.length; i++) {
            if (i1==1+i){
                int praiseNums = dishes[i].getPraiseNums();
                dishes[i].setPraiseNums(praiseNums+1);
            }

        }

    }

 注:随便写写的,大佬们轻喷,有觉得写的不对的地方,感谢指明

                                                                    仅供参考

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值