C++ 学生信息管理 系统之增,删,改,查

学生信息管理 系统之增,删,改,查

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_STUDENTS 100  // 最大学生数量
#define MAX_NAME_LENGTH 50  // 姓名最大长度// 学生结构体
typedef struct {char name[MAX_NAME_LENGTH];int studentId;float scores[3];  // 三门课程的成绩
} Student;// 学生信息表
Student students[MAX_STUDENTS];
int numStudents = 0;  // 学生数量// 函数声明void displayAllStudents();
void readFromFile();
void searchByName();
void searchByCourse();
void addStudent();
void deleteStudent();
void sortScoresByCourse();
void sortScoresByTotal();
void saveToFile();int main() {int choice;// 从文件读取数据readFromFile();do {// 菜单显示printf("\n=== 学生信息管理系统 ===\n"); printf("0. 显示所有人信息\n");printf("1. 增加学生信息\n");printf("2. 检索某个同学的所有成绩\n");printf("3. 检索某一门课程的所有同学成绩\n");        printf("4. 删除学生信息\n");printf("5. 对某门课程的成绩进行升序排序\n");printf("6. 对所有同学的总成绩进行升序排序\n");printf("7. 保存信息到磁盘文件\n");printf("8. 统计共有多少人\n");printf("9. 退出系统\n");printf("请输入你的选择: ");scanf("%d", &choice);switch (choice) {case 0:displayAllStudents();break;case 1:addStudent();break;case 2:searchByName();break;case 3:searchByCourse();break;        case 4:deleteStudent();break;case 5:sortScoresByCourse();break;case 6:sortScoresByTotal();break;case 7:saveToFile();break;case 8:printf("总人数是:%d\n",numStudents);break;case 9:printf("感谢使用学生信息管理系统!\n");return;default:printf("无效的选择,请重新输入。\n");break;}} while (1);return 0;
}// 从磁盘文件读取数据
void readFromFile() {FILE* file = fopen("students.txt", "r");if (file) {// 清空原有数据numStudents = 0;// 逐行读取数据char line[100];while (fgets(line, sizeof(line), file)) {sscanf(line, "%s %d %f %f %f",students[numStudents].name,&students[numStudents].studentId,&students[numStudents].scores[0],&students[numStudents].scores[1],&students[numStudents].scores[2]);numStudents++;}fclose(file);printf("成功从文件中读取学生信息。\n");}else {printf("未找到学生信息文件,将创建新文件。\n");}
}// 检索某个同学的所有成绩
void searchByName() {char name[MAX_NAME_LENGTH];printf("请输入要检索的同学姓名: ");scanf("%s", name);int i;for (i = 0; i < numStudents; i++) {if (strcmp(students[i].name, name) == 0) {printf("姓名:%s 学号:%d 成绩:%.2f %.2f %.2f\n",students[i].name,students[i].studentId,students[i].scores[0],students[i].scores[1],students[i].scores[2]);}}
}// 检索某一门课程的所有同学成绩
void searchByCourse() {int course;printf("请输入要检索的课程编号(1-3): ");scanf("%d", &course);int i;for (i = 0; i < numStudents; i++) {printf("姓名:%s 学号:%d 成绩:%.2f\n",students[i].name,students[i].studentId,students[i].scores[course - 1]);}
}// 增加学生信息
void addStudent() {int count, i;numStudents = 0;printf("请输入要新的学生人数: ");scanf("%d", &count);if (numStudents + count > MAX_STUDENTS) {printf("学生数量超过系统容量,请增加合适数量的学生。\n");return;}for (i = 0; i < count; i++) {printf("请输入第 %d 个学生的信息(姓名 学号 成绩1 成绩2 成绩3): ", i + 1);scanf("%s %d %f %f %f",students[numStudents].name,&students[numStudents].studentId,&students[numStudents].scores[0],&students[numStudents].scores[1],&students[numStudents].scores[2]);numStudents++;}printf("成功增加 %d 个学生信息。\n", count);
}// 删除学生信息
void deleteStudent() {int index;printf("请输入要删除的学生索引号(1-%d): ", numStudents);scanf("%d", &index);if (index < 1 || index > numStudents) {printf("无效的索引号,请重新输入。\n");return;}int i;for (i = index - 1; i < numStudents - 1; i++) {students[i] = students[i + 1];}numStudents--;printf("成功删除学生信息。\n");
}// 对某门课程的成绩进行升序排序
void sortScoresByCourse() {int course;printf("请输入要排序的课程编号(1-3): ");scanf("%d", &course);int i, j;for (i = 0; i < numStudents - 1; i++) {for (j = 0; j < numStudents - i - 1; j++) {if (students[j].scores[course - 1] > students[j + 1].scores[course - 1]) {Student temp = students[j];students[j] = students[j + 1];students[j + 1] = temp;}}}printf("成功对第 %d 门课程的成绩进行排序。\n", course);
}// 对所有同学的总成绩进行升序排序
void sortScoresByTotal() {int i, j;for (i = 0; i < numStudents - 1; i++) {for (j = 0; j < numStudents - i - 1; j++) {float total1 = students[j].scores[0] + students[j].scores[1] + students[j].scores[2];float total2 = students[j + 1].scores[0] + students[j + 1].scores[1] + students[j + 1].scores[2];if (total1 > total2) {Student temp = students[j];students[j] = students[j + 1];students[j + 1] = temp;}}}printf("成功对所有同学的总成绩进行排序。\n");
}// 保存信息到磁盘文件
void saveToFile() {FILE* file = fopen("students.txt", "w");if (file) {int i;for (i = 0; i < numStudents; i++) {fprintf(file, "%s %d %.2f %.2f %.2f\n",students[i].name,students[i].studentId,students[i].scores[0],students[i].scores[1],students[i].scores[2]);}fclose(file);printf("成功保存学生信息到文件。\n");}else {printf("无法创建学生信息文件,保存失败。\n");}
}// 显示所有人信息
void displayAllStudents() {if (numStudents == 0) {printf("暂无学生信息。\n");return;}printf("所有学生信息如下:\n");int i;for (i = 0; i < numStudents; i++) {printf("姓名:%s 学号:%d 成绩:%.2f %.2f %.2f %.2f\n",students[i].name,students[i].studentId,students[i].scores[0],students[i].scores[1],students[i].scores[2], students[i].scores[0]+ students[i].scores[1]+ students[i].scores[2]);}}

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

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

相关文章

势能相关难维护的用分块——分块过程维护跨块的:CF1491H / P7446

https://www.luogu.com.cn/problem/P7446 https://www.luogu.com.cn/problem/CF1491H 看到题&#xff0c;发现只有减&#xff0c;就和势能有关。维护势能&#xff0c;像这种题&#xff0c;树形ds显然不好做&#xff0c;所以可以去考虑进行分块。 考虑分块。每个块记录一个 …

无监督学习 聚类

无监督学习概述 无监督学习方法概述 监督学习 在一个典型的监督学习中&#xff0c;训练集有标签y&#xff0c;我们的目标是找到能够区分正样本和负样本的决策边界&#xff0c;需要据此拟合一个假设函数。 无监督学习 在无监督学习中&#xff0c;我们的数据没有附带任何标签y&…

我的创作纪念日1024

机缘 过去的1024个日子里&#xff0c;我在专业发展、职场和发展、科技创新创业、软件开发、人工智能、虚拟现实、区块链等栏目分享了一些工作和学习的建议和体会。尤其是在2022年&#xff0c;我连续发布100篇的博文&#xff0c;不仅仅是行为艺术&#xff0c;更是发自内心的分享…

深度学习 Day19——P8YOLOv5-C3模块实现

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU&#xff08;如果设备上支持GPU就使用GPU,否则使用C…

在一个类里访问领一个类的变量和方法

如果在WorkerThread类的run方法中需要访问MainWindow类的变量和方法&#xff0c;可以通过以下几种方式实现&#xff08;我使用的第一种&#xff09;&#xff1a; 1.将MainWindow类的实例作为参数传递给WorkerThread类的构造函数。这样&#xff0c;在WorkerThread类中就可以通过…

IDEA添加Apifox插件后,返回参数不详细解决办法

Apifox官方文档地址(文档中返回的是特殊情况&#xff0c;跟我现在项目的返回不一样&#xff0c;因此需要更改配置) 点击跳转到官方API地址 实现步骤分为两步&#xff1a;第一步&#xff1a;添加配置&#xff0c;第二步使用注解。 1.添加配置 打开Idea设置&#xff0c;添加配置…

ftp上传速度慢什么原因,怎么加速FTP传输

在当前数字时代&#xff0c;文件传输是各种工作和业务操作不可或缺的一环。尽管FTP作为网络文件传输协议存在多年&#xff0c;但其传输速度问题一直困扰着众多用户。特别是在跨地域、跨国数据传输场景下&#xff0c;FTP的传输速度不仅难以满足企业需求&#xff0c;还可能对工作…

Java数据结构-模拟ArrayList集合思想,手写底层源码(1),底层数据结构是数组,编写add添加方法

package com.atguigu.structure; public class Demo02_arrayList {public static void main(String[] args) {MyGenericArrayListV1 arrayListV1 new MyGenericArrayListV1();//arr.add(element:100,index:1);下标越界&#xff0c;无法插入//初始化&#xff08;第一次添加&…

年过半半百

没错&#xff0c;今天是特属于自己的节日。 冬月初七&#xff0c;一个再平常不过的日子&#xff0c;但似乎并不是什么好日子。外婆是这一天走的&#xff0c;江zeMin爷爷也是&#xff0c;今年今日一大早起来就看到甘肃大地震的新闻。说实话&#xff0c;我对这个节日已经没…

PWM实现蜂鸣器

tim4.h #ifndef __TIM4_H__ #define __TIM4_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_tim.h" void timer4_init();#endif tim4.c #include "tim4.h"void timer4_init() {// 1. 设置GPI…

头部首发优志愿头部u_sign生成与TLS指纹处理! + 数据可视化技术讲解【Python爬虫】

目录 针对大学名称 大学排名, 综合指数,学校情况等数据进行爬取 找对应得数据包 请求发现数据有加密 发现加密参数 搜索加密参数&#xff0c;好进行分析 分析过程 数据可视化 针对大学名称 大学排名, 综合指数,学校情况等数据进行爬取 首先进行鼠标右键&#xff0c;进行…

数据结构-顺序表的大小

一、固定大小的顺序表的缺陷&#xff1a; 1、不能随着数据的增多而增大 2、收到栈空间的限制 栈的大小&#xff1a;window下是1M 二、可变大小的顺序表的设计 1、什么是存储单元 cpu访问内存&#xff08;通过地址&#xff09; 8个二进制位称为一个存储单元&#xff08;一…

如何预防[[MyFile@waifu.club]].wis [[backup@waifu.club]].wis勒索病毒感染您的计算机?

导言&#xff1a; 近期&#xff0c;一种新兴的威胁[[MyFilewaifu.club]].wis [[backupwaifu.club]].wis勒索病毒&#xff0c;引起了广泛关注。这种恶意软件通过其高度复杂的加密算法&#xff0c;威胁着用户和组织的数据安全。本文将深入介绍[[MyFilewaifu.club]].wis [[backup…

(7)Linux GDB以及gcc和g++

&#x1f4ad; 前言 本章我们将带着大家高雅的学一学令众多习惯图形化页面的朋友难受的 gdb 调试&#xff0c;这部分知识可以选择性学习学习&#xff0c;以后倘若遇到一些问题时能在 Linux 内简单调试&#xff0c;还是很香的。然后在讲讲 gcc 和 g&#xff0c;系统讲解程序运行…

​C语言顺序查找算法以及代码​

通过前面对静态查找表的介绍&#xff0c;静态查找表即为只做查找操作的查找表。静态查找表既可以使用顺序表表示&#xff0c;也可以使用链表结构表示。虽然一个是数组、一个链表&#xff0c;但两者在做查找操作时&#xff0c;基本上大同小异。 本节以静态查找表的顺序存储结构为…

【Spring】11 EnvironmentAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点&#xff0c;其中之一就是 Bean 生命周期中的回调接口。本文将着重介绍一个与环境&#xff08;Environment&#xff09;相关…

docker vue项目打成镜像并推送到仓库

shell 脚本 #!/bin/bash image_nameweb version$1 echo ${version}echo build...... docker build -t ${image_name}:${version} . echo build doing..... sleep 10 image_idsudo docker images | grep ${image_name} | awk -F" " {print $3} | head -n 1 echo ${im…

Atcoder Beginner Contest 332 (A - F 题)

目录 [A - Online Shopping](https://atcoder.jp/contests/abc332/tasks/abc332_a)Problem StatementConstraintsInputOutputSample Input 1Sample Output 1Sample Input 2Sample Output 2Sample Input 3Sample Output 3 SolutionCode [B - Glass and Mu](https://atcoder.jp/c…

高并发下接口幂等性解决方案

高并发下接口幂等性解决方案 1. 幂等性概念: ①. 一个幂等操作指任意多次执行所产生的影响跟一次执行的影响相同.②. 幂等函数(幂等方法):a. 可以使用相同参数重复执行,并能获得相同结果的函数.b. 这些函数不会影响数据状态,也不用担心重复执行会对数据造成改变.c. 如:"…

Crocoddyl: 多接触最优控制的高效多功能框架

系列文章目录 前言 我们介绍了 Crocoddyl&#xff08;Contact RObot COntrol by Differential DYnamic Library&#xff09;&#xff0c;这是一个专为高效多触点优化控制&#xff08;multi-contact optimal control&#xff09;而定制的开源框架。Crocoddyl 可高效计算给定预定…