收藏 分享(赏)

电视大赛观众投票及排名系统设计报告.doc

上传人:HR专家 文档编号:11317131 上传时间:2020-03-17 格式:DOC 页数:21 大小:281.01KB
下载 相关 举报
电视大赛观众投票及排名系统设计报告.doc_第1页
第1页 / 共21页
电视大赛观众投票及排名系统设计报告.doc_第2页
第2页 / 共21页
电视大赛观众投票及排名系统设计报告.doc_第3页
第3页 / 共21页
电视大赛观众投票及排名系统设计报告.doc_第4页
第4页 / 共21页
电视大赛观众投票及排名系统设计报告.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

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.其它指导教师 系(部)主任电视大赛观众投票及排名系统课程设计说明书1摘 要电视大赛观众投票及排名系统是一个运用在各种电视节目中用来进行投票的一种较为智

3、能的系统。该系统用途广泛例如进行选手的投票和选手的观众的支持数量统计以及各种竞赛节目都能发挥作用。本次设计的采用的是以 C 语言以及数据结构的知识在visual C+ 6.0 的环境下进行编程。通过模块化的方法将投票、排序、文档输出保存等功能进行一一实现。最终程序能够较好的实现选手信息输入、投票、排序、结果保存输出 txt 文件等功能。关键词: C 语言;数据结构;投票及排名系统;编译电视大赛观众投票及排名系统课程设计说明书2目 录第一章 设计内容及要求3第二章 程序设计方案4第三章 程序具体分析与设计3.1 基本思路53.2 程序分析及其设计63.3关键程序设计与分析73.4程序预计实现结果

4、8电视大赛观众投票及排名系统课程设计说明书3第四章 方案的调试及测试结果与分析4.1 调试过程中遇到的问题及解决方案94.2 调试结果与分析9第五章 课程设计分析总结与心得体会12附录13参考文献17第一章 设计内容及要求在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,电视大赛观众投票及排名系统课程设计说明书4从高到低进行降序排序,从而自动产生冠军、亚军和季军。现在要求编写一程序模拟实现上述系统的功能在该课程设计中,首先输入参赛选手的人数(范围为 1-9 个) ,然后根据人数通过 malloc 函数来开辟存放选手信息的顺序表。将

5、选手的编号和姓名依此存入顺序表单元中,观众通过按键进行投票,按1为 1 号选手投票,按2为 2 号选手投票,以此类推,以按0作为投票结束标志。投票结束后进行排序,在此采用希尔排序,然后为每个选手计算名次,得票相同的名次也相同。最终输出排名结果,并将结果保存到文件中。第二章 程序设计方案2.1 总体设计思路本程序分为四个模块:电视大赛观众投票及排名系统课程设计说明书51.主程序模块:实现对函数的调用;2.顺序表模块:实现对选手信息的存储;3.投票模块:实现观众对选手的投票;4.排序模块:实现对选手成绩的排序。 它们之间的关系为:主程序模块顺序表模块投票模块排序模块2.2 详细设计方案本程序分为五

6、个模块a、主程序模块: 实现对函数的调用; b、顺序表模块: 实现选手信息存储; c、投票模块 : 实现观众对选手的投票; d、排序模块: 实现对选手成绩的排序;e、文件保存模块: 实现对选手成绩的保存;第三章 程序具体分析及设计3.1 基本思路电视大赛观众投票及排名系统课程设计说明书6将输入的信息储存在顺序链表中,然后观众投票后对其累加票数,最后利用希尔排序对选手的得票进行从高到低地排序,显示名次的先后(包含并列名次) ,并对最终结果进行保存到文件。3.2 程序分析及其设计分析:为了实现上述程序功能,需要定义顺序表的抽象数据类型如下1、存储类型的定义参赛选手信息存储类型的定义:typedef

7、 struct node /结构体定义,命名一个新的类型名代表结构体类型char name9; / 选手姓名int num; /选手编号 int score; / 选手得分int tax; /选手名次ElemType; /新的类型名2、函数的定义1. 函数 Menu, 用于进行菜单的显示和选号:void Meun()2.函数 Init_sq,为选手个数分配动态:void Init_sq(SeqList *L,int n)3.函数 Init,用于完成选手信息的输入:void Init(SeqList *L)电视大赛观众投票及排名系统课程设计说明书74. Vote 函数用以实现投票的功能:void

8、 Vote(SeqList *L)5.希尔排序:void Shellsort(SeqList *L)6. Rank 函数,用以计算选手名次:void Rank(SeqList *L)7.Display 函数,用以输出最终结果:void Display(SeqList *L)8.Save函数,实现文件的生成:void Save(SeqList *L)3.3 关键程序设计与分析(希尔排序)本次程序设计的关键部分在于对选手投票结果的排序,对投票排序模块的代码分析如下:本次程序设计采用希尔排序,取一个小于 n 的整数 d1 作为第一个增量,把文件的全部记录分成 d1 个组。所有距离为 dl 的倍数的记

