学生成绩管理系统_结构体数组实现

实验:学生成绩管理,C语言实现,采用结构体数组完成

编写程序完成对学生成绩的管理,要求实现的功能包括(以下功能分函数完成):
1、学生信息录入:从键盘按学号顺序输入 N名学生信息(学号、姓名和成绩)
2、学生信息输出:输出学生的信息
3、学生信息排序:按照成绩从低到高的顺序对录入的学生信息排序
4、学生信息查询:按照输入的学号查找并输出对应学生的信息
5、学生信息插入:按给定信息将学生信息插入到指定位置
6、学生信息删除:删除给定学生的信息
7、学生成绩统计:按分数段统计学生信息采用结构体数组完成。


目录

对存储学生成绩信息的结构体初始化

创建学生信息

对学生信息进行排序

输出学生信息

学生信息查询

学生信息插入

学生信息删除

学生成绩统计

提示窗口

获取输入的数字编号

主函数


对存储学生成绩信息的结构体初始化

//结构体初始化
struct student
{
    char name[20];
    int number;
    int scored;

};

创建学生信息

//创建学生信息
void CreatInfo(int *n_, struct student Stu[]){      //将主函数中存储的学生人数与结构体地址传入函数

    int number,scored;
    char name[20];
    printf("请按顺序输入%d个学生的信息:(学号_姓名_成绩)\n",*n_);
    for (int i = 0; i < *n_; i++)                   
    {
        scanf("%d",&Stu[i].number);
        scanf("%s",&Stu[i].name);
        scanf("%d",&Stu[i].scored);

}
}

对学生信息进行排序

//对学生信息进行排序
void SortedInfo(int *n_,struct student Stu[]){

    struct student temp;                        //创建临时存储交换信息的中间变量
    for (int i = 0; i < *n_-1;i++)              //使用冒泡排序对结构体数组排序
    {
        for (int j = i+1; j < *n_; j++)
        {
            if (Stu[i].scored>Stu[j].scored)
            {
                temp=Stu[j];                    //交换部分
                Stu[j]=Stu[i];
                Stu[i]=temp;
            }
            
        }
        
    }
    
}

输出学生信息

//输出学生信息
void OutputInfo(int *n_,struct student Stu[]){

    for (int i = 0; i < *n_; i++)
    {        
            printf("%d\t%s\t%d\n",Stu[i].number,Stu[i].name,Stu[i].scored);   
    }
    

}

学生信息查询

//学生信息查询
void SearchInfo(int *n_,struct student Stu[]){

    int m;                              //查询学生的学号
    int flag=0;                         //用来判断是否查询到学生的信息
    printf("请输入查询学生的学号:\n");
    scanf("%d",&m);

    for (int i = 0; i < *n_; i++)
    {
        if (Stu[i].number==m)
        {
            printf("学号为%d的学生信息如下:\n",m);
            printf("%d\t%s\t%d\n",Stu[i].number,Stu[i].name,Stu[i].scored);
            flag=1;                     //更新flag,代表查询成功
            break;
        }
        
    }
    if (flag==0)                        //查询失败
    {
        printf("未查询到该学生信息!\n");
    }

}

学生信息插入

//学生信息插入
void InsertInfo(int *n_,struct student Stu[]){

    int name[20],m;
    int number,scored;
    printf("请输入插入学生的信息:(学号_姓名_成绩)\n",*n_);
    scanf("%d",&number);
    scanf("%s",&name);
    scanf("%d",&scored);
    printf("请输入插入的位置:\n");
    scanf("%d",&m);
    if (m>*n_+1 || m<=0)                        //m超出存储学生数量,插入失败
    {
        printf("超出范围!插入失败!");
    }
   
    else if (m==*n_+1)                          //刚好插入到最后一名学生后
    {
        Stu[*n_].number=number;
        Stu[*n_].scored=scored;
        strcpy(Stu[*n_].name,name);
        printf("插入成功!\n");
        *n_=*n_+1;                              //存储学生成绩数量更新
    }
    
    else
    {
        for (int i = *n_-1; i >=m-1 ; i--){     //从末尾起,第m后的信息在数组中后移一位,以便插入
        Stu[i+1]=Stu[i];
    }
        Stu[m-1].number=number;
        Stu[m-1].scored=scored;
        strcpy(Stu[m-1].name,name);
        printf("插入成功!\n");
        *n_=*n_+1;                              //存储学生成绩数量更新


    }

}

学生信息删除

