CCCPaste

Prototip ProfClasa

#include <iostream>
#include <map>
#include <vector>
#include <cstring>
#include <algorithm>
#include <set>
using namespace std;
map<string,vector<pair<string,string>>> prof, clase;
// Multumiri lui GPT pentru tabloul de clase
set<string> claseList = {
// Grade 9
"9A", "9B", "9C", "9D", "9E", "9F", "9G", "9H",
// Grade 10
"10A", "10B", "10C", "10D", "10E", "10F", "10G", "10H",
// Grade 11
"11A", "11B", "11C", "11D", "11E", "11F", "11G", "11H",
// Grade 12
"12A", "12B", "12C", "12D", "12E", "12F", "12G", "12H"
};
set<string> profList;
string getType(string s)
{
bool hasLit = false, hasNumber = false;
for(char c : s)
{
if(isdigit(c))
hasNumber = true;
else hasLit = true;
}
if(hasLit && hasNumber) return "clasa";
if(hasLit) return "profesor";
return "nrOre";
}
int main()
{
cout << "Introdu numele profesorilor. Cand ai terminat scrie 'DONE'\n\n";

string s = "";
while(s != "DONE")
{
cin >> s;
if(s != "")
profList.insert(s);
}
cout << "\nIntrodu profesorii, clasele la care sunt si nr de ore pe saptamana\n";
cout << "Ex : Catalin_Barbu 9G 3 (nu conteaza ordinea)\n\n";
cout << "Pentru a opri citirea scrie 'DONE'\n\n";
string info[3];
bool getOut = false;
while(true)
{
for(int i = 0;i<3;i++)
{
cin >> info[i];
if(info[i] == "DONE")
{
getOut = true;
break;
}
}
if(getOut) break;

string p = "", cls = "", ore = "";
for(int i = 0;i<3;i++)
{
if(getType(info[i]) == "nrOre")
ore = info[i];
if(getType(info[i]) == "profesor")
p = info[i];
if(getType(info[i]) == "clasa")
cls = info[i];
}
bool isValid = true;
if(profList.find(p) == profList.end() || claseList.find(cls) == claseList.end())
isValid = false;
if(s == "" || cls == "" || ore == "" || !isValid)
{
cout << "Invalid input : ";
for(int i = 0;i<3;i++)
cout << info[i] << ' ';
cout << "\n\n";
continue;
}
prof[p].push_back({cls,ore});
clase[cls].push_back({p,ore});
cout << '\n';

}
cout << "\nOUTPUT : \n\n";
cout << "Profesori : \n";
for(auto it : prof)
{
if(it.second.empty())
continue;
cout << it.first << '\n';
for(auto cls : it.second)
cout << cls.first << ' ' << cls.second << '\n';
cout << '\n' << '\n';
}
cout << "\nClase:\n";
for(auto it : clase)
{
if(it.second.empty()) continue;
cout << "Clasa " << it.first << '\n';
for(auto p : it.second)
cout << p.first << ' ' << p.second << '\n';
cout << '\n' << '\n';
}
return 0;
}