以下是 Java 实现的地铁计价系统:

public class MetroBillingSys {
    private int[] cost; // 每站票价
    private int price; // 次票售价
    private int limit; // 次票可搭乘次数
    private Map<Integer, Card> cards; // 存储所有地铁卡信息,key为卡号,value为卡信息对象

    // 初始化系统
    public MetroBillingSys(int[] cost, int price, int limit) {
        this.cost = cost;
        this.price = price;
        this.limit = limit;
        cards = new HashMap<>();
    }

    // 充值
    public void recharge(int id, int amount) {
        Card card = cards.get(id);
        if (card != null) {
            card.setBalance(card.getBalance() + amount);
        } else {
            card = new Card(id, amount);
            cards.put(id, card);
        }
    }

    // 购买次票
    public boolean purchase(int id) {
        Card card = cards.get(id);
        if (card == null) {
            return false;
        }
        if (card.getBalance() >= price) {
            card.setBalance(card.getBalance() - price);
            card.setLimit(card.getLimit() + limit);
            return true;
        } else {
            return false;
        }
    }

    // 乘坐地铁
    public boolean commute(int id, int distance) {
        Card card = cards.get(id);
        if (card == null) {
            return false;
        }
        if (card.getLimit() > 0) {
            card.setLimit(card.getLimit() - 1);
            return true;
        } else if (card.getBalance() > 0) {
            int totalCost = 0;
            for (int i = 0; i < distance; i++) {
                totalCost += cost[i];
            }
            card.setBalance(card.getBalance() - totalCost);
            return true;
        } else {
            return false;
        }
    }

    // 查询余额和次数
    public int[] query(int id) {
        Card card = cards.get(id);
        if (card == null) {
            return null;
        }
        int[] result = new int[2];
        result[0] = card.getBalance();
        result[1] = card.getLimit();
        return result;
    }

    // 地铁卡信息类
    private class Card {
        private int id; // 卡号
        private int balance; // 余额
        private int limit; // 剩余次数

        public Card(int id, int balance) {
            this.id = id;
            this.balance = balance;
            this.limit = 0;
        }

        public int getId() {
            return id;
        }

        public int getBalance() {
            return balance;
        }

        public void setBalance(int balance) {
            this.balance = balance;
        }

        public int getLimit() {
            return limit;
        }

        public void setLimit(int limit) {
            this.limit = limit;
        }
    }
}

该系统实现了以下功能:

  • 初始化系统: 使用 MetroBillingSys(int [] cost,int price,int limit) 初始化系统,其中 cost 数组表示每站的票价,price 表示次票的售价,limit 表示次票可搭乘的次数。
  • 充值: 使用 recharge(int id, int amount) 方法对指定卡号 id 的地铁卡充值 amount 元。
  • 购买次票: 使用 purchase(int id) 方法购买次票。如果卡余额足够,则购买成功,并返回 true,否则返回 false
  • 乘坐地铁: 使用 commute(int id,int distance) 方法乘坐地铁,distance 表示乘坐的距离。乘坐地铁的规则如下:
    • 如果乘客有次票次数,优先消耗次票,次数减 1 次。
    • 如果乘客没有次票次数,则按距离计费,并扣除相应的费用。
    • 如果余额不足以支付票价,仍然可以出站,但余额将扣除费用后变为负数。
    • 如果余额小于等于 0,则无法乘坐地铁。
  • 查询余额和次数: 使用 query(int id) 方法查询指定卡号 id 的余额和剩余次票次数,返回一个包含余额和剩余次数的数组。

该系统使用 Map 数据结构来存储所有地铁卡的信息,方便查找和更新卡信息。Card 类封装了地铁卡的信息,包括卡号、余额和剩余次数。

使用示例:

int[] cost = {1, 2, 3, 4, 5}; // 每站票价
int price = 10; // 次票售价
int limit = 5; // 次票可搭乘次数

MetroBillingSys system = new MetroBillingSys(cost, price, limit);

// 充值卡号 100 的地铁卡 50 元
system.recharge(100, 50);

// 使用卡号 100 的地铁卡购买一张次票
system.purchase(100);

// 使用卡号 100 的地铁卡乘坐 3 站地铁
system.commute(100, 3);

// 查询卡号 100 的地铁卡余额和剩余次数
int[] queryResult = system.query(100);
System.out.println("余额:" + queryResult[0]);
System.out.println("剩余次数:" + queryResult[1]);

改进建议:

  • 可以添加其他功能,例如:
    • 查询历史记录
    • 设置优惠政策
    • 支持不同类型的卡 (例如老年卡、学生卡)
  • 可以使用数据库来存储地铁卡信息,提高系统的可扩展性。
  • 可以使用多线程来提高系统性能。

总结:

该 Java 实现的地铁计价系统是一个简单的示例,展示了如何使用 Java 开发一个基本的计价系统。用户可以根据实际需求进行修改和扩展。

Java 实现地铁计价系统:按距离和次数计费

原文地址: https://www.cveoy.top/t/topic/fXvi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录