Advertisement
ChrisPetrovski

SocialNetwork Problem 6 (5 / 31)

May 6th, 2018
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. bool validPassword(const char * pw) {
  7.     bool uCL = false;
  8.     bool lCL = false;
  9.     bool num = false;
  10.     for(int i = 0; i<strlen(pw); i++) {
  11.         if(isupper(pw[i]))
  12.             uCL=true;
  13.         if(islower(pw[i]))
  14.             lCL=true;
  15.         if(isdigit(pw[i]))
  16.             num=true;
  17.  
  18.         if(uCL&&lCL&&num)
  19.             return true;
  20.     }
  21.     return false;
  22. }
  23.  
  24. bool validEmail(const char * email) {
  25.   //  cout<<"CE: "<<email<<" - ";
  26.     bool valid = false;
  27.     int atCnt =0;
  28.     for(int i = 0; i<strlen(email); i++) {
  29.         if(email[i]=='@'){
  30.             atCnt++;
  31.         }
  32.     }
  33.     if(atCnt==1){
  34.         return true;
  35.        
  36.     }
  37.     return false;
  38. }
  39.  
  40.  
  41.  
  42. class InvalidPassword {
  43.     char msg[50];
  44. public:
  45.     InvalidPassword(const char * msg) {
  46.         strcpy(this->msg,msg);
  47.     }
  48.     void message(){cout<<msg<<endl;}
  49. };
  50.  
  51.  
  52.  
  53. class InvalidEmail {
  54.     char msg[50];
  55. public:
  56.     InvalidEmail(const char * msg) {
  57.         strcpy(this->msg,msg);
  58.     }
  59.     void message(){cout<<msg<<endl;}
  60.  
  61. };
  62.  
  63.  
  64. class MaximumSizeLimit {
  65.     int n;
  66. public:
  67.     MaximumSizeLimit(int n) {
  68.         this->n=n;
  69.     }
  70.     void message(){cout<<"You can't add more than "<<n<<" users."<<endl;}
  71. };
  72.  
  73.  
  74. class User {
  75. protected:
  76.     char username[50];
  77.     char password[50];
  78.     char email[50];
  79.  
  80. public:
  81.     User(const char * username = "", const char * password ="", const char * email="") {
  82.         strcpy(this->username,username);
  83.         strcpy(this->password,password);
  84.         strcpy(this->email,email);
  85.     }
  86.     virtual double popularity()=0;
  87.        char * getEmail(){return email;}
  88.     char * getPassword(){return password;}
  89. };
  90.  
  91. class FacebookUser : public User {
  92. protected:
  93.     int NumOfFriends;
  94.     int NumOfLikes;
  95.     int NumOfComments;
  96.     static double COEFF_LIKES;
  97.     static double COEFF_COMMENTS;
  98. public:
  99.     FacebookUser(const char * username = "", const char * password ="", const char * email="", int NumOfFriends = 0, int NumOfLikes =0, int NumOfComments=0 ):
  100.         User(username,password,email) {
  101.         this->NumOfFriends=NumOfFriends;
  102.         this->NumOfLikes=NumOfLikes;
  103.         this->NumOfComments=NumOfComments;
  104.     }
  105.     double popularity() {
  106.         return COEFF_LIKES*NumOfLikes+COEFF_COMMENTS*NumOfComments+NumOfFriends;
  107.     }
  108. };
  109.  
  110. double FacebookUser::COEFF_LIKES=0.1;
  111. double FacebookUser::COEFF_COMMENTS=0.5;
  112.  
  113.  
  114. class TwitterUser: public User {
  115. protected:
  116.     int NumOfFollowers;
  117.     int NumOfTweets;
  118.     static double COEFF_TWEETS;
  119. public:
  120.     TwitterUser(const char * username = "", const char * password ="", const char * email="", int NumOfFollowers = 0, int NumOfTweets =0 ):
  121.         User(username,password,email) {
  122.         this->NumOfFollowers=NumOfFollowers;
  123.         this->NumOfTweets=NumOfTweets;
  124.     }
  125.     double popularity() {
  126.         return NumOfTweets*COEFF_TWEETS+NumOfFollowers;
  127.     }
  128.  
  129.  
  130. };
  131.  
  132. double TwitterUser::COEFF_TWEETS=0.5;
  133.  
  134.  
  135. class SocialNetwork {
  136. protected:
  137.     User** niza;
  138.     int totalUsers;
  139.     static int MAX_USERS;
  140. public:
  141.     SocialNetwork() {
  142.         niza=NULL;
  143.         totalUsers=0;
  144.     }
  145.     SocialNetwork(SocialNetwork *s) {
  146.         niza = new User*[s->totalUsers];
  147.         for(int i =0; i<s->totalUsers; i++) {
  148.             niza[i]=s->niza[i];
  149.         }
  150.         totalUsers=s->totalUsers;
  151.     }
  152.     SocialNetwork &operator=(SocialNetwork &s) {
  153.         niza = new User*[s.totalUsers];
  154.         for(int i =0; i<totalUsers; i++) {
  155.             niza[i]=s.niza[i];
  156.         }
  157.         totalUsers=s.totalUsers;
  158.         return *this;
  159.     }
  160.  
  161.     SocialNetwork&operator+=(User *u) {
  162.         User ** tmp = new User*[totalUsers+1];
  163.         for(int i =0; i<totalUsers; i++) {
  164.             tmp[i]=niza[i];
  165.         }
  166.         tmp[totalUsers++]=u;
  167.         delete [] niza;
  168.         niza=tmp;
  169.         return *this;
  170.     }
  171.     double avgPopularity() {
  172.         double pop_calc =0;
  173.         for(int i =0; i<totalUsers; i++) {
  174.             pop_calc+=niza[i]->popularity();
  175.         }
  176.         return pop_calc/totalUsers;
  177.     }
  178.  
  179.     void changeMaximumSize(int number) {
  180.         MAX_USERS=number;
  181.     }
  182.     static int getMAX_USERS() {
  183.         return MAX_USERS;
  184.     }
  185.     int getTotalUsers(){return totalUsers;}
  186. };
  187.  
  188. int SocialNetwork::MAX_USERS=5;
  189.  
  190.  
  191.  
  192. int main() {
  193.  
  194.     SocialNetwork network = SocialNetwork();
  195.     int n;
  196.     cin >> n;
  197.     char username[50];
  198.     char password[50];
  199.     char email[50];
  200.     int userType;
  201.     for (int i=0; i < n; ++i) {
  202.         cin >> username;
  203.         cin >> password;
  204.         cin >> email;
  205.         cin >> userType;
  206.        // cout<<"MAIL:"<<email<<endl;
  207.         if (userType == 1) {
  208.             int friends;
  209.             int likes;
  210.             int comments;
  211.             cin >> friends >> likes >> comments;
  212.  
  213.             // TODO: Try-catch
  214.             try{
  215.             User * u = new FacebookUser(username,password,email,friends,likes,comments);
  216.             if(!validPassword(u->getPassword()))
  217.                 throw InvalidPassword("Password too weak.");
  218.             else if(!validEmail(u->getEmail()))
  219.                 throw InvalidEmail("Mail is not valid.");
  220.             if(SocialNetwork::getMAX_USERS()==network.getTotalUsers())
  221.                 throw MaximumSizeLimit(SocialNetwork::getMAX_USERS());
  222.             network += u;
  223.             }
  224.            
  225.             catch (InvalidPassword ip){
  226.                 ip.message();
  227.             }
  228.             catch (InvalidEmail ie){
  229.                 ie.message();
  230.             }
  231.                         catch (MaximumSizeLimit max){
  232.                 max.message();
  233.             }
  234.         }
  235.  
  236.         else {
  237.             int followers;
  238.             int tweets;
  239.             cin >> followers >> tweets;
  240.  
  241.             // TODO: Try-catch
  242.             try{
  243.             User * u= new TwitterUser(username,password,email,followers,tweets);
  244.             if(!validPassword(u->getPassword()))
  245.                 throw InvalidPassword("Password is too weak.");
  246.             else if(!validEmail(u->getEmail()))
  247.                 throw InvalidEmail("Mail is not valid.");
  248.             if(SocialNetwork::getMAX_USERS()==network.getTotalUsers())
  249.                 throw MaximumSizeLimit(SocialNetwork::getMAX_USERS());
  250.             network += u;
  251.             }
  252.             catch (InvalidPassword ip){
  253.                 ip.message();
  254.             }
  255.             catch (InvalidEmail ie){
  256.                 ie.message();
  257.             }
  258.                         catch (MaximumSizeLimit max){
  259.                 max.message();
  260.             }
  261.         }
  262.     }
  263.     network.changeMaximumSize(6);
  264.     cin >> username;
  265.     cin >> password;
  266.     cin >> email;
  267.     int followers;
  268.     int tweets;
  269.     cin >> followers >> tweets;
  270.  
  271.     // TODO: Try-catch
  272.             try{
  273.             User * u= new TwitterUser(username,password,email,followers,tweets);
  274.             if(!validPassword(u->getPassword()))
  275.                 throw InvalidPassword("Password is too weak.");
  276.             else if(!validEmail(u->getEmail()))
  277.                 throw InvalidEmail("Mail is not valid.");
  278.             if(SocialNetwork::getMAX_USERS()==network.getTotalUsers())
  279.                 throw MaximumSizeLimit(SocialNetwork::getMAX_USERS());
  280.             network += u;
  281.             }
  282.             catch (InvalidPassword ip){
  283.                 ip.message();
  284.             }
  285.             catch (InvalidEmail ie){
  286.                 ie.message();
  287.             }
  288.             catch (MaximumSizeLimit max){
  289.                 max.message();
  290.             }
  291.  
  292.     cout << network.avgPopularity();
  293.  
  294. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement