Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- using namespace std;
- bool validPassword(const char * pw) {
- bool uCL = false;
- bool lCL = false;
- bool num = false;
- for(int i = 0; i<strlen(pw); i++) {
- if(isupper(pw[i]))
- uCL=true;
- if(islower(pw[i]))
- lCL=true;
- if(isdigit(pw[i]))
- num=true;
- if(uCL&&lCL&&num)
- return true;
- }
- return false;
- }
- bool validEmail(const char * email) {
- // cout<<"CE: "<<email<<" - ";
- bool valid = false;
- int atCnt =0;
- for(int i = 0; i<strlen(email); i++) {
- if(email[i]=='@'){
- atCnt++;
- }
- }
- if(atCnt==1){
- return true;
- }
- return false;
- }
- class InvalidPassword {
- char msg[50];
- public:
- InvalidPassword(const char * msg) {
- strcpy(this->msg,msg);
- }
- void message(){cout<<msg<<endl;}
- };
- class InvalidEmail {
- char msg[50];
- public:
- InvalidEmail(const char * msg) {
- strcpy(this->msg,msg);
- }
- void message(){cout<<msg<<endl;}
- };
- class MaximumSizeLimit {
- int n;
- public:
- MaximumSizeLimit(int n) {
- this->n=n;
- }
- void message(){cout<<"You can't add more than "<<n<<" users."<<endl;}
- };
- class User {
- protected:
- char username[50];
- char password[50];
- char email[50];
- public:
- User(const char * username = "", const char * password ="", const char * email="") {
- strcpy(this->username,username);
- strcpy(this->password,password);
- strcpy(this->email,email);
- }
- virtual double popularity()=0;
- char * getEmail(){return email;}
- char * getPassword(){return password;}
- };
- class FacebookUser : public User {
- protected:
- int NumOfFriends;
- int NumOfLikes;
- int NumOfComments;
- static double COEFF_LIKES;
- static double COEFF_COMMENTS;
- public:
- FacebookUser(const char * username = "", const char * password ="", const char * email="", int NumOfFriends = 0, int NumOfLikes =0, int NumOfComments=0 ):
- User(username,password,email) {
- this->NumOfFriends=NumOfFriends;
- this->NumOfLikes=NumOfLikes;
- this->NumOfComments=NumOfComments;
- }
- double popularity() {
- return COEFF_LIKES*NumOfLikes+COEFF_COMMENTS*NumOfComments+NumOfFriends;
- }
- };
- double FacebookUser::COEFF_LIKES=0.1;
- double FacebookUser::COEFF_COMMENTS=0.5;
- class TwitterUser: public User {
- protected:
- int NumOfFollowers;
- int NumOfTweets;
- static double COEFF_TWEETS;
- public:
- TwitterUser(const char * username = "", const char * password ="", const char * email="", int NumOfFollowers = 0, int NumOfTweets =0 ):
- User(username,password,email) {
- this->NumOfFollowers=NumOfFollowers;
- this->NumOfTweets=NumOfTweets;
- }
- double popularity() {
- return NumOfTweets*COEFF_TWEETS+NumOfFollowers;
- }
- };
- double TwitterUser::COEFF_TWEETS=0.5;
- class SocialNetwork {
- protected:
- User** niza;
- int totalUsers;
- static int MAX_USERS;
- public:
- SocialNetwork() {
- niza=NULL;
- totalUsers=0;
- }
- SocialNetwork(SocialNetwork *s) {
- niza = new User*[s->totalUsers];
- for(int i =0; i<s->totalUsers; i++) {
- niza[i]=s->niza[i];
- }
- totalUsers=s->totalUsers;
- }
- SocialNetwork &operator=(SocialNetwork &s) {
- niza = new User*[s.totalUsers];
- for(int i =0; i<totalUsers; i++) {
- niza[i]=s.niza[i];
- }
- totalUsers=s.totalUsers;
- return *this;
- }
- SocialNetwork&operator+=(User *u) {
- User ** tmp = new User*[totalUsers+1];
- for(int i =0; i<totalUsers; i++) {
- tmp[i]=niza[i];
- }
- tmp[totalUsers++]=u;
- delete [] niza;
- niza=tmp;
- return *this;
- }
- double avgPopularity() {
- double pop_calc =0;
- for(int i =0; i<totalUsers; i++) {
- pop_calc+=niza[i]->popularity();
- }
- return pop_calc/totalUsers;
- }
- void changeMaximumSize(int number) {
- MAX_USERS=number;
- }
- static int getMAX_USERS() {
- return MAX_USERS;
- }
- int getTotalUsers(){return totalUsers;}
- };
- int SocialNetwork::MAX_USERS=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;
- // cout<<"MAIL:"<<email<<endl;
- 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);
- if(!validPassword(u->getPassword()))
- throw InvalidPassword("Password too weak.");
- else if(!validEmail(u->getEmail()))
- throw InvalidEmail("Mail is not valid.");
- if(SocialNetwork::getMAX_USERS()==network.getTotalUsers())
- throw MaximumSizeLimit(SocialNetwork::getMAX_USERS());
- network += u;
- }
- catch (InvalidPassword ip){
- ip.message();
- }
- catch (InvalidEmail ie){
- ie.message();
- }
- catch (MaximumSizeLimit max){
- max.message();
- }
- }
- else {
- int followers;
- int tweets;
- cin >> followers >> tweets;
- // TODO: Try-catch
- try{
- User * u= new TwitterUser(username,password,email,followers,tweets);
- if(!validPassword(u->getPassword()))
- throw InvalidPassword("Password is too weak.");
- else if(!validEmail(u->getEmail()))
- throw InvalidEmail("Mail is not valid.");
- if(SocialNetwork::getMAX_USERS()==network.getTotalUsers())
- throw MaximumSizeLimit(SocialNetwork::getMAX_USERS());
- network += u;
- }
- catch (InvalidPassword ip){
- ip.message();
- }
- catch (InvalidEmail ie){
- ie.message();
- }
- catch (MaximumSizeLimit max){
- max.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);
- if(!validPassword(u->getPassword()))
- throw InvalidPassword("Password is too weak.");
- else if(!validEmail(u->getEmail()))
- throw InvalidEmail("Mail is not valid.");
- if(SocialNetwork::getMAX_USERS()==network.getTotalUsers())
- throw MaximumSizeLimit(SocialNetwork::getMAX_USERS());
- network += u;
- }
- catch (InvalidPassword ip){
- ip.message();
- }
- catch (InvalidEmail ie){
- ie.message();
- }
- catch (MaximumSizeLimit max){
- max.message();
- }
- cout << network.avgPopularity();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement