快递e站系统

package com.kkb.pojo;//bean

public class Express {
    private String number;
    private String company;
    private Integer code;
//构造方法
    public Express(){
    }

    @Override
    public String toString() {
        return number+"-"+company+"-"+code;
    }

    public Express(String number, String company, Integer code) {
        this.number = number;
        this.company = company;
        this.code = 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 Integer getCode() {
        return code;
    }

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

-------------------------------------------------------------------------------------------------------------

package com.kkb.dao;

import com.kkb.pojo.Coordinate;
import com.kkb.pojo.Express;

import java.rmi.server.ExportException;
import java.util.Random;

/*
快递管理
 */
public class ExpressDao {
    private Express[][] expressArr=new Express[10][10];//表示快递的柜子
    private int size=0;//表示快递柜中有多少个快递
    public ExpressDao() {
        //添加几个快递
        expressArr[0][0]=new Express("10001","顺丰",123456);
        expressArr[2][1]=new Express("10002","圆通",112233);
        expressArr[5][2]=new Express("12321","中通",159463);
        size=3;
    }

    /**
     * 根据坐标去获取快递
     * @param x
     * @param y
     * @return
     */
    public Express findExpressByCoordinate(int x,int y){
        return expressArr[x][y];
    }
    /**
     * 根据取件码查询快递的位置
     * @param code
     * @return
     */
    public Coordinate findExpressByCode(int code) {
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                if (expressArr[i][j] != null && expressArr[i][j].getCode() == code)
                    return new Coordinate(i, j);
            }
        }
        return null;
    }

    /**
     * 根据快递单号去修改快递
     * @param number
     * @return
     */
    public boolean update(String number,Express newExpress) throws Exception {
            //判断该单号的快递是否存在
            Coordinate coordinate=findExpressByNumber(number);
            if (coordinate==null){
                throw new Exception("该快递不存在");
            }
            //根据坐标获取到要修改的快递
            Express expresses=expressArr[coordinate.getX()][coordinate.getY()];
            //修改该快递的公司和单号
            expresses.setCompany(newExpress.getCompany());
            expresses.setNumber(newExpress.getNumber());
            return true;
    }

    /**
     * 根据快递单号来进行删除
     * @param number
     * @return
     */
    public boolean delete(String number) throws Exception {
        //判断该单号的快递是否存在
        Coordinate coordinate=findExpressByNumber(number);
        if (coordinate==null){
            throw new Exception("该快递不存在");
        }
        expressArr[coordinate.getX()][coordinate.getY()]=null;//表示删除
        size--;//实际的快递个数
        return true;
    }

    /**
     * 根据我们的快递单号查找
     * @param number
     * @return
     */
    public Coordinate findExpressByNumber(String number){
        for (int i=0;i<10;i++){
            for (int j=0;j<10;j++){
                if (expressArr[i][j]!=null &&expressArr[i][j].getNumber().equals(number))
                    return new Coordinate(i,j);
            }
        }
        return null;
    }



    /**
     * 添加一个快递到快递柜中
     * @param express
     * @return
     */
    public Coordinate add(Express express) throws Exception {
        if (size==100){//如果满了
            throw new Exception("快递柜已满,不能添加快递了");
    }
        Random random=new Random();
        int x,y;
        do {
            x = random.nextInt(10);
            y = random.nextInt(10);
        }while(expressArr[x][y]!=null);//该位置有快递,重新生成坐标
    //系统产生随机的取件码
        int code;
        do {

            code = random.nextInt(900000) + 100000;
        }while (isExistCode(code));//如果重复就要重新生成
        express.setCode(code);//设置取件码
         expressArr[x][y]=express;
         size++;//添加一个快递我们的实际数量要加一
         return new Coordinate(x,y);
    }

    /**
     * 判断取件码是否重复
     * @param code
     * @return
     */
    public boolean isExistCode(int code){
        for (int i=0;i<10;i++){
            for (int j=0;j<10;j++){
                if (expressArr[i][j]!=null && expressArr[i][j].getCode()==code)
                    return true;
            }
        }
        return false;
    }
    /*
    获取快递柜
     */
    public Express[][] getAllExpress()
    {
        return expressArr;
    }

    public int getSize() {
        return size;
    }
}

-----------------------------------------------------------------------------------------------------------

package com.kkb.pojo;

public class Coordinate {
    private  int x;
    private  int y;

    public  Coordinate(){
    }
    public Coordinate(int x,int y){
        this.x = x;
        this.y = y;
    }
    public int getX(){
        return x;
    }
    public  void setX(int x){
        this.x = x;
    }

    public int getY(){
        return y;
    }
    public void setY(int y){
        this.y = y;
    }
}

-------------------------------------------------------------------------------------------------

package com.kkb.view;

import com.kkb.dao.ExpressDao;
import com.kkb.exception.OutNumberBoundException;
import com.kkb.pojo.Coordinate;
import com.kkb.pojo.Express;

import java.util.Scanner;

public class View {
    private Scanner input=new Scanner(System.in);
     private ExpressDao expressDao=new ExpressDao();
    /**
     * 起始菜单
     * @return
     */
    public int startMenu() {
        int num=0;
        do{
        System.out.println("----欢迎来到开课吧快递管理系统-----");
        System.out.println("请选择:");
        System.out.println("1.管理员");
        System.out.println("2.普通用户");
        System.out.println("0.退出");
        String strNum = input.nextLine();
        try {
            num = validateNum(strNum,0,2);
            break;
        } catch (NumberFormatException e) {
            System.err.println(e.getMessage());
              //e.printStackTrace();
        } catch (OutNumberBoundException e) {
            System.err.println(e.getMessage());
            //e.printStackTrace();
           }
        }while(true);
        if (num==1){
            administorMenu();
        }else  if (num==2){
            userMenu();

        }else  if (num==0) {
            System.out.println("谢谢使用");
        }
        return num;
    }

    /**
     * 用户的菜单
     */
    public void userMenu(){
        int code;
        do {
            System.out.print("请输入取件码");
            String strCode = input.nextLine();
            try {
                code = validateNum(strCode, 100000, 900000);
                break;
            } catch (OutNumberBoundException e) {
                e.printStackTrace();
            }
        }while (true);
        //调用dao中的方法判断取件码是否存在
        Coordinate coordinate=expressDao.findExpressByCode(code);
        if(coordinate!=null){
            int x=coordinate.getX();
            int y=coordinate.getY();
            //根据坐标获取快递信息
            Express express=expressDao.findExpressByCoordinate(x,y);
            System.out.println("快递信息:");
            System.out.println("\t所在位置:柜子的第"+(x+1)+"排第"+(y+1)+"列");

            System.out.println("\t"+express);
            //从柜子当中去移除
            try {
                if (expressDao.delete(express.getNumber()))
                    System.out.println("删除成功");
            } catch (Exception exception) {
                //exception.printStackTrace();
                System.err.println("删除失败"+exception.getMessage());
            }
        }else{
            System.out.println("该取件码不存在");
        }
    }

    /*
    管理员的菜单
     */
    private void administorMenu() {
        int num;
        do {
            System.out.println("1.快递录入");
            System.out.println("2.快递删除");
            System.out.println("3.快递修改");
            System.out.println("4.查看所有快递");
            System.out.println("0.返回上一级菜单");
            System.out.print("请选择功能序号");
            String strNum = input.nextLine();
            try {
                num = validateNum(strNum, 0, 4);
                break;
            } catch (NumberFormatException e) {
                System.err.println(e.getMessage());
                //e.printStackTrace();
            } catch (OutNumberBoundException e) {
                System.err.println(e.getMessage());
                //e.printStackTrace();
            }
        }
        while (true);
        if (num==1){
            addExpress();
        }else if (num==2){
            deleteExpress();
        }else if (num==3){
            updateExpress();
        }else if (num==4){
            System.out.println("------查看所有快递------");
            Express[][] allExpress = expressDao.getAllExpress();
            printByGrid(allExpress);
            //printAllExpress(allExpress);
        }else  if (num==0){
            startMenu();
        }
    }

