C++完整的学生管理系统

实现功能

  1. 添加、删除、修改学生
  2. 为学生添加、删除、修改成绩
  3. 将数据保存在students.txt和grades.txt里

效果图(部分功能)

b4d7c99af1b74a209fadfbe731c0abf6.png

添加学生

59355c93586642c3a220ad405d47080d.png

添加成绩

07c18474059a4f4a88dd953940c4d8b7.png

源代码         

这里就不分多个文件了      编译时在连接器命令行加入以下命令     -std=c++11

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <limits>using namespace std;struct Student {string id;string name;string gender;int age;string class_name;
};struct Grade {string student_id;string course_name;int grade;
};vector<Student> students;
vector<Grade> grades;void loadStudents() {ifstream infile("students.txt");if (infile.is_open()) {Student s;while (infile >> s.id >> s.name >> s.gender >> s.age >> s.class_name) {students.push_back(s);}infile.close();}
}void saveStudents() {ofstream outfile("students.txt");for (const auto& s : students) {outfile << s.id << " " << s.name << " " << s.gender << " " << s.age << " " << s.class_name << endl;}
}void loadGrades() {ifstream infile("grades.txt");if (infile.is_open()) {Grade g;while (infile >> g.student_id >> g.course_name >> g.grade) {grades.push_back(g);}infile.close();}
}void saveGrades() {ofstream outfile("grades.txt");for (const auto& g : grades) {outfile << g.student_id << " " << g.course_name << " " << g.grade << endl;}
}void addStudent() {Student s;cout << "输入学生学号 Enter student ID: ";cin >> s.id;cout << "输入学生姓名 Enter student name: ";cin >> s.name;cout << "输入学生性别 Enter student gender: ";cin >> s.gender;cout << "输入学生年龄 Enter student age: ";while (!(cin >> s.age)) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');cout << "无效输入,请输入有效的年龄 Invalid input, please enter a valid age: ";}cout << "输入学生班级 Enter student class: ";cin >> s.class_name;students.push_back(s);saveStudents();cout << "学生添加成功 Student added successfully." << endl;
}void modifyStudent() {string id;cout << "输入要修改的学生ID Enter student ID to modify: ";cin >> id;auto it = find_if(students.begin(), students.end(), [&id](const Student& s) {return s.id == id;});if (it != students.end()) {cout << "输入学生新的姓名 Enter new student name: ";cin >> it->name;cout << "输入学生新的性别 Enter new student gender: ";cin >> it->gender;cout << "输入学生新的年龄 Enter new student age: ";while (!(cin >> it->age)) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');cout << "无效输入,请输入有效的年龄 Invalid input, please enter a valid age: ";}cout << "输入学生新的班级 Enter new student class: ";cin >> it->class_name;saveStudents();cout << "学生信息修改成功 Student information modified successfully." << endl;} else {cout << "找不到学生ID Student ID not found." << endl;}
}void deleteStudent() {string id;cout << "输入要删除的学生ID Enter student ID to delete: ";cin >> id;auto it = remove_if(students.begin(), students.end(), [&id](const Student& s) {return s.id == id;});if (it != students.end()) {students.erase(it, students.end());saveStudents();cout << "学生已成功删除 Student deleted successfully." << endl;} else {cout << "找不到学生ID Student ID not found." << endl;}
}void queryStudent() {string id;cout << "输入要查询的学生ID Enter student ID to query: ";cin >> id;auto it = find_if(students.begin(), students.end(), [&id](const Student& s) {return s.id == id;});if (it != students.end()) {cout << "学生学号 Student ID: " << it->id << endl;cout << "学生姓名 Student name: " << it->name << endl;cout << "学生性别 Student gender: " << it->gender << endl;cout << "学生年龄 Student age: " << it->age << endl;cout << "学生班级 Student class: " << it->class_name << endl;} else {cout << "找不到学生ID Student ID not found." << endl;}
}void addGrade() {Grade g;cout << "输入学生学号 Enter student ID: ";cin >> g.student_id;cout << "输入课程名称 Enter course name: ";cin >> g.course_name;cout << "输入等级 Enter grade: ";while (!(cin >> g.grade)) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');cout << "无效输入,请输入有效的等级 Invalid input, please enter a valid grade: ";}grades.push_back(g);saveGrades();cout << "成绩添加成功 Grade added successfully." << endl;
}void modifyGrade() {string id, course;cout << "输入学生学号 Enter student ID: ";cin >> id;cout << "输入课程名称 Enter course name: ";cin >> course;auto it = find_if(grades.begin(), grades.end(), [&id, &course](const Grade& g) {return g.student_id == id && g.course_name == course;});if (it != grades.end()) {cout << "输入新的等级 Enter new grade: ";while (!(cin >> it->grade)) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');cout << "无效输入,请输入有效的等级 Invalid input, please enter a valid grade: ";}saveGrades();cout << "成绩修改成功 Grade modified successfully." << endl;} else {cout << "未找到成绩记录 Grade record not found." << endl;}
}void deleteGrade() {string id, course;cout << "输入学生学号 Enter student ID: ";cin >> id;cout << "输入课程名称 Enter course name: ";cin >> course;auto it = remove_if(grades.begin(), grades.end(), [&id, &course](const Grade& g) {return g.student_id == id && g.course_name == course;});if (it != grades.end()) {grades.erase(it, grades.end());saveGrades();cout << "成绩删除成功 Grade deleted successfully." << endl;} else {cout << "未找到成绩记录 Grade record not found." << endl;}
}void queryGrade() {string id, course;cout << "输入学生学号 Enter student ID: ";cin >> id;cout << "输入课程名称 Enter course name: ";cin >> course;auto it = find_if(grades.begin(), grades.end(), [&id, &course](const Grade& g) {return g.student_id == id && g.course_name == course;});if (it != grades.end()) {cout << "学生学号 Student ID: " << it->student_id << endl;cout << "课程名称 Course name: " << it->course_name << endl;cout << "成绩 Grade: " << it->grade << endl;} else {cout << "未找到成绩记录 Grade record not found." << endl;}
}void displayMenu() {cout << "学生管理系统 Student Management System" << endl;cout << "1.添加学生 Add Student" << endl;cout << "2.修改学生 Modify Student" << endl;cout << "3.删除学生 Delete Student" << endl;cout << "4.查找学生 Query Student" << endl;cout << "5.添加成绩 Add Grade" << endl;cout << "6.修改成绩 Modify Grade" << endl;cout << "7.删除成绩 Delete Grade" << endl;cout << "8.查找成绩 Query Grade" << endl;cout << "9.退出 Exit" << endl;
}enum MenuOption {ADD_STUDENT = 1,MODIFY_STUDENT,DELETE_STUDENT,QUERY_STUDENT,ADD_GRADE,MODIFY_GRADE,DELETE_GRADE,QUERY_GRADE,EXIT
};int main() {loadStudents();loadGrades();int choice;do {displayMenu();cout << "输入您的选择 Enter your choice: ";while (!(cin >> choice)) {cin.clear();cin.ignore(numeric_limits<streamsize>::max(), '\n');cout << "无效输入,请输入有效的选项 Invalid input, please enter a valid option: ";}MenuOption option = static_cast<MenuOption>(choice);switch (option) {case ADD_STUDENT:addStudent();break;case MODIFY_STUDENT:modifyStudent();break;case DELETE_STUDENT:deleteStudent();break;case QUERY_STUDENT:queryStudent();break;case ADD_GRADE:addGrade();break;case MODIFY_GRADE:modifyGrade();break;case DELETE_GRADE:deleteGrade();break;case QUERY_GRADE:queryGrade();break;case EXIT:cout << "退出 Exiting..." << endl;break;default:cout << "选择无效,请重试 Invalid choice. Please try again." << endl;}} while (choice != EXIT);return 0;
}

 

 

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

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

相关文章

极客天成NVFile全闪存储加速千卡AIGC大模型训练平台

01 中国AI算力核心产业现状 随着人工智能技术的快速发展和广泛应用&#xff0c;AI算力已成为推动数字经济和科技创新的关键基础设施。2024年&#xff0c;中国AI算力核心产业规模持续扩大&#xff0c;在全球AI发展格局中占据重要地位&#xff0c;中国AI算力核心产业规模达到约…

LangChain的数据增强

吾名爱妃&#xff0c;性好静亦好动。好编程&#xff0c;常沉浸于代码之世界&#xff0c;思维纵横&#xff0c;力求逻辑之严密&#xff0c;算法之精妙。亦爱篮球&#xff0c;驰骋球场&#xff0c;尽享挥洒汗水之乐。且喜跑步&#xff0c;尤钟马拉松&#xff0c;长途奔袭&#xf…

Spring事务(1)

目录 一、事务回顾 1、什么是事务&#xff1f; 2、为什么需要事务&#xff1f; 3、事务的操作 二、Spring 中事务的实现 1、代码准备&#xff1a; &#xff08;1&#xff09;创建项目 spring-trans&#xff0c;引入 Spring Web&#xff0c;MyBatis&#xff0c;MySQL等依…

【C++】C++前言

目录 一.什么是C 1.1.面向过程&#xff1a; 1.2.面向对象&#xff1a; 二.C发展历史 三.C版本更迭 3.1.语法更新 3.2.关于C2X最新特性的讨论&#xff1a; 3.3.关于C23的一个小故事&#xff1a; 四.C参考文档&#xff1a; 五.C的重要性&#xff1a; 5.1.编程语言排行榜…

JESD204B学习与仿真

平台&#xff1a;vivado2018.3 芯片&#xff1a;xcku115-flva1517-2-i 场景&#xff1a;在高速ADC和DAC芯片中&#xff0c;有使用源同步的时钟和数据同步传输的方式&#xff0c;但是需要在逻辑内部对其进行校准。如果使用jesd204b接口传输数据&#xff0c;设计人员不需要了解…

Vuex看这一篇就够了

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Win11 改造

记录一些安装 win11 系统之后&#xff0c;对使用不习惯的地方&#xff0c;进行的个人改造 右键菜单 Hiyoung006/Win11Useable: 将Win11右键菜单及资源管理器恢复为Win10样式的脚本 切换到旧版右键菜单&#xff1a; reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34…

Web前端:HTML篇(二)元素属性

HTML 属性 属性是 HTML 元素提供的附加信息。 HTML 元素可以设置属性属性可以在元素中添加附加信息属性一般描述于开始标签属性总是以名称/值对的形式出现&#xff0c;比如&#xff1a;name"value"。 属性实例 HTML 链接由 <a> 标签定义。链接的地址在 href …

数据结构(二叉树-2)

文章目录 一、 实现链式结构二叉树 1.1 Tree.h 1.2 Tree.c 前中后序遍历 前序遍历 中序遍历 后续遍历 1.2 Tree.c 结点个数 1.3Tree.c 叶子节点个数 1.4 Tree.c 二叉树的高度 1.5 Tree.c 层序遍历 1.6 判断是否为完全二叉树 1.7 销毁二叉树 test.c 一、 实现链式结构二叉树 ⽤链…

体重电子秤方案pcba方案设计开发应用

体重电子秤是一种利用电子技术实现物体重量测量的设备。它是现代生活中不可缺少的日常用品之一。本文将从产品介绍、结构设计、工作原理、功能设计和特点优势五个方面来介绍体重电子秤方案产品。 首先&#xff0c;体重电子秤方案的产品介绍。 体重电子秤是一种便携式的设备&…

vue this.$refs 动态拼接

业务需要&#xff0c;refs是不固定的 <vxe-grid refgridWarehouse v-bind"gridWarehouseOptions" v-if"tableHeight" :height"tableHeight":expand-config"{iconOpen: vxe-icon-square-minus, iconClose: vxe-icon-square-plus}"c…

SpringSecurity通用权限管理系统

1、介绍 权限管理是所有后台系统都会涉及的一个重要组成部分&#xff0c;而权限管理的核心流程是相似的&#xff0c;如果每个后台单独开发一套权限管理系统&#xff0c;就是重复造轮子&#xff0c;是人力的极大浪费&#xff0c;本项目就是针对这个问题&#xff0c;提供了一套通…

Python第三方库Kornia中LoFTR的使用

0&#xff0c;背景 浏览LoFTR代码主页&#xff1a;LoFTR&#xff0c;看到其中提到&#xff0c;LoFTR从0.5.11版本开始集成到kornias库中&#xff0c;所以决定尝试。 硬件&#xff1a;联想拯救者Y7000P 2020&#xff0c;i7-10750H&#xff0c;RTX2060 1&#xff0c;Kornia K…

系统变量设置失败导致 /usr/bin:/bin 不在 PATH 环境变量,许多基本命令都无法调用!!手欠的!!!

GPT害人不浅&#xff0c;专坑我这种电脑小白&#xff0c;差点被骗重装系统。。 看起来你的 PATH 环境变量真的缺失了标准的二进制文件路径&#xff08;如 /usr/bin 和 /bin&#xff09;&#xff0c;这导致你无法使用许多常用命令&#xff0c;包括 nano 和 vim。我们需要采取另…

在 CentOS 7 上安装 Docker 并安装和部署 .NET Core 3.1

1. 安装 Docker 步骤 1.1&#xff1a;更新包索引并安装依赖包 先安装yum的扩展&#xff0c;yum-utils提供了一些额外的工具&#xff0c;这些工具可以执行比基本yum命令更复杂的任务 sudo yum install -y yum-utils sudo yum update -y #更新系统上已安装的所有软件包到最新…

使用 Socket和动态代理以及反射 实现一个简易的 RPC 调用

使用 Socket、动态代理、反射 实现一个简易的 RPC 调用 我们前面有一篇 socket 的文章&#xff0c;再之前&#xff0c;还有一篇 java动态代理的文章&#xff0c;本文用到了那两篇文章中的知识点&#xff0c;需要的话可以回顾一下。 下面正文开始&#xff1a; 我们的背景是一个…

【Linux网络】epoll模型构建Reactor_Tcp服务器{协议/客户端/bind/智能指针}

文章目录 1.std::enable_shared_from_this<TcpServer>2.std::bind3.std::make_shared4.std::shared_ptrstd::shared_ptr 和 std::weak_ptr配合使用 5.剖析代码6.整体代码Calculator.hppClientCal.ccCMakeLists.txtCommon.hppEpoller.hppLog.hppMain.ccnocopy.hppProtocol…

YOLOv8预测时报错ValueError

【问题描述】执行YOLOv8预测代码时&#xff1a; # 导入训练好的权重文件做预测 from ultralytics import YOLO# Load a pretrained YOLOv8n model model YOLO("/data/yolov8/runs/detect/train6/weights/best.pt")# Run inference on bus.jpg with arguments model…

四大引用——强软弱虚

目录 一、强引用 二、软引用 三、弱引用 四、虚引用 一、强引用 强引用是在程序代码之中普遍存在的&#xff0c;类似于“Object obj new Object()”&#xff0c;obj变量引用Object这个对象&#xff0c;就叫做强引用。当内存空间不足&#xff0c;Java虚拟机宁愿抛出OutOfMe…

使用 Redis 实现验证码、token 的存储,用自定义拦截器完成用户认证、并使用双重拦截器解决 token 刷新的问题

基于session实现登录流程 1.发送验证码 用户在提交手机号后&#xff0c;会校验手机号是否合法&#xff0c;如果不合法&#xff0c;则要求用户重新输入手机号 如果手机号合法&#xff0c;后台此时生成对应的验证码&#xff0c;同时将验证码进行保存&#xff0c;然后再通过短信…