程序源代码:
#include<string.h>
#include<stdio.h>
#define N 50
struct student
{char num[11];
char name[20];
int score[3];
float ave;
}stu[N];
save(int n)
{FILE *fp;
int i;
if((fp=fopen("score.txt","wb"))==NULL)
{printf("/nCannot open file/n");
return NULL;
}
for(i=0;i<n;i++)
if(stu[i].ave!=0)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error/n");
fclose(fp);
}
load()
{FILE *fp;
int i;
if((fp=fopen("score.txt","rb"))==NULL)
{printf("/nCannot open file/n");
return NULL;
}
for(i=0;!feof(fp);i++)
fread(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
return(i-1);
}
void printf_back()
{int k,w;
printf("/n/n/tSuccessful. ^_^/n/n");
printf("What do you want to do? /n/n/t1).Browse all now/t2).Back: [ ]/b/b");
scanf("%d",&w);
if(w==1) browse();
else menu();
}
void printf_face()
{printf("/n/tNO. name score1 score2 score3 average/n");
}
average(int i)
{int j,sum;
for(sum=0,j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].ave=sum/3.0;
}
no_input(int i,int n)
{int j,k,w1;
do
{w1=0;
printf("NO.:");
scanf("%s",stu[i].num);
for(j=0;stu[i].num[j]!='/0';j++)
if(stu[i].num[j]<'0'||stu[i].num[j]>'9')
{puts("Input error! Only be made up of (0-9).Please reinput!/n");
w1=1;break;
}
if(w1!=1)
for(k=0;k<n;k++)
if(k!=i&&strcmp(stu[k].num,stu[i].num)==0)
{puts("This record is exist. please reinput!/n");
w1=1;break;
}
}
while(w1==1);
}
score_input(int i)
{int j;
for(j=0;j<3;j++)
{printf("score %d:",j+1);
scanf("%d",&stu[i].score[j]);
}
}
input(int i)
{
no_input(i,i);
printf("name:");
scanf("%s",stu[i].name);
score_input(i);
average(i);
}
printf_one(int i)
{int j;
printf("%11s %-17s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%9d",stu[i].score[j]);
printf("%9.2f/n",stu[i].ave);
}
void puts___()
{puts("/n--------------------------------------------------------------------");
}
modify_data(int i,int n)
{int c,w1;
do
{puts("/nmodify by =>/n/n 1).NO. 2.name 3).score1 4).score2/n 5).score3 6).all score 7).all data 8).cancel and back");
printf("Which you needed?: [ ]/b/b");
scanf("%d",&c);
if(c>8||c<1)
{puts("/nChoice error! Please again!");
getchar();
}
}
while(c>8||c<1);
do
{switch(c)
{case 1:no_input(i,n);break;
case 2:printf("name:");scanf("%s",stu[i].name);break;
case 3:printf("score1:");scanf("%d",&stu[i].score[0]);break;
case 4:printf("score2:");scanf("%d",&stu[i].score[1]);break;
case 5:printf("score3:");scanf("%d",&stu[i].score[2]);break;
case 6:score_input(i);break;
case 7:input(i);break;
case 8:menu();
}
if(c>2&&c<7)
average(i);
puts("/nNow:/n");
printf_face();
printf_one(i);
printf("/nAre you sure?/n/n/t1).Sure 2).No and remodify 3).Back without save in this time [ ]/b/b");
scanf("%d",&w1);
}
while(w1==2);
return(w1);
enter()
{int i,n;
printf("How many students(0-%d)?:",N);
scanf("%d",&n);
printf("/nEnter data now/n/n");
for(i=0;i<n;i++)
{printf("/nInput %dth student record./n",i+1);
input(i);
}
if(i!=0) save(n);
printf_back();
}
add()
{int i,n,m,k;
FILE *fp;
n=load();
printf("How many students are you want to add(0-%d)?:",N-n);
scanf("%d",&m);
k=m+n;
for(i=n;i<k;i++)
{printf("/nInput %dth student record./n",i-n+1);
input(i);
}
if((fp=fopen("score.txt","ab"))==NULL)
{printf("cannot open file/n");
return;
}
for(i=n;i<k;i++)
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("file write error/n");
fclose(fp);
printf_back();
}
modify()
{struct student s;
FILE *fp;
int i,n,k,w0=1,w1,w2=0;
n=load();
do
{clrscr();
k=-1;
puts___();
printf_face();
for(i=0;i<n;i++)
{if((i!=0)&&(i%10==0))
{printf("/n/nRemember NO.which needed modify. pass any key to contiune . . .");
getch();
puts("/n/n");
}
printf_one(i);
}
puts___();
do
{printf("/n/nEnter NO. that you want to modify! NO.:");
scanf("%s",s.num);
for(i=0;i<n;i++)
if(strcmp(s.num,stu[i].num)==0)
{k=i;
s=stu[i];
}
if(k==-1) printf("/n/nNO exist! please again");
}
while(k==-1);
printf_face();
printf_one(k);
w1=modify_data(k,n);
if(w1==1)
{printf("/nSuccessful ^_^./n/nAre you modify another?/n/n/t1).Yes 2).Back with save/t[ ]/b/b");
scanf("%d",&w0);
w2=1;
}
else
{w0=0;
if(w2==1)
stu[k]=s;
}
if(w0!=1&&w2==1)
}
while(w0==1);
menu();
}
del()
{struct student s;
FILE *fp;
int i,j,n,k,c,w0=1;
n=load();
do
{clrscr();
k=-1;
puts___();
printf_face();
for(i=0;i<n;i++)
if(stu[i].ave!=0)
{if((i!=0)&&(i%10==0))
{printf("/n/nRemember NO. which needed del. pass any key to contiune . . .");
getch();
puts("/n/n");
}
printf_one(i);
}
puts___();
do
{printf("/n/nEnter NO. that you want to Delete! NO.:");
scanf("%s",s.num);
for(i=0;i<n;i++)
if(strcmp(s.num,stu[i].num)==0)
{k=i;
s=stu[i];
}
if(k==-1) printf("/n/nNO exist! please again");
}
while(k==-1);
puts("/n");
printf_face();
printf_one(k);
printf("/nAre you sure?/n/t1).sure 2).no and del another 3).back without save all [ ]/b/b");
scanf("%d",&c);
if(c==1)
{stu[k].ave=0;
printf("/n/nSuccessful ^_^./n/nAre you again?/n/t1).again 2).back to menu/t[ ]/b/b");
scanf("%d",&w0);
}
if(c==3) w0=0;
if(w0!=1&&c!=3)
save(n);
}
while(w0==1);
menu();
}
browse()
{int i,j,n;
n=load();
clrscr();
puts___();
printf_face();
for(i=0;i<n;i++)
{if((i!=0)&&(i%10==0))
{printf("/n/nPass any key to contiune . . .");
getch();
puts("/n/n");
}
printf_one(i);
}
puts___();
printf("/tThere are %d record./n",n);
printf("/nPass any key to back . . .");
getch();
menu();
}
search()
{int i,n,k,w1=1,w2,w3,w4;
struct student s;
n=load();
do
{do
{k=-1;
printf("/n/nEnter name that you want to search! name:");
scanf("%s",s.name);
printf_face();
for(i=0;i<n;i++)
if(strcmp(s.name,stu[i].name)==0)
{k=i;
printf_one(k);break;
}
if(k==-1)
{printf("/n/nNO exist! please");
printf("/n/nAre you again?/n/t1).again 2).NO and back [ ]/b/b");
scanf("%d",&w1);
}
}
while(k==-1&&w1==1);
w4=0;w3=0;
if(k!=-1)
{printf("/n/nWhat do you want to do?/n/t1).Search another 2).Modify 3).Delete 4).Back menu [ ]/b/b");
scanf("%d",&w2);
switch(w2)
{case 2:w3=modify_data(k,n);break;
case 3:{printf("/nAre you sure?/n/t1).Sure 2).No and back [ ]/b/b");
scanf("%d",&w4);
if(w4==1)
stu[k].ave=0;
break;
}
}
if(w3==1||w4==1)
{save(n);
printf("/n/nSuccessful. ^_^.");
printf("/n/nWhat do you want to do?/n/t1).Search another 2).Back [ ]/b/b");
scanf("%d",&w2);
}
}
}
while(w2==1);
menu();
}
insert()
{int i,j,n,c;
struct student s;
n=load();
puts("/nInput one data./n");
do
{input(n);
printf_face();
printf_one(n);
printf("/n/nAre you sure?/n/n/t1).Sure/t2).cancel snd again/t3).Back withuot save [ ]/b/b");
scanf("%d",&c);
if(c==1)
{for(j=0;j<n;j++)
for(i=n;i>j;i--)
if(stu[i].ave>stu[i-1].ave)
{s=stu[i-1];stu[i-1]=stu[i];stu[i]=s;}
save(n+1);
printf_back();
}
else if(c!=2) menu();
}
while(c==2);
}
order()
{int i,j,k,n;
struct student s;
n=load();
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(stu[j].ave>stu[k].ave) k=j;
s=stu[i];stu[i]=stu[k];stu[k]=s;
}
save(n);
puts("/n/n");
printf_back();
}
menu()
{int n,w1;
do
{clrscr();
puts("/n/t/t/t Copy right by LIU YIN TAO!");
puts("/t/t/t/t 31/12/2006!/n/n");
puts("/t/t*********************MENU*********************/n/n");
puts("/t/t/t/t1.Enter new data");
puts("/t/t/t/t2.Addition data");
puts("/t/t/t/t3.Modify data");
puts("/t/t/t/t4.Delete data");
puts("/t/t/t/t5.Browse all");
puts("/t/t/t/t6.Search by name");
puts("/t/t/t/t7.Insert data");
puts("/t/t/t/t8.Order by average");
puts("/t/t/t/t9.Exit");
puts("/n/n/t/t**********************************************/n");
printf("Choice your number(1-9): [ ]/b/b");
scanf("%d",&n);
if(n<1||n>9)
{w1=1;getchar();}
else w1=0;
}
while(w1==1);
switch(n)
{case 1:enter();break;
case 2:add();break;
case 3:modify();break;
case 4:del();break;
case 5:browse();break;
case 6:search();break;
case 7:insert();break;
case 8:order();break;
case 9:exit(0);
}
}
main()
{menu();
}