以下是一个实现仓库管理系统的 C++ 程序,它定义了 Warehouse 类和 Storage 类,分别用于表示库房和整个仓库。该程序实现了货物入库和出库功能,并根据费用选择最优的库房进行存储。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Warehouse {
private:
    int capacity; // 库房容量
    bool occupied; // 库房状态
    double rental; // 库房日租金
    int timestamp; // 入库时间

public:
    Warehouse(int cap, double rent) {
        capacity = cap;
        occupied = false;
        rental = rent;
        timestamp = 0;
    }

    bool isOccupied() {
        return occupied;
    }

    void setOccupied(bool value) {
        occupied = value;
    }

    double getRental() {
        return rental;
    }

    int getTimestamp() {
        return timestamp;
    }

    void setTimestamp(int time) {
        timestamp = time;
    }

    int getCapacity() {
        return capacity;
    }
};

class Storage {
private:
    vector<Warehouse*> warehouses;

public:
    Storage() {}

    void addWarehouse(Warehouse* warehouse) {
        warehouses.push_back(warehouse);
    }

    void printAvailableWarehouses() {
        cout << 'Available warehouses:' << endl;
        for (int i = 0; i < warehouses.size(); i++) {
            if (!warehouses[i]->isOccupied()) {
                cout << 'Warehouse ' << i+1 << ': Capacity = ' << warehouses[i]->getCapacity() << ', Rental = ' << warehouses[i]->getRental() << endl;
            }
        }
    }

    void storeGoods(int weight) {
        // 查找可用的库房
        vector<Warehouse*> availableWarehouses;
        for (int i = 0; i < warehouses.size(); i++) {
            if (!warehouses[i]->isOccupied() && warehouses[i]->getCapacity() >= weight) {
                availableWarehouses.push_back(warehouses[i]);
            }
        }

        // 根据费用进行排序
        sort(availableWarehouses.begin(), availableWarehouses.end(), [](Warehouse* a, Warehouse* b) {
            return a->getRental() < b->getRental();
        });

        if (availableWarehouses.empty()) {
            cout << 'No available warehouses for storing goods.' << endl;
        } else {
            Warehouse* chosenWarehouse = availableWarehouses[0];
            chosenWarehouse->setOccupied(true);
            chosenWarehouse->setTimestamp(time(0));
            cout << 'Goods stored in Warehouse: Capacity = ' << chosenWarehouse->getCapacity() << ', Rental = ' << chosenWarehouse->getRental() << endl;
        }
    }

    void releaseWarehouse(int index) {
        if (index < 1 || index > warehouses.size()) {
            cout << 'Invalid warehouse index.' << endl;
        } else if (!warehouses[index-1]->isOccupied()) {
            cout << 'Warehouse is not occupied.' << endl;
        } else {
            Warehouse* chosenWarehouse = warehouses[index-1];
            chosenWarehouse->setOccupied(false);
            int duration = time(0) - chosenWarehouse->getTimestamp();
            double totalRental = duration * chosenWarehouse->getRental();
            cout << 'Warehouse released. Total rental: ' << totalRental << endl;
        }
    }
};

int main() {
    Warehouse w1(100, 10.0);
    Warehouse w2(200, 8.0);
    Warehouse w3(150, 12.0);

    Storage storage;
    storage.addWarehouse(&w1);
    storage.addWarehouse(&w2);
    storage.addWarehouse(&w3);

    storage.printAvailableWarehouses();

    storage.storeGoods(120);
    storage.storeGoods(180);
    storage.storeGoods(90);

    storage.releaseWarehouse(1);
    storage.releaseWarehouse(2);

    return 0;
}

代码解释:

  1. Warehouse 类:

    • 包含库房容量 (capacity)、状态 (occupied)、日租金 (rental) 和入库时间 (timestamp) 属性。
    • 提供了获取和设置这些属性的成员函数。
  2. Storage 类:

    • 使用 vector 存储多个 Warehouse 对象指针。
    • 提供了添加库房 (addWarehouse)、打印可用库房 (printAvailableWarehouses)、存储货物 (storeGoods) 和释放库房 (releaseWarehouse) 的成员函数。
  3. main 函数:

    • 创建了三个 Warehouse 对象并将其添加到 Storage 对象中。
    • 打印可用库房列表。
    • 进行三次货物入库操作,根据货物重量选择符合条件的可用库房,并选择费用最低的库房进行存储。
    • 进行两次出库操作,释放对应的库房,并计算出租金总额。

注意:

  • 程序中使用了 time(0) 函数来获取当前时间作为入库时间戳,该函数返回的是从 1970 年 1 月 1 日至今的秒数。
  • 该程序假设库房只能整租,不能零租。
  • 出库操作需要提供库房索引,以便释放相应的库房。

希望这个 C++ 仓库管理系统程序可以帮助你理解如何使用 C++ 来实现货物入库和出库功能。


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

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