Java实现的快递柜管理系统(附上完整代码可用作期末课程设计)

一、概述

      这个是使用Java实现的一个智能快递柜的管理系统,系统中包含两个角色,分别是用户操作和快递员操作。实现的具体功能如下:

二、功能

1.管理员

(1)快递录入

            ———柜子的位置(系统产生,不能重复)

            ———快递单号(输入)

            ———快递公司(输入)

            ———6位取件码(系统产生,不能重复)

(2)删除快递(根据单号)

(3)修改快递(根据单号)

(4)查看所有快递(遍历)

2.普通用户

(1)取快递

             ————输入取件码:显示快递的信息和快递的位置。取出之后,将此快递信息删除。

三、采用的模式

    此系统我采用了MVC模式,即:数据存取(M)、视图展示(V)、调度逻辑(C)。

数据存取(M):将快递信息存入,数据存取可以使用数组、集合或者是数据库。我写的这个直接   使用二维数组。

视图展示(V):负责打印,向用户展示界面,专门与用户打交道,提示用户输入快递信息等。

调度逻辑(C):根据视图接收到的用户输入的内容,调度数据存取。

MVC的好处:实现代码复用;降低模块间的耦合性;逻辑更清晰。

四、效果如下:

 

  五、代码

1、视图层:

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("————---——欢迎使用小小张快递管理系统!---------");
    }

    /**
     * 再见界面
     */
    public void bye(){
        System.out.println("宝,有缘再相见!");
    }
    

    /**
     * 选择身份的菜单
     */
    public int menu(){
        System.out.println("----------请根据提示输入功能序号-----------");
        System.out.println("1.快递员");
        System.out.println("2.普通用户");
        System.out.println("0.退出");
        //这里的代码逻辑相较于.nextInt优点在哪?
        //但思考这个方法内的逻辑,没有优点。
        //但思考全局代码,是有优点的:所有方法均使用nextLine,不会因为输入产生冲突,还可以更好地接收各种的类型数据。
        String text = input.nextLine(); //接收用户输入的数据。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(); //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.setNumber(number);
        e.setCompany(company);
        return e;

    }

    /**
     * (不管删除或者是修改,先接收到快递单号,查到快递单号)提示用户输入快递单号
     * @return
     */
    public String findByNumber(){
        System.out.println("----------请根据提示,输入快递信息----------");
        System.out.println("请输入要操作的快递单号:");
        String number = input.nextLine();
        return number;
    }
    /**
     * 查到快递时,先显示快递信息
     * @param e
     */
    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
     */
    public void update(Express e){
        System.out.println("请输入新的快递单号:");
        String number = input.nextLine();
        System.out.println("请输入新的快递公司:");
        String company = input.nextLine();
        e.setNumber(number);
        e.setCompany(company);
    }
    /**
     * 询问是否确认删除,1表示确认,2表示取消操作
     * @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;

    }

    /**
     * 给定数组的快递信息,遍历显示
     * @param es
     */
    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("暂无快递信息");
        }

    }


    /**
     * 用户的菜单
     */
    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 printCode(Express e){
    System.out.println("快递的取件码为:"+e.getCode());
}
public void success(){
    System.out.println("操作成功!");
}


}

 2、没有任何的业务逻辑,所有属性私有,提供get 和set方法。

package com.java.bean;

import java.util.Objects;

/**
 * 快递
 */
public class Express {
    private String number;//单号
    private String company;//公司
    private int 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 +
                '}';
    }

    //使用equals方法比较取件码是否相同
    @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;
    }

    @Override
    public int hashCode() {
        return Objects.hash(number, company, 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;
    }
}

3、数据存取

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; //当前存取得快递数,可以快速判断是否有空的快递柜
    {
        for (int i=0;i<10;i++){
            data[i] = new Express[10];
        }
    }

    /**
     *
     *用于存储快递
     */
    private Random random = new Random();//随机生成数据
    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;
    }
    //当遍历完之后,没有相同的数据就生成随机数
    private int randomCode() {
        while (true) {
            int code = random.nextInt(900000) + 1000000;
            Express e = findByNCode(code);
            if (e == null) {
                return code;
            }
        }
    }

    //
    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(e.equals(data[i][j])){
                    return data[i][j];
                }
            }

        }
        return null;
    }

    /**
     * 根据取件码查询快递
     * @param code 要查询的取件码
     * @return 查询结果,查询失败时返回null
     */
    public Express findByNCode(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;

    }

    /**
     * 多余的操作,为了MVC更圆润
     */
    public void updata(Express oldExpress,Express newExpress){//原来的对象oldExpress,新的对象newExpress
        delete(oldExpress);
        add(newExpress);


    }

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

            }
        }
    }

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

}

