Source Code of A6
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Place
{
protected:
string name;
int canditateNumber;
vector<string> candidateName;
public:
Place(string name)
{
canditateNumber = 2;
this->name = name;
this->candidateName.push_back("Obama");
this->candidateName.push_back("Romney");
}
string returnName(){return name;}
vector<string> returnCandidateName(){return candidateName;}
virtual string returnLevel()=0;
virtual vector<int> returnVoteSum()=0;
virtual void addSubplace(Place* p) = 0;
};
class Local:public Place{
public:
Local(string name, vector<int> VoteSum);
string returnLevel(){return "Local";}
vector<int> returnVoteSum(){return VoteSum;}
void addSubplace(Place* p){}
private:
vector<int> VoteSum;
};
Local::Local(string name, vector<int> VoteSum):Place(name)
{
this->VoteSum =VoteSum;
}
class State:public Place{
public:
State(string name):Place(name){}
string returnLevel(){return "State";}
vector<int> returnVoteSum();
void addSubplace(Place* p){subPlaces.push_back(p);}
private:
vector<Place*> subPlaces;
};
vector<int> State::returnVoteSum()
{
vector<int> result(canditateNumber, 0);
for(int i = 0; i < this->subPlaces.size(); i++)
{
vector<int> lowerResult = this->subPlaces[i]->returnVoteSum();
for(int idx = 0; idx < canditateNumber; idx++)
{
result[idx] += lowerResult[idx];
}
}
return result;
}
class Nation:public Place{
public:
Nation(string name):Place(name){}
string returnLevel(){return "Nation";}
vector<int> returnVoteSum();
void addSubplace(Place* p){subPlaces.push_back(p);}
private:
vector<Place*> subPlaces;
};
vector<int> Nation::returnVoteSum()
{
vector<int> result(canditateNumber, 0);
for(int i = 0; i < this->subPlaces.size(); i++)
{
vector<int> lowerResult = this->subPlaces[i]->returnVoteSum();
for(int idx = 0; idx < canditateNumber; idx++)
{
result[idx] += lowerResult[idx];
}
}
return result;
}
class createPlace{
public:
static Place* createNation(string name)
{
return new Nation(name);
}
static Place* createState(string name)
{
return new State(name);
}
static Place* createLocal(string name, vector<int> VoteSum)
{
return new Local(name, VoteSum);
}
};
int main(int argc, const char * argv[])
{
Place *local1;
vector<int> OCVote;
int OCPopulation;
int CarrboroPopulation;
int SuffolkPopulation;
cout<<"Input OCPopulation"<<endl;
cin>>OCPopulation;
cout<<"Input Carrboro Population"<<endl;
cin>>CarrboroPopulation;
cout<<"Input Suffolk Population"<<endl;
cin>>SuffolkPopulation;
int candidateo= rand()% OCPopulation;
int candidateoo= OCPopulation-candidateo;
OCVote.push_back(candidateo);
OCVote.push_back(candidateoo);
local1 = createPlace::createLocal("Orange County", OCVote);
Place *local2;
vector<int> CarrboroVote;
int candidate1= rand()% CarrboroPopulation;
int candidate2= CarrboroPopulation-candidate1;
CarrboroVote.push_back(candidate1);
CarrboroVote.push_back(candidate2);
local2 = createPlace::createLocal("Carrboro", CarrboroVote);
Place *local3;
vector<int> SuffolkVote;
int candidate11= rand()% SuffolkPopulation;
int candidate22= SuffolkPopulation-candidate1;
SuffolkVote.push_back(candidate11);
SuffolkVote.push_back(candidate22);
local3 = createPlace::createLocal("Suffolk County", SuffolkVote);
Place *state1;
state1 = createPlace::createState("North Carolina");
state1->addSubplace(local1);
state1->addSubplace(local2);
Place *state2;
state2 = createPlace::createState("Massachusetts");
state2->addSubplace(local3);
Place *nation;
nation = createPlace::createNation("USA");
nation->addSubplace(state1);
nation->addSubplace(state2);
vector<string> candidateName = nation->returnCandidateName();
for (int i = 0; i < candidateName.size(); ++i) {
cout << candidateName[i] << endl;
}
vector<int> voteNumber = nation->returnVoteSum();
for (int i = 0; i < voteNumber.size(); ++i) {
cout << voteNumber[i] << endl;
}
cout << "succeed!" << endl;
}