/*程序名称:学生成绩管理系统*/
/*程序设计者:致远 */
/*设计时间:2013-3-15 */
/**************************************************************************************************/
#include <stdio.h>
#include <string.h>
#define N 150
int temp;
struct student
{
char num[15];
char name[20];
int score[3];
float av;
}stu[N];
/**************************************************************************************************/
save(int n)
{
FILE *p;
int i;
p=fopen("stud","wb");
for (i=0;i<n;i++)
fwrite(&stu[i],sizeof(struct student),1,p);
fclose(p);
return (n);
}
/**************************************************************************************************/
count()
{
FILE *p;
int i;
p=fopen("stud","rb");
for(i=0;!feof(p);i++)
fread(&stu[i],sizeof(struct student),1,p);
fclose(p);
return(i-1);
}
/**************************************************************************************************/
void average(int n)
{
int i,j,sum;
for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<3;j++)
sum+=stu[i] .score[j];
stu[i].av=sum/3.0;
}
}
/**************************************************************************************************/
void creat()
{
int i,j,n;
if(temp!=0)
{printf("\n亲! 已录入学生的记录,是否要添加记录?\n\t是,请选择“2”!\n\n");}
else
{
printf("请输入首次录入的数量:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("\n请输入第%d个学生数据:\n",i+1);
printf("学号:");
scanf("%s",&stu[i] .num );
printf("姓名:");
scanf("%s",&stu[i] .name );
for(j=0;j<3;j++)
{
printf("成绩%d:",j+1);
scanf("%d",&stu[i].score[j]);
}
}
average (n);
save (n);
temp=1;
}
}
/**************************************************************************************************/
void add()
{
int i,j,n,k,sum=0;
n=count();
printf("请输入添加记录的个数:");
scanf("%d",&k);
for(i=0;i<k;i++)
{
printf("\n请输入需添加的第%d个学生数据:\n",i+1);
printf("学号:");
scanf("%s",&stu[n+i].num );
printf("姓名:");
scanf("%s",&stu[n+i].name );
for(j=0;j<3;j++)
{
printf("成绩%d:",j+1);
scanf("%d",&stu[n+i].score[j]);
sum+=stu[n+i].score[j];
}
stu[n+i].av =sum/3.0;
sum=0;
}
save (n+k);
}
/**************************************************************************************************/
void modify()
{
int i,j,n,k=-1;
struct student s;
n=count();
printf("请输入要修改学生的学号:");
scanf("%s",&s .num);
for(i=0;i<n;i++)
if(strcmp(s .num,stu[i].num)==0)
{k=i;break;}
if(k==-1) printf("该学号不存在\n");
else
{
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
printf("%s\t%s\t",stu[k].num,stu[k].name);
for(j=0;j<3;j++)
printf("%d\t",stu[k].score[j]);
printf("%.2f\n",stu[k].av );
printf("\n");
printf("\n请重新输入该学生数据:\n");
printf("学号:");
scanf("%s",&stu[k].num);
printf("姓名:");
scanf("%s",&stu[k].name);
for(j=0;j<3;j++)
{
printf("成绩%d:",j+1);
scanf("%d",&stu[k].score[j]);
}
stu[k].av =(stu[k].score[0]+stu[k].score[1]+stu[k].score[2])/3.0;
}
save(n);
}
/**************************************************************************************************/
void del()
{
int i,j,k,n;
struct student s;
n=count( );
if(n==0) {temp=0;printf("\n\t还没学生记录不能执行删除操作!\n\t选择“1”录入学生记录\n\n");}
else
{
printf("\n\n--------------学生信息表--------------\n\n");
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for(i=0;i<n;i++)
{
printf("%s\t%s\t",stu[i].num ,stu[i].name);
for(j=0;j<3;j++)
printf("%d\t",stu[i].score[j]);
printf("%.2f\n",stu[i].av);
printf("\n");
}
printf("请输入要删除的学生的学号:");
scanf("%s",&s.num);
for(i=0;i<n;i++)
if(strcmpi(s.num,stu[i].num)==0)
{k=i;break;}
if(k==-1) printf("数据不存在\n");
else
{
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
printf("%s\t%s\t",stu[k].num ,stu[k].name );
for(j=0;j<3;j++)
printf("%d\t",stu[k].score [j]);
printf("%.2f\n",stu[k].av);
printf("\n");
for(i=k;i<n-1;i++)
stu[i]=stu[i+1];
n=n-1;
save(n);
if(count()==0) temp=0;
}
}
}
/**************************************************************************************************/
void show()
{
int i,j,n;
n=count();
if(n==0) printf("\n\t还没学生记录\n\t选择“1”录入学生记录\n\n");
else
{
printf("\n\n----------------------学生信息表---------------------\n\n");
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for(i=0;i<n;i++)
{
printf("%s\t%s\t",stu[i].num ,stu[i].name );
for(j=0;j<3;j++)
printf("%d\t",stu[i].score[j]);
printf("%.2f\n",stu[i].av);
//printf("\n");
}
}
}
/**************************************************************************************************/
void search()
{
int i,j,n,k=-1;
struct student s;
n=count();
printf("请输入要查找的学生的学号:");
scanf("%s",&s.num);
for(i=0;i<n;i++)
if(strcmpi(s.num,stu[i].num)==0)
{k=i;break;}
if(k==-1) printf("数据不存在\n");
else
{
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
printf("%s\t%s\t",stu[k].num ,stu[k].name );
for(j=0;j<3;j++)
printf("%d\t",stu[k].score[j]);
printf("%.2f\n",stu[k].av);
//printf("\n");
}
}
/**************************************************************************************************/
void sort()
{
int i,j,n;
struct student temp;
n=count();
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(stu[i].av <stu[j].av)
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
printf("-------------------学生信息表--------------------\n");
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
for(i=0;i<n;i++)
{
printf("%s\t%s\t",stu[i].num ,stu[i].name);
for(j=0;j<3;j++)
printf("%d\t",stu[i].score[j]);
printf("%.2f\n",stu[i].av);
}
//printf("\n\n");
}
/**************************************************************************************************/
void showmenu()
{
printf(" 学生成绩管理系统 \n");
printf("========================================\n");
printf(" 1.录入信息 \n");
printf(" 2.添加记录 \n");
printf(" 3.修改记录 \n");
printf(" 4.删除记录 \n");
printf(" 5.显示记录 \n");
printf(" 6.查找记录 \n");
printf(" 7.成绩排序 \n");
printf(" 0.退出系统 \n");
printf("========================================\n");
printf("\n请输入您的选择(0-7):");}
/**************************************************************************************************/
int main ()
{
int choice,temp=0;
showmenu();
scanf("%d",&choice);
while (choice!=0)
{
switch(choice)
{
case 1:creat();temp=count();printf("———————————————————\n");break;
case 2:add();printf("———————————————————————\n");break;
case 3:modify();printf("————————————————————————\n");break;
case 4:del();printf("————————————————————————\n");break;
case 5:show();printf("————————————————————————\n");break;
case 6:search();printf("————————————————————————\n");break;
case 7:sort();printf("—————————————————————————\n");break;
}
showmenu();
scanf("%d",&choice);
}
return 0;
}