C语言课程设计运动会分数统计系统说明书1_第1页
C语言课程设计运动会分数统计系统说明书1_第2页
C语言课程设计运动会分数统计系统说明书1_第3页
C语言课程设计运动会分数统计系统说明书1_第4页
C语言课程设计运动会分数统计系统说明书1_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、*实践教学*兰州理工大学计算机与通信学院2010年春季学期计算机语言B 课程设计题 目:运动会分数统计系统 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 目 录摘 要1前 言4正 文51.需求分析52.概要设计63.详细设计74.调试分析85.测试结果86.说明书8总 结9参考文献10致 谢11附件 部分源程序代码12摘 要建立一个“运动会分数统计系统”,系统以菜单方式工作,编写存放有运动会的相关信息,要求输入男、女参赛项目数及项目编号,项目名次、得分,参赛学校编号、运动员编号、性别;产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名;产生团体总分报表,内容包

2、括校号、男子团体总分、女子团体总分和团体总分。要求系统能实现查询、排序、删除、修改功能。前 言 运动会分数统计系统 的发展历史可以追溯到20世纪60年代末期。由于当时计算机技术已经进入实用阶段,同时大型运动会用手工来计算既费时费力又非常容易出差错,为了解决这个矛盾,运动会分数统计系统应运而生。当时由于技术条件和需求的限制,用户非常少,而且那种系统充其量也只不过是一种自动计算工具,几乎没有报表生成功能和薪资数据分析功能。但是,它的出现为运动会分数统计展示了美好的前景,即用计算机的高速度和自动化来替代手工的巨大工量,用计算机的高准确性来避免手工的错误和误差,使大规模集中处理大型运动会成为可能。正

3、文一.需求分析1问题描述运动会分数统计系统参加运动会有n个系,系编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、 2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)2.基本要求:1).可以输入各个学校、各项目、以及各项目前三名的数据信息;2)能统计各学校总分、男子项目和女子项目总分;3)可以按学校编号(或学校名称)、学校总分、男女团体总分排序输出;4).可以按学校编号(或学校名称)查询学校某个项目的情况;可以按项目编号查询取得

4、前三的学校。3、系统总体设计整 体 结 构 图 运动会 分数统计系统输 入 排 序 查 询 退出 二、概要设计 1.数据结构<1>学校:名称,编号,总分,男子团体总分,女子固体总分。<2>运动项目: 项目编号,名称,男子项目,女子项目,前三名,前五名, 2.程序模块及之间的调用关系初始化界面初始化数据输入学校名称输入运动项目按学校编号输出总分按总分排序按男团体总分排序按女团体总分排序按项目编号查询按学校编号查询退 出显示提示菜单操 作退 出返 回三、详细设计 (1)本程序中学校的存储结构为链表,Prev school(最后) next 头结点 Prev school1

5、next其中school类为: class school:public athlete /*学校*/ public: int count; /*学校获奖数*/ int serial; /*学校编号*/ int menscore; /*男选手总分*/ int womenscore; /*女选手总分*/ int totalscore; /*总分*/ athlete athMaxSize; /*获奖运动员信息数组,包括分数,名次,项目*/ school *prev;/前指针 school *next; /后指针;其中部分主要的函数:添加操作add(school* &head)查询操作chec

6、kFunc(school *head,int &n)文件保存save(school *head)总分快速排序tquicksort(vector<school *>& v, int first, int last)总分基数排序 tbaseSort(vector<school *>& v, int d) 2.关键算法 添加项目号for ( i = 1 ; i <= n ; i+ ) 输入第i名运动员的学校编号tempwhile(first!=head)/遍历链表,直到找到编号为serial的学校所在结点,或first指向表头headif (fi

7、rst->serial =要添加的编号) (first->athfirst->count).item =要添加的项目号;(first->athfirst->count).range =i(名次) First指向的学校的项目加一;更新总分break;first = first->next;YYYYYYYYNNNNNNNN开始输入项目编号temp是数字NY0<temp<18NY输出“项目不存学校遍历结束temp存在YNNext schoolNtemp是奇数 NY取5名取3名输入获奖的学校编号se1<se<15NY项目号、名次、运动员名字添

8、进学校所在结点Y继续添加YN结束3、算法设计 主要算法的设计思想: 本程序主要是使用函数来实现操作。一个运动会包括参加学校、运动项目和参加运动会的成员。因此构造两个函数。为了操作的方便,并且能够保存输入数据,所以通过文件操作来实现数据的写和读。对于总分的排序使用了冒泡排序。为了使整个程序看起来更加友好,又添加了程序启动画面。4.查询操作:while(first!=head) if (输入的项目编号=学校第i位运动员的项目)把第i位运动员的项目,学校编号、名次、得分信息压入向量;first = first->next;输出向量中的内容1. 所有学校总分统计表2. 学校成绩查询3. 项目情况

9、查询4. 返回主菜单1. 按学校编号统计2. 按学校名次统计3. 按男团总分统计4. 按女团总分统计5. 返回查询菜单6. 返回主菜单/按学校编号顺序输出所有参赛学校运动会成绩void serialSort(vector<school *>& v)for(int i=0;i<v.size();i+)cout<<*vi;四、调试分析本程序相对来说比较容易看明白,其中涉及到的一些函数相对来说比较容易。通过调试,运行,基本上达到了要求,但还存在一些缺点。如:不够人性化等。五、测试结果1.主菜单窗口2. 输入各个项目成绩并存储文件3. 统计各学校总分4. 按学校编

10、号排序输出5. 按学校总分排序输出6. 按男团体总分排序输出7. 按女团体总分排序输出8. 按学校编号查询学校某个项目情况9. 按项目编号查询取得名次的学校六、说明书 1、运行环境 Windows,VC+6.02根据正确的提示安装软件。3、Intel486以上系列、AMD K6 以上系列等PC台式机和便携式电脑都可运行。4、操作过程 用户进入程序启动界面,等l完成后进入主菜单.主菜单有以下8个选项 1.输入学校 2.输入运动项目 3.按学校编号输出总分 4.按总分排序 5.按男团体总分排序 6.按女团体总分排序 7.按项目编号查询 8.按学校编号查询 总 结该系统以运动会分数统计为背景,涵盖了

11、运动员检录、运动员成绩的排序、运动员评奖等的多种功能,并且有一定的可行性和安全性,确保了各项指定功能得以运行。本系统以基本函数、结构体、枚举性、文件以及链表等多方位知识贯穿实现。 通过此次程序设计实践,是同学们对所学知识的综合运用,也是程序设计得以提高的表现。通过此次编程培养了我们结构化程序设计的思想,加深了对高级语言基本语言要素和控制结构的理解,锻炼我们独立思考制作程序的能力,并且掌握了一些课程设计的相关知识与实践操作能力,为以后的学习提供了锻炼的机会。经过设计和开发,能够完成运动员检录、运动员成绩的排序、运动员评奖等的多种操作。并提供部分系统维护功能,使用户方便进行数据备份和恢复、数据删除

12、。对于数据的一致性的问题也通过程序进行了有效的解决。从而是我对c语言这门课程有了更好的了解。但是由于设计时间较短,所以该系统还有许多不尽如人意的地方,比如联机文档比较少,用户界面不够美观,出错处理不够等多方面问题。这些都有待进一步改善。 参考文献1、 C/C+程序设计教程,王连相,中国铁道出版社,20062 、 C语言程序设计,谭浩强,清华大学出版社,19993、 C程序设计题解与上机指导,谭浩强,清华大学出版社,19994、 C/C+程序设计上机指导与测试,王连相,中国铁道出版社,20065、 C语言函数手册,机械工业出版社,19996 、 C语言的实际应用,安徽科学技术出版社,2000致

