电视大赛观众投票及排名系统的设计与实现( 8学时)
问题描述:在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。要求编写算法模拟实现上述系统的功能。
1.基本要求
(1)首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来分配存放选手信息的顺序表;
(2)将选手的编号和姓名依此存入顺序表中;
(3)观众通过按键进行投票,按’1’为1号选手投票,按’2’为2号选手投票,以此类推,以按’0’作为投票结束标志;
(4)投票结束后进行排序,在此采用各种排序算法,然后为每个选手计算名次,得票相同的名次也相同;
2.重点、难点
重点:
(1)参赛选手数据结构的设计;
(2)排序算法的设计;
难点:各种排序算法的性能分析与比较
3.作业及课外学习要求:
按照题意要求独立进行设计,设计结束后要按要求写出课程设计报告。
本知识点的讲授和学习,可以支撑“毕业要求4研究”中的“指标点4.1能够运用科学的研究方法对复杂软件工程问题进行需求分析研究;指标点4.2熟悉复杂软件系统的开发和应用环境,研究制定合理的软件设计与开发方案。指标点4.3能够对原型验证方法进行研究与分析,合理验证软件系统”的指标达成度进行评估。使学生在解决具体问题的过程中,能够灵活熟练地选择合适的数据结构及设计有效的算法,从而加深对常用数据结构的理解,强化学生的逻辑思维能力和动手能力,巩固良好的编程习惯,掌握工程软件设计的基本方法,为后续课程的学习打下坚实基础。代码:
问题描述:在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。要求编写算法模拟实现上述系统的功能。
1.基本要求
(1)首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来分配存放选手信息的顺序表;
(2)将选手的编号和姓名依此存入顺序表中;
(3)观众通过按键进行投票,按’1’为1号选手投票,按’2’为2号选手投票,以此类推,以按’0’作为投票结束标志;
(4)投票结束后进行排序,在此采用各种排序算法,然后为每个选手计算名次,得票相同的名次也相同;
2.重点、难点
重点:
(1)参赛选手数据结构的设计;
(2)排序算法的设计;
难点:各种排序算法的性能分析与比较
3.作业及课外学习要求:
按照题意要求独立进行设计,设计结束后要按要求写出课程设计报告。
本知识点的讲授和学习,可以支撑“毕业要求4研究”中的“指标点4.1能够运用科学的研究方法对复杂软件工程问题进行需求分析研究;指标点4.2熟悉复杂软件系统的开发和应用环境,研究制定合理的软件设计与开发方案。指标点4.3能够对原型验证方法进行研究与分析,合理验证软件系统”的指标达成度进行评估。使学生在解决具体问题的过程中,能够灵活熟练地选择合适的数据结构及设计有效的算法,从而加深对常用数据结构的理解,强化学生的逻辑思维能力和动手能力,巩固良好的编程习惯,掌握工程软件设计的基本方法,为后续课程的学习打下坚实基础。代码:
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
#include<cstdio> #include<iostream> #include<stdlib.h> #include<cstring> #include"xy_setting.h" using namespace std; int number=0,n=0,flag=0; void msgbox() { printf("===============================\n"); printf("= 参赛人数:%d =\n",number); printf("= 有效投票数:%d =\n",n); printf("= 基本操作: =\n"); if(flag==0) printf("= 开始投票:----S =\n"); else printf("= 已投票,是否补投----Y =\n"); printf("= 投票情况(编号排序)----A =\n"); printf("= Ranking ----R =\n"); printf("= 退出系统 ----E =\n"); printf("===============================\n"); } class player { public: int num; char name[30]; int score; int ranking; }; class ope { public: void init(player *a,int number); void output_info(player *a,int number); void outcome(player *a,int number); void voting(player *a,int number); void shell_insert(player *a,int n,int dk); void shell_sort(player *a,int n,int t); void sort_outcome(player *a,int number); }; void ope::shell_insert(player *a,int n,int dk) { for(int i=dk+1;i<=n;i++) { int j; 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].score<a[0].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; } } } void ope::shell_sort(player *a,int n,int t) { int i; for(;t>=1;t/=2) { ope::shell_insert(a,n,t); for(i=1;i<=n;i++) a[i].ranking=i; for(i=1;i<n;i++) if(a[i+1].score==a[i].score) a[i+1].ranking=a[i].ranking; } } void ope::output_info(player *a,int number) { cout<<"\n输出选手信息:\n编号 姓名\n"; for(int i=1;i<=number;i++) { printf(" %d %s\n",a[i].num,a[i].name); } } void ope::init(player *a,int number) { int i=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; } void ope::outcome(player *a,int number) { cout<<"输出选手得票情况(未排序):\n"; for(int i=1;i<=number;i++) { printf("选手00%d得票数为%d;\n",a[i].num,a[i].score); } } void ope::sort_outcome(player *a,int number) { cout<<"\n排名:已排序"<<endl; ope::shell_sort(a,number,number); for(int i=1;i<=number;i++) { { printf("第%d名为00%d号选手%s,得票数为%d;\n", a[i].ranking,a[i].num,a[i].name,a[i].score); } } } void ope::voting(player *a,int number) { if(flag==0) cout<<"\n输入选手编号进行投票,按0结束。\n"; else cout<<"\n补投开始:输入选手编号,按0结束。\n"; flag=1; int vote; while(scanf("%d",&vote)&&vote) { if(vote>0&&vote<=number) { a[vote].score++; n++; cur_sys(); cout<<"请继续,按0结束"<<endl; } else if(vote==0)break; else { cur_sys(); cout<<"请继续,按0结束"<<endl; continue; } } cout<<"投票成功!"<<endl; } int main() { char a; player *p=NULL; ope dol; msgbox(); cout<<"未初始化无法操作\n请输入总人数:"; while(cin>>number) { if(number>0) break; else cout<<"输入错误,重新输入"<<endl; } p=(player *)malloc(sizeof(player)*number); dol.init(p,number); system("pause"); cur_sys(); cout<<"输入操作\n-"; while(cin>>a) { switch(a) { case 'A':dol.outcome(p,number);cur_sys2();cout<<"输入操作\n-";break; case 'S':dol.voting(p,number);cur_sys2();cout<<"输入操作\n-";break; case 'Y':dol.voting(p,number);cur_sys2();cout<<"输入操作\n-";break; case 'R':dol.sort_outcome(p,number);cur_sys2();cout<<"输入操作\n:";break; case 'E':exit(0);break; default: continue; } } cout<<"谢谢使用!!!"; } |
打电话给邹海,明令要求不可以用C++。。。。。
OK!!!