鱼C论坛

 找回密码
 立即注册
查看: 978|回复: 4

[已解决]想知道为什么第三个分数和总分没办法输出

[复制链接]
发表于 2020-11-9 17:29:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
#define MAX 5000
struct StudentInformation                                                  //定义学生结构体
{
        char Student_ID[20];
        char Name[20];
        float score1;
        float score2;
        float score3;
        float score4;
        float score5;
        float sumsc;                                                        //学生成绩总和
        float average;                                                     //学生成绩平均分
};


struct StudentInformation students[MAX];                                //定义一个学生数组及其最大数量
int num=0;                                                              //定义一个全局变量


float Ave(struct StudentInformation stu)                               //求分数平均值的函数               
{
        return(stu.score1+stu.score2+stu.score3+stu.score4+stu.score5)/5;
}


float sum(struct StudentInformation stu)                               //求分数总和的函数
{
    return(stu.score1+stu.score2+stu.score3+stu.score4+stu.score5);
}




int searchName(char name[])                                             //通过名字搜索的函数
{
        int i;
        for(i=0;i<num;i++)                                                  //遍历数组
        {
                if(strcmp(students[i].Name,name)==0)                            //通过字符串比较函数判断是否有这个人
                {
                        return i;
                                                }
                                                                
         }
         return -1;                                                         //该函数失败
         
}


int searchStudent_ID(char id[])                                         // 通过学号搜索,基本与上一个函数功能一致
{
        int j;
        for(j=0;j<num;j++)
        {
                if(strcmp(students[j].Student_ID,id)==0)
                {
                        return j;
                }
        }
        return -1;
}




void Mod_message(int p)                                                 //定义该函数便于查看学生的信息
{
        printf("%20s%20s%20s%20s%20s%20s%20s%20s%20s\n","学号","姓名","成绩","成绩","成绩","成绩","成绩","总成绩","平均成绩");
        printf("************************************************************************************************************************\n");
        printf("%20s%20s%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f\n",students[p].Student_ID,students[p].Name,students[p].score1,
        students[p].score2,students[p].score3,students[p].score4,students[p].score5,
        students[p].sumsc,students[p].average);
       
}


void Studentsearch_id_score()                           //根据学生学号进行成绩查询的函数
{
        while(1)
        {
            char id[20];
            int p;
            printf("请输入查询学生的学号");
            scanf("%s",&id);
            getchar();
            p=searchStudent_ID(id);
            if(p==-1)
            {
                    printf("请检查你输入的学号是否有误\n");
                }
                printf("你要查询的学生的全部信息为:\n");
            Mod_message(p);
            printf("是否继续查询新的学生,是请输入y,否请输入n");
                if(getchar()=='n')
                {
                        break;
                }
        }
}



void Studentsearch_name_score()                             //根据学生姓名进行成绩查询的函数
{
        while(1)
        {
            char name[20];
            int p;
            printf("请输入查询学生的姓名");
            scanf("%s",&name);
            getchar();
            p=searchName(name);
            if(p==-1)
            {
                    printf("请检查你输入的姓名是否有误\n");
                }
                printf("你要查询的学生的全部信息为:\n");
            Mod_message(p);
            printf("是否继续查询新的学生,是请输入y,否请输入n");
                if(getchar()=='n')
                {
                        break;
                }
        }
}




void StudentInformation_Inesrt()                                   //插入一个新学生信息的函数
{
        while(1){
                printf("请输入要插入学生的学号:");
                scanf("%s",&students[num].Student_ID);
                getchar();
               
                printf("请输入要插入学生的姓名:");
                scanf("%s",&students[num].Name);
                getchar();
               
                printf("请输入要插入学生的第一科成绩:");
                scanf("%f",&students[num].score1);
                getchar();
               
                printf("请输入要插入学生的第二科成绩:");
                scanf("%f",&students[num].score2);
                getchar();
               
                printf("请输入要插入学生的第三科成绩:");
                scanf("%s",&students[num].score3);
                getchar();
               
                printf("请输入要插入学生的第四科成绩:");
                scanf("%f",&students[num].score4);
                getchar();
               
                printf("请输入要插入学生的第五科成绩:");
                scanf("%f",&students[num].score5);
                getchar();
               
                students[num].average=Ave(students[num]);
                num++;                                                     //插入了一个学生 全局变量加1
               
                printf("是否继续插入新的学生,是请输入y,否请输入n");
                if(getchar()=='n')
                {
                        break;
                }
        }
}








void Student_Mod()                                                    //学生信息修改的函数
{
        while(1)
        {
        char id[20];
        int p;
        printf("请输入要修改信息的学生的学号:");
        scanf("%s",&id);
        getchar();
        p=searchStudent_ID(id);
        if(p==-1)
        {
                printf("请检查你输入的学号是否有误\n");
        }
        else
        {
        printf("你要修改的学生的全部信息为:\n");
        Mod_message(p);
        printf("请输入你要修改的信息\n");
        printf("请输入要修改学生的学号:");
        scanf("%s",&students[p].Student_ID);
        getchar();
               
        printf("请输入要修改学生的姓名:");
        scanf("%s",&students[p].Name);
        getchar();
               
        printf("请输入要修改学生的第一科成绩:");
        scanf("%f",&students[p].score1);
        getchar();
               
        printf("请输入要修改学生的第二科成绩:");
        scanf("%f",&students[p].score2);
        getchar();
               
        printf("请输入要修改学生的第三科成绩:");
        scanf("%s",&students[p].score3);
        getchar();
               
        printf("请输入要修改学生的第四科成绩:");
        scanf("%f",&students[p].score4);
        getchar();
               
        printf("请输入要修改学生的第五科成绩:");
        scanf("%f",&students[p].score5);
        getchar();
               
        students[p].average=Ave(students[p]);
        }

               
        printf("该学生的新信息已保存,是否继续进行修改,是请输入y,否请输入n");
        if(getchar()=='n')
        {
                        break;
                }
       
        }
}



void Studentid_Delete()                                                            //按学生学号查找删除学生信息的函数
{
        while(1)
        {
                char id[20];
                int p;
                int i;
                printf("请输入要删除信息的学生的学号");
                scanf("%s",&id);
                getchar();
                p=searchStudent_ID(id);
                if(p==-1)
                {
                        printf("请检查你输入的学号是否有误\n");
                }
                printf("你要删除的学生的全部信息为:\n");
                Mod_message(p);
                printf("你真的要删除该学生的信息吗?删除了无法复原的哦,确认删除请输入y,否请输入n");
                if(getchar()=='y')
                {
                        for(i=p;i<num-1;i++)
                        {
                                students[i]=students[i+1];                                 //把后面的学生往前移,从而实现删除
                        }
                        num--;                                                         //删除了一个学生,全局变量减一
                 }
                 getchar();
                 printf("是否继续进行删除,是请输入y,否请输入n");
                 if(getchar()=='n')
                 {
                         break;
                  }
        }
}


void Studentname_Delete()                                                    //按学生姓名查找删除学生信息的函数
{
        while(1)
        {
            char name[20];
            int i;
            int p;
            printf("请输入要删除信息的学生的姓名");
            scanf("%s",&name);
            getchar();
            p=searchName(name);
            if(p==-1)
                {
                        printf("请检查你输入的姓名是否有误\n");
                }
                printf("你要删除的学生的全部信息为:\n");
                Mod_message(p);
                printf("你真的要删除该学生的信息吗?删除了无法复原的哦,确认删除请输入y,否请输入n");
                if(getchar()=='y')
                {
                        for(i=p;i<num-1;i++)
                        {
                                students[i]=students[i+1];                                 //把后面的学生往前移,从而实现删除
                        }
                        num--;                                                         //删除了一个学生,全局变量减一
                 }
                 getchar();
                 printf("是否继续进行删除,是请输入y,否请输入n");
                 if(getchar()=='n')
                 {
                         break;
                  }
            
       
        }
}



void Student_Massage()                                                  //显示所有的保存的成绩数据
{
        int i;
        printf("%20s20%20s%20s%20s%20s%20s%20s%20s%20s\n","学号","姓名","成绩","成绩","成绩","成绩","成绩","总成绩","平均成绩");
        printf("************************************************************************************************************************\n");
        for(i=0;i<num;i++){
                printf("%20s%20s%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f%20.2f\n",students[i].Student_ID,students[i].Name,students[i].score1,
                students[i].score2,students[i].score3,students[i].score4,students[i].score5,
                students[i].sumsc,students[i].average);
        }
}


void Student_sortscore1()                                         //使用冒泡法按学生第一门成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students[j].score1<students[j+1].score1)
                        {
                                temp=students[j].score1;
                                students[j].score1=students[j+1].score1;
                                students[j+1].score1=temp;
                        }
                }
        }
}



void Student_sortscore2()                                         //使用冒泡法按学生第二门成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students[j].score2<students[j+1].score2)
                        {
                                temp=students[j].score2;
                                students[j].score2=students[j+1].score2;
                                students[j+1].score2=temp;
                        }
                }
        }
}




void Student_sortscore3()                                         //使用冒泡法按学生第三门成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students[j].score3<students[j+1].score3)
                        {
                                temp=students[j].score3;
                                students[j].score3=students[j+1].score3;
                                students[j+1].score3=temp;
                        }
                }
        }
}





void Student_sortscore4()                                         //使用冒泡法按学生第四门成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students[j].score4<students[j+1].score4)
                        {
                                temp=students[j].score4;
                                students[j].score4=students[j+1].score4;
                                students[j+1].score4=temp;
                        }
                }
        }
}





void Student_sortscore5()                                         //使用冒泡法按学生第五门成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students[j].score5<students[j+1].score5)
                        {
                                temp=students[j].score5;
                                students[j].score5=students[j+1].score5;
                                students[j+1].score5=temp;
                        }
                }
        }
}



void Student_sortsumsc()                                         //使用冒泡法按学生总成绩由高到低排序的函数
{
        int i,j,temp;
        for(i=0;i<num;i++)
        {
                for(j=0;j<num-i;j++)
                {
                        if(students[j].sumsc<students[j+1].sumsc)
                        {
                                temp=students[j].sumsc;
                                students[j].sumsc=students[j+1].sumsc;
                                students[j+1].sumsc=temp;
                        }
                }
        }
}

void IO_ReadInfo()

{
     FILE *fp;
     int i;
     if ((fp=fopen("Database.txt","rb"))==NULL)
     {
         printf("不能打开文件!\n");
         return;
     }
     if (fread(&num,sizeof(int),1,fp)!=1)
     {
         num=-1;
     }
     else
     {
         for(i=0;i<num;i++)
         {
              fread(&students[i],sizeof(struct StudentInformation),1,fp);
         }
     }
     fclose(fp);
}



void IO_WriteInfo()

{
    FILE *fp;
    int i;
    if ((fp=fopen("Database.txt","wb"))==NULL)
    {
     printf("不能打开文件!\n");
     return;
     }
     if (fwrite(&num,sizeof(int),1,fp)!=1)
     {
        printf("写入文件错误!\n");
      }
     for (i=0;i<num;i++)
     {
         if (fwrite(&students[i],sizeof(struct StudentInformation),1,fp)!=1)
         {
              printf("写入文件错误!\n");
         }
     }   
     fclose(fp);
}





void main()
{
        int dd;
        IO_ReadInfo();
        while(1)
        {
                printf("\n");
        printf("********************************\n");
        printf("|                              |\n");
        printf("|      学生成绩管理系统        |\n");
        printf("*      1.修改学生成绩信息      *\n");
        printf("|      2.增加学生成绩信息      |\n");
        printf("*      3.删除学生成绩信息      *\n");
        printf("|      4.通过学号进行成绩查询  |\n");
        printf("*      5.通过姓名进行成绩查询  *\n");
        printf("|      6.查看第一科成绩的排名  |\n");
        printf("*      7.查看第二科成绩的排名  *\n");
        printf("|      8.查看第三科成绩的排名  |\n");
        printf("*      9.查看第四科成绩的排名  *\n");
        printf("|      10.查看第五科成绩的排名 |\n");
        printf("*      11.查看总成绩的排名     *\n");
        printf("|      12.退出学生管理系统     |\n");
        printf("********************************\n");                     
        printf("请选择1~13的功能                ");
        scanf("%d",&dd);
        getchar();
        switch(dd)
        {
                case 1:
                        Student_Mod();
                        break;
                case 2:
                        StudentInformation_Inesrt();
                        break;
                case 3:
                        Studentid_Delete();
                        break;
                case 4:
                        Studentsearch_id_score();
                        break;
                case 5:
                        Studentsearch_name_score();
                        break;
                case 6:
                        Student_sortscore1();
                        break;
                case 7:
                        Student_sortscore2();
                        break;
                 case 8:
                        Student_sortscore3();
                        break;
                case 9:
                        Student_sortscore4();
                        break;
                case 10:
                        Student_sortscore5();
                        break;
                case 11:
                        Student_sortsumsc();
                        break;
                case 12:
                            exit(0);
                                break;                     
                               
                }
                IO_WriteInfo();
        }
}







最佳答案
2020-11-10 18:48:13
SmallCatt 发表于 2020-11-10 18:35
求分数总和的函数呀  上面  sum


         函数是写了,可是,却没有任何地方调用,就是一个摆设。在你的代码中,根本就找不到为总分这个结构成员赋值的任何代码!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-9 18:39:01 | 显示全部楼层
        printf("请输入要修改学生的第三科成绩:");
        scanf("%s",&students[p].score3);                       // students[p].score3 难道是字符串?你确定这一行不需要修改?
        getchar();
               
        printf("请输入要修改学生的第四科成绩:");
        scanf("%f",&students[p].score4);
        getchar();
               
        printf("请输入要修改学生的第五科成绩:");
        scanf("%f",&students[p].score5);
        getchar();
               
        students[p].average=Ave(students[p]);

        在这些代码里,总分计算的代码何在?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-10 18:35:13 | 显示全部楼层
jackz007 发表于 2020-11-9 18:39
在这些代码里,总分计算的代码何在?

求分数总和的函数呀  上面  sum
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-10 18:48:13 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
SmallCatt 发表于 2020-11-10 18:35
求分数总和的函数呀  上面  sum


         函数是写了,可是,却没有任何地方调用,就是一个摆设。在你的代码中,根本就找不到为总分这个结构成员赋值的任何代码!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-10 19:23:56 | 显示全部楼层
jackz007 发表于 2020-11-10 18:48
函数是写了,可是,却没有任何地方调用,就是一个摆设。在你的代码中,根本就找不到为总分这 ...

明白了 忘记加上去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 00:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表