该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
成绩处理系统
#include
#include
#include
struct single
{
char course[10];//结构体数组,课程名称
int score;
};
typedef struct single single;
struct Student
{
char num[20];
char name[20];
single s[4];//结构体数组的嵌套
int total;
double average;
};
typedef struct Student Student; void TotalAverage(Student *a,int n);
void Rank(Student *a,int n);
void Highscore(Student *a); int main()
{
int j=0,count=0;//count用来计算学生人数
char ch;
FILE *fp;
Student a[30]; printf("*************************欢迎进入学生成绩处理程序*************************\n");
fp=fopen("D:\\student.rec","wb");
if(!fp)
{
printf("file cannot be opened!");
exit(1);
}
printf("请输入四门课程名称:\n");
scanf("%8s%8s%8s%8s",&a[0].s[0].course,&a[0].s[1].course,&a[0].s[2].course,&a[0].s[3].course);//结构体数组的嵌套
printf("请输入学生信息:\n");
do
{
printf("下一个(y/n)?");
getchar();
ch=getchar();
getchar();
if(ch=='n')
break;
printf("学号:");
getchar();//一定要写
gets(a[j].num);
printf("姓名:");
gets(a[j].name);
printf("请输入四门课程成绩:\n");
scanf("%d%d%d%d",&a[j].s[0].score,&a[j].s[1].score,&a[j].s[2].score,&a[j].s[3].score);
count++;
fwrite(&a[j],sizeof(a[j]),1,fp);
j++;
}while(1);
printf("输入人数=%d\n",count);
TotalAverage(a,count);
Rank(a,count );
Highscore(a);
fclose(fp);
return 0;
}
void TotalAverage(Student *a,int n)//求每个学生的总分和平均分
{
int i;
printf("*************************学生基本信息如下*************************\n");
for(i=0;i
{
a[i].total=0;
a[i].average=0;
a[i].total=a[i].s[0].score+a[i].s[1].score+a[i].s[2].score+a[i].s[3].score;
a[i].average=(a[i].total)/4.0;
printf("%s %6s %d %d %d %d %.2f %d\n",a[i].num,a[i].name,a[i].s[0].score,a[i].s[1].score,a[i].s[2].score,a[i].s[3].score,a[i].average,a[i].total);
}
}
void Rank(Student *a,int n)//按学生总分由高到低排名
{
int i,k,index;
Student temp;
for(k=0;k
{
index=k;
for(i=k+1;i
if(a[i].total>a[index].total)
index=i;
if(index!=k)
{
temp=a[index];
a[index]=a[k];
a[k]=temp;
}
}
printf("********************学生成绩排名情况如下********************\n");
printf("学号 姓名 %6s%8s%8s%8s 平均分 总分\n",a[0].s[0].course,a[0].s[1].course,a[0].s[2].course,a[0].s[3].course);
for(i=0;i
printf("%s %6s %6d %d %d %d %.2f %d\n",a[i].num,a[i].name,a[i].s[0].score,a[i].s[1].score,a[i].s[2].score,a[i].s[3].score,a[i].average,a[i].total);
}
void Highscore(Student *a)//输出某门课程成绩在90分以上(含90分)且总分在前五名的学生
{
int i,k;
printf("请输入要查询的课程号i(0<=i<=3):");
scanf("%d",&i);
printf("********************查询结果如下********************\n");
for(k=0;k<5;k++)
{
if(a[k].s[i].score>=90)
printf("%s %6s %6d %d %d %d %.2f %d\n",a[i].num,a[i].name,a[i].s[0].score,a[i].s[1].score,a[i].s[2].score,a[i].s[3].score,a[i].average,a[i].total);
} }