目录
一、介绍
二、功能
1.录入学生
2.删除学生信息
3.修改学生信息
4.查询学生信息
5.所有学生信息
6.成绩排序
7.退出程序
三、代码
1.主函数
2.头文件
3.函数封装库
一、介绍
利用C语言,运用链表、指针、封装函数等基本知识实现一个学生管理系统。通过在终端对学生信息进行一系列操作。
基本思想流程图如下:

基本参数:

二、功能
1.录入学生
通过输入选项 0 匹配功能,进入录入学生信息的程序,将学生的信息录入到程序。
相关函数:
int insert_stu(Class_t *cls)
程序运行结果:

2.删除学生信息
通过输入选项 1 匹配功能,进入删除学生信息的程序,对指定学生的信息删除。
相关函数:
int delete_stu(Class_t *cls)
程序运行结果:

3.修改学生信息
通过输入选项 2 匹配功能,进入修改学生信息的程序,对指定学生的信息进行修改。
相关函数:
int update_stu(Class_t *cls)
程序运行结果:

4.查询学生信息
通过输入选项 3 匹配功能,进入查询学生信息的程序,将指定学生的信息打印出来。
相关函数:
int select_stu(Class_t *cls)
程序运行结果:

5.所有学生信息
通过输入选项 4 匹配功能,进入遍历学生信息的程序,将所有学生的信息打印出来。
相关函数:
void print_all_stu(Class_t *cls)
程序运行结果:
已提前录入aa、bb、cc、dd、ee相关信息。

6.成绩排序
通过输入选项 5 匹配功能,进入成绩排序的程序,将所有的学生按照总成绩降序排序,并打印所有学生的信息。
相关函数:
void sort_stu(Class_t *cls)
程序运行结果:

7.退出程序
通过输入选项 6 匹配功能,退出程序。
程序运行结果:

