《数据结构》 题 目
课程设计
运动会分数统计
学 院 计算机与软件学院
专 业 网络工程 班 级 2012级1班
小组组长 王颖
小组成员 邹艳云 周彤彤 胡啸 张玉洁指导教师 吴婷婷
起止时间 2013.12.23~2013.12.26
1. 数据结构课程设计任务书
1.1设计目标
运用数据结构和C语言的知识实现运动会的分数统计 1.2 课题描述
参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,
和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) 1.3任务要求
1).可以输入各个项目的前三名或前五名的成绩; 2).可以统计各学校总分;
3).可以按学校编号、学校总分、男女团体总分排序输出;
4).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得
前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入
学校的名称,运动项目的名称) 1.4输出形式
有中文提示,各学校分数为整形 1.5界面要求
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 1.6存储结构
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 1.7测试数据
1.全部合法数据; 2.整体非法数据; 3.局部非法数据。
进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的材料中写明。
2.总体设计
运动会分数统计 A. 江浦三校运动会比赛成绩输入 B. 江浦三校运动会比赛成绩输出
a. 按学校编号输出:编号1为南京信息工程大学;编号2为南京工业大学;编号3为南京审计学院 b. 按学校总分输出 c. 按男团总分输出 d. 按女团总分输出
C.查询比赛成绩
a.按学校编号查询:编号1为南京信息工程大学;编号2为南京工业大
学;编号3为南京审计学院
b.按项目编号查询:编号1为男子乒乓球;编号2为男子羽毛球;编号3
为女子乒乓球;编号4为女子羽毛球
D.调用统计结果.
3.详细设计
3.1程序中算法的具体说明
a.采用结构体类型数组存储 typedef struct { int itemnum; //项目编号 int top; //取名次的数目 int range[5]; //名次 int mark[5]; //分数
}itemnode; //定义项目结点的类型
typedef struct { int schoolnum; //学校编号 int score; //学校总分 int mscore; //男团体总分 int wscore; //女团体总分
itemnode c[m+w]; //项目数组 }headnode;//定义头结点类型
headnode h[n];//定义一个头结点数组 b.采用数据文件的存储和调用
void writedata() //把数据存储在文件中 { FILE *report; int i; if((report=fopen(\"sportsdata.txt\ { printf(\"不能打开文件\\n\"); exit(1); } for(i=0;i void readdata() //读出文件中数据的函数 { FILE *report; int i,j,k,s; if((report=fopen(\"sportsdata.txt\ { printf(\"file can not be opened\\n\"); exit(1); } for(i=0;i printf(\"******学校总分:\"); fread(&k,sizeof(int),1,report); printf(\"%d\\n\ printf(\"******男团总分:\"); fread(&k,sizeof(int),1,report); printf(\"%d\\n\ printf(\"******女团总分:\"); fread(&k,sizeof(int),1,report); printf(\"%d\\n\ printf(\"\\n\\n\\n\"); getch(); for(j=0;j printf(\"******所取名次数量:\"); fread(&k,sizeof(int),1,report); printf(\"%d\\n\ for(s=0;s<5;s++) { fread(&k,sizeof(int),1,report); if(k!=0) printf(\"******名次:\"), printf(\"%d\\n\ } for(s=0;s<5;s++) { fread(&k,sizeof(int),1,report); if(k!=0) printf(\"******分数:\"), printf(\"%d\\n\ } } printf(\"\\n\\n\\n\"); getch(); } fclose(report); //关闭文件 } //按照读一个数据就输出一个数据的方式显示数据内容 c.核心算法:冒泡排序 for(i=0;i remember[j]=remember[j+1]; remember[j+1]=k;} } 3.2算法的设计思想 本程序主要是使用结构体数组来实现操作。一个运动会包括运动项目和参加运动会的学校。因此构造结构体itemnode和headnode。为了操作的方便,设计了一个总目录,选择相应序号进入各个操作,并有错误提示,每完成一个操作程序会提示选择返回目录或退出程序,对于学校总分以及男女团总分的排序使用了冒泡排序。对于各项数据,采用了C语言中存储块读写函数fread和fwrite,实现了运动会分数信息的存储与输出。每个操作前都有操作指南,易于使用。 4.源程序与执行结果 4.1源程序 #include #define m 2//男子项目数目 #define w 2//女子项目数目 #define null 0 typedef struct { int itemnum; //项目编号 int top; //取名次的数目 int range[5]; //名次 int mark[5]; //分数 }itemnode; //定义项目结点的类型 typedef struct { int schoolnum; //学校编号 int score; //学校总分 int mscore; //男团体总分 int wscore; //女团体总分 itemnode c[m+w]; //项目数组 }headnode;//定义头结点类型 headnode h[n];//定义一个头结点数组 void inputinformation() //输入信息,建立系统 { int i,j,k,s; for(i=0;i scanf(\"%d\ //输入头结点信息 printf(\"*****编号1为男子乒乓球;编号2为男子羽毛球*****\\n*****编号3为女子乒乓球;编号4为女子羽毛球*****\\n\"); for(j=0;j printf(\"*****获得几个名次:\"); scanf(\"%d\ //输入项目信息 for(s=0;s<5;s++) h[i].c[j].range[s]=0, h[i].c[j].mark[s]=0; //初始化排名和分数 for(s=0;s switch(h[i].c[j].range[s]) { case 0: h[i].c[j].mark[s]=0; break; case 1: h[i].c[j].mark[s]=5; break; case 2: h[i].c[j].mark[s]=3; break; case 3: h[i].c[j].mark[s]=2; break; } else switch(h[i].c[j].range[s]) { case 0: h[i].c[j].mark[s]=0; break; case 1: h[i].c[j].mark[s]=7; break; case 2: h[i].c[j].mark[s]=5; break; case 3: h[i].c[j].mark[s]=3; break; case 4: h[i].c[j].mark[s]=2; break; case 5: h[i].c[j].mark[s]=1; break; } h[i].score=h[i].score+h[i].c[j].mark[s]; //按取前三名还是取前五名分别记分 if(j<=m-1) h[i].mscore=h[i].mscore+h[i].c[j].mark[s]; //是男子项目则记到男子分数里面去 else h[i].wscore=h[i].wscore+h[i].c[j].mark[s]; //是女子项目则记到女子项目里面去 } printf(\"\\n\"); } } } void output() //输出函数 { int c,i,j,k; int remember[n]; int sign; printf(\"*****编号1为南京信息工程大学;编号2为南京工业大学;编号3为南京审计学院*****\\n\"); printf(\"*****编号1为男子乒乓球;编号2为男子羽毛球*****\\n*****编号3为女子乒乓球;编号4为女子羽毛球*****\\n\"); do { printf(\"*******************1.按学校编号输出.*******************\\n\"); printf(\"*******************2.按学校总分输出.*******************\\n\"); printf(\"*******************3.按男团总分输出.*******************\\n\"); printf(\"*******************4.按女团总分输出.*******************\\n\"); printf(\"\\n\\n******************* 请选择编号*************************\\n\\n:\"); scanf(\"%d\ switch(c) { case 1: for(i=0;i } // 用冒泡排序方法,用辅助数组记住头结点下标 for(i=0;i } //按学校总分输出 break; case 3: for(i=0;i {k=remember[j];remember[j]=remember[j+1];remember[j+1]=k;} } for(i=0;i for(i=0;i printf(\"请选择 1 继续,0 跳出\\n\"); scanf(\"%d\ }while(sign==2); //循环执行输出语句 } void inquiry() //查询函数 { int c; int i,j,k,s; printf(\"\\n*****1:按学校编号查询\\n\"); printf(\"\\n*****2:按项目编号查询\\n\"); printf(\"\\n\\n*****请选择查询方式:\"); //提供两种查询方式 scanf(\"%d\ switch(c) { case 1: do { printf(\"要查询的学校编号:\"); scanf(\"%d\ if(i>n) printf(\"错误:这个学校没有参加此次运动会!\\n\\n\\n\"); else { printf(\"要查询的项目编号:\"); scanf(\"%d\ if(j>m+w||j==0) printf(\"此次运动会没有这个项目\\n\\n\\n\"); //学校编号超出范围,则输出警告 else { printf(\"这个项目取前 %d名,该学校的成绩如下:\\n\ for(k=0;k<5;k++) if(h[i-1].c[j-1].range[k]!=0) printf(\"名次:%d\\n\//输出要查询学校项目的成绩 } } printf(\"请选择 1 继续 , 0 跳出\\n\"); scanf(\"%d\ printf(\"\\n\\n\\n\"); }while(s==2); //循环执行输出语句 break; case 2: do { printf(\"要查询的项目编号:\"); scanf(\"%d\ if(s>m+w||s==0) printf(\"此次运动会不包括这个项目.\\n\\n\\n\"); //项目编号超出范围则输出警告 else { printf(\"该项目取前 %d名,取得名次的学校\\n\ for(i=0; i void writedata() //把数据存储在文件中 { FILE *report; int i; if((report=fopen(\"sportsdata.txt\ { printf(\"不能打开文件\\n\"); exit(1); } for(i=0;i void readdata() //读出文件中数据的函数 { FILE *report; int i,j,k,s; if((report=fopen(\"sportsdata.txt\ { printf(\"file can not be opened\\n\"); exit(1); } for(i=0;i printf(\"******学校总分:\"); fread(&k,sizeof(int),1,report); printf(\"%d\\n\ printf(\"******男团总分:\"); fread(&k,sizeof(int),1,report); printf(\"%d\\n\ printf(\"******女团总分:\"); fread(&k,sizeof(int),1,report); printf(\"%d\\n\ printf(\"\\n\\n\\n\"); getch(); for(j=0;j printf(\"******所取名次数量:\"); fread(&k,sizeof(int),1,report); printf(\"%d\\n\ for(s=0;s<5;s++) { fread(&k,sizeof(int),1,report); if(k!=0) printf(\"******名次:\"), printf(\"%d\\n\ } for(s=0;s<5;s++) { fread(&k,sizeof(int),1,report); if(k!=0) printf(\"******分数:\"), printf(\"%d\\n\ } } printf(\"\\n\\n\\n\"); getch(); } fclose(report); //关闭文件 } //按照读一个数据就输出一个数据的方式显示数据内容 void main() { int c; printf(\"======================欢迎使用======================\\n\"); printf(\"\\n\\n*****************运动会分数统计系统********************\\n\"); printf(\"\\n\\n********************1.输入信息*************************\\n\"); printf(\"********************2.输出信息*************************\\n\"); printf(\"********************3.查询信息*************************\\n\"); printf(\"********************4.调用信息*************************\\n\"); printf(\"********************5.退出系统*************************\\n\\n\\n\"); printf(\"================================================\\n\\n\"); printf(\"********请选择要实现步骤的编号:\\n\\n\"); scanf(\"%d\ switch(c) { case 1: inputinformation();writedata();readdata();main(); case 2: output();main(); case 3: inquiry();main(); case 4: readdata();main(); case 5: exit(0); default: exit(0); } } 4.2执行结果 5.思想总结 经过小组五人四天坚持不懈的努力,我们终于能够按时按要求很好地完成 了我们的课程设计。虽说这只是一个小小的系统编译,却是凝结了我们小组每个人的智慧与付出,而且过程也并不轻松。 这次的课程设计是编写一个运动会分数统计的的小系统,这里用到了大量的 排序算法,以及C语言中文件的存储和调用,还有各种循环语句,还包括结构体的运用,整个过程不可谓不繁琐。尤其当我们遭遇瓶颈时,每个人都头昏脑涨,想不出对策时,那种苦恼和郁闷。但我们一直坚持下来,并最终顺利完成任务,与我们小组各成员间的配合及相互鼓励是分不开的。程序编译是个复杂的过程,竭一人之智往往很难完成,这时团队合作的优势便可见一斑。每个人分工明确,有助于更快更好地完成任务。 在编写过程,我们小组每个人都或多后少地发现了自身的不足,以及对基本知识掌握的熟练程度的不够,这次的课程设计让我们自省很多,并提高很多。 小组长:20121346003王颖 小组成员: 20121346020 张玉洁 20121346021 邹艳芸 20121346023 周彤彤 20121346024 胡啸
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务