分为一个头文件类与方法.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();
}