Advertisement
Guest User

Untitled

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