答案:#include<stdio.h>
#include<Windows.h>/*后面关闭程序需要调用此头文件*/
#include<string.h>
#include<stdlib.h>#define MAX 1000/*定义学生的个数*/
typedef struct/*结构体*/
{
char number[20];/*定义学生的学号*/
char name[20];
int grade[4];/*定义学生的四门成绩,这里用的整型,也可以使用浮点型*/
float average;
int sum;
}info;int Input(info student[],int);/*成绩录入函数*/
void Count(info student[],int);/*平均分、总分计算函数*/
void Sort(info student[],int);/*成绩按总分排序*/
void Seek(info student[],int);/*成绩的筛选*/
int import(info student[]);/*成绩导入*/int main()
{
info student[MAX];/*student[N]用于交换数据用*/
int choice;/*程序的选项*/
int num;
num = import(student);
printf("\t\t学生成绩管理系统\n");
printf("===================================================\n");
printf("1、学生成绩录入\n");
printf("2、按总分排名(高->低)\n");
printf("3、输出课程号成绩在90分以上且总分排名前五的学生情况\n");
printf("0、退出程序\n");
printf("===================================================\n");
printf("\n请输入选项:");
choice=getchar();
while(choice!='0')
{
switch(choice)
{
case '1':
num = Input(student,num);
break;
case '2':
Sort(student,num);
break;
case '3':
Seek(student,num);
break;
default:
printf("请输入正确选项!");
break;
}
printf("\n请输入选项:");
fflush(stdin);/*必须清空键盘缓存区的回车,否则程序不能正常运行,后面也如此*/
choice=getchar();
}
exit(0);/*当选项为0时,退出程序,这个对应windows.h这个头文件*/
fflush(stdin);
getchar();
return 0;
}int import(info student[])
{
FILE *fp;
int i = 0;
if((fp = fopen("stu.dat","r")) == NULL)
{
printf("文件打开失败\n");
// exit(1);
}
while(fscanf(fp,"%s%s%d%d%d%d",student[i].average,student[i].name,student[i].grade[0],student[i].grade[1],student[i].grade[2],student[i].grade[3]) != EOF)
i++;
return i;
}int Input(info student[],int num)/*成绩录入函数*/
{
int n = num;
int j;
FILE *fp;
if((fp = fopen("stu.dat","ra+")) == NULL)
{
printf("打开文件失败\n");
exit(1);
}
printf("请输入学生的学号,姓名和四门课程的成绩(输入学号为0结束)\n");
while(1)
{
student[n].sum = 0;
scanf("%s",&student[n].number);
if(strcmp(student[n].number,"0") == 0)
break;
scanf("%s",student[n].name);
for(j=0;j<4;j++)
{
scanf("%d",&student[n].grade[j]);
student[n].sum += student[n].grade[j];
}
student[n].average = student[n].sum/4.0;
fprintf(fp,"%s %s %5d%5d%5d%5d%5.2f%d",student[n].number,student[n].name,student[n].grade[0],student[n].grade[1],student[n].grade[2],student[n].grade[3],student[n].average,student[n].sum);
n++;
}
fclose(fp);
return n;
}void Sort(info student[],int num)/*成绩按总分排序*/
{
int i,j;
info t;
for(i=0;i<num;i++)/*冒泡法排序*/
{
for(j=0;j<num-i-1;j++)
{
if(student[j].sum<student[j+1].sum)
{
t = student[j];
student[j] = student[j+1];
student[j+1] = t;
}
}
}
printf("总分排名(高->低)结果\n");
printf("======================================================\n");
printf("学号\t成绩1\t成绩2\t成绩3\t成绩4\t平均分\t总分\n");
for(i=0;i<num;i++)
{
printf("%s\t",student[i].number);
printf("%s\t",student[i].name);
for(j=0;j<4;j++)
{
printf("%d\t",student[i].grade[j]);
}
printf("%.2f\t%d",student[i].average,student[i].sum);
printf("\n");
}
printf("======================================================\n");
}void Seek(info student[],int num)/*成绩的筛选*/
{
char n[20];
int i,j,l,k=0;
info t;
for(i=0;i<num;i++)/*冒泡法排序*/
{
for(j=0;j<num-i-1;j++)
{
if(student[j].sum<student[j+1].sum)
{
t = student[j];
student[j] = student[j+1];
student[j+1] = t;
}
}
}
printf("请输入课程号(20110201,20110202,20110203,20110204):");/*课程号的选择*/
fflush(stdin);
gets(n);
fflush(stdin);
if(strcmp(n,"20110201")==0)
l=0;
else if(strcmp(n,"20110202")==0)
l=1;
else if(strcmp(n,"20110203")==0)
l=2;
else if(strcmp(n,"20110204")==0)
l=3;
printf("筛选结果\n");
printf("======================================================\n");
printf("学号\t成绩1\t成绩2\t成绩3\t成绩4\t平均分\t总分\n");
for(i=0;i<num;i++)
{
if(student[i].grade[l]>=90)
{
k++;
printf("%s\t",student[i].number);
printf("%s\t",student[i].name);
for(j=0;j<4;j++)
{
printf("%d\t",student[i].grade[j]);
}
printf("%.2f\t%d",student[i].average,student[i].sum);
printf("\n");
}
if(k>=5)
break;
}
printf("======================================================\n");
}
上一个:c语言和c++区别
下一个:计算机c语言所有命令