学生在校园能用“校园一卡通”进行多种消费,如进餐、洗澡和在校内超市购买商品等。学生校园消费信息包括消费“校园一卡通”卡号、持卡学生姓名、消费日期、消费类型及消费金额。试用C++动态数组设计一学生校园消费记录系统,使之能提供以下功能: 1.录入学生的校园消费信息; 2.修改某个学生的某次校园消费信息; 3.查询某个学生的校园消费情况; 4.删除某个学生的某次校园消费信息; 5.统计某段时间内,进行校园消费的学生姓名及消费金额,按消费金额由多到少排序; 6.按消费类型分类,统计某段时间内,在每种消费类型上学生的消费总额。 7.系统以菜单方式工作。
时间: 2024-02-09 21:09:47 浏览: 147
好的,根据您的要求,我可以为您设计一个使用C++动态数组实现的学生校园消费记录系统,实现以下功能:
1. 录入学生的校园消费信息
2. 修改某个学生的某次校园消费信息
3. 查询某个学生的校园消费情况
4. 删除某个学生的某次校园消费信息
5. 统计某段时间内,进行校园消费的学生姓名及消费金额,按消费金额由多到少排序
6. 按消费类型分类,统计某段时间内,在每种消费类型上学生的消费总额
7. 系统以菜单方式工作。
以下是该系统的设计思路:
1. 首先,需要设计一个学生类,该类包含学生的基本信息,如学号、姓名、班级等。
```c++
class Student {
public:
string id; // 学号
string name; // 姓名
string className; // 班级
};
```
2. 接着,需要设计一个消费记录类,包含消费的时间、地点、类型、金额等信息。
```c++
class Record {
public:
string cardNumber; // 校园一卡通卡号
string studentName; // 持卡学生姓名
string date; // 消费日期
string type; // 消费类型
double amount; // 消费金额
};
```
3. 然后,需要设计一个消费记录管理类,用于对消费记录进行管理,包括添加、修改、查询、删除等操作,以及按时间、消费类型进行统计。
```c++
class RecordManager {
public:
void addRecord(Record r); // 添加消费记录
void updateRecord(Record r); // 修改消费记录
void deleteRecord(Record r); // 删除消费记录
vector<Record> searchRecord(string name); // 查询学生的消费记录
void statsByTime(string startTime, string endTime); // 按时间统计消费记录
void statsByType(string startTime, string endTime); // 按类型统计消费记录
private:
vector<Record> records; // 消费记录列表
};
```
4. 最后,可以设计一个主程序,用于测试该系统的功能。
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 学生类
class Student {
public:
string id; // 学号
string name; // 姓名
string className; // 班级
};
// 消费记录类
class Record {
public:
string cardNumber; // 校园一卡通卡号
string studentName; // 持卡学生姓名
string date; // 消费日期
string type; // 消费类型
double amount; // 消费金额
};
// 消费记录管理类
class RecordManager {
public:
// 添加消费记录
void addRecord(Record r) {
records.push_back(r);
}
// 修改消费记录
void updateRecord(Record r) {
for (int i = 0; i < records.size(); i++) {
if (records[i].studentName == r.studentName && records[i].date == r.date) {
records[i] = r;
break;
}
}
}
// 删除消费记录
void deleteRecord(Record r) {
for (int i = 0; i < records.size(); i++) {
if (records[i].studentName == r.studentName && records[i].date == r.date) {
records.erase(records.begin() + i);
break;
}
}
}
// 查询学生的消费记录
vector<Record> searchRecord(string name) {
vector<Record> result;
for (int i = 0; i < records.size(); i++) {
if (records[i].studentName == name) {
result.push_back(records[i]);
}
}
return result;
}
// 按时间统计消费记录
void statsByTime(string startTime, string endTime) {
vector<pair<string, double>> result;
for (int i = 0; i < records.size(); i++) {
if (records[i].date >= startTime && records[i].date <= endTime) {
bool found = false;
for (int j = 0; j < result.size(); j++) {
if (result[j].first == records[i].studentName) {
result[j].second += records[i].amount;
found = true;
break;
}
}
if (!found) {
result.push_back(make_pair(records[i].studentName, records[i].amount));
}
}
}
sort(result.begin(), result.end(), [](const pair<string, double>& a, const pair<string, double>& b) {
return a.second > b.second;
});
cout << "时间段: " << startTime << " - " << endTime << endl;
for (int i = 0; i < result.size(); i++) {
cout << result[i].first << " 消费金额: " << result[i].second << endl;
}
}
// 按类型统计消费记录
void statsByType(string startTime, string endTime) {
vector<pair<string, double>> result;
for (int i = 0; i < records.size(); i++) {
if (records[i].date >= startTime && records[i].date <= endTime) {
bool found = false;
for (int j = 0; j < result.size(); j++) {
if (result[j].first == records[i].type) {
result[j].second += records[i].amount;
found = true;
break;
}
}
if (!found) {
result.push_back(make_pair(records[i].type, records[i].amount));
}
}
}
cout << "时间段: " << startTime << " - " << endTime << endl;
for (int i = 0; i < result.size(); i++) {
cout << result[i].first << " 消费金额: " << result[i].second << endl;
}
}
private:
vector<Record> records; // 消费记录列表
};
// 主程序
int main() {
RecordManager rm;
while (true) {
cout << "请选择操作:\n1.录入学生的校园消费信息\n2.修改某个学生的某次校园消费信息\n3.查询某个学生的校园消费情况\n4.删除某个学生的某次校园消费信息\n5.统计某段时间内,进行校园消费的学生姓名及消费金额,按消费金额由多到少排序\n6.按消费类型分类,统计某段时间内,在每种消费类型上学生的消费总额\n7.退出系统\n请选择操作:";
int choice;
cin >> choice;
if (choice == 1) {
Record r;
cout << "请输入消费记录:\n";
cout << "校园一卡通卡号:";
cin >> r.cardNumber;
cout << "持卡学生姓名:";
cin >> r.studentName;
cout << "消费日期:";
cin >> r.date;
cout << "消费类型:";
cin >> r.type;
cout << "消费金额:";
cin >> r.amount;
rm.addRecord(r);
cout << "添加成功!\n";
}
else if (choice == 2) {
Record r;
cout << "请输入要修改的消费记录:\n";
cout << "持卡学生姓名:";
cin >> r.studentName;
cout << "消费日期:";
cin >> r.date;
cout << "消费类型:";
cin >> r.type;
cout << "消费金额:";
cin >> r.amount;
rm.updateRecord(r);
cout << "修改成功!\n";
}
else if (choice == 3) {
string name;
cout << "请输入学生姓名:";
cin >> name;
vector<Record> records = rm.searchRecord(name);
if (records.empty()) {
cout << "没有找到该学生的消费记录!\n";
}
else {
cout << "学生姓名: " << name << endl;
for (int i = 0; i < records.size(); i++) {
cout << "消费日期: " << records[i].date << endl;
cout << "消费类型: " << records[i].type << endl;
cout << "消费金额: " << records[i].amount << endl;
}
}
}
else if (choice == 4) {
Record r;
cout << "请输入要删除的消费记录:\n";
cout << "持卡学生姓名:";
cin >> r.studentName;
cout << "消费日期:";
cin >> r.date;
rm.deleteRecord(r);
cout << "删除成功!\n";
}
else if (choice == 5) {
string startTime, endTime;
cout << "请输入时间段:\n";
cout << "开始时间:";
cin >> startTime;
cout << "结束时间:";
cin >> endTime;
rm.statsByTime(startTime, endTime);
}
else if (choice == 6) {
string startTime, endTime;
cout << "请输入时间段:\n";
cout << "开始时间:";
cin >> startTime;
cout << "结束时间:";
cin >> endTime;
rm.statsByType(startTime, endTime);
}
else if (choice == 7) {
cout << "退出系统!\n";
break;
}
else {
cout << "输入错误!\n";
}
}
return 0;
}
```
以上就是一个使用C++动态数组实现的学生校园消费记录系统的设计思路,您可以根据自己的需求进行修改和完善。
阅读全文