c语言学生成绩档案管理
# include & ltstdio.h & gt
# include & ltmalloc.h & gt
# include & ltstring.h & gt
typedef?struct?stuInfo
{
int?id;//学生编号
夏尔?名称[10];//名称
int?得分[3];//分数
int?ave//平均分
int?cont//信息的总数,只需要存储在头部。
struct?stuInfo?*下一个;
} SIO
SIO?*findSIObyID(int?身份证,SIO?* sioHead);//?通过ID查找返回到上一个节点。
SIO?*insertStu(int?count,int?id,char?name[],int?分数[3],SIO?*sioHead,SIO?* sioTail);//插入学生信息。参数:当count==-1时,在链表的末尾增加一个节点;count & gt=0在指定学生位置,原学生向后移动。
作废?printfSIO(SIO?* sioHead);//打印链表
作废?deleteStu(int?身份证,SIO?* sioHead);//删除学生信息,释放内存。
作废?px(SIO?* sioHead);//按照平均分从高到低排序。
作废?findMax(SIO?* sioHead);//查找平均分最高的大学生信息。
作废?findMin(SIO?* sioHead);//找到平均分最低的学生信息。
int?主()
{
int?得分[3];
SIO?*sioTail=NULL,* sioHead = NULL
sioHead=(SIO?*)malloc(sizeof(SIO));
SiO head->;next = NULL
SiO head->;cont = 0;
Printf("1,显示所有学生的成绩:\ n ");
得分[0]= 89;得分[1]= 91;得分[2]= 85;
sioTail = inserts tu(3111101,"陈明",score,sioHead,sioTail);
得分[0]= 99;得分[1]= 71;分数[2]= 83;
Siotail = insertstu (3,111102," Wanda ",score,sioHead,sioTail);
得分[0]= 79;得分[1]= 81;得分[2]= 85;
Siotail = insertstu (3,111103," Lisi ",score,Siohade,Siotail);
得分[0]= 92;得分[1]= 91;得分[2]= 75;
Siotail = insertstu (3,111104,"黄色",score,sioHead,sioTail);
得分[0]= 81;得分[1]= 87;得分[2]= 95;
Siotail = insertstu (3,111105,"武郎",score,sioHead,sioTail);
printfSIO(sioHead);
find max(sioHead);
find min(sioHead);
printf(" \ n ");
Printf("2。删除学号111103的学生信息:\ n ");
delete stu(111103,sioHead);
printfSIO(sioHead);
Printf("3,按平均分从高到低排序\ n ");
px(sioHead);//排序
printfSIO(sioHead);
Printf("4。末尾插入新同学信息:111106,张宁\ n”);
得分[0]= 77;得分[1]= 78;得分[2]= 89;
Siotail = INSERT STU (3,111106,"张宁",score,sioHead,sioTail);
printfSIO(sioHead);
Printf("4。中间插入同学信息:111107,张三\ n”);
得分[0]= 91;得分[1]= 76;得分[2]= 95;
Siotail = insertstu (2,111107,"张三",score,sioHead,sioTail);
printfSIO(sioHead);
Printf("4。在表头插入同学信息:111108,刘大\ n”);
得分[0]= 86;得分[1]= 84;得分[2]= 85;
Siotail = INSERT STU (1,11165438,"刘大",score,sioHead,sioTail);
printfSIO(sioHead);
回归?0;
}
作废?printfSIO(SIO?*sioHead)//打印链表
{
printf("?%-9s%-8s%-8s%-8s%-8s%s\n”、“学号”、“姓名”、“年级01”、“02级”、“03级”、“平均分”);
while(sioHead->;下一个!=空)
{
printf(" % d % s % d % d % d % d % d \ n ",sioHead-& gt;下一个-& gt;id,sioHead-& gt;下一个-& gt;姓名,sioHead-& gt;下一个-& gt;分数[0],sioHead-& gt;下一个-& gt;score[1],sioHead->;下一个-& gt;score[2],sioHead-& gt;下一个-& gt;ave);
SiO head = SiO head-& gt;接下来;
}
printf(" \ n \ n ");
}
作废?px(SIO?*sioHead)//按照平均分从高到低排序。
{
SIO?*sioNext=NULL,*nextSave=NULL,sioSave
while(sioHead->;下一个!=空)
{
sioNext = sioHead-& gt;接下来;
while(sioNext-& gt;下一个!=空)
{
if(sioHead->;下一个-& gt;ave & ltsioNext-& gt;下一个-& gt;ave)
{
next save = SiO head-& gt;下一个-& gt;接下来;
SiO save = *(SiO head-& gt;下一个);
*(SiO head-& gt;next)= *(sioNext-& gt;下一个);
SiO head->;下一个-& gt;next = nextSave
next save = sioNext-& gt;下一个-& gt;接下来;
*(sioNext->;next)= SiO save;
sioNext-& gt;下一个-& gt;next = nextSave
}
sioNext = sioNext-& gt;接下来;
}
SiO head = SiO head-& gt;接下来;
}
}
作废?findMax(SIO?*sioHead)//查找平均分最高的大学生信息。
{
int?max = 0;
SIO?* sioMax = NULL
while(sioHead->;下一个!=空)
{
if(max & lt;SiO head->;下一个-& gt;ave)
{
max = SiO head-& gt;下一个-& gt;ave
SiO max = SiO head-& gt;接下来;
}
SiO head = SiO head-& gt;接下来;
}
Printf("1,平均分最大的学生信息:\ n ");
printf("?%-9s%-8s%-8s%-8s%-8s%s\n”、“学号”、“姓名”、“年级01”、“02级”、“03级”、“平均分”);
printf(" % d % s % d % d % d % d % d \ n ",sioMax-& gt;id,sioMax-& gt;名称,sioMax-& gt;分数[0],sioMax-& gt;score[1],SiO max-& gt;score[2],SiO max-& gt;ave);
}
作废?findMin(SIO?*sioHead)//查找平均分最低的学生信息。
{
int?min = 999
SIO?* sioMin = NULL
while(sioHead->;下一个!=空)
{
if(min & gt;SiO head->;下一个-& gt;ave)
{
min = SiO head-& gt;下一个-& gt;ave
SiO min = SiO head-& gt;接下来;
}
SiO head = SiO head-& gt;接下来;
}
Printf("1,平均分最低的学生信息:\ n ");
printf("?%-9s%-8s%-8s%-8s%-8s%s\n”、“学号”、“姓名”、“年级01”、“02级”、“03级”、“平均分”);
printf(" % d % s % d % d % d % d % d \ n ",SiO min-& gt;id,SiO min-& gt;姓名,西欧明-& gt;分数[0],SiO min-& gt;分数[1],SiO min->;score[2],SiO min-& gt;ave);
}
作废?deleteStu(int?身份证,SIO?*sioHead)//删除指定学号的学生信息,释放内存。
{
SIO?*dlsio=findSIObyID(id,SiO head);
SIO?* dsio = dl SiO-& gt;接下来;
dl SiO-& gt;next = dl SiO-& gt;下一个-& gt;接下来;
dsio-& gt;next = NULL
免费(dsio);
}
SIO?*insertStu(int?count,int?id,char?name[],int?分数[3],SIO?*sioHead,SIO?*sioTail)//插入学生信息。当count==1时,在头节点位置插入;中间位置插入Count==2,原生往后移;参数:当count==3时,在链表末尾增加一个节点;返回尾节点
{
int?con=0,mid=sioHead->cont/2;
SIO?*sioNew=(SIO?*)malloc(sizeof(SIO));
sion ew-& gt;next = NULL
sion ew-& gt;id = id
strcpy(sioNew-& gt;姓名、名称);
sion ew-& gt;分数[0]=分数[0];
sion ew-& gt;分数[1]=分数[1];
sion ew-& gt;分数[2]=分数[2];
sion ew-& gt;ave =(score[0]+score[1]+score[2])/3;
if(count==3)
{
if(sioHead->;next==NULL)
SiO head->;next = sioNew
其他
SiO tail->;next = sioNew
sioTail = sioNew
SiO head->;cont++;
回归?西奥特;
}
If(count==2)//中间插入。
{
if(sioHead->;cont & lt2)//如果节点总数小于2,则加在最后。
{
SiO head->;cont++;
回归?insertStu(3,id,name,score,sioHead,sioTail);
}
while(sioHead->;下一个!=空)
{
con++;
if(con==mid)
{
sion ew-& gt;next = sioHead-& gt;下一个-& gt;接下来;
SiO head->;next = sioNew
SiO head->;cont++;
回归?西奥特;
}
SiO head = SiO head-& gt;接下来;
}
}
If(count==1)//插入第一个节点。
{
if(sioHead->;next==NULL)
{
SiO tail = SiO head-& gt;next = sioNew
}
其他
{
sion ew-& gt;next = sioHead-& gt;下一个-& gt;接下来;
SiO head->;next = sioNew
}
SiO head->;cont++;
回归?西奥特;
}
回归?0;
}
SIO?*findSIObyID(int?身份证,SIO?*sioHead)//?通过ID查找返回到上一个节点。
{
while(sioHead->;下一个!=空)
{
if(sioHead->;下一个-& gt;id==id)
{
回归?西海德;
}
SiO head = SiO head-& gt;接下来;
}
回归?NULL
}