答案:这个你看看需要哪些改进的地方#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct student
{
int number;//学号
char name[30];//姓名
int a,b,c;//三门课成绩
float aver;//平均成绩
}student;
typedef struct node
{
student data;
struct node *next;
}Node,*Link;
void xian1()
{
printf(" 学籍管理系统\n");
printf(" *\n");
printf(" *\n");
printf(" *\n");
}
void xian2()
{
printf(" ******************************************************************\n");
printf(" 1.添加学生资料; 2.查找学生资料;\n");
printf(" 3.修改学生资料; 4.删除学生资料;\n");
printf(" 5.按名次查看成绩; 6.清除所有资料;\n");
printf(" 7.查看全班平均分; 8.查看所有学生平均分;\n");
printf(" 0.退出学籍系统; 9.查看菜单项;\n");
printf(" ******************************************************************\n");
}
void Save(Link L)//保存学生资料
{
Node *p;
FILE *fp;
int flag=1,count=0;
fp=fopen("student","wb");
if(fp==NULL)
{
printf("\n=====>提示重新打开文件时发生错误!\n");
return;
}
p=L->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{ p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count);
fclose(fp);
}
void Saveas(Link L)//是否保存资料
{
char h;
printf("是否保存设置?(y/n):");
h=getchar();
h=getchar();
if(h!='n')
Save(L);
}
Node *Locate(Link L,int number)//查找
{
Node *p;
p=L->next;
while(p)
{
if(p->data.number==number)
return p;
p=p->next;
}
return p;
}
void Findname(Link L)//按姓名查找
{
Node *p=L->next;
char nam[20];
int flag=0;
printf("查找姓名:");
scanf("%s",nam);
if(p==NULL)
{printf("没有资料可供查找!\n");return;}
while(p)
{
if(strcmp(p->data.name,nam)==0)
{
printf("学号:%d\n",p->data.number);
printf("姓名:%s\n",p->data.name);
printf("第1门成绩:%d\n",p->data.a);
printf("第2门成绩:%d\n",p->data.b);
printf("第3门成绩:%d\n",p->data.c);
printf("平均分:%f\n",p->data.aver);
flag++;
}
p=p->next;
}
if(flag==0)
printf("\n\t\t\t没有该生!\n");
}
void Findnumber(Link L)//按学号找
{
Node *p;
int number;
printf("查找学号:");
scanf("%d",&number);
p=Locate(L,number);
if(p==NULL)
{printf("\n\t\t\t没有该生!\n");return;}
printf("\n学号:%d\n",p->data.number);
printf("姓名:%s\n",p->data.name);
printf("第1门成绩:%d\n",p->data.a);
printf("第2门成绩:%d\n",p->data.b);
printf("第3门成绩:%d\n",p->data.c);
printf("平均分:%f\n",p->data.aver);
}
void ADD(Link L)//添加学生
{
Node *w,*r,*p;
int number;
r=L;
while(r->next!=NULL)
r=r->next;
printf("查看是否有需添加的学号:");
scanf("%d",&number);
w=Locate(L,number);
if(w)
{
printf("=====>提示:该同学已存在!\n");
return;
}
p=(Node *)malloc(sizeof(Node));
p->next=NULL;
printf("=====>提示:可以添加!\n");
printf("姓名:");
scanf("%s",p->data.name);
p->data.number=number;
p->data.aver=0.0;
printf("第1门分数:");
scanf("%d",&p->data.a);
printf("第2门分数:");
scanf("%d",&p->data.b);
printf("第3门分数:");
scanf("%d",&p->data.c);
p->data.aver=(p->data.a)+(p->data.b)+(p->data.c);
p->data.aver=p->data.aver/3;
printf("=====>提示:添加成功!\n");
r->next=p;
Save(L);
}
void Modify(Link L)//修改
{
int number;
Node *p;
printf("需修改人的学号:");
scanf("%d",&number);
p=Locate(L,number);
if(!p)
printf("=====>提示:没有该生资料!\n");
else
{
printf("姓名:");
scanf("%s",p->data.name);
printf("学号:");
scanf("%d",&p->data.number);
printf("第1门分数:");
scanf("%d",&p->data.a);
printf("第2门分数:");
scanf("%d",&p->data.b);
printf("第3门分数:");
scanf("%d",&p->data.c);
p->data.aver=(p->data.a)+(p->data.b)+(p->data.c);
p->data.aver=p->data.aver/3;
printf("=====>提示:修改成功!\n");
Saveas(L);
}
}
void C易做图ver(Link L)//计算全班平均成绩
{
Node *p;
float sum=0.0,aver;