学生管理系统的C语言实现 | 数据结构、结构体、函数封装

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

struct stu_cj
{
    int stu_xh; //学号顺序值
    int yw_cj;  //语文
    int sx_cj;  //数学
    int wy_cj;  //外语
    int pj_cj;  //平均成绩
};

///定义子函数//
void Help();
void Type(struct stu_cj *p, int rs, int *k);
void Average(struct stu_cj *p, int k);
void List(struct stu_cj *p, int k);
void Sort( int k);
void search(struct stu_cj *p, int k, int x);
void clear();
void Quit();
//定义变量/
struct stu_cj A[20];
struct stu_cj *p = A;

int i = 0, j = 0, k = 0, x = 0, rs = 0; //k为添加信息条数<=10
char b = '0', c = '0', d = '0';

MAIN///

int main(int argc, char const *argv[])
{

    Help();
    while (1)
    {
        int rs = 0;
        printf(">>>请输入命令:");
        scanf("%s", &b);
        getchar();
        switch (b)
        {
        case 'H':
            Help();
            break;

        case 'T': //录入
            if (k <= 20)
            {
                printf("请输入增添人数:");
                scanf("%d", &rs);
                getchar();
                Type(p, rs, &k);
                printf("******************************************\n");
                printf("%d", k);
                break;
            }
            else
            {
                puts("数据已满!请联系管理员。");
                printf("******************************************\n");
                continue;
            }
        case 'A': //平均
            if (k == 0)
            {
                puts("数据为空,请先执行命令 T,输入数据");
                printf("******************************************\n");
                continue;
            }
            else
            {
                Average(p, k);
                printf("******************************************\n");
                continue;
            }
            break;

        case 'L': //列出
            if (k == 0)
            {
                puts("数据为空,请先执行命令 T,输入数据");
                printf("******************************************\n");
                continue;
            }
            else
            {
                List(p, k);
                printf("******************************************\n");
                continue;
            }
            break;

        case 'P': //排序
            if (k == 0)
            {
                puts("数据为空,请先执行命令 T,输入数据");
                printf("******************************************\n");
                continue;
            }
            else
            {
                Sort(k);
                printf("******************************************\n");
                continue;
            }
            break;

        case 'S': //查询
            if (k == 0)
            {
                puts("数据为空,请先执行命令 T,输入数据");
                printf("******************************************\n");
                continue;
            }
            else
            {
                printf("请输入要查询的学号:");

                scanf("%d", &x);
                getchar();
                search(p, k, x);
                printf("******************************************\n");
                continue;
            }
            break;

        case 'C': //清屏
            clear();
            break;
        case 'Q': //退出
            Quit();
        default:
            puts("输入有误!请重新输入。");
            printf("******************************************\n");
            break;
        }
    }

    return 0;
}

//HELP//
void Help()
{
    puts("******************************************");
    puts("*      学生成绩管理系统————帮助菜单      *");
    puts("******************************************");
    puts("*     H >> 显示帮助菜单                  *");
    puts("*     T >> 成 绩 录 入                   *");
    puts("*     A >> 计算学生平均分                *");
    puts("*     L >> 列出成绩单                    *");
    puts("*     P >> 按平均成绩由高到低排序        *");
    puts("*     S >> 按学号查询学生成绩            *");
    puts("*     C >> 清屏                          *");
    puts("*     Q >> 退出系统                      *");
    puts("******************************************");
    puts("*   Copyright <C> 2023.03.11 By 于雪杰   *");
    puts("******************************************");
}
//TYPE//
void Type(struct stu_cj *p, int rs, int *k)
{
    int m = 1;
    
    for (i = 0; i < rs; i++)
    {
        int t=*k;
        (p + t)->stu_xh = t + 1;
        (p + t)->pj_cj = 0;
        puts("学号 语文 数学 外语");
        printf("%d", (p + t)->stu_xh);
        scanf("%d %d %d", &(p + t)->yw_cj, &(p + t)->sx_cj, &(p + t)->wy_cj);
        (*k) += m;
    }
    printf("******************************************\n");
    printf("已成功输入%d人成绩\n", *k);
}
void Average(struct stu_cj *p, int k)
{
    for (i = 0; i < k; i++)
    {
        (p + i)->pj_cj = ((p + i)->yw_cj + (p + i)->wy_cj + (p + i)->sx_cj) / 3;
    }
}

LIST///

void List(struct stu_cj *p, int k)
{
    puts("学号 语文 数学 外语 平均分");
    for (i = 0; i < k; i++)
    {
        printf("%d    %d    %d    %d    %d\n", (p + i)->stu_xh, (p + i)->yw_cj, (p + i)->sx_cj, (p + i)->wy_cj, (p + i)->pj_cj);
    }
}
/SORT
void Sort( int k)
{
    printf("%d", k);
    for (i = 0; i < k; i++)
    {
        for (j=0; j < k-i ; j++)
        {
            struct stu_cj temp1 ={};
            if ((p + j)->pj_cj < (p + j+1)->pj_cj)
            {
                temp1 = A[j];
                A[j]= A[j+1];
                A[j+1] = temp1;
                            }
            
        }
    }
}
///SEARCH//
void search(struct stu_cj *p, int k, int x)
{

    for (int i = 0; i < k; i++)
    {
        if ((p + i)->stu_xh == x)
        {
            puts("学号 语文 数学 外语 平均分");
            printf("%d    %d %d %d %d\n", (p + i)->stu_xh, (p + i)->yw_cj, (p + i)->sx_cj, (p + i)->wy_cj, (p + i)->pj_cj);
            break;
        }
        else if (i == k - 1)
        {
            puts("未查询到该学生相关信息!");
            printf("\n");
            break;
        }
    }
}
CLEAR
void clear()
{
    system("clear");
}
///QUIT//
void Quit()
{
    puts("感谢使用!");
    exit(0);
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值