1、 课程设计说明书课程设计名称: 综合程序课程设计 课程设计题目: 电视大赛观众投票及排名系统 学 院 名 称: 信息工程学院 专业:电子信息工程 班级: 学号: 姓名: 评分: 教师: 20 14 年 2 月 20 日电子信息工程专业 课 程 设 计 任 务 书20 13 20 14 学年 第 2 学期 第 1 周 2 周 注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。2、课程设计结束后与“课程设计小结” 、 “学生成绩单”一并交院教务存档。题目 电视大赛观众投票及排名系统内容及要求在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票
2、,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。现在要求采用编写一程序模拟实现上述系统的功能进度安排周一、布置任务,查阅资料周二、模块程序的分别设计周三、对整个程序进行调试周四、对程序代码进行优化周五、设计结果的检查及报告的撰写学生姓名:指导时间 第一周 指导地点:综合楼 506 室任务下达 2014 年 2 月 17 日 任务完成 2014 年 2 月 21 日考核方式 1.评阅 2.答辩 3.实际操作 4.其它指导教师 系(部)主任摘 要电视大赛观众投票及排名系统是一个运用在各种电视节目中用来进行投票的一种较为智能的系统。该系统用途广泛例如进行选手的投票
3、和选手的观众的支持数量统计以及各种竞赛节目都能发挥作用。本次设计的采用的是以 C 语言以及数据结构的知识在visual C+ 6.0 的环境下进行编程。通过模块化的方法将投票、排序、文档输出保存等功能进行一一实现。最终程序能够较好的实现选手信息输入、投票、排序、结果保存输出 txt 文件等功能。关键词: C 语言;数据结构;投票及排名系统;编译目 录第一章 设计内容及要求3第二章 程序设计方案4第三章 程序具体分析与设计3.1 基本思路53.2 程序分析及其设计63.3关键程序设计与分析73.4程序预计实现结果8第四章 方案的调试及测试结果与分析4.1 调试过程中遇到的问题及解决方案94.2
4、调试结果与分析9第五章 课程设计分析总结与心得体会12附录13参考文献17第一章 设计内容及要求在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。现在要求编写一程序模拟实现上述系统的功能在该课程设计中,首先输入参赛选手的人数(范围为 1-9 个) ,然后根据人数通过 malloc 函数来开辟存放选手信息的顺序表。将选手的编号和姓名依此存入顺序表单元中,观众通过按键进行投票,按1为 1 号选手投票,按2为 2 号选手投票,以此类推,以按0作为投票结束标志。投票结束后进行排序,在此采
5、用希尔排序,然后为每个选手计算名次,得票相同的名次也相同。最终输出排名结果,并将结果保存到文件中。第二章 程序设计方案2.1 总体设计思路本程序分为四个模块:1.主程序模块:实现对函数的调用;2.顺序表模块:实现对选手信息的存储;3.投票模块:实现观众对选手的投票;4.排序模块:实现对选手成绩的排序。 它们之间的关系为:主程序模块顺序表模块投票模块排序模块2.2 详细设计方案本程序分为五个模块a、主程序模块: 实现对函数的调用; b、顺序表模块: 实现选手信息存储; c、投票模块 : 实现观众对选手的投票; d、排序模块: 实现对选手成绩的排序;e、文件保存模块: 实现对选手成绩的保存;第三章
6、 程序具体分析及设计3.1 基本思路将输入的信息储存在顺序链表中,然后观众投票后对其累加票数,最后利用希尔排序对选手的得票进行从高到低地排序,显示名次的先后(包含并列名次) ,并对最终结果进行保存到文件。3.2 程序分析及其设计分析:为了实现上述程序功能,需要定义顺序表的抽象数据类型如下1、存储类型的定义参赛选手信息存储类型的定义:typedef struct node /结构体定义,命名一个新的类型名代表结构体类型char name9; / 选手姓名int num; /选手编号 int score; / 选手得分int tax; /选手名次ElemType; /新的类型名2、函数的定义1.
7、函数 Menu, 用于进行菜单的显示和选号:void Meun()2.函数 Init_sq,为选手个数分配动态:void Init_sq(SeqList *L,int n)3.函数 Init,用于完成选手信息的输入:void Init(SeqList *L)4. Vote 函数用以实现投票的功能:void Vote(SeqList *L)5.希尔排序:void Shellsort(SeqList *L)6. Rank 函数,用以计算选手名次:void Rank(SeqList *L)7.Display 函数,用以输出最终结果:void Display(SeqList *L)8.Save函数,实
8、现文件的生成:void Save(SeqList *L)3.3 关键程序设计与分析(希尔排序)本次程序设计的关键部分在于对选手投票结果的排序,对投票排序模块的代码分析如下:本次程序设计采用希尔排序,取一个小于 n 的整数 d1 作为第一个增量,把文件的全部记录分成 d1 个组。所有距离为 dl 的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量 d2len;doincrement=increment/3+1; /* 增量序列 */for(i=increment+1;ilen;i+)if (L-datai.score L-datai-increment.score) /* 需将 L-ri插入有序增量子表 */ L-data0=L-datai; /* 暂存在 L-r0 */for(j=i-increment; j0 j-=increment) L-dataj+increment=L-dataj; /* 记录后移,查找插入位置 */L-dataj+increment=L-data0; /* 插入 */while(increment1);void Rank(SeqList *L) /* 计算选手名次 */int i;L-data1.tax=1;