Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- #include <cctype>
- using namespace std;
- class InvalidEmail {
- private:
- char *msg;
- public:
- InvalidEmail() {}
- InvalidEmail(char *msg) {
- this->msg = new char[strlen(msg)+1];
- strcpy(this->msg,msg);
- }
- void message() {
- cout<<msg<<endl;
- }
- ~InvalidEmail(){}
- };
- class InvalidPassword {
- private:
- char *msg;
- public:
- InvalidPassword() {}
- InvalidPassword(char *msg) {
- this->msg = new char[strlen(msg)+1];
- strcpy(this->msg,msg);
- }
- void message() {
- cout<<msg<<endl;
- }
- ~InvalidPassword(){}
- };
- class MaximumSizeLimit {
- private:
- int max;
- public:
- MaximumSizeLimit() {}
- MaximumSizeLimit(int max) {
- this->max = max;
- }
- void message() {
- cout<<"You can't add more than "<<max<<" users."<<endl;
- }
- };
- class User {
- private:
- char username[50];
- char password[50];
- char email[50];
- public:
- User() {}
- User(char *username,char *password,char *email) {
- strcpy(this->username,username);
- if(!checkPass(password))
- throw InvalidPassword("Password is too weak.");
- strcpy(this->password,password);
- if(!checkMail(email))
- throw InvalidEmail("Mail is not valid.");
- strcpy(this->email,email);
- }
- virtual double popularity() = 0;
- bool checkPass(char *pass) {
- int brM=0,brG=0,brB=0;
- for(int i=0; i<strlen(pass); i++) {
- if(isalpha(pass[i])) {
- if(islower(pass[i]))
- brM++;
- else
- brG++;
- }
- if(isdigit(pass[i]))
- brB++;
- }
- if(brM >0&&brG>0&&brB>0)
- return 1;
- return 0;
- }
- bool checkMail(char *mail) {
- int brAt=0;
- for(int i=0; i<strlen(mail); i++) {
- if(mail[i]=='@')
- brAt++;
- }
- if(brAt==1)
- return 1;
- return 0;
- }
- virtual ~User() {}
- };
- class FacebookUser : public User {
- private:
- int friends;
- int likes;
- int comments;
- static float klike;
- const static float kcomment;
- public:
- FacebookUser() {}
- FacebookUser(char *username,char *password,char *email,int friends,int likes,int comments) : User(username,password,email) {
- this->friends = friends;
- this->likes = likes;
- this->comments = comments;
- }
- double popularity() {
- return friends + likes * FacebookUser::klike + comments * FacebookUser::kcomment;
- }
- static void setKLike(float k) {
- klike = k;
- }
- ~FacebookUser() {}
- };
- float FacebookUser::klike = 0.1;
- const float FacebookUser::kcomment = 0.5;
- class TwitterUser : public User {
- private:
- int followers;
- int tweets;
- static float ktweet;
- public:
- TwitterUser() {}
- TwitterUser(char *username,char *password,char *email,int followers,int tweets) : User(username,password,email) {
- this->followers = followers;
- this->tweets = tweets;
- }
- double popularity() {
- return followers + tweets* TwitterUser::ktweet;
- }
- static void setKTweet(float k) {
- ktweet = k;
- }
- ~TwitterUser() {}
- };
- float TwitterUser::ktweet = 0.5;
- class SocialNetwork {
- private:
- User **users;
- int n;
- static int maxUsers;
- public:
- SocialNetwork() {
- n=0;
- users = new User*[n];
- }
- SocialNetwork& operator +=(User *nov) {
- if(n==maxUsers)
- throw MaximumSizeLimit(n);
- User **temp = new User*[n+1];
- for(int i=0; i<n; i++) {
- temp[i] = users[i];
- }
- temp[n] = nov;
- delete []users;
- users = temp;
- n++;
- return *this;
- }
- double avgPopularity() {
- double suma =0;
- for(int i=0; i<n; i++) {
- suma+=users[i]->popularity();
- }
- return suma/n;
- }
- static void changeMaximumSize(int number) {
- maxUsers = number;
- }
- ~SocialNetwork() {
- for(int i=0; i<n; i++) {
- delete users[i];
- }
- delete []users;
- }
- };
- int SocialNetwork::maxUsers = 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;
- try{
- User * u = new FacebookUser(username,password,email,friends,likes,comments);
- network += u;
- }
- catch(InvalidPassword &e) {
- e.message();
- } catch(InvalidEmail &e) {
- e.message();
- } catch(MaximumSizeLimit &e) {
- e.message();
- }
- } else {
- int followers;
- int tweets;
- cin >> followers >> tweets;
- try {
- User * u= new TwitterUser(username,password,email,followers,tweets);
- network += u;
- } catch(InvalidPassword &e) {
- e.message();
- } catch(InvalidEmail &e) {
- e.message();
- } catch(MaximumSizeLimit &e) {
- e.message();
- }
- }
- }
- network.changeMaximumSize(6);
- cin >> username;
- cin >> password;
- cin >> email;
- int followers;
- int tweets;
- cin >> followers >> tweets;
- try {
- User * u= new TwitterUser(username,password,email,followers,tweets);
- network += u;
- } catch(InvalidPassword &e) {
- e.message();
- } catch(InvalidEmail &e) {
- e.message();
- } catch(MaximumSizeLimit &e) {
- e.message();
- }
- cout << network.avgPopularity();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement