智能评分系统说明书.docx

上传人:b****5 文档编号:4825676 上传时间:2022-12-09 格式:DOCX 页数:14 大小:34.24KB
下载 相关 举报
智能评分系统说明书.docx_第1页
第1页 / 共14页
智能评分系统说明书.docx_第2页
第2页 / 共14页
智能评分系统说明书.docx_第3页
第3页 / 共14页
智能评分系统说明书.docx_第4页
第4页 / 共14页
智能评分系统说明书.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

智能评分系统说明书.docx

《智能评分系统说明书.docx》由会员分享,可在线阅读,更多相关《智能评分系统说明书.docx(14页珍藏版)》请在冰豆网上搜索。

智能评分系统说明书.docx

智能评分系统说明书

C程序设计

姓名:

学号:

专业:

设计课题:

智能化比赛评分系统

时间:

指导老师:

一、设计目的和内容..........................................1

(1)设计背景与目的.....................................1

(2)课程设计内容.......................................4

(3)课程设计有四个阶段组成.............................5

二、算法的基本思想..........................................5

(1)主程序的流程………………………………………...………6

(2)各分程序模块之间的调用关系………………………………..6

三、测试数据..............................................8

四、源程序及系统文件使用说明..............................9

五、实习体会...............................................

参考文献..............................................

智能化比赛评分系统

一.设计目的与内容

(1)设计背景与目的:

北大社团创刊号上写道:

“大学之大,并不仅仅在于它的物质条件,而在于它的高水准的学者和优秀的学生,以及他们所带来的独特的人文环境。

”是的,独特的人文环境的塑造必然离不开学生活动,学生活动作为校园文化的重要组成部分,丰富了同学们的校园生活的同时,也作为一个窗口,对外展示出同学们的特长,同时也给同学们提供了一个锻炼的平台,最终达到育人的最高思想。

在各高校举行的学生活动中比赛类的活动颇多,如各类的演讲比赛、校园歌手大赛、挑战主持人大赛、校园明星选拔大赛等等,繁复的成绩计算给主办方带来了极大地不变,而且手工单项计算还容易出错,我们组就实际情况出发,根据学习的需要所以编制了一个智能化比赛评分系统的程序,既可以在学习之后复习自己学习的成绩,也方便了以后学校举行的各类比赛类活动,实现了双赢的目的。

我们组通过对8位选手参加演讲比赛,6位评委打分,共100分(演讲内容50分、语言表达50分。

),评出一等奖1名,二等奖2名,三等奖2名的应用程序的设计过程,基本掌握简单C语言应用程序的编写与调试方法,掌握C语言的基本程序设计方法,并按要求编写实习报告。

通过输出结果:

1、每个选手的最终成绩评算办法:

去掉一个最高分,去掉一个最低分,剩余评委的平均分。

2、输出每位选手的姓名和分数,最终评出一、二、三等奖。

3、输出8位选手的比赛名次的实践能力和设计操作要求学生熟练掌握C语言的基本知识和编程技能并基本掌握结构化程序设计的基本思路和方法。

(2)课程设计内容

设计课题:

智能化比赛评分系统

1、评分系统基本要求:

设计一个评分系统,使之能提供以下功能:

①评委给每个演讲者评分——输入。

②输入每位选手的姓名、成绩并有相应的提示语;

③对每一位选手的成绩进行处理(去掉一个最高分,去掉一个最低分,剩余评委的平均分,为防止重分现象平均分取小数点后两位);

④对8位选手的成绩进行排序评名次,并且分出一、二、三等奖分别1、2、2个名额;

⑤评分结果浏览功能(每位选手的姓名、成绩、名次、一、二、三等奖及所有选手成绩的排序)——输出;

⑥查询或排序功能。

2、创新之处:

①智能化:

输入参赛选手的姓名和对应的成绩后,系统自动对参赛选手的成绩进行处理,对评委的分项分进行求和运算,去掉求和后各评委的最高分和最低分,求剩余评委的平均分,即是此位选手的最终得分,系统会自动评出选手的奖项;

②公平性:

为防止出现重分的现象,我们对每位选手最终分数取小数点后三位;

③灵活性:

程序的开头我们定义的三个符号常量即:

N(选手数),M(评委数),P(评分项数),针对比赛的选手数、评委数、评分项数的变化,可以相应的调整符号常量的值,达到了“一改全改”的效果。

(3)课程设计有四个阶段组成:

1、分析设计数据的结构:

学生首先选定题目、收集资料、用进行功能模块的分析,控制模块分析正确,系统设计要实用,然后确定模块,写出函数原型。

2、编程:

根据函数原型及其功能,填充相应的算法。

编程简练,可用性强,功能全面。

3、调试程序:

