17 C语言学生管理系统

学生管理系统

👍😂💯 项目代码

代码可能存在细节上的错误,希望大家可以指导意见。


#define _CRT_SECURE_NO_WARNINGS  1#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_STUDENTS 100typedef struct {int id;char name[50];float score1;float score2;float score3;float average;
} Student;Student students[MAX_STUDENTS];
int num_students = 0;void display_menu() {printf("**********************************************\n");printf("              学生管理系统\n");printf("**********************************************\n");printf("                                          \n");printf(" 1.增加一位学生信息  2.删除一位同学信息      \n");printf(" 3.按学号查询学生    4.按姓名查询学生       \n");printf(" 5.修改学生信息      6.按姓名排序           \n");printf(" 7.按平均分排序      8.装入学生信息         \n");printf(" 9.保存学生信息      0.显示全部同学的信息   \n");printf("                                          \n");printf("按q或者Q退出系统                    \n");printf("**********************************************\n");printf("请选择操作:");
}void add_student() {Student new_student;printf("输入学生的学号(-1 结束): ");scanf("%d", &new_student.id);if (new_student.id == -1) {return;}printf("输入学生的姓名: ");scanf("%s", new_student.name);printf("输入学生的高数成绩: ");scanf("%f", &new_student.score1);printf("输入学生的C语言成绩: ");scanf("%f", &new_student.score2);printf("输入学生的英语成绩: ");scanf("%f", &new_student.score3);new_student.average = (new_student.score1 + new_student.score2 + new_student.score3) / 3.0;students[num_students++] = new_student;printf("学生信息添加成功\n");
}void delete_student() {int student_id;int i;printf("输入学生的学号: ");scanf("%d", &student_id);int index = -1;for (i = 0; i < num_students; i++) {if (students[i].id == student_id) {index = i;break;}}if (index == -1) {printf("学号不存在\n");return;}for (i = index; i < num_students - 1; i++) {students[i] = students[i + 1];}num_students--;printf("删除学生信息成功\n");
}void search_by_id() {int student_id;int i;printf("输入学生的学号: ");scanf("%d", &student_id);int index = -1;for (i = 0; i < num_students; i++) {if (students[i].id == student_id) {index = i;break;}}if (index == -1) {printf("学号不存在\n");return;}printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",students[index].id, students[index].name, students[index].score1,students[index].score2, students[index].score3, students[index].average);
}void search_by_name() {int found = 0;char student_name[50];int i;printf("输入学生的姓名: ");scanf("%s", student_name);printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");for (i = 0; i < num_students; i++) {if (strcmp(students[i].name, student_name) == 0) {printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",students[i].id, students[i].name, students[i].score1,students[i].score2, students[i].score3, students[i].average);found = 1;}}if (!found) { printf("学生不存在\n"); }
}void update_student() {int student_id;int index = -1;int i;printf("输入学生的学号: ");scanf("%d", &student_id);for (i = 0; i < num_students; i++) {if (students[i].id == student_id) {index = i;break;}}if (index == -1) {printf("学号不存在\n");return;}printf("输入学生的姓名: ");scanf("%s", students[index].name);printf("输入学生的课程1成绩: ");scanf("%f", &students[index].score1);printf("输入学生的课程2成绩: ");scanf("%f", &students[index].score2);printf("输入学生的课程3成绩: ");scanf("%f", &students[index].score3);students[index].average = (students[index].score1 + students[index].score2 + students[index].score3) / 3.0;printf("学生信息更新成功\n");
}void sort_by_name() {int i, j;for (i = 0; i < num_students - 1; i++) {for (j = 0; j < num_students - 1 - i; j++) {if (strcmp(students[j].name, students[j + 1].name) > 0) {Student temp = students[j];students[j] = students[j + 1];students[j + 1] = temp;}}}printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");for (i = 0; i < num_students; i++) {printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",students[i].id, students[i].name, students[i].score1,students[i].score2, students[i].score3, students[i].average);}
}void sort_by_average() {int i, j;for (i = 0; i < num_students - 1; i++) {for (j = 0; j < num_students - 1 - i; j++) {if (students[j].average < students[j + 1].average) {Student temp = students[j];students[j] = students[j + 1];students[j + 1] = temp;}}}printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");for (i = 0; i < num_students; i++) {printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",students[i].id, students[i].name, students[i].score1,students[i].score2, students[i].score3, students[i].average);}
}void load_students() {FILE *file = fopen("student_info.bin", "rb");if (file == NULL) {printf("无法打开文件\n");return;}fread(&num_students, sizeof(int), 1, file);fread(students, sizeof(Student), num_students, file);fclose(file);
}void save_students() {FILE *file = fopen("student_info.bin", "wb");if (file == NULL) {return;}fwrite(&num_students, sizeof(int), 1, file);fwrite(students, sizeof(Student), num_students, file);fclose(file);printf("学生信息保存成功\n");
}void display_students() {int i;printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");for (i = 0; i < num_students; i++) {printf("%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].id, students[i].name, students[i].score1,students[i].score2, students[i].score3, students[i].average);}
}int main() {load_students();while (1) {display_menu();char choice;scanf(" %c", &choice);switch (choice) {case '1':add_student();break;case '2':delete_student();break;case '3':search_by_id();break;case '4':search_by_name();break;case '5':update_student();break;case '6':sort_by_name();break;case '7':sort_by_average();break;case '8':load_students();break;case '9':save_students();break;case '0':display_students();break;case 'q':case 'Q':printf("再见!\n");exit(0);default:printf("输入错误,请重新输入!\n");break;}}return 0;
}

项目运行展示





这段代码是一个简单的学生管理系统,它使用 C 语言编写,主要用于存储、管理和展示学生的基本信息及成绩。下面是对项目结构、逻辑结构和项目背景的详细描述:

项目结构

  1. 头文件和宏定义

    • #define _CRT_SECURE_NO_WARNINGS 1:这是为了防止在 Visual Studio 等编译器中出现关于不安全函数的警告。
    • #include 指令用于引入标准库,如 stdio.hstdlib.hstring.h,这些库提供了输入输出、内存操作和字符串处理等功能。
  2. 数据结构定义

    • Student 结构体定义了学生的信息,包括学号、姓名、三门课程的成绩和平均分。
  3. 全局变量

    • students 数组用于存储所有学生的信息。
    • num_students 变量用于跟踪当前存储的学生数量。
  4. 功能函数

    • display_menu():显示系统菜单。
    • add_student():添加学生信息。
    • delete_student():删除学生信息。
    • search_by_id()search_by_name():分别通过学号和姓名查询学生信息。
    • update_student():更新学生信息。
    • sort_by_name()sort_by_average():分别按姓名和平均分对学生进行排序。
    • load_students()save_students():从文件加载和保存学生信息。
    • display_students():显示所有学生信息。
  5. 主函数 main()

    • 初始化学生信息数组。
    • 进入一个无限循环,显示菜单并根据用户输入执行相应的操作。
    • 提供退出选项。

逻辑结构

  1. 初始化

    • main() 函数开始时,调用 load_students() 从文件加载已有的学生信息。
  2. 用户交互

    • 通过 display_menu() 函数显示操作选项。
    • 用户输入选择后,通过 switch 语句执行相应的功能函数。
  3. 数据处理

    • 每个功能函数都对 students 数组和 num_students 变量进行操作,以实现增加、删除、查询、更新、排序和显示学生信息的功能。
  4. 数据持久化

    • load_students()save_students() 函数通过二进制文件 student_info.bin 实现数据的持久化存储。

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

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

相关文章

yolov8逐步分解(7)_模型训练初始设置之优化器Optimizer及学习率调度器Scheduler初始化

yolov8逐步分解(1)--默认参数&超参配置文件加载 yolov8逐步分解(2)_DetectionTrainer类初始化过程 yolov8逐步分解(3)_trainer训练之模型加载 YOLOV8逐步分解(4)_模型的构建过程 YOLOV8逐步分解(5)_模型训练初始设置之混合精度训练AMP YOLOV8逐步分解(6)_模型训练初始…

xjoi题库一级八段题解(c语言版)

求和 时间&#xff1a;1s 空间&#xff1a;128M 题目描述&#xff1a; 给你n个数&#xff0c;求出它们的和 输入格式&#xff1a; 第一行输入一个整数n&#xff0c;表示数的个数 接下来n行&#xff0c;每行一个数&#xff0c;表示要加起来的数。 输出格式&#xff1a; 输出n个…

conda修改环境名称后,无法安装包,显示no such file

1问题描述 原本创建环境时设置的名字不太合适&#xff0c;但是因为重新创建环境很麻烦&#xff0c;安装很多包。。所以想直接对包名进行修改&#xff0c;本人采用的方式是直接找到conda环境的文件目录&#xff0c;然后修改文件名&#xff0c;简单粗暴。确实修改成功了&#xf…

模拟集成电路(5)----单级放大器(共栅级)

模拟集成电路(5)----单级放大器&#xff08;共栅级&#xff09; 有一些场合需要一些小的输入电阻&#xff08;电流放大器&#xff09; 大信号分析 − W h e n V i n ≥ V B − V T H ∙ M 1 i s o f f , V o u t V D D − F o r L o w e r V i n I d 1 2 μ n C o x W L ( V…

手摸手教你uniapp原生插件开发

行有余力,心无恐惧 这篇技术文章写了得有两三个礼拜,虽然最近各种事情,工作上的生活上的,但是感觉还是有很多时间被浪费.还记得几年前曾经有一段时间7点多起床运动,然后工作学习,看书提升认知.现在我都要佩服那会儿的自己.如果想回到那种状态,我觉得需要有三个重要的条件. 其…

xcode依赖包package已经安装,但是提示No such module ‘Alamofire‘解决办法

明明已经通过xcode自带的swift包管理器安装好了依赖包&#xff0c;但是却还是提示&#xff1a;No such module&#xff0c;这个坑爹的xcode&#xff0c;我也只能说服气&#xff0c;但是无奈&#xff0c;没办法攻打苹果总部&#xff0c;只能自己想解决办法了 No such module Ala…

香港优才计划找中介是否是智商税,靠谱中介又该如何找?

关于香港优才计划的申请&#xff0c;找中介帮助还是自己DIY&#xff0c;网络上充斥的声音太多&#xff0c;对不了解的人来说&#xff0c;难以抉择的同时还怕上当受骗。 这其中很容易误导人的关键在于——信息差&#xff01; 今天这篇文章的目的就是想让大家看清一些中介和DIY…

evaluate.load(metric)和dataset.load_metric(metric)

evaluate.load 和 dataset.load_metric 是两个不同的库中用于加载评估指标的方法&#xff0c;分别属于 evaluate 库和 datasets 库。它们虽然功能相似&#xff0c;但在使用场景和细节上有一些区别。 evaluate.load(metric) evaluate 库是 Hugging Face 提供的一个专门用于评估…

CentOS 7.9 源码编译安装maven

CentOS 7.9 源码编译安装maven Centos镜像源中没有maven&#xff0c;通过下载源码编译进行安装&#xff1a; # 下载 $ wget https://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz --no-check-certificate $ tar xf apache-maven-3.9.6-bin.…

Python的类全面系统学习

文章目录 1. 基本概念1.1 类&#xff08;Class&#xff09;1.2 对象&#xff08;Object&#xff09; 2. 类的属性和方法3. 类的继承3.1 继承的概念3.2 单继承3.3 多重继承 4. 方法重写与多态4.1 方法重写4.2 多态 5. 特殊方法与运算符重载5.1 特殊方法&#xff08;魔法方法&…

MoE模型大火,源2.0-M32诠释“三个臭皮匠,顶个诸葛亮”!

文 | 智能相对论 作者 | 陈泊丞 近半年来&#xff0c;MoE混合专家大模型彻底是火了。 在海外&#xff0c;OpenAI的GPT-4、谷歌的Gemini、Mistral AI的Mistral、xAI的Grok-1等主流大模型都采用了MoE架构。而在国内&#xff0c;浪潮信息也刚刚发布了基于MoE架构的“源2.0-M3…

读取csv文件

问题&#xff1a; 一直显示是非数值型数据 解决&#xff1a;原来是sep“\t”&#xff0c;改为sep","即可 注&#xff1a;读取csv文件时&#xff0c;sep为关键词划分 import pandas as pd data pd.read_csv("y.csv",sep",") # data pd.read_…

C++【缺省参数|函数重载|引用】

目录 1 缺省参数 1.1 全缺省 1.2 半缺省 注意 1.3 应用 2 函数重载 函数重载的概念 1、参数类型不同 2、参数个数不同 3、参数类型顺序不同 3 引用 3.1 引用概念 3.2 引用特性 3.3 常引用 3.4 使用场景 3.5 传值、传引用效率比较 3.6 引用和指针的区别 1 缺…

leetcode 2981.找出出现至少三次的最长子特殊字符串(纯哈希表暴力)

leetcode 2981.找出出现至少三次的最长子特殊字符串&#xff08;传送门&#xff09; class Solution { public:int maximumLength(string s) {int hash[30][52] { 0 },len 1,maxn0;char last A;for (char ch : s) {if (ch last) len;else len 1;for (int i len; i > …

基于51单片机的温度+烟雾报警系统设计

一.硬件方案 本设计采用51单片机为核心控制器&#xff0c;利用气体传感器MQ-2、ADC0832模数转换器、DS18B20温度传感器等实现基本功能。通过这些传感器和芯片&#xff0c;当环境中可燃气体浓度或温度等发生变化时系统会发出相应的灯光报警信号和声音报警信号&#xff0c;以此来…

输入输出(2)——C++的标准输出流

目录 一、C的标准输出流 &#xff08;一&#xff09;cout、cerr和clog流对象 1、cout 流对象 2、cerr 流对象 3、clog流对象 &#xff08;二&#xff09;用函数put输出字符 &#xff08;三&#xff09;用函数 write 输出字符 一、C的标准输出流 标准输出流——流向标准输…

【C++课程学习】:二叉树的基本函数实现

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f349;二叉树的结构类型&#xff1a; &#x1f349;1.创建二叉树函数&#xff08;根据数组&am…

如何向一个六岁的孩子讲解JavaScript 闭包的工作原理是什么?

作为一位六岁孩子的父亲,目前我正在教小孩子们编程(同时我自己也是一个对编程没有正式教育的新手),我认为最好的学习方式是通过实际操作。如果六岁的孩子已经准备好理解闭包的概念,那么他们也足够大,可以自己动手试一试。下面的解释文字可能更适合十岁左右的孩子。 案例…

30【Aseprite 作图】桌子——拆解

1 桌子只要画左上方&#xff0c;竖着5&#xff0c;斜着3个1&#xff0c;斜着两个2&#xff0c;斜着2个3&#xff0c;斜着一个5&#xff0c;斜着一个很长的 然后左右翻转 再上下翻转 在桌子腿部分&#xff0c;竖着三个直线&#xff0c;左右都是斜线&#xff1b;这是横着水平线不…

Python os.path.isfile() 和 os.path.isdir() 函数

Python os.path.isfile 和 os.path.isdir 函数 正文 正文 在网上看到很多人对这两个函数的用法有过说明&#xff0c;然而感觉都没有说到它们的本质&#xff0c;这里特来记录一下。os.path.isfile() 用来判断所给参数是否一个文件。os.path.isdir() 用来判断所给的参数是否是一…