当前位置:文档之家› C语言课程设计报告_运动会分数统计系统

C语言课程设计报告_运动会分数统计系统

课程设计报告课程名称《C语言程序设计》课题名称运动员分数统计系统专业电气工程及其自动化班级电气1186学号201113010628姓名何长学指导教师王颖2012 年6月15日湖南工程学院课程设计任务书课程名称《C语言程序设计》课题运动员分数统计系统专业班级电气1186学生姓名何长学学号201113010628指导老师王颖审批任务书下达日期2012年6月04日任务完成日期2012年6月15 日一、设计内容与设计要求1.课程设计目的:全面熟悉、掌握C语言基本知识,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为后继课程(数据结构、数据库和汇编语言等课程)的实验以及课程设计打下较扎实的基础。

2.课题题目⑴班级成绩管理系统⑵班级档案管理系统⑶飞机订票系统⑷猜数字游戏⑸电子英汉词典设计⑹心算抢答系统⑺运动会分数统计系统⑻小学生心算CAI系统3.设计要求:掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的中型问题,为将来开发软件积累一些典型的案例处理经验。

具体要求如下:⑴设计课题题目:每位同学根据自己学号除以8所得的余数加一选择相应题号的课题。

换题者不记成绩。

⑵根据自己对应的课题完成以下主要工作:①完成系统需求分析:包括系统设计目的与意义;系统功能需求;输入输出的要求。

②完成系统概要设计:程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。

③完成系统详细设计:包括采用C语言定义相关的数据类型;写出各模块的类C码算法;画出函数的调用关系图。

④调试分析以及设计体会:测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。

⑤关键源程序(带注释)⑶按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。

设计课题七:运动会分数统计系统一、问题描述:参加运动会的n 个学校编号为l ~n 。

比赛分成m 个男子项目和w 个女子项目,项目编号分别为l ~m 和m +1~m +w 。

由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。

设计一个统计程序按名次产生各种成绩单、得分报表。

二、基本要求:1.产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次、成绩、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分;均按名次排序。

2.比赛项目既要有径赛,又要有田赛。

三、测试数据:对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。

四、实现提示:1.数据结构:线性表2.数据库结构:下面四张表构成该系统的基本数据库,全部输出报表由系统根据基本表自动生成。

3. 可以假设n ≤20,m ≤30,w ≤20,姓名长度不超过20个字符。

每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并输入运动员编号、学校编号和成绩等。

五、选作内容:允许用户指定某项目采取其他名次取法。

姓名运动员编号 校名学校编号 项目名项目编号 初始化时完成录入 floatchar char char char char 成绩类型 性别 项目编号 学校编号 运动员编号目录一: 需求分析: ............ 错误!未定义书签。

二:概要设计: ............ 错误!未定义书签。

三: 详细设计: . (9)四:调试分析及其体会: (11)五:使用说明: (14)六:附录: (16)七:评分表: (33)一.需求分析1问题描述运动会分数统计系统参加运动会有n个系,系编号为1……n。

比赛分成m个男子项目,和w个女子项目。

项目编号为男子1……m,女子m+1……m+w。

不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。

(m<=20,n<=20)2.基本要求:(1). 运动员检录;(2).运动员检录,(3).运动员成绩排序;(4). 运动员评奖3.测试数据《1》输入:1进入添加系的界面,根据提示,再输入:汽车系。

再输入:8,成功添加了一个系。

再输入:2进入运动项目添加界面,根据提示,再输入:跳高;1;0;1;2;3。

之后输入0。

再次进入系统界面。

《2》输入:3查看输出结果。

《3》:输入:4查看输出结果。

《4》:输入:5查看输出结果。

《5》:输入:6查看输出结果。

《6》:输入:7根据提示输入项目编号:2。

查看输出结果。

《7》:输入:8根据提示输入系编号:3。

查看输出结果。

二、概要设计1.数据结构<1>系:名称,编号,男子团体总分,女子固体总分。

<2>运动项目:项目编号,名称,男子项目,女子项目,前三名,前五名,第一名系的编号,第二名系的编号,第三名系的编号,第四名系的编号,第五名系的编号。

2.程序模块及之间的调用关系三、详细设计1、数据类型定义(1)系的定义:typedef struct Department //系的结构{char name[20]; //系的名称int number; //系的编号int boy; //男子团体总分int girl; //女子团体总分Department *next; }Department;(2)运动项目定义:typedef struct Sport //运动项目结构{char name[20]; //运动项目名称int isboy; //0为女项目,1为男项目int is3; //0为取前五名,1为取前五名int number; //项目编号int first; //第一名系的编号int second; //第二名系的编号int third; //第三名系的编号int fourth; //第四名系的编号int fifth; //第五名系的编号Sport *next;}Sport;、2、函数之间的调用关系(1)系调用图department_adddepartment_Order<1>Department department_searchdepartment_addmarkdepartment_showdepartment_isexistdepartment_outputdepartment_readdepartment_writedepartment_getlongsport_isexistsport_addsport_getlongsport_write<2>Sport sport_readsport_outputsport_search3、算法设计主要算法的设计思想:本程序主要是使用链表来实现操作。

一个运动会包括运动项目和参加运动会的成员。

因此构造两个链表Department,Sport。

为了操作的方便,并且能够保存输入数据,所以通过文件操作来实现数据的写和读。

每次添加新的数据后都要输入0退出,数据才能保存。

对于总分的排序使用了冒泡排序。

为了使整个程序看起来更加友好,又添加了程序启动画面。

四、调试分析以及设计体会1、调试中遇到问题及解决方法1)、程序调试过程中常会出现一些小错误,如i,j混淆少括号少分号等小问题都可以按照提示找到,然后改正。

2)、语句错误语句使用不当造成程序无法运行出正常的结果。

3)、在排序过程中输出的结果是按总分顺序排序的,但是却不能够正确的输出是哪个学校的总分,解决方法是在新申请的顺序表的节点中加入了一个纪录学校代号的内容,在输出的同时就可以把学校代号也正确的输出来了。

2、设计体会通过这次课程设计使我进一步达到理论与实际相结合,提高了自己组织数据及编写程序的能力,使我们能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养良好的程序设计技能,掌握设计程序的思路,学会用计算机语言编写程序,以实现所需处理的任务,锻炼自己的动脑能力,学会用自己的思路解决现实中的实际问题,虽然一开始也走了一些弯路不过在同学和老师的点拨下完成了该程序,这次课程设计中遇到了很多问题,一开始准备用二维数组存放的可考虑到同一个学校同一个项目有好几个人参加,就不能用二维数组了,如果每个学校都申请一个二维数组也非常不方便,还是用顺序表方便也不浪费空间,在这次课程设计的过程中虽然很多次都参照了课本及资料,不过这使我更加熟悉了顺序表以及结构体的定义及实现,调试过程中也遇到了一些问题也都是自己独立思考完成的,还有一个体会是,遇到不会的地方可以参考课本也可以去图书馆或网上查资料,当然主要思路有了也就简单点了,一开始思路不是很清楚就开始在敲程序了,浪费了很多时间,在老师的指导下,把自己的思路理清楚了再来敲程序果真是事半功倍,这真是个很好的收获。

3、性能分析在排序时用到了直接插入排序,从算法描述中可以看到,在搜索插入位置时,遇到关键字相等的元素就停止比较和移动元素,可以确定该算法是稳定的排序算法。

从空间角度上看,它只需要一个元素的辅助空间r[0]。

从时间角度上看,主要时间耗费在关键字的比较和移动元素上。

n为顺序表表长,平均时间复杂度为O (n2)最坏时间复杂度为O(n2)辅助存储空间r[0]。

