#include<iostream>
#include<string>
#include<vector>
#include<iterator>
#include<memory>
#include<sstream>
#include<Windows.h>
using namespace std;
enum class spType {ALL, SP, TH};
class Policlinic
{
public:
Policlinic();
~Policlinic();
// ...
void addSpecialists(const string& s);
void addTherapists(const string& s);
void printPersonnel(spType = spType::ALL);
// ...
// Геттеры Сеттеры сам по шаблону
// ...
private:
struct Personnel;
unique_ptr<Personnel> m_personnel;
string desk;
string type;
unsigned pharmacy = 0;
friend istream& operator>>(istream& is, vector<string>& values);
friend ostream& operator<<(ostream& os, const vector<string>& values);
};
struct Policlinic::Personnel
{
vector<string> specialists;
vector<string> therapists;
};
Policlinic::Policlinic() : m_personnel(make_unique<Personnel>())
{
}
Policlinic::~Policlinic()
{
}
istream& operator>>(istream& is, vector<string>& values)
{
copy(istream_iterator<string>{is}, {}, back_inserter(values));
return is;
}
ostream& operator<<(ostream& os, const vector<string>& values)
{
copy(values.begin(), values.end(), ostream_iterator<string>{os, "\n"});
return os;
}
void Policlinic::addSpecialists(const string& s)
{
istringstream is(s);
is >> m_personnel->specialists;
}
void Policlinic::addTherapists(const string& s)
{
istringstream is(s);
is >> m_personnel->therapists;
}
void Policlinic::printPersonnel(spType stype)
{
switch(stype)
{
case spType::SP:
cout << "Специалисты:\n"
<< m_personnel->specialists;
break;
case spType::TH:
cout << "Терапевты:\n"
<< m_personnel->therapists;
break;
default:
cout << "[Весь персонал]\n";
printPersonnel(spType::SP);
printPersonnel(spType::TH);
break;
}
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "ru");
Policlinic ply;
// Для простоты
string value;
cout << "Введите врачей специалистов через пробел \n$: ";
getline(cin, value);
ply.addSpecialists(value);
cout << "\nВведите врачей терапевтов через пробел\n$: ";
getline(cin, value);
ply.addTherapists(value);
ply.printPersonnel(spType::ALL);
system("pause");
}