您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 电视大赛观众投票及排名系统设计报告
课程设计说明书课程设计名称:综合程序课程设计课程设计题目:电视大赛观众投票及排名系统学院名称:信息工程学院专业:电子信息工程班级:学号:姓名:评分:教师:2014年2月20日电子信息工程专业课程设计任务书2013-2014学年第2学期第1周-2周注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。题目电视大赛观众投票及排名系统内容及要求在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。现在要求采用编写一程序模拟实现上述系统的功能进度安排周一、布置任务,查阅资料周二、模块程序的分别设计周三、对整个程序进行调试周四、对程序代码进行优化周五、设计结果的检查及报告的撰写学生姓名:指导时间第一周指导地点:综合楼506室任务下达2014年2月17日任务完成2014年2月21日考核方式1.评阅□2.答辩□3.实际操作□4.其它□指导教师系(部)主任电视大赛观众投票及排名系统课程设计说明书1摘要电视大赛观众投票及排名系统是一个运用在各种电视节目中用来进行投票的一种较为智能的系统。该系统用途广泛例如进行选手的投票和选手的观众的支持数量统计以及各种竞赛节目都能发挥作用。本次设计的采用的是以C语言以及数据结构的知识在visualC++6.0的环境下进行编程。通过模块化的方法将投票、排序、文档输出保存等功能进行一一实现。最终程序能够较好的实现选手信息输入、投票、排序、结果保存输出txt文件等功能。关键词:C语言;数据结构;投票及排名系统;编译电视大赛观众投票及排名系统课程设计说明书2目录第一章设计内容及要求·······························3第二章程序设计方案···································4第三章程序具体分析与设计3.1基本思路································53.2程序分析及其设计·····························63.3关键程序设计与分析·························73.4程序预计实现结果····························8第四章方案的调试及测试结果与分析4.1调试过程中遇到的问题及解决方案················94.2调试结果与分析·····························9第五章课程设计分析总结与心得体会···················12附录··································13参考文献·····································17电视大赛观众投票及排名系统课程设计说明书3第一章设计内容及要求在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。现在要求编写一程序模拟实现上述系统的功能在该课程设计中,首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来开辟存放选手信息的顺序表。将选手的编号和姓名依此存入顺序表单元中,观众通过按键进行投票,按’1’为1号选手投票,按’2’为2号选手投票,以此类推,以按’0’作为投票结束标志。投票结束后进行排序,在此采用希尔排序,然后为每个选手计算名次,得票相同的名次也相同。最终输出排名结果,并将结果保存到文件中。电视大赛观众投票及排名系统课程设计说明书4第二章程序设计方案2.1总体设计思路本程序分为四个模块:1.主程序模块:实现对函数的调用;2.顺序表模块:实现对选手信息的存储;3.投票模块:实现观众对选手的投票;4.排序模块:实现对选手成绩的排序。它们之间的关系为:主程序模块顺序表模块投票模块排序模块2.2详细设计方案本程序分为五个模块a、主程序模块:实现对函数的调用;b、顺序表模块:实现选手信息存储;c、投票模块:实现观众对选手的投票;d、排序模块:实现对选手成绩的排序;e、文件保存模块:实现对选手成绩的保存;电视大赛观众投票及排名系统课程设计说明书5第三章程序具体分析及设计3.1基本思路将输入的信息储存在顺序链表中,然后观众投票后对其累加票数,最后利用希尔排序对选手的得票进行从高到低地排序,显示名次的先后(包含并列名次),并对最终结果进行保存到文件。3.2程序分析及其设计分析:为了实现上述程序功能,需要定义顺序表的抽象数据类型如下1、存储类型的定义参赛选手信息存储类型的定义:typedefstructnode//结构体定义,命名一个新的类型名代表结构体类型{charname[9];//选手姓名intnum;//选手编号intscore;//选手得分inttax;//选手名次}ElemType;//新的类型名2、函数的定义1.函数Menu,用于进行菜单的显示和选号:voidMeun()2.函数Init_sq,为选手个数分配动态:voidInit_sq(SeqList*L,intn)电视大赛观众投票及排名系统课程设计说明书63.函数Init,用于完成选手信息的输入:voidInit(SeqList*L)4.Vote函数用以实现投票的功能:voidVote(SeqList*L)5.希尔排序:voidShellsort(SeqList*L)6.Rank函数,用以计算选手名次:voidRank(SeqList*L)7.Display函数,用以输出最终结果:voidDisplay(SeqList*L)8.Save函数,实现文件的生成:voidSave(SeqList*L)3.3关键程序设计与分析(希尔排序)本次程序设计的关键部分在于对选手投票结果的排序,对投票排序模块的代码分析如下:本次程序设计采用希尔排序,取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2d1重复上述的分组和排序,直至所取的增量dt=1(dtdt-l…d2d1),即所有记录放在同一组中进行直接插入排序为止。例如以关键字{20,95,33,21,55,44,61,91}为例:第一趟排序为:20,44,33,21,55,95,61,91第二趟排序为:20,21,33,44,55,91,61,95第三趟排序为:20,21,33,44,55,61,91,95其算法为:voidShellsort(SeqList*L){电视大赛观众投票及排名系统课程设计说明书7inti,j;intincrement=L-len;do{increment=increment/3+1;/*增量序列*/for(i=increment+1;i=L-len;i++){if(L-data[i].scoreL-data[i-increment].score)/*需将L-r[i]插入有序增量子表*/{L-data[0]=L-data[i];/*暂存在L-r[0]*/for(j=i-increment;j0&&L-data[0].scoreL-data[j].score;j-=increment)L-data[j+increment]=L-data[j];/*记录后移,查找插入位置*/L-data[j+increment]=L-data[0];/*插入*/}}}while(increment1);}voidRank(SeqList*L)/*计算选手名次*/{inti;L-data[1].tax=1;电视大赛观众投票及排名系统课程设计说明书8for(i=2;i=L-len;i++)if(L-data[i-1].score==L-data[i].score)L-data[i].tax=L-data[i-1].tax;elseL-data[i].tax=L-data[i-1].tax+1;printf(正在计算选手名次请稍后\n排序成功\n);}3.4程序预计实现结果本程序在c++6.0中运行:1.输入的形式和输入值的范围:由于本程序主要运用于观众投票以及选手信息的输入,所以输入的形式是数字及字符,范围不限;2.输出的形式:根据观众投票情况输出排名情况3.程序实现的功能:实现观众投票以及选手得分情况的排名4.测试数据:a.输入选手的个数以及每个选手的信息输入“4”“asdf”b.根据菜单输入选号“2”输出“1号a得分是0,排名是0;2号s得分是0,排名是0;3号d得分是0,排名是0;4号f得分是0,排名是0;”c.给选手投票,输入“123333432210”。d.根据菜单输入选号“4”,输出排序结果及名次。e.根据菜单驶入选号“5”,保存输出文件f.根据菜单选号“6”,退出程序。电视大赛观众投票及排名系统课程设计说明书9第四章方案的调试及测试结果与分析4.1调试过程1、在刚开始编程的时候经常会碰到一些低级编写错误例如漏分号大括号不匹配等经过仔细修改已能正常运行;2、本程序的模块划分简单而合理,在操作方面比较容易,运用顺序表来存储选手信息;3、在程序完成后但由于输入选手姓名后不能根据名字长短自动判断自动判断对齐编号列表,后来经过老师指导并请教同学优化代码,在输入名字后按下TAB键就能自动对齐编号列表,程序更加人性化。4、本实验程序设计中,将程序分为五个模块,使得设计时思路清晰,实现时调试顺利,各模块具有较好的可重用性,确实得到了一次良好的程序设计训练。4.2调试结果与分析(1)输入选手信息界面电视大赛观众投票及排名系统课程设计说明书10(2)投票界面(3)排序界面电视大赛观众投票及排名系统课程设计说明书11(4)排序结果页面(5)保存到文件(6)保留到文件的界面:电视大赛观众投票及排名系统课程设计说明书12经编译完成,此次设计程序已完成选手信息输入、投票、排序及保存到文件等功能第五章课程设计分析总结与心得体会此次实习为期一周,时间虽然不多但是我学到了很多,也知道了很多的不足。通过老师的精心指导带领下,我不仅获得了很多新知识,还好好复习了一下以前学的知识。作为一个电子专业的学生,C语言是一门必须要熟练掌握的重要语言。在这之前,我们已经对C语言这门课程学习了一个学期,对其有了一定的了解,但是更多的还是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。C语言课堂上许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。我所编的虽然只是一个小程序,但是每一步的编的过程,让我懂得很多。电视大赛观众投票及排名系统课程设计说明书13重温一下C语言,因为过了计算机二级,因而编程比较容易懂,但是通过练习,发现理论与实际的差距。编程从一开始全部编到一个main函数中到,最后逐个分块,到添加功能,到最后的进行代码的优化,使程序的可用性和智能性都有进一步的提高,一点一点的进步让我很欣喜,对编程的兴趣也更加浓厚。此次实习,不仅了有关c语言的知识,还掌握了一些现实中编程的一些小技巧,实际的编程能力也得到了历练,本次课程设计是很好的一次锻炼机会!附录程序源代码#includestdio.h#includestdlib.h//动态存储分配函数头文件#defineLIST_INIT_SIZE3//
本文标题:电视大赛观众投票及排名系统设计报告
链接地址:https://www.777doc.com/doc-4068685 .html