13、谢在编写程序的过程中,我们得到了丁政建老师的精心指导以及孜孜不倦的教诲,在老师的指导下,我们的能力得到了提高,同时养成了科学、严谨的作风和习惯,在此,我们对老师的精心栽培表示衷心的感谢! 感谢同学们对我的帮助和指点,尤其感谢我的舍友在非常时期,在生活和学习上帮我许多忙。在课设即将完成之际,我的心情无法平静,从开始进入课题到课设的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意。附件 部分原程序代码#include <stdio.h> #include <stdlib.h> #include <string.h> #includ

14、e <io.h> /#include <conio.h> /*屏幕操作函数*/ #define MAX 50 /#define NULL 0 typedef struct node1 int school; /*学校编号*/ int record; /*项目成绩*/ struct node1 *next; /*链域*/ Schools; typedef struct int item; /*项目编号*/ Schools *firstschool; /*链域指向链表中第一个结点*/ ITEM; typedef struct int z; /* 项目总数 */ ITEM a

15、MAX; ALLitems; typedef struct node2 int item; /*该学校获奖的项目*/ int record; /*项目成绩*/ struct node2 *next; /*链域*/ Items; typedef struct int school; /*学校编号*/ int score; /*学校总分*/ int boys; /*男团体总分*/ int girls; /*女团体总分*/ Items *firstitem; /*链域指向链表中第一个获奖项目的结点*/ SCHNode; typedef struct int n; /* 学校总数 */ SCHNode

16、 bMAX; ALLNode; ALLitems *g1; ALLNode *g2; void funct1(ALLitems *g1,ALLNode *g2) Schools *p1; Items *p2; int i,j,k,m,w,h,x; p1=(Schools *)malloc(sizeof(Schools); p2=(Items *)malloc(sizeof(Items); if(!p1|!p2) exit(1); printf("n *输入各个项目信息 * nn"); printf(" 输入男子项目总数m:"); scanf("

17、%d",&m); if(m<0|m>20) printf(" 输入有误,m是20以内的整数,请重新输入:"); scanf("%d",&m); printf(" 输入女子项目总数w:"); scanf("%d",&w); if(w<0|w>20) printf(" 输入有误,w是20以内的整数,请重新输入:"); scanf("%d",&w); printf(" 输入参加运动会的学校总数n:"

18、;); scanf("%d",&g2->n); if(g2->n<0|g2->n>20) printf(" 输入有误,n是20以内的整数,请重新输入:"); scanf("%d",&g2->n); g1->z=m+w; printf(" 则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z); printf("nn *记录运动会成绩*"); printf("nn (输入0标志结束)n"); for(

19、k=1;k<=g1->z;k+) g1->ak.item=k; g1->ak.firstschool=NULL; for(k=1;k<=g2->n;k+) g2->bk.school=k; g2->bk.firstitem=0; g2->bk.score=0; g2->bk.boys=0; g2->bk.girls=0; g2->b0.score=0; g2->b0.boys=0; g2->b0.girls=0; while(i!=0) printf("n 项目:"); scanf(&quo

20、t;%d",&i); if(i!=0) printf(" 1.前三名 2.前五名n"); printf(" 请选择:"); scanf("%d",&j); if(j!=1&&j!=2) printf(" 输入有误,请重新选择:"); scanf("%d",&j); if(j=1) h=3; do printf(" 第%d名:学校(学校编号为数字)",h); scanf("%d",&x); p1=(S

21、chools *)malloc(sizeof(Schools); p1->school=x; p2=(Items *)malloc(sizeof(Items); p2->item=i; if(h=3) p2->record=p1->record=2; if(h=2) p2->record=p1->record=3; if(h=1) p2->record=p1->record=5; p1->next=g1->ai.firstschool; g1->ai.firstschool=p1; p2->next=g2->bx.f

22、irstitem; g2->bx.firstitem=p2; g2->bx.score=g2->bx.score+p2->record; /* 累计总分 */ if(i<=m) g2->bx.boys=g2->bx.boys+p2->record; /* 累计男团体总分 */ else g2->bx.girls=g2->bx.girls+p2->record; /* 累计女团体总分 */ h-; while(x!=0&&h!=0); if(j=2) h=5; do printf(" 第%d名:学校(学校

23、编号为数字)",h); scanf("%d",&x); p1=(Schools *)malloc(sizeof(Schools); p1->school=x; p2=(Items *)malloc(sizeof(Items); p2->item=i; if(h=5) p2->record=p1->record=1; if(h=4) p2->record=p1->record=2; if(h=3) p2->record=p1->record=3; if(h=2) p2->record=p1->rec

24、ord=5; if(h=1) p2->record=p1->record=7; p1->next=g1->ai.firstschool; g1->ai.firstschool=p1; p2->next=g2->bx.firstitem; g2->bx.firstitem=p2; g2->bx.score=g2->bx.score+p2->record; /* 累计总分 */ if(i<=m) g2->bx.boys=g2->bx.boys+p2->record; /* 累计男团体总分 */ else g2

25、->bx.girls=g2->bx.girls+p2->record; /* 累计女团体总分 */ h-; while(x!=0&&h!=0); void save() FILE *fp1,*fp2; fp1=(FILE *)malloc(sizeof(FILE); fp2=(FILE *)malloc(sizeof(FILE); if(fp1=fopen("sports1","wb")=NULL) printf("cannot open file.n"); return; if(fwrite(g1,

26、sizeof(ALLitems),1,fp1)!=1) printf("file write error.n"); fclose(fp1); if(fp2=fopen("sports2","wb")=NULL) printf("cannot open file.n"); return; if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1) printf("file write error.n"); fclose(fp2); void funct2(ALLNode *g2

27、) /* 输出各学校总分 */ int k; printf("nn * 输出各学校总分 *n"); printf(" 学校编号t 总分 n"); for(k=1;k<=g2->n;k+) printf(" %dttt %dn",k,g2->bk.score); printf("n"); system("pause"); printf(" 按任意键返回主菜单."); getchar(); void funct3(ALLNode *g2) /* 按学校编号排序输

28、出 */ int k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf("nn * 按学校编号排序输出 *n"); printf(" 学校编号ttt获奖情况 n"); scanf("%d",&k); for(k=1;k<=g2->n;k+) printf("tttttt%dt",k); p2=g2->bk.firstitem; while(p2!=NULL) printf("项目%d:得%d分 ",p2->i

29、tem,p2->record); p2=p2->next; printf("n"); printf("n"); system("pause"); printf("按任意键返回主菜单."); getchar(); void funct4(ALLNode *g2) /* 按学校总分排序输出 */ int i,j,k; Items *p2; printf("nn * 按学校总分排序输出 *n"); printf(" 学校编号tt总分 n"); scanf("%

30、d",&k); /printf("输入要查询的项目编号:"); for(i=2;i<=g2->n;i+) printf("%dt",k); p2=g2->bk.firstitem; while(p2!=NULL) printf("%d tt%dn",g2->bk.school,g2->bk.score); p2=p2->next; printf("n"); g2->b0.score=g2->bi.score; g2->b0.boys=g2-&g

31、t;bi.boys; g2->b0.girls=g2->bi.girls; g2->b0.school=g2->bi.school; j=i-1; while(g2->b0.score<g2->bj.score&&j>0) g2->bj+1.score=g2->bj.score; g2->bj+1.boys=g2->bj.boys; g2->bj+1.girls=g2->bj.girls; g2->bj+1.school=g2->bj.school; j-; g2->bj+1.

32、score=g2->b0.score; g2->bj+1.boys=g2->b0.boys; g2->bj+1.girls=g2->b0.girls; g2->bj+1.school=g2->b0.school; for(k=1;k<=g2->n;k+) printf("%d tt%dn",g2->bk.school,g2->bk.score); system("pause"); printf("按任意键返回主菜单."); getchar(); void funct5(

33、ALLNode *g2) /* 按男团体总分排序输出 */ int i,j,k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf("nn * 按男团体总分排序输出 *n"); printf("学校编号tt男团体总分 n"); scanf("%d",&k); /printf("输入要查询的学校编号:"); for(i=2;i<=g2->n;i+) printf("%dt",k); p2=g2->bk.firstite

34、m; while(p2!=NULL) printf("%dtt %dn",g2->bk.school,g2->bk.boys); p2=p2->next; printf("n"); g2->b0.score=g2->bi.score; g2->b0.boys=g2->bi.boys; g2->b0.girls=g2->bi.girls; g2->b0.school=g2->bi.school; j=i-1; while(g2->b0.boys<g2->bj.boys&am

35、p;&j>0) g2->bj+1.score=g2->bj.score; g2->bj+1.boys=g2->bj.boys; g2->bj+1.girls=g2->bj.girls; g2->bj+1.school=g2->bj.school; j-; g2->bj+1.score=g2->b0.score; g2->bj+1.boys=g2->b0.boys; g2->bj+1.girls=g2->b0.girls; g2->bj+1.school=g2->b0.school; f

36、or(k=1;k<=g2->n;k+) printf("%dtt %dn",g2->bk.school,g2->bk.boys); system("pause"); / 暂停等待 printf("按任意键返回主菜单."); getchar(); void funct6(ALLNode *g2) /* 按女团体总分排序输出 */ int i,j,k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf("nn * 按女团体总分排序输出 *n"

37、); printf("学校编号tt女团体总分 n"); scanf("%d",&k); / printf("输入要查询的项目编号:"); for(i=2;i<=g2->n;i+) printf("%dt",k); p2=g2->bk.firstitem; while(p2!=NULL) printf("%dtt %dn",g2->bk.school,g2->bk.girls); p2=p2->next; printf("n"); g

38、2->b0.score=g2->bi.score; g2->b0.boys=g2->bi.boys; g2->b0.girls=g2->bi.girls; g2->b0.school=g2->bi.school; j=i-1; while(g2->b0.girls<g2->bj.girls&&j>0) g2->bj+1.score=g2->bj.score; g2->bj+1.boys=g2->bj.boys; g2->bj+1.girls=g2->bj.girls; g

39、2->bj+1.school=g2->bj.school; j-; g2->bj+1.score=g2->b0.score; g2->bj+1.boys=g2->b0.boys; g2->bj+1.girls=g2->b0.girls; g2->bj+1.school=g2->b0.school; for(k=1;k<=g2->n;k+) printf("%dtt %dn",g2->bk.school,g2->bk.girls); system("pause"); pri

40、ntf("按任意键返回主菜单."); getchar(); void funct7(ALLNode *g2) /* 按学校编号查询学校某个项目情况 */ int i,j; Items *p2; printf("n * 按学校编号查询学校某个项目情况 *n"); printf(" 输入要查询的学校编号:"); scanf("%d",&i); printf(" 输入要查询的项目编号:"); scanf("%d",&j); p2=g2->bi.firstite

41、m; while(p2!=NULL) if(p2->item=j) printf(" 学校编号:%dt项目%d:得%d分n",i,p2->item,p2->record); p2=p2->next; printf("n"); system("pause"); printf(" 按任意键返回主菜单."); getchar(); void funct8(ALLitems *g1) /* 按项目编号查询取得名次的学校 */ int i; Schools *p1; printf("n* 按项目编号查询取得名次的学校 *n"); printf("输入要查询的项目编号:"); scanf("%d",&i); printf("项目编号ttt取得名次的学校n"); printf("%dt",i); p1=g1->ai.firstschool; while(p1!=NULL) printf(" 学校%d:得%d分 ",p1->school,p1->record); p1=p1->next; printf("nn"

温馨提示

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

评论

0/150

提交评论