//学生信息删除
void DeleteInfo(int *n_,struct student Stu[]){

    int m,flag=0;                           //flag用来判断是否删除
    printf("请输入删除学生学号:\n");
    scanf("%d",&m);
    for (int i = 0; i < *n_; i++)
    {
        if (Stu[i].number==m)               //找到需要删除的学生信息
        {
            for (int j = i; j < *n_; j++)   //将所要删除学生信息后的所有学生信息向前移动一位
            {
                Stu[j]=Stu[j+1];
            }
            *n_=*n_-1;
            flag=1;                         //更新状态,删除成功
            break;
        }
        
    }
    if (flag==0)
    {
        printf("未找到该学生!无法删除!\n");
    }
    else
        printf("删除成功!\n");

}

学生成绩统计

//学生成绩统计
void SammlungInfo(int *n_,struct student Stu[]){

    int a=0,b=0,c=0,d=0,e=0;                        //5个等级
    for (int i = 0; i < 5; i++)                     //遍历数组
    {
        
            if (Stu[i].scored<=60)
            {
                e++;
            }
            else if (Stu[i].scored>60 && Stu[i].scored<=70)
            {
                d++;
            }
            else if (Stu[i].scored>70 && Stu[i].scored<=80)
            {
                c++;
            }
            else if (Stu[i].scored>80 && Stu[i].scored<=90)
            {
                b++;
            }
            else if (Stu[i].scored>90)
            {
                a++;
            }
            
        
        
    }
    printf("A等级(100-90分)有%d人\n",a);
    printf("B等级(90-80分)有%d人\n",b);
    printf("C等级(80-70分)有%d人\n",c);        
    printf("D等级(70-60分)有%d人\n",d);
    printf("E等级(低于60分)有%d人\n",e);
        


}

提示窗口

//提示窗口
int Start(){

    printf("1.学生信息输出\n");
    printf("2.学生信息排序\n");
    printf("3.学生信息查询\n");
    printf("4.学生信息插入\n");
    printf("5.学生信息删除\n");
    printf("6.学生信息统计\n");
    printf("请选择你需要的功能,输入对应数字编号:\n");
    
}

获取输入的数字编号

int read(){
    int k;
    scanf("%d",&k);
    return k;
}

主函数

int main(){


    printf("请您录入学生信息,输入学生信息的个数:\n");
    int n;
    int *n_=&n; 
    scanf("%d",&n);
    struct student Stu[100];                    //创建结构体数组
    CreatInfo(n_,&Stu[0]);                      //调用创建列表函数
    while (1)
    {
        Start();                                
        switch (read())                         //获取输入数字,选择相应的函数
        {
        case 1:
            OutputInfo(n_,&Stu[0]);
            break;
        case 2:
            SortedInfo(n_,&Stu[0]);
            break;
        case 3:
            SearchInfo(n_,&Stu[0]);
            break;
        case 4:
            InsertInfo(n_,&Stu[0]);
            break;
        case 5:
            DeleteInfo(n_,&Stu[0]);
            break;
        case 6:
            SammlungInfo(n_,&Stu[0]);
            break;
        default:
            printf("输入错误,请重新输入!\n");
            break;
        }
    }

}

代码一览

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

//结构体初始化
struct student
{
    char name[20];
    int number;
    int scored;

};

//创建学生信息
void CreatInfo(int *n_, struct student Stu[]){      //将主函数中存储的学生人数与结构体地址传入函数

    int number,scored;
    char name[20];
    printf("请按顺序输入%d个学生的信息:(学号_姓名_成绩)\n",*n_);
    for (int i = 0; i < *n_; i++)                   
    {
        scanf("%d",&Stu[i].number);
        scanf("%s",&Stu[i].name);
        scanf("%d",&Stu[i].scored);

}
}

//对学生信息进行排序
void SortedInfo(int *n_,struct student Stu[]){

    struct student temp;                        //创建临时存储交换信息的中间变量
    for (int i = 0; i < *n_-1;i++)              //使用冒泡排序对结构体数组排序
    {
        for (int j = i+1; j < *n_; j++)
        {
            if (Stu[i].scored>Stu[j].scored)
            {
                temp=Stu[j];                    //交换部分
                Stu[j]=Stu[i];
                Stu[i]=temp;
            }
            
        }
        
    }
    
}

//输出学生信息
void OutputInfo(int *n_,struct student Stu[]){

    for (int i = 0; i < *n_; i++)
    {        
            printf("%d\t%s\t%d\n",Stu[i].number,Stu[i].name,Stu[i].scored);   
    }
    

}

//学生信息查询
void SearchInfo(int *n_,struct student Stu[]){

    int m;                              //查询学生的学号
    int flag=0;                         //用来判断是否查询到学生的信息
    printf("请输入查询学生的学号:\n");
    scanf("%d",&m);

    for (int i = 0; i < *n_; i++)
    {
        if (Stu[i].number==m)
        {
            printf("学号为%d的学生信息如下:\n",m);
            printf("%d\t%s\t%d\n",Stu[i].number,Stu[i].name,Stu[i].scored);
            flag=1;                     //更新flag,代表查询成功
            break;
        }
        
    }
    if (flag==0)                        //查询失败
    {
        printf("未查询到该学生信息!\n");
    }

}

