在这个成绩管理系统内怎样在显示成绩的时候显示平均分,怎样对每个人的成绩按照总分排序,怎样显示成绩最高学生的信息。快

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<dos.h>

#include<string.h>

#define LEN sizeof(struct student)

#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n"

#define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum

float Felec,Fexpe,Frequ;

struct student/定义学生成绩结构体/

{

int num;/学号/

char name[15];/姓名/

double elec;/选修课/

double expe;/实验课/

double requ;/必修课/

double aver;/平均分/

double sum;/总分/

};

struct student stu[50];/定义结构体数组/

void in();/录入学生成绩信息/

void show();/显示学生信息/

void order();/按总分排序/

void del();/删除学生成绩信息/

void modify();/修改学生成绩信息/

void menu();/主菜单/

void insert();/插入学生信息/

void total();/计算总人数/

void search();/查找学生信息/

void sorte();/学生成绩排序/

void main()/主函数/

{

int n;

menu();

scanf("%d",&n);/输入选择功能的编号/

while(n)

{

switch(n)

{

case 1:

in();

break;

case 2:

search();

break;

case 3:

del();

break;

case 4:

modify();

break;

case 5:

insert();

break;

    case 6:

        sorte();

        break;

case 7:

order();

break;

case 8:

total();

break;

default:break;

}

getch();

menu();/执行完功能再次显示菜单界面/

scanf("%d",&n);

}

}

void in()/录入学生信息/

{

int i,m=0;/m是记录的条数/

char ch[2];

FILE *fp;/定义文件指针/

if((fp=fopen("data","ab+"))==NULL)/打开指定文件/

{

printf("不能打开!\n");

return;

}

while(!feof(fp))

{

if(fread(&stu[m] ,LEN,1,fp)==1)

m++;/统计当前记录条数/

}

fclose(fp);

if(m==0)

printf("无成绩!\n");

else

{

system("cls");

show();/调用show函数,显示原有信息/

}

if((fp=fopen("data","wb"))==NULL)

{

printf("不能打开\n");

return;

}

for(i=0;i<m;i++)

fwrite(&stu[i] ,LEN,1,fp);/向指定的磁盘文件写入信息/

printf("请输入(y/n):");

scanf("%s",ch);

while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/判断是否要录入新信息/

{

printf("学号:") ;

scanf("%d",&stu[m].num);/输入学生学号/

for(i=0;i<m;i++)

if(stu[i].num==stu[m].num)

{

printf("学号存在请按任意键继续!");

getch();

fclose(fp);

return;

}

printf("姓名:");

scanf("%s",stu[m].name);/输入学生姓名/

printf("选修课:");

scanf("%lf",&stu[m].elec);/输入选修课成绩/

printf("实验课:");

scanf("%lf",&stu[m].expe);/输入实验课成绩/

printf("必修课:");

scanf("%lf",&stu[m].requ);/输入必修课成绩/

stu[m].sum=stu[m].elec+stu[m].expe+stu[m].requ;/计算出总成绩/

if(fwrite(&stu[m],LEN,1,fp)!=1)/将新录入的信息写入指定的磁盘文件/

{

printf("无法保存!");

getch();

}

else

{

printf("%s 保存!\n",stu[m].name);

m++;

}

printf("是否继续(y/n):");/询问是否继续/

scanf("%s",ch);

}

fclose(fp);

printf("完成!\n");

}

void show()

{

FILE *fp;

int i,m=0;

fp=fopen("data","ab+");

while(!feof(fp))

{

if(fread(&stu[m] ,LEN,1,fp)==1)

m++;

}

fclose(fp);

printf("学号 姓名 选修课 实验课 必修课 总分 平均分\t\n");

for(i=0;i<m;i++)

{

printf(FORMAT,DATA);/将信息按指定格式打印/

}

}

void menu()/自定义函数实现菜单功能/

{

system("cls");

printf("\n\n\n\n\n");

printf("\t\t|---------------------成绩管理系统-------------------|\n");

printf("\t\t|\t 0. 退出 |\n");

printf("\t\t|\t 1. 录入成绩 |\n");

printf("\t\t|\t 2. 查询成绩 |\n");

printf("\t\t|\t 3. 删除成绩 |\n");

printf("\t\t|\t 4. 修改成绩 |\n");

printf("\t\t|\t 5. 插入成绩 |\n");

printf("\t\t|\t 6. 成绩排序 |\n");

printf("\t\t|\t 7. 成绩保存 |\n");

printf("\t\t|\t 8. 成绩统计 |\n");

printf("\t\t|----------------------------------------------------|\n\n");

printf("\t\t\t请输入数字(0-8):");

}

