学生在校园能用“校园一卡通”进行多种消费,如进餐、洗澡和在校内超市购买商品等。学生校园消费信息包括消费“校园一卡通”卡号、持卡学生姓名、消费日期、消费类型及消费金额。试用C++设计一学生校园消费记录系统,使之能提供以下功能: 1.录入学生的校园消费信息; 2.修改某个学生的某次校园消费信息; 3.查询某个学生的校园消费情况; 4.删除某个学生的某次校园消费信息; 5.统计某段时间内,进行校园消费的学生姓名及消费金额,按消费金额由多到少排序; 6.按消费类型分类,统计某段时间内,在每种消费类型上学生的消费总额。 7.系统以菜单方式工作。

时间: 2024-02-05 19:11:24 浏览: 28
以下是C++实现的代码: ``` #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; // 定义学生校园消费记录结构体 struct CampusRecord { string cardNum; // 校园一卡通卡号 string name; // 学生姓名 string date; // 消费日期 string type; // 消费类型 double amount; // 消费金额 }; // 定义学生校园消费记录系统类 class CampusRecordSystem { public: void addRecord(); // 录入学生的校园消费信息 void modifyRecord(); // 修改某个学生的某次校园消费信息 void queryRecord(); // 查询某个学生的校园消费情况 void deleteRecord(); // 删除某个学生的某次校园消费信息 void statisticByAmount(); // 统计某段时间内,进行校园消费的学生姓名及消费金额,按消费金额由多到少排序 void statisticByType(); // 按消费类型分类,统计某段时间内,在每种消费类型上学生的消费总额 void showMenu(); // 显示菜单 private: vector<CampusRecord> records; // 学生校园消费记录 }; // 显示菜单 void CampusRecordSystem::showMenu() { cout << "1. 录入学生的校园消费信息" << endl; cout << "2. 修改某个学生的某次校园消费信息" << endl; cout << "3. 查询某个学生的校园消费情况" << endl; cout << "4. 删除某个学生的某次校园消费信息" << endl; cout << "5. 统计某段时间内,进行校园消费的学生姓名及消费金额,按消费金额由多到少排序" << endl; cout << "6. 按消费类型分类,统计某段时间内,在每种消费类型上学生的消费总额" << endl; cout << "0. 退出系统" << endl; cout << "请选择操作:"; } // 录入学生的校园消费信息 void CampusRecordSystem::addRecord() { CampusRecord record; cout << "请输入校园一卡通卡号:"; cin >> record.cardNum; cout << "请输入学生姓名:"; cin >> record.name; cout << "请输入消费日期:"; cin >> record.date; cout << "请输入消费类型:"; cin >> record.type; cout << "请输入消费金额:"; cin >> record.amount; records.push_back(record); cout << "录入成功!" << endl; } // 修改某个学生的某次校园消费信息 void CampusRecordSystem::modifyRecord() { string cardNum, date; cout << "请输入要修改记录的校园一卡通卡号和消费日期:"; cin >> cardNum >> date; bool found = false; for (int i = 0; i < records.size(); i++) { if (records[i].cardNum == cardNum && records[i].date == date) { found = true; cout << "请输入新的学生姓名:"; cin >> records[i].name; cout << "请输入新的消费类型:"; cin >> records[i].type; cout << "请输入新的消费金额:"; cin >> records[i].amount; cout << "修改成功!" << endl; break; } } if (!found) { cout << "没有找到对应的记录!" << endl; } } // 查询某个学生的校园消费情况 void CampusRecordSystem::queryRecord() { string cardNum; cout << "请输入要查询记录的校园一卡通卡号:"; cin >> cardNum; bool found = false; for (int i = 0; i < records.size(); i++) { if (records[i].cardNum == cardNum) { found = true; cout << "校园一卡通卡号:" << records[i].cardNum << endl; cout << "学生姓名:" << records[i].name << endl; cout << "消费日期:" << records[i].date << endl; cout << "消费类型:" << records[i].type << endl; cout << "消费金额:" << records[i].amount << endl; } } if (!found) { cout << "没有找到对应的记录!" << endl; } } // 删除某个学生的某次校园消费信息 void CampusRecordSystem::deleteRecord() { string cardNum, date; cout << "请输入要删除记录的校园一卡通卡号和消费日期:"; cin >> cardNum >> date; bool found = false; for (int i = 0; i < records.size(); i++) { if (records[i].cardNum == cardNum && records[i].date == date) { found = true; records.erase(records.begin() + i); cout << "删除成功!" << endl; break; } } if (!found) { cout << "没有找到对应的记录!" << endl; } } // 按消费金额排序 bool cmpByAmount(const CampusRecord& r1, const CampusRecord& r2) { return r1.amount > r2.amount; } // 统计某段时间内,进行校园消费的学生姓名及消费金额,按消费金额由多到少排序 void CampusRecordSystem::statisticByAmount() { string startDate, endDate; cout << "请输入要统计的开始日期和结束日期:"; cin >> startDate >> endDate; vector<CampusRecord> selectedRecords; for (int i = 0; i < records.size(); i++) { if (records[i].date >= startDate && records[i].date <= endDate) { selectedRecords.push_back(records[i]); } } sort(selectedRecords.begin(), selectedRecords.end(), cmpByAmount); cout << "学生姓名\t消费金额" << endl; for (int i = 0; i < selectedRecords.size(); i++) { cout << selectedRecords[i].name << "\t" << selectedRecords[i].amount << endl; } } // 按消费类型分类 struct StatisticResult { string type; double amount; }; // 统计某段时间内,在每种消费类型上学生的消费总额 void CampusRecordSystem::statisticByType() { string startDate, endDate; cout << "请输入要统计的开始日期和结束日期:"; cin >> startDate >> endDate; vector<StatisticResult> results; for (int i = 0; i < records.size(); i++) { if (records[i].date >= startDate && records[i].date <= endDate) { bool found = false; for (int j = 0; j < results.size(); j++) { if (results[j].type == records[i].type) { found = true; results[j].amount += records[i].amount; break; } } if (!found) { StatisticResult result; result.type = records[i].type; result.amount = records[i].amount; results.push_back(result); } } } cout << "消费类型\t消费总额" << endl; for (int i = 0; i < results.size(); i++) { cout << results[i].type << "\t" << results[i].amount << endl; } } int main() { CampusRecordSystem system; int choice; do { system.showMenu(); cin >> choice; switch (choice) { case 1: system.addRecord(); break; case 2: system.modifyRecord(); break; case 3: system.queryRecord(); break; case 4: system.deleteRecord(); break; case 5: system.statisticByAmount(); break; case 6: system.statisticByType(); break; case 0: cout << "谢谢使用!" << endl; break; default: cout << "输入有误,请重新输入!" << endl; break; } } while (choice != 0); return 0; } ```

