任务和代码:
学生成绩统计:
每位同学的信息学号、姓名、C、高数、英语成绩。定义一个学生成绩的结构体数组,其中的数据成员包括学号(char num[13])、姓名(name)、三门课的成绩(grade)、总分(score))
score.txt中是一些同学的学号、姓名、C++、高数、英语成绩,利用前面定义的结构体数组,读取文件score.txt中的数据,完成下面的应用:
- 从文件中读出数据,存放到结构体数组中;
- 求出每名同学的总分(可以在读入过程中“顺便”计算);
- 按总分降序排序并输出成绩单;
- 按学号升序排序并输出成绩单;
- 输出C语言不及格的同学姓名和C语言成绩;
- 有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。若符合得将的最后一名同学有重复(例如总分全为S),则总分为S的同学全得奖;
- 将程序用一个“菜单”组织起来,做成一个“学生成绩管理系统”之类的应用程序;
- 所有功能在main()函数中实现,并用多文件组织完成。
//head.h
#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
typedef struct {
char num[13];
char name[10];
int c;
int math;
int english;
int score;
}Student;
Student stu[500];
int stuNum;
void readData();
int chooseInMenu();
void sort_grade(Student [],int);
void sort_num(Student [],int);
void output(Student [],int);
void outputExcellent(Student [],int);
void outputImpassC(Student [],int);
#endif // HEAD_H_INCLUDED
//main.c
#include <stdio.h>
#include <stdlib.h>
#include "head.h"
int stuNum=0;
int main(){
int iChoice,i;
readData();
Student stud[stuNum]; //因为Student stu[]已经是一个全局变量了,故
for(i=0;i<stuNum;i++) //将按学号升序排序后的学生名单放入一个新定义结构体数组
stud[i]=stu[i];
printf("欢迎进入学生成绩管理系统!\n");
do{
iChoice = chooseInMenu(); //从菜单中获得功能代码
switch(iChoice){
case 1:
sort_grade(stu,stuNum); //按总分排序并输出成绩单
output(stu,stuNum);
break;
case 2:
sort_num(stud,stuNum); //按学号排序并输出成绩单
output(stud,stuNum);
break;
case 3:
outputExcellent(stu,stuNum); //输出获得奖学金同学的名单
break;
case 4:
outputImpassC(stu,stuNum); //输出C语言不及格的同学姓名和C语言成绩
break;
case 0:
printf("结束. \n");
}
}while(iChoice);
return 0;
}
//ch