C++ 仓库管理系统:实现货物入库和出库功能
以下是一个实现仓库管理系统的 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;
}
代码解释:
-
Warehouse类:- 包含库房容量 (
capacity)、状态 (occupied)、日租金 (rental) 和入库时间 (timestamp) 属性。 - 提供了获取和设置这些属性的成员函数。
- 包含库房容量 (
-
Storage类:- 使用
vector存储多个Warehouse对象指针。 - 提供了添加库房 (
addWarehouse)、打印可用库房 (printAvailableWarehouses)、存储货物 (storeGoods) 和释放库房 (releaseWarehouse) 的成员函数。
- 使用
-
main函数:- 创建了三个
Warehouse对象并将其添加到Storage对象中。 - 打印可用库房列表。
- 进行三次货物入库操作,根据货物重量选择符合条件的可用库房,并选择费用最低的库房进行存储。
- 进行两次出库操作,释放对应的库房,并计算出租金总额。
- 创建了三个
注意:
- 程序中使用了
time(0)函数来获取当前时间作为入库时间戳,该函数返回的是从 1970 年 1 月 1 日至今的秒数。 - 该程序假设库房只能整租,不能零租。
- 出库操作需要提供库房索引,以便释放相应的库房。
希望这个 C++ 仓库管理系统程序可以帮助你理解如何使用 C++ 来实现货物入库和出库功能。
原文地址: https://www.cveoy.top/t/topic/cHVK 著作权归作者所有。请勿转载和采集!