电视大赛观众投票及排名系统排序应用算法与数据结构报告模版.docx
- 文档编号:7107990
- 上传时间:2023-01-18
- 格式:DOCX
- 页数:10
- 大小:70.62KB
电视大赛观众投票及排名系统排序应用算法与数据结构报告模版.docx
《电视大赛观众投票及排名系统排序应用算法与数据结构报告模版.docx》由会员分享,可在线阅读,更多相关《电视大赛观众投票及排名系统排序应用算法与数据结构报告模版.docx(10页珍藏版)》请在冰豆网上搜索。
电视大赛观众投票及排名系统排序应用算法与数据结构报电视大赛观众投票及排名系统排序应用算法与数据结构报告模版告模版算法与数据结构课程设计实验报告学号:
姓名:
专业:
班级:
一、课程设计目的算法与数据结构是计算机相关专业的一门专业基础课程,通过课程学习,在课程设计环节应达到以下能力:
1.能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。
2.提高程序设计和调试能力。
学生通过上机训练,验证自己设计算法的正确性,学会有效利用基本调试方法,迅速找出程序代码中的错误并修改。
3.初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。
4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
5.查阅文献资料的自学能力。
二、课程设计题目及要求在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。
现在要求编写一程序模拟实现上述系统的功能。
三、需求分析在本例中,首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来开辟存放选手信息的顺序表。
将选手的编号和姓名依此存入顺序表单元中,观众通过按键进行投票,按1为1号选手投票,按2为2号选手投票,以此类推,以按0作为投票结束标志。
投票结束后进行排序,在此采用希尔排序,然后为每个选手计算名次,得票相同的名次也相同。
四、总体设计本程序分为四个模块:
1.主程序模块:
实现对函数的调用;2.顺序表模块:
实现对选手信息的存储;3.投票模块:
实现观众对选手的投票;4.排序模块:
实现对选手成绩的排序。
它们之间的关系为:
主程序模块顺序表模块投票模块排序模块五、详细设计与实现本程序分为五个模块a、主程序模块:
实现对函数的调用;b、顺序表模块:
实现选手信息存储;c、投票模块:
实现观众对选手的投票;d、排序模块:
实现对选手成绩的排序;e、文件保存模块:
实现对选手成绩的保存;
(1)分析:
为了实现上述程序功能,需要定义顺序表的抽象数据类型如下1、存储类型的定义参赛选手信息存储类型的定义:
typedefstructnode/结构体定义,命名一个新的类型名代表结构体类型charname9;/选手姓名intnum;/选手编号intscore;/选手得分inttax;/选手名次ElemType;/新的类型名2、函数的定义1.函数Menu,用于进行菜单的显示和选号:
voidMeun()2.函数Init_sq,为选手个数分配动态:
voidInit_sq(SeqList*L,intn)3.函数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)
(1)输入选手信息界面
(2)投票界面(3)排序界面(4)排序结果页面(5)保留到文件的界面经编译完成,此次设计程序已完成选手信息输入、投票、排序及保存到文件等功能总结电视大赛观众投票及排名系统是一个运用在各种电视节目中用来进行投票的一种较为智能的系统。
该系统用途广泛例如进行选手的投票和选手的观众的支持数量统计以及各种竞赛节目都能发挥作用。
本次设计的采用的是以C语言以及数据结构的知识在visualC+6.0的环境下进行编程。
通过模块化的方法将投票、排序、文档输出保存等功能进行一一实现。
最终程序能够较好的实现选手信息输入、投票、排序、结果保存输出txt文件等功能。
源代码:
#include#include/动态存储分配函数头文件#defineLIST_INIT_SIZE3/#define指令,指定用一个符号名称代表常量#defineLIST_INCREMENT3typedefstructnode/结构体定义,命名一个新的类型名代表结构体类型charname9;/选手姓名intnum;/选手编号intscore;/选手得分inttax;/选手名次ElemType;/新的类型名typedefstructElemType*data;/定义结构体指针变量data,指向此结构体类型数据intlen;intlistsize;SeqList;/新的类型名voidInit_sq(SeqList*L,intn)/定义函数Init_sq,为选手个数分配动态内存L-data=(ElemType*)malloc(n*sizeof(ElemType);/用malloc函数分配动态内存if(!
L-data)exit
(1);/存储分配失败L-len=n;/空表长度为0L-listsize=n;/初始存储容量voidInit(SeqList*L)/定义函数Init,用于完成选手信息的输入ElemType*newbase;/定义结构体指针变量指向ElemType结构体类型数据inti,n;printf(请输入选手个数:
);scanf(%d,&n);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-listsize+=LIST_INCREMENT;for(i=1;ilen;i+)/for循环输入选手信息scanf(%s%d,L-datai.name,&L-datai.num);L-datai.score=L-datai.tax=0;voidVote(SeqList*L)/定义Vote函数用以实现投票的功能inti,num;printf(请输入您要为几号选手投票:
(0结束)n);doscanf(%d,&num);if(numL-len)printf(你输入的编号错误请重新输入(1-%d)n,L-len);continue;elsefor(i=1;ilen;i+)if(L-datai.num=num)L-datai.score+=1;while(num!
=0);/for循环实现为某号选手投票使其得分增加voidShellsort(SeqList*L)/希尔排序inti,j;intincrement=L-len;doincrement=increment/3+1;/增量序列for(i=increment+1;ilen;i+)if(L-datai.scoreL-datai-increment.score)/需将L-ri插入有序增量子表L-data0=L-datai;/暂存在L-r0for(j=i-increment;j0&L-data0.scoreL-dataj.score;j-=increment)L-dataj+increment=L-dataj;/记录后移,查找插入位置L-dataj+increment=L-data0;/插入while(increment1);/*计算选手名次*/voidRank(SeqList*L)/Rank函数,用以计算选手名次inti;L-data1.tax=1;for(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);voidDisplay(SeqList*L)/定义Display函数,用以输出最终结果inti;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);voidSave(SeqList*L)/定义Save函数,实现文件的生成FILE*fp;/定义一个指向文件的指针变量fpinti;charfilename20;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);voidMeun()/Meun函数,生成系统主界面printf(*电视大赛观众投票及排名系统*n);printf(*1、输入选手信息(姓名、编号)*n);printf(*2、开始投票*n);printf(*3、排序*n);printf(*4、查看结果*n);printf(*5、保存到文件*n);printf(*6、退出*n);printf(*n);voidmain()/主函数intsel;SeqListL;SeqListP;while
(1)Meun();printf(n请输入您要选择的操作序号,按回车键确认:
);scanf(%d,&sel);while(sel6)printf(输入有误,请重新输入:
);scanf(%d,&sel);switch(sel)case1:
Init(&L);break;case2:
Vote(&L);break;case3:
Shellsort(&L);Rank(&L);break;case4:
Display(&L);break;case5:
Save(&L);break;case6:
printf(谢谢使用,再见!
n);exit(0);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电视大赛 观众 投票 排名 系统 排序 应用 算法 数据结构 报告 模版