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;设计人员不需要了解…

《流程引擎原理与实践》开源电子书

流程引擎原理与实践 电子书地址&#xff1a;https://workflow-engine-book.shuwoom.com 第一部分&#xff1a;流程引擎基础 1 引言 1.1 流程引擎介绍 1.2 流程引擎技术的发展历程 1.3 相关产品国内外发展现状 1.4 本书的内容和结构安排 2 概念 2.1 基础概念 2.2 进阶…

MODBUS tcp学习总结

MODBUS TCP协议实例数据帧详细分析_modbus 帧结构-CSDN博客

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…

什么是128陷阱?

Java包装类详解 Java包装类提供了一种将基本数据类型转换为对象的机制&#xff0c;这对于在需要对象而非基本数据类型的场景下尤为有用。本文将介绍拆装箱、包装类的编译器行为、常见方法以及自动装箱中的128陷阱。 拆装箱 拆装箱概念 拆箱&#xff08;Unboxing&#xff09…

iview中Checkbox组件设置不勾选是0,勾选是1

正常情况: <Checkbox v-model"data.blow" true-value"1" false-value"0"><span>是否易燃易爆</span> </Checkbox>vue的data中&#xff0c;将Checkbox绑定的初始值设置成0。 data: function () {return {data: {blow: &…

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…

04-Spring Data中的设计模式

Spring Data中的设计模式分析 模板方法模式 (Template Method Pattern) 源码分析 Spring Data中的JdbcTemplate、JpaTemplate、MongoTemplate等类使用模板方法模式来执行数据库操作&#xff0c;底层的资源管理和异常处理由模板类实现。 示例&#xff1a;JdbcTemplate publ…

SpringSecurity通用权限管理系统

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

关于正运动学解机器人手臂算法

机器人正运动学是机器人学的一个分支&#xff0c;研究机器人的运动和位置之间的关系。它通过解析机器人的结构和关节参数&#xff0c;以及给定的关节角度&#xff0c;来计算机器人的末端执行器的位置和姿态。 机器人正运动学算法通常使用DH&#xff08;Denavit-Hartenberg&…

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…

Hive小文件合并

作者&#xff1a;振鹭 一、参数配置&#xff1a; 在Map输入的时候, 把小文件合并。 -- 每个Map最大输入大小&#xff0c;决定合并后的文件数 set mapred.max.split.size256000000; -- 一个节点上split的至少的大小 &#xff0c;决定了多个data node上的文件是否需要合并 set…