Advertisement
miki_brill

Untitled

Dec 19th, 2014
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.58 KB | None | 0 0
  1. #include "tinder.h"
  2.  
  3. #define CHECK_RESULT(res)\
  4. switch (res) {\
  5. case TINDER_OUT_OF_MEMORY:\
  6. mtmPrintErrorMessage(stderr, MTM_OUT_OF_MEMORY);\
  7. tinderDestroy(tinder);\
  8. return -1;\
  9. break;\
  10. case TINDER_HOBBY_ALREADY_EXISTS:\
  11. mtmPrintErrorMessage(stderr, MTM_HOBBY_ALREADY_EXISTS);\
  12. break;\
  13. case TINDER_HOBBY_DOES_NOT_EXIST:\
  14. mtmPrintErrorMessage(stderr, MTM_HOBBY_DOES_NOT_EXIST);\
  15. break;\
  16. case TINDER_NO_HOBBIES:\
  17. mtmPrintErrorMessage(stderr, MTM_NO_HOBBIES);\
  18. break;\
  19. case TINDER_USER_ALREADY_EXISTS:\
  20. mtmPrintErrorMessage(stderr, MTM_USER_ALREADY_EXISTS);\
  21. break;\
  22. case TINDER_USER_DOES_NOT_EXIST:\
  23. mtmPrintErrorMessage(stderr, MTM_USER_DOES_NOT_EXIST);\
  24. break;\
  25. case TINDER_NO_USERS:\
  26. mtmPrintErrorMessage(stderr, MTM_NO_USERS);\
  27. break;\
  28. case TINDER_USER_ALREADY_PARTICIPATES_HOBBY:\
  29. mtmPrintErrorMessage(stderr,\
  30. MTM_USER_ALREADY_PARTICIPATES_HOBBY);\
  31. break;\
  32. case TINDER_USER_DOESNT_PARTICIPATE_HOBBY:\
  33. mtmPrintErrorMessage(stderr,\
  34. MTM_USER_DOESNT_PARTICIPATE_HOBBY);\
  35. break;\
  36. case TINDER_USER_ALREADY_FRIEND:\
  37. mtmPrintErrorMessage(stderr,\
  38. MTM_USER_DOESNT_PARTICIPATE_HOBBY);\
  39. break;\
  40. case TINDER_NO_USER_REQUEST:\
  41. mtmPrintErrorMessage(stderr,\
  42. MTM_NO_USER_REQUEST);\
  43. break;\
  44. case TINDER_USER_NOT_FRIEND:\
  45. mtmPrintErrorMessage(stderr,\
  46. MTM_USER_NOT_FRIEND);\
  47. break;\
  48. case TINDER_INVALID_PARAMETERS:\
  49. mtmPrintErrorMessage(stderr,\
  50. MTM_INVALID_PARAMETERS);\
  51. break;\
  52. default: break;\
  53. }
  54.  
  55. int handleCommandLine(FILE * input, FILE * output, int argc, char** argv);
  56.  
  57. TinderResult handleCommand(FILE* input, FILE* output,Tinder tinder);
  58.  
  59. TinderResult handleUserCommand(char* command, Tinder tinder);
  60.  
  61. TinderResult handleHobbyCommand(char* command, Tinder tinder);
  62.  
  63. TinderResult handleReport(char* command, Tinder tinder);
  64.  
  65. int main(int argc, char** argv){
  66. FILE * input = stdin;
  67. FILE * output = stdout;
  68. int cmdLineRes = handleCommandLine(input,output,argc,argv);
  69. if(cmdLineRes == -1){
  70. mtmPrintErrorMessage(stderr, MTM_CANNOT_OPEN_FILE);
  71. return -1;
  72. }
  73. else if(cmdLineRes == -2){
  74. mtmPrintErrorMessage(stderr, MTM_INVALID_COMMAND_LINE_PARAMETERS);
  75. return -1;
  76. }
  77. Tinder tinder = createTinder();
  78. if(!tinder){
  79. mtmPrintErrorMessage(stderr, MTM_OUT_OF_MEMORY);
  80. return -1;
  81. }
  82. TinderResult res = handleCommand(input, output, tinder);
  83. CHECK_RESULT(res)
  84. tinderDestroy(tinder);
  85. if(argc>1){
  86. fclose(input);
  87. fclose(output);
  88. }
  89. return 0;
  90. }
  91.  
  92. int handleCommandLine(FILE * input, FILE * output, int argc, char** argv){
  93. switch(argc){
  94. case 1: input=stdin;
  95. output=stdout;
  96. break;
  97. case 3: if(strcmp(argv[1],"-i") == 0){
  98. output=stdout;
  99. input=fopen(argv[2],"r");
  100. if(!input){
  101. return -1;
  102. }
  103. } else if(strcmp(argv[1],"-o") == 0){
  104. input=stdin;
  105. output=fopen(argv[2],"w");
  106. if(!output){
  107. return -1;
  108. }
  109. } else return -2;
  110. break;
  111. case 5: if(strcmp(argv[1],"-i") == 0 && strcmp(argv[3],"-o") == 0){
  112. input=fopen(argv[2],"r");
  113. if(!input){
  114. return -1;
  115. }
  116. output=fopen(argv[4],"w");
  117. if(!output){
  118. fclose(input);
  119. return -1;
  120. }
  121. } else if(strcmp(argv[1],"-o") == 0 &&
  122. strcmp(argv[3],"-i") == 0){
  123. input=fopen(argv[4],"r");
  124. if(!input){
  125. return -1;
  126. }
  127. output=fopen(argv[2],"w");
  128. if(!output){
  129. fclose(input);
  130. return -1;
  131. }
  132. } else return -2;
  133. break;
  134. default: return -2;
  135. }
  136. return 1;
  137. }
  138.  
  139. TinderResult handleCommand(FILE* input, FILE* output,Tinder tinder){
  140. char line[MAX_LEN+1];
  141. TinderResult res;
  142. while(fgets(line,MAX_LEN+1,input)){
  143. char *command;
  144. char *subCommand;
  145. command=strtok(line,"\t\n ");
  146. if(command){
  147. subCommand=strtok(NULL,"\t\n ");
  148. if (subCommand) {
  149. if (command[0] == '#') {
  150. continue;
  151. } else if (strcmp(command, "user") == 0) {
  152. res = handleUserCommand(subCommand, tinder);
  153. } else if (strcmp(command, "hobby") == 0) {
  154. res = handleHobbyCommand(subCommand, tinder);
  155. } else if (strcmp(command, "report") == 0) {
  156. res = handleReport(subCommand, tinder);
  157. }
  158. }
  159. if(res == TINDER_OUT_OF_MEMORY){
  160. return res;
  161. }
  162. }
  163. }
  164. return res;
  165. }
  166.  
  167. TinderResult handleUserCommand(char* command,Tinder tinder){
  168. TinderResult res;
  169. if(strcmp(command, "add") == 0){
  170. char *id=strtok(NULL,"\t\n ");
  171. int nId = atoi(id);
  172. char *name=strtok(NULL,"\t\n ");
  173. char *birth=strtok(NULL,"\t\n ");
  174. int nBirth = atoi(birth);
  175. char *gender=strtok(NULL,"\t\n ");
  176. Gender gGender = (Gender)gender;
  177. char *pref=strtok(NULL,"\t\n ");
  178. Gender gPref = (Gender)pref;
  179. res = tinderUserAdd(nId, name, nBirth, gGender, gPref, tinder);
  180. } else if (strcmp(command, "remove") == 0){
  181. char *id=strtok(NULL,"\t\n ");
  182. int nId = atoi(id);
  183. res = tinderUserRemove(tinder, nId);
  184. } else if (strcmp(command, "friend_request") == 0){
  185. char *requesting_id=strtok(NULL,"\t\n ");
  186. int nRequesting_id = atoi(requesting_id);
  187. char *requested_id=strtok(NULL,"\t\n ");
  188. int nRequested_id = atoi(requested_id);
  189. res = tinderUserFriendRequest(tinder, nRequesting_id, nRequested_id);
  190. } else if (strcmp(command, "handle_request") == 0){
  191. char *requesting_id=strtok(NULL,"\t\n ");
  192. int nRequesting_id = atoi(requesting_id);
  193. char *requested_id=strtok(NULL,"\t\n ");
  194. int nRequested_id = atoi(requested_id);
  195. char *choice=strtok(NULL,"\t\n ");
  196. res = tinderUserHandleRequest(tinder, nRequesting_id, nRequested_id, choice);
  197. } else if (strcmp(command, "unfriend") == 0){
  198. char *requesting_id=strtok(NULL,"\t\n ");
  199. int nRequesting_id = atoi(requesting_id);
  200. char *requested_id=strtok(NULL,"\t\n ");
  201. int nRequested_id = atoi(requested_id);
  202. res = tinderUserUnfriend(tinder, nRequesting_id, nRequested_id);
  203. } else if (strcmp(command, "who_can_i_date") == 0){
  204. char *id=strtok(NULL,"\t\n ");
  205. int nId = atoi(id);
  206. char *count=strtok(NULL,"\t\n ");
  207. int nCount = atoi(count);
  208. res = tinderUserWhoCanIDate(tinder, nId, nCount);
  209. }
  210. return res;
  211. }
  212.  
  213. TinderResult handleHobbyCommand(char* command,Tinder tinder){
  214. TinderResult res;
  215. char *hobbyName = strtok(NULL,"\t\n ");
  216. if(strcmp(command, "add") == 0){
  217. res = tinderHobbyAdd(tinder, hobbyName);
  218. } else if(strcmp(command, "remove") == 0){
  219. res = tinderHobbyRemove(tinder, hobbyName);
  220. } else if(strcmp(command, "join") == 0){
  221. char *id = strtok(NULL,"\t\n ");
  222. int nId = atoi(id);
  223. res = tinderHobbyJoin(tinder,hobbyName, nId);
  224. } else if(strcmp(command, "leave") == 0){
  225. char *id = strtok(NULL,"\t\n ");
  226. int nId = atoi(id);
  227. res = tinderHobbyLeave(tinder, hobbyName, nId);
  228. }
  229. return res;
  230. }
  231.  
  232. TinderResult handleReport(char* command, Tinder tinder){
  233. TinderResult res;
  234. if(strcmp(command, "hobbies") == 0){
  235. char *count = strtok(NULL,"\t\n ");
  236. int nCount = atoi(count);
  237. res = tinderHobbyReport(tinder, nCount);
  238. } else if(strcmp(command, "users") == 0){
  239. res = tinderUserReport(tinder);
  240. } else if(strcmp(command, "hobbies_by_age") == 0){
  241. res = tinderHobbyReportByAge(tinder);
  242. }
  243. return res;
  244. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement