txt:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#define len 26
#define num 3
struct student *head;
int max[num]={0},min[num]={100,100,100},sum[num]={0};
int count=0;
double average[num]={0};
char filename[20];
struct student
{
char name[20];
char xue[20];
int chinese;
int math;
int english;
struct student *next;
};
void Fpri()
{ char name[20];
char xue[20];
int chinese;
int math;
int english;
FILE *fpp;
if((fpp=fopen(filename,"r+"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
printf("\t姓名\t学号\t语文\t数学\t英语\n");
printf("--------------------------------------------------\n");
while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
{
printf("\t%s\t%s\t%d\t%d\t%d\n",name,xue,chinese,math,english);
}
fclose(fpp);
}
void Fsum()
{
sum[0]=sum[1]=sum[2]=0;
char name[20];
char xue[20];
int chinese;
int math;
int english;
FILE *fpp;
if((fpp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
{
sum[0]+=chinese;
sum[1]+=math;
sum[2]+=english;
}
fclose(fpp);
}
void Fmaxmin()
{
char name[20];
char xue[20];
int chinese;
int math;
int english;
FILE *fpp;
if((fpp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
{
if(chinese>max[0])
max[0]=chinese;
if(math>max[1])
max[1]=math;
if(english>max[2])
max[2]=english;
if(chinese<min[0])
min[0]=chinese;
if(math<min[1])
min[1]=math;
if(english<min[2])
min[2]=english;
}
printf("\t 最值有奖励!\n");
printf("\t语\t数\t英\n");
printf("最高分:\n");
printf("\t%d\t%d\t%d\n",max[0],max[1],max[2]);
printf("最低分:\n");
printf("\t%d\t%d\t%d\n",min[0],min[1],min[2]);
fclose(fpp);
}
void Average(int n)
{
average[0]=sum[0]*1./count;
average[1]=sum[1]*1./count;
average[2]=sum[2]*1./count;
printf("\t 各科平均分\n");
printf("\t语\t数\t英\n");
printf("----------------------------------------\n");
printf("\t%.2lf\t%.2lf\t%.2lf\n",average[0],average[1],average[2]);
}
void Fcount()
{
FILE *fpp;
char name[20];
char xue[20];
int chinese;
int math;
int english;
if((fpp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
{
count++;
}
fclose(fpp);
}
void Add()
{
struct student *pp;
FILE *fpp;
char name[20];
char xue[20];
int chinese;
int math;
int english;
if((fpp=fopen(filename,"a"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
printf("请输入该同学的姓名与学号:\n");
getchar();
scanf("%s %s",name,xue);
fputs(name,fpp);
fputc(' ',fpp);
fputs(xue,fpp);
printf("请分别输入该同学的语数英成绩:\n");
scanf("%d %d %d",&chinese,&math,&english);
fputc(' ',fpp);
fprintf(fpp,"%d %d %d",chinese,math,english);
fputc('\n',fpp);
fclose(fpp);
count++;
}
void Fcollect(int a,int b)
{
char name[20];
char xue[20];
int chinese;
int math;
int english;
FILE *fpp;
if((fpp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
{
if((chinese+math+english)>=a && (chinese+math+english)<=b)
printf("%s:%d\n",name,(chinese+math+english));
}
fclose(fpp);
}
int Ffind(char s[])
{
struct student *p5,*p1,*p2,*temp;
char name[20];
char xue[20];
int chinese;
int math;
int english;
FILE *fpp;
int n1=0;
int flag=0,fen;
char course,col,pan;
count=0;
if((fpp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
{
count++;
p1=(struct student *)malloc(sizeof(struct student));
n1++;
if(n1==1)
head=p1;
else
p2->next=p1;
strcpy(p1->name,name);
strcpy(p1->xue,xue);
p1->chinese=chinese;
p1->math=math;
p1->english=english;
p2=p1;
}
p1=(struct student *)malloc(sizeof(struct student));
p1->name[0]='0',p1->xue[0]='0';
p2->next=p1;
p1->next=NULL;
fclose(fpp);
if((fpp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fscanf(fpp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
{
if(strcmp(name,s)==0)
{
printf("语:%d\n数:%d\n英:%d\n",chinese,math,english);
flag=1;
break;
}
}
if(flag==1)
{
printf("已找到该同学\n");
}
else
{
printf("该同学不存在\n");
return 0;
}
printf("请输入是否要修改成绩:(y/n)\n");
getchar();
scanf("%c",&pan);
if(pan=='n')
return 0;
else if(pan=='y')
{
p5=head;
if((fpp=fopen(filename,"w"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
printf("请输入要改的科目的首字母:(c,m,e)\n");
getchar();
scanf("%c",&course);
printf("请输入该科目的正确数据:\n");
scanf("%d",&fen);
if(count==1)
{
if(course=='c')
{
p5->chinese=fen;
}
else if(course=='m')
{
p5->math=fen;
}
else if(course=='e')
{
p5->english=fen;
}
fputs(name,fpp);
fputc(' ',fpp);
fputs(xue,fpp);
fputc(' ',fpp);
fprintf(fpp,"%d %d %d",p5->chinese,p5->math,p5->english);
fputc('\n',fpp);
}
else
{
while(p5->next!=NULL)
{
if(strcmp(p5->name,s)==0 || strcmp(p5->xue,s)==0)
{
if(course=='c')
{
p5->chinese=fen;
}
else if(course=='m')
{
p5->math=fen;
}
else if(course=='e')
{
p5->english=fen;
}
break;
}
p5=p5->next;
}
p5=head;
while(p5->next!=NULL)
{
fputs(p5->name,fpp);
fputc(' ',fpp);
fputs(p5->xue,fpp);
fputc(' ',fpp);
fprintf(fpp,"%d %d %d",p5->chinese,p5->math,p5->english);
fputc('\n',fpp);
p5=p5->next;
}
}
}
else
{
printf("你输入的指令无效!\n");
return 0;
}
fclose(fpp);
p5=head;
for(p5=head;p5!=NULL;p5=temp)
{
temp=p5->next;
free(p5);
}
if(p5==NULL)
{
printf("内存释放成功!\n");
}
}
void comp(int n)
{
char name[20],xue[20];
int chinese;
int math;
int english;
int n1=0;
FILE *fp;
struct student *p1,*p2,*temp;
head=NULL;
if((fp=fopen(filename,"r"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fscanf(fp,"%s %s %d %d %d",name,xue,&chinese,&math,&english)==5)
{
p1=(struct student *)malloc(sizeof(struct student));
n1++;
if(n1==1)
head=p1;
else
{
p2->next=p1;
}
strcpy(p1->name,name);
strcpy(p1->xue,xue);
p1->chinese=chinese;
p1->math=math;
p1->english=english;
p2=p1;
}
p1=(struct student *)malloc(sizeof(struct student));
p1->name[0]='0',p1->xue[0]='0';
p2->next=p1;
p1->next=NULL;
fclose(fp);
struct student *p5,*p6;
FILE *fpp;
char _name[20];
char _xue[20];
int c,i;
for(i=1;i<n;i++)
{
p5=head;
while(p5->next!=NULL)
{
p6=p5;
p5=p5->next;
if(p5->name[0]=='0' && p5->xue[0]=='0')
break;
if((p6->chinese+p6->math+p6->english)>(p5->chinese+p5->math+p5->english))
{
strcpy(_name,p6->name);
strcpy(p6->name,p5->name);
strcpy(p5->name,_name);
strcpy(_xue,p6->xue);
strcpy(p6->xue,p5->xue);
strcpy(p5->xue,_xue);
c=p6->chinese;
p6->chinese=p5->chinese;
p5->chinese=c;
c=p6->math;
p6->math=p5->math;
p5->math=c;
c=p6->english;
p6->english=p5->english;
p5->english=c;
}
}
}
if((fpp=fopen(filename,"w"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
p5=head;
while(p5->next!=NULL)
{
fputs(p5->name,fpp);
fputc(' ',fpp);
fputs(p5->xue,fpp);
fputc(' ',fpp);
fprintf(fpp,"%d %d %d",p5->chinese,p5->math,p5->english);
fputc('\n',fpp);
p5=p5->next;
}
fclose(fpp);
p5=head;
for(p5=head;p5!=NULL;p5=temp)
{
temp=p5->next;
free(p5);
}
if(p5==NULL)
{
printf("内存释放成功!\n");
}
}
int menu_select()
{
char s;
int cn;
system("cls");
printf("\t*********************************\n");
printf("\t*\t 2B成绩系统\t\t*\n");
printf("\t*\t \t\t*\n");
printf("\t*\t1. 打印所有成绩\t\t*\n");
printf("\t*\t2. 排序输出成绩\t\t*\n");
printf("\t*\t3. 各科平均成绩\t\t*\n");
printf("\t*\t4. 各科最高最低\t\t*\n");
printf("\t*\t5. 添加一条记录\t\t*\n");
printf("\t*\t6. 录入所有成绩\t\t*\n");
printf("\t*\t7. 总分区间筛选\t\t*\n");
printf("\t*\t8. 查改单人成绩\t\t*\n");
printf("\t*\t9. 退出\t\t\t*\n");
printf("\t*********************************\n");
printf("请输入数字1-9进入相应功能:");
getchar(); //
do
{
s=getchar();
cn=(int)s-48;
}while(cn<0 || cn>9);
return cn;
}
void *creat()
{
char name[20],xue[20];
int n=0;
FILE *fp;
struct student *p1,*p2,*p,*temp;
head=NULL;
count=0;
if((fp=fopen(filename,"w"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
printf("请输入该学生的名字与学号(以0 0结束):\n");
getchar();
while(scanf("%s %s",name,xue)!=EOF)
{
p1=(struct student *)malloc(sizeof(struct student));
n++;
if(n==1)
head=p1;
else
{
p2->next=p1;
}
if(name[0]=='0' && xue[0]=='0')
{
strcpy(p1->name,name);
strcpy(p1->xue,xue);
break;
}
printf("请分别输入语数英成绩:\n");
strcpy(p1->name,name);
strcpy(p1->xue,xue);
fputs(name,fp);
fputc(' ',fp);
fputs(xue,fp);
scanf("%d %d %d",&p1->chinese,&p1->math,&p1->english);
fputc(' ',fp);
fprintf(fp,"%d %d %d",p1->chinese,p1->math,p1->english);
fputc('\n',fp);
count++;
while(getchar()!='\n')
continue;
p2=p1;
printf("请输入该学生的名字与学号(以0 0结束):\n");
}
p1->next=NULL;
printf("总记录数:%d\n",count);
fclose(fp);
p=head;
for(p=head;p!=NULL;p=temp)
{
temp=p->next;
free(p);
}
if(p==NULL)
{
printf("内存释放成功!\n");
}
}
void menu_pri()
{
int a,b;
char mou[20];
for(;;)
{
switch(menu_select())
{
case 1:
Fpri();
system("pause");
break;
case 2:
comp(count);
Fpri();
system("pause");
break;
case 3:
count=0;
Fcount();
Fsum();
Average(count);
system("pause");
break;
case 4:
Fmaxmin();
system("pause");
break;
case 5:
Add();
Fpri();
system("pause");
break;
case 6:
creat();
system("pause");
break;
case 7:
printf("请输入要选择成绩的区间:\n");
scanf("%d %d",&a,&b);
Fcollect(a,b);
system("pause");
break;
case 8:
printf("请输入该同学的名字:\n");
scanf("%s",mou);
Ffind(mou);
system("pause");
break;
case 9:
printf("Goodbye!\n");
exit(0);
}
}
}
int main()
{
printf("请输入保存成绩的文件名:\n");
scanf("%s",filename);
menu_pri();
return 0;
}
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#define len 26
#define num 3
struct student *head;
int max[num]={0},min[num]={100,100,100},sum[num]={0};
int count=0;
double average[num]={0};
char filename[20];
struct student
{
char name[20];
char xue[20];
int chinese;
int math;
int english;
struct student *next;
}stu;
void Fpri()
{ char name[20];
char xue[20];
int chinese;
int math;
int english;
FILE *fpp;
if((fpp=fopen(filename,"rb+"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
printf("\t姓名\t学号\t语文\t数学\t英语\n");
printf("--------------------------------------------------\n");
while(fread(name,sizeof(stu.name),1,fpp)==1
&& fread(xue,sizeof(stu.xue),1,fpp)==1
&& fread(&chinese,sizeof(int),1,fpp)==1
&& fread(&math,sizeof(int),1,fpp)==1
&& fread(&english,sizeof(int),1,fpp)==1)
{
printf("\t%s\t%s\t%d\t%d\t%d\n",name,xue,chinese,math,english);
}
fclose(fpp);
}
void Fsum()
{
sum[0]=sum[1]=sum[2]=0;
char name[20];
char xue[20];
int chinese;
int math;
int english;
FILE *fpp;
if((fpp=fopen(filename,"rb"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fread(name,sizeof(stu.name),1,fpp)==1
&& fread(xue,sizeof(stu.xue),1,fpp)==1
&& fread(&chinese,sizeof(int),1,fpp)==1
&& fread(&math,sizeof(int),1,fpp)==1
&& fread(&english,sizeof(int),1,fpp)==1)
{
sum[0]+=chinese;
sum[1]+=math;
sum[2]+=english;
}
fclose(fpp);
}
void Fmaxmin()
{
char name[20];
char xue[20];
int chinese;
int math;
int english;
FILE *fpp;
if((fpp=fopen(filename,"rb"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fread(name,sizeof(stu.name),1,fpp)==1
&& fread(xue,sizeof(stu.xue),1,fpp)==1
&& fread(&chinese,sizeof(int),1,fpp)==1
&& fread(&math,sizeof(int),1,fpp)==1
&& fread(&english,sizeof(int),1,fpp)==1)
{
if(chinese>max[0])
max[0]=chinese;
if(math>max[1])
max[1]=math;
if(english>max[2])
max[2]=english;
if(chinese<min[0])
min[0]=chinese;
if(math<min[1])
min[1]=math;
if(english<min[2])
min[2]=english;
}
printf("\t 最值有奖励!\n");
printf("\t语\t数\t英\n");
printf("最高分:\n");
printf("\t%d\t%d\t%d\n",max[0],max[1],max[2]);
printf("最低分:\n");
printf("\t%d\t%d\t%d\n",min[0],min[1],min[2]);
fclose(fpp);
}
void Average(int n)
{
average[0]=sum[0]*1./count;
average[1]=sum[1]*1./count;
average[2]=sum[2]*1./count;
printf("\t 各科平均分\n");
printf("\t语\t数\t英\n");
printf("----------------------------------------\n");
printf("\t%.2lf\t%.2lf\t%.2lf\n",average[0],average[1],average[2]);
}
void Fcount()
{
FILE *fpp;
char name[20];
char xue[20];
int chinese;
int math;
int english;
if((fpp=fopen(filename,"rb"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fread(name,sizeof(stu.name),1,fpp)==1
&& fread(xue,sizeof(stu.xue),1,fpp)==1
&& fread(&chinese,sizeof(int),1,fpp)==1
&& fread(&math,sizeof(int),1,fpp)==1
&& fread(&english,sizeof(int),1,fpp)==1)
{
count++;
}
fclose(fpp);
}
void Add()
{
struct student *pp;
FILE *fpp;
char name[20];
char xue[20];
int chinese;
int math;
int english;
if((fpp=fopen(filename,"ab"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
printf("请输入该同学的姓名与学号:\n");
getchar();
scanf("%s %s",name,xue);
printf("请分别输入该同学的语数英成绩:\n");
scanf("%d %d %d",&chinese,&math,&english);
fwrite(name,sizeof(stu.name),1,fpp);
fwrite(xue,sizeof(stu.xue),1,fpp);
fwrite(&chinese,sizeof(int),1,fpp);
fwrite(&math,sizeof(int),1,fpp);
fwrite(&english,sizeof(int),1,fpp);
fclose(fpp);
count++;
}
void Fcollect(int a,int b)
{
char name[20];
char xue[20];
int chinese;
int math;
int english;
FILE *fpp;
if((fpp=fopen(filename,"rb"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fread(name,sizeof(stu.name),1,fpp)==1
&& fread(xue,sizeof(stu.xue),1,fpp)==1
&& fread(&chinese,sizeof(int),1,fpp)==1
&& fread(&math,sizeof(int),1,fpp)==1
&& fread(&english,sizeof(int),1,fpp)==1)
{
if((chinese+math+english)>=a && (chinese+math+english)<=b)
printf("%s:%d\n",name,(chinese+math+english));
}
fclose(fpp);
}
int Ffind(char s[])
{
struct student *p5,*p1,*p2,*temp;
char name[20];
char xue[20];
int chinese;
int math;
int english;
FILE *fpp;
char pan;
int n1=0;
int flag=0,fen;
char course,col;
if((fpp=fopen(filename,"rb"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fread(name,sizeof(stu.name),1,fpp)==1
&& fread(xue,sizeof(stu.xue),1,fpp)==1
&& fread(&chinese,sizeof(int),1,fpp)==1
&& fread(&math,sizeof(int),1,fpp)==1
&& fread(&english,sizeof(int),1,fpp)==1)
{
p1=(struct student *)malloc(sizeof(struct student));
n1++;
if(n1==1)
head=p1;
else
{
p2->next=p1;
}
strcpy(p1->name,name);
strcpy(p1->xue,xue);
p1->chinese=chinese;
p1->math=math;
p1->english=english;
p2=p1;
}
p1=(struct student *)malloc(sizeof(struct student));
p1->name[0]='0',p1->xue[0]='0';
p2->next=p1;
p1->next=NULL;
fclose(fpp);
if((fpp=fopen(filename,"rb"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fread(name,sizeof(stu.name),1,fpp)==1
&& fread(xue,sizeof(stu.xue),1,fpp)==1
&& fread(&chinese,sizeof(int),1,fpp)==1
&& fread(&math,sizeof(int),1,fpp)==1
&& fread(&english,sizeof(int),1,fpp)==1)
{
if(strcmp(name,s)==0)
{
printf("语:%d\n数:%d\n英:%d\n",chinese,math,english);
flag=1;
break;
}
}
if(flag==1)
{
printf("已找到该同学\n");
}
else
{
printf("该同学不存在\n");
return 0;
}
printf("请输入是否要修改成绩:(y/n)\n");
getchar();
scanf("%c",&pan);
if(pan=='n')
return 0;
else if(pan=='y')
{
p5=head;
if((fpp=fopen(filename,"wb"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
printf("请输入要改的科目的首字母:(c,m,e)\n");
getchar();
scanf("%c",&course);
printf("请输入该科目的正确数据:\n");
scanf("%d",&fen);
if(count==1)
{
if(course=='c')
{
p5->chinese=fen;
}
else if(course=='m')
{
p5->math=fen;
}
else if(course=='e')
{
p5->english=fen;
}
fwrite(p5->name,sizeof(stu.name),1,fpp);
fwrite(p5->xue,sizeof(stu.xue),1,fpp);
fwrite(&p5->chinese,sizeof(int),1,fpp);
fwrite(&p5->math,sizeof(int),1,fpp);
fwrite(&p5->english,sizeof(int),1,fpp);
}
else
{
while(p5->next!=NULL)
{
if(strcmp(p5->name,s)==0 || strcmp(p5->xue,s)==0)
{
if(course=='c')
{
p5->chinese=fen;
}
else if(course=='m')
{
p5->math=fen;
}
else if(course=='e')
{
p5->english=fen;
}
break;
}
p5=p5->next;
}
p5=head;
while(p5->next!=NULL)
{
fwrite(p5->name,sizeof(stu.name),1,fpp);
fwrite(p5->xue,sizeof(stu.xue),1,fpp);
fwrite(&p5->chinese,sizeof(int),1,fpp);
fwrite(&p5->math,sizeof(int),1,fpp);
fwrite(&p5->english,sizeof(int),1,fpp);
p5=p5->next;
}
}
}
else
{
printf("你输入的指令无效!\n");
return 0;
}
fclose(fpp);
p5=head;
for(p5=head;p5!=NULL;p5=temp)
{
temp=p5->next;
free(p5);
}
if(p5==NULL)
{
printf("内存释放成功!\n");
}
}
void comp(int n)
{
char name[20],xue[20];
int chinese;
int math;
int english;
int n1=0;
FILE *fp;
struct student *p1,*p2,*temp;
head=NULL;
if((fp=fopen(filename,"rb"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while(fread(name,sizeof(stu.name),1,fp)==1
&& fread(xue,sizeof(stu.xue),1,fp)==1
&& fread(&chinese,sizeof(int),1,fp)==1
&& fread(&math,sizeof(int),1,fp)==1
&& fread(&english,sizeof(int),1,fp)==1)
{
p1=(struct student *)malloc(sizeof(struct student));
n1++;
if(n1==1)
head=p1;
else
{
p2->next=p1;
}
strcpy(p1->name,name);
strcpy(p1->xue,xue);
p1->chinese=chinese;
p1->math=math;
p1->english=english;
p2=p1;
}
p1=(struct student *)malloc(sizeof(struct student));
p1->name[0]='0',p1->xue[0]='0';
p2->next=p1;
p1->next=NULL;
fclose(fp);
struct student *p5,*p6;
FILE *fpp;
char _name[20];
char _xue[20];
int c,i;
for(i=1;i<n;i++)
{
p5=head;
while(p5->next!=NULL)
{
p6=p5;
p5=p5->next;
if(p5->name[0]=='0' && p5->xue[0]=='0')
break;
if((p6->chinese+p6->math+p6->english)>(p5->chinese+p5->math+p5->english))
{
strcpy(_name,p6->name);
strcpy(p6->name,p5->name);
strcpy(p5->name,_name);
strcpy(_xue,p6->xue);
strcpy(p6->xue,p5->xue);
strcpy(p5->xue,_xue);
c=p6->chinese;
p6->chinese=p5->chinese;
p5->chinese=c;
c=p6->math;
p6->math=p5->math;
p5->math=c;
c=p6->english;
p6->english=p5->english;
p5->english=c;
}
}
}
if((fpp=fopen(filename,"wb"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
p5=head;
while(p5->next!=NULL)
{
fwrite(p5->name,sizeof(stu.name),1,fp);
fwrite(p5->xue,sizeof(stu.xue),1,fp);
fwrite(&p5->chinese,sizeof(int),1,fp);
fwrite(&p5->math,sizeof(int),1,fp);
fwrite(&p5->english,sizeof(int),1,fp);
p5=p5->next;
}
fclose(fpp);
p5=head;
for(p5=head;p5!=NULL;p5=temp)
{
temp=p5->next;
free(p5);
}
if(p5==NULL)
{
printf("内存释放成功!\n");
}
}
int menu_select()
{
char s;
int cn;
system("cls");
printf("\t*********************************\n");
printf("\t*\t 2B成绩系统\t\t*\n");
printf("\t*\t \t\t*\n");
printf("\t*\t1. 打印所有成绩\t\t*\n");
printf("\t*\t2. 排序输出成绩\t\t*\n");
printf("\t*\t3. 各科平均成绩\t\t*\n");
printf("\t*\t4. 各科最高最低\t\t*\n");
printf("\t*\t5. 添加一条记录\t\t*\n");
printf("\t*\t6. 录入所有成绩\t\t*\n");
printf("\t*\t7. 总分区间筛选\t\t*\n");
printf("\t*\t8. 查改单人成绩\t\t*\n");
printf("\t*\t9. 退出\t\t\t*\n");
printf("\t*********************************\n");
printf("请输入数字1-9进入相应功能:");
getchar(); //
do
{
s=getchar();
cn=(int)s-48;
}while(cn<0 || cn>9);
return cn;
}
void *creat()
{
char name[20],xue[20];
int n=0;
FILE *fp;
struct student *p1,*p2,*p,*temp;
head=NULL;
if((fp=fopen(filename,"wb"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
printf("请输入该学生的名字与学号(以0 0结束):\n");
getchar();
while(scanf("%s %s",name,xue)!=EOF)
{
p1=(struct student *)malloc(sizeof(struct student));
n++;
if(n==1)
head=p1;
else
{
p2->next=p1;
}
if(name[0]=='0' && xue[0]=='0')
{
strcpy(p1->name,name);
strcpy(p1->xue,xue);
break;
}
printf("请分别输入语数英成绩:\n");
strcpy(p1->name,name);
strcpy(p1->xue,xue);
fwrite(p1->name,sizeof(stu.name),1,fp);
fwrite(p1->xue,sizeof(stu.xue),1,fp);
scanf("%d %d %d",&p1->chinese,&p1->math,&p1->english);
fwrite(&p1->chinese,sizeof(int),1,fp);
fwrite(&p1->math,sizeof(int),1,fp);
fwrite(&p1->english,sizeof(int),1,fp);
count++;
while(getchar()!='\n')
continue;
p2=p1;
printf("请输入该学生的名字与学号(以0 0结束):\n");
}
p1->next=NULL;
printf("总记录数:%d\n",count);
fclose(fp);
p=head;
for(p=head;p!=NULL;p=temp)
{
temp=p->next;
free(p);
}
if(p==NULL)
{
printf("内存释放成功!\n");
}
}
void menu_pri()
{
int a,b;
char mou[20];
for(;;)
{
switch(menu_select())
{
case 1:
Fpri();
system("pause");
break;
case 2:
count=0;
Fcount();
comp(count);
Fpri();
system("pause");
break;
case 3:
count=0;
Fcount();
Fsum();
Average(count);
system("pause");
break;
case 4:
Fmaxmin();
system("pause");
break;
case 5:
Add();
Fpri();
system("pause");
break;
case 6:
count=0;
creat();
system("pause");
break;
case 7:
printf("请输入要选择成绩的区间:\n");
scanf("%d %d",&a,&b);
Fcollect(a,b);
system("pause");
break;
case 8:
printf("请输入该同学的名字或学号:\n");
scanf("%s",mou);
Ffind(mou);
system("pause");
break;
case 9:
printf("Goodbye!\n");
exit(0);
}
}
}
int main()
{
printf("请输入保存成绩的文件名:\n");
scanf("%s",filename);
menu_pri();
return 0;
}