Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.54 KB | None | 0 0
  1.  
  2. bool validar_parametro(pila_t* pila, char* comando) { //Devuelve false si la pila esta vacia.
  3. if (pila_esta_vacia(pila)) {
  4. fprintf(stderr, "Error en comando %s \n", comando);
  5. return false;
  6. }
  7. return true;
  8. }
  9.  
  10. bool validar_digito(char* cadena) { //Devuelve true si la cadena es un numero
  11. size_t largo = strlen(cadena);
  12. bool ok = true;
  13. for (size_t i=0; i<largo; i++) {
  14. ok &= (cadena[i] >= '0' && cadena[i] <= '9');
  15. }
  16. return ok;
  17. }
  18.  
  19. bool validar_usuario(pila_t* pila, usuario_t** tabla_usuarios, size_t cant_usuarios, size_t id_pago) {
  20. bool resul1 = validar_parametro(pila, "procesar");
  21. if (! resul1) { //La pila esta vacia = faltan parametros
  22. return false;
  23. }
  24. char* coord_ingresadas = pila_desapilar(pila);
  25. bool resul2 = validar_parametro(pila, "procesar");
  26. if (! resul2) { //La pila esta vacia = faltan parametros
  27. return false;
  28. }
  29. char* cadena_id = pila_desapilar(pila);
  30. if (! validar_digito(cadena_id)) {
  31. fprintf(stderr, "Error en comando procesar \n");
  32. }
  33. size_t id = (size_t) atoi(cadena_id);
  34. if (id >= cant_usuarios) {
  35. fprintf(stderr, "Error en pago %zu \n", id_pago);
  36. return false;
  37. }
  38. bool resul3 = validar_parametro(pila, "procesar");
  39. if (resul3) { //La pila no esta vacia= parametros de mas
  40. return false;
  41. }
  42. usuario_t* usuario = tabla_usuarios[id];
  43. char* coord_usuario = obtener_coord(usuario);
  44. if (strcmp(coord_ingresadas, coord_usuario) == 0) {
  45. fprintf(stdout, "OK \n");
  46. }
  47. else {
  48. fprintf(stderr, "Error en pago %zu \n", id);
  49. return false;
  50. }
  51. return true;
  52. }
  53.  
  54. bool validar_pago(pila_t* pila, usuario_t** tabla_usuarios, size_t cant_usuarios, size_t id_pago) {
  55. bool resul1 = validar_parametro(pila, "procesar");
  56. if (! resul1) { //La pila esta vacia = faltan parametros
  57. return false;
  58. }
  59. char* cadena_monto = pila_desapilar(pila);
  60. if (! validar_digito(cadena_monto)) {
  61. fprintf(stderr, "Error en comando procesar \n");
  62. }
  63. double monto = (double) atof(cadena_monto);
  64. bool resul2 = validar_parametro(pila, "procesar");
  65. if (! resul2) { //La pila esta vacia = faltan parametros
  66. return false;
  67. }
  68. char* cadena_id = pila_desapilar(pila);
  69. if (! validar_digito(cadena_id)) {
  70. fprintf(stderr, "Error en comando procesar \n");
  71. }
  72. size_t id = (size_t) atoi(cadena_id);
  73. if (id >= cant_usuarios) {
  74. fprintf(stderr, "Error en pago %zu \n", id_pago);
  75. return false;
  76. }
  77. bool resul3 = validar_parametro(pila, "procesar");
  78. if (resul3) { //La pila no esta vacia= parametros de mas
  79. return false;
  80. }
  81. usuario_t* usuario = tabla_usuarios[id];
  82. double saldo = obtener_saldo(usuario);
  83. if (saldo > monto) {
  84. fprintf(stdout, "OK \n");
  85. }
  86. else {
  87. fprintf(stderr, "Error en pago %zu \n", id_pago);
  88. return false;
  89. }
  90. return true;
  91. }
  92.  
  93. bool efectuar_pago (pila_t* pila, usuario_t** tabla_usuarios, size_t cant_usuarios, size_t id_pago) {
  94. bool resul1 = validar_parametro(pila, "procesar");
  95. if (! resul1) { //La pila esta vacia = faltan parametros
  96. return false;
  97. }
  98. char* cadena_id_emisor = pila_desapilar(pila);
  99. if (! validar_digito(cadena_id_emisor)) {
  100. fprintf(stderr, "Error en comando procesar \n");
  101. }
  102. size_t id_emisor = (size_t) atoi(cadena_id_emisor);
  103. if (id_emisor >= cant_usuarios) {
  104. fprintf(stderr, "Error en pago %zu", id_pago);
  105. return false;
  106. }
  107. bool resul2 = validar_parametro(pila, "procesar");
  108. if (! resul2) { //La pila esta vacia = faltan parametros
  109. return false;
  110. }
  111. char* cadena_id_receptor = pila_desapilar(pila);
  112. if (! validar_digito(cadena_id_receptor)) {
  113. fprintf(stderr, "Error en comando procesar \n");
  114. }
  115. size_t id_receptor = (size_t) atoi(cadena_id_receptor);
  116. if (id_receptor >= cant_usuarios) {
  117. fprintf(stderr, "Error en pago %zu", id_pago);
  118. return false;
  119. }
  120. bool resul3 = validar_parametro(pila, "procesar");
  121. if (! resul3) { //La pila esta vacia = faltan parametros
  122. return false;
  123. }
  124. char* cadena_monto = pila_desapilar(pila);
  125. if (! validar_digito(cadena_monto)) {
  126. fprintf(stderr, "Error en comando procesar \n");
  127. }
  128. double monto = (double) atof(cadena_monto);
  129. bool resul4 = validar_parametro(pila, "procesar");
  130. if (resul4) { //La pila no esta vacia= parametros de mas
  131. return false;
  132. }
  133. usuario_t* usuario_emisor = tabla_usuarios[id_emisor];
  134. usuario_t* usuario_receptor = tabla_usuarios[id_receptor];
  135. usuario_emisor->saldo -= monto;
  136. usuario_receptor->saldo += monto;
  137. fprintf(stdout, "OK \n");
  138. return true;
  139. }
  140.  
  141. bool procesar_pagos (cola_t* cola_proceso, usuario_t** tabla_usuarios, size_t cant_proceso, size_t cant_usuario) {
  142. pila_t* pila = pila_crear();
  143. for (size_t i=0; i<cant_proceso && ! cola_esta_vacia(cola_proceso); i++) {
  144. pago_t* pago = cola_desencolar(cola_proceso);
  145. char* codigo = obtener_codigo(pago);
  146. size_t id_pago = obtener_idpago(pago);
  147. char** comandos = split(codigo, ';');
  148. size_t pos = 0;
  149. while (comandos[pos] != NULL) {
  150. if (strcmp(comandos[pos], "validar_usuario") == 0) {
  151. bool resul = validar_usuario(pila, tabla_usuarios, cant_usuario, id_pago);
  152. if (! resul) {
  153. return false;
  154. }
  155. }
  156. if (strcmp(comandos[pos], "validar_pago") == 0) {
  157. bool resul = validar_pago(pila, tabla_usuarios, cant_usuario, id_pago);
  158. if (! resul) {
  159. return false;
  160. }
  161. }
  162. if (strcmp(comandos[pos], "pagar") == 0) {
  163. bool resul = efectuar_pago(pila, tabla_usuarios, cant_usuario, id_pago);
  164. if (! resul) {
  165. return false;
  166. }
  167. }
  168. else {
  169. pila_apilar(pila, comandos[pos]);
  170. }
  171. pos++;
  172. char* codigo = obtener_codigo(pago);
  173. free(codigo);
  174. free(pago);
  175. }
  176. }
  177. pila_destruir(pila);
  178. return true;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement