C语言:如何用单链表建立一个校运动会项目管理表?

Python015

C语言:如何用单链表建立一个校运动会项目管理表?,第1张

初始化录入,我就录入3个学院做测试。你像录入更多,自己修改初始化函数init的变量n初值就好了。

另外,我没有写输入验证,该输入数字的地方不要输其他无关字符。想验证你可以在我的scanf那里加验证。

#include <stdio.h>

#include <string.h>

#include <malloc.h>

typedef struct race

{

char sName[50]//学院名称

char pName[50]//项目名称

int rank//项目名次

struct race *next

}RACE

void pfList(RACE *raceHead)//打印链表信息

int init(RACE **raceHead,RACE **raceTail)//初始化链表,成功返回1,失败返回0

int CreatList(RACE **raceHead,RACE **raceTail)//成功返回1,失败返回0

void tjs(RACE *raceHead)//统计学院参加项目数,及所有名次为第一名的信息

void delByP(RACE *raceHead,RACE **raceTail)//根据项目删除所有节点

int main()

{

RACE *raceHead=NULL,*raceTail=NULL

if(!init(&raceHead,&raceTail))

{

printf("程序异常终止!\n")

return 1

}

pfList(raceHead)

tjs(raceHead)

delByP(raceHead,&raceTail)

printf("删除后链表信息:\n")

pfList(raceHead)

return 0

}

int init(RACE **raceHead,RACE **raceTail)//初始化链表,成功返回1,失败返回0

{

int n=3//初始化3个学院的信息

while(n--)

if(!CreatList(raceHead,raceTail))

return 0

return 1

}

void pfList(RACE *raceHead)//打印链表信息

{

printf("\n当前链表信息:\n")

while(raceHead->next)

{

printf("学院名:%s\n",raceHead->next->sName)

printf("--项目:%s\n",raceHead->next->pName)

printf("--名次:%d\n",raceHead->next->rank)

raceHead=raceHead->next

}

}

int CreatList(RACE **raceHead,RACE **raceTail)//成功返回1,失败返回0

{

int rank

char sname[50],pname[50]

RACE *raceNew=NULL

if(!*raceHead)

{

*raceHead=(RACE *)malloc(sizeof(RACE))

if(!*raceHead)

return 0

(*raceHead)->next=NULL

}

printf("请输入参赛的学院名称:")

scanf("%s",sname)

printf("请输入参加的所有项目及名次(输入EXIT -1结束输入):\n")

while(1)

{

scanf("%s%d",pname,&rank)

if(strcmp(pname,"EXIT")==0)

break

raceNew=(RACE *)malloc(sizeof(RACE))

if(!raceNew)return 0

strcpy(raceNew->sName,sname)

strcpy(raceNew->pName,pname)

raceNew->rank=rank

raceNew->next=NULL

if(!(*raceHead)->next)

(*raceHead)->next=raceNew

else

(*raceTail)->next=raceNew

*raceTail=raceNew

}

return 1

}

void tjs(RACE *raceHead)//统计学院参加项目数,及所有名次为第一名的信息

{

int cnt=0

char sname[50]

printf("\n--统计学院参加项目数,及所有名次为第一名的信息--\n  输入要统计的学院名字:")

scanf("%s",sname)

printf("学院:%s在本次比赛中获得第一名的项目有:\n",sname)

while(raceHead->next)

{

if(strcmp(raceHead->next->sName,sname)==0)

{

if(raceHead->next->rank==1)

printf("--项目:%s\n",raceHead->next->pName)

cnt++

}

raceHead=raceHead->next

}

printf("学院%s共参加的项目数量为: %d\n",sname,cnt)

}

void delByP(RACE *raceHead,RACE **raceTail)//根据项目删除所有节点

{

RACE *raceLast=raceHead,*raceSave=raceHead,*del=NULL

char pname[50]

printf("\n---根据项目删除所有节点---\n  输入要删除的项目名称:")

scanf("%s",pname)

while(raceHead->next)

{

if(strcmp(raceHead->next->pName,pname)==0)

{

del=raceHead->next

raceLast->next=del->next

free(del)

raceLast=raceSave

raceHead=raceSave

continue

}

raceHead=raceLast->next

raceLast=raceLast->next

}

*raceTail=raceLast

}

#include <iostream>

using namespace std

int main()

{

medal()

int No,g,s,b

int Tg=0,Ts=0,Tb=0

int maxGoldenNo=-1,bestP=-1

char flag

while(true)

{

cout<<"请输入运动员编号:"<<endl

cin>>No

cout<<"请输入该运动员金牌数:"<<endl

cin>>g

Tg+=g

cout<<"请输入该运动员银牌数:"<<endl

cin>>s

Ts+=s

cout<<"请输入该运动员铜牌数:"<<endl

cin>>b

Tb+=b

if(maxGoldenNo<g)

{bestP=NomaxGoldenNo=g}

cout<<"按q结束,按回车录入下一个运动员"<<endl

flag=getch()

if(flag=='q')

break

}

cout<<"总金牌数:"<<Tg<<endl

cout<<"总银牌数:"<<Ts<<endl

cout<<"总铜牌数:"<<Tb<<endl

cout<<"最佳运动员"<<bestP<<endl

}