手记

结构体链表学生信息管理系统_2

成绩查找 score_found.c

#include <stdlib.h>

typedef struct Student
{
    char classs[20];//班级
    int num;//学号
    char name[20];//名字
    double score[5];//五科成绩
    double average;//平均成绩
    struct Student *next;//下一个地址
}stu;
void score_found(stu *head)//成绩查找
{
    stu *p=head;
    for(;;)
    {
    printf("—————————————————————\n");
    printf("\n按学号查找输入1:         按姓名查找输入2:\n");
    printf("\n—————————————————————");
    int chose3_1;
    chose3_1=fied_judje();//判断输入是否正确
    if(chose3_1==1)
    {
        printf("请输入需要查找的学生的学号:");
        int num;
        int lang1=0;//判断是否存在所查学生
        scanf("%d",&num);
        for(;p!=NULL;)
        {
            p->average=(p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4])/5;
            if(num==p->num)
            {
                lang1=1;
                printf("\n你所查学生的信息为:\n");
                printf("班级:          学号:          姓名:          五门成绩:                    平均成绩:\n");
                printf("%s           %d          %s          %6.2f %6.2f %6.2f %6.2f %6.2f           %6.2f\n",
                       p->classs,p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],
                       p->average);
            }
            p=p->next;
        }
        if(lang1==0)
                printf("\<<n你所查学生不存在!>>");
    }else
    {
        printf("\n请输入需要查找的学生的姓名:");
        char name[20];
        int lang2=0;//判断是否存在所查学生
        scanf("%s",&name);
        for(;p!=NULL;)
        {
            p->average=(p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4])/5;
            if(!strcmp(name,p->name))
            {
                printf("\n你所查学生的信息为:\n");
                printf("班级:          学号:          姓名:          五门成绩:                   平均成绩:\n");
                printf("%s           %d          %s          %6.2f %6.2f %6.2f %6.2f %6.2f           %6.2f\n",
                       p->classs,p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],
                       p->average);
                lang2=1;
            }
            p=p->next;
        }
        if(lang2==0)
                printf("\<<n你所查学生不存在!>>");
    }
    //查询后的选择
    int chose3_2;
    printf("\n—————————————————————");
    printf("\n退出查询请输入1:         继续查询请输入2:\n");
    printf("—————————————————————\n");
    chose3_2=fied_judje();//判断输入是否正确
    if(chose3_2==1)break;
    else continue;
    }
}
成绩修改 score_change.c

#include <stdlib.h>
typedef struct Student
{
    char classs[20];//班级
    int num;//学号
    char name[20];//名字
    double score[5];//五科成绩
    double average;//平均成绩
    struct Student *next;//下一个地址
}stu;

void score_change(stu *head)//成绩修改
{
    stu *p=head;
    for(;;)
    {
    printf("\n—————————————————————————————");
    printf("\n按学号查找修改输入1:           按姓名查找修改输入2:\n");
    printf("—————————————————————————————\n");
    int chose_1;
    chose_1=fied_judje();//判断输入是否正确
    if(chose_1==1)
    {
        printf("请输入需要查找修改的学生的学号:");
        int num;
        int lang=0;//判断是否存在所查学生
        scanf("%d",&num);
        for(;p!=NULL;)
        {
            if(num==p->num)
            {
                lang=1;
                p->average=(p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4])/5;//修改前的平均成绩
                printf("\n你所查学生的信息为:\n");
                printf("班级:          学号:          姓名:          五门成绩:                    平均成绩:\n");
                printf("%s           %d          %s          %6.2f %6.2f %6.2f %6.2f %6.2f           %6.2f\n",
                       p->classs,p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],
                       p->average);
                printf("\n请输入要修改的班级、姓名、学号、五门成绩\n");
                scanf("%s %d %s %lf %lf %lf %lf %lf",p->classs,&p->num,p->name,&p->score[0],
                        &p->score[1],&p->score[2],&p->score[3],&p->score[4]);
                p->average=(p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4])/5;//平均成绩
                printf("\n你所修改后的学生的信息为:\n");
                printf("班级:          学号:          姓名:          五门成绩:                    平均成绩:\n");
                printf("%s           %d          %s          %6.2f %6.2f %6.2f %6.2f %6.2f           %6.2f\n",
                       p->classs,p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],
                       p->average);
            }
            p=p->next;
        }
        if(lang==0)
                printf("\n<<你所查学生不存在!>>");
    }else
    {
        printf("\n请输入需要查找修改的学生的姓名:");
        char name[20];
        int lang=0;//判断是否存在所查学生
        scanf("%s",&name);
        for(;p!=NULL;)
        {
            if(!strcmp(name,p->name))
            {
                lang=1;
                p->average=(p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4])/5;//修改前的平均成绩
                printf("\n你所查学生的信息为:\n");
                printf("班级:          学号:          姓名:          五门成绩:                    平均成绩:\n");
                printf("%s           %d          %s          %6.2f %6.2f %6.2f %6.2f %6.2f           %6.2f\n",
                       p->classs,p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],
                       p->average);
                printf("\n请输入要修改的班级、姓名、学号、五门成绩\n");
                scanf("%s %d %s %lf %lf %lf %lf %lf",p->classs,&p->num,p->name,&p->score[0],
                        &p->score[1],&p->score[2],&p->score[3],&p->score[4]);
                p->average=(p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4])/5;//平均成绩
                printf("\n你所修改后的学生的信息为:\n");
                printf("班级:          学号:          姓名:          五门成绩:                    平均成绩:\n");
                printf("%s           %d          %s          %6.2f %6.2f %6.2f %6.2f %6.2f           %6.2f\n",
                       p->classs,p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],
                       p->average);
            }
            p=p->next;
        }
        if(lang==0)
                printf("\n<<你所查学生不存在!>>\n");
    }

    //修改完后的选择
    int chose4_2;
    printf("\n—————————————————————————————");
    printf("\n退出查询修改请输入1:           继续查询修改请输入2\n");
    printf("—————————————————————————————\n");
    chose4_2=fied_judje();//判断输入是否正确
    if(chose4_2==1)break;
    else continue;
    }
}
成绩追加 score_add.c

#include <stdlib.h>
#define LEN sizeof(stu)
typedef struct Student
{
    char classs[20];//班级
    int num;//学号
    char name[20];//名字
    double score[5];//五科成绩
    double average;//平均成绩
    struct Student *next;//下一个地址
}stu;

extern n;
void score_add(stu *head)//成绩追加
{
    for(;;)
    {
        stu *p=head;
        stu *padd;
        printf("\n———————————————————————————");
        printf("\n请输入你需要添加学生的班级、学号、姓名、五门成绩\n");
        printf("———————————————————————————\n");
        int i;
        for(i=1;i<n;i++)
        {
            p=p->next;
        }
        padd=(stu *)malloc(LEN);
        scanf("%s %d %s %lf %lf %lf %lf %lf",&padd->classs,&padd->num,&padd->name,&padd->score[0],
            &padd->score[1],&padd->score[2],&padd->score[3],&padd->score[4]);
        n++;
        p->next=padd;
        padd->next=NULL;

        //追加完后的选择
        int chose5_1;
        printf("\n———————————————————————————");
        printf("\n退出成绩追加请输入1:           继续成绩追加请输入2\n");
        printf("———————————————————————————\n");
        chose5_1=fied_judje();//判断输入是否正确
        if(chose5_1==1)break;
        else continue;
    }
}
成绩分段 score_stage.c

typedef struct Student
{
    char classs[20];//班级
    int num;//学号
    char name[20];//名字
    double score[5];//五科成绩
    double average;//平均成绩
    struct Student *next;//下一个地址
}stu;

extern n;

void score_stage(stu *head)//成绩分段
{
    //先求平均成绩
    stu *p=head;
    stu sort[n];//排序临时数组
    stu temp;//排序交换
    int i,j,m;

    //求平均值并且把所有学生数据复制到数组
    for(i=0;i<n;i++)
    {
        p->average=(p->score[0]+p->score[1]+p->score[2]+p->score[3]+p->score[4])/5;
        sort[i]=*p;
        p=p->next;
    }

    //按从小到大排序
    for(i=0;i<n-1;i++)
    {
        m=i;
        for(j=i+1;j<n;j++)
        {
            if(sort[m].average>sort[j].average)
            {
                m=j;
            }
        }
        temp=sort[i];
        sort[i]=sort[m];
        sort[m]=temp;
    }

    //分段输出
    printf("\n下面是学生的信息:\n");
    printf("\n第一阶段的学生总平均分大于等于90分\n");
    printf("班级:          学号:          姓名:          五门成绩:                   平均成绩:\n");
    for(i=n-1;i>=0;i--)
    {
        if(sort[i].average>=90)
            printf("%s          %d          %s          %6.2f %6.2f %6.2f %6.2f %6.2f           %6.2f\n",
                    sort[i].classs,sort[i].num,sort[i].name,sort[i].score[0],sort[i].score[1],sort[i].score[2],
                    sort[i].score[3],sort[i].score[4],sort[i].average);
    }
    printf("\n第二阶段的学生总平均分大于等于80分\n");
    printf("班级:          学号:          姓名:          五门成绩:                   平均成绩:\n");
    for(i=n-1;i>=0;i--)
    {
        if(sort[i].average>=80&&sort[i].average<90)
            printf("%s          %d          %s          %6.2f %6.2f %6.2f %6.2f %6.2f           %6.2f\n",
                    sort[i].classs,sort[i].num,sort[i].name,sort[i].score[0],sort[i].score[1],sort[i].score[2],
                    sort[i].score[3],sort[i].score[4],sort[i].average);
    }
    printf("\n第三阶段的学生总平均分大于等于60分\n");
    printf("班级:          学号:          姓名:          五门成绩:                  平均成绩:\n");
    for(i=n-1;i>=0;i--)
    {
        if(sort[i].average>=60&&sort[i].average<80)
            printf("%s          %d          %s          %6.2f %6.2f %6.2f %6.2f %6.2f           %6.2f\n",
                    sort[i].classs,sort[i].num,sort[i].name,sort[i].score[0],sort[i].score[1],sort[i].score[2],
                    sort[i].score[3],sort[i].score[4],sort[i].average);
    }
    printf("\n第四阶段的学生总平均分小于60分\n");
    printf("班级:          学号:          姓名:          五门成绩:                  平均成绩:\n");
    for(i=n-1;i>=0;i--)
    {
        if(sort[i].average<60)
            printf("%s          %d          %s          %6.2f %6.2f %6.2f %6.2f %6.2f           %6.2f\n",
                    sort[i].classs,sort[i].num,sort[i].name,sort[i].score[0],sort[i].score[1],sort[i].score[2],
                    sort[i].score[3],sort[i].score[4],sort[i].average);
    }

}
单科分段 single_ranking.c