//学生信息插入
void InsertInfo(int *n_,struct student Stu[]){

    int name[20],m;
    int number,scored;
    printf("请输入插入学生的信息:(学号_姓名_成绩)\n",*n_);
    scanf("%d",&number);
    scanf("%s",&name);
    scanf("%d",&scored);
    printf("请输入插入的位置:\n");
    scanf("%d",&m);
    if (m>*n_+1 || m<=0)                        //m超出存储学生数量,插入失败
    {
        printf("超出范围!插入失败!");
    }
   
    else if (m==*n_+1)                          //刚好插入到最后一名学生后
    {
        Stu[*n_].number=number;
        Stu[*n_].scored=scored;
        strcpy(Stu[*n_].name,name);
        printf("插入成功!\n");
        *n_=*n_+1;                              //存储学生成绩数量更新
    }
    
    else
    {
        for (int i = *n_-1; i >=m-1 ; i--){     //从末尾起,第m后的信息在数组中后移一位,以便插入
        Stu[i+1]=Stu[i];
    }
        Stu[m-1].number=number;
        Stu[m-1].scored=scored;
        strcpy(Stu[m-1].name,name);
        printf("插入成功!\n");
        *n_=*n_+1;                              //存储学生成绩数量更新


    }

}


//学生信息删除
void DeleteInfo(int *n_,struct student Stu[]){

    int m,flag=0;                           //flag用来判断是否删除
    printf("请输入删除学生学号:\n");
    scanf("%d",&m);
    for (int i = 0; i < *n_; i++)
    {
        if (Stu[i].number==m)               //找到需要删除的学生信息
        {
            for (int j = i; j < *n_; j++)   //将所要删除学生信息后的所有学生信息向前移动一位
            {
                Stu[j]=Stu[j+1];
            }
            *n_=*n_-1;
            flag=1;                         //更新状态,删除成功
            break;
        }
        
    }
    if (flag==0)
    {
        printf("未找到该学生!无法删除!\n");
    }
    else
        printf("删除成功!\n");

}

//学生成绩统计
void SammlungInfo(int *n_,struct student Stu[]){

    int a=0,b=0,c=0,d=0,e=0;                        //5个等级
    for (int i = 0; i < 5; i++)                     //遍历数组
    {
        
            if (Stu[i].scored<=60)
            {
                e++;
            }
            else if (Stu[i].scored>60 && Stu[i].scored<=70)
            {
                d++;
            }
            else if (Stu[i].scored>70 && Stu[i].scored<=80)
            {
                c++;
            }
            else if (Stu[i].scored>80 && Stu[i].scored<=90)
            {
                b++;
            }
            else if (Stu[i].scored>90)
            {
                a++;
            }
            
        
        
    }
    printf("A等级(100-90分)有%d人\n",a);
    printf("B等级(90-80分)有%d人\n",b);
    printf("C等级(80-70分)有%d人\n",c);        
    printf("D等级(70-60分)有%d人\n",d);
    printf("E等级(低于60分)有%d人\n",e);
        


}

//提示窗口
int Start(){

    printf("1.学生信息输出\n");
    printf("2.学生信息排序\n");
    printf("3.学生信息查询\n");
    printf("4.学生信息插入\n");
    printf("5.学生信息删除\n");
    printf("6.学生信息统计\n");
    printf("请选择你需要的功能,输入对应数字编号:\n");
    
}

int read(){
    int k;
    scanf("%d",&k);
    return k;
}





int main(){


    printf("请您录入学生信息,输入学生信息的个数:\n");
    int n;
    int *n_=&n; 
    scanf("%d",&n);
    struct student Stu[100];                    //创建结构体数组
    CreatInfo(n_,&Stu[0]);                      //调用创建列表函数
    while (1)
    {
        Start();                                
        switch (read())                         //获取输入数字,选择相应的函数
        {
        case 1:
            OutputInfo(n_,&Stu[0]);
            break;
        case 2:
            SortedInfo(n_,&Stu[0]);
            break;
        case 3:
            SearchInfo(n_,&Stu[0]);
            break;
        case 4:
            InsertInfo(n_,&Stu[0]);
            break;
        case 5:
            DeleteInfo(n_,&Stu[0]);
            break;
        case 6:
            SammlungInfo(n_,&Stu[0]);
            break;
        default:
            printf("输入错误,请重新输入!\n");
            break;
        }
    }

}

  • 14
    点赞
  • 153
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值