Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<cstring>
- using namespace std;
- class Exception
- {
- protected:
- char *msg;
- public:
- Exception(char* msg="")
- {
- this->msg=new char[strlen(msg)];
- strcpy(this->msg,msg);
- }
- virtual void message()
- {
- cout<<msg<<endl;
- }
- };
- class InvalidPassword:public Exception
- {
- public:
- InvalidPassword(char* msg=""):Exception(msg){}
- } ;
- class InvalidEmail:public Exception
- {
- public:
- InvalidEmail(char* msg=""):Exception(msg){}
- };
- class MaximumSizeLimit:public Exception
- {
- protected:
- int maxii;
- public:
- MaximumSizeLimit(char* msg="",int maxii=0)
- {
- this->maxii=maxii;
- }
- void message()
- {
- cout<<"You can't add more than "<<maxii<<" users"<<endl;
- }
- };
- class User
- {
- protected:
- char username[50];
- char password[50];
- char email[50];
- public:
- virtual double popularity()=0;
- User(char* username="",char* password="",char* email="")
- {
- bool upper=false;
- bool lower=false;
- bool digit=false;
- for(int i=0;i<strlen(password);i++)
- {
- if(isupper(password[i]))
- upper=true;
- if(islower(password[i]))
- lower=true;
- if(isdigit(password[i]))
- digit=true;
- }
- if(!upper || !lower || !digit)
- throw InvalidPassword("Password is too weak");
- int counter=0;
- for(int i=0;i<strlen(email);i++)
- {
- if(email[i]=='@')
- counter++;
- }
- if(counter!=1)
- throw InvalidEmail("Mail is not valid");
- strcpy(this->username,username);
- strcpy(this->password,password);
- strcpy(this->email,email);
- }
- };
- class FacebookUser:public User
- {
- protected:
- int friends;
- int likes;
- int comments;
- static double like;
- static double comment;
- public:
- FacebookUser(char* username="",char* password="",char* email="",int friends=0,int likes=0,int comments=0):User(username,password,email)
- {
- this->friends=friends;
- this->likes=likes;
- this->comments=comments;
- }
- double popularity()
- {
- return friends+comments*comment+likes*like;
- }
- };
- class TwitterUser:public User
- {
- protected:
- int followers;
- int tweets;
- static double tweet;
- public:
- TwitterUser(char* username="",char* password="",char* email="",int followers=0,int tweets=0):User(username,password,email)
- {
- this->followers=followers;
- this->tweets=tweets;
- }
- double popularity()
- {
- return followers+tweets*tweet;
- }
- };
- class SocialNetwork
- {
- protected:
- User **users;
- int counter;
- static int maxi;
- public:
- SocialNetwork()
- {
- counter=0;
- users=new User*[counter];
- }
- SocialNetwork& operator+=(User *u)
- {
- if(counter + 1 > maxi)
- throw MaximumSizeLimit(maxi);
- User **temp = new User*[counter+1];
- for(int i = 0; i < counter; i++)
- temp[i] = users[i];
- delete []users;
- users = temp;
- users[counter++] = u;
- return *this;
- }
- float avgPopularity()
- {
- int suma=0;
- for(int i=0;i<counter;i++)
- {
- suma+=users[i]->popularity();
- }
- return suma/counter;
- }
- static void changeMaximumSize(int number)
- {
- maxi=number;
- }
- ~SocialNetwork()
- {
- for(int i=0;i<counter;i++)
- delete users[i];
- delete[]users;
- }
- };
- double FacebookUser::like=0.1;
- double FacebookUser::comment=0.5;
- double TwitterUser::tweet=0.5;
- int SocialNetwork::maxi=5;
- int main() {
- SocialNetwork network = SocialNetwork();
- int n;
- cin >> n;
- char username[50];
- char password[50];
- char email[50];
- int userType;
- for (int i=0; i < n; ++i) {
- cin >> username;
- cin >> password;
- cin >> email;
- cin >> userType;
- if (userType == 1) {
- int friends;
- int likes;
- int comments;
- cin >> friends >> likes >> comments;
- // TODO: Try-catch
- try
- {
- User * u = new FacebookUser(username,password,email,friends,likes,comments);
- network += u;
- }
- catch(InvalidPassword &i)
- {
- i.message();
- }
- catch(InvalidEmail &e)
- {
- e.message();
- }
- catch(MaximumSizeLimit &m)
- {
- m.message();
- }
- }
- else {
- int followers;
- int tweets;
- cin >> followers >> tweets;
- // TODO: Try-catch
- try
- {
- User * u= new TwitterUser(username,password,email,followers,tweets);
- network += u;
- }
- catch(InvalidPassword &i)
- {
- i.message();
- }
- catch(InvalidEmail &e)
- {
- e.message();
- }
- catch(MaximumSizeLimit &m)
- {
- m.message();
- }
- }
- }
- network.changeMaximumSize(6);
- cin >> username;
- cin >> password;
- cin >> email;
- int followers;
- int tweets;
- cin >> followers >> tweets;
- // TODO: Try-catch
- try
- {
- User * u= new TwitterUser(username,password,email,followers,tweets);
- network += u;
- }
- catch(InvalidPassword &i)
- {
- i.message();
- }
- catch(InvalidEmail &e)
- {
- e.message();
- }
- catch(MaximumSizeLimit &m)
- {
- m.message();
- }
- cout << network.avgPopularity();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement