#include
#include
#include
#define maxNum 100
typedef struct stud
{
int number;
char name[20];
float math;
float english;
float chinese;
float average;
}StudentInfor;
void Menu();
void inputScore();
void Search();
void Insert();
void Delete();
void Count();
void Show();
int main()
{
int choice;
while(1)
{
Menu();
scanf("%d",&choice);
switch(choice)
{
case 1:inputScore();Show();
break;
case 2:Search();
break;
case 3:Insert();Show();
break;
case 4:Delete();Show();
break;
case 5:Count();
break;
case 0:return 0;
default:printf("\n\t输入错误,请重新选择!\n");
}
}
return 0;
}
void Menu()
{
printf("\t学生成绩管理系统\n");
printf("\t * 1.学生成绩输入\n");
printf("\t * 2.学生成绩查询\n");
printf("\t * 3.学生成绩插入\n");
printf("\t * 4.学生成绩删除\n");
printf("\t * 5.学生成绩统计\n");
printf("\t * 0.退出\n");
printf("请选择您要进行的操作:");
}
void inputScore()
{
char ch='y';
FILE * fp;
StudentInfor varStu;
if((fp=fopen("studentScore.dat","wb"))==NULL)
{
printf("文件无法打开!\n");
return;
}
printf("请输入学生的学号,姓名,数学成绩,语文成绩,英语成绩\n");
while(ch=='y')
{
scanf("%d",&varStu.number);
getchar();
scanf("%s",varStu.name);
scanf("%f%f%f",&varStu.math,&varStu.chinese,&varStu.english);
varStu.average=(varStu.math+varStu.chinese+varStu.english)/3;
fwrite(&varStu,sizeof(StudentInfor),1,fp);
printf("是否需要继续输入?(y/n)");
scanf("%c",&ch);
ch=(ch=='Y')?ch+32:ch;
}
fclose(fp);
}
void Search()
{
int number ,flag;
FILE*fp;
StudentInfor varStu;
char ch='y';
if((fp=fopen("studentScore.dat","rb"))==NULL)
{
printf("文件无法打开!\n");
return;
}
while(ch=='y')
{
flag=0;
printf("请输入您要查找的学生学号:");
scanf("%d",&number);
getchar();
rewind(fp);
while(!feof(fp))
{
fread(&varStu,sizeof(StudentInfor),1,fp);
if(number==varStu.number)
{
flag=1;
printf("学号 姓名 数学成绩 语文成绩 英语成绩 平均成绩:\n");
printf("%d %s %.1f ",varStu.number,varStu.name,varStu.math);
printf("%.1f %.1f %.1f\n",varStu.chinese,varStu.english,varStu.average);
break;
}
}
if (!flag)
{
printf("您查找的学生不存在!\n");
}
printf("您是否继续查询?(y/n)");
scanf("%c",&ch);
ch=(ch=='Y')?ch+32:ch;
}
fclose(fp);
}
void Insert()
{
FILE*fp;
StudentInfor varStu;
printf("请输入学生的学号,姓名,数学成绩,语文成绩,英语成绩\n");
scanf("%d",&varStu.number);
getchar();
scanf("%s",varStu.name);
scanf("%f%f",&varStu.math,&varStu.chinese,&varStu.english);
varStu.average=(varStu.chinese+varStu.math+varStu.english)/3;
if((fp=fopen("studentScore.dat","ab"))==NULL)
{
printf("文件无法打开!");
return;
}
fwrite(&varStu,sizeof(StudentInfor),1,fp);
fclose(fp);
}
void Delete()
{
StudentInfor varStu;
int number,exists,i;
FILE * fp,*fp1;
exists=0;
if((fp=fopen("studentScore.dat","rb"))==NULL)
{
printf("文件无法打开!");
return;
}
if((fp1=fopen("studentScore1.dat","wb"))==NULL)
{
printf("文件无法打开!");
return;
}
printf("请输入要删除的学生学号:");
scanf("%d",&number);
fread(&varStu,sizeof(varStu),1,fp);
while(!feof(fp))
{
if(varStu.number!=number)
{
fwrite(&varStu,sizeof(StudentInfor),1,fp1);
}
else
exists=1;
fread(&varStu,sizeof(varStu),1,fp);
}
fclose(fp);
fclose(fp1);
system("copy studentScore1.dat studentScore.dat");
if(exists)
{
printf("学号为的%d学生个人信息已删除成功!\n",number);
}
else
printf("您要删除的学生信息不存在!");
}
void Select(float score,int Num[])
{
int level;
level=(int)(score)/10;
switch(level)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5: Num[0]++;break;
case 6: Num[1]++;break;
case 7: Num[2]++;break;
case 8: Num[3]++;break;
case 9:
case 10: Num[4]++;break;
}
}
void Count()
{
FILE*fp;
int mathNum[5],chineseNum[5],englishNum[5],averageNum[5];
int i,level;
StudentInfor varStu;
for(i=0;i<5;i++)
{
mathNum[i]=0;
chineseNum[i]=0;
englishNum[i]=0;
averageNum[i]=0;
}
if((fp=fopen("studentScore.dat","rb"))==NULL)
{
printf("文件无法打开!");
return;
}
while(!feof(fp))
{
fread(&varStu,sizeof(varStu),1,fp);
Select(varStu.math,mathNum);
Select(varStu.chinese,chineseNum);
Select(varStu.english,englishNum);
Select(varStu.average,averageNum);
}
fclose(fp);
printf("统计结果如下:\n");
printf("===============================\n");
printf("数学成绩:\n");
printf("\t 在60分以下的人数是:%d\n",mathNum[0]);
printf("\t 在60分到70分之间的人数是:%d\n",mathNum[1]);
printf("\t 在70分到80分之间的人数是:%d\n",mathNum[2]);
printf("\t 在80分到90分之间的人数是:%d\n",mathNum[3]);
printf("\t 在90分以上的人数是:%d\n",mathNum[4]);
printf("===============================\n");
printf("语文成绩:\n");
printf("\t 在60分以下的人数是:%d\n",chineseNum[0]);
printf("\t 在60分到70分之间的人数是:%d\n",chineseNum[1]);
printf("\t 在70分到80分之间的人数是:%d\n",chineseNum[2]);
printf("\t 在80分到90分之间的人数是:%d\n",chineseNum[3]);
printf("\t 在90分以上的人数是:%d\n",chineseNum[4]);
printf("===============================\n");
printf("英语成绩:\n");
printf("\t 在60分以下的人数是:%d\n",englishNum[0]);
printf("\t 在60分到70分之间的人数是:%d\n",englishNum[1]);
printf("\t 在70分到80分之间的人数是:%d\n",englishNum[2]);
printf("\t 在80分到90分之间的人数是:%d\n",englishNum[3]);
printf("\t 在90分以上的人数是:%d\n",englishNum[4]);
printf("===============================\n");
printf("平均成绩:\n");
printf("\t 在60分以下的人数是:%d\n",averageNum[0]);
printf("\t 在60分到70分之间的人数是:%d\n",averageNum[1]);
printf("\t 在70分到80分之间的人数是:%d\n",averageNum[2]);
printf("\t 在80分到90分之间的人数是:%d\n",averageNum[3]);
printf("\t 在90分以上的人数是:%d\n",averageNum[4]);
}
void Show()
{
FILE*fp;
StudentInfor varStu;
if((fp=fopen("studentScore.dat","rb"))==NULL)
{
printf("文件无法打开!\n");
return;
}
printf("输出学生的所有信息\n");
printf("学号 姓名 数学 语文 英语 平均分\n");
fread(&varStu,sizeof(varStu),1,fp);
while(!feof(fp))
{
printf("%6d%8s%7.1f",varStu.number,varStu.name,varStu.math);
printf("%7.1f%7.1f%7.1f",varStu.chinese,varStu.english,varStu.average);
}
fclose(fp);
}
建议你把代码缩小一点,将问题核心提炼出来,这么长的代码谁有心情来看?
都是逛着玩儿的时候随便回答问题,,