Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- using namespace std;
- class User {
- private:
- char username[50], password[50], email[50];
- public:
- User(char *username=" ", char *password=" ", char *email=" ") {
- strcpy(this->username,username);
- strcpy(this->password,password);
- strcpy(this->email,email);
- }
- virtual double popularity()=0;
- const static double vrednostL; //staticni clenovi
- const static double vrednostK;
- const static double vrednostT;
- virtual User & operator =(const User &us) {
- if(this==&us) return *this;
- strcpy(username,us.username);
- strcpy(password,us.password);
- strcpy(email,us.email);
- return *this;
- }
- User(const User &us) {
- strcpy(username,us.username);
- strcpy(password,us.password);
- strcpy(email,us.email);
- }
- };
- const double User :: vrednostL=0.1;
- const double User :: vrednostK=0.5; //inicijalizacija
- const double User :: vrednostT=0.5;
- class FacebookUser:public User {
- private:
- int brP, brL, brK;
- public:
- FacebookUser(char *username=" ", char* password=" ", char * email=" ",int brP=0, int brL=0, int brK=0):User(username,password,email) {
- this->brP=brP;
- this->brL=brL;
- this->brK=brK;
- }
- FacebookUser(const FacebookUser &f) {
- brP=f.brP;
- brL=f.brL;
- brK=f.brK;
- }
- double popularity() {
- return brP+brL*vrednostL+brK*vrednostK;
- }
- FacebookUser &operator =(const FacebookUser &f) {
- if(this==&f) return *this;
- this->User::operator=(f);
- brP=f.brP;
- brL=f.brL;
- brK=f.brK;
- return *this;
- }
- };
- class TwitterUser: public User {
- private:
- int brF, brTw;
- public:
- TwitterUser(char *username="", char* password="", char* email="", int brF=0, int brTw=0):User(username,password,email) {
- this->brF=brF;
- this->brTw=brTw;
- }
- TwitterUser(const TwitterUser &tw) {
- brF=tw.brF;
- brTw=tw.brTw;
- }
- double popularity() {
- return brF+ brTw*vrednostT;
- }
- TwitterUser &operator =(const TwitterUser &t) {
- if(this==&t) return *this;
- this->User::operator=(t);
- brF=t.brF;
- brTw=t.brTw;
- return *this;
- }
- };
- class SocialNetwork {
- private:
- User **u;
- int korisnici;
- public:
- const static int max=5;
- SocialNetwork() {
- u = new User*[0];
- korisnici=0;
- }
- ~SocialNetwork() {
- /*for(int i=0; i<korisnici; i++)
- delete u[i];
- delete [] u;*/
- }
- SocialNetwork(const SocialNetwork &sn) {
- korisnici=sn.korisnici;
- u=new User *[korisnici];
- for(int i=0; i<korisnici; i++)u[i]=sn.u[i];
- }
- SocialNetwork &operator =(const SocialNetwork &SN) {
- if(this==&SN) return *this;
- /*for(int i=0; i<korisnici; i++)
- delete u[i];*/
- //delete [] u;
- korisnici=SN.korisnici;
- u= new User*[korisnici];
- for(int i=0; i<korisnici; i++)
- u[i]=SN.u[i];
- return *this;
- }
- SocialNetwork &operator +=(User *nov) {
- User **tmp= new User *[korisnici+1];
- for(int i=0; i<korisnici; i++)
- tmp[i]=u[i];
- tmp[korisnici]=nov; //* help here?? *
- /* for(int i=0; i<korisnici; i++)
- delete [] u;*/
- korisnici++;
- //u= new User *[korisnici];
- delete [] u;
- u=tmp;
- /*for(int i=0; i<korisnici; i++)
- delete [] tmp;*/
- return *this;
- }
- int getMaxK() {
- return max;
- }
- int getK() {
- return korisnici;
- }
- float avgPopularity() {
- float avg;
- for(int i=0; i<korisnici; i++)
- avg+=u[i]->popularity();
- return avg/korisnici;
- }
- void changeMaximumSize(int number) {
- User **tmp=new User *[number];
- for(int i=0; i<korisnici; i++)
- tmp[i]=u[i];
- /*for(int i=0; i<korisnici; i++)
- delete [] u;*/
- korisnici=number;
- u= new User *[number];
- for(int i=0; i<korisnici; i++)
- u[i]=tmp[i];
- }
- };
- class InvalidPassword {
- private:
- char text[50];
- public:
- InvalidPassword(char *text="") {
- strcpy(this->text,text);
- }
- void message() {
- cout<<text;
- }
- };
- class InvalidEmail {
- private:
- char text[50];
- public:
- InvalidEmail(char * text="") {
- strcpy(this->text,text);
- }
- void message() {
- cout<<text; //void message(char *text)
- }
- };
- class MaximumSizeLimit {
- private:
- int number;
- public:
- MaximumSizeLimit(int number=0) {
- this->number=number;
- }
- void message() {
- cout<<"You can't add more than "<<number<<" users"<<endl;
- }
- };
- 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 { // TODO: Try-catch
- User * u = new FacebookUser(username,password,email,friends,likes,comments);
- network += u;
- int GB, MB,BROJ;
- for(int i=0; i<strlen(password); i++) {
- if(isupper(password[i]))
- GB++;
- if(islower(password[i]))
- MB++;
- if(isalnum(password[i]))
- BROJ++;
- }
- if(GB<1 || MB<1 || BROJ<1)
- throw 1;
- int flag=1;
- for(int i=0; i<strlen(email); i++) {
- if(email[i]=='@') {
- flag=0;
- break;
- }
- }
- if (flag) throw 2;
- } catch(int n) {
- if(n==1) InvalidPassword("Password is too weak"); //InvalidPassword::message();
- if(n==2) InvalidEmail("Mail is not valid"); //InvalidEmail::message();
- }
- } else {
- int followers;
- int tweets;
- cin >> followers >> tweets;
- try { // TODO: Try-catch
- User * u= new TwitterUser(username,password,email,followers,tweets);
- network += u;
- int GB, MB,BROJ;
- for(int i=0; i<strlen(password); i++) {
- if(isupper(password[i]))
- GB++;
- if(islower(password[i]))
- MB++;
- if(isalnum(password[i]))
- BROJ++;
- }
- if(GB<1 || MB<1 || BROJ<1)
- throw 1;
- int flag=1;
- for(int i=0; i<strlen(email); i++) {
- if(email[i]=='@') {
- flag=0;
- break;
- }
- }
- if (flag) throw 2;
- } catch(int n) {
- if(n==1) InvalidPassword("Password is too weak"); //InvalidPassword::message("Password is too weak");
- if(n==2) InvalidEmail("Mail is not valid"); //InvalidEmail::message("Mail is not valid");
- } // ~ fix later ~
- }
- }
- network.changeMaximumSize(6);
- cin >> username;
- cin >> password;
- cin >> email;
- int followers;
- int tweets;
- cin >> followers >> tweets;
- try { // TODO: Try-catch
- User * u= new TwitterUser(username,password,email,followers,tweets);
- network += u;
- if(network.getMaxK()<network.getK()) {
- int newK= network.getK();
- throw 3;
- }
- } catch (int n) {
- if (n==3) MaximumSizeLimit(newK); //MaximumSizeLimit::message(newK);
- }
- cout << network.avgPopularity();
- }
- //im tired
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement