目录
1、问题定义
为省赛现场设计一个决赛叫号系统。所有参赛队按赛事组织文件中的赛事类别分到9个决赛室,决赛室按顺序叫号,被叫号参赛队进场,比赛结束后,下一参赛队才能进赛场。请模拟决赛叫号系统,演示省赛现场各决赛室的参赛队进场情况。(模拟时,各参赛队进场比赛时间可设为0.5秒)
2、问题分析
任务要求实现的操作是将所有的参赛队伍按赛事类型分到九个决赛室,决赛室内按顺序叫号,模拟每个队伍进场情况。
在对参赛队按赛事类型分到九个决赛室时,先通过遍历所有队伍找出所有的赛事类型,然后自定义分成九种类型,并把每个类型对应的队伍放到对应的数组中,并为每个类型分配一个决赛室。
在决赛室内进行叫号时,九个决赛室是并发执行的,每个决赛室互不干扰。决赛室内每个队伍的答辩时间动态生成(一般在5~10分钟内答辩完成)。当一个队伍答辩完成后下一个队伍立即进场,因此需要动态演示出每个队伍进场的时间和次序。
针对这个项目,我还有以下构思:由于每个类型所包含的队伍数目不同,因此可能会出现有的决赛室很早就结束了,而有的决赛室却需要很晚,因此我们可以把九个决赛室作为被分配的对象,只要有决赛室空闲,就让一个队伍进去,这样每个决赛室的利用率都会大大的提高,从而解决决赛室空闲的问题,进一步优化程序。还可以设置中午休息系统,规定中午某段时间不进行比赛,使系统更加人性化和面向大众。
3、概要设计
叫号系统,显示每组参赛队进场情况
void Call() {
//存放所有的参赛类型
string type[35];
int j = 0;
while (j < 35) {
for (int i = j; i < Count; i++) {
int y1 = 1;
for (int k = 0; k < j; k++) { //查找type中已存放的类型中是否与该队伍的类型一样,如果一样则不存放进去
if (type[k] == teams[i].category)y1 = 0;
}
if (y1 == 1)type[j] = teams[i].category;
else continue;
}
j++;
}
//定义九个决赛室存放队伍的数组
Team t1[100], t2[100], t3[100], t4[100], t5[100], t6[100], t7[100], t8[100], t9[100];
//自定义九种类型,将队伍分成九组
for (int i = 0; i < 35; i++) {
int k = 0;
for (int j = 0; j < Count; j++) {
if (i < 3)
if (type[i] == teams[j].category) {
t1[k]=teams[j];
k++;
}
if (i>=3&&i<=6)
if (type[i] == teams[j].category) {
t2[k] = teams[j];
k++;
}
if (i>=7&&i<=10)
if (type[i] == teams[j].category) {
t3[k]=teams[j];
k++;
}
if (i>=11&&i<=14)
if (type[i] == teams[j].category) {
t4[k] = teams[j];
k++;
}
if (i>=15&&i<=18)
if (type[i] == teams[j].category)
{
t5[k] = teams[j];
k++;
}
if (i>=19&&i<=22)
if (type[i] == teams[j].category)
{
t6[k] = teams[j];
k++;
}
if (i>=23&&i<=26)
if (type[i] == teams[j].category)
{
t7[k] = teams[j];
k++;
}
if (i>=27&&i<=28)
if (type[i] == teams[j].category)
{
t8[k] = teams[j];
k++;
}
if (i>=29)
if (type[i] == teams[j].category)
{
t9[k] = teams[j];
k++;
}
}
}
//模拟决赛室内叫号系统
srand((unsigned int)time(NULL));
for (int i = 1; i <= 9; i++) {
int hour = 8;
int minute = 0;
switch (i % 10) {
case 1: {
cout << "第一个决赛室" << '\n';
int i = 0;
//判断队伍的参赛类型是否为空,如果不为空,说明还有队伍等待答辩
while(t1[i].category!="") {
t1[i].time = rand() % (10 - 5 + 1) + 5;
if (minute > 60) {
hour++;
minute -= 60;
}
cout << hour << ":" << minute << '\t' << t1[i].offering << '\n';
minute += t1[i].time;
i++;
}
break;
}
case 2: {
cout << "第二个决赛室" << '\n';
int i = 0;
while (t2[i].category != "") {
t2[i].time = rand() % (10 - 5 + 1) + 5;
if (minute > 60) {
hour++;
minute -= 60;
}
cout << hour << ":" << minute << '\t' << t2[i].offering << '\n';
minute += t2[i].time;
i++;
}
break;
}
case 3: {
cout << "第三个决赛室" << '\n';
int i = 0;
while (t3[i].category != "") {
t3[i].time = rand() % (10 - 5 + 1) + 5;
if (minute > 60) {
hour++;
minute -= 60;
}
cout << hour << ":" << minute << '\t' << t3[i].offering << '\n';
minute += t3[i].time;
i++;
}
break;
}
case 4: {
cout << "第四个决赛室" << '\n';
int i = 0;
while (t4[i].category != "") {
t4[i].time = rand() % (10 - 5 + 1) + 5;
if (minute > 60) {
hour++;
minute -= 60;
}
cout << hour << ":" << minute << '\t' << t4[i].offering << '\n';
minute += t4[i].time;
i++;
}
break;
}
case 5: {
cout << "第五个决赛室" << '\n';
int i = 0;
while (t5[i].category != "") {
t5[i].time = rand() % (10 - 5 + 1) + 5;
if (minute > 60) {
hour++;
minute -= 60;
}
cout << hour << ":" << minute << '\t' << t5[i].offering << '\n';
minute += t5[i].time;
i++;
}
break;
}
case 6: {
cout << "第六个决赛室" << '\n';
int i = 0;
while (t6[i].category != "") {
t6[i].time = rand() % (10 - 5 + 1) + 5;
if (minute > 60) {
hour++;
minute -= 60;
}
cout << hour << ":" << minute << '\t' << t6[i].offering << '\n';
minute += t6[i].time;
i++;
}
break;
}
case 7: {
cout << "第七个决赛室" << '\n';
int i = 0;
while (t7[i].category != "") {
t7[i].time = rand() % (10 - 5 + 1) + 5;
if (minute > 60) {
hour++;
minute -= 60;
}
cout << hour << ":" << minute << '\t' << t7[i].offering << '\n';
minute += t7[i].time;
i++;
}
break;
}
case 8: {
cout << "第八个决赛室" << '\n';
int i = 0;
while (t8[i].category != "") {
t8[i].time = rand() % (10 - 5 + 1) + 5;
if (minute > 60) {
hour++;
minute -= 60;
}
cout << hour << ":" << minute << '\t' << t8[i].offering << '\n';
minute += t8[i].time;
i++;
}
break;
}
case 9: {
cout << "第九个决赛室" << '\n';
int i = 0;
while (t9[i].category != "") {
t9[i].time = rand() % (10 - 5 + 1) + 5;
if (minute > 60) {
hour++;
minute -= 60;
}
cout << hour << ":" << minute << '\t' << t9[i].offering << '\n';
minute += t9[i].time;
i++;
}
break;
}
}
}
}