上机调试程序,解决编译的错误,直至运行成功。

4、撰写报告:

按格式写出完整、规范的报告并打印。

其中模块图.流程图要清楚、规范,不能有错别字。

5、答辩:

程序运行通过,报告打印出来后,通知知道老师检查,经提问回答大部分提问,即可通过。

二、算法的基本思想

(1)主程序的流程

程序先通过宏定义符号常量N(选手数),M(评委数),P(评分选项数)的值分别为8,6,2.这样不仅简单不易出错,而且便于常量的更改,只需改变#include命令行就可以一改全改。

接着定义了评委评分,选手得分和选手姓名的数组以便最终将选手最后得分与姓名对应。

进入程序主体,要想将比赛结果完整的输出,我们必须要让程序在将评委得分与选手姓名输入时自动计算出选手最终得分以及实现名次排序与姓名的一一对应。

为了实现8位选手得分的正确录入,先用for循环嵌套通过评委数量与选手数量控制评分项的完整输入,再用scanf语句对应二维数组a[]使评分与选手结合,在k=N时跳出循环,至此评分录入完毕。

评分录入后还得计算出选手最终得分。

为了去掉一个最高分,一个最低分,程序调用自编函数sort将评分按大小排序,接着调用average函数去除一个最高分与最低分算出选手最终得分。

最后将选手得分排序。

公布获奖结果时还必须出现选手的姓名。

接着再用一个for循环通过k控制姓名数量,通过scanf函数实现选手姓名的录入,在k

最终的获奖名次必须与选手姓名一一对应。

调用自编函数arran,通过一维数组num[]与二维数组name[][]将上面的评分与选手姓名一一对应。

最后程序用printf函数和for循环将最后的比赛名次与获奖选手姓名一一对应的完整输出,程序到此结束。

(二)各分程序模块之间的调用关系

主程序由三个程序模块构成,分别为自编函数sort,average,arran。

每一个模块用来实现一个特定的功能,由主程序调用其他函数,其他函数也可以互相调用,以减少重复编写程序段的工作量。

在选手评分录入完成后,为了准确计算出选手的最终得分,程序首先调用了average函数。

从六个评委的评分中先通过调用sort函数将评分按大小进行排序,然后去掉一个最低分,去掉一个最高分,用average函数算出平均数aver作为选手得分。

选手姓名录入完成以及选手最终得分名次排序后,还必须将选手得分与选手姓名一一对应,程序在此调用arran函数。

arran函数通过定义一维数组num[]和二维数组name[][]实现了选手得分以及选手姓名的一一对应。

函数调用至此结束。

如:

{inti,j,max;floattemp1;chartemp2[8];

for(i=0;i

{max=i;

for(j=i;j

{if(num[max]

max=j;

}

temp1=num[i];

strcpy(temp2,name[i]);

num[i]=num[max];

strcpy(name[i],name[max]);

num[max]=temp1;

strcpy(name[max],temp2);}

}

首先我们先定义一个整型变量,i,j。

和一个最大的的值max变量,temp1表示分数的高低,然后再定义一个字符型数组temp2[8]。

该数组表示可容纳8个元素。

接下来在利用for语句进行循环来把评分的名次给排列起来,用for语句,当i=0,i《N;i++表示第一次循环max=i,再利用for语句赋予i=j使j《N;j++(for语句循环变量赋予初值,,循环条件,循环变量增值语句)即表示当max为第i次循环时得到这i=j成本,而j《N;j++并且满足if语句这个最大值评分分数小于第j次循环所得分数时,那么这个最高分数便为第J次循环的最大值。

那么此时分数temp1=num[i]然后再利用strcpy函数(它表示字符串复制函数作用是将字符数串2复制到字符数组1中去巴表示名字的定义变量temp2赋予给temp1所表示的分数,也就是说第i次for循环所得到的最高分利用字符串函数strcpy(name[i],name[max])所示的为所获最高分的那个让你的名字赋予给第i个名字,也就是第i个名字所得分数为演讲比赛分数最高。

最后一次循环来排出评分的高低并把相应的名字进行一一对应上去,以此结束了整个编程程序的循环。

三.测试数据

智能化比赛评分系统测试数据

评委

选手

评委1

评委2

评委3

评委4

评委5

评委6

李华

4548

4648

4546

4443

4745

4046

张明

4143

4245

3941

4042

4242

4041

王凯

4145

4745

4648

4247

4347

4646

陈红

3942

3845

4042

4143

4546

4342

何翔

4238

4139

4241

4043

4341

4744

黄菊

4245

4143

4543

4140

4243

4139

沈峰

4849

4847

4648

4847

4749

4847

赵玉

4542

4443

4846

4441

4446

4443

注:

本次比赛共有8位参赛选手,有6位评委为他们评分,从语言表达、参赛技巧两个方面进行打分,每小项50分,每位选手最高分为100分。

每位选手的最终得分是去掉一个最高分、去掉一个最低分,取剩余评委的平均分,为此选手的最终得分。

附:

运行程序使用说明:

运行程序时,当提示:

请输入第k+1位选手的成绩时,输入12个小于等于50的数,数与数之间用空格键隔开,每输入12个数据后按下回车键,将进行下一位选手成绩的输入,依次下去,当输完八位参赛选手的成绩后,按下回车键,系统将提示输入参赛选手的姓名,此时从键盘上输入八位参赛选手的姓名(vc++6.0支持输汉字的功能),姓名与姓名之间同样用空格键隔开,输完姓名后,按下回车键,将出现运行结果。

四.源程序及系统文件使用说明

源程序如下:

#include

#include

#defineN8

#defineM6

#defineP2

main()

{voidsort(floatarray[],intn);

floataverage(floatarray[M]);

voidarran(floatnum[],charname[N][8]);

floatb[M];inti,j,k;

floata[M][P];

floatnum[N];

charname[N][8];

for(k=0;k

{

for(i=0;i

printf("请输入第%d位参赛选手的成绩:

",k+1);

for(i=0;i

{for(j=0;j

{scanf("%f",&a[i][j]);

b[i]=b[i]+a[i][j];}

}

sort(b,M);

num[k]=average(b);

}

printf("\n请输入参赛选手的姓名:

\n");

for(k=0;k

scanf("%s",name[k]);

arran(num,name);

printf("\n\n\n参赛选手成绩如下:

\n\n");

for(i=0;i

printf("%10s%.3f分\n\n",name[i],num[i]);

printf("本次比赛选手获奖结果如下:

\n\n");

printf("一等奖:

\n%10s%.3f分\n\n二等奖:

\n",name[0],num[0]);

for(k=1;k<3;k++)

printf("%10s%.3f分",name[k],num[k]);

printf("\n\n三等奖:

\n");

for(k=3;k<5;k++)

printf("%10s%.3f分",name[k],num[k]);

printf("\n");

}

voidsort(floatarray[],intn)

{inti,j,k;floatt;

for(i=0;i

{k=i;

for(j=i+1;j

if(array[j]

k=j;

t=array[k];array[k]=array[i];array[i]=t;

}

}

voidarran(floatnum[],charname[N][8])

{inti,j,max;floattemp1;chartemp2[8];

for(i=0;i

{max=i;

for(j=i;j

{if(num[max]

max=j;

}

temp1=num[i];

strcpy(temp2,name[i]);

num[i]=num[max];

strcpy(name[i],name[max]);

num[max]=temp1;

strcpy(name[max],temp2);}

}

floataverage(floatarray[M])

{voidsort(floatarray[],intn);

inti;floataver,sum;

sort(array,M);

sum=array[1];

for(i=2;i

sum=sum+array[i];

aver=sum/(M-2);

return(aver);

}

1.本程序共用了3个函数,分别是函数sort、函数average和函数arran,下面分别对他们进行阐述:

①函数sort

voidsort(floatarray[],intn)

{inti,j,k;floatt;

for(i=0;i

{k=i;

for(j=i+1;j

if(array[j]

k=j;

t=array[k];array[k]=array[i];array[i]=t;

}

}

主要用于对每位参赛选手的成绩进行排序,从大到小排列,此函数用了两个for语句for(i=0;i

{k=i;

for(j=i+1;j

if(array[j]

k=j;

t=array[k];array[k]=array[i];array[i]=t;

},

第一个for语句主要用于外层循环即从第一位选手到第八位选手的循环,第二个for语句主要适用于由六位评委产生的那六的分的循环;一个if语句和一个换值语句。

if语句用于数据的比较,如果满足要求,换值语句用于把它们的值交换一下,依次进行下去,从而对每位选手的成绩进行排序。

②函数average

floataverage(floatarray[M])

{voidsort(floatarray[],intn);

inti;floataver,sum;

sort(array,M);

sum=array[1];

for(i=2;i

sum=sum+array[i];

aver=sum/(M-2);

return(aver);

}

用了一个数组array、调用了sort函数、用了一个for循环语句,调用了sort函数,每位选手产生的六组数据,成绩放在数组中,用for语句循环从而实现对每位选手的分数进行处理,处理时从第二个加到第五个数,然后除以四,从而实现了去掉一个最高分,去掉一个最低分,求剩余评委的平均分,即是每位选手的最终得分,用此函数实现了对分数的处理。

③函数arran

voidarran(floatnum[],charname[N][8])

{inti,j,max;floattemp1;chartemp2[8];

for(i=0;i

{max=i;

for(j=i;j

{if(num[max]

max=j;

}

temp1=num[i];

strcpy(temp2,name[i]);

num[i]=num[max];

strcpy(name[i],name[max]);

num[max]=temp1;

strcpy(name[max],temp2);}

}

主要是用于对每位参赛选手的分数进行排序,其姓名也随之调整。

此函数用了一维数组num和二维数组name、用了两个for语句、一个if语句和复制函数strcpy,两个for语句形成了内外两层循环,if语句用于选手成绩的比较,从大到小进行排序,复制函数strcpy把分数和选手的姓名放在一起,当分数在排序的过程中调整的时候,其姓名也随之进行调整。

2.程序引用了一维数组array、b、num和二维数组name、a。

3.程序使用了三个符号常量#defineN8#defineM6#defineP2,在下面的程序中多次使用这些常数,在调整选手数、评委数和评委打分项数时,需要改动很多处的数据,不仅麻烦而且很容易出错,使用了符号常量后只需改动一项即可,方便、简单。

4.程序还引用了变量n、i、j、k。

5.程序多次使用for循环语句,如

for(i=0;i

printf("请输入第%d位参赛选手的成绩:

",k+1);

用于循环提示输入第k+1位选手的成绩。

输出结果如下:

开始

8=>N

6=>M

2=>P

0=>P

0=>i

b[i]=0

输出第K+1位选手的成绩

i+1=>i

i

0=>i

0=>j

输入a[i][j]

b[i]+0[i][j]=>b[i]

j

Y

Y

Sort(b,m)

average[b]=>num[k]

i

输出“请输出选手的姓名\n”“

0=>k

输入name[k]

i

array(num,name)

输出“\n\n\n选手成绩如下\n\n”

0=>i

输出name[i]num[i]

i

Y

Y

N

r

N

N

输出“选手获奖情况如下\n\n”

输出“一等奖”及”name[0]num[0]”

输出“二等奖”

1=>k

输出“name[k],num[k]”

k<3

输出“三等奖”

3=>k

输出“name[k],num[k]”

K<5

结束

N

Y

N

N

Y

五.实习体会

一周的课程设计已经结束了。

回想学习C语言的过程中,既有快乐又有烦恼。

从领到书的那一刻,我就很郁闷,《C语言程序设计》到底事学什么的,有什么用。

刚开始上课时,还在迷茫这门课程是用来做什么的。

不过,这些感受都是在对这门课程不了解的情况下产生的。

后来慢慢的接触多了,听老师讲的多了,了解多了,渐渐的产生了兴趣。

尤其是学到语句和函数时,上机操作程序,经过编译,调试和运行后,出现界面,当时觉得很好奇,想真正的学好这门课程。

通过半个学期的学习,我掌握了基本知识。

开始编写修改和删除时,很头疼,去向其他人寻求帮助,在别人的帮助和提示下,我编完了修改程序,但编译时老出错,修改后的内容将文本内的信息全部覆盖了。

困难之时,我们组的其他人,帮助了我,完成了修改和删除。

这样的话,整个程序基本上全部完成了,就剩下完善工作了。

我们组写了两个程序,最后,两个程序相互组合,互补,大功告成

虽然设计时完成了,但是我觉得其中还是由一些不足之处:

1.警告句。

程序中缺少一些警告句,例如:

“是否真的删除(y/n)?

”。

2.重名的情况。

由于考虑的不周全,没有设计遇到重名的情况该怎么处理。

3.选择单一。

我们设计的程序中,只设计了按名字选择,进行操作,忽略了重名的情况。

整个程序完成了,还有很多不完善的地方,希望自己以后办事的时候要认真,仔细,考虑周全。

短短的一周课程设计结束了,但是这段时间里,我又学到了更多C知识,如:

对象数组,string类,文件流等,同时我也被提醒以后办事的时候要认真,仔细,考虑周全。

,也看到了团队精神和互帮互助的重要性。

这一点会让我终生受益。

通过一周的课程设计,我觉得自己肚子里的墨水多了,收获也挺大的,这一周过的挺充实!

参考文献

【1】刘振安孙忱C程序设计课程设计:

机械工业出版社2004

【2】崔武子李青C程序设计辅导与实训:

清华大学出版社2002

【3】TheCProgrammingLanguage(C程序设计语言)第2版及习题解答【中译本】

【4】张福祥.C语言程序设计[M].辽宁大学出版社,2008.1

【5】张福祥,王萌.C语言程序设计习题解答与实验实沈阳:

辽宁大学出版社,2008

【6】牛莉,刘远军等.计算机等级考试辅导教程[M].北京:

中国铁道出版社,2008.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1