《数据结构》课程设计报告运动会分数统计

上传人:无*** 文档编号:44587332 上传时间:2021-12-05 格式:DOC 页数:20 大小:379KB
返回 下载 相关 举报
《数据结构》课程设计报告运动会分数统计_第1页
第1页 / 共20页
《数据结构》课程设计报告运动会分数统计_第2页
第2页 / 共20页
《数据结构》课程设计报告运动会分数统计_第3页
第3页 / 共20页
点击查看更多>>
资源描述
数据结构课程设计报告设计题目:运动会分数统计 题目:运动会分数统计一、 问题描述参加运动会有n个学校,学校编号为1n.比赛分成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). 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。三、算法思想 本课设要求输入信息,统计分数,执行排序与查找功能,在要求中没有在建立数据之后进行插入和删除操作,而在排序和查找过程中有许多的随机读取数据操作,因此使用顺序结构而不用链表。由于各个要求属性具有一定的联系,在定义数据时使用结构体和结构体数组来存储信息数据。考虑到程序的要求在设计函数时将学校个数和项目个数设计为可变的数据,为方便使用设计菜单函数(menu),而由于要求将信息存储在文件中故设计文件的存储(savetofile)与读取函数(readfromfile),信息输入函数(input)在输入基本信息后由系统统计总分的内容并全部存入文件file中,在接下来的函数中开始都需要读取文件中的信息,信息的输出(output)输出输入函数中统计后的各项信息,在排序输出(sortput)中使用冒泡排序法进行不同关键字的排序,查询函数(search)采用顺序表的查找来完成。四、数据结构(1) 项目数据表:运动会系统先制定本次运动会所需的参赛项目。本数据表根据要求设计存储每个项目的编号、要取的名次、各个名次名称及各名次对应的分数。用于对以后项目情况的统计已及查询。其中inum,top,range由输入信息输入,而mark有range和top决定。typedef struct int inum; /*项目编号*/ int top; /*取名次的数目*/ int range5; /*名次*/ int mark5; /*分数*/itemnode; /*存放项目信息*/(2) 学校数据表:本数据表根据要求储存了各个参赛学校的总体情况,包括学校的编号、学校总分、男子团体总分、女子团体总分,并且包括项目数据数组tn。其中snum和tn中部分数据由输入信息输入,而其他三项内容score,mscore,wscore将由系统进行自动统计。typedef struct int snum; /*学校编号*/ int score; /*学校总分*/ int mscore; /*男团体总分*/ int wscore; /*女团体总分*/ itemnode tm0+w0; /*项目数组*/snode; /*存放学校信息*/snode an0; /* 定义一个学校数组*/ 这二个数据表相关联接,an中包括tn,形成一个整体。五、模块划分1、Void menu(int n,int m,int w) 功能是提供界面窗口2、Void savetofile() 功能是保存输入的运动会信息到file文件3、Void readfromfile() 功能是从file文件中读取运动会信息4、Void input(int n,int m,int w) 功能是输入信息并统计5、Void output(int n,int m,int w) 功能是按学校、项目输出统计信息6、Void sortput(int n,int m,int w) 功能是按四种方法排序并输出结果7、Void search(int n,int m,int w) 功能是按两种方法查询并输出结果六、源程序#include#include#include #define n0 20 /*学校最大数目*/ #define m0 20 /*男子项目最大数目*/ #define w0 20 /*女子项目最大数目*/typedef struct int inum; /*项目编号*/ int top; /*取名次的数目*/ int range5; /*名次*/ int mark5; /*分数*/itemnode; /*存放项目信息*/typedef struct int snum; /*学校编号*/ int score; /*学校总分*/ int mscore; /*男团体总分*/ int wscore; /*女团体总分*/ itemnode tm0+w0; /*项目数组*/snode; /*存放学校信息*/snode an0; /* 定义一个学校数组*/void menu(int n,int m,int w) /*菜单函数*/ int c; void input(int n,int m,int w);void output(int n,int m,int w);void sortput(int n,int m,int w);void search(int n,int m,int w);printf(ttt欢迎使用ttttnn); printf(t*运动会分数统计系统*nn); printf(tt*1.信息输入*n); printf(tt*2.统计输出*n); printf(tt*3.排序输出*n); printf(tt*4.信息查询*n); printf(tt*0.退出系统*nn); printf(=nn);printf(请选择要实现步骤的编号(04):); scanf(%d,&c);switch(c) case 1: input(n,m,w);break; case 2: output(n,m,w);break; case 3: sortput(n,m,w);break; case 4: search(n,m,w);break; case 0:printf(谢谢使用,再见!n); exit(0); default: printf(输入错误,请重试!n);menu(n,m,w); void savetofile() /*信息存入文件file*/FILE *fp; int i; if(fp=fopen(file.txt,w)=NULL) printf(cannot open the filen); return; for(i=0;in0;i+) if(ai.snum!=0) if(fwrite(&ai,sizeof(snode),1,fp)!=1) printf(file write errorn); return; fclose(fp);void readfromfile() /*信息从文件file中取出*/ int i;FILE *fp; if(fp=fopen(file.txt,rb)=NULL) printf(cannot open the filen); return; for(i=0;in0;i+) fread(&ai,sizeof(snode),1,fp); fclose(fp);void input(int n,int m,int w) /*信息输入*/int i,j,s,k,q=0; for(i=0;in;i+) printf(学校编号:); scanf(%d,&ai.snum); /*输入学校信息*/ for(j=0;jm+w;j+) printf(项目编号:); scanf(%d,&ai.tj.inum); printf(取名次个数(3或者5):); scanf(%d,&ai.tj.top); printf(获得名次个数(15):); scanf(%d,&k); /*输入项目信息*/ for(s=0;sk;s+) printf(所获名次(15):); scanf(%d,&ai.tj.ranges); /*输入所获名次信息*/ printf(n); for(i=0;in;i+) ai.score=0; ai.mscore=0; ai.wscore=0; /*初始化分数*/for(i=0;in;i+) for(j=0;jm+w;j+) for(s=0;s5;s+) if(ai.tj.top=3) switch(ai.tj.ranges) case 0: ai.tj.marks=0; break; case 1: ai.tj.marks=5; break; case 2: ai.tj.marks=3; break; case 3: ai.tj.marks=2; break; else if(ai.tj.top=5) switch(ai.tj.ranges) case 0: ai.tj.marks=0; break; case 1: ai.tj.marks=7; break; case 2: ai.tj.marks=5; break; case 3: ai.tj.marks=3; break; case 4: ai.tj.marks=2; break; case 5: ai.tj.marks=1; break; else printf(信息有误!);printf(n);exit(0); ai.score=ai.score+ai.tj.marks; /*记学校总分*/ if(j=m-1) ai.mscore=ai.mscore+ai.tj.marks; /*记男子团体总分*/ else ai.wscore=ai.wscore+ai.tj.marks; /*记女子团体总分*/while(q!=1)printf(输入完毕!返回? 1是 2否); /*返回菜单*/ scanf(%d,&q); printf(n);printf(n);savetofile(); menu(n,m,w);void output(int n,int m,int w) /*统计输出*/ readfromfile();int i,j,s,q=0; for(i=0;in;i+) /*显示结果*/printf(学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%dn,ai.snum,ai.score,ai.mscore,ai.wscore); for(j=0;jm+w;j+) printf(项目编号:%d 所取名次数量:%dn,ai.tj.inum,ai.tj.top); for(s=0;s5;s+) if(ai.tj.ranges!=0) printf(名次:%d 分数:%dn,ai.tj.ranges,ai.tj.marks);printf(n);printf(n);while(q!=1)printf(统计完毕!返回? 1是 2否); /*返回菜单*/ scanf(%d,&q); printf(n);printf(n); menu(n,m,w);void sortput(int n,int m,int w) /*排序输出函数*/ readfromfile();int c,i,j,k,q=0;int tempn0; printf(t*排序输出系统*nn); printf(tt*1.按学校编号输出*n); printf(tt*2.按学校总分输出*n); printf(tt*3.按男团总分输出*n); printf(tt*4.按女团总分输出*n); printf(=nn);do printf(请选择要实现功能的编号(14):); scanf(%d,&c);switch(c) case 1: for(i=0;in;i+) tempi=i; for(i=0;in;i+) for(j=i+1;jaj.snum) k=tempi; tempi=tempj; tempj=k; /* 用冒泡排序方法排序*/ for(i=0;in;i+) printf(学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%dn,atempi.snum,atempi.score,atempi.mscore,atempi.wscore); /*按学校编号输出*/ break; case 2: for(i=0;in;i+)tempi=i; for(i=0;in;i+) for(j=i+1;jn;j+)if(atempi.scoreaj.score) k=tempi; tempi=tempj; tempj=k; /* 用冒泡排序方法排序*/ for(i=0;in;i+) printf(学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%dn,atempi.snum,atempi.score,atempi.mscore,atempi.wscore); /*按学校总分输出*/ break; case 3: for(i=0;in;i+)tempi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(atempi.mscoreaj.mscore) k=tempi; tempi=tempj; tempj=k; /* 用冒泡排序方法排序*/ for(i=0;in;i+) printf(学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%dn,atempi.snum,atempi.score,atempi.mscore,atempi.wscore); /*按男团总分输出*/ break; case 4: for(i=0;in;i+) tempi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(atempi.wscoreaj.wscore) k=tempi; tempi=tempj; tempj=k; /* 用冒泡排序方法排序*/ for(i=0;in;i+) printf(学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%dn,atempi.snum,atempi.score,atempi.mscore,atempi.wscore); /*按女图总分输出*/ break; default: printf(输入错误,请重试!n);printf(请选择 1 返回主菜单 0继续); /*返回菜单或继续排序*/scanf(%d,&q);printf(n);while(q=0);printf(n);if(q!=0)menu(n,m,w);void search(int n,int m,int w) /*查询函数*/ readfromfile();int c,i,j,k,d,l,q=0; printf(t*查询系统*nn); printf(tt*1.按学校编号查询*n); printf(tt*2.按项目编号查询*n); printf(=nn);do k=-1;d=-1;l=-1;printf(请选择要实现功能的编号(12):); scanf(%d,&c); switch(c) case 1: printf(要查询的学校编号:); /*查找学校编号下标*/scanf(%d,&c);for(i=0;in;i+)if(ai.snum=c) k=i;if(k=-1)printf(错误:这个学校没有参加此次运动会!n); elseprintf(要查询的项目编号:); /*查找项目编号下标*/ scanf(%d,&c);for(j=0;jm+w;j+)if(ak.tj.inum=c) d=j;if(d=-1) printf(此次运动会没有这个项目n); else /*显示结果*/ printf(这个项目取前 %d名,该学校的成绩如下:n, ak.td.top); for(i=0;i5;i+) if(ak.td.rangei!=0) printf(名次:%dn,ak.td.rangei); break; case 2: printf(要查询的项目编号:); /*查找项目编号下标*/ scanf(%d,&c); for(i=0;in;i+)for(j=0;jm+w;j+) if(ai.tj.inum=c)l=j; if(l=-1) printf(此次运动会没有这个项目n); else /*显示结果*/ printf(该项目取前 %d名,取得名次的学校n,a0.tl.top);for(i=0; in;i+) for(j=0;j5;j+) if(ai.tl.rangej!=0) printf(学校编号:%d,名次:%dn,ai.snum,ai.tl.rangej); break; default: printf(输入错误,请重试!n);printf(请选择 1 返回主菜单 0继续); /*返回菜单或继续查询*/ scanf(%d,&q); printf(n);while(q=0);printf(n); if(q!=0)menu(n,m,w);void main() /*主函数*/ int n,m,w; printf(ttt欢迎使用ttttnn); printf(t*运动会分数统计系统*nn);printf(请先输入运动会主要信息n); /*设计运动会主要数据个数*/ printf(输入学校个数:); scanf(%d,&n);printf(输入男子项目个数:); scanf(%d,&m);printf(输入女子项目个数:); scanf(%d,&w);menu(n,m,w);七、测试数据测试取学校个数为3,男子项目个数2.女子项目个数1项目学校编号1(男)编号2(男)编号3(女)取前3取前5取前5编号1名次31、43、4编号2名次22、51、5编号3名次132八、运行及测试情况1、主菜单界面2、输入信息运行测试(部分数据)3、分数统计运行测试4、排序统计输出运行测试5、查询输出运行测试6、退出系统运行测试九、课设总结通过为期一周的课程设计,我对数据结构这门课程有了更深一步的了解。虽然是应用C语言来编写程序,但却深刻的体现了数据结构对编程的重要性。这次课程设计运用C语言与数据结构知识,编写一个运动会分数统计系统。其中遇到了不少问题,平时自己在编写一些普通常见的程序时只是运用单一的知识而课程设计却需要将各个方面的内容联系结合,例如文件与程序的结合,输入、输出、统计、查找的综合应用等,因此真正的程序设计必须先有一个正确的算法思想,运用正确的数据结构和编程语言,灵活的运用并联系几个方面的内容。通过课设也使我认识到,要学好编程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西19
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!