Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <utility>
- #include <vector>
- #include <memory>
- #include <map>
- #include <list>
- using namespace std;
- class Student{
- const string& name;
- const string& personalInfo;
- map<string,int> gradelist;
- public:
- Student(const string &name, const string &personalInfo, map<string, int> gradelist)
- : name(name), personalInfo(personalInfo), gradelist(std::move((gradelist))) {};
- void bestgrade(){
- int max=0;
- string temp;
- for(auto i=gradelist.begin();i!=gradelist.end();i++)
- if(i->second>=max)
- max = i->second;
- for(const auto& item:gradelist)
- if(item.second == max)
- cout<<"student has best grade in "<<item.first<<" "<<item.second<<endl;
- };
- void worstgrade(){
- int min=10;
- string temp;
- for(auto i=gradelist.begin();i!=gradelist.end();i++)
- if(i->second<=min)
- min = i->second;
- for(const auto& item:gradelist)
- if(item.second == min)
- cout<<"student has worst grade in "<<item.first<<" "<<item.second<<endl;
- }
- virtual int averageGrade(){
- int total=0;
- int gradenr=0;
- for(auto i=gradelist.begin();i!=gradelist.end();i++)
- {
- total+=i->second;
- gradenr++;
- }
- total=total/gradenr;
- return total;
- }
- string getname()const {return name;}
- };
- class HardwareStudent:public Student{
- const string& fieldofwork;
- map<string,int> hardwareCourses;
- public:
- HardwareStudent(const string &name, const string &personalInfo, const map<string,int> gradeList, const string &fieldofwork,const map<string,int> hardwareCourses):
- Student(name, personalInfo, gradeList),fieldofwork(fieldofwork),hardwareCourses(move(hardwareCourses)){};
- int averageGrade(){
- int total=0;
- int gradenr=0;
- int normalcoursegrade=Student::averageGrade();
- for (auto i=hardwareCourses.begin();i!=hardwareCourses.end();i++)
- {
- total+=i->second;
- gradenr++;
- }
- total=total/gradenr;
- total+=normalcoursegrade;
- total/=2;
- return total;
- }
- };
- class SoftwareStudent:public Student{
- map<string,int> softwareCourses;
- list<string> languages;
- public:
- SoftwareStudent(const string &name, const string &personalInfo, const map<string,int> &gradeList, const map<string,int> softwareCourses,const list<string> languages):
- Student(name, personalInfo, gradeList),softwareCourses(move(softwareCourses)),languages(move(languages)){};
- int averageGrade(){
- int total=0;
- int gradenr=0;
- int normalcoursegrade=Student::averageGrade();
- for (auto i=softwareCourses.begin();i!=softwareCourses.end();i++)
- {
- total+=i->second;
- gradenr++;
- }
- total=total/gradenr;
- total+=normalcoursegrade;
- total/=2;
- return total;
- }
- };
- int main(){
- auto *FirstStudent=new Student("Angela","romanian",{{"english",3},{"french",6}});
- Student s("Baloo","turkish",{{"german",4}});
- cout<<FirstStudent->averageGrade()<<endl;
- FirstStudent->worstgrade();
- FirstStudent->bestgrade();
- auto *FirstHardware=new HardwareStudent("Darius","romanian",{{"english",7},{"physics",5}},"electric",{{"engineering fundamentals",10}});
- cout<<FirstHardware->averageGrade()<<endl;
- auto *FirstSoftware=new SoftwareStudent("Marius","turkish",{{"turkish",5},{"german",9}},{{"OOP",8},{"ASD",7},{"HTML",3}},{"C++","C","Java"});
- cout<<FirstSoftware->averageGrade()<<endl;
- const string fieldofwork="electrician";
- map<string,int> hardwareCourses={{"FIE",4}};
- const string name="Pavel";
- const string personalInfo="romanian";
- map<string,int> gradelist{{"FIEtc",7},{"SDA",6}};
- map<string,int> softwareCourses{{"OOP",8},{"ASD",7},{"HTML",3}};
- list<string> languages{"C++","C","Java"};
- list<unique_ptr<HardwareStudent>> hardwarelist;
- list<unique_ptr<SoftwareStudent>> softwarelist;
- hardwarelist.push_back(make_unique<HardwareStudent>(name,personalInfo,gradelist,fieldofwork,hardwareCourses));
- hardwarelist.push_back(make_unique<HardwareStudent>(name,personalInfo,gradelist,fieldofwork,hardwareCourses));
- hardwarelist.push_back(make_unique<HardwareStudent>(name,personalInfo,gradelist,fieldofwork,hardwareCourses));
- hardwarelist.push_back(make_unique<HardwareStudent>(name,personalInfo,gradelist,fieldofwork,hardwareCourses));
- softwarelist.push_back(make_unique<SoftwareStudent>(name,personalInfo,gradelist,softwareCourses,languages));
- softwarelist.push_back(make_unique<SoftwareStudent>(name,personalInfo,gradelist,softwareCourses,languages));
- softwarelist.push_back(make_unique<SoftwareStudent>(name,personalInfo,gradelist,softwareCourses,languages));
- softwarelist.push_back(make_unique<SoftwareStudent>(name,personalInfo,gradelist,softwareCourses,languages));
- softwarelist.push_back(make_unique<SoftwareStudent>(name,personalInfo,gradelist,softwareCourses,languages));
- for(auto &instance : hardwarelist){
- cout<<instance->averageGrade()<<endl;
- }
- for(auto &instance : softwarelist){
- cout<<instance->averageGrade()<<endl;
- }
- int maxgrade=0;
- string temp;
- for(auto &i:hardwarelist){
- if(i->averageGrade()>maxgrade) {
- maxgrade = i->averageGrade();
- temp = i->getname();
- }
- }
- for(auto &i:hardwarelist){
- if(i->averageGrade()==maxgrade) {
- cout<<i->getname()<<" "<<maxgrade<<endl;
- }
- }
- for(auto &i:softwarelist){
- if(i->averageGrade()>maxgrade) {
- maxgrade = i->averageGrade();
- temp = i->getname();
- }
- }
- for(auto &i:softwarelist){
- if(i->averageGrade()==maxgrade) {
- cout<<i->getname()<<" "<<maxgrade<<endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement