c++演讲比赛案例

 

 分为一个头文件类与方法.hpp和一个子文件test.cpp

类与方法.hpp

#include<iostream>
#include<vector>
#include<random>
#include<fstream>
using namespace std;
//定义类
class Person
{
public:string name;
	  int id;
	  vector<double>vTarget;
	  double sore;
	  Person()
	  {

	  }
	  Person(string name, int id)
	  {
		  this->id = id;
		  this->name = name;
	  }
	 
};
class printf01
{
public:
	void  operator()(const Person& val)
	{
		cout << "选手编号 :" << val.id << "选手姓名 :" << val.name << endl;
	}
};
//排序中的两个参数方法
bool geater1(double d1, double d2)
{
	return d1 > d2;
}
bool geater(Person p1, Person p2)
{
	return p1.sore > p2.sore;
}
//第一轮演讲
void getsore(Person& p1);
//决赛演讲
void getsore2(Person& p1);
//查看往届比赛获奖记录
void check();
//清空全部原始文件
void clean();
//菜单
void menu();

test.cpp:

#pragma once
#include"类与方法.hpp"

using namespace std;






void getsore(Person &p1)
{
	double svg;
	double count = 0;
		p1.vTarget.resize(40);
	for (int i = 0;i < 10;i++)
	{
		double rand1 = static_cast <double> (rand()) / (static_cast <double > (RAND_MAX / 40))+60;

		p1.vTarget[i] = rand1;
		
	}
	sort(p1.vTarget.begin(), p1.vTarget.end(),geater1);
	for (int i = 0;i < 10;i++)
	{
		if (i != 0 && i != 9)
		{
			count += p1.vTarget[i];
		}
	}
	 svg = count / 8;
	 p1.sore = svg;

}
void getsore2(Person&p1)
{

	double svg;
	double count = 0;
	p1.vTarget.resize(40);
	for (int i = 0;i < 10;i++)
	{
		double rand1 = static_cast <double> (rand()) / (static_cast <double> (RAND_MAX / 40)) + 60;

		p1.vTarget[i] = rand1;
	}
	sort(p1.vTarget.begin(), p1.vTarget.end(),geater1);
	for (int i = 0;i < 10;i++)
	{
		if (i != 0 && i != 9)
		{
			count += p1.vTarget[i];
		}
	}
	svg = count / 8;
	p1.sore = svg;
}
void test()
{
	
	Person p1("A", 10001);
	Person p2("B", 10002);
	Person p3("C", 10003);
	Person p4("D", 10004);
	Person p5("E", 10005);
	Person p6("F", 10006);
	Person p7("G", 10007);
	Person p8("H", 10008);
	Person p9("I", 10009);
	Person p10("J", 10010);
	Person p11("K", 10011);
	Person p12("L", 10012);
	vector<Person>v1;
	v1.push_back(p1);
	v1.push_back(p2);
	v1.push_back(p3);
	v1.push_back(p4);
	v1.push_back(p5);
	v1.push_back(p6);
	v1.push_back(p7);
	v1.push_back(p8);
	v1.push_back(p9);
	v1.push_back(p10);
	v1.push_back(p11);
	v1.push_back(p12);
	random_shuffle(v1.begin(), v1.end());
	vector<Person>v2;
	v2.resize(v1.size() / 2);
	
	vector<Person>v3;
	v3.resize(v1.size() / 2);
	vector<Person>::iterator it = v1.begin();
	for (int i = 0;i < 6;i++)
	{
		it++;
	}
	copy(v1.begin(), it, v2.begin());
	copy(it, v1.end(), v3.begin());
	cout << "演讲比赛第一组" << endl;
	for_each(v2.begin(), v2.end(), printf01());
	cout << "演讲比赛第二组" << endl;
	for_each(v3.begin(), v3.end(), printf01());
	for (vector<Person>::iterator it = v2.begin();it != v2.end();it++)
	{
		getsore(*it);
		
	}
	for (vector<Person>::iterator it = v3.begin();it != v3.end();it++)
	{
		getsore(*it);
	}
	system("pause");
	cout << endl;
	cout << "第一轮比赛结束,各组成员成绩如下" << endl;;
	cout << endl;
	cout << "第一组" << endl;
	sort(v2.begin(), v2.end(), geater);
	sort(v3.begin(), v3.end(), geater);
	for (vector<Person>::iterator it = v2.begin();it != v2.end();it++)
	{
		cout << "第一组成员编号为"<<it->id<<"的" << it->name << "成绩为" << it->sore << endl;
	}
	cout << "第二组" << endl;
	for (vector<Person>::iterator it = v3.begin();it != v3.end();it++)
	{
	cout << "第二组成员编号为" << it->id << "的" << it->name << "成绩为" << it->sore << endl;
	}
	vector<Person>vTarget;
	system("pause");
	for (int i = 0;i < 3;i++)
	{
		vTarget.push_back(v2[i]);
	}for (int i = 0;i < 3;i++)
	{
		vTarget.push_back(v3[i]);
	}
	cout << endl;
	cout << "决赛参赛者以及参赛者的上一轮成绩如下" << endl;
	cout << endl;
	for (vector<Person>::iterator it = vTarget.begin();it != vTarget.end();it++)
	{
		cout << "决赛成员编号为" << it->id << "的" << it->name << "成绩为" << it->sore << endl;
	}
	for (vector<Person>::iterator it = vTarget.begin();it != vTarget.end();it++)
	{
		getsore2(*it);
	}
	system("pause");
	cout << endl;
	cout << "决赛开始" << endl;
	cout << endl;
	sort(vTarget.begin(), vTarget.end(), geater);
	
	for (int i = 0;i < 3;i++)
	{
		cout << "胜出成员编号为" <<vTarget[i].id << "的" << vTarget[i].name << "成绩为" << vTarget[i].sore << endl;
		ofstream ofs;
		ofs.open("text.csv", ios::app);
		ofs << vTarget[i].id << "  "
			<< vTarget[i].sore << "  ";
		ofs.close();
	}
	
}
void check()
{
	ifstream ifs;
	ifs.open("text.csv",ios::in);
	int id;
	double sore;
	for (int i = 0;i < 3;i++)
	{
		if (ifs >> id && ifs >> sore)
		{
			if (i == 0)
			{
				cout << "冠军编号:" << id << " " << "得分:" << sore << endl;
			}
			if (i == 1)
			{
				cout << "亚军编号:" << id << " " << "得分:" << sore << endl;
			}
			if (i == 2)
			{
				cout << "季军编号:" << id << " " << "得分:" << sore << endl;
			}
		}
	}
	ifs.close();
}
void clean()
{
	cout << "确认清空  1,确认,2取消" << endl;
	int flag;
	cin >> flag;
	if (flag == 1)
	{
		
		ofstream ofs("text.csv", ios::trunc);
	
		ofs.close();
		
	}
	else {
		return;
	}
}
void menu()
{
	int flag = 1;
	while (flag)
	{
		cout << "**************************************************************" << endl;
		cout << "*********************欢迎参加演讲比赛*************************" << endl;
		cout << "***********************1 开始演讲比赛*************************" << endl;
		cout << "***********************2 查看往届记录*************************" << endl;
		cout << "***********************3 清空比赛记录*************************" << endl;
		cout << "***********************0 退出演讲比赛*************************" << endl;
		cout << "**************************************************************" << endl;
		cout << "请选择";
		cin >> flag;
		switch (flag)
		{
		case 1:
			test();
			break;
		case 2:
			check();
			break;
		case 3:
			clean();
			break;
		default:
			break;
		}
	}
}
int main()
{
	
	srand((unsigned)time(0));
	menu();
}

