为什么进行到6哪里 不让我输入了 求解
#include <stdio.h>#include <stdlib.h>
#include <math.h>
#include <string.h>
#define SIZE 100
int n=0; //学生总人数
int max=0; //最高成绩
int min=0; //最低成绩
float aver=0.0; //平均成绩
int pass=0; //及格人数
float passRate=0.0; //及格率
float deviation=0.0; //标准差
struct student
{
char num[13]; //学号 最多12位
char name[10]; //姓名 最多4个汉字
int score[3]; //平时成绩、期末成绩、总评
};
void main()
{
char sele;
struct student stu[100]; //学生信息及C++成绩
int grade[10]={0};
//各分数段人数:0-9,10-19,20-29,30-39,40-49,50-59,60-69,70-79,80-89,90-100
void readScore(struct student stu[SIZE]); //读取学生平时成绩、期末成绩
void cacuScore(struct student stu[SIZE], int grade[5]); //计算学生总评成绩、各分数段人数等
void printScore(struct student stu[SIZE], int grade[5]);//打印学生成绩及试卷分析表
void draw(int grade[5]); //打印模拟直方图
void modiScore(struct student stu[SIZE]); //修改学生平时成绩、期末成绩
void deleScore(struct student stu[SIZE]); //删除学生信息
do
{
printf("\n 计算机05级《C++》学生成绩管理系统\n");
printf("┌───────────────────┐\n");
printf("│1:读取学生平时成绩、期末成绩 │\n");
printf("│2:计算学生总评成绩、各分数段人数等 │\n");
printf("│3:打印学生成绩及试卷分析表 │\n");
printf("│4:打印模拟直方图 │\n");
printf("│5:修改学生平时成绩、期末成绩 │\n");
printf("│6:删除学生信息 │\n");
printf("│0:退出 │\n");
printf("└───────────────────┘\n");
do
{
printf("请选择(0~6):");
fflush(stdin);
sele=getchar();
}while(sele<'0' || sele>'6');
switch(sele)
{
case '1': readScore(stu); break;
case '2': cacuScore(stu,grade); break;
case '3': printScore(stu,grade); break;
case '4': draw(grade); break;
case '5': modiScore(stu); break;
case '6': deleScore(stu); break;
case '0': break;
}
}while(sele != '0');
}
//draw函数如下:
void draw(int grade[10])
{
int i,j,max,k,temp,x;
char screen[22][44];
printf("\n模拟直方图:\n");
max=0;
for(i=0; i<=9; i++) //寻找分数段中人数最多的
{
if(grade[i]>max)
{
max=grade[i];
}
}
for(i=0; i<=9; i++)
{
grade[i] = (int) (20*grade[i]/max +0.5); //计算显示时应输出的*的个数
}
for(i=0; i<=21; i++) //先将输出的所有点清零
{
for(j=0; j<=41; j++)
{
screen[i][j]=0;
}
}
//画X轴
for(i=0; i<=41; i++)
{
screen[21][i]='-'; //X轴的所有点设置为符号 -
}
screen[21][42]='X';
//画Y轴
screen[0][0]='Y';
for(i=1; i<=21; i++)
{
screen[i][0]='|';
}
//将符合条件的点赋值为*
k=1;
for(x=1; x<=10; x++,k=k+4)
{
temp=grade[x-1];
if(temp!=0)
{
for(i=1; i<=temp; i++)
{
for(j=1; j<=4; j++)
{
screen[20-i+1][j+k]='*';
}
}
}
}
//输出直方图
for(i=0; i<=21; i++)
{
for(j=0; j<=42; j++)
{
if(screen[i][j] != 0)
{
putchar(screen[i][j]);
}
else
{
putchar(' ');
}
}
putchar('\n');
}
printf(" 0 10 20 30 40 50 60 70 80 90 100\n");
}
void readScore(struct student stu[SIZE]) //读取学生平时成绩、期末成绩
{
FILE *p;
int i;
if((p=fopen("homework.txt","rb"))==NULL)
{
printf("此文件无法打开\n");
exit(0);
}
else
{
i=0;
do
{
fscanf(p,"%s%s%d%d%d",stu[i].num,stu[i].name,&(stu[i].score[0]),&(stu[i].score[1]),&(stu[i].score[2]));
// printf("%s\t%s\t%d\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
i++;
n++;
}while(!feof(p));
printf("成绩读取完毕,可以计算成绩了。");
}
fclose(p);
return ;
}
void cacuScore(struct student stu[SIZE], int grade[10]) //计算学生总评成绩、各分数段人数等
{
int i;
float sum=0.0;
float z=0.0;
max=min=stu[0].score[1];
for(i=0;i<n;i++)
{
sum+=stu[i].score[1];
if(stu[i].score[1]>max) max=stu[i].score[1];
if(stu[i].score[1]<min) min=stu[i].score[1];
if(stu[i].score[1]<10) grade[0]++;
else if(stu[i].score[1]<20) grade[1]++;
else if(stu[i].score[1]<30) grade[2]++;
else if(stu[i].score[1]<40) grade[3]++;
else if(stu[i].score[1]<50) grade[4]++;
else if(stu[i].score[1]<60) grade[5]++;
else if(stu[i].score[1]<70) grade[6]++;
else if(stu[i].score[1]<80) grade[7]++;
else if(stu[i].score[1]<90) grade[8]++;
else grade[9]++;
if(stu[i].score[1]>=60) pass++;
}
aver=(float)sum/n;
passRate=(float)(pass*1.0/n)*100;
for(i=0;i<n;i++)
{
z=z+(stu[i].score[1]-aver)*(stu[i].score[1]-aver);
}
deviation=(float)sqrt(z/n);
printf("成绩计算完毕,并将学生成绩信息保存到“homework.txt”中了,可以打印成绩了!\n");
return;
}
void printScore(struct student stu[SIZE], int grade[5])//打印学生成绩及试卷分析表
{
int i;
printf("打印学生成绩信息:");
printf(" 学 号 姓 名 平时 期末 总评\n");
for(i=0;i<n;i++)
{
printf("%s\t%s\t%d\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
printf(" 各分数段人数:\n");
printf("分数段 人数\n");
printf("0~9 \t%d\n",grade[0]);
printf("10~19\t%d\n",grade[1]);
printf("20~29\t%d\n",grade[2]);
printf("30~39\t%d\n",grade[3]);
printf("40~49\t%d\n",grade[4]);
printf("50~59\t%d\n",grade[5]);
printf("60~69\t%d\n",grade[6]);
printf("70~79\t%d\n",grade[7]);
printf("80~89\t%d\n",grade[8]);
printf("90-100\t%d\n",grade[9]);
printf("期末考试总人数:%d\n",n);
printf("期末考试卷面最高分:%d\n",max);
printf("期末考试卷面最低分:%d\n",min);
printf("期末考试卷面平均分:%.2f\n",aver);
printf("期末考试卷面及格率:%.2f\n",passRate);
printf("期末考试卷面成绩标准差:%.2f\n",deviation);
return ;
}
void modiScore(struct student stu[SIZE]) //修改学生平时成绩、期末成绩
{
int i,a,b;
FILE *p;
char num1[13]; //学号 最多12位
if((p=fopen("homework.txt","rb"))==NULL)
{
printf("can`t open the file\n");
exit(1);
};
printf("请输入需要修改成绩的学生学号:");
scanf("%s",num1);
for(i=0;i<n;i++)
{
if(strcmp(stu[i].num,num1)==0) break;
}
if(i==n) printf("没有找到该学生的信息!\n");
else
{
printf("请输入学生 安培 新的平时成绩、期末成绩,以空格间隔:\n");
scanf("%d%d",&a,&b);
stu[i].score[0]=a;
stu[i].score[1]=b;
stu[i].score[2]=a*0.2+b*0.8;
fclose(p);
if((p=fopen("homework.txt","w+"))==NULL)
{
printf("can`t open the file\n");
exit(1);
}
i=0;
do
{
// fscanf(p,"%s%s%d%d%d",stu[i].num,stu[i].name,&(stu[i].score[0]),&(stu[i].score[1]),&(stu[i].score[2]));
fprintf(p,"%s %s %d %d %d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
i++;
}while(i<n);
printf("学生信息修改成功,请重新进行成绩计算!\n");
}
fclose(p);
}
void deleScore(struct student stu[SIZE]) //删除学生信息
{
int i,b;
char z;
FILE *p;
char num1[13]; //学号 最多12位
if((p=fopen("homework.txt","rb"))==NULL)
{
printf("can`t open the file\n");
exit(1);
};
printf("请输入需要删除信息的学生学号:");
scanf("%s",num1);
for(i=0;i<n;i++)
{
if(strcmp(stu[i].num,num1)==0) break;
}
if(i==n) printf("没有找到该学生的信息!\n");
else
{
printf("确实要删除 %s 的信息吗(Y/N)?:",stu[i].name);
scanf("%c",&z);
if(z=='Y')
{
printf("开始删除学生信息......\n");
for(;i<n-1;i++)
{
stu[i]=stu[i+1];
}
n=n-1;
fclose(p);
if((p=fopen("homework.txt","w+"))==NULL)
{
printf("can`t open the file\n");
exit(1);
}
i=0;
do
{
// fscanf(p,"%s%s%d%d%d",stu[i].num,stu[i].name,&(stu[i].score[0]),&(stu[i].score[1]),&(stu[i].score[2]));
fprintf(p,"%s %s %d %d %d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
i++;
}while(i<n-1);
fprintf(p,"%s %s %d %d %d",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
printf("学生信息删除成功,请重新进行成绩计算!\n");
}
}
fclose(p);
}