void order()/自定义排序函数/

{

FILE *fp;

struct student t;

int i=0,j=0,m=0;

if((fp=fopen("data","ab+"))==NULL)

{

printf("不能打开!\n");

return;

}

while(!feof(fp))

if(fread(&stu[m] ,LEN,1,fp)==1)

m++;

fclose(fp);

if(m==0)

{

printf("无成绩保存!\n");

return;

}

for(i=0;i<m-1;i++)

for(j=i+1;j<m;j++)/双重循环实现成绩比较并交换/

if(stu[i].sum<stu[j].sum)

{

t=stu[i];

stu[i]=stu[j];

stu[j]=t;

}

if((fp=fopen("data","wb"))==NULL)

{

printf("不能打开!\n");

return;

}

for(i=0;i<m;i++)/将重新排好序的内容重新写入指定的磁盘文件中/

if(fwrite(&stu[i] ,LEN,1,fp)!=1)

{

printf("%s 无法保存!\n");

getch();

}

fclose(fp);

printf("保存成功\n");

}

void del()/自定义删除函数/

{

FILE *fp;

int snum,i,j,m=0;

char ch[2];

if((fp=fopen("data","ab+"))==NULL)

{

printf("不能打开!\n");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

fclose(fp);

if(m==0)

{

printf("无成绩删除!\n");

return;

}

printf("请输入学号:");

scanf("%d",&snum);

for(i=0;i<m;i++)

if(snum==stu[i].num)

break;

if(i==m)

{

printf("找不到");

getchar();

return;

}

printf("找到学生,删除?(y/n)");

scanf("%s",ch);

if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/判断是否要进行删除/

{

for(j=i;j<m;j++)

stu[j]=stu[j+1];/将后一个记录移到前一个记录的位置/

m--;/记录的总个数减1/

printf("删除成功!\n");

}

if((fp=fopen("data","wb"))==NULL)

{

printf("不能打开!\n");

return;

}

for(j=0;j<m;j++)/将更改后的记录重新写入指定的磁盘文件中/

if(fwrite(&stu[j] ,LEN,1,fp)!=1)

{

printf("无法保存!\n");

getch();

}

fclose(fp);

}

void search()/自定义查找函数/

{

FILE *fp;

int snum,i,m=0;

char ch[2];

if((fp=fopen("data","ab+"))==NULL)

{

printf("不能打开!\n");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

fclose(fp);

if(m==0)

{

printf("无成绩查询!\n");

return;

}

printf("请输入学号:");

scanf("%d",&snum);

for(i=0;i<m;i++)

if(snum==stu[i].num)/查找输入的学号是否在记录中/

{

printf("查找到学生,显示?(y/n)");

scanf("%s",ch);

if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)

{

printf("学号 姓名 选修课 实验课 必修课 总分 平均分\t\n");

printf(FORMAT,DATA);/将查找出的结果按指定格式输出/

break;

}

else

return;

}

if(i==m)

printf("没有找到该学生!\n");/未找到要查找的信息/

}

void modify()/自定义修改函数/

{

FILE *fp;

int i,j,m=0,snum;

if((fp=fopen("data","ab+"))==NULL)

{

printf("不能打开!\n");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

if(m==0)

{

printf("无成绩修改!\n");

fclose(fp);

return;

}

printf("请输入你想修改的学生的学号!\n");

scanf("%d",&snum);

for(i=0;i<m;i++)

if(snum==stu[i].num)/检索记录中是否有要修改的信息/

break;

if(i<m)

{

printf("找到学生!你可以修改!\n");

printf("姓名:\n");

scanf("%s",stu[i].name);/输入名字/

printf("\n选修课:");

scanf("%lf",&stu[i].elec);/输入选修课成绩/

printf("\n实验课:");

scanf("%lf",&stu[i].expe);/输入实验课成绩/

printf("\n必修课:");

scanf("%lf",&stu[i].requ);/输入必修课成绩/

stu[i].sum=stu[i].elec+stu[i].expe+stu[i].requ;

}

else

{

printf("没有找到!");

getchar();

return;

}

if((fp=fopen("data","wb"))==NULL)

{

printf("不能打开!\n");

return;

}

for(j=0;j<m;j++)/将新修改的信息写入指定的磁盘文件中/

if(fwrite(&stu[j] ,LEN,1,fp)!=1)

{

printf("无法保存!");

getch();

}

fclose(fp);

}

void insert()/自定义插入函数/

{

FILE *fp;

int i,j,k,m=0,snum;

if((fp=fopen("data","ab+"))==NULL)

{

printf("不能打开!\n");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;

if(m==0)

{

printf("无成绩插入!\n");

fclose(fp);

return;

}

printf("请输入你想插入的位置!(输入学号)\n");

scanf("%d",&snum);/输入要插入的位置/

for(i=0;i<m;i++)

if(snum==stu[i].num)

break;

for(j=m-1;j>i;j--)

stu[j+1]=stu[j];/从最后一条记录开始均向后移一位/

printf("现在请输入新的信息.\n");

printf("学号:");

scanf("%d",&stu[i+1].num);

for(k=0;k<m;k++)

if(stu[k].num==stu[i+1].num&&k!=i+1)

{

printf("学号存在,请按任意键继续!");

getch();

fclose(fp);

return;

}

printf("姓名:\n");

scanf("%s",stu[i+1].name);

printf("\n选修课:");

scanf("%lf",&stu[i+1].elec);

printf("\n实验课:");

scanf("%lf",&stu[i+1].expe);

printf("\n必修课:");

scanf("%lf",&stu[i+1].requ);

stu[i+1].sum=stu[i+1].elec+stu[i+1].expe+stu[i+1].requ;

if((fp=fopen("data","wb"))==NULL)

{

printf("不能打开!\n");

return;

}

for(k=0;k<=m;k++)

if(fwrite(&stu[k] ,LEN,1,fp)!=1)/将修改后的记录写入磁盘文件中/

{

printf("无法保存!");

getch();

}

fclose(fp);

}

void sorte()

{

}

void total()

{

FILE *fp;

int m=0;

if((fp=fopen("data","ab+"))==NULL)

{

printf("不能打开!\n");

return;

}

while(!feof(fp))

if(fread(&stu[m],LEN,1,fp)==1)

m++;/统计记录个数即学生个数/

if(m==0)

{

printf("无成绩统计!\n");

fclose(fp);

return;

}

printf("班级学生数%d\n",m);/将统计的个数输出/

fclose(fp);

}

排序参考:


#include "stdio.h"

#define N 100
struct student{
    int id;
    char name[20];
    int kaoqun;
    int biaoxian;
    int zuoye;
    int biji;
    int sum;
}stud[N],t;

int main()
{
    int i,j;
    for(i=0;i<N;i++){
        printf("请输入第%d个学生信息\n",i+1);
        scanf("%d %s",&stud[i].id,&stud[i].name);
        fflush(stdin);
        scanf("%d %d %d %d",&stud[i].kaoqun,&stud[i].biaoxian,&stud[i].zuoye,&stud[i].biji);
        stud[i].sum = stud[i].kaoqun*0.3+stud[i].biaoxian*0.3+stud[i].zuoye*0.3+stud[i].biji*0.1;
    }
    
    //排序
    
    for (i = 0; i < N - 1; i++){
        for (j = 0; j < N - 1 - i; j++){ //按成绩对学生信息进行排序
            if (stud[j].sum > stud[j + 1].sum){ //整型数字的比较
                t = stud[j];
                stud[j] = stud[j + 1];
                stud[j + 1] = t;
            }
        }
    }
    //打印
    printf("学号\t姓名\t考勤\t表现\t作业\t笔记\t总分\t\n");
    for (i = 0; i < N; i++){
        printf("%d\t", stud[i].id);
        printf("%s\t", stud[i].name);
        printf("%d\t", stud[i].kaoqun);
        printf("%d\t", stud[i].biaoxian);
        printf("%d\t", stud[i].zuoye);
        printf("%d\t", stud[i].biji);
        printf("%d \n", stud[i].sum);
    }
    
    return 1;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632