小白一看就会的Java集合写简单的快递管理系统

2 篇文章 0 订阅
1 篇文章 0 订阅

小白一看就会的Java集合写最简单的快递管理系统

任务概述

  • 管理员

    • 快递录入

      • 柜子位置(系统产生不能重复)
      • 快递单号(输入产生)
      • 快递公司(输入产生)
      • 6位取件码(系统产生不能重复)
    • 删除快递(根据单号)

    • 修改快递(根据单号)

    • 查看所有快递(遍历)

  • 普通用户

    • 快递取出

      • 输入取件码:显示快递信息和哪个柜子中,从柜子中移除这个快递

程序思路

1.视图和部分功能(view)

呈现给用户所看到的界面和大致的功能,如:文字提示等等。
同时让自己写程序有一个大局观,知道下一步该做什么。

2.通用对象方法(express)

建立通用方法和对象,方便使用

3主程序(main)

用主程序调用之前的视图和功能类方法,直接连接运行

程序分解

1.View
需要实现的内容:

(1)欢迎和再见

(2)选择管理员或者用户身份菜单(判断输入参数要合理)

(3)快递员浏览的菜单、用户浏览的菜单(判断输入参数要合理)

(4)快递删除:是否删除界面(判断输入参数要合理)

(5)提示存取错误:快递不存在、已存在的提示语

考察点:字符串转数字Integer.parseInt(text)、异常处理NumberFormatException、返回数据类型

1)欢迎和再见

public void welcome() {
        System.out.println("欢迎使用XXX快递管理系统!");
    }
    public void bye() {
        System.out.println("再见,欢迎下次使用!");
    }

2)选择管理员或者用户身份菜单

public int menu() {
		//提示用户输入
        System.out.println("请根据提示,输入功能序号:");
        System.out.println("1.快递员");
        System.out.println("2.普通用户");
        System.out.println("0.退出");
        //接收输入内容存储到text
        String text = input.nextLine();
       	//异常处理
        int num = -1;
        try {
                //字符串转数字
            num = Integer.parseInt(text);
        }catch(NumberFormatException e) {

        }
        //判断,防止用户误操作
        if ( num < 0 || num > 2 ) {
            System.out.println("输入错误,请重新输入0-2之间的功能序号:");
            //返回menu让用户重新输入
            return menu();
        }
        return num;


    }

3)快递员浏览的菜单、用户浏览的菜单(判断输入参数要合理)

//快递员浏览的菜单
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("输入错误,请重新输入0-4的功能序号:");
            return cMenu();
        }
        return num;
    }
//用户浏览的菜单
public int uMenu(){
		//提示用户
        System.out.println("请根据提示,进行取件:");
        System.out.println("请输入您的取件码:");
        //接收用户输入的取件码存储到变量code
        String code = input.nextLine();
        //异常处理
        int num = -1;
        try {
            num = Integer.parseInt(code);
        }catch(NumberFormatException e) {

        }
        //判断是否为6位数取件码
        if ( num < 100000 || num > 999999 ) {
            System.out.println("输入错误,请重新输入6位取件码:");
            //不是让用户重新输入
            return uMenu();
        }
        return num;
    }

4)快递删除:是否删除界面(判断输入参数要合理)

public int delete() {
		//提示用户输入
        System.out.println("是否确认删除:");
        System.out.println("1.确认删除");
        System.out.println("2.取消删除");
        //接收用户输入的取件码存储到变量text
        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;
    }

5)提示存取错误:快递不存在、已存在的提示语

public void expressExit(){
        System.out.println("此单号在快递柜中已存在,请勿重复存储!");
    }

    public void printNull(){
        System.out.println("快递不存在,请检查输入!");
    }

2.Express
需要实现的内容:

(1)创建快递对象
(2)无参构造方法
(3)有参构造方法
(4)Getter和Setter方法
(5)equals()和hashCode方法
(6)toString()方法
public Express(String number) {
        this.number = number;
    }

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

    public String getNumber() {
        return number;
    }

    public String getCompany() {
        return company;
    }

    public int getCode() {
        return code;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

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

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

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

    public void setX(int x) {
        this.x = x;
    }

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

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

    @Override
    public int hashCode() {
        return Objects.hash(number, company, code, x, y);
    }

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

3.main
主程序需要实现的内容:

调用欢迎和再见
(1)case选择
(2)生成快递信息
(3)修改快递信息
(4)删除快递信息
(5)查询快递信息

1)case选择

//快递员菜单
m:while (true) {
            int menu = v.menu();
            switch (menu) {
                case 0:               // 退出
                    v.bye();
                    break m;
                case 1:               // 快递员
                    cClient();
                    break;
                case 2:               // 普通用户
                    uClient();
                    break;
            }
        }
while (true) {
            int menu = v.cMenu();
            switch (menu) {
                case 0:
                    return;
                case 1:{               // 快递录入
                    System.out.println("请根据提示,输入快递信息:");
                    System.out.println("请输入快递公司:");
                    String company = input.nextLine();
                    System.out.println("请输入快递单号:");
                    String number = input.nextLine();
                    // 内容
                    }
                    break;

                case 2: {               // 快递修改
                    System.out.println("请输入要修改的快递单号:");
                    String oldExpressNumber = input.nextLine();
                    // 内容
                    }
                    break;

                case 3 : {               // 快递删除
                    System.out.print("请输入要删除的快递单号:");
                    String delExpressNumber = input.nextLine();
                    // 内容
                    }
                    break;

                case 4 :{               // 查看所有快递
                    // 内容
                    }
                    break;
                }
     }

2)生成快递信息(快递录入)

	// 随机生成不重复的六位数取货码
        int code = 0;
        do{
            code = random.nextInt(900000)+100000;
        }while(expressMap.get(code) != null);  // Hashmap保证不重复

        // 生成 不重复 的快递位置
        int x = -1;
        int y = -1;
        do{
            x = random.nextInt(10);
            y = random.nextInt(10);
        }while(expressMap.get(x) != null && expressMap.get(y) != null);

       // 创建一个快递对象
       Express e = new Express(number,company,code,x,y);  
       expressMap.put(number, e);
       System.out.println("恭喜你,快递存储成功!");
       System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列");
       System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]");
       //记录存储的快递数
       count++;
       System.out.println("当前快递存储数为:"+count);

3)修改快递信息

System.out.println("请输入新的快递信息:");

System.out.println("请输入快递公司:");
String company = input.nextLine();//接收输入
System.out.print("请输入新的快递单号:");
String newExpressNumber = input.nextLine();//接收输入
//找到旧的快递取件码和位置
int code = expressMap.get(oldExpressNumber).getCode();
int x = expressMap.get(oldExpressNumber).getX();
int y = expressMap.get(oldExpressNumber).getY();
//更新新的快递数据
Express e = new Express(newExpressNumber,company,code,x,y);
//删除之前的快递单号 
expressMap.remove(oldExpressNumber);
expressMap.put(newExpressNumber, e);
System.out.println("恭喜你,快递信息修改成功!");
System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列");
System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]");
                           

4)删除快递信息

int type = v.delete();
if (type == 1) {
// 取货码  存储位置  快递 信息清空
	expressMap.remove(expressMap.get(delExpressNumber).getCode());
	expressMap.remove(expressMap.get(delExpressNumber).getX());
    expressMap.remove(expressMap.get(delExpressNumber).getY());
    expressMap.remove(delExpressNumber);
    System.out.println("恭喜你,快递删除成功!");
    //减去快递删除数量
    count --;
    System.out.println("当前快递存储数为:"+count);

5)查询快递信息

 // 查看所有快递
for (String number : expressMap.keySet()) {
    Express e = expressMap.get(number);
    System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列")
	System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]");

//根据单号查找快递
for (String number : expressMap.keySet()) {
            temp ++ ;
            // 单号存在
            if (expressMap.get(number).getCode() == code ){
                String s = number;
                Express e = expressMap.get(s);
                System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列");
				System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]");
                // 用户取件后删除之前的数据
                System.out.println("取货成功!");
                expressMap.remove(e.getCode());
                expressMap.remove(e.getX());
                expressMap.remove(e.getY());
                expressMap.remove(e.getNumber());
                count --;
                break;
                // 单号不存在
            } else if (count == temp ){
            //调用视图View里的printNull提示用户
                v.printNull();
            }

完整代码

View视图界面

import java.util.Scanner;


public class View {

    private Scanner input = new Scanner(System.in);

//    欢迎与再见
    public void welcome() {
        System.out.println("欢迎使用XXX快递管理系统!");
    }
    public void bye() {
        System.out.println("欢迎下次使用!");
    }

//    选择身份的菜单
    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 ) {
            System.out.println("输入错误,请重新输入:");
            return menu();
        }
        return num;


    }

//    快递员浏览的菜单

    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;
    }




//    用户浏览的菜单

    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 int delete() {
        System.out.println("是否确认删除:");
        System.out.println("1.确认删除");
        System.out.println("2.取消删除");
        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 expressExit(){
        System.out.println("此单号在快递柜中已存在,请勿重复存储!");
    }

    public void printNull(){
        System.out.println("快递不存在,请检查输入!");
    }



}

Express对象方法

import java.util.Objects;

public class Express {
    private String number;    // 快递单号
    private String company;   // 快递公司
    private int code;         // 取件码
    private int x;            // 快递箱排数
    private int y;            // 快递箱列数


    public Express(String number) {
        this.number = number;
    }

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

    public String getNumber() {
        return number;
    }

    public String getCompany() {
        return company;
    }

    public int getCode() {
        return code;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

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

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

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

    public void setX(int x) {
        this.x = x;
    }

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

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

    @Override
    public int hashCode() {
        return Objects.hash(number, company, code, x, y);
    }

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

Main主程序

import java.util.*;

public class main {
    private static View v = new View();
    private static Map<String, Express> expressMap = new HashMap<>();
    private static Scanner input = new Scanner(System.in);
    private static Random random = new Random();
    private static int count;

    public static void main(String[] args) {

        v.welcome();

//        身份选择菜单
        m:while (true) {
            int menu = v.menu();
            switch (menu) {
                case 0:               // 退出
                    v.bye();
                    break m;
                case 1:               // 快递员
                    cClient();
                    break;
                case 2:               // 普通用户
                    uClient();
                    break;
            }
        }

    }

//    快递员菜单

    private static void cClient() {
        while (true) {
            int menu = v.cMenu();
            switch (menu) {
                case 0:
                    return;
                case 1:{               // 快递录入
                    System.out.println("请根据提示,输入快递信息:");
                    System.out.println("请输入快递公司:");
                    String company = input.nextLine();
                    System.out.println("请输入快递单号:");
                    String number = input.nextLine();
                    if (expressMap.get(number) != null) {
                        v.expressExit();
                    } else {
                        // 生成 不重复 的六位数取货码
                        int code = 0;
                        do{
                            code = random.nextInt(900000)+100000;
                        }while(expressMap.get(code) != null);

                        // 生成 不重复 的快递位置
                        int x = -1;
                        int y = -1;
                        do{
                            x = random.nextInt(10);
                            y = random.nextInt(10);
                        }while(expressMap.get(x) != null && expressMap.get(y) != null);
                        Express e = new Express(number,company,code,x,y);
                        expressMap.put(number, e);
                        System.out.println("快递存储成功!");
                        System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列");
                        System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]");
                        count++;
                        System.out.println("当前快递存储数为:"+count);
                    }
                }
                break;

                case 2: {               // 快递修改
                    System.out.println("请输入要修改的快递单号:");
                    String oldExpressNumber = input.nextLine();
                    if (expressMap.get(oldExpressNumber) == null) {
                        v.printNull();
                    } else {
                        System.out.println("请输入新的快递信息:");
                        System.out.println("请输入快递公司:");
                        String company = input.nextLine();
                        System.out.print("请输入新的快递单号:");
                        String newExpressNumber = input.nextLine();
                        int code = expressMap.get(oldExpressNumber).getCode();
                        int x = expressMap.get(oldExpressNumber).getX();
                        int y = expressMap.get(oldExpressNumber).getY();
                        Express e = new Express(newExpressNumber,company,code,x,y);
                        expressMap.remove(oldExpressNumber);
                        expressMap.put(newExpressNumber, e);
                        System.out.println("恭喜你,快递信息修改成功!");
                        System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列");
                        System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]");
                    }
                }
                break;

                case 3 : {               // 快递删除
                    System.out.print("请输入要删除的快递单号:");
                    String delExpressNumber = input.nextLine();
                    if (expressMap.get(delExpressNumber) == null) {
                        v.printNull();
                    } else {
                        int type = v.delete();
                        if (type == 1) {
                            // 取货码  存储位置  快递 信息清空
                            expressMap.remove(expressMap.get(delExpressNumber).getCode());
                            expressMap.remove(expressMap.get(delExpressNumber).getX());
                            expressMap.remove(expressMap.get(delExpressNumber).getY());
                            expressMap.remove(delExpressNumber);
                            System.out.println("快递删除成功!");
                            count --;
                            System.out.println("当前快递存储数为:"+count);
                        }
                    }
                }
                break;

                case 4 :{               // 查看所有快递
                    for (String number : expressMap.keySet()) {
                        Express e = expressMap.get(number);
                        System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列");
                        System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]");
                    }
                   System.out.println("当前快递存储数为:"+count);
                    break;
                }

            }

        }


    }

    private static void uClient() {
        int code = v.uMenu();

        int temp = 0;
        // 根据code找快递单号
        for (String number : expressMap.keySet()) {
            temp ++ ;
            // 单号存在
            if (expressMap.get(number).getCode() == code ){
                String s = number;
                Express e = expressMap.get(s);
                System.out.println("快递存放在第[" + (e.getX() + 1) + "]排第[" + (e.getY() + 1) + "]列");
                System.out.println("快递信息:"+"快递公司:[" + e.getCompany() + "],快递号单号:[" + e.getNumber() + "]," +"取件码:[" + e.getCode() + "]");
                // 用户取件后
                System.out.println("取货成功!");
                expressMap.remove(e.getCode());
                expressMap.remove(e.getX());
                expressMap.remove(e.getY());
                expressMap.remove(e.getNumber());
                count --;
                break;
                // 单号不存在
            } else if (count == temp ){
                v.printNull();
            }
        }
    }

}

实现效果

录入
在这里插入图片描述

删除
在这里插入图片描述
用户取件
在这里插入图片描述

  • 14
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值