c语言学生成绩档案管理

根据你的要求,链表的部分函数单独编写。我没有写输入。如果您将测试数据直接传递给函数,请自己编写scanf输入。所以我对函数有详细的评论。

# 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

}