数据结构课程设计 运动会.docx
- 文档编号:23855596
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:27
- 大小:280.69KB
数据结构课程设计 运动会.docx
《数据结构课程设计 运动会.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计 运动会.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构课程设计运动会
成绩
课程设计报告
课程名称
专业
班级
学生姓名
学号
设计题目
指导教师
设计起止时间:
2010年6月21日至2010年6月25日
运动会分数统计
一、问题描述
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)
二、功能要求:
1)可以输入各个项目的前三名或前五名的成绩;
2)能统计各学校总分,
3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;按项目编号查询取得前几名的学校。
5)数据存入文件并能随时查询
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称
三、基本思想
本实验中,对不同的对象采取不同的存储结构,对参赛学校采取链式结构,而对于参赛运动员采取一个结构就可以了。
本程序中主要用到线性表的一些基本操作,将各学校信息,运动员信息,项目信息都构造成线性表。
具体功能通过主函数分别调用各函数实现。
参考本实验的功能要求,本程序分为七个模块:
主函数、信息录入函数、信息统计函数、信息查询函数,信息排序函数、存盘函数、读盘函数。
信息录入函数有包括学校信息录入函数(包括学校总数、学校名称等),竞赛项目录入函数(男子竞赛项目总数、女子竞赛项目总数、竞赛项目名称、取名次方法和各名次对应的分值)、比赛结果录入函数(各名次的学生信息等)。
信息统计不再结果中显示出来,为了信息查询和排序输出。
信息查询函数包括按学校编号查询、按学校名称查询、按项目编号查询三个子函数。
信息排序函数包括按男子总分排序函数、按女子总分排序函数、按团体总分排序函数。
四、详细设计
/*单个学校信息描述*/
typedefstruct_SchoolInfo{
intSchoolNum;/*学校编号*/
charschoolName[MAXLENGTH];/*学校名称*/
}SchoolInfo,*pSchoolInfo;
/*全部参赛学校描述*/
typedefstruct_School{
SchoolInfoschInfoArray[MAX_N];
intnTotalNmOfSch;/*参赛学校总数*/
}School,*pSchool;
/*某一竞赛项目名次取法*/
typedefstruct_ScrInfo
{
inttotal;/*取前多少名*/
int*power;/*每一名次对应分值*/
}ScrInfo,*pScrInfo;
/*单个竞赛项目信息描述*/
typedefstruct_SportInfo{
intsportNum;/*项目编号*/
charsportName[MAXLENGTH];/*项目名称*/
SportTypesprtTyp;/*项目类型(男子、女子)*/
ScoreTypescrTyp;/*取名次类型(前5、前3、用户自定义)*/
ScrInfoscrInfo;/*名次取法纪录项*/
}SportInfo,*pSportInfo;
/*全部竞赛项目信息描述*/
typedefstruct_Sport{
SportInfosportInfoArray[MAX_M+MAX_W];
intnTotalNmOfMSprt;/*男子项目总数*/
intnTotalNmOfFSprt;/*女子项目总数*/
}Sport,*pSport;
/*比赛成绩记录*/
typedefstruct_Position{
intsportNum;/*竞赛项目编号*/
charname[MAXLENGTH];/*获得名次的运动员姓名*/
intscore;/*得分*/
intschoolNum;/*所属学校编号*/
struct_Position*ptrNext;
}Position,*pPosition;
五、源程序:
#define__MAINFILE_H__
#include"stdio.h"
#include"stdlib.h"
#defineMAXLENGTH20/*字符串最大长度*/
#defineMAX_N20/*最大参赛学校数目*/
#defineMAX_M30/*男子项目最大数目*/
#defineMAX_W20/*女子项目最大数目*/
#defineLENsizeof(Position)
#ifndefNULL
#defineNULL(void*)0
#endif/*NULL*/
intN,M,W;
typedefenum_Bool{_TRUE=1,_FALSE=0}Bool;
typedefenum_SportType{_MAN,_WOMAN}SportType;/*sporttype*/
typedefenum_ScoreType{_FIVE,_THREE,_CUSTOM}ScoreType;/*scoretype*/
typedefstruct_SchoolInfo{
intSchoolNum;/*学校编号*/
charschoolName[MAXLENGTH];/*学校名称*/
}SchoolInfo,*pSchoolInfo;
typedefstruct_School{
SchoolInfoschInfoArray[MAX_N];
intnTotalNmOfSch;/*参赛学校总数*/
}School,*pSchool;
typedefstruct_ScrInfo
{
inttotal;/*取前多少名*/
int*power;/*每一名次对应分值*/
}ScrInfo,*pScrInfo;
typedefstruct_SportInfo{
intsportNum;/*项目编号*/
charsportName[MAXLENGTH];/*项目名称*/
SportTypesprtTyp;/*项目类型(男子、女子)*/
ScoreTypescrTyp;/*取名次类型(前5、前3、用户自定义)*/
ScrInfoscrInfo;/*名次取法纪录项*/
}SportInfo,*pSportInfo;
typedefstruct_Sport{
SportInfosportInfoArray[MAX_M+MAX_W];
intnTotalNmOfMSprt;/*男子项目总数*/
intnTotalNmOfFSprt;/*女子项目总数*/
}Sport,*pSport;
typedefstruct_Position{
intsportNum;/*竞赛项目编号*/
charname[MAXLENGTH];/*获得名次的运动员姓名*/
intscore;/*得分*/
intschoolNum;/*所属学校编号*/
struct_Position*ptrNext;
}Position,*pPosition;
externintGetPower(int,int);
externvoidGetReport();
externBoolGetSchoolInfo();
externvoidGetScoreBySchool();
externchar*GetSportName(int);
externBoolSetFMSportTotalNum(int*,int);
externvoidSetPositionForAllSports();
externvoidSetPositionForOneSport(int);
externBoolSetSchoolInfo(int*);
externBoolSetSchoolTotalNum(int*);
externBoolSetScoreType(int);
externBoolSetSportInfo();
externvoidGetSportInfo();
externvoidGetList();
staticSchoolg_school;
staticSportg_sport;
pPositionptrHead,ptrThis,ptrNew;
BoolSetFMSportTotalNum(int*pnTotalNmOfFMSprt,inttype/*0:
男子;1:
女子*/)
{
if(pnTotalNmOfFMSprt==NULL){
return_FALSE;
}
system("cls");
printf("\n--------------------------");
if(type==0){/*男子*/
printf("\n请输入男子竞赛项目总数:
");
scanf("%d",pnTotalNmOfFMSprt);
if(*pnTotalNmOfFMSprt<=0||*pnTotalNmOfFMSprt>MAX_M){
printf("\n学校总数必须大于0小于%d",MAX_M);
return_FALSE;
}
else
return_TRUE;
}
else{/*女子*/
printf("\n请输入女子竞赛项目总数:
");
scanf("%d",pnTotalNmOfFMSprt);
if(*pnTotalNmOfFMSprt<=0||*pnTotalNmOfFMSprt>MAX_W){
printf("\n学校总数必须大于0小于%d",MAX_W);
return_FALSE;
}
else
return_TRUE;
}
}
BoolSetScoreType(intn/*项目编号-1*/)
{
charch;
Boolret=_FALSE;
Boolerr=_FALSE;
inttotalPrv,i,power;
do{
system("cls");
printf("\n请选择编号为%d的竞赛项目取名次类型\n(0:
取前5名;1:
取前3名;2:
用户自定义):
",n+1);
ch=toupper(getch());
printf("\n");
switch(ch){
case'0':
/*取前5名*/
g_sport.sportInfoArray[n].scrTyp=_FIVE;
g_sport.sportInfoArray[n].scrInfo.total=5;
if((g_sport.sportInfoArray[n].scrInfo.power=(int*)malloc(sizeof(int)*5))==NULL){
printf("\nmemoryerr");
return_FALSE;
}
g_sport.sportInfoArray[n].scrInfo.power[0]=7;
g_sport.sportInfoArray[n].scrInfo.power[1]=5;
g_sport.sportInfoArray[n].scrInfo.power[2]=3;
g_sport.sportInfoArray[n].scrInfo.power[3]=2;
g_sport.sportInfoArray[n].scrInfo.power[4]=1;
ret=_TRUE;
break;
case'1':
/*取前3名*/
g_sport.sportInfoArray[n].scrTyp=_THREE;
g_sport.sportInfoArray[n].scrInfo.total=3;
if((g_sport.sportInfoArray[n].scrInfo.power=(int*)malloc(sizeof(int)*3))==NULL){
printf("\nmemoryerr");
return_FALSE;
}
g_sport.sportInfoArray[n].scrInfo.power[0]=5;
g_sport.sportInfoArray[n].scrInfo.power[1]=3;
g_sport.sportInfoArray[n].scrInfo.power[2]=2;
ret=_TRUE;
break;
case'2':
g_sport.sportInfoArray[n].scrTyp=_CUSTOM;
do{
printf("\n请输入本项目取前多少名:
");
scanf("%d",&totalPrv);
if(totalPrv<=0){
printf("\n输入有误。
只能大于0");
}
else
err=_TRUE;
}while(err==_FALSE);
g_sport.sportInfoArray[n].scrInfo.total=totalPrv;
if((g_sport.sportInfoArray[n].scrInfo.power=(int*)malloc(sizeof(int)*totalPrv))==NULL){
printf("\nmemoryerr");
return_FALSE;
}
for(i=0;i err=_FALSE; do{ printf("\n请输入该项目第%d名的分值: ",i+1); scanf("%d",&power); if(power<=0){ printf("\n输入有误。 只能大于0"); } else err=_TRUE; }while(err==_FALSE); g_sport.sportInfoArray[n].scrInfo.power[i]=power; } ret=_TRUE; break; default: /*错误的输入*/ printf("\n错误的选择! "); ret=_FALSE; } }while(ret==_FALSE); returnret; } BoolSetSportInfo() { inti=0; Boolerr=_FALSE; do{ err=SetFMSportTotalNum(&M,0); }while(err==_FALSE); g_sport.nTotalNmOfMSprt=M; do{ err=SetFMSportTotalNum(&W,1); }while(err==_FALSE); g_sport.nTotalNmOfFSprt=W; for(i=0;i { g_sport.sportInfoArray[i].sportNum=i+1; if(i+1<=M){ g_sport.sportInfoArray[i].sprtTyp=_MAN; } else{ g_sport.sportInfoArray[i].sprtTyp=_WOMAN; } system("cls"); printf("\n请输入编号为%d的竞赛项目名称: ",i+1); scanf("%s",g_sport.sportInfoArray[i].sportName); g_sport.sportInfoArray[i].sportName[MAXLENGTH-1]='\0'; SetScoreType(i); } return_TRUE; } BoolSetSchoolTotalNum(int*pnTotalNmOfSch) { Boolret=_FALSE; if(pnTotalNmOfSch==NULL){ return_FALSE; } while(ret==_FALSE){ system("cls"); printf("\n----------------------------------------"); printf("\n请输入参加运动会的学校总数: "); scanf("%d",pnTotalNmOfSch); if(*pnTotalNmOfSch<=0||*pnTotalNmOfSch>MAX_N){ printf("\n学校总数必须大于0小于%d\n",MAX_N); printf("\n\n按任意健继续"); getch(); ret=_FALSE; } else ret=_TRUE; } return_TRUE; } BoolSetSchoolInfo(int*pnTotalNmOfSch) { inti=0; if(! SetSchoolTotalNum(pnTotalNmOfSch)){ printf("\nerr! "); return_FALSE; } else{ g_school.nTotalNmOfSch=*pnTotalNmOfSch; for(i=0;i { g_school.schInfoArray[i].SchoolNum=i+1; printf("\n请输入编号为%d的学校名称: ",i+1); scanf("%s",g_school.schInfoArray[i].schoolName); g_school.schInfoArray[i].schoolName[MAXLENGTH-1]='\0';/*截断多余字符*/ } } return_TRUE; } BoolGetSchoolInfo() { inti=0; printf("\n共有%d个学校参赛",g_school.nTotalNmOfSch); for(i=0;i { printf("\n学校编号: %d",g_school.schInfoArray[i].SchoolNum); printf("校名: %s",g_school.schInfoArray[i].schoolName); } return_TRUE; } voidSetPositionForOneSport(intsportNum/*项目编号-1*/) { inti=0,j=0; Boolerr=_FALSE; printf("\n------------------------------------"); printf("\n填写项目%d的比赛结果",sportNum+1); for(i=0;i { ptrNew=(pPosition)malloc(LEN); if(ptrHead==(pPosition)NULL) { ptrHead=ptrThis=ptrNew; } else { ptrThis=ptrHead; while(ptrThis->ptrNext! =(pPosition)NULL) { ptrThis=ptrThis->ptrNext; } ptrThis->ptrNext=ptrNew; ptrThis=ptrNew; } ptrThis->sportNum=sportNum+1; printf("\n输入获得第%d名的学生信息",i+1); printf("\n姓名: "); scanf("%s",ptrThis->name); do{ printf("\n学校编号: "); scanf("%d",&ptrThis->schoolNum); if(ptrThis->schoolNum<=0||ptrThis->schoolNum>g_school.nTotalNmOfSch){ printf("\n学校编号必须大于0小于等于%d",g_school.nTotalNmOfSch); err=_FALSE; } else { err=_TRUE; } }while(err==_FALSE); ptrThis->score=i+1; ptrThis->ptrNext=(pPosition)NULL; } } voidSetPositionForAllSports() { inti=0; for(i=0;i { system("cls"); SetPositionForOneSport(i); } return; } char*GetSportName(intsportNum) { inti=0; for(i=0;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计 运动会 数据结构 课程设计