学生成绩统计系统_B10040101

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


#include
#include
#include
struct Node
{
int num;
char studentnum[20];
char name[20];
char Class[20];
char A[5];//平时成绩
char B[5];//期中成绩
char C[5];//期末成绩
char D[10];//总评成绩
int grade;
};

typedef struct Node Node;


void main()
{
// system("color 3E");
int l,index,w;
int m;
int count=0;
int i;
int j=0,o=0;
int x;
int k,choise;
int num=0;
int y=0;
double sum=0,aver;
FILE *fp,*fp1;
int temp=0;
int t,s;
double a=0,b=0,c=0,d=0,e=0;
double rate_a,rate_b,rate_c,rate_d,rate_e;
double rate_pass;
Node st;
Node stu[50];

printf("*****************************************************\n");
printf("*****************************************************\n");
printf("## 欢迎使用学生成绩统计系统! ##\n");
printf("## 是否从文件中读数据? 1 是 ;0 否 ##\n");
printf("*****************************************************\n");
printf("*****************************************************\n");
scanf("%d",&x);
switch(x)
{
case 1:
fp=fopen("studentdata.txt","a+");
if(fp==NULL)
{
printf("can not open the file !");
exit(1);
}
do
{
fscanf(fp,"%d%s",&(stu[y].num),&(stu[y].studentnum));
i=0;
//do
//{
// stu[y].name[i++]=fgetc(fp);

//}while(fget(fp)!='B');//写报告时用到
while((stu[y].name[i++]=fgetc(fp))!='B');//读取文件 遇到B结束
count ++;
ungetc(stu[y].name[--i],fp); //将B退回到字节中
stu[y].name[i]=0;
fscanf(fp,"%s%s%s%s%s",&(stu[y].Class),&(stu[y].A),&(stu[y].B),&(stu[y].C),&(stu[y].D));
fprintf(stdout,"%d %s %s %s %s %s %s %s\n",stu[y].num,stu[y].studentnum,stu[y].name,stu[y].Class,stu[y].A,stu[y].B,stu[y].C,stu[y].D);
stu[y].grade=atoi(stu[y].D);
if(stu[y].grade>0&&stu[y].grade<=100)
num++;
y++;
}while(!feof(fp));
fclose(fp);
break;
case 0:
return;

}

for(i=0;i{
if(stu[i].grade>0&&stu[i].grade<=59)
a++;
else if(stu[i].grade>=60&&stu[i].grade<70)
b++;
else if(stu[i].grade>=70&&stu[i].grade<80)
c++;
else if(stu[i].grade>=80&&stu[i].grade<90)
d++;
else
e++;
}
for(l=0;l{
index=l;
for(i=l+1;iif(stu[i].grade>stu[index].grade)
index=i;
if(index!=l)
{
st=stu[index];
stu[index]=stu[l];
stu[l]=st;
}
}

do
{

printf("****************************************************\n");
printf("****************************************************\n");
printf("### 1 分数段统计 ###\n");
printf("### 2 成绩分布图 ###\n");
printf("### 3 旷考人数

###\n");
printf("### 4 及格率 ###\n");
printf("### 5 平均分 ###\n");
printf("### 6 最高分 ###\n");
printf("### 7 最低分 ###\n");
printf("### 8 总分排续 ###\n");
printf("### 9 所有信息保存在文件里 ###\n");
printf("### 0 退出系统 ###\n");
printf("****************************************************\n");
printf("****************************************************\n");
scanf("%d",&choise);
switch(choise)
{
case 1:

do
{
printf("****************************************************\n");
printf("****************************************************\n");
printf("### 1 0--59 ###\n");
printf("### 2 60--69 ###\n");
printf("### 3 70--79 ###\n");
printf("### 4 80--89 ###\n");
printf("### 5 90--100 ###\n");
printf("### 0 返回 ###\n");
printf("****************************************************\n");
printf("****************************************************\n");
scanf("%d",&k);
switch(k)
{
case 1:
printf("0--59 %g 人\n",a);
rate_a=a/num;
printf("0--59所占比例 %g \n",rate_a);
break;
case 2:
printf("60--69 %g 人\n",b);
rate_b=b/num;
printf("60--69所占比例 %g \n",rate_b);
break;
case 3:
printf("70--79 %g 人\n",c);
rate_c=c/num;
printf("70--79所占比例 %g \n",rate_c);
break;
case 4:
printf("80--89 %g 人\n",d);
rate_d=d/num;
printf("80--89所占比例 %g \n",rate_d);
break;
case 5:
printf("90--100 %g 人\n",e);
rate_e=e/num;
printf("90--100所占比例 %g \n",rate_e);
break;



}

}while(k);
break;
case 2:
printf("90-100|");
for(i=0;iprintf("# ");
printf("\n");
printf(" 80-89|");
for(i=0;iprintf("# ");
printf("\n");
printf(" 70-79|");
for(i=0;iprintf("# ");
printf("\n");
printf(" 60-69|");
for(i=0;iprintf("# ");
printf("\n");
printf(" 0-59|");
for(i=0;iprintf("# ");
printf("\n");
printf("\n");
break;
case 3:
m=y-num;
printf("旷考人数:%d",m);
printf("\n");
break;
case 4:
rate_pass=(b+c+d+e)/num;
printf("及格率%g \n",rate_pass);
printf("\n");
break;
case 5:

for(i=0;i{

sum=sum+stu[i].grade;
}
aver=sum/num;
printf("平均分%g \n",aver);
printf("\n");
break;
case 6:

t=stu[0].grade;
for(i=0;i{
if(stu[i].grade>t)
t=stu[i].grade;
}
printf("最高分%d \n",t);
printf("\n");
break;
case 7:
s=stu[0].grade;
for(i=0;i{
if(stu[i].grades=stu[i].grade;
}
printf("最低分%d\n",s);
break;


case 8:
printf("总分由高到低排列为:\n");
for(i=0;iprintf("%d %s %s %s %s %s %s %s\n",stu[i].num,stu[i].studentnum,stu[i].name,stu[i].Class,stu[i].A,stu[i].B,stu[i].C,stu[i].D);
printf("\n");
break;
case 9:
fp1=fopen("student.txt","w");
if(!fp1)
{
printf("file cannot be opened!\n");
exit(1);
}
fprintf(fp1,"总分由高到低排列为:\n");
for(i=0;i{ fprintf(fp1,"%d %s %s %s %s %s %s %s\n",stu[i].num,stu[i].studentnum,stu[i].name,stu[i].Class,stu[i].A,stu[i].B,stu[i].C,stu[i].D);
}
fprintf(fp1,"旷考人数:%d\n",m);
fprintf(fp1,"0--59 %g 人\n",a);
rate_a=a/num;
fprintf(fp1,"0--59所占比例 %g \n",rate_a);
fprintf(fp1,"60--69 %g 人\n",b);
rate_b=b/num;
fprintf(fp1,"60--69所占比例 %g \n",rate_b);
fprintf(fp1,"70--79 %g 人\n",c);
rate_c=c/num;
fprintf(fp1,"70--79所占比例 %g \n",rate_c);
fprintf(fp1,"80--89 %g 人\n",d);
rate_d=d/num;
fprintf(fp1,"80--89所占比例 %g \n",rate_d);
fprintf(fp1,"90--100 %g 人\n",e);
rate_e=e/num;
fprintf(fp1,"90--100所占比例 %g \n",rate_e);
fprintf(fp1,"90-100|");
for(i=0;ifprintf(fp1,"# ");
fprintf(fp1,"\n");
fprintf(fp1," 80-89|");
for(i=0;ifprintf(fp1,"# ");
fprintf(fp1,"\n");
fprintf(fp1," 70-79|");
for(i=0;ifprintf(fp1,"# ");
fprintf(fp1,"\n");
fprintf(fp1," 60-69|");
for(i=0;ifprintf(fp1,"# ");
fprintf(fp1,"\n");
fprintf(fp1," 0-59|");
for(i=0;ifprintf(fp1,"# ");
fprintf(fp1,"\n");
fprintf(fp1,"\n");
fprintf(fp1,"及格率: %g \n",rate_pass);
fprintf(fp1,"平均分: %g \n",aver);
fprintf(fp1,"最高分: %d \n",t);
fprintf(fp1,"最低分%d: \n",s);
fclose(fp1);

default: break;

}
}while(choise);


}

相关文档
最新文档