博客
关于我
快递e栈(控制台简易版)——集合
阅读量:796 次
发布时间:2023-03-25

本文共 3774 字,大约阅读时间需要 12 分钟。

快递e栈(控制台简易版)——集合

本节任务旨在通过面向对象思想,结合集合数据结构,完成一个简易的快递管理控制台项目。该项目模块包含用户界面、数据存取、业务逻辑调度等核心功能。

任务过程

  • 需求分析与类定义

    根据快递管理业务需求,设计了两个核心类:

    • Express类:用于存储快递信息,包含快递单号、快递公司、取件码、位置坐标等属性。
    • ExpressDao类:作为数据访问层,负责快递信息的存取和操作,采用TreeMap存储,以支持快速查询和排序。
  • 数据存储逻辑

    为了实现快递单号快速定位功能,选择Map集合作为数据存储结构,key为快递单号,value为快递对象。这种设计确保了O(1)复杂度的查询效率,特别适合频繁查询快递信息的场景。

  • 功能实现

    • 录入快递:用户输入快递单号和公司信息,系统自动生成取件码并随机分配位置。
    • 删除快递:支持根据快递单号删除快递信息,严重警告已存在快递单号时的操作风险。
    • 修改快递:允许用户更换快递单号或快递公司信息,系统会检查单号是否已存在并提示相应提示信息。
    • 查看快递:提供两种方式查看快递信息:按单号查询和按取件码查询。
  • 异常处理

    针对输入错误设计了自定义异常类OutNumberBoundException,用于处理数字超出范围等异常情况。

  • 用户界面设计

    系统采用分级用户界面设计,管理员和普通用户分别拥有不同的操作权限。管理员可完成快递的录入、删除、修改等管理操作,而普通用户仅能查询并取出快递。

  • 项目模块功能说明

    • 视图展示:支持欢迎界面、主菜单、管理员菜单及用户操作界面,实现用户的交互体验。
    • 数据存取:通过Map结构存储快递信息,支持快速的增删改查操作。
    • 业务逻辑:完成用户输入的业务处理,如录入、删除、修改快递信息及取出快递等功能。
    • 快递类:定义了快递的核心属性及相关操作方法。
    • 自定义异常:确保程序运行的稳定性,避免因输入错误导致的系统崩溃。
    • 主程序:作为控制中心,协调各模块的功能调用,确保系统运行流畅。

    代码实现

    1. ExpressView类

    import java.util.Scanner;
    import java.util.Map;
    public class ExpressView {
    static Scanner input = new Scanner(System.in);
    static ExpressDao dao = new ExpressDao();
    public static void welcome() {
    System.out.println("=====欢迎使用快递e栈快递柜=====");
    }
    public static void bye() {
    System.out.println("=====系统已退出,感谢您的使用=====");
    }
    public static int mainMenu() {
    int mainNum = 0;
    do {
    welcome();
    System.out.println("请选择您的身份:");
    System.out.println("1. 管理员");
    System.out.println("2. 普通用户");
    System.out.println("0. 退出");
    String s = input.nextLine();
    try {
    mainNum = validNum(s, 0, 2);
    break;
    } catch (NumberFormatException | OutNumberBoundException e) {
    System.out.println(e.getMessage());
    }
    } while (true);
    return mainNum;
    }
    private static int validNum(String s, int begin, int end) throws NumberFormatException, OutNumberBoundException {
    try {
    int num = Integer.parseInt(s);
    if (num < begin || num > end) {
    throw new OutNumberBoundException("数字的范围必须在" + begin + "和" + end + "之间");
    }
    return num;
    } catch (NumberFormatException e) {
    throw new NumberFormatException("输入的必须是数字!");
    }
    }
    // 其他方法如:managerMain, insertExpress等...
    }

    2. ExpressDao类

    import java.util.Map;
    import java.util.TreeMap;
    public class ExpressDao {
    static Map
    expressMap = new TreeMap<>();
    public ExpressDao() {
    expressMap.put("1001", new Express("1001", "中通快递", 123456, 1, 3));
    expressMap.put("1002", new Express("1002", "圆通快递", 456789, 2, 7));
    expressMap.put("1003", new Express("1003", "顺丰速递", 123789, 6, 2));
    }
    // 其他数据操作方法如:add, delete, findExpressByNumber等...
    }

    3. Express类

    public class Express {
    private String number;
    private String company;
    private int code;
    private int x;
    private int y;
    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;
    }
    @Override
    public String toString() {
    return "快递信息[" + "快递单号:" + getNumber() + ", 快递公司:" + getCompany() + ", 取件码:" + getCode() +
    " , 在第" + (getX() + 1) + "行 第" + (getY() + 1) + "列柜子]";
    }
    // getter和setter方法...
    }

    4. OutNumberBoundException类

    public class OutNumberBoundException extends RuntimeException {
    public OutNumberBoundException(String s) {
    super(s);
    }
    }

    5. Main类

    public class Main {
    public static void main(String[] args) {
    ExpressController e = new ExpressController();
    e.use();
    }
    }

    总结

    通过以上实现,完成了一个简易的快递管理系统。系统采用面向对象思想,模块化设计,支持快递的录入、删除、修改和查询功能,同时具备良好的用户交互界面和稳定的数据存取逻辑。

    转载地址:http://nkhfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现PageRank算法(附完整源码)
    查看>>
    Objective-C实现pascalTriangle帕斯卡三角形算法(附完整源码)
    查看>>
    Objective-C实现perfect cube完全立方数算法(附完整源码)
    查看>>
    Objective-C实现pollard rho大数分解算法(附完整源码)
    查看>>
    Objective-C实现quick select快速选择算法(附完整源码)
    查看>>
    Objective-C实现recursive bubble sor递归冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现recursive insertion sort递归插入排序算法(附完整源码)
    查看>>
    Objective-C实现RedBlackTree红黑树算法(附完整源码)
    查看>>
    Objective-C实现redis分布式锁(附完整源码)
    查看>>
    Objective-C实现reverse letters反向字母算法(附完整源码)
    查看>>
    Objective-C实现ripple adder涟波加法器算法(附完整源码)
    查看>>
    Objective-C实现RodCutting棒材切割最大利润算法(附完整源码)
    查看>>
    Objective-C实现Romberg算法(附完整源码)
    查看>>
    Objective-C实现RRT路径搜索(附完整源码)
    查看>>
    Objective-C实现rsa 密钥生成器算法(附完整源码)
    查看>>
    Objective-C实现RSA密码算法(附完整源码)
    查看>>
    Objective-C实现runge kutta龙格-库塔法算法(附完整源码)
    查看>>
    Objective-C实现segment tree段树算法(附完整源码)
    查看>>
    Objective-C实现selection sort选择排序算法(附完整源码)
    查看>>
    Objective-C实现sha256算法(附完整源码)
    查看>>