数据结构课程设计-运动会分数统计.doc_第1页
数据结构课程设计-运动会分数统计.doc_第2页
数据结构课程设计-运动会分数统计.doc_第3页
数据结构课程设计-运动会分数统计.doc_第4页
数据结构课程设计-运动会分数统计.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

此文档收集于网络,如有侵权,请联系网站删除成绩 课 程 设 计 报 告 课 程 名 称 专 业 班 级 学 生 姓 名 学 号 设 计 题 目 指 导 教 师 设计起止时间:2010 年6月21日至 2010年 6月25日 运动会分数统计一、问题描述参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20)二、功能要求:1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分,3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;按项目编号查询取得前几名的学校。5) 数据存入文件并能随时查询 6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称三、基本思想 本实验中,对不同的对象采取不同的存储结构,对参赛学校采取链式结构,而对于参赛运动员采取一个结构就可以了。本程序中主要用到线性表的一些基本操作,将各学校信息,运动员信息,项目信息都构造成线性表。具体功能通过主函数分别调用各函数实现。参考本实验的功能要求,本程序分为七个模块:主函数、信息录入函数、信息统计函数、信息查询函数,信息排序函数、存盘函数、读盘函数。信息录入函数有包括学校信息录入函数(包括学校总数、学校名称等),竞赛项目录入函数(男子竞赛项目总数、女子竞赛项目总数、竞赛项目名称、取名次方法和各名次对应的分值)、比赛结果录入函数(各名次的学生信息等)。信息统计不再结果中显示出来,为了信息查询和排序输出。信息查询函数包括按学校编号查询、按学校名称查询、按项目编号查询三个子函数。信息排序函数包括按男子总分排序函数、按女子总分排序函数、按团体总分排序函数。四、详细设计/*单个学校信息描述*/typedef struct _SchoolInfoint SchoolNum; /*学校编号*/char schoolNameMAXLENGTH;/*学校名称*/SchoolInfo,*pSchoolInfo;/*全部参赛学校描述*/typedef struct _SchoolSchoolInfo schInfoArrayMAX_N;int nTotalNmOfSch; /*参赛学校总数*/School,*pSchool;/*某一竞赛项目名次取法*/typedef struct _ScrInfoint total; /*取前多少名*/int* power; /*每一名次对应分值*/ScrInfo,*pScrInfo;/*单个竞赛项目信息描述*/typedef struct _SportInfoint sportNum; /*项目编号*/char sportNameMAXLENGTH; /*项目名称*/SportType sprtTyp; /*项目类型(男子、女子)*/ScoreType scrTyp; /*取名次类型(前5、前3、用户自定义)*/ScrInfo scrInfo; /*名次取法纪录项*/SportInfo,*pSportInfo;/*全部竞赛项目信息描述*/typedef struct _SportSportInfo sportInfoArrayMAX_M+MAX_W;int nTotalNmOfMSprt; /*男子项目总数*/int nTotalNmOfFSprt; /*女子项目总数*/Sport,*pSport;/*比赛成绩记录*/typedef struct _Positionint sportNum; /*竞赛项目编号*/char nameMAXLENGTH; /*获得名次的运动员姓名*/int score; /*得分*/int schoolNum;/ *所属学校编号*/struct _Position *ptrNext;Position,*pPosition;五、源程序:#define _MAINFILE_H_#include stdio.h#include stdlib.h#define MAXLENGTH 20 /*字符串最大长度*/#define MAX_N 20 /*最大参赛学校数目*/#define MAX_M 30 /*男子项目最大数目*/#define MAX_W 20 /*女子项目最大数目*/#define LEN sizeof(Position)#ifndef NULL#define NULL (void*)0#endif /*NULL*/intN, M,W;typedef enum _Bool _TRUE=1,_FALSE=0Bool;typedef enum _SportType _MAN,_WOMAN SportType; /*sport type*/typedef enum _ScoreType _FIVE,_THREE,_CUSTOM ScoreType; /*score type*/typedef struct _SchoolInfoint SchoolNum;/*学校编号*/char schoolNameMAXLENGTH;/*学校名称*/SchoolInfo,*pSchoolInfo;typedef struct _SchoolSchoolInfo schInfoArrayMAX_N;int nTotalNmOfSch;/*参赛学校总数*/School,*pSchool;typedef struct _ScrInfoint total;/*取前多少名*/int* power;/*每一名次对应分值*/ScrInfo,*pScrInfo;typedef struct _SportInfoint sportNum;/*项目编号*/char sportNameMAXLENGTH;/*项目名称*/SportType sprtTyp;/*项目类型(男子、女子)*/ScoreType scrTyp;/*取名次类型(前5、前3、用户自定义)*/ScrInfo scrInfo;/*名次取法纪录项*/SportInfo,*pSportInfo;typedef struct _SportSportInfo sportInfoArrayMAX_M+MAX_W;int nTotalNmOfMSprt;/*男子项目总数*/int nTotalNmOfFSprt;/*女子项目总数*/Sport,*pSport;typedef struct _Positionint sportNum;/*竞赛项目编号*/char nameMAXLENGTH;/*获得名次的运动员姓名*/int score;/*得分*/int schoolNum;/*所属学校编号*/struct _Position *ptrNext;Position,*pPosition;extern int GetPower(int,int);extern void GetReport();extern Bool GetSchoolInfo();extern void GetScoreBySchool();extern char* GetSportName(int);extern Bool SetFMSportTotalNum(int*,int);extern void SetPositionForAllSports();extern void SetPositionForOneSport(int);extern Bool SetSchoolInfo(int*);extern Bool SetSchoolTotalNum(int*);extern Bool SetScoreType(int);extern Bool SetSportInfo();extern void GetSportInfo();extern void GetList();static School g_school;static Sportg_sport;pPositionptrHead,ptrThis,ptrNew;Bool SetFMSportTotalNum(int* pnTotalNmOfFMSprt,int type/*0:男子;1:女子*/)if (pnTotalNmOfFMSprt=NULL) return _FALSE;system(cls);printf(n- - - -);if (type=0) /*男子*/printf(n请输入男子竞赛项目总数:);scanf(%d,pnTotalNmOfFMSprt);if (*pnTotalNmOfFMSprtMAX_M) printf(n学校总数必须大于0小于%d,MAX_M);return _FALSE;elsereturn _TRUE;else/*女子*/printf(n请输入女子竞赛项目总数:);scanf(%d,pnTotalNmOfFMSprt);if (*pnTotalNmOfFMSprtMAX_W) printf(n学校总数必须大于0小于%d,MAX_W);return _FALSE;elsereturn _TRUE;Bool SetScoreType(int n/*项目编号-1*/)char ch;Bool ret=_FALSE;Bool err=_FALSE;int totalPrv,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.sportInfoArrayn.scrTyp=_FIVE;g_sport.sportInfoArrayn.scrInfo.total=5;if (g_sport.sportInfoArrayn.scrInfo.power=(int*)malloc(sizeof(int)*5)=NULL) printf(n memory err);return _FALSE;g_sport.sportInfoArrayn.scrInfo.power0=7;g_sport.sportInfoArrayn.scrInfo.power1=5;g_sport.sportInfoArrayn.scrInfo.power2=3;g_sport.sportInfoArrayn.scrInfo.power3=2;g_sport.sportInfoArrayn.scrInfo.power4=1;ret=_TRUE;break;case 1:/*取前3名*/g_sport.sportInfoArrayn.scrTyp=_THREE;g_sport.sportInfoArrayn.scrInfo.total=3;if (g_sport.sportInfoArrayn.scrInfo.power=(int*)malloc(sizeof(int)*3)=NULL) printf(n memory err);return _FALSE;g_sport.sportInfoArrayn.scrInfo.power0=5;g_sport.sportInfoArrayn.scrInfo.power1=3;g_sport.sportInfoArrayn.scrInfo.power2=2;ret=_TRUE;break;case 2:g_sport.sportInfoArrayn.scrTyp=_CUSTOM;do printf(n请输入本项目取前多少名:);scanf(%d,&totalPrv);if (totalPrv=0) printf(n输入有误。只能大于0);elseerr=_TRUE; while(err=_FALSE);g_sport.sportInfoArrayn.scrInfo.total=totalPrv;if (g_sport.sportInfoArrayn.scrInfo.power=(int*)malloc(sizeof(int)*totalPrv)=NULL) printf(n memory err);return _FALSE;for(i=0;itotalPrv;i+)err=_FALSE;do printf(n请输入该项目第%d名的分值:,i+1);scanf(%d,&power);if (power=0) printf(n输入有误。只能大于0);elseerr=_TRUE; while(err=_FALSE);g_sport.sportInfoArrayn.scrInfo.poweri=power;ret=_TRUE;break;default:/*错误的输入*/printf(n错误的选择!);ret=_FALSE; while(ret=_FALSE);return ret;Bool SetSportInfo()int i=0;Bool err=_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;ig_sport.nTotalNmOfFSprt+g_sport.nTotalNmOfMSprt;i+)g_sport.sportInfoArrayi.sportNum=i+1;if (i+1=M) g_sport.sportInfoArrayi.sprtTyp=_MAN;elseg_sport.sportInfoArrayi.sprtTyp=_WOMAN; system(cls);printf(n请输入编号为%d的竞赛项目名称:,i+1);scanf(%s,g_sport.sportInfoArrayi.sportName);g_sport.sportInfoArrayi.sportNameMAXLENGTH-1=0; SetScoreType(i);return _TRUE;Bool SetSchoolTotalNum(int* pnTotalNmOfSch)Bool ret=_FALSE;if (pnTotalNmOfSch=NULL) return _FALSE;while (ret=_FALSE) system(cls);printf(n- - - -);printf(n请输入参加运动会的学校总数:);scanf(%d,pnTotalNmOfSch);if (*pnTotalNmOfSchMAX_N) printf(n学校总数必须大于0小于%dn,MAX_N);printf(nn按任意健继续);getch();ret=_FALSE;elseret=_TRUE;return _TRUE;Bool SetSchoolInfo(int* pnTotalNmOfSch)int i=0;if (!SetSchoolTotalNum(pnTotalNmOfSch) printf(nerr!);return _FALSE;elseg_school.nTotalNmOfSch=*pnTotalNmOfSch;for(i=0;ig_school.nTotalNmOfSch;i+)g_school.schInfoArrayi.SchoolNum=i+1;printf(n请输入编号为%d的学校名称:,i+1);scanf(%s,g_school.schInfoArrayi.schoolName);g_school.schInfoArrayi.schoolNameMAXLENGTH-1=0;/*截断多余字符*/return _TRUE;Bool GetSchoolInfo()int i=0;printf(n共有%d个学校参赛,g_school.nTotalNmOfSch);for(i=0;ig_school.nTotalNmOfSch;i+)printf(n学校编号:%d,g_school.schInfoArrayi.SchoolNum);printf( 校名:%s,g_school.schInfoArrayi.schoolName);return _TRUE;void SetPositionForOneSport(int sportNum/*项目编号-1*/)int i=0,j=0;Bool err=_FALSE;printf(n- - - -);printf(n填写项目%d的比赛结果,sportNum+1);for(i=0;iptrNext!=(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-schoolNumschoolNumg_school.nTotalNmOfSch) printf(n学校编号必须大于0小于等于%d,g_school.nTotalNmOfSch);err=_FALSE;elseerr=_TRUE; while(err=_FALSE);ptrThis-score=i+1;ptrThis-ptrNext=(pPosition)NULL;void SetPositionForAllSports()int i=0;for(i=0;ig_sport.nTotalNmOfFSprt+g_sport.nTotalNmOfMSprt;i+)system(cls);SetPositionForOneSport(i);return;char* GetSportName(int sportNum)int i=0;for(i=0;ig_sport.nTotalNmOfFSprt+g_sport.nTotalNmOfMSprt;i+)if (sportNum=g_sport.sportInfoArrayi.sportNum) break;if (i=g_sport.nTotalNmOfFSprt+g_sport.nTotalNmOfMSprt) return NULL;return g_sport.sportInfoArrayi.sportName;int GetPower(int sportNum/*项目编号*/,int score/*名次*/)int i=0;for(i=0;ig_sport.nTotalNmOfFSprt+g_sport.nTotalNmOfMSprt;i+)if (sportNum=g_sport.sportInfoArrayi.sportNum) break;if (i=g_sport.nTotalNmOfFSprt+g_sport.nTotalNmOfMSprt) return (int)-1;return g_sport.sportInfoArrayi.scrInfo.powerscore-1;void GetScoreBySchool()int schnum;if (g_school.nTotalNmOfSchg_school.nTotalNmOfSch|schnumschoolNum=schnum) printf(n%5d,ptrThis-sportNum);/*项目号*/printf(%20s,GetSportName(ptrThis-sportNum);/*项目名称*/printf(%5d,ptrThis-score);/*名次*/printf(%20s,ptrThis-name);/*姓名*/printf(%5d,GetPower(ptrThis-sportNum,ptrThis-score);ptrThis=ptrThis-ptrNext; while(ptrThis!=(pPosition)NULL);void GetReport()int i,j,manTotal=0,womTotal=0,Total=0;/*男子团体总分,女子团体总分,团体总分*/if(ptrHead=(pPosition)NULL)printf(n没有比赛结果);return;ptrThis=ptrHead;printf(n团体总分报表:);printf(nn学校编号 学校校名 男子团体总分 女子团体总分 团体总分);printf(n- - - - -);for(i=0;ischoolNum=g_school.schInfoArrayi.SchoolNum)for(j=0;jsportNum=g_sport.sportInfoArrayj.sportNum) if (g_sport.sportInfoArrayj.sprtTyp=_MAN) manTotal+=g_sport.sportInfoArrayj.scrInfo.powerptrThis-score-1;else womTotal+=g_sport.sportInfoArrayj.scrInfo.powerptrThis-score-1;ptrThis=ptrThis-ptrNext; while(ptrThis!=(pPosition)NULL);Total+=manTotal+womTotal;printf(n%5d,g_school.schInfoArrayi.SchoolNum);printf(%20s,g_school.schInfoArrayi.schoolName);printf(%10d,manTotal);printf(%15d,womTotal);printf(%15dn,Total);void GetSportInfo()int i,j;system(cls);printf(n您输入的比赛项目信息如下:);printf(n- - - -);for(i=0;ig_sport.nTotalNmOfFSprt+g_sport.nTotalNmOfMSprt;i+)printf(n项目编号:%d 项目名称:%s,g_sport.sportInfoArrayi.sportNum,GetSportName(g_sport.sportInfoArrayi.sportNum);for(j=0;jg_sport.sportInfoArrayi.scrInfo.total;j+)printf(n 第%d名 得分:%d,j+1,g_sport.sportInfoArrayi.scrInfo.powerj);printf(n按任意键继续);getch();void GetList()int i=0,j;int n=0;if(ptrHead=(pPosition)NULL)printf(n没有比赛结果);return;ptrThis=ptrHead;doprintf(n第%d个结点:,n+);for(i=0;isportNum=g_sport.sportInfoArrayi.sportNum) break;if (i=g_sport.nTotalNmOfFSprt+g_sport.nTotalNmOfMSprt) return;printf(n 项目编号:%d,ptrThis-sportN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论