Java快递运费计算程序项目

项目背景与目的

在日常生活中,我们经常需要寄送快递,而快递公司通常会根据货物的重量和目的地来计算运费。本次项目旨在设计一个Java程序,实现一个简易的快递运费计算系统。该系统能够根据用户输入的货物重量和目的地,自动计算并显示运费。

项目设计要求
  1. 身份验证:程序应验证操作员身份,最多允许输入3次。
    // 身份验证  
        private static boolean authenticateOperator(Scanner scanner) {  
            int attempts = 0;  
            while (attempts < 3) {  
                System.out.print("请输入用户名:");  
                String username = scanner.nextLine();  
                System.out.print("请输入密码:");  
                String password = scanner.nextLine();  
                if (OPERATOR_USERNAME.equals(username) && OPERATOR_PASSWORD.equals(password)) {  
                    return true;  
                }  
                attempts++;  
                System.out.println("用户名或密码错误,您还有" + (2 - attempts) + "次尝试机会。");  
            }  
            return false;  
        }  

  2. 费用计算:程序能计算若干个快递货物的费用,直到用户选择退出。
     // 计算运费  
        private static double calculateFee(PackageInfo packageInfo) {  
            // 假设根据destination从FEE_RANGES中获取对应的FeeRange  
            // 这里为了简化,我们直接遍历(实际中应使用更高效的方法)  
            for (Map.Entry<String, FeeRange> entry : FEE_RANGES.entrySet()) {  
                if (entry.getKey().contains(packageInfo.getDestination())) {  
                    FeeRange feeRange = entry.getValue();  
                    if (packageInfo.getWeight() <= 1) {  
                        return feeRange.getFirstKgPrice();  
                    } else {  
                        return feeRange.getFirstKgPrice() + (packageInfo.getWeight() - 1) * feeRange.getAdditionalKgPrice();  
                    }  
                }  
            }  
            throw new IllegalArgumentException("Unknown destination: " + packageInfo.getDestination());  
        }  
      
        public static void main(String[] args) {  
            Scanner scanner = new Scanner(System.in);

  3. 数据录入:用户应能方便地录入货物信息。
     // 录入货物信息  
                PackageInfo packageInfo = new PackageInfo();  
                System.out.print("请输入目的地:");  
                packageInfo.setDestination(scanner.nextLine());  
                System.out.print("请输入重量(kg):");  
                packageInfo.setWeight(scanner.nextDouble());  
                scanner.nextLine(); // 消耗换行符  

  4. 自动识别:程序能自动识别货物所在的收费段,并计算运费。
    // 计算运费  
                double fee = calculateFee(packageInfo); 

  5. 结果显示:程序应显示货物信息及其运费。
    // 显示结果  
                System.out.println("目的地:" + packageInfo.getDestination());  
                System.out.println("重量:" + packageInfo.getWeight() + "kg");  
                System.out.println("运费:" + fee + "元");  
      
                // 假设用户可以选择继续或退出...  
                System.out.print("是否继续?(y/n):");  
                String choice = scanner.nextLine();  
                if ("n".equalsIgnoreCase(choice))

程序模块结构
  • 操作员登录
  • 显示程序菜单
  • 用户输入选择操作项目
  • 录入数据
  • 计算运费
  • 输出结果
  • 退出程序

相关代码实现

1. 显示程序菜单
public void displayMenu() {  
    System.out.println("--- 快递运费计算程序 ---");  
    System.out.println("1. 货物数据录入");  
    System.out.println("2. 计算运费");  
    System.out.println("3. 货物信息显示");  
    System.out.println("0. 退出程序");  
}
2. 验证操作人员身份(此处简化,不实现完整验证逻辑) 
// 假设验证逻辑,实际项目中应实现完整验证  
public boolean validateOperator() {  
    // 这里简化处理,直接返回true表示验证通过  
    return true;  
}
 3. 录入数据(货物重量和目的地)
public PackageData inputData() {  
    Scanner scanner = new Scanner(System.in);  
    System.out.print("请输入货物重量(KG): ");  
    double weight = scanner.nextDouble();  
    System.out.print("请输入目的地(省份): ");  
    String destination = scanner.next();  
    return new PackageData(weight, destination);  
}
 4. 计算运费(根据目的地和重量)
public double calculateShippingFee(PackageData packageData) {  
    // 这里使用Map存储费用和目的地对应关系  
    Map<String, double[]> fees = new HashMap<>();  
    // ... 初始化费用Map ...  
  
    double[] feeRates = fees.getOrDefault(packageData.getDestination(), new double[]{30, 25}); // 默认费用  
    double baseFee = feeRates[0];  
    double additionalFee = feeRates[1];  
    double shippingFee = 0;  
    if (packageData.getWeight() <= 1) {  
        shippingFee = baseFee;  
    } else {  
        shippingFee = baseFee + (packageData.getWeight() - 1) * additionalFee;  
    }  
    return shippingFee;  
}
 5. 输出结果
public void outputResult(PackageData packageData, double shippingFee) {  
    System.out.println("货物信息:");  
    System.out.println("重量: " + packageData.getWeight() + "KG");  
    System.out.println("目的地: " + packageData.getDestination());  
    System.out.println("运费: " + shippingFee + "元");  
}

 具体代码如下:

import java.util.Scanner;  
  
public class ExpressFeeCalculator {  
    // 省略身份验证部分代码  
  
    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  
        boolean running = true;  
  
        while (running) {  
            displayMenu(); // 显示程序菜单  
  
            System.out.print("请选择操作:");  
            int choice = scanner.nextInt();  
            scanner.nextLine(); // 消耗换行符  
  
            switch (choice) {  
                case 1:  
                    // 货物数据录入及运费计算逻辑  
                    // 省略详细代码  
                    break;  
                case 2:  
                    // 假设已经录入了货物数据,直接计算并显示运费  
                    // 省略详细代码  
                    break;  
                case 3:  
                    // 显示已录入的货物信息及其运费  
                    // 省略详细代码  
                    break;  
                case 0:  
                    running = false; // 退出程序  
                    System.out.println("程序已退出。");  
                    break;  
                default:  
                    System.out.println("无效的选择,请重新选择。");  
            }  
        }  
        scanner.close();  
    }  
  
    // 显示程序菜单的方法  
    private static void displayMenu() {  
        System.out.println("--- 快递运费计算程序 ---");  
        System.out.println("1. 货物数据录入");  
        System.out.println("2. 计算运费");  
        System.out.println("3. 货物信息显示");  
        System.out.println("0. 退出程序");  
    }  
  
    // ... 其他相关方法(如计算运费、录入数据等)  
}

 学习收获与心得

通过本次项目,我深入学习了Java编程语言的基本语法和面向对象编程的概念。在实现过程中,我遇到了不少挑战,比如如何设计合理的程序结构、如何处理用户输入、如何实现身份验证等。通过不断地调试和修改代码,我逐渐掌握了Java编程的技巧和方法。

此外,我也意识到了编程的严谨性和逻辑性。在编写代码时,我需要仔细考虑每一个细节,确保程序的正确性和稳定性。同时,我也学会了如何借助互联网和书籍等资源,解决编程过程中遇到的问题。

总之,本次项目让我受益匪浅,不仅提高了我的编程能力,还锻炼了我的逻辑思维和解决问题的能力。我相信,在今后的学习和工作中,我会更加努力地学习和实践,不断提高自己的编程水平。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值