数据结构课程设计-运动会分数统计_第1页
数据结构课程设计-运动会分数统计_第2页
数据结构课程设计-运动会分数统计_第3页
数据结构课程设计-运动会分数统计_第4页
数据结构课程设计-运动会分数统计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、安徽省巢湖学院计算机与信息工程学院课程设计报告课程名称 数据结构 课题名称 运动会分数统计 专业 计算机科学与技术 班级 学号姓名 联系方式 指导教师 20 11 年 12 月 29 日目 录1、数据结构课程设计任务书1.1、题目1.2、要求2、总体设计2.1、功能模块设计2.2、所有功能模块的流程图3、详细设计3.1、程序中所采用的数据结构及存储结构的说明3.2、算法的设计思想3.3、成员函数名及功能介绍4、调试与测试:4.1、调试方法与步骤:4.2、测试结果的分析与讨论:4.3、测试过程中遇到的主要问题及采取的解决措施:5、时间复杂度的分析:6、源程序清单和执行结果7、C程序设计总结8、致

2、谢9、参考文献1、数据结构课程设计任务书1.1、题目 运动会分数统计1.2、要求1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分,3) 可以按学校编号或名称、学校总分、男女团体总分排序输出; 4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。5) 数据存入文件并能随时查询;6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称2、总体设计2.1、功能模块设计根据课程设计题目的功能要求,各个功能模块的组成如下:(1) 主程序模块:Void main( ) 初始化:For ( ) 接受处理命令: 接受处理: (2)学校的单元模块实

3、现有序表的抽象数据类型:(3)运动员的结构模块定义线性表的结构特点。各模块的之间的调用关系如下: 主程序模块 学校的单元模块 运动员结构单元模块2.2、所有功能模块的流程图开始打开文件成功?选择7?选择1?选择2?选择6?选择3?选择4?选择5?调用output(L)调用set(L)调用search1(L)调用tongfen(L)调用search2(L)调用tongfenboy(L)调用tongfengirl(L)调用提取函数loadfile()输入参赛的学校数男子项目数女子项目数总的参赛人数使用for循环重新选择选择0?结束yesnoyesyesyesyesyesyesyesnononono

4、nonoyes3、详细设计3.1、程序中所采用的数据结构及存储结构的说明运动会分数统计程序用到的是顺序表的数据类型,由于一开始参赛人数就是确定下来的,参赛人数即为顺序表表长,故顺序表的表长也就确定下来了,顺序表的主要内容有学校数、男子项目数、女子项目数、总的参赛人数。节点主要内容包括:学生的姓名、学校代号、项目代号以及学生的成绩。 顺序表类型如下:typedef struct /节点 char name100; /姓名 int xuexiao; /学校代号 int xiangmu; /项目代号 int score; /成绩 schooltype;typedef structschooltype

5、 scsize; /顺序表int n ; /学校数int m;/男子项目数int w;/女子项目数int r; /总参赛人数seqlist;该程序要求统计各个学校的总分及男女项目总分,为便于排序,另用一顺序表将计算出来的总分放于其中,节点内容包括关键字key(即算出来的总分)xiaohao(用来放学校的代号)解决了排序后能输出确定的学校代号及总分。顺序表类型如下:typedef struct /节点int key;/放分int xiaohao;/放学校代号recordtype;typedef struct/顺序表为方便排序而建立的recordtype rsize; /工作单元list;3.2、

6、算法的设计思想参赛人数即为顺序表表长,在顺序表节点中有成绩,在建立学生信息时可直接输入成绩,输入学生信息时编码是自动加的,统计学校总分或男女项目总分时都用2个for循环来实现,统计出来的得分都可放入另一个顺序表中以便于排序,在查询时用户输入要查询的学校代号或项目代号即可查询,在建立信息时会调用保存在文件的函数来实现学生信息的保存。结构图如下:建立函数开始 统计各学校总分统计各学校男子项目总分按项目代号查输出函数按校查某个项目查询统计各学校女子项目总分3.3、成员函数名及功能介绍如下: 成 员 函 数 名 作 用 set(seqlist *L)建立参赛者信息search1(seqlist *L)

7、按学校代号查某个项目的情况search2(seqlist *L)按项目代号查取得成绩的学校tongfen(seqlist *L,list *s)统计各学校总分tongfenboy(seqlist *L,list *s)统计各学校男子项目总分tongfengirl(seqlist *L,list *s)统计各学校女子项目总分output(seqlist *L)输出seqlist *loadfile()提取到文件函数savefile(seqlist *s) 保存到文件函数paixu(seqlist *L,list *s) 直接插入排序4、调试与测试:4.1、调试方法与步骤:本程序主要用来实现运动会

8、分数统计,用户在使用前需输入参赛人数,男子项目数、女子项目数以及参赛总人数,参赛编号是根据输入顺序编的,参赛人数既为顺序表表长,在完成这一步后,在提供的可选菜单中用户应先建立参赛者信息,参赛者信息一次性输入,如果文件中已保存输入的菜单,下次就不需要再重新建立参赛者信息了,可直接对已存的信息进行查询排序输出,可根据菜单选择。4.2、测试结果的分析与讨论:4.3、测试过程中遇到的主要问题及采取的解决措施:1)、程序调试过程中常会出现一些小错误,如i,j混淆少括号少分号等小问题都可以按照提示找到,然后改正。2)、语句错误语句使用不当造成程序无法运行出正常的结果。3)、在排序过程中输出的结果是按总分顺

9、序排序的,但是却不能够正确的输出是哪个学校的总分,解决方法是在新申请的顺序表的节点中加入了一个纪录学校代号的内容,在输出的同时就可以把学校代号也正确的输出来了。5、时间复杂度的分析:在排序时用到了直接插入排序,从算法描述中可以看到,在搜索插入位置时,遇到关键字相等的元素就停止比较和移动元素,可以确定该算法是稳定的排序算法。从空间角度上看,它只需要一个元素的辅助空间r0。从时间角度上看,主要时间耗费在关键字的比较和移动元素上。n为顺序表表长,平均时间复杂度为O(n2)最坏时间复杂度为O(n2)辅助存储空间r0。6、源程序清单和执行结果#include#include#include#define

10、 NULL 0#define size 100typedef struct /节点 char name100; /姓名 int xuexiao;/学校代号 int xiangmu; /项目代号 int score; /成绩 schooltype;typedef struct/顺序表 schooltype scsize;/工作单元int n;/学校数int m;/男子项目数int w;/女子项目数int r;/总参赛人数/int length;seqlist;typedef struct /节点int key;/放分int xiaohao;/放校代号recordtype;typedef stru

11、ct/顺序表为方便排序而建立的recordtype rsize;/工作单元list;void savefile(seqlist *);void set(seqlist *L)int i;for(i=1;ir;i+) printf(依次输入校代号,项目号,姓名,成绩:n); scanf(%d%d%s%d,&L-sci.xuexiao,&L-sci.xiangmu,&L-,&L-sci.score);savefile(L); printf(建立成功!:);void search1(seqlist *L)/按学校代号查某个项目的情况 int i,j,n; printf(输入学号以及要

12、查的项目代号:n); scanf(%d%d,&i,&n); for(j=1;jr;j+) if(L-scj.xuexiao=i&L-scj.xiangmu=n) printf(该学校在该项目姓名为%s取得成绩%dn,L-,L-scj.score); void search2(seqlist *L)/按项目代号查取得成绩的学校int j,k;printf(输入所要查的项目代号:n);scanf(%d,&k);for(j=1;jr;j+) if(L-scj.xiangmu=k&L-scj.score!=0)printf(学校代号%d在该项目姓名%s取得成绩%dn,L-scj.xue

13、xiao,L-,L-scj.score);void tongfen(seqlist *L,list *s)/统计各学校总分int i,j,sum;for(i=1;in;i+)sum=0;for(j=1;jr;j+)if(L-scj.xuexiao=i)sum=sum+L-scj.score;s-ri.xiaohao=i; s-ri.key=sum;printf(学校代号为%d的学校取得的总分为%dn,i,sum);void tongfenboy(seqlist *L,list *s)/统计各学校男子项目总分int i,j,sum;for(i=1;in;i+)sum=0;for(

14、j=1;jr;j+)if(L-scj.xuexiao=i)if(L-scj.xiangmu)m)|(L-scj.xiangmu)=(L-m) sum=sum+L-scj.score;s-ri.xiaohao=i; s-ri.key=sum;printf(学校代号为%d在男子项目取得的总分为%dn,i,sum);void tongfengirl(seqlist *L,list *s)/统计各学校女子项目总分int i,j,sum;for(i=1;in;i+)sum=0;for(j=1;jr;j+)if(L-scj.xuexiao=i)if(L-scj.xiangmu)(L-m) sum=sum+

15、L-scj.score;s-ri.xiaohao=i; s-ri.key=sum;printf(学校代号为%d在女子项目取得的总分为%dn,i,sum);void paixu(seqlist *L,list *s)/直接插入排序(有监视哨)int i,j,k;for(i=1;in;i+)s-r0=s-ri;j=i-1;/将待插元素存到监视哨r0中while(s-r0.keyrj.key)/寻找插入位置s-rj+1=s-rj;j=j-1;s-rj+1=s-r0;将待插入元素插入到已排序的序列中printf(排序后输出为:n);for(k=1;kn;k+)printf(学校代号为%d总分为%d:n

16、,s-rk.xiaohao,s-rk.key);void output(seqlist *L)int j;printf(学校代号 编号 项目号 姓名 成绩:n);for(j=1;jr;j+)printf(%dt%dt%dt%st%dn,L-scj.xuexiao,j,L-scj.xiangmu,L-,L-scj.score);seqlist *loadfile()/提取函数FILE *fp;char buf100;fp=fopen(运动员系统.txt,r);seqlist *s;s=(seqlist *)malloc(sizeof(seqlist);fscanf(fp,%d%d

17、%d%d,&s-r,&s-n,&s-m,&s-w);for(int i=1;ir;i+)fscanf(fp,%s,buf);strcpy(,buf);fscanf(fp,%d%d%d,&s-sci.xuexiao,&s-sci.xiangmu,&s-sci.score);fclose(fp);return s;void savefile(seqlist *s)/保存函数FILE *fp;if(fp=fopen(运动员系统.txt,a+)=NULL)printf(Cannot open the file!n);return;fprintf(fp,%dt,s-r);fprint

18、f(fp,%dt,s-n);fprintf(fp,%dt,s-m);fprintf(fp,%dn,s-w);for(int i=1;ir;i+)fprintf(fp,%st,);fprintf(fp,%dt,s-sci.xuexiao);fprintf(fp,%dt,s-sci.xiangmu);fprintf(fp,%dn,s-sci.score);fclose(fp);int menu_select( ) int i,sn; printf(-欢迎来到大学生运动会管理系统-n); printf(请您先建立参赛者信息并记录成绩(1)n);printf(查询(按校查某个项目)

19、(2)n);printf(查询(按项目查取得成绩的学校)(3)n); printf(统计各学校总分并排序输出(4)n); printf(统计各学校男子项目总分并排序输出(5)n);printf(统计各学校女子项目总分并排序输出(6)n);printf(输出(7)n);printf(退出(0)n);printf(-请选择-n);for(i=0;i100;i+ ) scanf( %d, &sn); if( sn7 ) printf(nt输入错误,重选07:n); else break; return sn;void main() int m,n,w,r;FILE *fp;seqlist S,*L=

20、&S;list p,*s=&p;if(fp=fopen(运动员系统.txt,r)=NULL)L=(seqlist*)malloc(sizeof(seqlist);printf(-欢迎来到大学生运动会管理系统-n);printf(输入参赛的学校数,男子项目数,女子项目数,总的参赛人数:n);scanf(%d%d%d%d,&n,&m,&w,&r);printf(n);L-n=n;L-m=m;L-w=w;L-r=r;elseL=loadfile();for(;)switch(menu_select( ) )case 1:set(L);break;case 2:search1(L);break;case 3:search2(L);break;case 4:tongfen(L,s);paixu(L,s);break;case 5:tongfenboy(L,s);paixu(L,s);break;case 6:tongfengirl(L,s);paixu(L,s);break;case 7:output(L);break;case 0:break;7、C

温馨提示

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

评论

0/150

提交评论