【C/C++】【学生成绩管理系统】深度剖析

可接各类C/C++管理系统课设

目录

实现功能

部分1:系统设置和主菜单

1. 引入头文件

2. 定义结构体

3. 函数声明

4. 主函数

部分2:添加学生信息

部分3:删除学生信息

部分4:修改学生信息

部分5:查询学生信息

部分6:显示信息列表

部分7:统计学生数据

部分8:清空系统数据

部分9: 退出系统函数

总结代码


该学生成绩管理系统是一个用C++实现的程序,通过控制台界面实现对学生信息的增删改查。系统包括以下功能:添加学生信息、删除学生信息、修改学生信息、查询学生信息、显示所有学生信息、统计学生成绩数据和清空系统数据。

实现功能

  1. 添加学生信息: 用户可以通过输入学生的ID、姓名、年龄、性别和成绩来添加学生信息。新添加的学生信息会被存储在一个向量中。

  2. 删除学生信息: 用户可以通过输入学生的ID来删除学生信息。程序会在向量中查找对应的学生ID,如果找到则删除该学生的信息。

  3. 修改学生信息: 用户可以通过输入学生的ID来修改学生信息。程序会在向量中查找对应的学生ID,如果找到则允许用户修改该学生的姓名、年龄、性别和成绩。

  4. 查询学生信息: 用户可以通过输入学生的ID来查询学生信息。程序会在向量中查找对应的学生ID,如果找到则显示该学生的详细信息。

  5. 显示信息列表: 程序会显示所有存储在向量中的学生信息列表,包括每个学生的ID、姓名、年龄、性别和成绩。使用格式化输出使信息更加整齐美观。

  6. 统计学生数据: 程序会计算并显示学生成绩的平均值、最高值和最低值。这有助于用户了解整体的学生成绩分布情况。

  7. 清空系统数据: 用户可以选择清空系统中所有学生的数据。这会删除向量中存储的所有学生信息。

  8. 退出系统: 用户选择退出系统时,程序会显示退出提示信息,并终止运行。

部分1:系统设置和主菜单

首先设置程序的基本结构和主菜单界面。

#include <iostream>
#include <vector>
#include <string>
#include <iomanip>using namespace std;// 定义一个结构体来保存学生信息
struct Student {int id;string name;int age;string gender;double grade;
};// 函数声明
void addStudent(vector<Student>& students);
void deleteStudent(vector<Student>& students);
void modifyStudent(vector<Student>& students);
void queryStudent(const vector<Student>& students);
void displayStudents(const vector<Student>& students);
void statistics(const vector<Student>& students);
void clearData(vector<Student>& students);
void exitSystem();int main() {vector<Student> students;int choice;while (true) {cout << "*****************欢迎来到学生成绩管理系统*****************\n";cout << "你可以进行以下操作:\n";cout << "1. 添加学生信息\n";cout << "2. 删除学生信息\n";cout << "3. 修改学生信息\n";cout << "4. 查询学生信息\n";cout << "5. 显示信息列表\n";cout << "6. 统计学生数据\n";cout << "7. 清空系统数据\n";cout << "0. 退出\n";cout << "请输入你的选择: ";cin >> choice;switch (choice) {case 1:addStudent(students);break;case 2:deleteStudent(students);break;case 3:modifyStudent(students);break;case 4:queryStudent(students);break;case 5:displayStudents(students);break;case 6:statistics(students);break;case 7:clearData(students);break;case 0:exitSystem();return 0;default:cout << "无效的选择,请重新输入。\n";}}return 0;
}

1. 引入头文件

首先,引入了C++标准库中的必要头文件:

#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
  • iostream:用于输入输出操作。
  • vector:用于动态数组(向量)的使用。
  • string:用于字符串操作。
  • iomanip:用于格式化输出。

2. 定义结构体

定义了一个结构体 Student,用于保存学生信息:

struct Student {int id;           // 学生IDstring name;      // 学生姓名int age;          // 学生年龄string gender;    // 学生性别double grade;     // 学生成绩
};

3. 函数声明

main 函数之前,声明了一些函数,这些函数将在后续部分实现:

void addStudent(vector<Student>& students);
void deleteStudent(vector<Student>& students);
void modifyStudent(vector<Student>& students);
void queryStudent(const vector<Student>& students);
void displayStudents(const vector<Student>& students);
void statistics(const vector<Student>& students);
void clearData(vector<Student>& students);
void exitSystem();

4. 主函数

主函数包含了一个无限循环,用于显示菜单并处理用户的选择:

int main() {vector<Student> students;int choice;while (true) {cout << "*****************欢迎来到学生成绩管理系统*****************\n";cout << "你可以进行以下操作:\n";cout << "1. 添加学生信息\n";cout << "2. 删除学生信息\n";cout << "3. 修改学生信息\n";cout << "4. 查询学生信息\n";cout << "5. 显示信息列表\n";cout << "6. 统计学生数据\n";cout << "7. 清空系统数据\n";cout << "0. 退出\n";cout << "请输入你的选择: ";cin >> choice;switch (choice) {case 1:addStudent(students);break;case 2:deleteStudent(students);break;case 3:modifyStudent(students);break;case 4:queryStudent(students);break;case 5:displayStudents(students);break;case 6:statistics(students);break;case 7:clearData(students);break;case 0:exitSystem();return 0;default:cout << "无效的选择,请重新输入。\n";}}return 0;
}
  • vector<Student> students:定义一个用于存储学生信息的向量。
  • int choice:用于存储用户的选择。

部分2:添加学生信息

这个功能允许用户输入新的学生信息到系统中。

void addStudent(vector<Student>& students) {Student newStudent;cout << "请输入学生ID: ";cin >> newStudent.id;cout << "请输入学生姓名: ";cin >> newStudent.name;cout << "请输入学生年龄: ";cin >> newStudent.age;cout << "请输入学生性别: ";cin >> newStudent.gender;cout << "请输入学生成绩: ";cin >> newStudent.grade;students.push_back(newStudent);cout << "学生信息添加成功!\n";
}
  • 使用 cin 获取用户输入的学生信息,并存储在 newStudent 变量中。
  • newStudent 添加到 students 向量中。
  • 提示用户添加成功。

部分3:删除学生信息

这个功能允许用户根据学生ID删除学生信息。

void deleteStudent(vector<Student>& students) {int id;cout << "请输入要删除的学生ID: ";cin >> id;for (auto it = students.begin(); it != students.end(); ++it) {if (it->id == id) {students.erase(it);cout << "学生信息删除成功!\n";return;}}cout << "未找到该学生ID。\n";
}
  • 获取用户输入的学生ID。
  • 使用迭代器遍历 students 向量,找到匹配的学生ID并删除。
  • 提示用户删除成功或未找到该学生ID。

部分4:修改学生信息

这个功能允许用户修改现有的学生信息。

void modifyStudent(vector<Student>& students) {int id;cout << "请输入要修改的学生ID: ";cin >> id;for (auto& student : students) {if (student.id == id) {cout << "请输入新的学生姓名: ";cin >> student.name;cout << "请输入新的学生年龄: ";cin >> student.age;cout << "请输入新的学生性别: ";cin >> student.gender;cout << "请输入新的学生成绩: ";cin >> student.grade;cout << "学生信息修改成功!\n";return;}}cout << "未找到该学生ID。\n";
}
  • 获取用户输入的学生ID。
  • 遍历 students 向量,找到匹配的学生ID并获取新的学生信息进行修改。
  • 提示用户修改成功或未找到该学生ID。

部分5:查询学生信息

这个功能允许用户根据学生ID查询并显示学生信息。

void queryStudent(const vector<Student>& students) {int id;cout << "请输入要查询的学生ID: ";cin >> id;for (const auto& student : students) {if (student.id == id) {cout << "学生ID: " << student.id << "\n";cout << "学生姓名: " << student.name << "\n";cout << "学生年龄: " << student.age << "\n";cout << "学生性别: " << student.gender << "\n";cout << "学生成绩: " << student.grade << "\n";return;}}cout << "未找到该学生ID。\n";
}
  • 获取用户输入的学生ID。
  • 遍历 students 向量,找到匹配的学生ID并显示学生信息。
  • 提示用户未找到该学生ID。

部分6:显示信息列表

这个功能显示所有学生的信息列表。

void displayStudents(const vector<Student>& students) {cout << setw(10) << "学生ID" << setw(20) << "学生姓名" << setw(10) << "年龄" << setw(10) << "性别" << setw(10) << "成绩" << "\n";for (const auto& student : students) {cout << setw(10) << student.id << setw(20) << student.name << setw(10) << student.age << setw(10) << student.gender << setw(10) << student.grade << "\n";}
}
  • 使用 setw 设置输出格式,确保信息对齐。
  • 遍历 students 向量,显示每个学生的信息。

部分7:统计学生数据

这个功能提供学生成绩的基本统计信息。

void statistics(const vector<Student>& students) {if (students.empty()) {cout << "没有学生数据。\n";return;}double sum = 0;double maxGrade = students[0].grade;double minGrade = students[0].grade;for (const auto& student : students) {sum += student.grade;if (student.grade > maxGrade) {maxGrade = student.grade;}if (student.grade < minGrade) {minGrade = student.grade;}}double average = sum / students.size();cout << "学生成绩统计:\n";cout << "平均成绩: " << average << "\n";cout << "最高成绩: " << maxGrade << "\n";cout << "最低成绩: " << minGrade << "\n";
}
  • 计算并显示学生成绩的平均值、最高值和最低值。
  • 如果没有学生数据,提示用户。

部分8:清空系统数据

这个功能清除系统中的所有学生数据。

void clearData(vector<Student>& students) {students.clear();cout << "系统数据已清空。\n";
}
  • 清空 students 向量中的所有数据。
  • 提示用户数据已清空。

部分9: 退出系统函数

实现了退出系统时的提示功能:

void exitSystem() {cout << "感谢使用学生成绩管理系统,再见!\n";
}
  • 提示用户系统退出信息。

总结代码

将所有部分整合在一起,形成完整的学生成绩管理系统代码如下:

