




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录1、 摘要-32、 概述 2.1设计目的-3 2.2设计内容-3 2.3系统功能要求-4 2.4相关知识-43、 思路 3.1提出问题-5 3.2分析问题-5 3.3解决问题-54、系统设计 4.1主函数-5 4.2结构体的定义-7 4.3文件存储-8 4.4流程图-95、调试与运行 5.1运行主菜单-10 5.2输入信息-10 5.3输出信息-10 5.4查询信息-11 5.5调用信息-116、 调试过程中出现的问题及解决方式 6.1出现的问题-12 6.2解决方式-127、总结-128、附录(源代码)-13 1、摘要二十一世纪是计算机飞速发展的世纪,面对着不断更新的计算机系统,计算机给人们带来了越来越多的方便。比如现代运动会得分数统计就可以由计算机来完成。然而要是计算机完成这种计算,人们必须给计算机赋予这种计算的功能。那么这种计算功能具体是怎样实现的呢,今天就让我们一起走进这个神奇的世界。 2、概述 2.1设计目的 数据结构是计算机程序设计的重要理论基础,学懂了数据结构可以帮助编程者编出功能强大的程序。本次实践的重要目的是让我们结合理论知识,实际上机操作。让我们更好的理解数据结构的应用。另外目的还有1、使我们更加熟练的掌握专业知识2、 掌握初步的算法分析及解决能力3、 初步掌握独立解决软件开发过程中遇到的诸如问题分析、系统设计、运用数据结构的相关知识解决问题和调试等基本方法与技能。 2.1设计内容 运动会分数统计(限1 人完成)任务:参加运动会有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) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。2.4系统功能要求 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。2.5相关知识 数据结构中的数据存储结构有多种,在我的设计中用到了以下知识:1、 结构体数组类型存储数据:结构体是由相同或不同数据类型组成的一种复杂的数据类型;结构体类型的定义只是该结构的组成情况,编译系统并未因此而为其分配存储空间,当定义了结构体类型的变量或数组或编译系统才为其分配存储空间。2、 查询:对于线性表而言可以有多种方法,输入要查询的内容信息,通过查询函数就能实现要查询的内容。 3、思路 3.1提出问题1) 首先需要用什么存储结构来存储数据?2) 怎样排序才能得到用户想要的结果?3) 怎样把项目信息与学校信息结合,实现同步? 3.2分析问题对于以上问题我们怎样才能解决呢?首先,对于存储结构我们可以采用顺序表,链表、结构体数组等方式;排序方式也有冒泡排序、插入排序等方式;要实现同步我们可以用结构体嵌套的方式实现。 3.3解决问题 对于上面提到的存储结构顺序表当然可以,但在实际中同步那一块遇到了较大的问题。所以在这里我们不妨用结构体数组的方式来存储,这样存储结构的问题就解决了;然后排序方式我选用了冒泡排序,这样就更好的对应了结构体数组的存储方式。这样问题就解决了。下面让我们看看具体怎样实现的吧! 4、系统设计 4.1主函数主函数的功能菜单如下:int main() int choice; while(1) printf(n); printf( -*-*-*-*菜-*-单*-*选-*-*项-*-*-*-*-*-n); printf( *欢迎使用运动会分数统计系统!*n); printf( -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-n); printf( *n); printf( *nn); printf( 1、输入信息!n); printf( *nn); printf( 2、输出信息!n); printf( *nn); printf( 3、查询信息!n); printf( *nn); 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();/往文件了读入数据的函数 / 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); printf(nnn); printf( *n); printf( *n); printf( *n); printf( *nnn); printf( 感谢您的支持!谢谢使用!nnn); printf( *n); printf( *n); printf( *n); printf( *n); exit(0); default:/非法选择 system(cls); printf(Invalid chice!n); printf(请重新选择操作!n); break; return 0;4.2结构体的定义结构体定义如下:typedef struct int itemnum;/项目编号 char name20;/项目名称 int top;/取名次的数目 int range5;/名次 int mark5;/分数itemnode;/定义项目结点的类型/结构体数组类型存储typedef struct int schoolnum;/学校编号 char name20;/学校名称 int score;/学校总分 int mscore;/男团总分 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(1); fprintf(report,%dn,n); fprintf(report,%dn,m); fprintf(report,%dn,w); for(i=0;in;i+) fprintf(report,%dn,hi.schoolnum); fprintf(report,%sn,); fprintf(report,%dn,hi.score); fprintf(report,%dn,hi.mscore); fprintf(report,%dn,hi.wscore); for(j=0;jm+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; 4.4流程图 开 始输入学校数、男项目数、女项目数 Y学校和项目的信息及成绩信息 继续输入 Y 团体总分 成绩查询 Case3 N case2 继续 查询各校成绩 输出各校成绩继续 N Y 结束 N 5、调试与运行 5.1运行主菜单 5.2输入信息选择1输入信息,显示如下: 循环输入信息。 5.3输出信息 选择主菜单2 输出信息 选1输出 选2按学校总分输出为: 选4按女团总分输出为: 5.4查询信息选择主菜单的3 查询信息 选1 选2 5.5调用信息选主菜单4调用信息,由于信息太多在这我只截取部分的图片: 选5退出系统:至此整个项目调试完毕。 6、调试过程中出现的问题及解决方式 6.1出现的问题在调试的过程中我遇到了一下的一些小麻烦1) 在输出信息时,排序怎样排未控制好。2) 往文件里读入数据时用到了二进制模块读入函数fwrite文件不能直观的在.txt文档里观察到。3) 读出文件时用到了模块读出函数fread,但在读出数据时出现了与要求输出不对照的情况。 6.2解决方式对于出现的问题我做了如下处理:1) remembern;冒泡排序,用辅助数组记下头结点下标,这样就较容易的实现了学校信息与项目信息的排序输出2) 对于读入文件时出现的错误我改用了fprintf函数对数据进行逐个输入,且这样做使得能在.txt文件里观察到输入的信息是否错误。3) 对于读出函数相应的用到了fscanf函数,逐个输出数据。 7、总结 从这次实践中我们队数据结构的知识更近了一成,能更好的实现利用数据结构来解决实际问题。更加巩固了我们的专业知识。 8、附录(源代码)#include#include#define null 0#define OK 1int n,m,w;/学校数目,男子项目数目,女子项目数目typedef int Status;typedef struct int itemnum;/项目编号 char name20;/项目名称 int top;/取名次的数目 int range5;/名次 int mark5;/分数itemnode;/定义项目结点的类型/结构体数组类型存储typedef struct int schoolnum;/学校编号 char name20;/学校名称 int score;/学校总分 int mscore;/男团总分 int wscore;/女团总分 itemnode c20;/项目数组headnode;/定义头结点类型headnode h20;/定义一个头结点数组Status Inputinformation() /输入信息,建立系统 printf(请输入参加运动会的学校数目:n); scanf(%d,&n); printf(请输入男子项目数:n); scanf(%d,&m); printf(请输入女子项目数:n); scanf(%d,&w); int i,j,s; for(i=0;in;i+) hi.score=0; hi.mscore=0; hi.wscore=0; for(i=0;in;i+) printf(输入学校编号:n); scanf(%d,&hi.schoolnum);getchar(); printf(输入学校名称:n); gets(); for(j=0;jm+w;j+) printf(输入项目编号:n); scanf(%d,&hi.cj.itemnum);getchar(); printf(输入项目名称:n); gets(); printf(取前三名or前五名n); scanf(%d,&hi.cj.top); for(s=0;s5;s+) hi.cj.ranges=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; else switch(hi.cj.rangej) case 0: hi.cj.markj=0; break; 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;/是男子项目则记到男子分数里去 else hi.wscore=hi.wscore+hi.cj.markj;/是女子项目则记到女子分数里去 printf(n); return OK;Status Output() /输出函数 int choice,i,j,k; int remembern; int sign; do system(cls); printf( 1、按学校编号输出!n); printf( 2、按学校总分输出!n); printf( 3、按男团总分输出!n); printf( 4、按女团总分输出!n); printf(请选择操作!n); scanf(%d,&choice); switch(choice) case 1: system(cls); for(i=0;in;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(cls); for(i=0;in;i+) rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(hrememberi.scorehj.score) k=rememberi; rememberi=rememberj; rememberj=k; /冒泡排序,用辅助数组记下头结点下标 for(i=0;in;i+) printf(学校编号:%dn,hrememberi.schoolnum); printf(学校名称:%sn,); printf(学校总分:%dn,hrememberi.score); printf(男团总分:%dn,hrememberi.mscore); printf(女团总分:%dn,hrememberi.wscore); printf(nn); break; case 3: system(cls); for(i=0;in;i+) rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(hrememberi.mscorehj.mscore) k=rememberi; rememberi=rememberj; rememberj=k; /冒泡排序,用辅助数组记下头结点下标 for(i=0;in;i+) printf(学校编号:%dn,hrememberi.schoolnum); printf(学校名称:%sn,); printf(学校总分:%dn,hrememberi.score); printf(男团总分:%dn,hrememberi.mscore); printf(女团总分:%dn,hrememberi.wscore); printf(nn); break; case 4: system(cls); for(i=0;in;i+) rememberi=i; for(i=0;in;i+) for(j=i+1;jn;j+) if(hrememberi.wscorehj.wscore) k=rememberi; rememberi=rememberj; rememberj=k; /冒泡排序,用辅助数组记下头结点下标 for(i=0;in) printf(ERROE:这个学校没有参加这次运动会!n); continue; else printf(输入要查项目数组下标:n); scanf(%d,&j); if(jm+w|j=0) printf(此次运动会没有这个项目!n); else printf(项目名称为:%sn,); printf(学校编号为:%dn,hi-1.schoolnum); printf(学校名称为:%sn,); printf(这个项目取前%d名,该学校成绩如下:n,h0.cj-1.top); for(k=0;km+w|s=0) printf(此次运动会不包括此项目!n); else printf(该项目取前%d名,取得名次的学校:n,h0.cs-1.top); for(i=0;in;i+) printf(该项目为:%sn,); for(j=0;jn;j+) if(hi.cs-1.rangej!=0) printf(学校编号:%dn,hi.schoolnum); printf(学校名称:%sn,); printf(学校名次:%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(1); fprintf(report,%dn,n); fprintf(report,%dn,m); fprintf(report,%dn,w); for(i=0;in;i+) fprintf(report,%dn,hi.schoolnum); fprintf(report,%sn,); fprintf(report,%dn,hi.score); fprintf(report,%dn,hi.mscore); fprintf(report,%dn,hi.wscore); for(j=0;jm+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(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(女子项目数目: %dnn,w); for(i=0;in;i+) printf(学校编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高级钳工考试试题及答案
- 2025年高级经济师工商管理真题解析
- 食安培训试题及答案
- 中央会议规范管理办法
- 贷款变更还本管理办法
- 中央集中采购管理办法
- 业务发展管理办法试行
- 专项工作考核管理办法
- 视频监控应用管理办法
- 西安农作物管理办法
- 2025年 天津市烟草专卖局(公司)笔试试卷(附答案)
- 中医治疗失眠课件
- 2025年高校图书馆建设项目可行性研究报告
- JJG(烟草)01-2012卷烟和滤棒物理性能综合测试台检定规程
- 培训学校上墙管理制度
- 口腔科消毒管理制度
- 供养中心考试题及答案
- 医学影像技术发展介绍
- 货币互换协议书
- DB65╱T 3953-2016 反恐怖防范设置规范 商业场所
- 航运企业船员安全培训及宣传制度
评论
0/150
提交评论