问题描述:在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生、亚军和季军。要求编写算法模拟实现上述系统的功能。

课程设计:电视大赛投票系统!185行代码做出赛事投票功能插图

1.基本要求

(1)首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来分配存放选手信息的顺序表;

(2)将选手的编号和姓名依次存入顺序表中;

(3)观众通过按键进行投票,按’1’为1号选手投票,按’2’为2号选手投票,以此类推,以按’0’作为投票结束标志;

(4)投票结束后进行排序,在此采用各种排序算法,然后为每个选手计算名次,得票相同的名次也相同;

2.重点、难点

重点:

(1)参赛选手数据结构的设计;

(2)排序算法的设计;

难点:各种排序算法的性能分析与比较

3.作业及课外学习要求:

按照题意要求独立进行设计,设计结束后要按要求写出课程设计报告。

源码分享:

includeincludeincludeincludeinclude“xy_setting.h”usingnamespacestd;intnumber=0,n=0,flag=0;voidmsgbox(){printf(“===============================\n”);printf(“= 参赛人数:%d =\n”,number);printf(“= 有效投票数:%d =\n”,n);printf(“= 基本操作: =\n”);if(flag==0)printf(“= 开始投票:—-S =\n”);elseprintf(“= 已投票,是否补投—-Y =\n”);printf(“= 投票情况(编号排序)—-A =\n”);printf(“= Ranking —-R =\n”);printf(“= 退出系统 —-E =\n”);printf(“===============================\n”); }classplayer{public:intnum;charname[30];intscore;intranking; };classope{public:voidinit(player *a,intnumber);voidoutput_info(player *a,intnumber);voidoutcome(player *a,intnumber);voidvoting(player *a,intnumber);voidshell_insert(player *a,intn,intdk);voidshell_sort(player *a,intn,intt);voidsort_outcome(player *a,intnumber); };voidope::shell_insert(player *a,intn,intdk) {for(inti=dk+1;i<=n;i++) {intj;if(a[i].score>a[i-dk].score) {strcpy(a[0].name,a[i].name); a[0].score=a[i].score; a[0].num=a[i].num;for(j=i-dk;j&&a[j].score0].score;j-=dk) {strcpy(a[j+dk].name,a[j].name); a[j+dk].score=a[j].score; a[j+dk].num=a[j].num; }strcpy(a[j+dk].name,a[0].name); a[j+dk].score=a[0].score; a[j+dk].num=a[0].num; } } }voidope::shell_sort(player *a,intn,intt) {inti;for(;t>=1;t/=2) { ope::shell_insert(a,n,t);for(i=1;i<=n;i++) a[i].ranking=i;for(i=1;iif(a[i+1].score==a[i].score) a[i+1].ranking=a[i].ranking; } }voidope::output_info(player *a,intnumber) {cout<<“\n输出选手信息:\n编号 姓名\n”;for(inti=1;i<=number;i++) {printf(” %d %s\n”,a[i].num,a[i].name); } }voidope::init(player *a,intnumber) {inti=1; cur_sys();cout<<endl<<“输入选手姓名:”<<endl;while(i<=number) {cin>>a[i].name; a[i].num=i; a[i].score=a[i].ranking=0; i++; } ope::output_info(a,number);cout<<endl<<“初始化成功!!!”<<endl; }voidope::outcome(player *a,intnumber) {cout<<“输出选手得票情况(未排序):\n”;for(inti=1;i<=number;i++) {printf(“选手00%d得票数为%d;\n”,a[i].num,a[i].score); } }voidope::sort_outcome(player *a,intnumber) {cout<<“\n排名:已排序”<<endl; ope::shell_sort(a,number,number);for(inti=1;i<=number;i++) { {printf(“第%d名为00%d号选手%s,得票数为%d;\n”, a[i].ranking,a[i].num,a[i].name,a[i].score); } } }voidope::voting(player *a,intnumber) {if(flag==0)cout<<“\n输入选手编号进行投票,按0结束。\n”;elsecout<<“\n补投开始:输入选手编号,按0结束。\n”; flag=1;intvote;while(scanf(“%d”,&vote)&&vote) {if(vote>0&&vote<=number) { a[vote].score++; n++; cur_sys();cout<<“请继续,按0结束”<<endl; }elseif(vote==0)break;else{ cur_sys();cout<<“请继续,按0结束”<<endl;continue; } }cout<<“投票成功!”<<endl; }intmain(){chara; player *p=NULL; ope dol; msgbox();cout<<“未初始化无法操作\n请输入总人数:”;while(cin>>number) {if(number>0)break;elsecout<<“输入错误,重新输入”<<endl; } p=(player *)malloc(sizeof(player)*number); dol.init(p,number); system(“pause”); cur_sys();cout<<“输入操作\n-“;while(cin>>a) {switch(a) {caseA:dol.outcome(p,number);cur_sys2();cout<<“输入操作\n-“;break;caseS:dol.voting(p,number);cur_sys2();cout<<“输入操作\n-“;break;caseY:dol.voting(p,number);cur_sys2();cout<<“输入操作\n-“;break;caseR:dol.sort_outcome(p,number);cur_sys2();cout<<“输入操作\n:”;break;caseE:exit(0);break;default:continue; } }cout<<“谢谢使用!!!”; }

写在后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

课程设计:电视大赛投票系统!185行代码做出赛事投票功能插图1

编程学习视频分享:

课程设计:电视大赛投票系统!185行代码做出赛事投票功能插图2

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取好了!

作者 nasiapp

在线客服
官方客服
我们将24小时内回复。
12:01
您好,有任何疑问请与我们联系!

选择聊天工具: