C语言项目实战:学生成绩管理系统

122 阅读5分钟

🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,全网11W+粉丝博主,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,同时还运营着十几个不同主题的技术交流群,如有需要请站内私信或者联系VX(gylzbk),互相学习共同进步。

家人们!还在为C语言的复杂语法头秃吗?别慌!今天咱们不搞虚的,直接上手一个超实用的C语言案例 —— 学生成绩管理系统!通过这个案例,你能把C语言的数组、结构体、函数这些核心知识点串起来,直接拿捏编程实战技巧,话不多说,开冲!

需求分析

咱们要实现的学生成绩管理系统,得具备以下核心功能:

录入学生信息:包括学生姓名、学号以及语文、数学、英语三门课程的成绩。

计算学生总分与平均分:根据录入的成绩,自动算出每个学生的总分和平均分。

显示学生信息:将录入的学生信息、总分和平均分全部展示出来。

排序功能:能按照学生的总分从高到低进行排序,方便查看成绩排名。

代码实现

定义结构体

首先,我们使用结构体来存储学生的信息,代码如下:

#include \<stdio.h>
#include \<string.h>

//定义学生结构体
typedef struct 
   char nme\[50];
   int id
   float chinse;
   float math
   float englih;
   float total;
   float average;
} Student;

在这个结构体中,name用于存储学生姓名,id存储学号,chinesemathenglish分别存储语文、数学、英语成绩,totalaverage则用来保存总分和平均分。

录入学生信息

接下来,编写函数实现学生信息的录入:

// 录入学生信息
void inputStudent(Student \*students, int n) {
   for (int i = 0; i < n; i++) {
       printf("请输入第 %d 个学生的姓名: ", i + 1);
       scanf("%s", students\[i].name);
       printf("请输入第 %d 个学生的学号: ", i + 1);
       scanf("%d", \&students\[i].id);
       printf("请输入第 %d 个学生的语文成绩: ", i + 1);
       scanf("%f", \&students\[i].chinese);
       printf("请输入第 %d 个学生的数学成绩: ", i + 1);
       scanf("%f", \&students\[i].math);
       printf("请输入第 %d 个学生的英语成绩: ", i + 1);
       scanf("%f", \&students\[i].english);
   }
}

这个函数通过循环,依次让用户输入每个学生的各项信息,并存储到结构体数组students中。

计算总分和平均分

然后,编写函数计算每个学生的总分和平均分:

// 计算总分和平均分

void calculateScore(Student \*students, int n) {
   for (int i = 0; i < n; i++) {
       students\[i].total = students\[i].chinese + students\[i].math + students\[i].english;
       students\[i].average = students\[i].total / 3;
   }
}

函数遍历结构体数组,将每个学生的三门成绩相加得到总分,再除以 3 算出平均分。

显示学生信息

再编写函数将学生的信息、总分和平均分展示出来:

// 显示学生信息
void displayStudent(Student \*students, int n) {
   printf("姓名\t学号\t语文\t数学\t英语\t总分\t平均分\n");
   for (int i = 0; i < n; i++) {
       printf("%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
              students\[i].name, students\[i].id, students\[i].chinese, students\[i].math, students\[i].english,
              students\[i].total, students\[i].average);
   }
}

该函数先打印表头,然后通过循环遍历结构体数组,按照指定格式输出每个学生的详细信息。

按总分排序

最后,使用冒泡排序法实现按学生总分从高到低排序:

// 按总分排序
void sortByTotal(Student \*students, int n) {
   for (int i = 0; i < n - 1; i++) {
       for (int j = 0; j < n - i - 1; j++) {
           if (students\[j].total < students\[j + 1].total) {
               Student temp = students\[j];
               students\[j] = students\[j + 1];
               students\[j + 1] = temp;
           }
       }
   }
}

冒泡排序的核心逻辑是通过两层循环,不断比较相邻学生的总分,如果顺序不对就交换位置,经过多次循环后,就能实现按总分从高到低排序。

主函数调用

在主函数中调用上述函数,完成整个系统的功能:

int main() {

&#x20;   int n;

&#x20;   printf("请输入学生人数: ");

&#x20;   scanf("%d", \&n);

&#x20;   Student students\[n];

&#x20;   inputStudent(students, n);

&#x20;   calculateScore(students, n);

&#x20;   sortByTotal(students, n);

&#x20;   displayStudent(students, n);

&#x20;   return 0;

}

主函数先获取学生人数,创建对应大小的结构体数组,然后依次调用录入、计算、排序和显示函数,实现完整的学生成绩管理系统功能。

总结与拓展

通过这个学生成绩管理系统案例,我们不仅巩固了C语言中结构体、数组和函数的使用,还掌握了数据处理和排序的基本逻辑。当然,这个系统还有很多可以优化和拓展的地方,比如增加成绩查询功能、将数据保存到文件中实现持久化存储等。

家人们,赶紧动手敲一敲代码,亲自体验C语言的魅力吧!如果在实现过程中有任何问题,欢迎在评论区留言讨论,咱们一起进步!要是觉得这篇文章有用,别忘了点赞、收藏、转发三连哦~下期还想看什么C语言案例,也可以告诉我!