C语言问题,假设有N个学生,学生信息包含姓名、学号、外语、数学、程序设计三门课程。请实现如下功能:

1.连续输入N个(自定义)学生信息 2.将这些学生信息保存成文件的形式 3.请查找程序设计分数为85分的学生信息 4.请计算学生的总分采用冒泡排序将学生信息按照从高到低的顺序输出显示。求大神解答,非常感谢!
请用结构体,必要请给出注释

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <windows.h>
 
typedef struct                     //结构体 
{
    char name[20];                 //学生姓名 
    char No[20];                   //学号 
    float en;                      //英语成绩 
    float math;                    //数学成绩 
    float program;                 //程序设计成绩 
    float sum;                     //总成绩 
} STUDENT;
 
STUDENT* s=NULL;                   //定义一个指向结构体的指针,即结构体动态数组
char work_dir[100]={'\0'};         //程序绝对路径
char data_filename[100]={'\0'};    //数据文件名称(绝对路径)
int count=0;                       //计数
 
int main()
{
    _getcwd(work_dir,100);               //获取完整路径
    strcpy(data_filename,work_dir);
    strcat(data_filename,"\\data.dat");  //拼接成数据文件名称
    printf("请输入一共有多少个学生 : ");
    scanf("%d",&count);
    if(count>0)                          //如果输入的学生数大于0,
    {                                    //则构建一个结构体数组
        s=(STUDENT*)malloc(sizeof(STUDENT)*count);
    }
    else                                 //如果学生数不大于0,则退出程序
    {
        printf("\n输入的数过小, 程序将退出!");
        _getch();
        return 0; 
    }
    int i;
    for(i=0;i<count;i++)                 //此for循环为输入count个学生数据,各数据间用空格分隔
    {
        printf("\n请输入第%d个(%d/%d)学生信息\n格式:姓名 学号 外语 数学 程序设计(中间用空格间隔):\n",i+1,i+1,count);
        fflush(stdin);
        scanf("%s %s %f %f %f",s[i].name,s[i].No,&s[i].en,&s[i].math,&s[i].program);
        s[i].sum=s[i].en+s[i].math+s[i].program;
    }
    ////写入数据文件---开始,(文件结构为ini文件,具体可打开该文件查看)//// 
    char ch[20]={'\0'};
    char value[20]={'\0'};
    sprintf(ch,"%d",count);
    WritePrivateProfileString("COUNT","count",ch,data_filename);   
    for(i=0;i<count;i++)
    {
        sprintf(ch,"%d",i+1);
        WritePrivateProfileString(ch,"姓名",s[i].name,data_filename);
        WritePrivateProfileString(ch,"学号",s[i].No,data_filename);
        sprintf(value,"%.1f",s[i].en);
        WritePrivateProfileString(ch,"外语",value,data_filename);
        sprintf(value,"%.1f",s[i].math);
        WritePrivateProfileString(ch,"数学",value,data_filename);
        sprintf(value,"%.1f",s[i].program);
        WritePrivateProfileString(ch,"程序设计",value,data_filename);
    }
    printf("\n\n信息已保存在%s文件中",data_filename);
    ////写入数据文件---结束///////////////////////////////////////////// 
    fflush(stdin);
    _getch();
    printf("\n\n程序设计成绩为85分的学生:");
    printf("\n\n姓名   学号   外语   数学   程序设计\n");
    int find=0;
    for(i=0;i<count;i++)     //此for循环为查找程序设计成绩为85分的学生并输出 
    {
        if(s[i].program==85)
        {
            find++;
            printf("\n%s    %s    %.1f   %.1f   %.1f",s[i].name,s[i].No,s[i].en,s[i].math,s[i].program);
        }
    }
    printf("\n\n共有%d个学生",find);
     
    ////排序---开始//// 
    STUDENT stu;
    int j;
    for(i=0;i<count-1;i++)
    {
        for(j=0;j<count-1-i;j++)
        {
            if(s[j].sum<s[j+1].sum)
            {
                stu=s[j];
                s[j]=s[j+1];
                s[j+1]=stu;
            }
        }
    }
    ////排序---结束//// 
    ////以下为输出排序后的数据//// 
    printf("\n\n全部学生按总分由高到低的顺序排列为:\n\n");
    printf("姓名   学号   外语   数学   程序设计   总成绩\n");
    for(i=0;i<count;i++)
    {
        printf("\n%s    %s    %.1f   %.1f   %.1f       %.1f",s[i].name,s[i].No,s[i].en,s[i].math,s[i].program,s[i].sum);
    }
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答