2021-02-06

快递e栈(面向对象篇)

 

思路:

1,视图显示(欢迎,菜单...)

2,   数据存储(快递数据)

3,调用逻辑(根据视图接受用户输入的内容,调度数据逻辑)

 

 

1,视图显示(view)

 

 

package com.java.view;

import com.java.bean.Express;

import java.util.Scanner;

public class Views {
    private Scanner input = new Scanner(System.in);

    /**
     * 欢迎
     */
    public void welcome() {
        System.out.println("欢迎使用xxx公司快递管理系统");
    }

    /**
     * 再见
     */
    public void bye() {
        System.out.println("欢迎下次使用");
    }

    /**
     * 选择用户身份
     *
     * @return
     */

    public int menu() {
        System.out.println("请根据提示,输入序号");
        System.out.println("1,快递员");
        System.out.println("2,普通用户");
        System.out.println("0,退出");
        String text = input.nextLine();
        int num = -1;
        try {
            num = Integer.parseInt(text);
        } catch (NumberFormatException e) {

        }
        if (num < 0 || num > 2) {
            return menu();
        }
        return num;
    }

    /**
     * 快递员菜单
     *
     * @return
     */


    public int cMenu() {
        System.out.println("请根据提示,输入功能序号");
        System.out.println("1,录入快递");
        System.out.println("2,快递修改");
        System.out.println("3,快递删除");
        System.out.println("4,查看所有快递");
        System.out.println("0,返回上一层");
        String text = input.nextLine();
        int num = -1;
        try {
            num = Integer.parseInt(text);
        } catch (NumberFormatException e) {

        }
        if (num < 0 || num > 4) {
            System.out.println("输入有误,请重新输入");
            return cMenu();
        }
        return num;
    }

    /**
     * 快递的录入
     *
     * @return
     */

    public Express insert() {
        System.out.println("请根据提示,输入快递信息");
        System.out.println("请输入快递单号");
        String number = input.nextLine();
        System.out.println("请输入快递公司");
        String company = input.nextLine();
        Express e = new Express();
        e.setCompany(company);
        e.setNumber(number);
        return e;
    }

    /**
     * 提示用户输入快递单号
     *
     * @return
     */

    public String findByNumber() {
        System.out.println("根据提示,请输入快递信息");
        System.out.println("请输入快递的单号");
        String number = input.nextLine();
        return number;
    }

    /**
     * 显示快递信息
     */

    public void printExpress(Express e) {
        System.out.println("快递信息如下:");
        System.out.println("快递公司:" + e.getCompany() + ",快递单号:" + e.getNumber()+",取件码为:"+e.getCode());
    }

    public  void printNull(){
        System.out.println("此快递为空");
    }

    /**
     * 修改快递信息
     *
     * @param e
     * @return
     */
    public void update(Express e) {
        System.out.println("请输入新的快递单号");
        String number = input.nextLine();
        System.out.println("请输入新的快递公司");
        String company = input.nextLine();
        e.setCompany(company);
        e.setNumber(number);
    }

    /**
     * 快递的删除
     * @return
     */

    public int delete(){
        System.out.println("是否确认删除?");
        System.out.println("1,确认删除");
        System.out.println("2,取消操作");
        System.out.println("0,退出");
        String text = input.nextLine();
        int num = -1;
        try {
            num = Integer.parseInt(text);
        } catch (NumberFormatException e) {

        }
        if (num < 0 || num > 2) {
            System.out.println("输入有误,请重新输入");
            return delete();
        }
        return num;
    } 
       /**
        *快递的打印
         */
    public void printAll(Express[][] es){
        int count = 0;
         for (int i=0;i<10;i++){
             for (int j=0;j<10;j++){
                if (es[i][j] != null){
                    count++;
                    System.out.print("第"+(i+1)+"排"+"第"+(j+1)+"列快递,");
                    printExpress(es[i][j]);
                }
            }
        }
         if(count == 0){
             System.out.println("暂无快递信息");
         }
    }




    /**
     * 用户菜单
     *
     * @return
     */

    public int uMenu() {
        System.out.println("请根据提示,进行取件");
        System.out.println("请输入取件码");
        String code = input.nextLine();
        int num = -1;
        try {
            num = Integer.parseInt(code);
        } catch (NumberFormatException e) {

        }
        if (num < 100000 || num > 999999) {
            System.out.println("输入有误,请重新输入");
            return uMenu();
        }
        return num;
    }

    public  void expressExist(){
        System.out.println("此单号在快递柜中已经存储,请检查单号是否有误");
    }

    public  void success(){
        System.out.println("删除成功");
    }





}

分析:

首先进入选择身份菜单1)快递员身份:1,录入快递

                                                               2,修改快递和删除快递:首先要进行快递单号的查找,并打印出快递的信息,进行修改和删除

                                                               3,查看所有快递:利用for循环遍历查找,定义count,每次添加count++,每次取出快递count--,如果查找快递时,count为0,证明快递要么没存入,或者已经取出

                                    2)普通用户身份:根据取件码进行取件(6位取件码),if判断输入的取件码是否为六位,输入有误返回上一级——普通用户菜单

 

 

 

 

 

2,数据的存储(bean)Express

 

​
package com.java.bean;

import java.util.Objects;

public class Express {
    //单号
    private String number;
    //公司名称
    private String company;
    //取件码
    private int code;

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public Express(String number, String company, int code) {
        this.number = number;
        this.company = company;
        this.code = code;
    }

