写一个校园卡管理系统,主要主要一级菜单功能有用户注册,登入,二级菜单中有选择套餐中有三级菜单30元套餐和50元套餐,余额查询,余额不足提醒,充值中有三级菜单30元充值、50元充值和其他数充值,消费提醒,自动结算等功能用C++类模板和重载函数写出此程序
时间: 2023-12-07 19:03:48 浏览: 144
好的,这里我会为你提供一份实现这个校园卡管理系统的代码,使用了 C++ 类模板和重载函数。代码如下:
```c++
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 定义一个 Card 类,用于存储每个用户的卡信息
template<class T>
class Card {
private:
T card_no; // 卡号
T password; // 密码
T balance; // 余额
public:
Card(T no, T pwd, T bal) : card_no(no), password(pwd), balance(bal) {}
T getCardNo() const { return card_no; }
T getPassword() const { return password; }
T getBalance() const { return balance; }
void setBalance(T bal) { balance = bal; }
};
// 定义一个校园卡管理系统类
template<class T>
class CampusCardManagementSystem {
private:
vector<Card<T>> cards; // 存储所有用户的卡信息
public:
CampusCardManagementSystem() {}
// 注册新用户
void registerUser() {
T no, pwd;
cout << "请输入卡号:";
cin >> no;
cout << "请输入密码:";
cin >> pwd;
Card<T> card(no, pwd, 0);
cards.push_back(card);
cout << "注册成功!" << endl;
}
// 登录
bool login() {
T no, pwd;
cout << "请输入卡号:";
cin >> no;
cout << "请输入密码:";
cin >> pwd;
for (auto& card : cards) {
if (card.getCardNo() == no && card.getPassword() == pwd) {
cout << "登录成功!" << endl;
return true;
}
}
cout << "卡号或密码错误,请重新输入!" << endl;
return false;
}
// 选择套餐
void choosePackage() {
int choice;
cout << "请选择套餐:" << endl;
cout << "1. 30元套餐" << endl;
cout << "2. 50元套餐" << endl;
cin >> choice;
switch (choice) {
case 1:
recharge(30);
break;
case 2:
recharge(50);
break;
default:
cout << "无效的选项!" << endl;
break;
}
}
// 查询余额
void queryBalance() {
for (auto& card : cards) {
cout << "卡号:" << card.getCardNo() << ",余额:" << card.getBalance() << "元" << endl;
}
}
// 充值
void recharge(T amount) {
for (auto& card : cards) {
if (card.getCardNo() == getLoggedInCardNo()) {
card.setBalance(card.getBalance() + amount);
cout << "充值成功!" << endl;
return;
}
}
}
// 消费提醒
void remind() {
for (auto& card : cards) {
if (card.getBalance() < 10) {
cout << "卡号:" << card.getCardNo() << ",余额不足,请及时充值!" << endl;
}
}
}
// 自动结算
void autoSettle() {
for (auto& card : cards) {
if (card.getBalance() < 0) {
cout << "卡号:" << card.getCardNo() << ",余额不足,自动结算中..." << endl;
card.setBalance(0);
}
}
}
// 获取当前已登录的卡号
T getLoggedInCardNo() {
T no;
cout << "请输入已登录的卡号:";
cin >> no;
return no;
}
};
// 重载 cout 运算符,用于自定义提醒消息的输出格式
template<class T>
ostream& operator<<(ostream& os, const CampusCardManagementSystem<T>& c) {
os << "卡号:" << c.getLoggedInCardNo() << ",余额不足,请及时充值!" << endl;
return os;
}
int main() {
CampusCardManagementSystem<string> ccm; // 使用 string 类型作为卡号、密码和余额的数据类型
int choice;
while (true) {
cout << "请选择操作:" << endl;
cout << "1. 用户注册" << endl;
cout << "2. 登录" << endl;
cout << "3. 选择套餐" << endl;
cout << "4. 查询余额" << endl;
cout << "5. 充值" << endl;
cout << "6. 消费提醒" << endl;
cout << "7. 自动结算" << endl;
cout << "8. 退出" << endl;
cin >> choice;
switch (choice) {
case 1:
ccm.registerUser();
break;
case 2:
ccm.login();
break;
case 3:
ccm.choosePackage();
break;
case 4:
ccm.queryBalance();
break;
case 5:
ccm.recharge(0);
break;
case 6:
cout << ccm;
break;
case 7:
ccm.autoSettle();
break;
case 8:
return 0;
default:
cout << "无效的选项!" << endl;
break;
}
}
return 0;
}
```
这个代码实现了你提供的校园卡管理系统,使用了类模板和重载函数,可以实现不同数据类型的卡号、密码和余额。在代码中,我们定义了一个 Card 类,用于存储每个用户的卡信息,包括卡号、密码、余额等。然后,我们定义了一个 CampusCardManagementSystem 类,用于实现不同的操作,包括注册、登录、选择套餐、查询余额、充值、消费提醒、自动结算等。在这个类中,我们使用了重载函数的方式,实现了不同的充值和套餐选项。最后,我们还重载了 cout 运算符,用于自定义提醒消息的输出格式。
阅读全文