运动会分数统计系统下.docx
- 文档编号:6644614
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:35
- 大小:396.86KB
运动会分数统计系统下.docx
《运动会分数统计系统下.docx》由会员分享,可在线阅读,更多相关《运动会分数统计系统下.docx(35页珍藏版)》请在冰豆网上搜索。
运动会分数统计系统下
*******************
实践教学
*******************
兰州理工大学
软件职业技术学院
2011年秋季学期
计算机应用基础课程设计
题目:
运动会分数统计系统
专业班级:
软件技术
(2)班
姓名:
刘正翔
学号:
11700215
指导教师:
张墨逸
成绩:
目录
摘要1
运动会分数统计系统2
1问题描述与分析2
1.1课程设计目的2
1.2系统需求分析2
2总体设计3
2.2函数构造4
3详细设计4
3.1数据类型及重要变量的定义4
3.2函数的设计和实现5
4编码9
(4)退出系统9
5测试12
6课程设计总结17
6.1调试中遇到的较重要问题回顾17
6.2算法的效率及改进设想18
参考文献18
附录18
摘要
C语言通常别称为高级语言中的中级计算机语言。
C语言由于它的可移植性和高效率,各种C语言编译程序均可产生非常紧凑、执行快捷的目标码。
它比任何一种BASIC语言编译程序的目标码都紧凑、快速。
这就要求有较高的理论水平,而且还要求有实际的动手能力。
因此掌握C语言程序设计是学好软件技术的第一步。
本课程设计的主要目的是提高实践能力,包括提高C语言的编程能力,长期以来,注重书本知识,轻视实际动手设计能力是教学中普遍存在的现象。
进行课程设计的目的就是要改变这种状况,使学习者既具有完备的理论知识,也能够解决在实际学习,生活工作中遇到的问题。
学生应该能够把学习到的理论知识运用到实际中去,将知识转变为实际的能力,同时通过这些理论知识和实际的应用推动理论和实践的发展。
关键字:
函数,定义,子程序,文本编辑
运动会分数统计系统
1问题描述与分析
1.1课程设计目的
为了巩固我们数据结构知识,加强我们的实际动手能力和提高我们综合素质,提高我们对计算机软件工程的认识学院组织我们进行了数据结构课程设计。
此次课程设计要达到以下几点目的:
(1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。
(2)提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
(3)培养算法分析能力。
分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
(4)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
1.2系统需求分析
问题描述:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)。
功能要求:
1) 可以输入各个学校各个项目的前三名或前五名的成绩;
2) 能统计各学校总分;
3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;
4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校;
5) 数据存入文件并能随时查询;
6) 规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称。
输出形式:
有中文提示,各学校分数为整形。
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
2总体设计
2.1系统功能设计
根据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:
信息统计模块、信息输出模块、信息查询模块,其系统功能结构图如图1所示。
(1)信息统计模实现信息的输入、统计、存档。
(2)信息输出模块,实现信息的输出。
(3)信息查询实现信息的查询。
信息统计模块
图1系统功能结构图
2.2函数构造
根据系统功能结构图的描述,可以构造出该系统的几个基本的函数,其方法名和功能如表1所示。
表1函数功能表
函数
功能
voidinputinformation()
输入和统计信息函数
voidoutput()
输出信息函数
voidinquiry()
查询信息函数
voidwritedata()
数据存储函数
voidreaddata()
读入数据函数
3详细设计
3.1数据类型及重要变量的定义
(1)定义运动项目数据类型,用于存放运动项目,包括项目编号、项目所取名次数、名次、分数。
//定义项目结点的类型
typedefstruct
{
intitemnum;//项目编号
inttop;//项目取名次的数目,由用户定义3或5
intrange[5];//名次
intmark[5];//分数
}itemnode;
(2)定义学校数据类型,用来存储参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组。
//定义学校结点类型
typedefstruct
{
intschoolnum;//学校编号
intscore;//学校总分
intmscore;//男团体总分
intwscore;//女团体总分
itemnodec[m+w];//项目数组
}schoolnode;
(3)定义学校数组schoolnodeh[n]。
采用数组结构有利于随机的存储和查询。
定义全局标志变量intflag1、flag2,分别用以标志是否已经向系统输入了信息和标志系统中是否已经存在信息。
定义文件指针FILE*report,用来指向存档的文件。
3.2函数的设计和实现
在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进行一一说明,只对其中比较重要的功能模块进行描述。
(1)信息输入及分数统计功能
voidinputinformation()为输入信息及分数统计函数。
在输入信息的同时进行分数的统计。
可以输入各个学校各项目前三名或前五名的成绩。
在输入学校的参赛项目时,结果取前三名还是前五名自己定,用一个选择语句实现。
利用swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7,5、3、2、1,未取得成绩则赋为0。
并统计团体总分,男团总分和女团总分。
其主要功能代码如下:
for(s=0;s {printf("*****名次: "); scanf("%d",&h[i].c[j].range[s]);//输入所获名次信息 if(h[i].c[j].top==3) switch(h[i].c[j].range[s]) {case0: h[i].c[j].mark[s]=0;break; case1: h[i].c[j].mark[s]=5;break; case2: h[i].c[j].mark[s]=3;break; case3: h[i].c[j].mark[s]=2;break; } else switch(h[i].c[j].range[s]) {case0: h[i].c[j].mark[s]=0;break; case1: h[i].c[j].mark[s]=7;break; case2: h[i].c[j].mark[s]=5;break; case3: h[i].c[j].mark[s]=3;break; case4: h[i].c[j].mark[s]=2;break; case5: h[i].c[j].mark[s]=1;break; } h[i].score=h[i].score+h[i].c[j].mark[s]; (2)信息输出功能 voidoutput()为输出函数。 列出一个输出目录利用swich语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。 利用辅助数组remember[]和冒泡排序的方法使之按分数的由高到低输出。 利用循环语句dowhile()当输入2时返回输出目录,输入0是跳出循环返回主菜单。 其流程图如图2所示。 图2输出信息模块流程图 (3)信息查询功能 voidinquiry()为查询函数。 列车一个查询目录利用swich语句使函数按学校编号或项目编号查询,输出某学校的某个项目的得分情况或某个项目的前几名的学校。 再利用循环语句dowhile()当输入2是返回查询目录,输入0时跳出循环返回主菜单。 其程序流程图如图3所示。 图3查询信息模块程序流程图 (4)主函数 voidmain()是主函数。 列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。 想在每次查询结束想返回主菜单进行其它项时,应在main()函数中调用其它函数时再调用main()函数,如: switch(choice) { case1: printf("输入信息: \n");inputinformation();writedata();printf("信息已存入档案! ");main(); case2: printf("输出信息: \n");if(flag1)readdata();output();main(); 在进入主菜单后为了确保系统中已经输入了信息,用标志标量flag1和flag2来控制循环。 如果系统中没有任何信息,用户就不能选择输入或查询操作,此时会输出提示信息,并返回主菜单。 直到用户输入了信息或退出系统。 其实现代码如下: do{printf("======================欢迎使用======================\n"); printf("\n\n*****************运动会分数统计系统********************\n"); printf("\n\n********************1.输入信息*************************\n"); printf("********************2.输出信息*************************\n"); printf("********************3.查询信息*************************\n"); printf("********************4.退出系统*************************\n\n\n"); printf("================================================\n\n"); printf("********请选择要实现步骤的编号(请确保已经输入信息! ): \n\n"); scanf("%d",&choice); if(choice==4)break; elseif(choice==1)flag1=0; elseif((report=fopen("sportsdata.txt","r"))! =null)flag2=0; else {system("cls"); printf("\n\n\n\n系统中无任何信息! \n\n请先输入信息! ! ! \n\n\n\n"); } }while(flag1&&flag2); 4编码 (4)退出系统 在主菜单下输入4可以退出系统,并有中文提示,如图所示。 (4)主函数 voidmain()是主函数。 列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。 想在每次查询结束想返回主菜单进行其它项时,应在main()函数中调用其它函数时再调用main()函数,如: switch(choice) { case1: printf("输入信息: \n");inputinformation();writedata();printf("信息已存入档案! ");main(); case2: printf("输出信息: \n");if(flag1)readdata();output();main(); 在进入主菜单后为了确保系统中已经输入了信息,用标志标量flag1和flag2来控制循环。 如果系统中没有任何信息,用户就不能选择输入或查询操作,此时会输出提示信息,并返回主菜单。 直到用户输入了信息或退出系统。 其实现代码如下: do{printf("======================欢迎使用======================\n"); printf("\n\n*****************运动会分数统计系统********************\n"); printf("\n\n********************1.输入信息*************************\n"); printf("********************2.输出信息*************************\n"); printf("********************3.查询信息*************************\n"); printf("********************4.退出系统*************************\n\n\n"); printf("================================================\n\n"); printf("********请选择要实现步骤的编号(请确保已经输入信息! ): \n\n"); scanf("%d",&choice); if(choice==4)break; elseif(choice==1)flag1=0; elseif((report=fopen("sportsdata.txt","r"))! =null)flag2=0; else {system("cls"); printf("\n\n\n\n系统中无任何信息! \n\n请先输入信息! ! ! \n\n\n\n"); } }while(flag1&&flag2); //主函数 voidmain() { intchoice; do { printf("======================欢迎使用======================\n"); printf("\n\n*****************运动会分数统计系统********************\n"); printf("\n\n********************1.输入信息*************************\n"); printf("********************2.输出信息*************************\n"); printf("********************3.查询信息*************************\n"); printf("********************4.退出系统*************************\n\n\n"); printf("================================================\n\n"); printf("********请选择要实现步骤的编号(请确保已经输入信息! ): \n\n"); scanf("%d",&choice); if(choice==1)flag1=0; elseif((report=fopen("sportsdata.txt","r"))! =null)flag2=0; else { system("cls"); printf("\n\n\n\n系统中无任何信息! \n\n请先输入信息! ! ! \n\n\n\n"); } }while(flag1&&flag2); switch(choice) { case1: printf("输入信息: \n");inputinformation();writedata();printf("信息已存入档案! ");main(); case2: printf("输出信息: \n"); if(flag1)readdata(); output();main(); case3: printf("查询信息: \n"); if(flag1)readdata(); inquiry();main(); case4: printf("退出系统! 谢谢使用! \n\n\n");exit(0); default: printf("输入错误! \n");exit(0); } } 5测试 运行程序,进入系统主菜单。 用户可以选择输入、输出、查询信息或退出系统,界面如图4所示。 图4系统主界面 (1)输入信息 输入1得到进入输入信息模块。 根据系统提示将以下信息输入系统中: 学校编号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返回主菜单。 如图7~9分别是按照学校编号、学校总分、女团总分输出的情况。 图7按学校编号输出 图8按学校总分输出 图9按女团总分输出 (3)查询信息 输入3进入信息查询模块,该模块分为两项,如图10所示。 图10信息查询模块 用户可以选择不同菜单进行查询,如图11和图12分别是按照学校编号和项目编号查询的情况。 图11按学校编号查询 图12按项目编号查询 (4)退出系统 在主菜单下输入4可以退出系统,并有中文提示,如图所示。 图13退出系统 6课程设计总结 6.1调试中遇到的较重要问题回顾 (1)提出问题: 所有输入输出内容只能在一屏内显示,学过c语言,很知道”\n”是换行,”\f”是换屏的,可是在这里就是无法实现。 解决问题: 输入clrscr(); (2)提出问题: 设置选项,供用户输入选择时,当按任意键时都会跳入下一步操作,或者直接退出系统。 分析问题: 在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。 解决问题: 修改case语句,添加default语句提示出错,要求重新输入。 源代码如下: Default: { clrscr();/*清屏*/ printf("输入错误,请重新选择"); } (3)提出问题: 用户在系统主菜单上进行选择时,若没有输入任何初始信息,而选择输出或查询操作,系统也会做出相应操作。 解决问题: 增加标识变量作为循环终止变量,用来判断系统中是否已经输入了信息。 若没有就提示用户先输入信息。 6.2算法的效率及改进设想 算法的效率: 总的来讲,严重影响执行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,耗费大量的时间。 改进设想: 因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结构改为以由有关学校的各种信息为集合的结构。 致谢 这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。 自己动手,自己发现和解决问题。 发现了自己的许多不足。 平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。 我相信在以后的学习能够解决好它们。 通过本课题程序的设计、调试以及论文的编写,我不仅提高了利用C语言编程及识错能力和撰写论文的能力,而且它使我更加深入的了解到了《计算机应用基础》这门课在现实生活中的重要性。 在这次课程设计过程中遇到过一些问题,但经过不懈努力,解决了部分,还有的现在不能解决,留待日后思考和解决。 比如说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择法排序。 在编写之前,做整体规划和详细设计很重要。 只有思路清晰,设计合理可行,编码才有可能有的放矢,才能更加有效的完成任务。 本次课程设计,对我来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。 但我对于难度一向是以积极迎战的态度来面对,认真积极努力完成这次课程设计的任务。 对我来说这是一次很好的机会,同时我也很好的把握了这次机会,认真的完成了此次的任务,对自己今后在程序编写方面以及文档撰写方面相信会有很大的帮助,在此也对学校安排这样一次学习表示感谢,最后希望自己在数据结构以及计算机的其他学习方面能够得到很好的提高。 参考文献 [1]王连相,C/C++程序设计教程,中国铁道出版社,2006 [2]谭浩强,C语言程序设计,清华大学出版社,1999 [3]谭浩强,C程序设计题解与上机指导,清华大学出版社,1999 [4]王连相,C/C++程序设计上机指导与测试,中国铁道出版社,2006 [5]C语言函数手册,机械工业出版社,1999 [6]C语言的实际应用,安徽科学技术出版社,2000 附录 源程序: #include #include #include #include #definen2//学校数目 #definem1//男子项目数目 #definew1//女子项目数目 #definenull0 intflag1=1; intflag2=1;//全局变量,用来标识是否已经向系统输入信息 FILE*report; //定义项目结点的类型 typedefstruct { intitemnum;//项目编号 inttop;//项目取名次的数目,由用户定义3或5 intrange[5];//名次 intmark[5];//分数 }itemnode; //定义学校结点类型 typedefstruct { intschoolnum;//学校编号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 分数 统计 系统