C语言学员管理系统(急)!

功能要求:以班为单位,一个班30个学生,储存学生信息和各科成绩。学生信息包括:学号,姓名,年龄,性别,家庭地址。课程包括:C,C++,Java,C#。
菜单设计:
1. 录入信息
2. 查询信息
a) 按总分排名查询
b) 按单科成绩查询
c) 信息查询功能
i. 查询学生信息
ii. 查询学生成绩
3. 修改信息
a) 修改学生信息
b) 修改学生成绩
4. 删除信息
a) 删除学生信息
b) 删除学生成绩
5. 退出
详细设计:
1)录入信息:录入学生信息和各科成绩,并保存。
2)按总分排名查询:对每个学生的成绩求总分,求平均分,按总分排名(如果总分相同的,依次按C,C++,Java,C#单科高低排名)。并输出结果。输出格式为:(仅以3条记录举例)

3)按单科成绩查询:分别按各科成绩排序(如果该科成绩相同的,按学号优先排列),输出结果。输出格式如下:(图仅以C和Java成绩举例)

4)信息查询功能:通过学号查询某个特定的学生的详细信息,和成绩。由于信息量比较大,在设计时,可以设计成询问用户是查询学生信息,还是查询学生成绩。
譬如:查询100001的信息。先询问查询信息还是成绩。若是查询信息,输出学号为100001该生的详细信息。格式如下:

若是查询成绩,则输出学号为100001该生的成绩,以及总分,和名次。格式如下:

5)修改信息:修改信息,应当满足一个原则,学号是学生在校的惟一标识,所以学号是不能修改的。本系统根据学号来修改其余的信息。在修改时,应当做到先呈现原来的信息,由用户决定是否修改。譬如:修改学生100001信息。修改其性别时,系统先告诉用户学号为100001的学生性别为男。然后询问是否修改,如果否,则不修改,保存原来的值。如果是,则修改,修改原来的值。修改学生的成绩也是如此。这样做的好处是:如果只修改一条记录中的某一项,则只用修改该项即可,其它项都回答否,用户不必对不需修改的项作第二次输入。
6)删除信息:删除学生成绩,根据学号来删除学生成绩。即把各科成绩赋值为0。删除学生信息。同样根据学号来删除学生信息。当删除学生信息时,其成绩也没有存在的价值,应当一并删掉。
7)退出:退出本系统。
提示:本系统信息烦多,逻辑稍复杂。请考生先规划好,合理设计。在实现时优先使用函数等,以方便完成考试。