    /**
     * 修改快递
     */
    private  void updateExpress(){
        System.out.println("----------快递修改--------");
        System.out.println("请输入要修改的快递单号");
        String number=input.nextLine();
        Express newExpress=new Express();
        System.out.println("请输入修改后的快递单号和公司");
        newExpress.setNumber(input.nextLine());
        newExpress.setCompany(input.nextLine());
        try {
            if (expressDao.update(number,newExpress)){
                System.out.println("修改成功");
            }else{
                System.out.println("修改失败");
            }
        } catch (Exception exception) {
            System.out.println("修改失败");
            System.out.println(exception.getMessage());
            //exception.printStackTrace();
        }
    }

    /**
     * 删除快递
     */
    private void deleteExpress(){
        System.out.println("-----快递删除-----");
        System.out.println("请输入要删除的快递单号");
        String number=input.nextLine();
        try {
            if(expressDao.delete(number)){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
            }
        } catch (Exception exception) {
            System.out.println("删除失败");
            System.err.println(exception.getMessage());
            //exception.printStackTrace();
        }
    }

    /**
     * 快递录入
     */
    private void addExpress() {
        System.out.println("-----快递录入------");
        Express express = new Express();
        System.out.println("请输入快递单号和公司");
        express.setNumber(input.nextLine());
        express.setCompany(input.nextLine());
        try {
            Coordinate coordinate = expressDao.add(express);
            System.out.println("添加成功,放在了快递柜当中的第" + (coordinate.getX() + 1) + "排第" + (coordinate.getY() + 1) + "列");
            System.out.println("快递柜中共有" + expressDao.getSize() + "个快递");
        } catch (Exception exception) {
            System.out.println("添加失败");
            System.err.println(exception.getMessage());
            exception.printStackTrace();
        }
    }
    /**
     * 打印快递柜当中的所有非空的格子中的快递信息
     * @param allExpress
     */
    private void printAllExpress(Express[][] allExpress) {
        for (int i = 0; i < allExpress.length; i++) {
            for (int j = 0; j < allExpress[i].length; j++) {
                if (allExpress[i][j] != null)
                    System.out.println(allExpress[i][j]);
            }
        }
    }

    /**
     * 按照快递柜的方式打印快递信息
     * @param allExpress
     */
    private void printByGrid(Express[][] allExpress) {
        for (int i = 0; i < allExpress.length; i++) {
            for (int j = 0; j < allExpress[i].length; j++) {
                if(allExpress[i][j]==null){
                    System.out.printf("%-20s","空\t");
                }else
                    System.out.printf("%-20s",allExpress[i][j]+"\t");
            }
            System.out.println();
        }
    }


    private  int validateNum(String strNum,int begin,int end) throws NumberFormatException,OutNumberBoundException{
        try{
            int num=Integer.valueOf(strNum);
           if (num<begin || num>end){
               throw new OutNumberBoundException("数字范围必须在"+begin+"和"+end+"之间!");
           }
           return num;
        }catch (NumberFormatException exception){
            throw new NumberFormatException("输入的必须是数字");
        }
    }
}

----------------------------------------------------------------------

调试

package com.kkb.test;

import com.kkb.view.View;

public class MainTest {
    public static void main(String[] args) {
        View view=new View();
        while(true) {
            if(view.startMenu()==0)
                break;
        }
    }
}

-------------------------------------------------------------------------------

package com.kkb.exception;

public class OutNumberBoundException extends Throwable {
    public OutNumberBoundException(String s) {
        super(s);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值