2、调试结果<1>多组数据输入与输出:(1)输入:3输出:系名编号男团总分女团总分总分法律系 6 0 0 0电子系 5 3 2 5数学系 4 6 0 6历史系 3 9 7 16中文系 2 15 11 26计算机系 1 21 11 32旅游系7 0 7 7(2)输入:4输出: 系名编号男团总分女团总分总分法律系 6 0 0 0电子系 5 3 2 5数学系 4 6 0 6旅游系7 0 7 7历史系 3 9 7 16中文系 2 15 11 26计算机系 1 21 11 32(3)输入:5输出:法律系 6 0 0 0 电子系 5 3 2 5数学系 4 6 0 6旅游系7 0 7 7历史系 3 9 7 16中文系 2 15 11 26计算机系 1 21 11 32 (4)输入:6输出:法律系 6 0 0 0电子系 5 3 2 5数学系 4 6 0 6旅游系7 0 7 7历史系 3 9 7 16中文系 2 15 11 26计算机系 1 21 11 32(5)输入:7输出:请输入项目编号:输入:1回车输出:项目名:100m项目类型:女子项目第一名:计算机系第二名:中文系第三名:法律系第四名:无第五名:无(6)输入:8输出:请输入系的编号:再输入2则输出:系名:中文系男子团体总分:3 女子团体部分:10 总分:13 (7)输入:0 退出五、使用说明1、运行环境Windows,VC++6.02、用户界面4、操作过程(1)用户进入程序启动界面,等load完成后进入主菜单.主菜单有以下9个选项1.输入系别2.输入运动项目3.按系别编号输出总分4.按总分排序5.按男团体总分排序6.按女团体总分排序7.按项目编号查询8.按系别编号查询0.退出(2)输入0~8中的一个数(3)输入1,进行添加系操作,分别输入系的名称和编号(4)输入2,进行添加运动项目操作,分别输入项目名称,编号,项目类型,名次选取,排名情况(5)输入0,则退出系统,并且保存输入的信息.每次添加完都要输入0退出系统才有效(6)输入3,输出按系编号总分排名.(7)输入4,输出按总分排名(8)输入5,输出按男团体总分排序(9)输入6,输出按女团体总分排序(10)输入7,进入按项目编号查询界面.输入要查询的项目编号(11)输入8,进入按系别编号查询界面,输入要查询的系的编号六附录1、源程序#include<iostream.h>#include<iomanip.h>#include<string.h>#include<fstream.h>#include<stdlib.h>#include<ctype.h>#include<stdio.h>#include<conio.h>typedef struct Department //系的结构{char name[20]; //系的名称int number; //系的编号int boy; //男子团体总分int girl; //女子团体总分Department *next; }Department;typedef struct Sport //运动项目结构{char name[20]; //运动项目名称int isboy; //0为女项目,1为男项目int is3; //0为取前五名,1为取前五名int number; //项目编号int first; //第一名系的编号int second; //第二名系的编号int third; //第三名系的编号int fourth; //第四名系的编号int fifth; //第五名系的编号Sport *next;}Sport;int getint(int a) //字符转换成数字{return (int)(a-'0');}Department * head1;//-------启动画面函数----------void Cover(){ system("color 1b");char line[]={"程序读取中请耐心等待..."};char bar[]={"...."};int i,j,k=0,x=0,y=0;for(i=0;i<=strlen(line)/2;){system("cls");for(j=0;j<9;j++) //改变行坐标cout<<endl;for(j=0;j<(75-strlen(line))/2;j++) //改变列坐标cout<<" ";for(j=1;j<=i;j++) //进度显示器cout<<"●";for(x=strlen(line)/2;x>i;x--)cout<<"○";if(k==4)i++;cout<<endl;for(j=0;j<(75-strlen(line))/2;j++) //行坐标定位cout<<" ";cout<<line; //输出线条cout<<endl;for(j=0;j<(65-strlen(bar))/2;j++)cout<<" ";cout<<(i+7)*5<<"% Loading";cout.write(bar,k);cout<<endl;for(j=0;j<10;j++)cout<<endl;for(j=0;j<24;j++)cout<<" ";cout<<"程序设计员5080906 石行"<<endl;for(j=0;j<24;j++)cout<<" ";for(j=0;j<=18;j++)cout<<"─";cout<<endl;for(j=0;j<10000000;j++);//延时效果k++;if(k>4)k=0;}}void department_add() //添加系{Department * p;int mark=0;p=new Department;cout<<"请输入系的名称:";cin>>p->name;char c;while (mark!=1){cout<<"请输入系的编号:";cin>>c;if (!isdigit(c))//是否为数字{cout<<"数据非法"<<endl;}else{mark=1;p->number=c;}}p->boy=0;p->girl=0;p->next=head1->next;head1->next=p;cout<<"成功添加了一个系"<<endl;}int department_getlong(Department *first)//得到链表长度{int i=0;while (first->next!=NULL){i++;first=first->next;}return i;}void department_write()//将系数据写入文本{Department * p;p=head1;p=p->next;ofstream outfile("Department.txt",ios::out);outfile<<department_getlong(p)+1<<" ";while (p!=NULL){outfile<<p->name<<" "<<p->number<<" "<<p->boy<<" "<<p->girl<<" ";}outfile.close();cout<<"Write Success!"<<endl;}void department_read()//从文本读入系数据{int i;ifstream infile ("Department.txt",ios::in);infile>>i;while(i>0){Department * p;p=new Department;infile>>p->name>>p->number>>p->boy>>p->girl;p->next=head1->next;head1->next=p;i--;}cout<<"Department Data Read Success!"<<endl;}void department_output(Department *p)//输出系{cout<<"系名编号男团总分女团总分总分\t\n";while(p){cout<<p->name<<"\t"<<getint(p->number)<<"\t"<<p->boy<<"\t"<<p->girl<<"\t"<<(p->girl+p->boy)<<endl;p=p->next;}}int department_isexist(int a)//检验系是否存在{int b=0;Department *p;p=head1;p=p->next;while(p){if(p->number==a){return 1;}}return 0;}void department_show(int a)//输出所有系{Department *p;p=head1;p=p->next;while(p){if(p->number==a){cout<<p->name<<"";return;}p=p->next;}cout<<"无";}void department_search(int a)//按编号搜索系{Department *p;p=head1;p=p->next;while(p){if(p->number==a){cout<<"系名:"<<p->name<<""<<"男子团体总分:"<<p->boy<<" "<<"女子团体总分:"<<p->girl<<""<<"总分:"<<(p->boy+p->girl)<<"";return;}p=p->next;}cout<<"无此编号";}void department_addmark(int a,int b,int c)//a为分数,b为系编号,c=1表示男,c=0表示女{Department *p;p=head1;p=p->next;while(p){if(p->number==b){if(c=='1'){p->boy=p->boy+a;}else{p->girl=p->girl+a;}}p=p->next;}}void department_order(Department *temp,int type) //type=0按总分,type=1按男总分,type=2按女总分,{Department *p,*q,*small,*temp1;temp1=new Department;temp1->next=NULL;p=temp;while(p){small=p;q=p->next;while(q){switch(type){case 0:if((q->boy+q->girl)<(small->girl+small->boy)){small=q;}break;case 1:if(q->boy<small->boy){small=q;}break;case 2:if(q->girl<small->girl){small=q;}break;default:cout<<"error"<<endl;}if(small!=p){temp1->boy=p->boy;p->boy=small->boy;small->boy=temp1->boy;temp1->girl=p->girl;p->girl=small->girl;small->girl=temp1->girl;strcpy(temp1->name,p->name);strcpy(p->name,small->name);strcpy(small->name,temp1->name);temp1->number=p->number;p->number=small->number;small->number=temp1->number; //将系的名字互换}q=q->next;}p=p->next;}}Sport * head2;int sport_isexist(int a) //检查运动项目(编号)是否已经存在{int b=0;Sport *p;p=head2;p=p->next;while(p){if(p->number==a){return 1;}p=p->next;}return 0;}void sport_add() //添加项目{Sport * p;int mark=0;p=new Sport;cout<<"请输入项目名称:";cin>>p->name;char c;while (mark!=1){cout<<"请输入项目编号:";cin>>c;if (!isdigit(c)){cout<<"数据非法"<<endl;}else{if(sport_isexist(c)){cout<<"该编号已存在"<<endl;}else{mark=1;p->number=c;}}}mark=0;while (mark!=1){cout<<"请输入项目类型(0为女子项目,1为男子项目):";cin>>c;p->isboy=(int)(c-'0');//字符转换成数字if (!isdigit(c)){cout<<"数据非法"<<endl;}else if(p->isboy<0||p->isboy>1){cout<<"数据非法"<<endl;}else{mark=1;p->isboy=c;}}mark=0;while (mark!=1){cout<<"请输入项目名次情况(0为取前3名,1为取前5名):";cin>>c;p->is3=(int)(c-'0');if (!isdigit(c)){cout<<"数据非法"<<endl;}else if(p->is3<0||p->is3>1){cout<<"数据非法"<<endl;}else{mark=1;p->is3=c;}}mark=0;while (mark!=1){cout<<"请输入第一名的系的编号:";cin>>c;if (!isdigit(c)){cout<<"数据非法"<<endl;}else{if(!department_isexist(c)){cout<<"该系不存在,请先添加";}else{mark=1;p->first=c;if(p->is3=='0')department_addmark(5,c,p->isboy);elsedepartment_addmark(7,c,p->isboy);}}}mark=0;while (mark!=1){cout<<"请输入第二名的系的编号:";cin>>c;if (!isdigit(c)){cout<<"数据非法"<<endl;}else{if(!department_isexist(c)){cout<<"该系不存在,请先添加";}else{mark=1;p->second=c;if(p->is3=='0')department_addmark(3,c,p->isboy);elsedepartment_addmark(5,c,p->isboy);}}}mark=0;while (mark!=1){cout<<"请输入第三名的系的编号:";cin>>c;if (!isdigit(c)){cout<<"数据非法"<<endl;}else{if(!department_isexist(c)){cout<<"该系不存在,请先添加";}else{mark=1;p->third=c;if(p->is3=='0')department_addmark(2,c,p->isboy);elsedepartment_addmark(3,c,p->isboy);}}}mark=0;if(p->is3=='1'){while (mark!=1){cout<<"请输入第四名的系的编号:";cin>>c;if (!isdigit(c)){cout<<"数据非法"<<endl;}else{if(!department_isexist(c)){cout<<"该系不存在,请先添加";}else{mark=1;p->fourth=c;department_addmark(2,c,p->isboy);}}}mark=0;while (mark!=1){cout<<"请输入第五名的系的编号:";cin>>c;if (!isdigit(c)){cout<<"数据非法"<<endl;}else{if(!department_isexist(c)){cout<<"该系不存在,请先添加"<<endl;}else{mark=1;p->fifth=c;department_addmark(1,c,p->isboy);}}}}else{p->fourth='0';p->fifth='0';}p->next=head2->next;head2->next=p;cout<<"成功添加了一个运动项目"<<endl;}int sport_getlong(Sport *first) //得到项目链表长度{int i=0;while (first->next!=NULL){i++;first=first->next;}return i;}void sport_write() //将项目数据写入文本文档{Sport * p;p=head2;p=p->next;ofstream outfile("Sport.txt",ios::out);outfile<<sport_getlong(p)+1<<" ";while (p!=NULL){outfile<<p->name<<" "<<p->number<<" "<<p->isboy<<" "<<p->is3<<" "<<p->first<<" "<<p->second<<" "<<p->third<<" "<<p->fourth<<" "<<p->fifth<<" ";p=p->next;}outfile.close();cout<<"Write Success!"<<endl;}void sport_read() //从文本读取项目数据{int i;ifstream infile ("Sport.txt",ios::in);infile>>i;while(i>0){Sport * p;p=new Sport;infile>>p->name>>p->number>>p->isboy>>p->is3>>p->first>>p->second>>p->thir d>>p->fourth>>p->fifth;p->next=head2->next;head2->next=p;i--;}cout<<"Sport Data Read Success!"<<endl;}void sport_output(Sport *p) //输出项目的情况{cout<<"name "<<"\t"<<"Num"<<""<<"B/G"<<""<<" 3/5"<<" "<<" first"<<""<<"second"<<" "<<"third"<<" "<<"fourth"<<" "<<"fifth"<<" "<<endl;while(p){cout<< p->name <<"\t" <<" " <<getint(p->number)<<"" << getint(p->isboy)<<"" <<getint(p->is3)<<""<<" ";department_show(p->first);department_show(p->second);department_show(p->third);department_show(p->fourth);department_show(p->fifth);//printf("\n");p=p->next;cout<<"\n";}cout<<endl;}void sport_search(int a) //搜索项目{Sport *p;p=head2;p=p->next;while(p){if(p->number==a){cout<<"项目名:"<<p->name<<endl<<"项目类型:";if(p->isboy==1){cout<<"男子项目";}else{cout<<"女子项目";}cout<<endl<<"第一名:";department_show(p->first);cout<<endl<<"第二名:";department_show(p->second);cout<<endl<<"第三名:";department_show(p->third);cout<<endl<<"第四名:";department_show(p->fourth);cout<<endl<<"第五名:";department_show(p->fifth);return;}p=p->next;}cout<<"无此编号";}void main() //运动会程序主函数{Cover();system("color 2b"); //改变背景,前景色head1=new Department;head1->next=NULL;head2=new Sport;head2->next=NULL;//school_add();sport_read();department_read();//sport_add();Department * p1;Sport * p2;p1=head1;p1=p1->next;p2=head2;p2=p2->next;char choose;char temp;//string ch=" ";int a=1;while(a!=0){cout<<endl;cout<<" .oO欢迎使用运动会分数统计系统Oo. "<<endl;cout<<"**********************************************************"<<endl;cout<<" * *"<<endl;cout<<" * 1.输入系别; 2.输入运动项目*"<<endl;cout<<" * *"<<endl;cout<<" * 3.按系别编号输出总分; 4.按总分排序; *"<<endl;cout<<" * *"<<endl;cout<<" * 5.按男团体总分排序; 6.按女团体总分排序; *"<<endl;cout<<" * *"<<endl;cout<<" * 7.按项目编号查询; 8.按系别编号查询; *"<<endl;cout<<" **"<<endl;cout<<" * 0.退出*"<<endl;cout<<" * *"<<endl;cout<<" * 提示:需先输入系别后才能输入运动项目*"<<endl;cout<<" * *"<<endl;cout<<"**********************************************************"<<endl;cout<<" 请选择:";//cin>>ch;//choose=int(ch[0])+int(ch[1])-'0'; //处理异常状态cin>>choose;if (!isdigit(choose)){system("cls");cout<<"操作非法1"<<endl;}else{switch(getint(choose)){case 1:system("cls");department_add();break;case 2:system("cls");cout<<"当前项目:"<<endl;sport_output(p2);cout<<"当前系:"<<endl;department_output(p1);sport_add();break;case 3:system("cls");department_output(p1);break;case 4:system("cls");department_order(p1,0);department_output(p1);break;case 5:system("cls");department_order(p1,1);department_output(p1);break;case 6:system("cls");department_order(p1,2);department_output(p1);break;case 7:system("cls");cout<<"请输入项目编号:";cin>>temp;sport_search(temp);break;case 8:system("cls");cout<<"请输入系的编号:";cin>>temp;department_search(temp);break;case 0:system("cls");a=0;break;default:system("cls");cout<<"操作非法\n";}}}department_write();sport_write();system("exit");}七、课程设计评分表课程名称:C语言程序设计项目评价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩教师签名:日期:。

相关主题