typedef struct Student
{
    char classs[20];//班级
    int num;//学号
    char name[20];//名字
    double score[5];//五科成绩
    double average;//平均成绩
    struct Student *next;//下一个地址
}stu;

extern n;

void single_ranking(stu *head)//单科排名
{

    stu *p;
    stu sort_single[5][n];//排序临时数组
    stu temp;//排序交换

    //把链表复制到5个数组
    int i,j,k,m;
    for(i=0;i<5;i++)
    {
        p=head;
        for(j=0;j<n;j++)
        {
            sort_single[i][j]=*p;
            p=p->next;
        }
    }

    ////按从小到大排序
    for(i=0;i<5;i++)
    {
        for(j=0;j<n-1;j++)
        {
            m=j;
            for(k=j+1;k<n;k++)
            {
                if(sort_single[i][m].score[i]>sort_single[i][k].score[i])
                    m=k;
            }
            temp=sort_single[i][m];
            sort_single[i][m]=sort_single[i][j];
            sort_single[i][j]=temp;
        }
    }
    for(;;)
    {
        int chose_1,chose_2;
        printf("\n请输入按第几科排名:");
        for(;;)
        {
            scanf("%d",&chose_1);
            if(chose_1<=5&&chose_1>=1)
            {
                break;
            }
            else
            {
                printf("\n<<你的输入有错误请重新输入!>>\n");
            }
        }
        printf("\n————————————————————————————————————");
        printf("\n选择按单科从大到小输出请输入:1          选择从小到大输出请输入:2\n");
        printf("—————————————————————————————————————\n");
        chose_2=fied_judje();

        printf("\n下面是学生的信息:\n");
        printf("班级:          学号:          姓名:         第%d科成绩: \n",chose_1);
        //排序输出
        if(chose_2==1)//从大到小
        {
            for(i=n-1;i>=0;i--)
            {
                printf("%s          %d          %s          %6.2f\n",
                        sort_single[chose_1][i].classs,
                        sort_single[chose_1][i].num,
                        sort_single[chose_1][i].name,
                        sort_single[chose_1][i].score[chose_1]);
                     }
        }else//从小到大
        {
            for(i=0;i<n;i++)
            {
                printf("%s          %d          %s          %6.2f\n",
                        sort_single[chose_1][i].classs,
                        sort_single[chose_1][i].num,
                        sort_single[chose_1][i].name,
                        sort_single[chose_1][i].score[chose_1]);
            }
        }
        int chose_3;
        printf("\n——————————————————————————");
        printf("\n继续选择请输入1:           退出单科排序请输入:2\n");
        printf("——————————————————————————\n");
        chose_3=fied_judje();
        if(chose_3==1) continue;
        else break;
    }
}

未完待续,请参见结构体链表学生管理系统_3
https://www.imooc.com/article/22419

仅供参考,不足的地方还望原谅!!!
                                            **by:郑轻大学生**
3人推荐
随时随地看视频
慕课网APP

热门评论

学习了。多谢大佬共享

我们学的是c++但是学数据结构什么的都用的c,学长你对c有啥独特见解吗?

查看全部评论