欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    数据结构运动会分数统计课程设计(共22页).doc

    • 资源ID:13528610       资源大小:990KB        全文页数:22页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构运动会分数统计课程设计(共22页).doc

    精选优质文档-倾情为你奉上 数据结构课程设计 目录1. 需求分析-2 1.1问题描述-21.2基本任务-22. 概要设计-22.1主界面设计-22.2数据结构设计-32.3系统功能设计-33. 模块设计-33.1模块设计-33.2系统子模块及功能设计-43.3系统模块之间的调用关系-44. 详要设计-54.1数据结构设计-54.2系统主要模块设计-65. 调试分析-85.1创建学校链表-85.2添加获奖学生-85.3按项目查学校成绩-115.4按学校编号查参加项目-146. 用户使用说明-157. 参考文献-158. 对软件自我评价-159. 程序设计源代码-1610. 心得体会-22一需求分析 1.1 问题描述1. 课程设计题目:运动会分数统计。2. 任务:加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)3. 问题分析:1)、每个学校有运动员要参加运动项目,故存储结构要有三个,项目结构体,学生信息结构体和学校链表。每个结点存储一个学校,每个学校可以有多名运动员参加运动项目。由此,存储结构就建立了。2)、要求不同的项目根据具体情况取去前五名或前三名积分,则可以设定标准,即当参加某项目的运动员数等于或多于五人时,就取该项目的前五名进行积分,取前五名的积分分别为:7,5,3,2,1。当参加某一项目的人数少于五人时,则去该项目的前三名进行积分,去取前三名的积分分别为:5,3,2。3)、要求能统计学校的总分,并可以按学校编号输出每个学校的参赛信息及每个学校每个运动员的信息和所有运动项目清单。以上这些功能可以通过遍历学校链表来实现。4)、要求可以学校编号查询学校某个项目的情况,用户输入学校编号和项目编号,通过遍历学校链表即可实现。5)、要求可以按编号查询取得前三或前五名的学校,用户输入要查询的项目的编号,通过遍历学校链表即可实现。6)、设置菜单函数menu(),产生用户界面。 规定: 输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。 1.2 基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:1) .输入各个项目的前三名或前五名的成绩;2) .统计各学校总分;3).按学校编号或名称、男女团体总分排序输出;4).按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。数据存入文件并能随时查询。二概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计: 2.1 主界面设计为了实现运动会分数统计的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。系统主控菜单运行界面如图1所示:图1 运动会分数统计主菜单 2.2 数据结构设计系统采用数据的存储结构定义:运动项目结构体、 运动员信息结构体、学校链表此外,还定义了一些全局变量:学校总数SchoolCount、男生项目总数BoyProject、女生项目总数GirlProject、项目总数TotalProject、项目表Project_T41。 2.3 系统功能设计创建学校的链表: void CreatSchoolLink(School &head);添加获奖学生: void AddStudentLink(School &head); 按项目编号查询取得前三或前五名的学校。 void Find_Project_ID(School &head,int Project_ID); 按学校编号查询学校某个项目。 void Find_School_Project(School &head,int School_ID,int Project_ID);成绩统计: void ScoreCount(School &head);输出参赛结果: void OutPut_Link(School head);(7) .添加学生数据: void AddStudent(School &head);(8).菜单函数: int menu();(9).主函数: int main();三模块设计 3.1 模块设计系统主要包含主程序模块和其它链表操作模块。其调用关系如图2所示。ScoreCount(School&head)main()CreatSchoolLink(head)AddStudent(head)OutPut_Link(head)FindProject_ID(head,Project_ID)Find_School_Project(head,School_ID,intProject_ID)menu()AddStudentLink(head) 图2 模块调用示意图 3.2 系统子模块及其功能设计系统设计了8个子功能模块,8个子功能模块的描述如下:创建学校的链表: void CreatSchoolLink(School &head);添加获奖学生: void AddStudentLink(School &head); 按项目编号查询取得前三或前五名的学校。 void Find_Project_ID(School &head,int Project_ID); 按学校编号查询学校某个项目。 void Find_School_Project(School &head,int School_ID,int Project_ID);成绩统计: void ScoreCount(School &head);输出参赛结果: void OutPut_Link(School head);(8) .添加学生数据: void AddStudent(School &head);(8).菜单函数: int menu(); 3.3 系统模块之间的调用关系系统的10个子模块之间的主要调用关系如图3所示:Menu() 图3 系统函数调用关系图四详细设计 4.1 数据结构设计系统采用线性表的链式存储结构存储学校信息。结点定义如下:typedef struct SchoolNodeint number;/学校编号 char name10; int count;/运动员人数 int boyscore;/男子团体总分 int girlscore;/女子团体总分 int totalscore;/团体总分 int jifen;/积分 Student students20;/参赛学生 struct SchoolNode *next;SchoolNode,*School; 4.2 系统主要模块设计(1) 创建学校链表算法思想及程序代码:void CreatSchoolLink(School &head)/创建学校的链表 School p; int i; head=p=(School)malloc(sizeof(SchoolNode); for(i=1;i<=SchoolCount;i+) p=p->next=(School)malloc(sizeof(SchoolNode); printf("请输入编号为%d的学校的名称:n",i); scanf("%s",p->name); p->number=i; p->count=0; p->boyscore=0; p->girlscore=0; p->totalscore=0; p->jifen=0; p->next=NULL;/使指针指向空 head=head->next;/头指针后移(2) 添加获奖学生函数程序代码:void AddStudentLink(School &head)/添加获奖学生 School L,p; int School_ID; /学校编号 char StudentName20; /学生姓名 int sex;/性别 int Project_ID; /项目编号 int score; /成绩 int ranking; /名次 printf("请输入学生的姓名:n"); scanf("%s",StudentName); printf("请输入该学生所在学校的编号:n"); scanf("%d",&School_ID); printf("请输入该学生的性别(0-女,-男):n"); scanf("%d",&sex); printf("请输入该学生参加的项目编号:n"); scanf("%d",&Project_ID); if(sex=0) GirlProject=Project_ID; if(sex=1) BoyProject=Project_ID; printf("请输入该学生该项目的得分:n"); scanf("%d",&score); printf("请输入该学生在该项目中的名次:n"); scanf("%d",&ranking); L=head; while(L) if(L->number=School_ID) p=L; p->count=p->count+1; /运动员数+1 strcpy(p->studentsp->count.name, StudentName); /学生姓名 p->studentsp->count.Project=Project_ID ;/得分项目 Project_TProject_ID.count=Project_TProject_ID.count+1; /该项目得分人数+1 p->studentsp->count.ranking=ranking;/得分名次 p->studentsp->count.score=score;/得分 p->studentsp->count.sex=sex; /性别 break; else L=L->next; (3) 按学校项目查询前三名和前五名学校函数程序代码:void Find_Project_ID(School &head,int Project_ID) /按项目编号查询取得前三或前五名的学校。 School h,p; p=h=head; /保存链表头指针 int i; printf("查询结果如下:n"); while(h) for(i=1;i<=h->count;i+) if(h->studentsi.Project=Project_ID) printf("学校:%s 姓名:%s 名次:%dn",h->name,h->studentsi.name,h->studentsi.ranking); printf("n-n"); h=h->next; (4) 按学校编号查询学校的某个项目程序代码:void Find_School_Project(School &head,int School_ID,int Project_ID)/按学校编号查询学校某个项目 School h,p; int Project_i=0; int i; p=h=head; /保存链表头指针 while(h) if(h->number=School_ID)p=h;break; h=h->next; for(i=1;i<=p->count;i+) if(p->studentsi.Project=Project_ID) printf("查询结果如下:n"); printf("姓名:%sn",p->studentsi.name); Project_i=p->studentsi.Project; if(p->studentsi.sex=0) printf("性别:女n"); Project_i=Project_i+20; else printf("性别:男n"); printf("项目编号:%d 项目名称%s 该项目得分%d 名次:%dn",p->studentsi.Project,Project_TProject_i.name,p->studentsi.score,p->studentsi.ranking); 五调试分析各子功能测试运行结果如下: 5.1创建学校链表运行结果: 创建5个学校,分别为重庆工商大学、重庆邮电大学、重庆交通大学、重庆师范大学、重庆大学 5.2添加获奖学生运行结果:详细添加学生人数,我们组徐维维已截图,总共输入重庆工商大学9人,其中项目2有5人,项目1、3、4、5各一人,重庆邮电大学1人参加项目5,重庆交通大学2人,,参加项目2、5各一人。 5.3按项目查找前三名或前五名学校运行结果:由运行结果可以知道,当每个项目人数大于等于5时,按第一种积分计算,第一名取7分,当每个项目总数小于5时,按第二种积分计算,第一名取得是5分。其次还计算了每个学校女子团体总分、男子团体总分、学校总分。 5.4按学校编号查找某个项目参加人数函数运行结果:六用户使用说明该运动会分数统计程序用C语言编写,实现了所要求的大部分功能。(1)按数字键1,使用前首先要进行参数统计,包括参赛学校数(不多余20个),男生项目数(不多于20个)和女生项目数(不多于20个)。设置时同时输入学校及项目的名称,要求输入英文字符。(2)按数字键2用户可以添加获奖学习信息,包括所在学校编号,性别,参赛项目编号,成绩和名次。(3)按数字键3,可以按学校编号输出学校参赛的信息,包括学校的编号名称,男子团体总分,女子团体总分,团体总分,积分。可以输出每个学校的每个运动员的信息,包括姓名,性别,得分项目名称,成绩,名次。可以输出所有的运动项目。(4)按数字键4,可以查询某个学校某个项目的信息。(5)按数字键5,可以按项目编号查询取得前三或前五名的学校。(6)按15之外的数字键可以退出程序。七参考文献在编程过程中所参考的文献:数据结构第三版、C语言教程八对所设计的软件进行自我评价 此源程序代码还存在两点点没有解决的问题,第一学校总分成绩排序没有编写代码,第二男女生参加项目人数没有统计,其他的相关要求基本上达到。在实验过程中出现以下几点问题:第一,在创建链表时,忽略了不带头结点的指针头指针需要向后移,是由于长期的定式思维,头指针是不能发生改变导致;第二,对链表的掌握不是足够的扎实,因此在处理相关问题的时候,存在很大的障碍,譬如对遍历链表,表头指针的后移;第三,在处理每个项目的前三名和前五名积分是花费了一段时间去理解。九程序源代码:#include"stdio.h"#include"malloc.h"#include"stdlib.h"#include"string.h"typedef struct Projectint number;/项目编号 char name10;/项目名称 int count;/该项目得分人数Project_Table;typedef struct Studentchar name10; int sex; int Project;/参加的项目 int score;/成绩 int ranking;/名次Student;typedef struct SchoolNodeint number;/学校编号 char name10; int count;/运动员人数 int boyscore;/男子团体总分 int girlscore;/女子团体总分 int totalscore;/团体总分 int jifen;/积分 Student students20;/参赛学生 struct SchoolNode *next;SchoolNode,*School;int SchoolCount=0;/学校总数int BoyProject=0;/男生项目总数int GirlProject=0;/女生项目总数int TotalProject=0; /项目总数Project_Table Project_T41;/项目表void CreatSchoolLink(School &head)/创建学校的链表 School p; int i; head=p=(School)malloc(sizeof(SchoolNode); for(i=1;i<=SchoolCount;i+) p=p->next=(School)malloc(sizeof(SchoolNode); printf("请输入编号为%d的学校的名称:n",i); scanf("%s",p->name); p->number=i; p->count=0; p->boyscore=0; p->girlscore=0; p->totalscore=0; p->jifen=0; p->next=NULL;/使指针指向空 head=head->next;/头指针后移 void AddStudentLink(School &head)/添加获奖学生 School L,p; int School_ID; /学校编号 char StudentName20; /学生姓名 int sex;/性别 int Project_ID; /项目编号 int score; /成绩 int ranking; /名次 printf("请输入学生的姓名:n"); scanf("%s",StudentName); printf("请输入该学生所在学校的编号:n"); scanf("%d",&School_ID); printf("请输入该学生的性别(0-女,-男):n"); scanf("%d",&sex); printf("请输入该学生参加的项目编号:n"); scanf("%d",&Project_ID); if(sex=0) GirlProject=Project_ID; if(sex=1) BoyProject=Project_ID; printf("请输入该学生该项目的得分:n"); scanf("%d",&score); printf("请输入该学生在该项目中的名次:n"); scanf("%d",&ranking); L=head; while(L) if(L->number=School_ID) p=L; p->count=p->count+1; /运动员数+1 strcpy(p->studentsp->count.name, StudentName); /学生姓名 p->studentsp->count.Project=Project_ID ;/得分项目 Project_TProject_ID.count=Project_TProject_ID.count+1; /该项目得分人数+1 p->studentsp->count.ranking=ranking;/得分名次 p->studentsp->count.score=score;/得分 p->studentsp->count.sex=sex; /性别 break; else L=L->next; void Find_Project_ID(School &head,int Project_ID) /按项目编号查询取得前三或前五名的学校。 School h,p; p=h=head; /保存链表头指针 int i; printf("查询结果如下:n"); while(h) for(i=1;i<=h->count;i+) if(h->studentsi.Project=Project_ID) printf("学校:%s 姓名:%s 名次:%dn",h->name,h->studentsi.name,h->studentsi.ranking); printf("n-n"); h=h->next; void Find_School_Project(School &head,int School_ID,int Project_ID)/按学校编号查询学校某个项目 School h,p; int Project_i=0; int i; p=h=head; /保存链表头指针 while(h) if(h->number=School_ID)p=h;break; h=h->next; for(i=1;i<=p->count;i+) if(p->studentsi.Project=Project_ID) printf("查询结果如下:n"); printf("姓名:%sn",p->studentsi.name); Project_i=p->studentsi.Project; if(p->studentsi.sex=0) printf("性别:女n"); Project_i=Project_i+20; else printf("性别:男n"); printf("项目编号:%d 项目名称%s 该项目得分%d 名次:%dn",p->studentsi.Project,Project_TProject_i.name,p->studentsi.score,p->studentsi.ranking); void OutPut_Link(School head) /向屏幕输出数据 School h; h=head; int i; int Project_ID; int Project_count_i; while(h) /遍历学校 printf("学校编号:%dn",h->number); printf("学校名称:%sn",h->name); printf("本次运动会积分%dn",h->jifen); printf("男子团体总分:%dn",h->boyscore); printf("女子团体总分:%dn",h->girlscore); printf("总分:%dn",h->totalscore); printf("运动员数:%dn",h->count); for(i=1;i<=h->count;i+) /输出该校学生运动员情况 printf("运动员姓名:%sn",h->studentsi.name); if(h->studentsi.sex=0)printf("性别:女n"); else printf("性别:男n"); Project_ID=h->studentsi.Project; if(h->studentsi.sex=0)Project_ID=Project_ID+20; /如果是女生则项目表向后移动 printf("得分项目:%sn",Project_TProject_ID.name); printf("得分:%dn",h->studentsi.score); printf("得分名次:%dn",h->studentsi.ranking); printf("n-n"); h=h->next; /指针向后移动 printf("n-n"); void ScoreCount(School &head)/成绩统计 School p; p=head; /保存链表头指针 int boyscore=0; /男子团体总分 int girlscore=0; /女子团体总分 int totalscore=0; /团体总分 int i; int Project_i=0; int jifen=0;/积分 while(p) for(i=1;i<=p->count;i+) /计算分数 totalscore=totalscore+p->studentsi.score; /计算总分 if(p->studentsi.sex=0) girlscore=girlscore+p->studentsi.score;/女子团体总分 else boyscore=boyscore+p->studentsi.score;/男子团体总分 /计算积分 Project_i=p->studentsi.Project; if(Project_TProject_i.count>=5) /取前名 if(p->studentsi.ranking=1)jifen=jifen+7; else if(p->studentsi.ranking=2)jifen=jifen+5; else if(p->studentsi.ranking=3)jifen=jifen+3; else if(p->studentsi.ranking=4)jifen=jifen+2; else if(p->studentsi.ranking=5)jifen=jifen+1; if(Project_TProject_i.count<5) /取前名 if(p->studentsi.ranking=1)jifen=jifen+5; else if(p->studentsi.ranking=2)jifen=jifen+3; else if(p->studentsi.ranking=3)jifen=jifen+2; /for p->jifen=jifen; /计算积分 p->girlscore=girlscore;/保存女子总分 p->boyscore=boyscore;/保存男子总分 p->totalscore=totalscore;/保存总分 jifen=0; boyscore=0; /男子团体总分 girlscore=0; /女子团体总分 totalscore=0; /总分 p=p->next; /向后

    注意事项

    本文(数据结构运动会分数统计课程设计(共22页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开