4、main方法调用各级菜单展示给用户

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();//初始化dao对象

    public static void main(String[] args) {
        v.welcome();    //1.欢迎
        m:while (true) {//2.弹出身份选择菜单
            int menu = v.menu();
            switch (menu) {
                case 0:
                    break m;
                case 1://快递员
                    cClient();
                    break;
                case 2://普通用户
                    uClient();
                    break;
            }
        }
        v.bye();

    }

    //普通用户
    private static void uClient(){
        int code = v.uMenu();             //1.获取取件码
        Express e = dao.findByNCode(code);//2.根据取件码,取出快递
        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:
                    break;
                case 1: {//快递录入
                    Express e = v.insert();//1.提示输入快递信息
                    Express e2 = dao.findByNumber(e.getNumber()); //2.此快递是否已经存储过
                    if (e2 == null) {//3.存储快递
                        //未存储过,存
                        dao.add(e);
                        v.printCode(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(e2);
                    dao.updata(e,e2);
                    v.printCode(e);
                    }
                }
                    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;
            }
        }
    }
}

  • 32
    点赞
  • 242
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
下面是一个简单的使用Java编写的餐饮管理系统的示例代码: ```java import java.util.ArrayList; import java.util.List; import java.util.Scanner; class MenuItem { private String name; private double price; public MenuItem(String name, double price) { this.name = name; this.price = price; } public String getName() { return name; } public double getPrice() { return price; } } class Order { private int tableNumber; private List<MenuItem> items; public Order(int tableNumber) { this.tableNumber = tableNumber; this.items = new ArrayList<>(); } public void addItem(MenuItem item) { items.add(item); } public void removeItem(MenuItem item) { items.remove(item); } public double getTotalAmount() { double total = 0.0; for (MenuItem item : items) { total += item.getPrice(); } return total; } public void display() { System.out.println("Table Number: " + tableNumber); System.out.println("Items:"); for (MenuItem item : items) { System.out.println("- " + item.getName() + ": $" + item.getPrice()); } System.out.println("Total Amount: $" + getTotalAmount()); } } class Restaurant { private List<MenuItem> menu; private List<Order> orders; public Restaurant() { this.menu = new ArrayList<>(); this.orders = new ArrayList<>(); } public void addMenuItem(MenuItem item) { menu.add(item); } public void displayMenu() { System.out.println("Menu:"); for (MenuItem item : menu) { System.out.println("- " + item.getName() + ": $" + item.getPrice()); } } public void placeOrder(Order order) { orders.add(order); } public void displayOrders() { System.out.println("Orders:"); for (Order order : orders) { order.display(); System.out.println("-------------------"); } } } public class RestaurantManagementSystem { public static void main(String[] args) { Restaurant restaurant = new Restaurant(); // 添加菜单项 restaurant.addMenuItem(new MenuItem("Burger", 10.99)); restaurant.addMenuItem(new MenuItem("Fries", 4.99)); restaurant.addMenuItem(new MenuItem("Coke", 2.99)); // 显示菜单 restaurant.displayMenu(); Scanner scanner = new Scanner(System.in); // 下订单 Order order1 = new Order(1); System.out.println("Select items for Order 1 (enter item numbers, -1 to finish):"); while (true) { int itemNumber = scanner.nextInt(); if (itemNumber == -1) { break; } MenuItem selectedItem = restaurant.getMenu().get(itemNumber-1); order1.addItem(selectedItem); } restaurant.placeOrder(order1); Order order2 = new Order(2); System.out.println("Select items for Order 2 (enter item numbers, -1 to finish):"); while (true) { int itemNumber = scanner.nextInt(); if (itemNumber == -1) { break; } MenuItem selectedItem = restaurant.getMenu().get(itemNumber-1); order2.addItem(selectedItem); } restaurant.placeOrder(order2); // 显示订单 restaurant.displayOrders(); } } ``` 这个示例代码实现了一个简单的餐饮管理系统,包括菜单管理、下订单和显示订单等功能。你可以根据需要进行进一步的修改和扩展。运行这段代码,你可以根据菜单项的编号选择菜单,创建订单并显示订单信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值