#include <iostream>
#include <vector>
#include <string>
#include <iomanip>using namespace std;struct Student {int id;string name;int age;string gender;double grade;
};void addStudent(vector<Student>& students);
void deleteStudent(vector<Student>& students);
void modifyStudent(vector<Student>& students);
void queryStudent(const vector<Student>& students);
void displayStudents(const vector<Student>& students);
void statistics(const vector<Student>& students);
void clearData(vector<Student>& students);
void exitSystem();int main() {vector<Student> students;int choice;while (true) {cout << "*****************欢迎来到学生成绩管理系统*****************\n";cout << "你可以进行以下操作:\n";cout << "1. 添加学生信息\n";cout << "2. 删除学生信息\n";cout << "3. 修改学生信息\n";cout << "4. 查询学生信息\n";cout << "5. 显示信息列表\n";cout << "6. 统计学生数据\n";cout << "7. 清空系统数据\n";cout << "0. 退出\n";cout << "请输入你的选择: ";cin >> choice;switch (choice) {case 1:addStudent(students);break;case 2:deleteStudent(students);break;case 3:modifyStudent(students);break;case 4:queryStudent(students);break;case 5:displayStudents(students);break;case 6:statistics(students);break;case 7:clearData(students);break;case 0:exitSystem();return 0;default:cout << "无效的选择,请重新输入。\n";}}return 0;
}void addStudent(vector<Student>& students) {Student newStudent;cout << "请输入学生ID: ";cin >> newStudent.id;cout << "请输入学生姓名: ";cin >> newStudent.name;cout << "请输入学生年龄: ";cin >> newStudent.age;cout << "请输入学生性别: ";cin >> newStudent.gender;cout << "请输入学生成绩: ";cin >> newStudent.grade;students.push_back(newStudent);cout << "学生信息添加成功!\n";
}void deleteStudent(vector<Student>& students) {int id;cout << "请输入要删除的学生ID: ";cin >> id;for (auto it = students.begin(); it != students.end(); ++it) {if (it->id == id) {students.erase(it);cout << "学生信息删除成功!\n";return;}}cout << "未找到该学生ID。\n";
}void modifyStudent(vector<Student>& students) {int id;cout << "请输入要修改的学生ID: ";cin >> id;for (auto& student : students) {if (student.id == id) {cout << "请输入新的学生姓名: ";cin >> student.name;cout << "请输入新的学生年龄: ";cin >> student.age;cout << "请输入新的学生性别: ";cin >> student.gender;cout << "请输入新的学生成绩: ";cin >> student.grade;cout << "学生信息修改成功!\n";return;}}cout << "未找到该学生ID。\n";
}void queryStudent(const vector<Student>& students) {int id;cout << "请输入要查询的学生ID: ";cin >> id;for (const auto& student : students) {if (student.id == id) {cout << "学生ID: " << student.id << "\n";cout << "学生姓名: " << student.name << "\n";cout << "学生年龄: " << student.age << "\n";cout << "学生性别: " << student.gender << "\n";cout << "学生成绩: " << student.grade << "\n";return;}}cout << "未找到该学生ID。\n";
}void displayStudents(const vector<Student>& students) {cout << setw(10) << "学生ID" << setw(20) << "学生姓名" << setw(10) << "年龄" << setw(10) << "性别" << setw(10) << "成绩" << "\n";for (const auto& student : students) {cout << setw(10) << student.id << setw(20) << student.name << setw(10) << student.age << setw(10) << student.gender << setw(10) << student.grade << "\n";}
}void statistics(const vector<Student>& students) {if (students.empty()) {cout << "没有学生数据。\n";return;}double sum = 0;double maxGrade = students[0].grade;double minGrade = students[0].grade;for (const auto& student : students) {sum += student.grade;if (student.grade > maxGrade) {maxGrade = student.grade;}if (student.grade < minGrade) {minGrade = student.grade;}}double average = sum / students.size();cout << "学生成绩统计:\n";cout << "平均成绩: " << average << "\n";cout << "最高成绩: " << maxGrade << "\n";cout << "最低成绩: " << minGrade << "\n";
}void clearData(vector<Student>& students) {students.clear();cout << "系统数据已清空。\n";
}void exitSystem() {cout << "感谢使用学生成绩管理系统,再见!\n";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组元素的内存地址计算【数据结构与算法C#版】

数组元素被存储在连续的内存空间中&#xff0c;这意味着计算数组元素的内存地址非常容易。给定数组内存地址&#xff08;首 元素内存地址&#xff09;和某个元素的索引&#xff0c;我们可以使用下方图 所示的公式计算得到该元素的内存地址&#xff0c;从而直接 访问该元素。 观…

电源小白入门学习11——反激电源电路原理

电源小白入门学习11——反激电源、正激电源 隔离电源变压器介绍反激电源 前面我们学习了BUCK、BOOST、BUCK-BOOST 等各种各样的DCDC变换器&#xff0c;但是他们都有一共同的特点&#xff0c;即能量的传输路径时一个完整的通路&#xff0c;输入与输出之间不存在电气隔离&#xf…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串变换(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 字符串变换(100分) 🌍 评测功能需要订阅专栏后私信联系清隆…

【Unity实战篇】| 快速制作一个简易时钟,包括2D和3D时钟

前言 【Unity实战篇】| 快速制作一个时钟&#xff0c;包括2D和3D时钟一、2D时钟制作1.1 钟表盘制作1.2 指针制作1.3 钟表搭建1.4 设置时钟的中心点1.5 时钟旋转逻辑 二、3D时钟制作2.1 搭建表盘和指针2.2 调整指针的位置和节点2.3 时钟旋转逻辑 总结 前言 时钟 这个东西想必不…

JAVA小知识21:单列集合顶层接口Collection的使用

一、Collection简介 Collection是单列集合的顶层接口&#xff0c;所有的单列集合都集成自Collection。 那么什么是单列集合呢&#xff1f;我们上篇文章提到了List与ArrayList&#xff0c;List就是单列集合&#xff0c;他是无需可重复单列集合的顶层抽象类&#xff0c;我们学…

定个小目标之刷LeetCode热题(22)

这道题最容易想的就是排序后再遍历&#xff0c;但是时间复杂度就不是O(n)了&#xff0c;所以还是得用更优的解法&#xff0c;直接看题解&#xff0c;它是使用了HashSet&#xff0c;遍历数组&#xff0c;对于每一个数x&#xff0c;如果不存在x - 1则进入内循环&#xff0c;否则跳…

适合小白学习的项目1906java Web智慧食堂管理系统idea开发mysql数据库web结构java编程计算机网页源码servlet项目

一、源码特点 java Web智慧食堂管理系统是一套完善的信息管理系统&#xff0c;结合java 开发技术和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 bootstra…

C语言的网络编程

目录 引言 一、TCP/IP概述 1. TCP&#xff08;Transmission Control Protocol&#xff09; 2. UDP&#xff08;User Datagram Protocol&#xff09; 二、Socket编程基础 1. 服务器端 2. 客户端 三、URL与HTTP编程 1. 使用libcurl进行HTTP请求 表格总结 TCP/IP与Socke…

aop注解快速实现数据脱敏返回

说明&#xff1a; 公司之前数据接口数据管理不严格&#xff0c;很多接口的敏感数据都没有脱敏处理&#xff0c;直接返回给前端了&#xff0c;然后被甲方的第三方安全漏洞扫出来&#xff0c;老板要求紧急处理&#xff0c;常用的话在单个字段上加上脱敏注解会更加的灵活&#xf…

基于Quartus Prime18.1的安装与FPGA的基础仿真(联合Modelsim)教程

Quartus是一种美国科技公司Intel&#xff08;英特尔&#xff09;公司开发的FPGA&#xff08;现场可编辑门阵列&#xff09;设计编译软件&#xff0c;用作设计、仿真、综合和布局、支持多种编程语言&#xff0c;包括VHDL、Verilog等&#xff0c;并具有丰富的功能和工具库&#x…

SpringCloud学习笔记 - 1、Boot和Cloud版本选型

文章目录 前言需要&#xff08;学习/用到&#xff09;的技术SpringBoot版本的选择我们为什么要使用 Java 17&#xff0c;以及SpringBoot 3.2 呢&#xff1f; SpringCloud 版本的选择SpringCloud 命名规则Springcloud Alibaba 版本的选择如何确定Boot&#xff0c;Cloud&#xff…

大模型太贵?找找自己的原因好吧?

什么&#xff1f; 炼个大模型还嫌贵&#xff1f; 到底哪里贵了&#xff01;&#xff1f; 大模型算力贵&#xff1f;哪里贵了&#xff01;&#xff1f; 争先恐后训练大模型&#xff0c; 搞得现在“算力慌”“一卡难求”&#xff0c; 算力当然水涨船高了! “特供版”GPU又…

MYSQL、ORACLE、PostgreSQL数据库对象层次及权限管理对比

文章目录 前言一、PostgreSQL二、MySQL三、Oracle 前言 本文为出于自己扩展、比较、图形化的思维路径自行总结归纳&#xff0c;可能有些细节不太准确&#xff0c;欢迎指正。 MySQL、Oracle、PostgreSQL关系型数据库都有管理员用户、用户、权限管理、表函数索引等数据库对象&am…

hexo实战:(二)个人独立博客优化合集

前言 上次介绍了使用 HexoGitHub Pages&#xff0c;零成本搭建一个专属自己的独立博客网站。我觉得那篇文章是没有入门门槛的&#xff0c;不管你是什么行业&#xff0c;只要想打造个人 IP&#xff0c;又不太想受博客平台约束&#xff0c;那么读完后动手操作一下也能轻松完成。…

[vue3]组件通信

自定义属性 父组件中给子组件绑定属性, 传递数据给子组件, 子组件通过props选项接收数据 props传递的数据, 在模版中可以直接使用{{ message }}, 在逻辑中使用props.message defineProps defineProps是编译器宏函数, 就是一个编译阶段的标识, 实际编译器解析时, 遇到后会进行…

Oracle 是否扼杀了开源 MySQL

Oracle 是否无意中扼杀了开源 MySQL Peter Zaitsev是一位俄罗斯软件工程师和企业家&#xff0c;曾在MySQL公司担任性能工程师。大约15年前&#xff0c;当甲骨文收购Sun公司并随后收购MySQL时&#xff0c;有很多关于甲骨文何时“杀死MySQL”的讨论。他曾为甲骨文进行辩护&#…

【GD32F303红枫派使用手册】第十七节 USART-中断串口收发实验

17.1 实验内容 通过本实验主要学习以下内容&#xff1a; 使用中断进行串口收发 17.2 实验原理 前面章节中我们已经学习了串口的状态标志位&#xff0c;本实验就是使用TBE中断和RBNE中断来实现中断收发数据&#xff0c;实验原理是RBNE中断用来接受数据&#xff0c;IDLE中断用…

记录第一次edusrc挖掘

文章目录 一、前言二、漏洞说明截止目前已修复 一、前言 edusrc平台介绍 我们可以在关于页面看到edusrc的收录规则 现阶段&#xff0c;教育行业漏洞报告平台接收如下类别单位漏洞&#xff1a; 教育部 各省、自治区教育厅、直辖市教委、各级教育局 学校 教育相关软件 可以看到…

基于FOC控制器的BLDC无刷直流电机控制系统matlab编程与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于FOC控制器的BLDC无刷直流电机控制系统matlab编程与仿真&#xff0c;使用MATLAB编程实现&#xff0c;包括FOC控制器&#xff0c;clark&#xff0c;park等&#xff0c;不使用…

【PyQt5】一文向您详细介绍 self.setGeometry() 的作用

【PyQt5】一文向您详细介绍 self.setGeometry() 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本…