9、录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量 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-da

10、ta0; /* 插入 */while(increment1);void Rank(SeqList *L) /* 计算选手名次 */int i;L-data1.tax=1;电视大赛观众投票及排名系统课程设计说明书9for(i=2;ilen;i+)if(L-datai-1.score=L-datai.score)L-datai.tax= L-datai-1.tax;elseL-datai.tax= L-datai-1.tax+1;printf(“正在计算选手名次请稍后n 排序成功n“);3.4 程序预计实现结果本程序在 c+6.0 中运行: 1.输入的形式和输入值的范围:由于本程序主要运用于观众投

11、票以及选手信息的输入,所以输入的形式是数字及字符,范围不限; 2.输出的形式:根据观众投票情况输出排名情况 3.程序实现的功能:实现观众投票以及选手得分情况的排名 4.测试数据: a.输入选手的个数以及每个选手的信息输入“4” “a s d f” b.根据菜单输入选号“2”输出“1 号 a 得分是 0,排名是 0;2 号 s得分是 0,排名是 0;3 号 d 得分是 0,排名是 0;4 号 f 得分是 0,排名是 0;” c.给选手投票,输入“1 2 3 3 3 3 4 3 2 2 1 0”。 d. 根据菜单输入选号“4”,输出排序结果及名次。e根据菜单驶入选号“5” ,保存输出文件f根据菜单

12、选号“6” ,退出程序。电视大赛观众投票及排名系统课程设计说明书10第四章 方案的调试及测试结果与分析4.1 调试过程1、 在刚开始编程的时候经常会碰到一些低级编写错误例如漏分号大括号不匹配等 经过仔细修改已能正常运行; 2、 本程序的模块划分简单而合理,在操作方面比较容易,运用顺序表来存储选手信息;3、在程序完成后但由于输入选手姓名后不能根据名字长短自动判断自动判断对齐编号列表,后来经过老师指导并请教同学优化代码,在输入名字后按下 TAB 键就能自动对齐编号列表,程序更加人性化。 4、 本实验程序设计中,将程序分为五个模块,使得设计时思路清晰,实现时调试顺利,各 模块具有较好的可重用性,确实

13、得到了一次良好的程序设计训练。4.2 调试结果与分析(1)输入选手信息界面电视大赛观众投票及排名系统课程设计说明书11(2)投票界面(3)排序界面电视大赛观众投票及排名系统课程设计说明书12(4)排序结果页面(5)保存到文件(6)保留到文件的界面:电视大赛观众投票及排名系统课程设计说明书13经编译完成,此次设计程序已完成选手信息输入、投票、排序及保存到文件等功能第五章 课程设计分析总结与心得体会此次实习为期一周,时间虽然不多但是我学到了很多,也知道了很多的不足。通过老师的精心指导带领下,我不仅获得了很多新知识,还好好复习了一下以前学的知识。作为一个电子专业的学生,C 语言是一门必须要熟练掌握的

14、重要语言。在这之前,我们已经对 C 语言这门课程学习了一个学期,对其有了一定的了解,但是更多的还是停留在学习了解的范围,对里面的好多东西还是很陌生,并不是很熟练,有着许多欠缺,更多的在运用起来的时候还是感到很不好动手。C 语言课堂上许多关于 C 语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用 C 语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握 C 语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,更加巩固了学过的知识,而且在设计的时候学要

15、系统的知识,也是一个较大的挑战,某一方面知识的欠缺都将影响到整个程序的设计。我所编的虽然只是一个小程序,但是每一步的编的电视大赛观众投票及排名系统课程设计说明书14过程,让我懂得很多。重温一下 C 语言,因为过了计算机二级,因而编程比较容易懂,但是通过练习,发现理论与实际的差距。编程从一开始全部编到一个 main 函数中到,最后逐个分块,到添加功能,到最后的进行代码的优化,使程序的可用性和智能性都有进一步的提高,一点一点的进步让我很欣喜,对编程的兴趣也更加浓厚。此次实习,不仅了有关 c 语言的知识,还掌握了一些现实中编程的一些小技巧,实际的编程能力也得到了历练,本次课程设计是很好的一次锻炼机会

16、!附录 程序源代码#include #include /动态存储分配函数头文件#define LIST_INIT_SIZE 3 /#define 指令,指定用一个符号名称代表常量#define LIST_INCREMENT 3 typedef struct node /结构体定义,命名一个新的类型名代表结构体类型char name9; / 选手姓名int num; /选手编号 int score; / 选手得分int tax; /选手名次ElemType; /新的类型名typedef structElemType *data; /定义结构体指针变量 data,指向此结构体类型数据int len

