本科毕业论文---运动会分数统计【整理版】.doc_第1页
本科毕业论文---运动会分数统计【整理版】.doc_第2页
本科毕业论文---运动会分数统计【整理版】.doc_第3页
本科毕业论文---运动会分数统计【整理版】.doc_第4页
本科毕业论文---运动会分数统计【整理版】.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

软 件 学 院课程设计报告书课程名称 数据结构 设计题目 运动会分数统计 目 录1 设计时间.12 设计目的.13设计任务.14 设计内容 .1 4.1需求分析 .1 4.2总体设计.3 4.3详细设计.4 4.4测试与分析.8 4.4.1测试.9 4.4.2分析.9 4.5 附录.9 5 总结与展望.22 参考文献.24 1 设计时间 2012.1.2-2012.1.82 设计目的学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。3设计任务 参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些项目取前五名或前三名由学生自己设定。(m=20,n=20)(1)产生各院系的成绩单,内容包括各院系取得的每项成绩的项目号、名次(成绩)、姓名和得分;(2)产生团体总分报表,内容包括院系编号、男子团体总分、女子团体总分和团体总分。4 设计内容 4.1需求分析 为了简便地对运动会的报名、成绩的录入和统计,设计开发了本系统,以解决需求。当然,本系统只是一个较为简单的系统,仍然存在着一些问题,将在以后的学习中进行完善。 功能:1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分,3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。测试数据:要求使用:1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。4.2总体设计根据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:信息统计模块、信息输出模块、信息查询模块,其系统功能结构图如图1所示。(1)信息统计模实现信息的输入、统计、存档。(2)信息输出模块,实现信息的输出。(3)信息查询实现信息的查询。运动会分数统计系统信息查询模块信息输出模块信息统计模块 信息存档 信息输入 分数统计 函数功能表函数功能void inputinformation( )输入和统计信息函数void output( )输出信息函数void inquiry( )查询信息函数void writedata( )数据存储函数void readdata( )读入数据函数4.3详细设计(1)定义运动项目数据类型,用于存放运动项目,包括项目编号、项目所取名次数、名次、分数。/定义项目结点的类型typedef struct int itemnum; /项目编号 int top; /项目取名次的数目,由用户定义3或5 int range5; /名次 int mark5; /分数itemnode;(2)定义学校数据类型,用来存储参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组。/定义学校结点类型typedef structint schoolnum; /学校编号 int score; /学校总分 int mscore; /男团体总分 int wscore; /女团体总分 itemnode cm+w; /项目数组schoolnode;(3) 定义学校数组schoolnode hn。采用数组结构有利于随机的存储和查询。定义全局标志变量int flag1、flag2,分别用以标志是否已经向系统输入了信息和标志系统中是否已经存在信息。定义文件指针FILE * report,用来指向存档的文件。功能模块: (1)信息输入及分数统计功能void inputinformation( )为输入信息及分数统计函数。在输入信息的同时进行分数的统计。可以输入各个学校各项目前三名或前五名的成绩。在输入学校的参赛项目时,结果取前三名还是前五名自己定,用一个选择语句实现。利用swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7,5、3、2、1,未取得成绩则赋为0。并统计团体总分,男团总分和女团总分。其主要功能代码如下:for(s=0;sk;s+) printf(*名次:); scanf(%d,&hi.cj.ranges); /输入所获名次信息 if(hi.cj.top=3) switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=5; break; case 2: hi.cj.marks=3; break; case 3: hi.cj.marks=2; break; else switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=7; break; case 2: hi.cj.marks=5; break; case 3: hi.cj.marks=3; break; case 4: hi.cj.marks=2; break; case 5: hi.cj.marks=1; break; hi.score=hi.score+hi.cj.marks;(2)信息输出功能void output( )为输出函数。列出一个输出目录利用swich语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。利用辅助数组remember和冒泡排序的方法使之按分数的由高到低输出。利用循环语句do while( )当输入2时返回输出目录,输入0是跳出循环返回主菜单。(3)信息查询功能void inquiry( )为查询函数。列车一个查询目录利用swich 语句使函数按学校编号或项目编号查询,输出某学校的某个项目的得分情况或某个项目的前几名的学校。再利用循环语句do while( )当输入2是返回查询目录,输入0时跳出循环返回主菜单。(5)主函数void main( )是主函数。列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。想在每次查询结束想返回主菜单进行其它项时,应在main( )函数中调用其它函数时再调用main( )函数,如:switch(choice) case 1: printf(输入信息:n);inputinformation();writedata();printf(信息已存入档案!);main(); case 2: printf(输出信息:n);if(flag1)readdata();output();main();在进入主菜单后为了确保系统中已经输入了信息,用标志标量flag1和flag2来控制循环。如果系统中没有任何信息,用户就不能选择输入或查询操作,此时会输出提示信息,并返回主菜单。直到用户输入了信息或退出系统。其实现代码如下:do printf(=欢迎使用=n); printf(nn*运动会分数统计系统*n); printf(nn*1.输入信息*n); printf(*2.输出信息*n); printf(*3.查询信息*n); printf(*4.退出系统*nnn); printf(=nn); printf(*请选择要实现步骤的编号( 请确保已经输入信息! ):nn); scanf(%d,&choice); if(choice=4)break; else if(choice=1)flag1=0; else if(report=fopen(sportsdata.txt,r)!=null )flag2=0; else system(cls); printf(nnnn系统中无任何信息!nn请先输入信息!nnnn); while(flag1 & flag2);4.4测试与分析4.4.1测试运行程序,进入系统主菜单。用户可以选择输入、输出、查询信息或退出系统,界面输入信息: 输出信息: 4.4.2分析算法的效率:总的来讲,严重影响执行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,耗费大量的时间。改进设想:因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结构改为以由有关学校的各种信息为集合的结构。4.5 附录#include#include#include #include #define n 2/学校数目 #define m 1/男子项目数目 #define w 1/女子项目数目#define null 0int flag1=1;int flag2=1;/全局变量,用来标识是否已经向系统输入信息FILE *report;/定义项目结点的类型typedef struct int itemnum; /项目编号 int top; /项目取名次的数目,由用户定义3或5 int range5; /名次 int mark5; /分数itemnode; /定义学校结点类型typedef structint schoolnum; /学校编号 int score; /学校总分 int mscore; /男团体总分 int wscore; /女团体总分 itemnode cm+w; /项目数组schoolnode;schoolnode hn;/定义一个学校结点数组/信息输入模块,用来输入信息,建立系统void inputinformation() int i,j,k,s; for(i=0;in;i+) hi.score=0; hi.mscore=0; hi.wscore=0; /初始化各结点 for(i=0;in | hi.schoolnum=0);/输入学校结点信息 for(j=0;jm+w | hi.cj.itemnum=0); do printf(*取前3名or前5名:); scanf(%d,&hi.cj.top);while(hi.cj.top!=3 & hi.cj.top!=5); printf(*获得几个名次:); scanf(%d,&k); /输入项目信息 for(s=0;s5;s+) hi.cj.ranges=0, hi.cj.marks=0; /初始化排名和分数 for(s=0;sk;s+) printf(*名次:); scanf(%d,&hi.cj.ranges); /输入所获名次信息 if(hi.cj.top=3) switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=5; break; case 2: hi.cj.marks=3; break; case 3: hi.cj.marks=2; break; else switch(hi.cj.ranges) case 0: hi.cj.marks=0; break; case 1: hi.cj.marks=7; break; case 2: hi.cj.marks=5; break; case 3: hi.cj.marks=3; break; case 4: hi.cj.marks=2; break; case 5: hi.cj.marks=1; break; hi.score=hi.score+hi.cj.marks;/按取前三名还是取前五名分别记分 if(j=m-1)hi.mscore=hi.mscore+hi.cj.marks;/是男子项目则记到男子分数里面去 else hi.wscore=hi.wscore+hi.cj.marks;/是女子项目则记到女子项目里面去 printf(n); /信息输出模块,用来输出信息,可以选择按不同的方式输出信息void output() int choice,i,j,k;int remembern;int sign; do printf(*1.按学校编号输出.*n); printf(*2.按学校总分输出.*n); printf(*3.按男团总分输出.*n); printf(*4.按女团总分输出.*n); printf(nn* 请选择编号*nn:); scanf(%d,&choice); switch(choice) case 1: /按编号顺序输出for(i=0;in;i+) printf(nn*学校编号:%dn,hi.schoolnum); printf(*学校总分:%dn ,hi.score); printf(*男团总分:%dn,hi.mscore); printf(*女团总分: %dnnn,hi.wscore); break; case 2: /按学校总分输出 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(nn*学校编号:%dn,hrememberi.schoolnum); printf(*学校总分:%dn ,hrememberi.score); printf(*男团总分:%dn,hrememberi.mscore); printf(*女团总分: %dnnn,hrememberi.wscore);/按所记下标顺序输出 break; case 3: /按男团总分输出 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(nn*学校编号:%dn,hrememberi.schoolnum); printf(*学校总分:%dn ,hrememberi.score); printf(*男团总分:%dn,hrememberi.mscore); printf(*女团总分: %dnnn,hrememberi.wscore); break; case 4: /按女团总分输出 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)printf(错误:这个学校没有参加此次运动会!nnn); elseprintf(要查询的项目编号:); scanf(%d,&j); if(jm+w|j=0) printf(此次运动会没有这个项目nnn);/学校编号超出范围,则输出警告 else printf(这个项目取前 %d名,该学校的成绩如下:n, h0.cj-1.top); for(k=0;km+w|s=0)printf(此次运动会不包括这个项目.nnn);/项目编号超出范围则输出警告elseprintf(该项目取前 %d名,取得名次的学校n,h0.cs-1.top);for(i=0; in;i+) for(j=0;j5;j+) if(hi.cs-1.rangej!=0) printf(学校编号:%d,名次:%dn,hi.schoolnum,hi.cs-1.rangej); /输出该项目取得名次学校的成绩 printf(nnn继续 2,跳出 0n);scanf(%d,&i);printf(nnn);while(i=2); break;void writedata() /把数据存储在文件中 /FILE *report; int i; if(report=fopen(sportsdata.txt,w)=null) printf(文件不存在,不能打开文件!n); exit(1); for(i=0;in;i+)fwrite(&hi,sizeof(schoolnode),1,report); fclose(report); /按头结点块写入 void readdata() /读出文件中数据的函数 /FILE *report; int i,j,s; if(report=fopen(sportsdata.txt,r)=null) printf(文件不存在,不能打开文件!n); exit(1); for(i=0;in;i+) /printf(*学校编号:); fread(&hi.schoolnum,sizeof(int),1,report); /printf(*学校总分:); fread(&hi.score,sizeof(int),1,report); /printf(%dn,k); /printf(*男团总分:); fread(&hi.mscore,sizeof(int),1,report); /printf(%dn,k); /printf(*女团总分:); fread(&hi.wscore,sizeof(int),1,report); for(j=0;jm+w;j+) fread(&hi.cj.itemnum,sizeof(int),1,report); fread(&hi.cj.top,sizeof(int),1,report); for(s=0;s5;s+) fread(&hi.cj.ranges,sizeof(int),1,report); for(s=0;s5;s+) fread(&hi.cj.marks,sizeof(int),1,report); fclose(report); /关闭文件 /按照读一个数据就输出一个数据的方式显示数据内容 /主函数void main() int choice;doprintf(=欢迎使用=n); printf(nn*运动会分数统计系统*n); printf(nn*1.输入信息*n); printf(*2.输出信息*n); p

温馨提示

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

评论

0/150

提交评论