Advertisement
Guest User

Untitled

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