目录

一、介绍

二、功能

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");
}
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