你可以用c++帮我写一个简单的快件管理系统吗,要求进入系统后首先选择取件人模式或管理员模式,内置管理员的账号密码,取件人可以凭借手机号或者快递单号取快递,管理员可以进行快件的录入,删除,读取,修改,查询已取快件,查询未取快件,一个快件应包含的信息有:随机生成的快递单号,寄件人,寄件人手机号,寄件人住址,收件人,收件人手机号,收件人住址。退出系统时回到选择模式的界面
时间: 2024-03-12 08:49:16 浏览: 13
好的,以下是基于您的需求的 C++ 代码实现:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <fstream>
using namespace std;
// 定义一个结构体,表示一个快件的信息
struct Package {
string id; // 快递单号
string sender; // 寄件人
string sender_phone; // 寄件人手机号
string sender_address; // 寄件人住址
string receiver; // 收件人
string receiver_phone; // 收件人手机号
string receiver_address; // 收件人住址
bool is_taken; // 是否已取件
};
// 定义一个类,表示快件管理系统
class PackageSystem {
public:
PackageSystem() {
// 读入已有的快件信息
ifstream infile("packages.dat", ios::in | ios::binary);
if (infile.is_open()) {
Package package;
while (infile.read((char *)&package, sizeof(Package))) {
packages.push_back(package);
}
infile.close();
}
// 输出未取快件列表
cout << "未取快件列表:" << endl;
for (auto package : packages) {
if (!package.is_taken) {
cout << package.id << " " << package.receiver << " " << package.receiver_phone << " " << package.receiver_address << endl;
}
}
}
void run() {
while (true) {
// 选择模式
cout << endl << "请选择模式(1.取件人模式 2.管理员模式 0.退出系统):";
int mode;
cin >> mode;
if (mode == 0) {
break;
}
else if (mode == 1) {
// 取件人模式
string input;
cout << "请输入手机号或快递单号:";
cin >> input;
bool found = false;
for (auto &package : packages) {
if (package.receiver_phone == input || package.id == input) {
if (package.is_taken) {
cout << "该快件已被取走!" << endl;
}
else {
cout << "取件成功!" << endl;
package.is_taken = true;
found = true;
}
break;
}
}
if (!found) {
cout << "未找到该快件!" << endl;
}
}
else if (mode == 2) {
// 管理员模式
string username, password;
cout << "请输入管理员用户名和密码:" << endl;
cin >> username >> password;
if (username == "admin" && password == "admin") {
while (true) {
// 显示操作菜单
cout << endl << "请选择操作:(1.录入快件 2.删除快件 3.修改快件 4.查询已取快件 5.查询未取快件 0.返回上一级):";
int choice;
cin >> choice;
if (choice == 0) {
break;
}
switch (choice) {
case 1: {
// 录入快件
Package package;
package.id = generate_id();
cout << "请输入寄件人信息:" << endl;
cin >> package.sender >> package.sender_phone >> package.sender_address;
cout << "请输入收件人信息:" << endl;
cin >> package.receiver >> package.receiver_phone >> package.receiver_address;
package.is_taken = false;
packages.push_back(package);
cout << "快件已录入!" << endl;
break;
}
case 2: {
// 删除快件
string id;
cout << "请输入要删除的快递单号:";
cin >> id;
bool found = false;
for (auto iter = packages.begin(); iter != packages.end(); iter++) {
if (iter->id == id) {
packages.erase(iter);
found = true;
cout << "快件已删除!" << endl;
break;
}
}
if (!found) {
cout << "未找到该快件!" << endl;
}
break;
}
case 3: {
// 修改快件
string id;
cout << "请输入要修改的快递单号:";
cin >> id;
bool found = false;
for (auto &package : packages) {
if (package.id == id) {
cout << "请输入新的寄件人信息:" << endl;
cin >> package.sender >> package.sender_phone >> package.sender_address;
cout << "请输入新的收件人信息:" << endl;
cin >> package.receiver >> package.receiver_phone >> package.receiver_address;
found = true;
cout << "快件已修改!" << endl;
break;
}
}
if (!found) {
cout << "未找到该快件!" << endl;
}
break;
}
case 4: {
// 查询已取快件
cout << "已取快件列表:" << endl;
for (auto package : packages) {
if (package.is_taken) {
cout << package.id << " " << package.receiver << " " << package.receiver_phone << " " << package.receiver_address << endl;
}
}
break;
}
case 5: {
// 查询未取快件
cout << "未取快件列表:" << endl;
for (auto package : packages) {
if (!package.is_taken) {
cout << package.id << " " << package.receiver << " " << package.receiver_phone << " " << package.receiver_address << endl;
}
}
break;
}
default: {
cout << "无效的操作!" << endl;
break;
}
}
}
}
else {
cout << "用户名或密码错误!" << endl;
}
}
else {
cout << "无效的模式选择!" << endl;
}
}
// 保存快件信息到文件
ofstream outfile("packages.dat", ios::out | ios::binary);
if (outfile.is_open()) {
for (auto package : packages) {
outfile.write((char *)&package, sizeof(Package));
}
outfile.close();
}
}
private:
vector<Package> packages; // 快件列表
// 生成随机的快递单号
string generate_id() {
srand((unsigned)time(NULL));
string id = "";
for (int i = 0; i < 10; i++) {
id += (char)(rand() % 10 + '0');
}
return id;
}
};
int main() {
PackageSystem system;
system.run();
return 0;
}
```
这个程序中,快件信息被保存在了一个 `vector` 中,并且在程序启动时从文件中读入已有的快件信息,并输出未取快件列表。在管理员模式下,可以进行快件的录入、删除、读取、修改、查询已取快件、查询未取快件等操作,同时需要先输入管理员的账号密码进行验证。在取件人模式下,可以根据手机号或者快递单号取快递。所有模式下,用户可以选择退出系统,回到选择模式的界面。最后,程序结束时,将快件信息保存到文件中。