第1个回答 2009-09-10
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 100
struct student
{
char name[20];
char num[10];
int chinese;
int math;
int english;
}stu[LEN],duan[LEN];
void add11(void)/*添加记录*/
{
FILE *fp;
int i=0,n=0;
if((fp=fopen("stu.txt","a"))==NULL)
{
printf("ERROR");
exit(0);
}
printf("请输入你将添加的人数:");
scanf("%d",&n);
printf("姓名\t\t学号\t语文\t数学\t英语\n");
for(i=0;i<n;i++)
{
scanf("%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
}
for(i=0;i<n;i++)
{
fprintf(fp,"\n%s %s %d %d %d",stu[i].name,stu[i].num,stu[i].chinese,stu[i].math,stu[i].english);
/*fwrite(&stu[i],sizeof(struct student),1,fp);*/
/* if(strcmp(num,stu[n].num)==0)
{
printf("%s %s %d %d %d\n",stu[n].name,stu[n].num,stu[n].chinese,stu[n].math,stu[n].english);
system("pause");
break;
}*/
}
/*fflush(fp);*/
printf("添加成功!");
system("pause");
fclose(fp);
}
void del12(void)/*删除记录*/
{
FILE *fp;
char name[20];
int i=0,k=0,n=-1;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
printf("请输入说要删除的学生姓名或学号:");
scanf("%s",name);
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
if((strcmp(name,stu[i].name)==0)||!(strcmp(name,stu[i].num)))
n=i;
i++;
}
if(n==-1)
{printf("没有所要删除的记录\n");
system("pause");
}
else
{
fclose(fp);
fp=fopen("stu.txt","w");
/*fprintf(fp,"%s %s %d %d %d",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);*/
for(k=0;k<i;k++)
{ if(k==n)
continue;
fprintf(fp,"\n%s %s %d %d %d",stu[k].name,stu[k].num,stu[k].chinese,stu[k].math,stu[k].english);
}
fclose(fp);
printf("删除成功!\n");
system("pause");
}
}
void modify13(void)/*修改记录*/
{
FILE *fp;
char name[20];
char choose,waste;
int i=0,k=0,n=-1;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
printf("请输入你所要修改的学生姓名或学号:");
scanf("%s",name);
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
if((strcmp(name,stu[i].name)==0)||!(strcmp(name,stu[i].num)))
n=i;
i++;
}
if(n==-1)
{ waste=getchar();
printf("没有所要修改的记录\n");
printf("是否添加?(y/n)\n");
if((choose=getchar())=='y'||choose=='Y')
{waste=getchar();
add11();
}
else
return;
system("pause");
}
else
{
fclose(fp);
printf("姓名\t\t学号\t语文\t数学\t英语\n");
printf("%s\t\t%s\t%d\t%d\t%d\n",stu[n].name,stu[n].num,stu[n].chinese,stu[n].math,stu[n].english);
printf("输入具体信息\n");
scanf("%s%s%d%d%d",stu[n].name,stu[n].num,&stu[n].chinese,&stu[n].math,&stu[n].english);
fp=fopen("stu.txt","w");
fprintf(fp,"%s %s %d %d %d",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);
for(k=1;k<i;k++)
{ fprintf(fp,"\n%s %s %d %d %d",stu[k].name,stu[k].num,stu[k].chinese,stu[k].math,stu[k].english);
}
fclose(fp);
printf("修改成功\n");
system("pause");
}
}
void inquire_nam21(void)/*按姓名查找*/
{
FILE *fp;
char name[20];
int i=0,n=0;
if((fp=fopen("stu.txt","r"))==NULL)
{
printf("ERROR");
exit(0);
}
printf("请输入所要查询学生姓名:");
scanf("%s",name);
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
for(n=0;n<i;n++)
{
/*fprintf(fp,"%s %s %d %d %d",stu[i].name,stu[i].num,stu[i].chinese,stu[i].math,stu[i].english);*/
/*fwrite(&stu[i],sizeof(struct student),1,fp);*/
if(strcmp(name,stu[n].name)==0)
{
printf("姓名\t\t学号\t语文\t数学\t英语\n");
printf("%s\t\t%s\t%d\t%d\t%d\n",stu[n].name,stu[n].num,stu[n].chinese,stu[n].math,stu[n].english);
system("pause");
break;
}
}
if(n==i)
{
printf("没有你所要查询的学生\n");
system("pause");
}
fclose(fp);
}
void inquire_num22(void)/*按学号查找*/
{
FILE *fp;
char num[10];
int i=0,n=0;
if((fp=fopen("stu.txt","r"))==NULL)
{
printf("ERROR");
exit(0);
}
printf("请输入所要查询学生学号:");
scanf("%s",num);
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
for(n=0;n<i;n++)
{
/*fprintf(fp,"%s %s %d %d %d",stu[i].name,stu[i].num,stu[i].chinese,stu[i].math,stu[i].english);*/
/*fwrite(&stu[i],sizeof(struct student),1,fp);*/
if(strcmp(num,stu[n].num)==0)
{
printf("姓名\t\t学号\t语文\t数学\t英语\n");
printf("%s\t\t%s\t%d\t%d\t%d\n",stu[n].name,stu[n].num,stu[n].chinese,stu[n].math,stu[n].english);
system("pause");
break;
}
}
if(n==i)
{
printf("没有你所要查询的学生\n");
system("pause");
}
fclose(fp);
}
void situation31(void)/*分段查询*/
{
FILE *fp;
int exchange;
int i=0,k=0,n=0,choice,low,high;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
system("cls");
printf("\t\t\t**********选择课程***********\n\n");
printf("\t\t\t*1.**** ****语文***** *\n\n");
printf("\t\t\t*2.**** ****数学***** *\n\n");
printf("\t\t\t*3.**** ****英语***** *\n\n");
printf("\t\t\t*****************************\n\n");
while(scanf("%d",&choice),!(choice>=1&&choice<=3))
printf("输入有误,请重新输入1-3之间的数\n");
printf("分数段(如60-70):");
scanf("%d-%d",&low,&high);
if(low>high)/*确保从小到大*/
{
exchange=low;
low=high;
high=exchange;
}
switch(choice)
{
case 1:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
if(low<=stu[i].chinese&&stu[i].chinese<=high)
{
strcpy(duan[n].name,stu[i].name);
strcpy(duan[n].num,stu[i].num);
duan[n].chinese=stu[i].chinese;
duan[n].math=stu[i].math;
duan[n].english=stu[i].english;
n++;
}
}
fclose(fp);
break;
case 2:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
if(low<=stu[i].math&&high>=stu[i].math)
{
strcpy(duan[n].name,stu[i].name);
strcpy(duan[n].num,stu[i].num);
duan[n].chinese=stu[i].chinese;
duan[n].math=stu[i].math;
duan[n].english=stu[i].english;
n++;
}
}
fclose(fp);
break;
case 3:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
if(low<=stu[i].english&&high>=stu[i].english)
{
strcpy(duan[n].name,stu[i].name);
strcpy(duan[n].num,stu[i].num);
duan[n].chinese=stu[i].chinese;
duan[n].math=stu[i].math;
duan[n].english=stu[i].english;
n++;
}
}
fclose(fp);
break;
}
if(n==0)
{printf("没有所在范围的记录\n");
system("pause");
}
else
{
printf("姓名\t\t学号\t语文\t数学\t英语\n");
/*printf("%s\t\t%s\t%d\t%d\t%d\n",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);*/
for(k=0;k<n;k++)
{ printf("%s\t\t%s\t%d\t%d\t%d\n",duan[k].name,duan[k].num,duan[k].chinese,duan[k].math,duan[k].english);
}
system("pause");
}
}
void sit321(void)/*冒泡排序法*/
{
FILE *fp;
int i=0,k=0,j=0,n=0,choice;
int suanfa=0;
char name[20],num[10],chinese,math,english;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
system("cls");
printf("\t\t\t***********选择课程**********\n\n");
printf("\t\t\t*1.********按语文排序***** *\n\n");
printf("\t\t\t*2.********按数学排序***** *\n\n");
printf("\t\t\t*3.********按英语排序***** *\n\n");
printf("\t\t\t*****************************\n\n");
while(scanf("%d",&choice),!(choice>=1&&choice<=3))
printf("输入有误,请重新输入1-3之间的数\n");
switch(choice)
{
case 1:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i;n++)
for(j=0;j<i-1;j++)
if(stu[j].chinese<stu[j+1].chinese)
{
strcpy(name,stu[j].name);
strcpy(num,stu[j].num);
chinese=stu[j].chinese;
math=stu[j].math;
english=stu[j].english;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].num,stu[j+1].num);
stu[j].chinese=stu[j+1].chinese;
stu[j].math=stu[j+1].math;
stu[j].english=stu[j+1].english;
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
suanfa++;
}
break;
case 2:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i;n++)
for(j=0;j<i-1;j++)
if(stu[j].math<stu[j+1].math)
{
strcpy(name,stu[j].name);
strcpy(num,stu[j].num);
chinese=stu[j].chinese;
math=stu[j].math;
english=stu[j].english;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].num,stu[j+1].num);
stu[j].chinese=stu[j+1].chinese;
stu[j].math=stu[j+1].math;
stu[j].english=stu[j+1].english;
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
suanfa++;
}
break;
case 3:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i;n++)
for(j=0;j<i-1;j++)
if(stu[j].english<stu[j+1].english)
{
strcpy(name,stu[j].name);
strcpy(num,stu[j].num);
chinese=stu[j].chinese;
math=stu[j].math;
english=stu[j].english;
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].num,stu[j+1].num);
stu[j].chinese=stu[j+1].chinese;
stu[j].math=stu[j+1].math;
stu[j].english=stu[j+1].english;
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
suanfa++;
}
break;
}
printf("姓名\t\t学号\t语文\t数学\t英语\n");
/*printf("%s\t\t%s\t%d\t%d\t%d\n",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);*/
for(k=0;k<i;k++)
{ printf("%s\t\t%s\t%d\t%d\t%d\n",stu[k].name,stu[k].num,stu[k].chinese,stu[k].math,stu[k].english);
}
printf("此次排序移动数据次数-->>%d\n",suanfa);
system("pause");
fclose(fp);
}
void sit322(void)/*选择排序法*/
{
FILE *fp;
int i=0,k=0,j=0,n=0,choice;
int suanfa=0;
char name[20],num[10],chinese,math,english;
int flag;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
system("cls");
printf("\t\t\t***********选择课程**********\n\n");
printf("\t\t\t*1.********按语文排序***** *\n\n");
printf("\t\t\t*2.********按数学排序***** *\n\n");
printf("\t\t\t*3.********按英语排序***** *\n\n");
printf("\t\t\t*****************************\n\n");
while(scanf("%d",&choice),!(choice>=1&&choice<=3))
printf("输入有误,请重新输入1-3之间的数\n");
switch(choice)
{
case 1:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
flag=n;
for(j=n+1;j<i;j++)
if(stu[flag].chinese<stu[j].chinese)
{
flag=j;
}
if(flag!=n)
{
strcpy(name,stu[n].name);
strcpy(num,stu[n].num);
chinese=stu[n].chinese;
math=stu[n].math;
english=stu[n].english;
strcpy(stu[n].name,stu[flag].name);
strcpy(stu[n].num,stu[flag].num);
stu[n].chinese=stu[flag].chinese;
stu[n].math=stu[flag].math;
stu[n].english=stu[flag].english;
strcpy(stu[flag].name,name);
strcpy(stu[flag].num,num);
stu[flag].chinese=chinese;
stu[flag].math=math;
stu[flag].english=english;
suanfa++;
}
}
break;
case 2:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
flag=n;
for(j=n+1;j<i;j++)
if(stu[flag].math<stu[j].math)
{
flag=j;
}
if(flag!=n)
{
strcpy(name,stu[n].name);
strcpy(num,stu[n].num);
chinese=stu[n].chinese;
math=stu[n].math;
english=stu[n].english;
strcpy(stu[n].name,stu[flag].name);
strcpy(stu[n].num,stu[flag].num);
stu[n].chinese=stu[flag].chinese;
stu[n].math=stu[flag].math;
stu[n].english=stu[flag].english;
strcpy(stu[flag].name,name);
strcpy(stu[flag].num,num);
stu[flag].chinese=chinese;
stu[flag].math=math;
stu[flag].english=english;
suanfa++;
}
}
break;
case 3:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
flag=n;
for(j=n+1;j<i;j++)
if(stu[flag].english<stu[j].english)
{
flag=j;
}
if(flag!=n)
{
strcpy(name,stu[n].name);
strcpy(num,stu[n].num);
chinese=stu[n].chinese;
math=stu[n].math;
english=stu[n].english;
strcpy(stu[n].name,stu[flag].name);
strcpy(stu[n].num,stu[flag].num);
stu[n].chinese=stu[flag].chinese;
stu[n].math=stu[flag].math;
stu[n].english=stu[flag].english;
strcpy(stu[flag].name,name);
strcpy(stu[flag].num,num);
stu[flag].chinese=chinese;
stu[flag].math=math;
stu[flag].english=english;
suanfa++;
}
}
break;
}
printf("姓名\t\t学号\t语文\t数学\t英语\n");
/*printf("%s\t\t%s\t%d\t%d\t%d\n",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);*/
for(k=0;k<i;k++)
{ printf("%s\t\t%s\t%d\t%d\t%d\n",stu[k].name,stu[k].num,stu[k].chinese,stu[k].math,stu[k].english);
}
printf("此次排序移动数据次数-->>%d\n",suanfa);
system("pause");
fclose(fp);
}
void sit323(void)/*插入排序法*/
{
FILE *fp;
int i=0,k=0,j=0,n=0,choice;
int suanfa=0;
char name[20],num[10],chinese,math,english;
if((fp=fopen("stu.txt","r+"))==NULL)
{
printf("ERROR");
exit(1);
}
system("cls");
printf("\t\t\t***********选择课程**********\n\n");
printf("\t\t\t*1.********按语文排序***** *\n\n");
printf("\t\t\t*2.********按数学排序***** *\n\n");
printf("\t\t\t*3.********按英语排序***** *\n\n");
printf("\t\t\t*****************************\n\n");
while(scanf("%d",&choice),!(choice>=1&&choice<=3))
printf("输入有误,请重新输入1-3之间的数\n");
switch(choice)
{
case 1:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
strcpy(num,stu[n+1].num);strcpy(name,stu[n+1].name);chinese=stu[n+1].chinese;math=stu[n+1].math;english=stu[n+1].english;
for(j=n;j>=0;j--)
{if(chinese<=stu[j].chinese)
break;
strcpy(stu[j+1].name,stu[j].name);
strcpy(stu[j+1].num,stu[j].num);
stu[j+1].chinese=stu[j].chinese;
stu[j+1].math=stu[j].math;
stu[j+1].english=stu[j].english;
suanfa++;
}
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
}
break;
case 2:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
strcpy(num,stu[n+1].num);strcpy(name,stu[n+1].name);chinese=stu[n+1].chinese;math=stu[n+1].math;english=stu[n+1].english;
for(j=n;j>=0;j--)
{if(math<=stu[j].math)
break;
strcpy(stu[j+1].name,stu[j].name);
strcpy(stu[j+1].num,stu[j].num);
stu[j+1].chinese=stu[j].chinese;
stu[j+1].math=stu[j].math;
stu[j+1].english=stu[j].english;
}
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
suanfa++;
}
break;
case 3:
while(!feof(fp))
{
fscanf(fp,"%s%s%d%d%d",stu[i].name,stu[i].num,&stu[i].chinese,&stu[i].math,&stu[i].english);
i++;
}
fclose(fp);
for(n=0;n<i-1;n++)
{
strcpy(num,stu[n+1].num);strcpy(name,stu[n+1].name);chinese=stu[n+1].chinese;math=stu[n+1].math;english=stu[n+1].english;
for(j=n;j>=0;j--)
{if(english<=stu[j].english)
break;
strcpy(stu[j+1].name,stu[j].name);
strcpy(stu[j+1].num,stu[j].num);
stu[j+1].chinese=stu[j].chinese;
stu[j+1].math=stu[j].math;
stu[j+1].english=stu[j].english;
}
strcpy(stu[j+1].name,name);
strcpy(stu[j+1].num,num);
stu[j+1].chinese=chinese;
stu[j+1].math=math;
stu[j+1].english=english;
suanfa++;
}
break;
}
printf("姓名\t\t学号\t语文\t数学\t英语\n");
/*printf("%s\t\t%s\t%d\t%d\t%d\n",stu[0].name,stu[0].num,stu[0].chinese,stu[0].math,stu[0].english);*/
for(k=0;k<i;k++)
{ printf("%s\t\t%s\t%d\t%d\t%d\n",stu[k].name,stu[k].num,stu[k].chinese,stu[k].math,stu[k].english);
}
printf("此次排序移动数据次数-->>%d\n",suanfa);
system("pause");
fclose(fp);
}