第1个回答  推荐于2016-02-05
#include "stdio.h"
#define SIZE 50
int sum=0;
static char *str[]={"C","Math","English"};
struct student
{ int n;
long num;
char name[10];
int age;
char addr[10];
int score[3];
float avr;
} stu[SIZE];
/* 1--Input */
void fin()
{ int i,j,s;char f;
FILE *fp;
printf(" Warring! Input? ( y/n ) : \7\7\7");
f=getchar();f=getchar();
if(f!='y')
return;
fp=fopen("fstu","wb");
for(i=0;i<SIZE;i++)
{ printf(" i=%d Input No. (i=-1,return) i=? ",i+1);
scanf("%d",&j);
if (j==-1)
{ printf("\n * * * Press any key return! * * *\n",j);
fclose(fp);getch();return;
}
else
{ printf(" Input num,name,age,addr : ");
stu[i].n=i+1;
scanf("%ld%s%d%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].addr);
s=0;
for(j=0;j<3;j++)
{ printf(" Input %-7s score : ",str[j]);
scanf("%d",&stu[i].score[j]);
if(stu[i].score[j]>100)
{ j--;continue;}
s+=stu[i].score[j];
}
stu[i].avr=s/3.0;
fwrite(&stu[i],sizeof(struct student),1,fp);
}
}
fclose(fp);
}
/* 2--Find */
void ffind()
{ int i,j;
FILE *fp;
fp=fopen("fstu","rb");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++);
sum=i;
rewind(fp);
printf(" * * * Find student data * * *\n");
printf(" Input n=1 -- %d : ",sum);
scanf("%d",&j);
fseek(fp,(j-1)*sizeof(struct student),0);
printf("\n Display student %d data : \n",j);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
fread(&stu[i],sizeof(struct student),1,fp);
printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
fclose(fp);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
printf("\n\n");getch();
}
/* 3--Change */
void fchan()
{ int i,j,s,m;char ch;
FILE *fp;
for(;;)
{
fp=fopen("fstu","rb+");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++);
sum=i;
printf(" * * * Change student data * * *\n");
printf(" Input n=1 -- %d : ",sum);
scanf("%d",&j);
m=j-1;
fseek(fp,m*sizeof(struct student),0);
printf("\n Display student %d data : \n",j);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
fread(&stu[i],sizeof(struct student),1,fp);
printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
fclose(fp);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
fclose(fp);printf("\n\n");getch();
fp=fopen("fstu","rb+");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++);
sum=i;
printf(" * * * Change student %d data * * *\n",j);
fseek(fp,m*sizeof(struct student),0);
printf(" i=%d Input No. (i=-1,return) i=? ",j);
scanf("%d",&j);
if (j==-1)
{ printf("\n * * * Press any key return! * * *\n",j);
fclose(fp);getch();return;
}
else
{ printf(" Input num,name,age,addr : ");
stu[i].n=j;
scanf("%ld%s%d%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].addr);
s=0;
for(j=0;j<3;j++)
{ printf(" Input %-7s score : ",str[j]);
scanf("%d",&stu[i].score[j]);
if(stu[i].score[j]>100)
{ j--;continue;}
s+=stu[i].score[j];
}
}
stu[i].avr=s/3.0;
rewind(fp);
fseek(fp,m*sizeof(struct student),0);
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
printf("\n * * * Continue ( y/n ) ? * * *\n",j);
ch=getchar();
if(ch!='y')
return;
}
}
/* 4--Append */
void fappe()
{ int i,j,s;
FILE *fp;
fp=fopen("fstu","ab+");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++);
sum=i;
rewind(fp);
printf(" List student datas : \n\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
getch();
sum=i;
for(i=sum;i<SIZE;i++)
{ printf(" i=%d Input No. (i=-1,return) i=? ",i+1);
scanf("%d",&j);
if (j==-1)
{ printf("\n * * * Press any key return! * * *\n",j);
fclose(fp);getch();return;
}
else
{ printf(" Input num,name,age,addr : ");
stu[i].n=i+1;
scanf("%ld%s%d%s",&stu[i].num,stu[i].name,&stu[i].age,stu[i].addr);
s=0;
for(j=0;j<3;j++)
{ printf(" Input %-7s score : ",str[j]);
scanf("%d",&stu[i].score[j]);
if(stu[i].score[j]>100)
{ j--;continue;}
s+=stu[i].score[j];
}
stu[i].avr=s/3.0;
fwrite(&stu[i],sizeof(struct student),1,fp);
}
}
fclose(fp);
}
/* 5--List */
void flist()
{ int i;
FILE *fp;
fp=fopen("fstu","rb");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++);
sum=i;
rewind(fp);
printf(" List student datas : \n\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
fclose(fp);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
getch();
}
/* 6--Sort */
void fsort()
{ int i,j,n;
FILE *fp;
struct student t;
fp=fopen("fstu","rb");
printf(" List fstu file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
getch();
n=i;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(stu[i].avr<stu[j].avr)
{ t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
fp=fopen("fstus","wb");
printf(" List sort fstus file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;i<n;i++)
{ fwrite(&stu[i],sizeof(struct student),1,fp);
printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
printf("\n");getch();
for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
fwrite(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
}
/* 7--Copy */
void fcopy()
{ int i;
FILE *fp1,*fp2;
fp1=fopen("fstu","rb");
fp2=fopen("fstub","wb");
printf(" List fstu file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp1)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
fwrite(&stu[i],sizeof(struct student),1,fp2);
}
fclose(fp2);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
printf("\n");getch();
for(i=0;fread(&stu[i],sizeof(struct student),1,fp1)!=0;i++)
fwrite(&stu[i],sizeof(struct student),1,fp2);
fclose(fp1);
fclose(fp2);
fp2=fopen("fstub","rb");
printf(" List backup fstub file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp2)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
fclose(fp2);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
getch();printf("\n");
}
/* 8--Restore */
void frest()
{ int i;
FILE *fp1,*fp2;
fp1=fopen("fstub","rb");
fp2=fopen("fstu","wb");
printf(" List backup fstub file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp1)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
fwrite(&stu[i],sizeof(struct student),1,fp2);
}
fclose(fp1);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
printf("\n");getch();
for(i=0;fread(&stu[i],sizeof(struct student),1,fp1)!=0;i++)
fwrite(&stu[i],sizeof(struct student),1,fp2);
fclose(fp1);
fclose(fp2);
fp2=fopen("fstu","rb");
printf(" List fstu file data : \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" No. Num Name Age Addr C Math En. Aver.\n");
printf(" -----------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student),1,fp2)!=0;i++)
{ printf("%12d%7ld %-10s%2d %-10s",stu[i].n,stu[i].num,stu[i].name,stu[i].age,stu[i].addr);
printf("%3d %3d %3d %6.2f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].avr);
}
fclose(fp2);
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n");
getch();printf("\n");
}
main()
{ int n;
for(;;)
{ printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf(" * * * * * * * * * * * * * * * * * *\n");
printf(" * Student M I S *\n");
printf(" * * * * * * * * * * * * * * * * * *\n");
printf(" * 1. Input student data *\n");
printf(" * 2. Find student data *\n");
printf(" * 3. Change student data *\n");
printf(" * 4. Append student data *\n");
printf(" * 5. List student data *\n");
printf(" * 6. Sort student file *\n");
printf(" * 7. Copy backup file *\n");
printf(" * 8. Restore backup file *\n");
printf(" * * * * * * * * * * * * * * * * * *\n");
printf(" * 0. Exit system *\n");
printf(" * * * * * * * * * * * * * * * * * *\n\n");
printf(" Please Enter ( 0 -- 8 ) : ");
scanf("%d",&n);
printf("\n\n\n\n\n");
switch(n)
{ case 1 : fin();break;
case 2 : ffind();break;
case 3 : fchan();break;
case 4 : fappe();break;
case 5 : flist();break;
case 6 : fsort();break;
case 7 : fcopy();break;
case 8 : frest();break;
case 0 : printf(" * * * * * * * * * * * * * * * * * *\n");
printf(" * *\n");
printf(" * Finish ! *\n");
printf(" * *\n");
printf(" * * * * * * * * * * * * * * * * * *\n");
printf(" * *\n");
printf(" * Good Bye ! *\n");
printf(" * *\n");
printf(" * * * * * * * * * * * * * * * * * *\n\n");
getch();exit();
default: printf(" * * * Error ! Press any key continue. * * *\n");
getch();break;
}
}
}本回答被提问者采纳