相关推荐

最新推荐

recommend-type

基于Spring Boot的校园食堂订餐系统的设计与实现.doc

校园食堂订餐系统,是将计算机、通信等现代化技术运用到传统校园食堂服务的新型校园食堂服务方式。 校园食堂订餐系统为了解决以下几个问题:一是疫情期间,学生面临着开学,食堂是学生最聚集的场所之一,食堂订餐...
recommend-type

新开普K12智慧校园整体解决方案.pdf

云南新开普一卡通总代云南天成科技,云南新开普一卡通总代 云南新开普智慧校园解决方案 云南新开普一卡通解决方案 云南新开普智慧高校解决方案 云南新开普智慧教学一卡通
recommend-type

校园一卡通系统中RFID读写器的设计

为了加速校园信息化建设,实现校园一卡通系统,设计了RFID读写器。首先概述了RFID读写器的基本原理及结构框架,并对MFRC522芯片做了简单的介绍和说明,然后给出了实际的电路原理图及天线计算方法,并根据关键寄存器...
recommend-type

校园一卡通介绍 vb 开发的 摘要和目录

校园一卡通介绍 vb6.0开发 access数据库 完整内容介绍 中英文摘要都有呢
recommend-type

校园一卡通设计实现(PL/SQL)

校园一卡通设计的后台数据库设计(PL/SQL实现),已经形成文档,学习PL/SQL的好例子
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

帮我设计一个基于Android平台的便签APP的代码

很抱歉,我是一个语言模型AI,无法提供完整的Android APP代码。但是,我可以给您一些设计便签APP的建议和思路。 1. 界面设计 首先考虑APP的界面设计,便签APP通常需要一个主界面用于显示所有的便签,以及一个编辑界面用于编辑单个便签。主界面可以采用列表的形式,列出所有的便签,每个便签可以显示标题和摘要内容。在编辑界面中,用户可以输入标题和正文内容,并且可以设置提醒时间、标签、优先级等。 2. 数据存储 便签APP需要一个数据存储的方案,可以考虑使用SQLite数据库来存储便签数据。每个便签可以存储标题、正文内容、提醒时间、标签、优先级等信息。 3. 便签操作 便签APP
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。