数据结构实践——运动会分数统计系统_第1页
数据结构实践——运动会分数统计系统_第2页
数据结构实践——运动会分数统计系统_第3页
数据结构实践——运动会分数统计系统_第4页
数据结构实践——运动会分数统计系统_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、1、摘要32、概述2.1 设计目的32.2 设计内容32.3 系统功能要求42.4 相关知识43、思路3.1 提出问题53.2 分析问题53.3 解决问题54、系统设计4.1 主函数54.2 结构体的定义74.3 文件存储84.4 流程图95、调试与运行5.1 运行主菜单105.2 输入信息105.3 输出信息105.4 查询信息115.5 调用信息116、调试过程中出现的问题及解决方式6.1 出现的问题126.2 解决方式127、总结128、附录(源代码)131、摘要二十一世纪是计算机飞速发展的世纪,面对着不断更新的计算机系统,计算机给人们 带来了越来越多的方便。比如现代运动会得分数统计就可

2、以由计算机来完成。然而要是计 算机完成这种计算,人们必须给计算机赋予这种计算的功能。那么这种计算功能具体是怎 样实现的呢,今天就让我们一起走进这个神奇的世界。2、概述2.1 设计目的数据结构是计算机程序设计的重要理论基础,学懂了数据结构可以帮助编程者 编出功能强大的程序。本次实践的重要目的是让我们结合理论知识,实际上机操作。让我们更好的理解数据 结构的应用。另外目的还有1、使我们更加熟练的掌握专业知识2、掌握初步的算法分析及解决能力3、初步掌握独立解决软件开发过程中遇到的诸如问题分析、系统设计、运用数据结 构的相关知识解决问题和调试等基本方法与技能。2.1 设计内容运动会分数统计(限1人完成)

3、任务:参加运动会有 n个学校,学校编号为1 n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m ,女子m+1 m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为: 7、5、3、2、1,前 三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20 )功能要求:1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分,3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况; 可以按项目编号查询取得前三或前五名的学 校。5)数据存入文件并能随时查询6)规定:输入数据形式和范围:可以输

4、入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能 要求。2.4 系统功能要求存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储 在数据文件中。(数据文件的数据读写方法等相关内容在 c语言程序设计的书上,请自学 解决)请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行 程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。2.5 相关知识数据结构中的数据存储结构有多种,在我的设计中用到了以下知识:1、

5、结构体数组类型存储数据:结构体是由相同或不同数据类型组成的一种复杂的数据类型;结构体类型的定义只是该结构的组成情况,编译系统并未因此而为其分配存储空间, 当定义了结构体类型的变量或数组或编译系统才为其分配存储空间。2、查询:对于线性表而言可以有多种方法,输入要查询的内容信息,通过查询函数就能 实现要查询的内容。3、思路3.1 提出问题1)首先需要用什么存储结构来存储数据?2)怎样排序才能得到用户想要的结果?3)怎样把项目信息与学校信息结合,实现同步?3.2 分析问题对于以上问题我们怎样才能解决呢?首先,对于存储结构我们可以采用顺序表,链表、结 构体数组等方式;排序方式也有冒泡排序、插入排序等方

6、式;要实现同步我们可以用结构 体嵌套的方式实现。3.3 解决问题对于上面提到的存储结构顺序表当然可以,但在实际中同步那一块遇到了较大的问题。 所以在这里我们不妨用结构体数组的方式来存储,这样存储结构的问题就解决了;然后排 序方式我选用了冒泡排序,这样就更好的对应了结构体数组的存储方式。这样问题就解决 了。下面让我们看看具体怎样实现的吧!4、系统设计4.1主函数主函数的功能菜单如下:int main()int choice;while(1)printf("n");printf(" -*-*-*-* 菜-*-单*-* 选-*-* 项-*-*-*-*-*-n"

7、);printf("*欢迎使用运动会分数统计系统!*printf("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-n”);*n");printf("*n");printf("*nn");printf("1、输入信息! n");printf("*nn");printf("2、输出信息! n");printf("*nn");printf("3、查询信息! n");printf("*nn&quo

8、t;);printf("4、调用信息! n");printf("*nn");printf("5、退出系统! n");printf("*n");*printf("*n");printf("*n");printf("请选择以上操作!n");scanf("%d”,&choice);switch(choice)case 1:system("cls");Inputinformation(); /输入信息的函数 Writedata

9、(); /往文件了读入数据的函数 / Readata();从文件了读出数据的函数main();break;case 2:system("cls");Output(); /输出信息的函数main();break;case 3:system("cls");Inquiary(); / 查询函数main();break;case 4:system("cls");Readata(); /从文件了读出数据的函数system("pause");main();break;case 5:system("cls")

10、;printf("nnn");printf("*n");printf("*n");printf("*n");printf("*nnn");printf("感谢您的支持!谢谢使用!nnn");printf("*n");printf("*n");printf("*n");printf("*n");return 0;exit(0);default:/ /非法选择 system("cls&quo

11、t;);printf("Invalid chice!n");printf("请重新选择操作!n");break;4.2 结构体的定义结构体定义如下:typedef structint itemnum; / 项目编号char name20; / 项目名称int top; /取名次的数目int range5; / 名次int mark5; / 分数itemnode; /定义项目结点的类型/结构体数组类型存储typedef structint schoolnum;/ 学校编号char name20;/ 学校名称int score; /学校总分int mscor

12、e; /男团总分int wscore; /女团总分itemnode c20; / 项目数组headnode; /定义头结点类型headnode h20; /定义一个头结点数组4.3 文件存储文件的存储我用到了 fprintf函数和fscanf函数进行数据的逐步读入读出代码如下;Status Writedata()/存到文件中FILE *report;int i,j;if(report=fopen("sportdata.txt","w")=null)printf("不能打开文件n");exit;fprintf(report,"

13、%dn",n);fprintf(report,"%dn",m);fprintf(report,"%dn",w);for(i=0;i<n;i+)fprintf(report,"%dn",hi.schoolnum);fprintf(report,"%sn",);fprintf(report,"%dn",hi.score);fprintf(report,"%dn",hi.mscore);fprintf(report,"%dn",hi

14、.wscore);for(j=0;j<m+w;j+)fprintf(report,"%dn",hi.cj.itemnum);fprintf(report,"%sn",);fprintf(report,"%dn",hi.cj.top);fprintf(report,"%dn",hi.cj.rangej);fprintf(report,"nn");fclose(report);return OK;结束5、调试与运行5.1运行主菜单5.2输入信息选才¥ 1输入信息,

15、显示如下:西输人参加区动会的竽校 输入男子项目数工济输入女子项目数二 输入学校编号.壬前入口负目名i mfe 、 取前三名口 F刖五名第获名次= 忸循环输入信息输入项日编号士5.3输出信息选择主菜单2输出信息 :, JIJ.IJ:101;沈阳化工大学;10ii夜校团团!总总总置意总选1输出选2按学校总分输出为::1S2;沈阳-L业大学211:a= 103:东北大学选4按女团总分输出为:5.4查询信息选择主菜单的七查询信息/人要查询的学校数组下标, 俞人要查项目数组下标,项目编号查询请选择查询方式?!1 TA- I - 名次称为:短跑号为:101暂翦亲要噫辕期如E选择操作 2二继续,明 跳出5.

16、5调用信息选主菜单4调用信息,由于信息太多在这我只截取部分的图片:选5退出系统:至此整个项目调试完毕。6、调试过程中出现的问题及解决方式6.1 出现的问题在调试的过程中我遇到了 一下的一些小麻烦1)在输出信息时,排序怎样排未控制好。2)往文件里读入数据时用到了二进制模块读入函数fwrite文件不能直观的在.txt文档里观察到。3)读出文件时用到了模块读出函数 fread,但在读出数据时出现了与要求输出不对照的情 况。6.2 解决方式对于出现的问题我做了如下处理:1) remembern;冒泡排序,用辅助数组记下头结点下标,这样就较容易的实现了学校信 息与项目信息的排序输出2)对于读入文件时出现

17、的错误我改用了fprintf函数对数据进行逐个输入,且这样做使得能在.txt文件里观察到输入的信息是否错误。3)对于读出函数相应的用到了 fscanf函数,逐个输出数据。7、总结从这次实践中我们队数据结构的知识更近了一成,能更好的实现利用数据结构来解 决实际问题。更加巩固了我们的专业知识。8、附录(源代码)#include<stdio.h>#include<stdlib.h>#define null 0#define OK 1int n,m,w;/学校数目,男子项目数目,女子项目数目typedef int Status;typedef structint itemnum

18、;/ 项目编号char name20;/ 项目名称int top;/ 取名次的数目int range5;/名次int mark5;/分数itemnode;/ 定义项目结点的类型/结构体数组类型存储typedef structint schoolnum;/学校编号char name20;/学校名称int score;/学校总分int mscore;/男团总分int wscore;/女团总分itemnode c20;/ 项目数组headnode;/定义头结点类型headnode h20;/定义一个头结点数组Status Inputinformation()/输入信息,建立系统printf(”请输入

19、参加运动会的学校数目:n");scanf("%d",&n);printf("请输入男子项目数:n");scanf("%d",&m);printf("请输入女子项目数:n");scanf("%d",&w);int i,j,s;for(i=0;i<n;i+)hi.score=0;hi.mscore=0;hi.wscore=0;for(i=0;i<n;i+)printf("输入学校编号:n");scanf("%d”,&

20、hi.schoolnum);getchar();printf("输入学校名称:n");gets();for(j=0;j<m+w;j+)printf("输入项目编号:n");scanf("%d”,&hi.cj.itemnum);getchar();printf("输入项目名称:n");gets();printf("取前三名or前五名n");scanf("%d”,&hi.cj.top);for(s=0;s<5;s+)hi.cj.range

21、s=0;hi.cj.marks=0;/初始化排名和分数printf("所获名次:n");scanf("%d",&hi.cj.rangej);/ 输入所获取名次信息if(hi.cj.top=3)switch(hi.cj.rangej)case 0:hi.cj.markj=0;break;case 1: hi.cj.markj=5;break;case 2:hi.cj.markj=3;break;case 3:hi.cj.markj=2;break;elseswitch(hi.cj.rangej)case 0:hi.cj.markj=0;break;

22、case 1:hi.cj.markj=7;break;case 2:hi.cj.markj=5;break;case 3:hi.cj.markj=3;break;case 4:hi.cj.markj=2;break;case 5:hi.cj.markj=1;break;hi.score=hi.score+hi.cj.markj;/按取前三还是前五分别积分学校总分if(j<=m-1)hi.mscore=hi.mscore+hi.cj.markj;/是男子项目则记到男子分数里去elsehi.wscore=hi.wscore+hi.cj.markj;/是女子项目则记到女子分数里去printf(

23、"n");return OK;Status Output()/输出函数int choice,i,j,k;int remembern;int sign;dosystem("cls");printf("1、按学校编号输出!n");printf("2、按学校总分输出!n");printf("3、按男团总分输出!n");printf("4、按女团总分输出!n");printf("请选择操作!n");scanf("%d”,&choice);swit

24、ch(choice)case 1:system("cls");for(i=0;i<n;i+)printf("学校编号:dn",hi.schoolnum);printf("学校名称:sn",);printf("学校总分:%dn",hi.score);printf("男团总分:dn",hi.mscore);printf("女团总分:dn",hi.wscore);printf("nn");/按编号顺序输出break;case 2:system

25、("cls");for(i=0;i<n;i+)rememberi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(hrememberi.score<hj.score)k=rememberi;rememberi=rememberj;rememberj=k;/冒泡排序,用辅助数组记下头结点下标for(i=0;i<n;i+)printf("学校编号:dn",hrememberi.schoolnum);printf("学校名称:sn",);printf(&q

26、uot;学校总分:%dn",hrememberi.score);printf("男团总分:dn",hrememberi.mscore);printf("女团总分:dn",hrememberi.wscore);printf("nn");break;case 3:system("cls");for(i=0;i<n;i+)rememberi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(hrememberi.mscore<hj.mscore)k=remembe

27、ri;rememberi=rememberj;rememberj=k;/冒泡排序,用辅助数组记下头结点下标for(i=0;i<n;i+)printf("学校编号:dn",hrememberi.schoolnum);printf("学校名称:sn",);printf("学校总分:%dn",hrememberi.score);printf("男团总分:dn",hrememberi.mscore);printf("女团总分:dn",hrememberi.wscore

28、);printf("nn");break;case 4:system("cls");for(i=0;i<n;i+)rememberi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(hrememberi.wscore<hj.wscore)k=rememberi;rememberi=rememberj;rememberj=k;/冒泡排序,用辅助数组记下头结点下标for(i=0;i<n;i+)printf("学校编号:dn",hrememberi.schoolnum);printf(

29、"学校名称:sn",);printf("学校总分:%dn",hrememberi.score);printf("男团总分:dn",hrememberi.mscore);printf("女团总分:dn",hrememberi.wscore);printf("nn");break;printf("请选择2:继续;0:跳出n");scanf("%d”,&sign);while(sign=2);return OK;Status Inqu

30、iary()/查询函数int choice;int remembern;int i,j,k,s;printf(" 1、按学校编号查询n");printf(" 2、按项目编号查询n");printf("请选择查询方式!n");scanf("%d”,&choice);switch(choice)case 1:system("cls");doprintf("输入要查询的学校数组下标:n");scanf("%d",&i);if(i>n)printf(&

31、quot;ERROE:这个学校没有参加这次运动会!n");continue;elseprintf("输入要查项目数组下标:n");scanf("%d",&j);if(j>m+w|j=0)printf("此次运动会没有这个项目!n");elseprintf("项目名称为:sn",);printf("学校编号为:dn",hi-1.schoolnum);printf("学校名称为:sn",);printf(&qu

32、ot;这个项目取前d名,该学校成绩如下:n",h0.cj-1.top);for(k=0;k<5;k+)if(hi-1.cj-1.rangek!=0)printf("名次:dn",hi-1.cj-1.rangek);/输出要查询学校项目的名次printf("请选择操作! 2:继续;0:跳出)scanf("%d",&s);while(s=2);break;case 2:system("cls");doprintf("输入要查询的项目数组下标!n");scanf("%d&quo

33、t;,&s);if(s>m+w|s=0)printf("此次运动会不包括此项目!n");elseprintf("该项目取前d名,取得名次的学校:n",h0.cs-1.top);for(i=0;i<n;i+)printf("该项目为:sn",);for(j=0;j<n;j+)if(hi.cs-1.rangej!=0)printf("学校编号:dn",hi.schoolnum);printf("学校名称:sn",);printf(&qu

34、ot;学校名次:%dn",hi.cs-1.rangej);/输出该项目取得名次的学校成绩printf("选择2:继续;0:跳出n");scanf("%d",&i);while(i=2);break;return OK;Status Writedata()/存到文件中FILE *report;int i,j;if(report=fopen("sportdata.txt","w")=null)printf("不能打开文件n");exit;fprintf(report,"%

35、dn",n);fprintf(report,"%dn",m);fprintf(report,"%dn",w);for(i=0;i<n;i+)fprintf(report,"%dn",hi.schoolnum);fprintf(report,"%sn",);fprintf(report,"%dn",hi.score);fprintf(report,"%dn",hi.mscore);fprintf(report,"%dn",hi.

36、wscore);for(j=0;j<m+w;j+)fprintf(report,"%dn",hi.cj.itemnum);fprintf(report,"%sn",);fprintf(report,"%dn",hi.cj.top);fprintf(report,"%dn",hi.cj.rangej);fprintf(report,"nn");fclose(report);return OK;Status Readata()FILE *report;int i,j;if(

37、report=fopen("sportdata.txt","r")=null)printf("file cannot be opened !n");exit(1);fscanf(report,"%d",&n);printf("参赛学校数目:dn",n);fscanf(report,"%d",&m);printf("男子项目数目: dn",m);fscanf(report,"%d",&w);printf("

38、;女子项目数目:dnn",w);for(i=0;i<n;i+)printf("学校编号:");fscanf(report,"%d”,&hi.schoolnum);printf("%dn",hi.schoolnum);printf("学校名称:");fscanf(report,"%s",);printf("%sn",);printf("学校总分:");fscanf(report,"%d",&

39、;hi.score);printf("%dn",hi.score);printf("男团总分:");fscanf(report,"%d”,&hi.mscore);printf("%dn",hi.mscore);printf("女团总分:");fscanf(report,"%d”,&hi.wscore);printf("%dnn",hi.wscore);for(j=0;j<m+w;j+) printf("项目编号:");fscanf(r

40、eport,"%d",&hi.cj.itemnum);printf("%dn",hi.cj.itemnum);fscanf(report,"%s",);printf("项目名称:sn",);fscanf(report,"%d",&hi.ci.top);printf("取前几:dn",hi.ci.top);if(hi.cj.rangej!=0)printf("名次:");fscanf(report,"%d",&hi.cj.rangej);printf("%dn",hi.cj.rangej);printf("n

温馨提示

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

评论

0/150

提交评论