17、; int listsize; SeqList; /新的类型名void Init_sq(SeqList *L,int n) /定义函数 Init_sq,为选手个数分配动电视大赛观众投票及排名系统课程设计说明书15态内存L-data=(ElemType*)malloc(n*sizeof(ElemType); /用 malloc 函数分配动态内存if(!L-data) exit(1); /存储分配失败L-len = n; /空表长度为 0L-listsize = n; /初始存储容量void Init(SeqList *L) /定义函数 Init,用于完成选手信息的输入ElemType *newb

18、ase; /定义结构体指针变量指向 ElemType 结构体类型数据int i,n;printf(“请输入选手个数: “);scanf(“%d“,Init_sq(L,n);printf(“请输入选手姓名和编号n“);printf(“姓名t 编号tn“);if(L-len=L-listsize)newbase=(ElemType*)realloc(L-data,(L-listsize+LIST_INCREMENT)*sizeof(ElemType); /用 ralloc 函数重新分配动态空间if(!newbase) exit(1); /分配失败L-data = newbase;L-listsiz

19、e += LIST_INCREMENT;for(i=1;ilen;i+) /for 循环输入选手信息scanf(“%s%d“,L-datai.name,L-datai.score = L-datai.tax =0;void Vote(SeqList *L) /定义 Vote 函数用以实现投票的功能int i,num;printf(“请输入您要为几号选手投票:( 0 结束) n“);电视大赛观众投票及排名系统课程设计说明书16doscanf(“%d“,if(num L-len)printf(“你输入的编号错误请重新输入 (1-%d)n“,L-len);continue;elsefor(i=1;i

20、len;i+)if(L-datai.num = num)L-datai.score += 1;while(num != 0); /for 循环实现为某号选手投票使其得分增加 void Shellsort(SeqList *L) /希尔排序int i,j;int increment=L-len;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-r0for(j=i-

21、increment; j0 j-=increment) L-dataj+increment=L-dataj; /记录后移,查找插入位置 L-dataj+increment=L-data0; /插入while(increment1);/* 计算选手名次 */void Rank(SeqList *L) / Rank 函数,用以计算选手名次int i;L-data1.tax=1;电视大赛观众投票及排名系统课程设计说明书17for(i=2;ilen;i+)if(L-datai-1.score=L-datai.score)L-datai.tax= L-datai-1.tax;elseL-datai.ta

22、x= L-datai-1.tax+1;printf(“正在计算选手名次请稍后n 排序成功n“);void Display(SeqList *L) /定义 Display 函数,用以输出最终结果int i;printf(“姓名t 编号t 票数t 名次tn“);for(i=1;ilen;i+)printf(“%st%dt%dt%dtn“,L-datai.name,L-datai.num,L-datai.score,L-datai.tax);printf(“n“);void Save(SeqList *L) /定义 Save 函数,实现文件的生成FILE *fp; /定义一个指向文件的指针变量 fp

23、int i;char filename20;printf(“请输入目标文件名:n“);scanf(“%s“,filename);fp=fopen(filename,“w“);/建立新文件将 fopen 函数的返回值赋给指针/变量 fp,fp 指向了名为 filename 的文件fprintf(fp,“姓名t 编号t 票数t 名次n“);for(i=1;ilen;i+)fprintf(fp,“%st%dt%dt%dtn“,L-datai.name,L-datai.num,L-datai.score,L-datai.tax);fclose(fp);printf(“数据已成功保存! n“);void

24、 Meun() /Meun 函数,生成系统主界面printf(“*电视大赛观众投票及排名系统*n“);printf(“* 1、输入选手信息(姓名、编号) *n“);printf(“* 2、开始投票 *n“);电视大赛观众投票及排名系统课程设计说明书18printf(“* 3、排序 *n“);printf(“* 4、查看结果 *n“);printf(“* 5、保存到文件 *n“);printf(“* 6、退出 *n“);printf(“*n“);void main() /主函数int sel;SeqList L;SeqList P;while(1)Meun();printf(“n 请输入您要选择

25、的操作序号,按回车键确认:“); scanf(“%d“,while(sel6)printf(“输入有误,请重新输入:“);scanf(“%d“,switch(sel)case 1:Init(break;case 2:Vote(break;case 3:Shellsort( Rank(break;case 4:Display(break;case 5:Save(break;case 6: printf(“谢谢使用,再见!n“); exit(0);参考文献1.谭浩强. C程序设计(第4版).清华大学出版社, 2010.62.严蔚敏 吴伟民. 数据结构(C语言版).清华大学出版社, 电视大赛观众投票及排名系统课程设计说明书192012

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

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报