接下来对各部分分块

1.创建类(创建演讲者类和打印方法类)

class Person
{
public:string name;
	  int id;
	  vector<double>vTarget;
	  double sore;
	  Person()
	  {

	  }
	  Person(string name, int id)
	  {
		  this->id = id;
		  this->name = name;
	  }
	 
};
class printf01
{
public:
	void  operator()(const Person& val)
	{
		cout << "选手编号 :" << val.id << "选手姓名 :" << val.name << endl;
	}
};

2.两个布尔返回方法(用于对sort方法中的参数)

bool geater1(double d1, double d2)
{
	return d1 > d2;
}
bool geater(Person p1, Person p2)
{
	return p1.sore > p2.sore;
}

3.第一轮演讲比赛过程

void getsore(Person &p1)
{
	double svg;
	double count = 0;
		p1.vTarget.resize(40);
	for (int i = 0;i < 10;i++)
	{
		double rand1 = static_cast <double> (rand()) / (static_cast <double > (RAND_MAX / 40))+60;//生成60-100的随机浮点数

		p1.vTarget[i] = rand1;
		
	}
	sort(p1.vTarget.begin(), p1.vTarget.end(),geater1);
	for (int i = 0;i < 10;i++)
	{
		if (i != 0 && i != 9)//除去分数最高的和最低的
		{
			count += p1.vTarget[i];
		}
	}
	 svg = count / 8;
	 p1.sore = svg;

}

4.演讲比赛总决赛过程(与第一次相差不大)

void getsore2(Person&p1)
{

	double svg;
	double count = 0;
	p1.vTarget.resize(40);
	for (int i = 0;i < 10;i++)
	{
		double rand1 = static_cast <double> (rand()) / (static_cast <double> (RAND_MAX / 40)) + 60;

		p1.vTarget[i] = rand1;
	}
	sort(p1.vTarget.begin(), p1.vTarget.end(),geater1);
	for (int i = 0;i < 10;i++)
	{
		if (i != 0 && i != 9)
		{
			count += p1.vTarget[i];
		}
	}
	svg = count / 8;
	p1.sore = svg;
}

5查询往届获奖记录

void check()
{
	ifstream ifs;
	ifs.open("text.csv",ios::in);
	int id;
	double sore;
	for (int i = 0;i < 3;i++)
	{
		if (ifs >> id && ifs >> sore)
		{
			if (i == 0)
			{
				cout << "冠军编号:" << id << " " << "得分:" << sore << endl;
			}
			if (i == 1)
			{
				cout << "亚军编号:" << id << " " << "得分:" << sore << endl;
			}
			if (i == 2)
			{
				cout << "季军编号:" << id << " " << "得分:" << sore << endl;
			}
		}
	}
	ifs.close();
}

6.清除全部文件内容

void clean()
{
	cout << "确认清空  1,确认,2取消" << endl;
	int flag;
	cin >> flag;
	if (flag == 1)
	{
		
		ofstream ofs("text.csv", ios::trunc);
	
		ofs.close();
		
	}
	else {
		return;
	}
}

7.菜单栏

void menu()
{
	int flag = 1;
	while (flag)
	{
		cout << "**************************************************************" << endl;
		cout << "*********************欢迎参加演讲比赛*************************" << endl;
		cout << "***********************1 开始演讲比赛*************************" << endl;
		cout << "***********************2 查看往届记录*************************" << endl;
		cout << "***********************3 清空比赛记录*************************" << endl;
		cout << "***********************0 退出演讲比赛*************************" << endl;
		cout << "**************************************************************" << endl;
		cout << "请选择";
		cin >> flag;
		switch (flag)
		{
		case 1:
			test();
			break;
		case 2:
			check();
			break;
		case 3:
			clean();
			break;
		default:
			break;
		}
	}
}

8.测试栏

void test()
{
	//创建12位参赛选手
	Person p1("A", 10001);
	Person p2("B", 10002);
	Person p3("C", 10003);
	Person p4("D", 10004);
	Person p5("E", 10005);
	Person p6("F", 10006);
	Person p7("G", 10007);
	Person p8("H", 10008);
	Person p9("I", 10009);
	Person p10("J", 10010);
	Person p11("K", 10011);
	Person p12("L", 10012);
	vector<Person>v1;//分别插入容器中
	v1.push_back(p1);
	v1.push_back(p2);
	v1.push_back(p3);
	v1.push_back(p4);
	v1.push_back(p5);
	v1.push_back(p6);
	v1.push_back(p7);
	v1.push_back(p8);
	v1.push_back(p9);
	v1.push_back(p10);
	v1.push_back(p11);
	v1.push_back(p12);
	random_shuffle(v1.begin(), v1.end());//打乱容器顺序
	vector<Person>v2;
	v2.resize(v1.size() / 2);
	//分为v1和v2两个容器为两个小组
	vector<Person>v3;
	v3.resize(v1.size() / 2);
	vector<Person>::iterator it = v1.begin();
	for (int i = 0;i < 6;i++)
	{
		it++;
	}
	copy(v1.begin(), it, v2.begin());//1-6成员进入v2
	copy(it, v1.end(), v3.begin());//7-12进入v3
	cout << "演讲比赛第一组" << endl;
	for_each(v2.begin(), v2.end(), printf01());
	cout << "演讲比赛第二组" << endl;
	for_each(v3.begin(), v3.end(), printf01());
	for (vector<Person>::iterator it = v2.begin();it != v2.end();it++)
	{
		getsore(*it);//将v2六位成员放入第一轮比赛中
		
	}
	for (vector<Person>::iterator it = v3.begin();it != v3.end();it++)
	{
		getsore(*it);//将v3六位成员放入第一轮比赛中

	}
	system("pause");
	cout << endl;
	cout << "第一轮比赛结束,各组成员成绩如下" << endl;;
	cout << endl;
	cout << "第一组" << endl;
	sort(v2.begin(), v2.end(), geater);
	sort(v3.begin(), v3.end(), geater);
	for (vector<Person>::iterator it = v2.begin();it != v2.end();it++)
	{
		cout << "第一组成员编号为"<<it->id<<"的" << it->name << "成绩为" << it->sore << endl;
	}
	cout << "第二组" << endl;
	for (vector<Person>::iterator it = v3.begin();it != v3.end();it++)
	{
	cout << "第二组成员编号为" << it->id << "的" << it->name << "成绩为" << it->sore << endl;
	}
	vector<Person>vTarget;//创建新容器接受v1和v2容器中的前三名
	system("pause");
	for (int i = 0;i < 3;i++)
	{
		vTarget.push_back(v2[i]);
	}for (int i = 0;i < 3;i++)
	{
		vTarget.push_back(v3[i]);
	}
	cout << endl;
	cout << "决赛参赛者以及参赛者的上一轮成绩如下" << endl;
	cout << endl;
	for (vector<Person>::iterator it = vTarget.begin();it != vTarget.end();it++)
	{
		cout << "决赛成员编号为" << it->id << "的" << it->name << "成绩为" << it->sore << endl;
	}
	for (vector<Person>::iterator it = vTarget.begin();it != vTarget.end();it++)
	{
		getsore2(*it);//将新容器的六名成员放入总决赛中
	}
	system("pause");
	cout << endl;
	cout << "决赛开始" << endl;
	cout << endl;
	sort(vTarget.begin(), vTarget.end(), geater);
	
	for (int i = 0;i < 3;i++)
	{
		cout << "胜出成员编号为" <<vTarget[i].id << "的" << vTarget[i].name << "成绩为" << vTarget[i].sore << endl;
		ofstream ofs;
		ofs.open("text.csv", ios::app);//获奖的前三名写入文件中
		ofs << vTarget[i].id << "  "
			<< vTarget[i].sore << "  ";
		ofs.close();
	}
	
}

9.主函数

int main()
{
	
	srand((unsigned)time(0));
	menu();
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值