学生成绩管理系统C语言(详解)附源码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
// 描述学生信息的结构体
struct student
{
    char name[18];   // 名字
    int num;         // 学号
    double score[3]; // 3门课的成绩
    double sum;      // 总分

};

// 学生所有信息的结构体
struct stuSystem
{
    struct student stu[MAX];  //系统用学生的信息的结构体数组stu[]来储存学生的信息
    int curSize;    //当前系统中有的学生数
};

// 创建系统的函数
struct stuSystem* createSystem()
{
    //初始化结构体指针
    struct stuSystem* pSystem = (struct stuSystem*)calloc(sizeof(struct stuSystem), 1);
    return pSystem;
};

// 制作菜单
void makeMenu()
{
    printf("---------------------------------------------n");
    printf("tt 0. 退出系统 n");
    printf("tt 1. 录入信息 n");
    printf("tt 2. 浏览信息 n");
    printf("tt 3. 删除信息 n");
    printf("tt 4. 修改信息 n");
    printf("tt 5. 查找信息 n");
    printf("tt 6. 排序信息 n");
    printf("---------------------------------------------n");
    printf("---------请输入(0 ~ 7):");
}

// 录入学生信息的函数
void inputStu(struct stuSystem* pSystem)
{
    struct student temp; // 结构体变量,临时储存用户输入的信息
    printf("请输入学生的姓名和学号:");
    scanf("%s%d",temp.name, &temp.num);
    printf("请输入此学生3门课的成绩:");
    temp.sum = 0;
    for(int i = 0; i < 3; i++)
    {
        scanf("%lf",&temp.score[i]);
        temp.sum += temp.score[i];
    }
    insertArray(pSystem, temp); // 插入数组函数(用于将用户输入的信息插入并储存在数组中)
}

// 插入(学生信息)数组函数
void insertArray(struct stuSystem* pSystem,struct student stuInfo)
{
    if(pSystem -> curSize >= MAX) // 如果数组已经存满
    {
        printf("学生人数已满,无法录入!n");
            return;              // 直接返回
    }
    // 若没有存满
    pSystem ->stu[pSystem ->curSize] = stuInfo; // 指针指向学生信息的数组并赋值
    pSystem ->curSize++;   // 指向现在已经存在学生数
}

//打印(学生信息)数组函数
void printfArray(struct stuSystem* pSystem)
{
    printf("姓名t编号t数学t英语t体育t总分n");
    for(int i = 0; i < pSystem ->curSize; i++)
    {
        printf("%st%dt",pSystem ->stu[i].name, pSystem ->stu[i].num); //打印姓名和学号
        for(int j = 0; j < 3; j++)
        {
            printf("%.llft",pSystem ->stu[i].score[j]); // 打印各科成绩
        }
        printf("%.llfn",pSystem ->stu[i].sum);  // 打印总分
    }
}

//查找学生姓名函数
int searchArray(struct stuSystem* pSystem, const char* name)
{
    for(int i = 0; i < pSystem ->curSize; i++)
    {
        if(strcmp(pSystem ->stu[i].name, name) == 0) // 运用比较字符串进行比较
            return i;             // 如果成功找到,返回数组下标
    }
    return -1;   // 没有找到,返回-1
}

//删除(学生信息)数组函数(数组的移位操作)
void deleteArray(struct stuSystem* pSystem, const char* name)
{
    int pos = searchArray(pSystem, name);
    if(pos == -1)
    {
        printf("没有找到此学生,无法删除!n");
    }
    else
    {
        //利用指针的移位删除数组
        for(int i = pos; i < pSystem ->curSize - 1; i++)
        {
            pSystem ->stu[i] = pSystem -> stu[i + 1];
        }
        pSystem ->curSize--;
        printf("删除成功!n");
    }
}

//修改(学生信息)数组函数
void modifyArray(struct stuSystem* pSystem, const char* name)
{
    int pos = searchArray(pSystem, name);
    if(pos == -1)
    {
        printf("没有找到此学生,无法修改!n");
    }
    else
    {
        printf("请输入该生新的姓名和学号:");
        scanf("%s%d",pSystem ->stu[pos].name,&pSystem ->stu[pos].num);
        printf("请输入新的三门课的成绩:");
        pSystem ->stu[pos].sum = 0;  //初始为零
        for(int i = 0; i < 3; i++)   //重新赋值
        {
            scanf("%lf",&pSystem ->stu[pos].score[i]);
            pSystem ->stu[pos].sum += pSystem ->stu[pos].score[i];
        }
        printf("修改成功 n");
    }
}

//(数组的)排序函数(冒泡排序)
void SortBySum(struct stuSystem* pSystem)
{
    //按照总分排序
    for(int i = 0; i < pSystem ->curSize; i++)
    {
        for(int j = 0; j < pSystem ->curSize - i - 1; j++)
        {
            if(pSystem ->stu[j].sum < pSystem ->stu[j + 1].sum)
            {
                struct student temp = pSystem ->stu[j];
                pSystem ->stu[j] = pSystem ->stu[j + 1];
                pSystem ->stu[j + 1] = temp;
            }
        }
    }
}

//寻找并打开某一个系统的函数(打开系统的钥匙)
void keyDown(struct stuSystem* pSystem)
{
    // 按键输入+开关语句(switch)
    int userKey = 0;
    scanf("%d",&userKey); // 输入钥匙
    int result = userKey;
    int pos = 0;         //  查找判断
    char name[18] = "";
    switch(userKey)      // 用钥匙打开系统的某个操作
    {
    case 0:
        printf("------------退出系统-----------n");
        printf("退出成功 n");
        system("pause");
        exit(0); //退出界面函数
        break;
    case 1:
        printf("------------录入学生信息-----------n");
        inputStu(pSystem);  //调用输入函数
        break;
    case 2:
        printf("------------浏览学生信息-----------n");
        printfArray(pSystem); //调用打印学生信息函数
        break;
    case 3:
        printf("------------删除学生信息-----------n");
        printf("请输入要删除学生的姓名:");
        scanf("%s",name);
        deleteArray(pSystem, name); //调用删除函数
        break;
    case 4:
        printf("------------修改学生信息-----------n");
        printf("请输入修改学生的姓名:");
        scanf("%s", name);
        modifyArray(pSystem, name);//调用修改函数
        break;
    case 5:
        printf("------------查找学生信息-----------n");
        printf("请输入要查找的学生的姓名:");
        scanf("%s",name);
        pos = searchArray(pSystem, name); // 调用查找函数
        if(pos == -1)
        {
            printf("未找到相关学生信息!n");
        }
        else
        {
            printf("姓名t编号t数学t英语t体育t总分n");
            printf("%st%dt",pSystem ->stu[pos].name, pSystem ->stu[pos].num); //打印姓名和学号
            for(int i = 0; i < 3; i++)
            {
                printf("%.lft", pSystem ->stu[pos].score[i]); // 打印各科成绩
            }
            printf("%.lfn", pSystem ->stu[pos].sum);  // 打印总分
        }
        break;
    case 6:
        printf("------------学生排序信息-----------n");
        SortBySum(pSystem);  //调用排序函数
        printfArray(pSystem);  //然后调用打印函数打印信息
        break;
    default:
        printf("输入错误!请重新输入!n");
        break;

    }
}

int main()
{
    struct stuSystem* pSystem = createSystem(); //创建一个结构指针插入某个系统
    while (1)
    {
        makeMenu();   // 调用函数并打印出菜单
        keyDown(pSystem);  //调用打开系统函数
        system("pause");
    }
    return 0;
}

制作不易,还请三连支持!!!

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>