
运动会分数统计数据结构课程设计(含源代码).doc
《运动会分数统计数据结构课程设计(含源代码).doc》由会员分享,可在线阅读,更多相关《运动会分数统计数据结构课程设计(含源代码).doc(30页珍藏版)》请在咨信网上搜索。
计算机学院信管专业 数据结构课程设计 题 目: 运动会分数统计 班 级: 姓 名: 学 号: 同组人姓名: 起 迄 日 期: 课程设计地点: 指导教师: 评阅意见: 成绩评定: 评阅人: 日期: 完成日期:2013年12月 目录 1、需求分析……………………………………………………02 2、概要设计……………………………………………………03 3、详细设计……………………………………………………04 4、调试分析和测试结果………………………………………05 5、总结…………………………………………………………13 6、参考文献……………………………………………………14 7、致谢…………………………………………………………14 8、附录…………………………………………………………14 1、需求分析 (1)任务: 参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) (2)功能要求: a).可以输入各个项目的前三名或前五名的成绩; b).能统计各学校总分, c).可以按学校编号、学校总分、男女团体总分排序输出; d).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 (3)规定: 输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称) (4)输出形式: 有中文提示,各学校分数为整形 (5)界面要求: 有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 (6)存储结构: 学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。 (7)测试数据: 要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 2、概要设计 (1)文字分析 本课设要求输入信息,统计分数,执行排序与查找功能,在要求中没有在建立数据之后进行插入和删除操作,而在排序和查找过程中有许多的随机读取数据操作,因此使用顺序结构而不用链表。由于各个要求属性具有一定的联系,在定义数据时使用结构体和结构体数组来存储信息数据。考虑到程序的要求在设计函数时将学校个数和项目个数设计为可变的数据,为方便使用设计菜单函数(menu),而由于要求将信息存储在文件中故设计文件的存储(savetofile)与读取函数(readfromfile),信息输入函数(input)在输入基本信息后由系统统计总分的内容并全部存入文件file中,在接下来的函数中开始都需要读取文件中的信息,信息的输出(output)输出输入函数中统计后的各项信息,在排序输出(sortput)中使用冒泡排序法进行不同关键字的排序,查询函数(search)采用顺序表的查找来完成。 开始 进入主菜单 菜单选项(0—4) 1.信息输入 2.统计输出 3.排序输出 4.信息查询 5.退出 结束 3、详细设计 (1)项目数据表: 运动会系统先制定本次运动会所需的参赛项目。本数据表根据要求设计存储每个项目的编号、要取的名次、各个名次名称及各名次对应的分数。用于对以后项目情况的统计已及查询。其中inum,top,range由输入信息输入,而mark有range和top决定。 typedef struct { int inum; /*项目编号*/ int top; /*取名次的数目*/ int range[5]; /*名次*/ int mark[5]; /*分数*/ }itemnode; /*存放项目信息*/ (2)学校数据表: 本数据表根据要求储存了各个参赛学校的总体情况,包括学校的编号、学校总分、男子团体总分、女子团体总分,并且包括项目数据数组t[n]。其中snum和t[n]中部分数据由输入信息输入,而其他三项内容score,mscore,wscore将由系统进行自动统计。 typedef struct { int snum; /*学校编号*/ int score; /*学校总分*/ int mscore; /*男团体总分*/ int wscore; /*女团体总分*/ itemnode t[M+W]; /*项目数组*/ }snode; /*存放学校信息*/ snode a[N]; /* 定义一个学校数组*/ 这二个数据表相关联接,a[n]中包括t[n],形成一个整体。 (3)模块划分 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) 功能是按两种方法查询并输出结果 4、调试分析与测试结果 (1)测试数据 测试取学校个数为3,男子项目个数2.女子项目个数1 项目 学校 编号1(男) 编号2(男) 编号3(女) 取前3 取前5 取前5 编号1 名次 3 1、4 3、4 编号2 名次 2 2、5 1、5 编号3 名次 1 3 2 (2)测试结果 1、主菜单界面 2、信息输入运行测试 a).信息输入 b).输入完成 3、统计输出运行测试 a).统计输出 b).统计输出完毕 4、排序输出运行测试 a).选择排序输出形式 b).按学校编号输出 c).按学校总分输出 d).按男团总分输出 d).按女团总分输出 5、信息查询运行测试 a).选择信息查询方式 b).按学校编号查询 c).按项目编号查询 6、退出系统运行测试 5、总结 通过为期四天的课程设计,我对《数据结构》这门课程有了更深一步的了解,使我对《数据结构》这门课程掌握以及运用更加灵活。虽然是应用C语言来编写程序,但却深刻的体现了数据结构对编程的重要性。 这次课程设计运用C语言与数据结构知识,编写一个运动会分数统计系统。其中遇到了不少问题,因为对《数据结构》这一门课程掌握不够熟练以及平时自己在编写一些普通常见的程序时只是运用单一的知识而课程设计却需要将各个方面的内容联系结合,例如文件与程序的结合,输入、输出、统计、查找的综合应用等,因此真正的程序设计必须先有一个正确的算法思想,运用正确的数据结构和编程语言,灵活的运用并联系几个方面的内容。通过课程设计也使我认识到,要学好编程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西 6、参考文献 [1] 严蔚敏,吴伟民;《数据结构(C语言版)》,清华大学出版社,2007年 [2] 王裕明;《数据结构与程序设计》,清华大学出版社,2010年 [3] 谭浩强;《C语言程序设计(第三版)》,北京航空航天大学出版社,2005年 [4] 李建学;《数据结构课程设计案例精编(用C/C++描述)》,清华大学出版社,2007年 [5] 催俊凯;《计算机软件基础》,机械工业出版社,2007年 [6] 7、致谢 本次试验能够如期完成,主要是要感谢席老师课堂上的讲解以及指导,才能使我对《数据结构》这门课程有较为深入的理解与掌握,才能在本次课程设计中得以运用。再加上课程设计过程中的程序设计建议,才使得这次课程设计中所遇到的问题能够较快的解决 其次,我还要感谢和我一组的赵咏荔同学,通过两个人的共同协作,才使得本次课程设计能够较好的完成。同时,还要感谢平时课堂上以及课堂外给我帮助的同学们,能够热心的为我解答我所存在的疑问,并为我的程序提出一些建议。 8、附录 源代码: #include<stdio.h> #include<math.h> #include <process.h> #define N 20 /*学校最大数目*/ #define M 20 /*男子项目最大数目*/ #define W 20 /*女子项目最大数目*/ typedef struct { int inum; /*项目编号*/ int top; /*取名次的数目*/ int range[5]; /*名次*/ int mark[5]; /*分数*/ }itemnode; /*存放项目信息*/ typedef struct { int snum; /*学校编号*/ int score; /*学校总分*/ int mscore; /*男团体总分*/ int wscore; /*女团体总分*/ itemnode t[M+W]; /*项目数组*/ }snode; /*存放学校信息*/ snode a[N]; /* 定义一个学校数组*/ 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("\t\t\t欢迎使用\t\t\t\t\n\n"); printf("\t***********运动会分数统计系统***********\n\n"); printf("\t\t*******1.信息输入*******\n"); printf("\t\t*******2.统计输出*******\n"); printf("\t\t*******3.排序输出*******\n"); printf("\t\t*******4.信息查询*******\n"); printf("\t\t*******0.退出系统*******\n\n"); printf("=======================================================\n\n"); printf("请选择要实现步骤的编号(0--4):"); 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 file\n"); return; } for(i=0;i<N;i++) { if(a[i].snum!='\0') if(fwrite(&a[i],sizeof(snode),1,fp)!=1) { printf("file write error\n"); return; } } fclose(fp); } void readfromfile() /*信息从文件file中取出*/ { int i; FILE *fp; if((fp=fopen("file.txt","rb"))==NULL) { printf("cannot open the file\n"); return; } for(i=0;i<N;i++) fread(&a[i],sizeof(snode),1,fp); fclose(fp); } void input(int n,int m,int w) /*1.信息输入*/ { int i,j,s,k,q=0; for(i=0;i<n;i++) { printf("学校编号:"); scanf("%d",&a[i].snum); /*输入学校信息*/ for(j=0;j<m+w;j++) { printf("项目编号:"); scanf("%d",&a[i].t[j].inum); printf("项目取前3名或前5名(3或者5):"); scanf("%d",&a[i].t[j].top); if(a[i].t[j].top==3) printf("获得名次个数(1--3):"); else printf("获得名次个数(1--5):"); scanf("%d",&k); /*输入项目信息*/ for(s=0;s<k;s++) { if(a[i].t[j].top==3) printf("所获名次(1--3):"); else printf("所获名次(1--5):"); scanf("%d",&a[i].t[j].range[s]); /*输入所获名次信息*/ } printf("\n"); } } for(i=0;i<n;i++) { a[i].score=0; a[i].mscore=0; a[i].wscore=0; } /*初始化分数*/ for(i=0;i<n;i++) for(j=0;j<m+w;j++) for(s=0;s<5;s++) { if(a[i].t[j].top==3) switch(a[i].t[j].range[s]) { case 0: a[i].t[j].mark[s]=0; break; case 1: a[i].t[j].mark[s]=5; break; case 2: a[i].t[j].mark[s]=3; break; case 3: a[i].t[j].mark[s]=2; break; } else if(a[i].t[j].top==5) switch(a[i].t[j].range[s]) { case 0: a[i].t[j].mark[s]=0; break; case 1: a[i].t[j].mark[s]=7; break; case 2: a[i].t[j].mark[s]=5; break; case 3: a[i].t[j].mark[s]=3; break; case 4: a[i].t[j].mark[s]=2; break; case 5: a[i].t[j].mark[s]=1; break; } else { printf("信息有误!"); printf("\n"); exit(0); } a[i].score=a[i].score+a[i].t[j].mark[s]; /*记学校总分*/ if(j<=m-1) a[i].mscore=a[i].mscore+a[i].t[j].mark[s]; /*记男子团体总分*/ else a[i].wscore=a[i].wscore+a[i].t[j].mark[s]; /*记女子团体总分*/ } printf("输入完毕!返回? 1是 2否\n"); /*返回菜单*/ scanf("%d",&q); printf("\n"); if(q!=1) printf("不能再添加信息!"); printf("\n"); savetofile(); /*将信息存入文件file*/ menu(n,m,w); } void output(int n,int m,int w) /*2.统计输出*/ { readfromfile(); int i,j,s,q=0; for(i=0;i<n;i++) /*显示结果*/ { printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n",a[i].snum,a[i].score,a[i].mscore,a[i].wscore); for(j=0;j<m+w;j++) { printf("项目编号:%d 所取名次数量:%d\n",a[i].t[j].inum,a[i].t[j].top); for(s=0;s<5;s++) { if(a[i].t[j].range[s]!=0) printf("名次:%d 分数:%d\n",a[i].t[j].range[s],a[i].t[j].mark[s]); } } printf("\n"); } printf("\n"); printf("统计完毕!返回? 1是 2否"); /*返回菜单*/ scanf("%d",&q); printf("\n"); if(q!=1) printf("统计已经结束!"); printf("\n"); menu(n,m,w); } void sortput(int n,int m,int w) /*3.排序输出*/ { readfromfile(); int c,i,j,k,q=0; int temp[N]; printf("\t**************排序输出系统**************\n\n"); printf("\t\t****1.按学校编号输出****\n"); printf("\t\t****2.按学校总分输出****\n"); printf("\t\t****3.按男团总分输出****\n"); printf("\t\t****4.按女团总分输出****\n"); printf("=======================================================\n\n"); do { printf("请选择要实现功能的编号(1--4):"); scanf("%d",&c); switch(c) { case 1: for(i=0;i<n;i++) temp[i]=i; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) if(a[temp[i]].snum>a[j].snum) { k=temp[i]; temp[i]=temp[j]; temp[j]=k; } } /* 用冒泡排序方法排序*/ for(i=0;i<n;i++) { printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore); } /*按学校编号输出*/ break; case 2: for(i=0;i<n;i++) temp[i]=i; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) if(a[temp[i]].score<a[j].score) { k=temp[i]; temp[i]=temp[j]; temp[j]=k; } } /* 用冒泡排序方法排序*/ for(i=0;i<n;i++) { printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore); } /*按学校总分输出*/ break; case 3: for(i=0;i<n;i++) temp[i]=i; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) if(a[temp[i]].mscore<a[j].mscore) { k=temp[i]; temp[i]=temp[j]; temp[j]=k; } } /* 用冒泡排序方法排序*/ for(i=0;i<n;i++) { printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore); } /*按男团总分输出*/ break; case 4: for(i=0;i<n;i++) temp[i]=i; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) if(a[temp[i]].wscore<a[j].wscore) { k=temp[i]; temp[i]=temp[j]; temp[j]=k; } } /* 用冒泡排序方法排序*/ for(i=0;i<n;i++) { printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].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****************查询系统****************\n\n"); printf("\t\t****1.按学校编号查询****\n"); printf("\t\t****2.按项目编号查询****\n"); printf("=======================================================\n\n"); do { k=-1;d=-1;l=-1; printf("请选择要实现功能的编号(1--2):"); scanf("%d",&c); switch(c) { case 1: printf("要查询的学校编号:"); /*查找学校编号下标*/ scanf("%d",&c); for(i=0;i<n;i++) { if(a[i].snum==c) k=i; } if(k==-1) printf("错误:这个学校没有参加此次运动会!\n"); else { printf("要查询的项目编号:"); /*查找项目编号下标*/ scanf("%d",&c); for(j=0;j<m+w;j++) { if(a[k].t[j].inum==c) d=j; } if(d==-1) printf("此次运动会没有这个项目\n"); else /*显示结果*/ { printf("这个项目取前 %d名,该学校的成绩如下:\n", a[k].t[d].top); for(i=0;i<5;i++) if(a[k].t[d].range[i]!=0) printf("名次:%d\n",a[k].t[d].range[i]); } } break; case 2: printf("要查询的项目编号:"); /*查找项目编号下标*/ scanf("%d",&c); for(i=0;i<n;i++) for(j=0;j<m+w;j++) if(a[i].t[j].inum==c) l=j; if(l==-1) printf("此次运动会没有这个项目\n"); else /*显示结果*/ { printf("该项目取前 %d名,取得名次的学校\n",a[0].t[l].top); for(i=0; i<n;i++) for(j=0;j<5;j++) if(a[i].t[l].range[j]!=0) printf("学校编号:%d,名次:%d\n",a[i].snum,a[i].t[l].range[j]); } 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("\t\t\t欢迎使用\t\t\t\t\n\n"); printf("\t***********运动会分数统计系统***********\n\n"); printf("请先输入运动会主要信息\n"); /*设计运动会主要数据个数*/ printf("输入学校个数:"); scanf("%d",&n); printf("输入男子项目个数:"); scanf("%d",&m); printf("输入女子项目个数:"); scanf("%d",&w); menu(n,m,w); } - 29 -- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 分数 统计数据 结构 课程设计 源代码

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文