    public Express() {
    }

    @Override
    public String toString() {
        return "Express{" +
                "number='" + number + '\'' +
                ", company='" + company + '\'' +
                ", code=" + code +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Express express = (Express) o;
        return Objects.equals(number, express.number);
    }

    @Override
    public int hashCode() {
        return Objects.hash(number);
    }
}


​

分析:

生成快递单号(number),快递公司(company),取件码(code)的get,set,有参无参构造方法,toString,

和快递单号(number)的equals方法

 

 

 

 

3,调用逻辑(ExpressDao)

 

package com.java.dao;

import com.java.bean.Express;

import java.util.Random;

public class ExpressDao {
    private Express[][] data = new Express[10][];
    private int size;
    {    //生成一个10*10的快递柜
        for(int i=0;i<10;i++){
            data[i] = new Express[10];
        }
    }
    private Random random = new Random();

    /**
     * 用于存储快递
     * @param e
     * @return
     */


    public boolean add(Express e) {
        if (size == 100) {
            return false;
        }
        //1,随机生成2个0—9的下标
        int x = -1;
        int y = -1;
        while (true) {
            x = random.nextInt(10);
            y = random.nextInt(10);
            if (data[x][y] == null) {
                //此位置暂无快递
                break;

            }
            //2,生成取件码
        }
        int code = randomCode();
        e.setCode(code);
        data[x][y] = e;
        return true;
    }


    public int randomCode(){
        while (true){
           int code = random.nextInt(900000)+100000;
           Express e = findByCode(code);
            if (e == null){
                return code;
           }
       }
    }


    /**
     * 通过快递单号进行查询
     * @param number
     * @return
     */

    public Express findByNumber(String number){
            Express e = new Express();
            e.setNumber(number);
            for (int i=0;i<10;i++){
                for(int j=0;j<10;j++){
                    if(data[i][j] != null)
                        if (e.equals(data[i][j])){
                            return data[i][j];
                 }
            }
        }return  null;

    }


     //通过取件码进行查找
    public Express findByCode(int code){
            for (int i=0;i<10;i++){
                for(int j=0;j<10;j++){
                    if(data[i][j] != null)
                      if (data[i][j].getCode()==code){
                        return data [i][j];
                 }
            }
        }return  null;



    }
    public void updata(Express oldExpress,Express newExpress){
        delete(oldExpress);
        add(newExpress);

    }
    public void delete(Express e){
        for (int i=0;i<10;i++){
            for(int j=0;j<10;j++){
                if(data[i][j] != null)
                    if (e.equals(data[i][j])){
                        data[i][j] = null;
                        break;
                 }
             }
        }


    }
    public Express[][] findAll(){
        return data;

    }
}

分析:

1,首先利用二维数组,生成一个10*10的快递柜,接着利用random方法生成两个随机下标,第几排第几列的位置,如果下标【x】【y】下标为空的,则证明有位置可以存

并定义一个size,判断快递柜是否存满,存满直接返回false

2,随机生成六位取件码,并通过取件码对比判断快递柜是否为空的,空的直接存储,如果有快递接着while死循环,直到有空的位置

 

 

4,mian方法调用

package com.java.main;

import com.java.bean.Express;
import com.java.dao.ExpressDao;
import com.java.view.Views;

public class Main {
    private static Views v = new Views();
    private static ExpressDao dao = new ExpressDao();


    public static void main(String[] args) {
        //视图初始化

        //初始化dao对象


        //1,欢迎
        v.welcome();

        //2,弹出菜单
            while (true){
            int menu = v.menu();
            switch (menu){
                case 0:
                    break;
                case 1:
                     cClient();
                    break;
                case 2:

                    uClient();
                    break;
            }
        }

    }

    private static void uClient() {
        //1,取件码获取
        int code = v.uMenu();
        //2,根据取件码,取出快递
        Express e = dao.findByCode(code);
        if(e == null){
          v.printNull();
        }else{
            v.success();
            v.printExpress(e);
            dao.delete(e);
        }
    }

    private static void cClient() {
        while(true){
            int menu = v.cMenu();
            switch(menu){
                case 0:
                    return;

                case 1:{
                    //1,提示快递信息
                    Express e = v.insert();
                    //2,此快递是否已经存过
                    Express e2 = dao.findByNumber(e.getNumber());
                    //3,存快递
                    if (e2 == null){
                        dao.add(e);
                        v.printExpress(e);
                    }else{
                        v.expressExist();
                    }
                }
                    break;
                case 2:{
                    //1,显示快递信息
                    String number = v.findByNumber();
                    //2,查找数据
                    Express e = dao.findByNumber(number);
                    Express e2 = e;
                    //3,打印快递信息
                    if (e == null){
                        v.printNull();
                    }else{
                        v.printExpress(e);
                    }
                    //4,修改快递
                    v.update(e);
                    dao.updata(e,e2);
                    v.printExpress(e2);

                }
                    break;
                case 3:{
                    //1,输入快递信息
                    String number = v.findByNumber();
                    //2,查找快递对象
                    Express e = dao.findByNumber(number);
                    if(e == null){
                        v.printNull();
                    }else{
                        v.printExpress(e);
                        int type = v.delete();
                        if(type == 1){
                            dao.delete(e);
                            v.success();
                        }
                    }

                }
                    break;
                case 4:{
                    Express[][] data = dao.findAll();
                    v.printAll(data);

                }
                    break;
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值