你可以用c++帮我写一个简单的快件管理系统吗,要求内置管理员的账号密码,取件人可以凭借手机号或者快递单号取快递,管理员可以进行快件的录入,删除,读取,修改,查询已取快件,查询未取快件
时间: 2024-03-12 21:45:56 浏览: 186
当然可以!以下是一个简单的快件管理系统的示例代码:
```c++
#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
using namespace std;
// 定义快递结构体
struct Express{
string name; // 收件人姓名
string phone; // 收件人手机号
string id; // 快递单号
bool is_taken; // 是否已取件
};
// 定义管理员结构体
struct Admin{
string username; // 管理员账号
string password; // 管理员密码
};
// 存储快递信息的文件名
const string FILENAME = "express.dat";
// 定义函数
void login(Admin &admin); // 管理员登录
void addExpress(); // 录入快递信息
void deleteExpress(); // 删除快递信息
void modifyExpress(); // 修改快递信息
void printExpress(); // 读取快递信息
void printTakenExpress(); // 查询已取快递
void printUntakenExpress(); // 查询未取快递
int main(){
Admin admin;
login(admin); // 管理员登录
int choice;
while(true){
// 显示菜单
cout << "请选择操作:\n";
cout << "1. 录入快递信息\n";
cout << "2. 删除快递信息\n";
cout << "3. 修改快递信息\n";
cout << "4. 读取快递信息\n";
cout << "5. 查询已取快递\n";
cout << "6. 查询未取快递\n";
cout << "0. 退出系统\n";
cout << "请输入选项:";
cin >> choice;
switch(choice){
case 1:
addExpress();
break;
case 2:
deleteExpress();
break;
case 3:
modifyExpress();
break;
case 4:
printExpress();
break;
case 5:
printTakenExpress();
break;
case 6:
printUntakenExpress();
break;
case 0:
cout << "感谢使用快件管理系统!\n";
exit(0);
default:
cout << "无效选择,请重新选择!\n";
break;
}
}
return 0;
}
// 管理员登录
void login(Admin &admin){
cout << "请输入管理员账号:";
cin >> admin.username;
cout << "请输入管理员密码:";
cin >> admin.password;
// 检查管理员账号与密码
if(admin.username != "admin" || admin.password != "admin"){
cout << "管理员账号或密码错误!\n";
exit(1); // 退出程序
}
}
// 录入快递信息
void addExpress(){
Express express;
cout << "请输入收件人姓名:";
cin >> express.name;
cout << "请输入收件人手机号:";
cin >> express.phone;
cout << "请输入快递单号:";
cin >> express.id;
express.is_taken = false; // 初始未取件
// 打开文件,以追加模式写入快递信息
ofstream fout(FILENAME, ios::app);
if(!fout){
cout << "文件打开失败!\n";
exit(1); // 退出程序
}
fout.write((char*)&express, sizeof(Express));
fout.close();
cout << "快递信息录入成功!\n";
}
// 删除快递信息
void deleteExpress(){
string id;
cout << "请输入要删除的快递单号:";
cin >> id;
// 打开文件,以读写模式操作快递信息
ifstream fin(FILENAME);
if(!fin){
cout << "文件打开失败!\n";
exit(1); // 退出程序
}
ofstream fout("temp.dat");
if(!fout){
cout << "文件打开失败!\n";
exit(1); // 退出程序
}
Express express;
bool found = false; // 是否找到要删除的快递信息
while(fin.read((char*)&express, sizeof(Express))){
if(express.id != id){ // 不是要删除的快递信息,写入 temp.dat
fout.write((char*)&express, sizeof(Express));
}
else{
found = true;
}
}
fin.close();
fout.close();
if(found){
remove(FILENAME.c_str()); // 删除原文件
rename("temp.dat", FILENAME.c_str()); // 重命名 temp.dat 为原文件名
cout << "快递信息删除成功!\n";
}
else{
remove("temp.dat"); // 删除临时文件
cout << "未找到要删除的快递信息!\n";
}
}
// 修改快递信息
void modifyExpress(){
string id;
cout << "请输入要修改的快递单号:";
cin >> id;
// 打开文件,以读写模式操作快递信息
fstream file(FILENAME, ios::in | ios::out | ios::binary);
if(!file){
cout << "文件打开失败!\n";
exit(1); // 退出程序
}
Express express;
bool found = false; // 是否找到要修改的快递信息
while(file.read((char*)&express, sizeof(Express))){
if(express.id == id){ // 找到要修改的快递信息
found = true;
cout << "请输入新的收件人姓名:";
cin >> express.name;
cout << "请输入新的收件人手机号:";
cin >> express.phone;
// 移动文件指针,以覆盖原有快递信息
file.seekp(-sizeof(Express), ios::cur);
file.write((char*)&express, sizeof(Express));
cout << "快递信息修改成功!\n";
break;
}
}
file.close();
if(!found){
cout << "未找到要修改的快递信息!\n";
}
}
// 读取快递信息
void printExpress(){
// 打开文件,以读模式读取快递信息
ifstream fin(FILENAME);
if(!fin){
cout << "文件打开失败!\n";
exit(1); // 退出程序
}
Express express;
while(fin.read((char*)&express, sizeof(Express))){
cout << "收件人姓名:" << express.name << endl;
cout << "收件人手机号:" << express.phone << endl;
cout << "快递单号:" << express.id << endl;
cout << "是否已取件:" << (express.is_taken ? "是" : "否") << endl;
cout << endl;
}
fin.close();
}
// 查询已取快递
void printTakenExpress(){
// 打开文件,以读模式读取快递信息
ifstream fin(FILENAME);
if(!fin){
cout << "文件打开失败!\n";
exit(1); // 退出程序
}
Express express;
bool found = false; // 是否找到已取快递信息
while(fin.read((char*)&express, sizeof(Express))){
if(express.is_taken){ // 已取件
found = true;
cout << "收件人姓名:" << express.name << endl;
cout << "收件人手机号:" << express.phone << endl;
cout << "快递单号:" << express.id << endl;
cout << endl;
}
}
fin.close();
if(!found){
cout << "未找到已取快递信息!\n";
}
}
// 查询未取快递
void printUntakenExpress(){
// 打开文件,以读模式读取快递信息
ifstream fin(FILENAME);
if(!fin){
cout << "文件打开失败!\n";
exit(1); // 退出程序
}
Express express;
bool found = false; // 是否找到未取快递信息
while(fin.read((char*)&express, sizeof(Express))){
if(!express.is_taken){ // 未取件
found = true;
cout << "收件人姓名:" << express.name << endl;
cout << "收件人手机号:" << express.phone << endl;
cout << "快递单号:" << express.id << endl;
cout << endl;
}
}
fin.close();
if(!found){
cout << "未找到未取快递信息!\n";
}
}
```
注意:以上示例代码仅为参考,实际应用中还需要考虑异常处理、输入验证、数据安全等问题。
阅读全文