Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool validar_parametro(pila_t* pila, char* comando) { //Devuelve false si la pila esta vacia.
- if (pila_esta_vacia(pila)) {
- fprintf(stderr, "Error en comando %s \n", comando);
- return false;
- }
- return true;
- }
- bool validar_digito(char* cadena) { //Devuelve true si la cadena es un numero
- size_t largo = strlen(cadena);
- bool ok = true;
- for (size_t i=0; i<largo; i++) {
- ok &= (cadena[i] >= '0' && cadena[i] <= '9');
- }
- return ok;
- }
- bool validar_usuario(pila_t* pila, usuario_t** tabla_usuarios, size_t cant_usuarios, size_t id_pago) {
- bool resul1 = validar_parametro(pila, "procesar");
- if (! resul1) { //La pila esta vacia = faltan parametros
- return false;
- }
- char* coord_ingresadas = pila_desapilar(pila);
- bool resul2 = validar_parametro(pila, "procesar");
- if (! resul2) { //La pila esta vacia = faltan parametros
- return false;
- }
- char* cadena_id = pila_desapilar(pila);
- if (! validar_digito(cadena_id)) {
- fprintf(stderr, "Error en comando procesar \n");
- }
- size_t id = (size_t) atoi(cadena_id);
- if (id >= cant_usuarios) {
- fprintf(stderr, "Error en pago %zu \n", id_pago);
- return false;
- }
- bool resul3 = validar_parametro(pila, "procesar");
- if (resul3) { //La pila no esta vacia= parametros de mas
- return false;
- }
- usuario_t* usuario = tabla_usuarios[id];
- char* coord_usuario = obtener_coord(usuario);
- if (strcmp(coord_ingresadas, coord_usuario) == 0) {
- fprintf(stdout, "OK \n");
- }
- else {
- fprintf(stderr, "Error en pago %zu \n", id);
- return false;
- }
- return true;
- }
- bool validar_pago(pila_t* pila, usuario_t** tabla_usuarios, size_t cant_usuarios, size_t id_pago) {
- bool resul1 = validar_parametro(pila, "procesar");
- if (! resul1) { //La pila esta vacia = faltan parametros
- return false;
- }
- char* cadena_monto = pila_desapilar(pila);
- if (! validar_digito(cadena_monto)) {
- fprintf(stderr, "Error en comando procesar \n");
- }
- double monto = (double) atof(cadena_monto);
- bool resul2 = validar_parametro(pila, "procesar");
- if (! resul2) { //La pila esta vacia = faltan parametros
- return false;
- }
- char* cadena_id = pila_desapilar(pila);
- if (! validar_digito(cadena_id)) {
- fprintf(stderr, "Error en comando procesar \n");
- }
- size_t id = (size_t) atoi(cadena_id);
- if (id >= cant_usuarios) {
- fprintf(stderr, "Error en pago %zu \n", id_pago);
- return false;
- }
- bool resul3 = validar_parametro(pila, "procesar");
- if (resul3) { //La pila no esta vacia= parametros de mas
- return false;
- }
- usuario_t* usuario = tabla_usuarios[id];
- double saldo = obtener_saldo(usuario);
- if (saldo > monto) {
- fprintf(stdout, "OK \n");
- }
- else {
- fprintf(stderr, "Error en pago %zu \n", id_pago);
- return false;
- }
- return true;
- }
- bool efectuar_pago (pila_t* pila, usuario_t** tabla_usuarios, size_t cant_usuarios, size_t id_pago) {
- bool resul1 = validar_parametro(pila, "procesar");
- if (! resul1) { //La pila esta vacia = faltan parametros
- return false;
- }
- char* cadena_id_emisor = pila_desapilar(pila);
- if (! validar_digito(cadena_id_emisor)) {
- fprintf(stderr, "Error en comando procesar \n");
- }
- size_t id_emisor = (size_t) atoi(cadena_id_emisor);
- if (id_emisor >= cant_usuarios) {
- fprintf(stderr, "Error en pago %zu", id_pago);
- return false;
- }
- bool resul2 = validar_parametro(pila, "procesar");
- if (! resul2) { //La pila esta vacia = faltan parametros
- return false;
- }
- char* cadena_id_receptor = pila_desapilar(pila);
- if (! validar_digito(cadena_id_receptor)) {
- fprintf(stderr, "Error en comando procesar \n");
- }
- size_t id_receptor = (size_t) atoi(cadena_id_receptor);
- if (id_receptor >= cant_usuarios) {
- fprintf(stderr, "Error en pago %zu", id_pago);
- return false;
- }
- bool resul3 = validar_parametro(pila, "procesar");
- if (! resul3) { //La pila esta vacia = faltan parametros
- return false;
- }
- char* cadena_monto = pila_desapilar(pila);
- if (! validar_digito(cadena_monto)) {
- fprintf(stderr, "Error en comando procesar \n");
- }
- double monto = (double) atof(cadena_monto);
- bool resul4 = validar_parametro(pila, "procesar");
- if (resul4) { //La pila no esta vacia= parametros de mas
- return false;
- }
- usuario_t* usuario_emisor = tabla_usuarios[id_emisor];
- usuario_t* usuario_receptor = tabla_usuarios[id_receptor];
- usuario_emisor->saldo -= monto;
- usuario_receptor->saldo += monto;
- fprintf(stdout, "OK \n");
- return true;
- }
- bool procesar_pagos (cola_t* cola_proceso, usuario_t** tabla_usuarios, size_t cant_proceso, size_t cant_usuario) {
- pila_t* pila = pila_crear();
- for (size_t i=0; i<cant_proceso && ! cola_esta_vacia(cola_proceso); i++) {
- pago_t* pago = cola_desencolar(cola_proceso);
- char* codigo = obtener_codigo(pago);
- size_t id_pago = obtener_idpago(pago);
- char** comandos = split(codigo, ';');
- size_t pos = 0;
- while (comandos[pos] != NULL) {
- if (strcmp(comandos[pos], "validar_usuario") == 0) {
- bool resul = validar_usuario(pila, tabla_usuarios, cant_usuario, id_pago);
- if (! resul) {
- return false;
- }
- }
- if (strcmp(comandos[pos], "validar_pago") == 0) {
- bool resul = validar_pago(pila, tabla_usuarios, cant_usuario, id_pago);
- if (! resul) {
- return false;
- }
- }
- if (strcmp(comandos[pos], "pagar") == 0) {
- bool resul = efectuar_pago(pila, tabla_usuarios, cant_usuario, id_pago);
- if (! resul) {
- return false;
- }
- }
- else {
- pila_apilar(pila, comandos[pos]);
- }
- pos++;
- char* codigo = obtener_codigo(pago);
- free(codigo);
- free(pago);
- }
- }
- pila_destruir(pila);
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement