运动会分数统计系统-c语言课程设计报告书_第1页
运动会分数统计系统-c语言课程设计报告书_第2页
运动会分数统计系统-c语言课程设计报告书_第3页
运动会分数统计系统-c语言课程设计报告书_第4页
运动会分数统计系统-c语言课程设计报告书_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

课程设计报告课程名称《C语言程序设计》课题名称运动会分数统计系统专业电气工程及其自动化班级电气工程学号姓名指导教师年月日湖南工程学院课程设计任务书课程名称《C语言程序设计》课题运动会分数统计系统专业班级电气工程及其自动化学生姓名学号指导老师审批任务书下达日期年月日任务完成日期年月日第一部分《C语言课程设计》任务书前言《C语言程序设计》课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,课程设计的课题比平时的习题复杂得多,也更接近实际。课程设计着眼于与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。为了达到上述目的,本课程设计安排了八个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。学生可任选其中一题进行设计,设计完毕写出课程设计报告,用A4纸打印成册;并将课程设计报告与源程序存盘。学习委员将课程设计报告与磁盘收齐后交指导老师。一、目的全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。二、设计要求掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。1、设计正确,方案合理。2、界面友好,使用方便。3、程序精炼,结构清晰。4、设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。5、上机演示。6、按学号顺序选课题号,并在规定的时间内独自完成相关课题的C源程序编写、调整和运行。源程序及编译生成各文件均保存在软盘中;7、按本任务书的要求,按附录的要求编写《课程设计报告》(Word文档格式)。并用A4的复印纸打印并装订;8、 在2015年7月10日之前,请各班学习委员收齐课程设计报告和源程序软盘交王颖老师三、进度安排第一周星期四:课题讲解,查阅资料第二周星期一:总体设计,详细设计星期二:编程,上机调试、修改程序星期四:上机调试、完善程序第二个星期二:答辩第二个星期四:撰写课程设计报告四、设计可调试过程规范化要求需要分析分析系统功能需求以及用户操作流程。概要设计在需要分析的基础上,确定系统总体框架(系统功能结构图)详细设计定义数据储存结构,并设计实现系统功能的具体算法,画出各算法的工作流程图。代码设计根据所设计的算法,定义相应函数分别实现系统的各子功能模块,同时由主程序提供友好的用户界面,使用户可通过选择主菜单来调用课程设计中要求完成的各个功能模块,子程序执行完后还可以返回主菜单,继续选择其他功能执行。源程序要求书写规范,结构清晰。重点函数的重点变量。重点功能部分均要求给出清晰的程序注释五、设计报告及书写内容要求课程设计任务完成后,每位同学必须独立书写一份课程设计报告,注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。课程设计报告的内容应包括以下五个部分:需求分析:包括设计题目、设计要求以及系统功能需求分析;概要设计:包括系统总体设计框架和系统功能模块图;详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图;主要源程序代码:包括存储结构设计说明,以及完整源程序清单;调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在的问题的思考(列出主要问题的的出错想象、出错原因、及效果等);总结:包括课程设计过程中的学习体会与收获,对C语言和本次课程设计的认识以及自己的建议等内容。书写格式严格按所附要求书写。附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。正文格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体,行距22。正文内容:一、课题的主要功能;二、课题的功能模块可划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。正文总字数要求在5000字以上(不含程序源代码)。第一章需求分析1.1需求分析题目:运动会分数统计系统1.2为什么开发:本课程设计主要解决在运动会上,将各个比赛项目所有获得名次的同学的成绩输入;成绩查询;成绩修改;成绩删除;以及成绩输出。该程序用于运动会上,涉及到比赛项目成绩的录入,某个学校在某个项目中获得成绩的查询,某个学校在某个运动项目中获得的成绩的修改,某个学校在某个运动项目中获得的成绩的删除,以及某个学校所有获得成绩的得分报表以及团体成绩的得分报表。其中比赛成绩的录入可以按照运动项目举行的次序输入,也可以输入自己指定的运动项目的成绩;自己扩展的功能是“某个学校在某个项目中获得成绩的查询,某个学校在某个运动项目中获得的成绩的修改,某个学校在某个运动项目中获得的成绩的删除”三项,这三项都要求输入学校以及运动项目编号,通过这两项作为参数具体的函数可以查询、修改成绩或者是删除某项成绩记录,进而影响到最后得分报表的输出。1.3设计要求:问题描述:参加运动会的n个学校编号为l~n。比赛分成m个男子项目和w个女子项目,项目编号分别为l~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。设计一个统计程序按名次产生各种成绩单、得分报表。2.基本要求:1.产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次、成绩、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分;均按名次排序。2.比赛项目既要有径赛,又要有田赛。3.测试数据:对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。4.实现提示:数据结构:线性表数据库结构:下面四张表构成该系统的基本数据库,全部输出报表由系统根据基本表自动生成。floatcharfloatcharcharcharcharchar成绩类型性别项目编号学校编号运动员编号初始化时完成录入姓名初始化时完成录入姓名运动员编号校名校名学校编号项目名项目名项目编号可以假设n≤20,m≤30,w≤20,姓名长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并输入运动员编号、学校编号和成绩等。1.4系统功能需求分析:(1)、数据要求1)建议输入学校的名称,运动项目的名称等,其余信息学生自行设计;2)输出形式:有合理的提示,各学校分数为整形;3)数据的存储结构自行设计。4)建议运动会的相关数据要存储在数据文件中。(2)、操作要求1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分,3)可以按学校编号或名称、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。5)数据存入文件并能随时查询6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。(3)、测试数据要求测试数据要求使用:1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。第二章概要设计2.1总体设计方案的选定:程序的功能:要实现对心算抢答进行统一有效的管理需要通过用函数、数据类型、C语句(控制语句、函数调用语句、表达式语句、复合语句等)来实现。由于是计算,很自然的要建立一个题库,而这个题库里的题目是随机的。这个系统有很多个界面,这些界面的调用,最终是通过函数之间的调用来实现的。2.2程序的模块组成以及各个函数的功能:1.程序的模块组成:主函数:voidmain();主菜单函数:voidsolve();自定义子菜单函数:voidinput();voidprint();voidbianhao();voidzongfen();清屏函数:voidclrscr();光标定位函数:voidgotoxy(int,int);信息函数:voidcxsch();voidcxxm()结束界面函数:voidend();设置功能函数:voidrenshu();voidtimu();voiddifen();voiddefen();成绩排名函数:voidzongfen();voidmalezf();voidfemalezf();2.各函数的主要功能:主函数:显示主菜单;自定义子菜单函数:显示子菜单;光标定位函数:进行光标定位。信息函数:查看不同标准项目的信息。结束界面函数:输出结束画面。设置功能函数:实现各种设置功能。成绩排名函数:进行成绩排名并输出。2.3系统功能结构图:第三章详细设计3.1相关的数据类型:(1)、定义运动项目数据类型:定义运动项目数据类型邻接表,用于存放运动项目的信息,包括运动项目总数、运动项目名称、运动项目编号及在每个运动项目中取得名次的学校编号、学校名字、运动项目成绩。structSchoolNode{intschool;//学校编号 chars_name[MAX];//学校名字 intrecord;//项目成绩 structSchoolNode*next;//链域}SchoolNode;structItem{intitem;//项目编号 charitem_name[MAX];//项目名字 SchoolNode*firstschool;//链域指向链表中第一个结点}Item;structAllItems{ intitem_num;//项目总数 Itemitem[MAX];}AllItems;(2)、定义学校数据类型:定义学校数据类型邻接表,用于存放参赛学校的信息,包括学校总数、学校名称、学校编号、学校总分、男子团体总分、女子团体总分以及每个学校获奖的运动项目编号、运动项目名称、取得的成绩。structItemNode{ intitem;//该学校获奖的项目编号 chari_name[MAX];//项目名字 intrecord;//项目成绩 structItemNode*next;//链域}ItemNode;structSCHNode{ intschool;//学校编号 charschool_name[MAX];//学校名字 intshool_score;//学校总分 intboys_score;//男团体总分 intgirl_score;//女团体总分 ItemNode*firstitem;//链域指向链表中第一个获奖项目的结点}SCHNode;structAllSchool{ intschool_num;//学校总数 SCHNodeschool[MAX];}AllSchool;3.2总体设计: 根据运动会分数统计系统的问题分析及设计要求,可以将此系统分为四个模块:信息统计模块、信息排序输出模块、信息查询模块、信息调用模块。(1)、信息统计模块实现信息的输入、统计,涉及函数有:voidInputInfo()、(2)、信息输出模块实现信息的输出,涉及函数有:intMenu_Select_Tow()、Sort_Schoolnum()、Sort_SchoolScore()、Sort_ManScore()、Sort_WomanScore()。(3)、信息查询模块实现信息的查询,涉及函数有:FindInfo_SchoolNum()、FindInfo_SchoolNum()、intMenu_Select_Three()。(4)、信息调用模块实现信息的调用,即从文件中读出信息并输出、保存信息,涉及函数有:voidsave()、voidReadInfo()。3.3主函数与各函数调用关系流程图、结构图:信息统计模块信息统计模块信息输出模块信息查询模块信息调用模块运动会分数统计系统按学校编号排序信息输入分数统计按学校总分排序按男团体总分排序按女团体总分排序按学校编号查询按项目编号查询信息保存信息读取开始开始总分显示菜单界面按学校名称输出按学校总分输出按男团总分输出按女团总分输出退出返回主菜单主菜单输入功能序号开始初始化N开始初始化N输入输入YYYY输入学校及男女项目范围输入学校及男女项目范围输入某项目各名次成绩输入某项目各名次成绩Y继续输入Y继续输入NN查询团体总分Case2成绩查询Case3查询团体总分Case2成绩查询Case3Y继续Case1Y继续Case1查询各学校成绩查询各学校成绩N输出查询学校成绩N输出查询学校成绩继续Y继续YNN结束—退出结束—退出图2.1:模块之间的调用关系第四章系统调试4.1调试进行:系统页面:进入系统:在选项中选择要进行的项目进入基本设置选项:输入完毕:按学校编号输出:查询某个学校成绩:结束:输入7则退出系统,并有中文提示。如图所示:第五章心得体会:本次课程设计,使我对数据结构线性表,栈的设计方法、步骤、思路、有一定的了解与认识。它相当于实际设计工作的模拟。在课程设计过程中,基本能按照规定的程序进行,先针对表达式算法为背景,通过调研、分析现有的管理模式和已有的管理软件,建立系统模型;收集、调查有关资料,然后进入草案阶段,其间与指导教师进行几次方案的讨论、修改,再讨论、再修改,最后定案。通过此次课程设计,我了解了编写应用软件的一般步骤,获得了很多宝贵的经验。特别是怎么样通过理论与实践相结合,把书本上的内容应用到我们做的程序上去。怎样使各个子模块实施其的详细功能,特别是各个子模块之间的接口,一定要相当清晰,达到相互协调的作用其次,我熟悉了数据结构知识。学会了很多关于程序设计的经验和技巧,明白了程序的使用性和通用性是程序生存周期长短的关键,学会了调试程序的一般方法。重要的是,通过这次设计,逐步我具备了走向程序员的基本素质。知道应如何在困难重重中一步一步细心的发现问题,解决问题。并深刻体会到了团体合作精神的重要性,知道了在软件设计中对界面和功能如何平衡,如何达到相对的完美。!附录:源程序#include<stdio.h>#include<string>#include<iomanip>#include<fstream>usingnamespacestd;intn;//n个学校intm;//m个男子项目intw;//w个女子项目structpro//表示项目的结构体{stringname;//项目名称intsnum[6];//前5名学校的编号intsnumy[4];//前3名学校的编号}p[21];structschool//表示学校的结构体{intnum;stringname;//学校名称intscore;//学校总分intmale;//男子总分intfemale;//女子总分}sch[21];structSCHNode{ chargender;//性别 intathlete;//运动员 intgirl_score;}SCHNode;structAllSchool{ intschool_num;//学校总数}AllSchool;intintegral[5]={7,5,3,2,1};//前五名得分intintegraly[3]={7,5,3};//前三名得voidinput(){ intz; do { system("color3E");system("cls"); printf("\t\t(^o^)(^o^)\n"); printf("\t\t(^o^)以下是菜单选项,请选择!(^o^)\n"); printf("\t\t(^o^)(^o^)\n"); printf("\t\t(^o^)1.输入各个项目成绩及信息(^o^)\n"); printf("\t\t(^o^)(^o^)\n"); printf("\t\t(^o^)2.显示各学校总分(^o^)\n"); printf("\t\t(^o^)(^o^)\n"); printf("\t\t(^o^)3.信息排序(^o^)\n"); printf("\t\t(^o^)(^o^)\n"); printf("\t\t(^o^)4.信息查询(^o^)\n"); printf("\t\t(^o^)(^o^)\n"); printf("\t\t(^o^)5.保存信息到文件(^o^)\n"); printf("\t\t(^o^)(^o^)\n"); printf("\t\t(^o^)6.从文件中读入信息(^o^)\n"); printf("\t\t(^o^)(^o^)\n"); printf("\t\t(^o^)7.退出系统(^o^)\n"); printf("\t\t(^o^)(^o^)\n"); printf("\t请输入1选择的操作(0—):"); scanf("%d",&z); }while((z!=1)); system("color1e");system("cls");inti,j,y,x;printf("输入学校数目:");y=0;while(1){scanf("%d",&n);//n:学校数目if(n>=1&&n<=20)y=1;if(y)break;elseprintf("输入数据有误,请重新输入:");}for(i=1;i<=n;i++){printf("输入第%d个学校的名称:",i); scanf("%s",&sch[i].name);//给学校结构体的成员初始化为sch[i].score=0;sch[i].female=0;sch[i].male=0;sch[i].num=i;}printf("输入男子项目数和女子项目数:");y=0;while(1){scanf("%d%d",&m,&w);if(m<=20&&m>=1&&w<=20&&w>=1)y=1;if(y)break;elseprintf("输入数据有误,请重新输入:");}for(i=1;i<=m+w;i++){printf("输入第%d个项目的名称:\n",i); scanf("%s",&p[i].name);if(i%2==1){printf("输入第%d个项目的前5名的学校编号:\n",i);for(j=1;j<=5;j++){y=0;while(1){scanf("%d",&x);//学校编号if(x>=1&&x<=20)y=1;if(y)break;elseprintf("输入数据有误,请重新输入:");}p[i].snum[j]=x;//给项目结构体的成员赋值sch[x].score+=integral[j-1];//给学校结构体成员赋值if(i<=m)sch[x].male+=integral[j-1];//学校结构体赋值,男子总分elsesch[x].female+=integral[j-1];//学校结构体赋值,女子总分 }}if(i%2!=1){printf("输入第%d个项目的前3名的学校编号:\n",i);for(j=1;j<=3;j++) { y=0; while(1) { scanf("%d",&x);//学校编号 if(x>=1&&x<=20)y=1; if(y)break; elseprintf("输入数据有误,请重新输入:"); } p[i].snumy[j]=x;//给项目结构体的成员赋值 sch[x].score+=integraly[j-1];//给学校结构体成员赋值 if(i<=m)sch[x].male+=integraly[j-1];//学校结构体赋值 elsesch[x].female+=integraly[j-1];//学校结构体赋值 }}}}voidprint(inti){ printf("%d%10s%8d%9d%10d\n",sch[i].num,sch[i].name,sch[i].score,sch[i].male,sch[i].female);}voidbianhao()//按编号排序{inti,j;schoolt;for(i=1;i<n;i++){for(j=i;j<=n;j++) if(sch[i].num>sch[j].num) { t=sch[i];sch[i]=sch[j];sch[j]=t; }} printf("\n按编号排列:\n"); printf("编号学校名称总分男子总分女子总分\n"); for(i=1;i<=n;i++)print(i);}voidzongfen()//按学校总分排序{inti,j;schoolt;for(i=1;i<n;i++){for(j=i;j<=n;j++) if(sch[i].score<sch[j].score) {t=sch[i];sch[i]=sch[j];sch[j]=t;}}printf("\n按学校总分排列:\n");printf("编号学校名称总分男子总分女子总分\n");for(i=1;i<=n;i++)print(i);ofstreamfout;fout.open("运动会分数统计.txt");fout<<"编号学校名称总分男子总分女子总分"<<endl;for(i=1;i<=n;i++){ fout<<sch[i].num<<setw(13)<<sch[i].name<<setw(8)<<sch[i].score<<setw(9) <<sch[i].male<<setw(10)<<sch[i].female<<endl;}fout.close();}voidmalezf()//按学校男总分排序{inti,j;schoolt;for(i=1;i<n;i++){for(j=i;j<=n;j++) if(sch[i].male<sch[j].male) {t=sch[i];sch[i]=sch[j];sch[j]=t;}}printf("\n按学校男子总分排列:\n");printf("编号学校名称总分男子总分女子总分\n");for(i=1;i<=n;i++) print(i);}voidfemalezf()//按学校女总分排序{inti,j;schoolt;for(i=1;i<n;i++){for(j=i;j<=n;j++) if(sch[i].female<sch[j].female) { t=sch[i];sch[i]=sch[j];sch[j]=t; }}printf("\n按学校女子总分排列:\n");printf("编号学校名称总分男子总分女子总分\n");for(i=1;i<=n;i++)print(i); printf("\n");}voidcxsch()//查询学校信息{inti,y,s;printf("输入需要查询的学校编号:");y=0;while(1){ scanf("%d",&s); if(s>=1&&s<=n)y=1; if(y)break; elseprintf("输入数据有误,请重新输入:");}printf("该学校相关信息:\n");printf("编号学校名称总分男子总分女子总分\n");for(i=1;i<=n;i++){if(sch[i].num==s){print(i);break;}} printf("\n");}voidcxxm()//查询项目信息{inti,y,s,v;printf("输入需要查询的项目编号:");y=0;while(1){scanf("%d",&s);if(s>=1&&s<=n)y=1;if(y)break;elseprintf("输入数据有误,请重新输入:");}printf("该项目取的前三名选0,取的前5名选1:");scanf("%d",&v);if(v==1){ printf("前5名学校编号及名称为:%s",p[s].name);printf("名次编号学校名称\n");for(i=1;i<=5;i++) printf("%d%d%s",p[s].snum[i],setw(12),sch[p[s].snum[i]].name);}if(v==0){ printf("前3名学校编号及名称为:%s",p[s].name); printf("名次编号学校名称\n"); for(i=1;i<=3;i++) printf("%d%d%s",p[s].snum[i],setw(12),sch[p[s].snum[i]].name);} printf("\n");}voidsolve()//菜单函数{intz;while(1){ printf("\t\t(^o^)(^o^)\n"); printf("\t\t(^o^)以下是菜单选项,请选择!(^o^)\n");printf("\t\t(^o^)1.按学校编号排序输出(^o^)\n");printf("\t\t(^o^)2.按学校总分排序输出(^o^)\n");printf("\t\t(^o^)3.按学校男总分排序输出(^o^)\n");printf("\t\t(^o^)4.按学校女总分排序输出(^o^)\n");printf("\t\t(^o^)5.查询某个学校成绩(^o^)\n");printf("\t\t(^o^)6.查询某个项目成绩(^o^)\n");printf("\t\t(^o^)7.结束(^o^)\n\n"); printf("选择您需要的操作(选择序号):");scanf("%d",&z);if(z==1) { bianhao(); system("pause"); }if(z==2) { zongfen(); system("pause"); } if(z==3) { malezf(); system("pause"); } if(z==5) { cxsch(); system("pause"); } if(z==6) { cxxm(); system("pause");

温馨提示

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

评论

0/150

提交评论