运动会分数统计系统_第1页
运动会分数统计系统_第2页
运动会分数统计系统_第3页
运动会分数统计系统_第4页
运动会分数统计系统_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、. z. . - .可修编 .*实践教学*理工大学软件学院2011年秋季学期计算机应用根底课程设计题目: 运动会分数统计系统 专业班级: 软件技术(2)班 *: *正翔 *: 11700215 指导教师: *墨逸成绩:-. z.目 录TOC o 1-3 h z uHYPERLINK l _Toc314151991摘要 PAGEREF _Toc314151991 h 1HYPERLINK l _Toc314151992运动会分数统计系统 PAGEREF _Toc314151992 h 2HYPERLINK l _Toc3141519931 问题描述与分析 PAGEREF _Toc31415199

2、3 h 2HYPERLINK l _Toc3141519941.1 课程设计目的 PAGEREF _Toc314151994 h 2HYPERLINK l _Toc3141519951.2 系统需求分析 PAGEREF _Toc314151995 h 2HYPERLINK l _Toc3141519962总体设计 PAGEREF _Toc314151996 h 3HYPERLINK l _Toc3141519973 详细设计 PAGEREF _Toc314151997 h 4HYPERLINK l _Toc3141519983.1 数据类型及重要变量的定义 PAGEREF _Toc314151

3、998 h 4HYPERLINK l _Toc3141519993.2 函数的设计和实现 PAGEREF _Toc314151999 h 5HYPERLINK l _Toc3141520004 编码 PAGEREF _Toc314152000 h 9HYPERLINK l _Toc3141520015 测试 PAGEREF _Toc314152001 h 13HYPERLINK l _Toc3141520026 课程设计总结 PAGEREF _Toc314152002 h 18HYPERLINK l _Toc3141520036.1 调试中遇到的较重要问题回忆 PAGEREF _Toc3141

4、52003 h 18HYPERLINK l _Toc3141520046.2 算法的效率及改良设想 PAGEREF _Toc314152004 h 19HYPERLINK l _Toc314152005致谢 PAGEREF _Toc314152005 h 20HYPERLINK l _Toc314152006参考文献 PAGEREF _Toc314152006 h 21HYPERLINK l _Toc314152007附录 PAGEREF _Toc314152007 h 22-. z.摘 要C语言通常别称为高级语言中的中级计算机语言。C语言由于它的可移植性和高效率,各种C语言编译程序均可产生非

5、常紧凑、执行快捷的目标码。它比任何一种BASIC语言编译程序的目标码都紧凑、快速。这就要求有较高的理论水平,而且还要求有实际的动手能力。因此掌握C语言程序设计是学好软件技术的第一步。本课程设计的主要目的是提高实践能力,包括提高C语言的编程能力,长期以来,注重书本知识,轻视实际动手设计能力是教学中普遍存在的现象。进展课程设计的目的就是要改变这种状况,使学习者既具有完备的理论知识,也能够解决在实际学习,生活工作中遇到的问题。学生应该能够把学习到的理论知识运用到实际中去,将知识转变为实际的能力,同时通过这些理论知识和实际的应用推动理论和实践的开展。关键字:函数,定义,子程序,文本编辑运动会分数统计系

6、统1 问题描述与分析1.1 课程设计目的为了稳固我们数据构造知识,加强我们的实际动手能力和提高我们综合素质,提高我们对计算机软件工程的认识学院组织我们进展了数据构造课程设计。此次课程设计要到达以下几点目的:1了解并掌握数据构造与算法的设计方法,具备初步的独立分析和设计能力。2提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用根本调试方法,迅速找出程序代码中的错误并且修改。3培养算法分析能力。分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。4初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等根本方法和技能。1.2 系统需求分析问题描述:参加

7、运动会有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)规定:输入数据形式和*围:可以输入学校的名称,运动工程的名称。输出形

8、式:有中文提示,各学校分数为整形。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。2总体设计2.1 系统功能设计根据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:信息统计模块、信息输出模块、信息查询模块,其系统功能构造图如图1所示。1信息统计模实现信息的输入、统计、存档。2信息输出模块,实现信息的输出。3信息查询实现信息的查询。运动会分数统计系统运动会分数统计系统信息查询模块信息输出模块信息查询模块信息输出模块 信息统计模块 输入信息分数统计信息存档读出数据数据存储查询信息输入信息分数统计信息存档读出数据数据存储查询信息 图1 . 系统功

9、能构造图2.2 函数构造根据系统功能构造图的描述,可以构造出该系统的几个根本的函数,其方法名和功能如表1所示。表1 函数功能表函数功能void inputinformation( )输入和统计信息函数void output( )输出信息函数void inquiry( )查询信息函数void writedata( )数据存储函数void readdata( )读入数据函数3 详细设计3.1 数据类型及重要变量的定义1定义运动工程数据类型,用于存放运动工程,包括工程编号、工程所取名次数、名次、分数。/定义工程结点的类型typedef struct int itemnum; /工程编号 int to

10、p; /工程取名次的数目,由用户定义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、flag

11、2,分别用以标志是否已经向系统输入了信息和标志系统中是否已经存在信息。定义文件指针FILE * report,用来指向存档的文件。3.2函数的设计和实现在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进展一一说明,只对其中比拟重要的功能模块进展描述。1信息输入及分数统计功能void inputinformation( )为输入信息及分数统计函数。在输入信息的同时进展分数的统计。可以输入各个学校各工程前三名或前五名的成绩。在输入学校的参赛工程时,结果取前三名还是前五名自己定,用一个选择语句实现。利用swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7

12、,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

13、.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和冒泡排序的方法使

14、之按分数的由高到低输出。利用循环语句do while( )当输入2时返回输出目录,输入0是跳出循环返回主菜单。其流程图如图2所示。否开场显示选择菜单否开场显示选择菜单输入选项输入选项按学校总分输出按学校总分输出按女子团体总分输出按学校编号输出按男子团体总分输出按女子团体总分输出按学校编号输出按男子团体总分输出是否跳出是否跳出是是跳出 完毕跳出 完毕图2 输出信息模块流程图3信息查询功能void inquiry( )为查询函数。列车一个查询目录利用swich 语句使函数按学校编号或工程编号查询,输出*学校的*个工程的得分情况或*个工程的前几名的学校。再利用循环语句do while( )当输入2是

15、返回查询目录,输入0时跳出循环返回主菜单。其程序流程图如图3所示。否开场跳出完毕是是否跳出按工程编号查询按学校编号查询输入选项显示选择菜单否开场跳出完毕是是否跳出按工程编号查询按学校编号查询输入选项显示选择菜单图3 查询信息模块程序流程图4主函数void main( )是主函数。列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。想在每次查询完毕想返回主菜单进展其它项时,应在main( )函数中调用其它函数时再调用main( )函数,如:switch(choice) case 1: printf(输入信息:n);inputinformation();writedata();prin

16、tf(信息已存入档案!);main(); case 2: printf(输出信息:n);if(flag1)readdata();output();main();在进入主菜单后为了确保系统中已经输入了信息,用标志标量flag1和flag2来控制循环。如果系统中没有任何信息,用户就不能选择输入或查询操作,此时会输出提示信息,并返回主菜单。直到用户输入了信息或退出系统。其实现代码如下:doprintf(=欢送使用=n); printf(nn*运动会分数统计系统*n); printf(nn*1.输入信息*n); printf(*2.输出信息*n); printf(*3.查询信息*n); printf(

17、*4.退出系统*nnn); printf(=nn);printf(*请选择要实现步骤的编号( 请确保已经输入信息! ):nn);scanf(%d,&choice);if(choice=4)break;else if(choice=1)flag1=0;else if(report=fopen(sportsdata.t*t,r)!=null )flag2=0;else system(cls);printf(nnnn系统中无任何信息!nn请先输入信息!nnnn); while(flag1 & flag2);4 编码信息输出功能void output( )为输出函数。列出一个输出目录利用swich语句

18、使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。利用辅助数组remember和冒泡排序的方法使之按分数的由高到低输出。利用循环语句do while( )当输入2时返回输出目录,输入0是跳出循环返回主菜单。其流程图如图2所示。否开场显示选择菜单否开场显示选择菜单输入选项输入选项按学校总分输出按学校总分输出按女子团体总分输出按学校编号输出按男子团体总分输出按女子团体总分输出按学校编号输出按男子团体总分输出是否跳出是否跳出是是跳出 完毕跳出 完毕图2 输出信息模块流程图/信息输出模块,用来输出信息,可以选择按不同的方式输出信息void output() int choice,i

19、,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.mscor

20、e); 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 ,hremembe

21、ri.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

22、.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;i+)

23、 printf(nn*学校编号:%dn,hrememberi.schoolnum); printf(*学校总分:%dn ,hrememberi.score); printf(*男团总分:%dn,hrememberi.mscore); printf(*女团总分: %dnnn,hrememberi.wscore); break; printf(请选择 2 继续,0 跳出n); scanf(%d,&sign);while(sign=2); /循环执行输出语句5 测试运行程序,进入系统主菜单。用户可以选择输入、输出、查询信息或退出系统,界面如图4所示。图4 系统主界面1输入信息输入1得到进入输入信息模

24、块。根据系统提示将以下信息输入系统中:学校编号1,工程编号1,取前5名,获得1个名次,是第5名;工程编号2,取前3名,获得3个名次,分别是1、2、3名。学校编号2,工程编号1,取前5名,获得4个名次,分别是1、2、3、4名;工程编号2,取前5名,获得0个名次。输入信息后,会自动存档,并提示存档成功,然后自动返还主菜单,如图5所示。图5 信息成功输入系统并存入了文档 2输出信息输入2进入输出信息模块,该模块分四项,分别代表一种输出方式,如图6所示。图6 输入信息模块界面用户可以按照自己的喜好,选择一种方式输入信息,输入2返回输出信息模块,输入0返回主菜单。如图79分别是按照学校编号、学校总分、女

25、团总分输出的情况。图7 按学校编号输出图8 按学校总分输出图9 按女团总分输出3查询信息输入3进入信息查询模块,该模块分为两项,如图10所示。图10 信息查询模块用户可以选择不同菜单进展查询,如图11和图12分别是按照学校编号和工程编号查询的情况。图11 按学校编号查询图12 按工程编号查询4退出系统在主菜单下输入4可以退出系统,并有中文提示,如下图。图13 退出系统6课程设计总结6.1 调试中遇到的较重要问题回忆1提出问题:所有输入输出内容只能在一屏内显示,学过c语言,很知道n是换行,f是换屏的,可是在这里就是无法实现。解决问题: 输入clrscr();2提出问题:设置选项,供用户输入选择时

26、,当按任意键时都会跳入下一步操作,或者直接退出系统。分析问题:在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。解决问题:修改case语句,添加default语句提示出错,要求重新输入。源代码如下:Default:clrscr(); /*清屏*/printf(输入错误,请重新选择);3提出问题:用户在系统主菜单上进展选择时,假设没有输入任何初始信息,而选择输出或查询操作,系统也会做出相应操作。解决问题:增加标识变量作为循环终止变量,用来判断系统中是否已经输入了信息。假设没有就提示用户先输入信息。6.2算法的效率及改良设想算法的效率

27、:总的来讲,严重影响执行速度的便是查找,查找任意一个数据,便要将其所在的构造从头至尾遍历一次,消耗大量的时间。改良设想:因大局部显示均是以学校为单位,所以将以由有关人的各种信息为集合的构造改为以由有关学校的各种信息为集合的构造。致 谢这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现了自己的许多缺乏。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大局部问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。通过本课题程序的设计、调试以及论文的编写,我不仅提高了利用C语言编程及识错

28、能力和撰写论文的能力,而且它使我更加深入的了解到了计算机应用根底这门课在现实生活中的重要性。在这次课程设计过程中遇到过一些问题,但经过不懈努力,解决了局部,还有的现在不能解决,留待日后思考和解决。比方说在运用数据构造排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择法排序。 在编写之前,做整体规划和详细设计很重要。只有思路清晰,设计合理可行,编码才有可能有的放矢,才能更加有效的完成任务。本次课程设计,对我来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。但我对于难度一向是以积极迎战的态度来面对

29、,认真积极努力完成这次课程设计的任务。对我来说这是一次很好的时机,同时我也很好的把握了这次时机,认真的完成了此次的任务,对自己今后在程序编写方面以及文档撰写方面相信会有很大的帮助,在此也对学校安排这样一次学习表示感谢,最后希望自己在数据构造以及计算机的其他学习方面能够得到很好的提高。参考文献1王连相,C/C+程序设计教程,中国铁道,20062谭浩强,C语言程序设计,清华大学,19993谭浩强,C程序设计题解与上机指导,清华大学,19994王连相,C/C+程序设计上机指导与测试,中国铁道,20065 C语言函数手册,机械工业,19996 C语言的实际应用,*科学技术,2000附录程序:#incl

30、ude#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 school

31、num; /学校编号 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.it

32、emnum=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.c

33、j.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.ma

34、rks=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

35、(*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: /按学校总分输出 f

36、or(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(*女团总分:

37、 %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(*男团总

38、分:%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

39、); 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.t*t,w)=null) printf(文件不存在,不能翻开文件!n); e*it(1); for(i=0;in;i+)fwrite(&hi,sizeof(schoolnode),1,report); fclose(report);

温馨提示

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

评论

0/150

提交评论