三、代码
1.主函数
#include "score.h"//学生成绩管理系统
int main(int argc, const char *argv[])
{int chose = 0;int loop = 1;// 1. 定义一个班级的的变量Class_t *cls_p =(Class_t *)malloc(sizeof(Class_t));if (cls_p == NULL){printf("malloc failed!\n");return -1;}// 初始化学生的个数, 数组的变量从第0开始的cls_p->count = -1;while (loop){printf("################################################################\n");printf("#### 0.录入 1.删除 2.修改 3.查询 4.遍历 5.排序 6.退出 ####\n");printf("################################################################\n");printf("请输入你的选择 > ");scanf("%d", &chose);while (getchar() != '\n'); // 循环吃掉所有的垃圾字符switch (chose){case INSERT:insert_stu(cls_p);break;case DELECT:delete_stu(cls_p);break;case UPDATE:update_stu(cls_p);break;case SELECT:select_stu(cls_p);break;case PRINT:print_all_stu(cls_p);break;case SORT:sort_stu(cls_p);print_all_stu(cls_p);break;case QUIT:loop = 0;printf("退出学生成绩管理系统\n");break;default:printf("输入错误,请重新输入!\n");break;}if (!loop){break;}}if (cls_p != NULL){free(cls_p);cls_p = NULL;}return 0;
}
2.头文件
#ifndef __SCORE_H__
#define __SCORE_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>// 班级学生的最大的个数
#define NUM 100// 学生成绩管理系统的功能
#define INSERT 0//插入
#define DELECT 1//删除
#define UPDATE 2//修改
#define SELECT 3//查询
#define PRINT 4//遍历
#define SORT 5//排序
#define QUIT 6//退出//声明一个学生成绩组成的结构体类型
typedef struct student_score
{int Maths;int Chinese;int English;int Total_score;
}score_t;// 声明一个学生的结构体类型
typedef struct Student /*不省略结构体名*/
{char name[20];int age;char sex;score_t score;
} Student_t;
// 声明一个班级的结构体类型
typedef struct /*省略结构体名*/
{Student_t stu_arr[NUM];int count; // 记录学生的个数
} Class_t;int insert_stu(Class_t *cls);//录入int delete_stu(Class_t *cls);//删除int update_stu(Class_t *cls);//修改int select_stu(Class_t *cls);//查询void print_all_stu(Class_t *cls);//遍历void sort_stu(Class_t *cls);//排序#endif // __SCORE_H__
3.函数封装库
#include "score.h"/*--------------------------------------------------------功能:录入一个学生参数:@ cls :插入到哪个班级返回值:0:成功-1:失败 学生满不可以插入
*/
int insert_stu(Class_t *cls)
{if (NUM == cls->count-1){printf("内存不足!插入失败!\n");return -1;}cls->count++;printf("请输入所要录入学生的相关信息\n");printf("请输入姓名:");scanf("%s",cls->stu_arr[cls->count].name);printf("请输入年龄:");scanf("%d",&cls->stu_arr[cls->count].age);printf("请输入性别:");scanf("%s",&cls->stu_arr[cls->count].sex);printf("请输入成绩->\n");printf("语文:");scanf("%d",&cls->stu_arr[cls->count].score.Chinese);printf("数学:");scanf("%d",&cls->stu_arr[cls->count].score.Maths);printf("英语:");scanf("%d",&cls->stu_arr[cls->count].score.English);cls->stu_arr[cls->count].score.Total_score = \cls->stu_arr[cls->count].score.Chinese + \cls->stu_arr[cls->count].score.English + \cls->stu_arr[cls->count].score.Maths;printf("总成绩:%-5d\n",cls->stu_arr[cls->count].score.Total_score);printf("录入成功\n");return 0;
}/*---------------------------------------------------------功能:删除一个学生,按照名字删除参数:@ cls : 删除哪个班级的学生返回值:0 :成功-1 : 失败 没有学生的,查无此人
*/
int delete_stu(Class_t *cls)
{char name[20] = "";printf("请输入所要删除学生的姓名:");scanf("%s",name);int i,j = 0;for(i = 0; i <= cls->count; i++){if(!(strcmp(cls->stu_arr[i].name,name))){for(j = i; j <= cls->count; j++){cls->stu_arr[j] = cls->stu_arr[j+1];}printf("删除成功\n");cls->count--;return 0;}}printf("查无此人\n");return -1;
}/*--------------------------------------------------------功能:修改学生成绩,按照名字修改参数:@ cls : 修改哪个班级的学生返回值:0 : 成功-1 : 失败 没有学生的,查无此人
*/
int update_stu(Class_t *cls)
{char name[20] = "";int i = 0; printf("请输入需要修改成绩学生的姓名:\n");scanf("%s",name);for(i = 0; i <= cls->count; i++){if(!strcmp(cls->stu_arr[i].name,name)){printf("该学生语文成绩为:%d\n",cls->stu_arr[i].score.Chinese);printf("请输入新的成绩:\n");scanf("%d",&(cls->stu_arr[i].score.Chinese));printf("该学生数学成绩为:%d\n",cls->stu_arr[i].score.Maths);printf("请输入新的成绩:\n");scanf("%d",&(cls->stu_arr[i].score.Maths));printf("该学生英语成绩为:%d\n",cls->stu_arr[i].score.English);printf("请输入新的成绩:\n");scanf("%d",&(cls->stu_arr[i].score.English));cls->stu_arr[cls->count].score.Total_score = \cls->stu_arr[cls->count].score.Chinese + \cls->stu_arr[cls->count].score.English + \cls->stu_arr[cls->count].score.Maths;printf("总成绩:%-5d\n",cls->stu_arr[cls->count].score.Total_score);printf("修改成功\n");return 0;}}printf("查无此人\n");return -1;
}
/*--------------------------------------------------------功能:查询某个学生成绩,按照名字查询参数:@ cls : 查询哪个班级的学生返回值:0 : 成功-1 : 失败 没有学生的,查无此人
*/
int select_stu(Class_t *cls)
{char name[20] = "";int i = 0; printf("请输入姓名:");scanf("%s",name);for(i = 0; i <= cls->count; i++){if(!(strcmp(cls->stu_arr[i].name,name))){printf("查询成功\n");printf("该学生成绩为->语文:%-4d数学:%-4d英语:%-4d总成绩:%-5d\n",\cls->stu_arr[i].score.Chinese,\cls->stu_arr[i].score.Maths,\cls->stu_arr[i].score.English,\cls->stu_arr[i].score.Total_score);return 0;}}printf("查无此人\n");return -1;
}
/*--------------------------------------------------------功能:打印所有学生成绩信息,参数:@ cls : 打印哪个班级的学生
*/
void print_all_stu(Class_t *cls)
{int i = 0;for(i = 0 ;i <= cls->count; i++){printf("姓名:%-4s年龄:%-4d性别:%-4c成绩->语文:%-4d数学:%-4d英语:%-4d总成绩:%-5d\n",\cls->stu_arr[i].name,\cls->stu_arr[i].age,\cls->stu_arr[i].sex,\cls->stu_arr[i].score.Chinese,\cls->stu_arr[i].score.Maths,\cls->stu_arr[i].score.English,\cls->stu_arr[i].score.Total_score);}
}
/*--------------------------------------------------------功能:对所有学生按照总成绩进行排序,参数:@ cls : 排序哪个班级的学生
*/
void sort_stu(Class_t *cls)
{int i,j = 0;Student_t temp; for(i = 0; i <= cls->count -1; i++){for(j = 0; j <= cls->count -1 -i; j++){if(cls->stu_arr[j].score.Total_score < cls->stu_arr[j+1].score.Total_score){temp = cls->stu_arr[j];cls->stu_arr[j] = cls->stu_arr[j+1];cls->stu_arr[j+1] = temp;}}}printf("排序成功\n");
}














