Advertisement
Brunoroman

PI ENTREGA 4.0

Nov 11th, 2021
891
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 39.18 KB | None | 0 0
  1. #include <iostream> //LIBRERIA IOSTREAM permite ingresar y mostrar en pantalla texto.
  2. #include <cstring>  //LIBRERIA CSTRING facilita el uso de strings, con comandos como lenght.
  3. #include <stdlib.h> //LIBRERIA STDLIB es una biblioteca estandar, se agrego para la funcion limpiar().
  4. #include <conio.h>  //LIBRERIA CONIO.H permite usar la funcion getch(), hace que no se cierre la terminal al ser ejecutado el programa.
  5. using namespace std;
  6.  
  7. // Funcion del programa
  8. // Sistema para registrar, administrar y consultar prestamos
  9.  
  10. //COSAS POR HACER
  11. //1)SACAR ERROR eliminar_prestamo
  12. //2)TERMINAR imprimir_prestamos_por_categoria
  13. //3)TERMINAR cantidad_objetos_categoria
  14. //4)TERMINAR imprimirOrdenCategoria
  15. //5)TERMINAR imprimirOrdenPrestatario
  16. //6)TERMINAR imprimirPrestatarioActivo
  17. //7)HACER TODOS LOS COMENTARIOS
  18.  
  19. /*
  20. ===================
  21.      VARIABLES
  22. ===================
  23. */
  24.  
  25. const int dFisica = 100; // DIMENSION FISICA DE LOS ARREGLOS
  26.  
  27. int cantidad_categorias = 0;   // Variable para saber la dimension logica de las categorias
  28. int cantidad_prestamos = 0;    // Lo mismo que la anterior para los prestamos
  29. int cantidad_prestatarios = 0; // Lo mismo para los prestatarios
  30.  
  31. /*
  32. ================
  33.      STRUCS
  34. ================
  35. */
  36.  
  37. struct c
  38. { // Plantilla del struct para las categorias
  39.     int codigo_categoria;
  40.     string descripcion;
  41. };
  42.  
  43. struct pr
  44. { // Plantilla del struct para los prestamos
  45.     int codigo_categoria;
  46.     int prestatario;
  47.     string descripcion;
  48.     bool estado;
  49. };
  50.  
  51. struct pres
  52. { // Plantilla del struct para prestatarios
  53.     int codigo_prestatario;
  54.     string apellido;
  55.     string nombre;
  56. };
  57. struct nodoprestamo{
  58.     pr prestamo;
  59.     nodoprestamo* siguiente;
  60. };
  61.  
  62. c categorias[dFisica];
  63. pr prestamos[dFisica]; // Definicion de los 3 arreglos para almacenar categorias,prestamos y prestatarios.
  64. pres prestatarios[dFisica];
  65.  
  66. /*
  67. ===================
  68.      FUNCIONES
  69. ===================
  70. */
  71.  
  72. void limpiar()
  73. {
  74.     // Funcion limpiar
  75.     // PROPOSITO: Limpiar la pantalla mediante system("cls")
  76.     // PARAMETROS: No pide ningun parametro
  77.     // RETORNO:No retorna nada ya que es del tipo void
  78.  
  79.     system("cls");
  80. }
  81.  
  82. string mayuscula(string cadena)
  83. {
  84.     // Funcion mayuscula
  85.     // PROPOSITO: Hacer que el string ingresado, retorne en mayusculas, sirve para normalizar los string que se utilicen y evitar errores al compararlos
  86.     // PARAMETROS: Un string deseado para convertirlo en mayusculas
  87.     // RETORNO: Retorna un string que es el mismo que el ingresado, pero con todas sus letras en mayusculas
  88.  
  89.     for (int i = 0; i < cadena.length(); i++)
  90.     {
  91.         cadena[i] = toupper(cadena[i]);
  92.     }
  93.     return cadena;
  94. }
  95.  
  96. string agregarCategoria(string descripcion)
  97. {
  98.     // Funcion agregar_categoria
  99.     // PROPOSITO: Agregar una categoria al struct categorias, le asigna un codigo interno a la categoria y revisa que la categoria no este repetida
  100.     // PARAMETROS: Descripcion de la categoria a agregar
  101.     // RETORNO: Retorna un string que dice si se agrego o no la categoria
  102.     for (int i = 0; i <= cantidad_categorias; i++)
  103.     {
  104.         if (mayuscula(descripcion) == mayuscula(categorias[i].descripcion))
  105.         {
  106.             return ("La categoria que desea agregar ya existe!");
  107.         }
  108.     }
  109.     for (int i = 0; i <= cantidad_categorias; i++)
  110.     {
  111.         if (mayuscula(descripcion) != mayuscula(categorias[i].descripcion))
  112.         {
  113.             for (int j = cantidad_categorias; j < dFisica; j++)
  114.             {
  115.                 categorias[j].codigo_categoria = cantidad_categorias;
  116.                 categorias[j].descripcion = descripcion;
  117.                 cantidad_categorias++;
  118.                 return ("Categoria agregada satisfatoriamente!");
  119.             }
  120.         }
  121.     }
  122.     return ("default");
  123. }
  124.  
  125. string modificarCategoria(string descripcion)
  126. {
  127.     // Funcion modificar_categoria
  128.     // PROPOSITO: Modificar una categoria existente en el struct categorias
  129.     // PARAMETROS: Descripcion de la categoria a modificar
  130.     // RETORNO: Retorna un string que dice si la modificacion fue satisfatoria o no
  131.     string categoria_modif;
  132.     string aux = descripcion;
  133.     for (int i = 0; i <= cantidad_categorias; i++)
  134.     {
  135.         if (mayuscula(categorias[i].descripcion) == mayuscula(aux))
  136.         {
  137.             cout << "La categoria a modificar ingresada es correcta!" << endl;
  138.             cout << "\nA continuacion ingrese el nuevo nombre para la categoria: ";
  139.             cin >> categoria_modif;
  140.             categorias[i].descripcion = categoria_modif;
  141.             limpiar();
  142.             return ("Categoria modificada satisfactoriamente!");
  143.         }
  144.     }
  145.     for (int i = 0; i <= cantidad_categorias; i++)
  146.     {
  147.         if (mayuscula(categorias[i].descripcion) != mayuscula(aux))
  148.         {
  149.             return ("La categoria que desea modificar no existe!");
  150.         }
  151.     }
  152.     return ("default");
  153. }
  154.  
  155. string eliminarCategoria(string descripcion)
  156. {
  157.     // Funcion eliminar_categoria
  158.     // PROPOSITO: Eliminar una categoria del struct antes nombrado, si y solo si la categoria no tiene un prestamo en activo
  159.     // PARAMETROS: Descripcion de la categoria a eliminar
  160.     // RETORNO: Retorna un string que dice si se pudo eliminar o no la categoria
  161.     string descripcion_aux = descripcion;
  162.     int posicion = 0;
  163.     int codigo_cat = 0;
  164.     int codigoexiste = 0;
  165.     int codigoocupado = 0;
  166.     for (int i = 0; i < cantidad_categorias; i++)
  167.     {
  168.         if (mayuscula(descripcion_aux) == mayuscula(categorias[i].descripcion))
  169.         {
  170.             codigoexiste = 1;
  171.             codigo_cat = categorias[i].codigo_categoria;
  172.         }
  173.         else
  174.         {
  175.             codigoexiste = 0;
  176.         }
  177.     }
  178.     for (int i = 0; i < cantidad_prestamos; i++)
  179.     {
  180.         if (codigo_cat == prestamos[i].codigo_categoria)
  181.         {
  182.             codigoocupado = 1;
  183.         }
  184.         else
  185.         {
  186.             codigoocupado = 0;
  187.         }
  188.     }
  189.     if (codigoexiste == 1 && codigoocupado == 0)
  190.     {
  191.         for (int i = posicion; i < cantidad_categorias; i++)
  192.         {
  193.             categorias[i].descripcion = categorias[i + 1].descripcion;
  194.             categorias[i].codigo_categoria = categorias[i + 1].codigo_categoria;
  195.             return ("La categoria se ha eliminado satisfactoriamente!");
  196.         }
  197.     }
  198.     else if (codigoexiste == 1 && codigoocupado == 1)
  199.     {
  200.         return ("La categoria que desea eliminar existe pero esta adjudicada a un prestamo!");
  201.     }
  202.     else if (codigoexiste == 0)
  203.     {
  204.         return ("La categoria que desea eliminar no existe!");
  205.     }
  206. }
  207.  
  208. string agregarPrestatario(string nombre, string apellido)
  209. {
  210.     // Funcion agregarPrestatario
  211.     // PROPOSITO: Agregar un prestatario al struct prestatarios
  212.     // PARAMETROS: Nombre y Apellido del prestatario a agregar
  213.     // RETORNO: Retorna un string que dice si se agrego o no el prestatario
  214.     int repetidos = 0;
  215.     for (int i = 0; i <= cantidad_prestatarios; i++)
  216.     {
  217.         if (mayuscula(nombre) == mayuscula(prestatarios[i].nombre) && mayuscula(apellido) == mayuscula(prestatarios[i].apellido))
  218.         {
  219.             repetidos++;
  220.         }
  221.     }
  222.     if (repetidos == 0)
  223.     {
  224.         prestatarios[cantidad_prestatarios].nombre = nombre;
  225.         prestatarios[cantidad_prestatarios].apellido = apellido;
  226.         prestatarios[cantidad_prestatarios].codigo_prestatario = cantidad_prestatarios;
  227.         cantidad_prestatarios++;
  228.         return ("Prestatario agregado satisfatoriamente!");
  229.     }
  230.     return ("El prestatario que desea agregar ya existe!");
  231. }
  232.  
  233. string modificarPrestatario(string nombre, string apellido)
  234. {
  235.     // Funcion modificarPrestatario
  236.     // PROPOSITO: modificar prestatario ya agregado
  237.     // PARAMETROS: Nombre y apellido del prestatario a modificar
  238.     // RETORNO: Retorna un string que indica si se modifico o no al prestatario que se desea
  239.     string nombre_modif;
  240.     string apellido_modif;
  241.     string nombre_aux = nombre;
  242.     string apellido_aux = apellido;
  243.     for (int i = 0; i < cantidad_prestatarios; i++)
  244.     {
  245.         if (mayuscula(nombre_aux) == mayuscula(prestatarios[i].nombre) && mayuscula(apellido_aux) == mayuscula(prestatarios[i].apellido))
  246.         {
  247.             cout << "El prestatario a modificar es correcto!" << endl;
  248.             cout << "Ingrese el nuevo nombre del prestatario: ";
  249.             cin >> nombre_modif;
  250.             cout << "Ingrese el nuevo apellido del prestatario: ";
  251.             cin >> apellido_modif;
  252.             prestatarios[i].nombre = nombre_modif;
  253.             prestatarios[i].apellido = apellido_modif;
  254.             return ("Prestatario modificado satisfactoriamente!");
  255.         }
  256.     }
  257.     for (int i = 0; i < cantidad_prestatarios; i++)
  258.     {
  259.         if (mayuscula(nombre_aux) == mayuscula(prestatarios[i].nombre) && mayuscula(apellido_aux) == mayuscula(prestatarios[i].apellido))
  260.         {
  261.             return ("El prestatario que desea modificar no existe!");
  262.         }
  263.     }
  264.     return ("default");
  265. }
  266.  
  267. string eliminarPrestatario(string nombre, string apellido)
  268. {
  269.     // Funcion eliminarPrestatario
  270.     // PROPOSITO: Eliminar un prestatario ya inscripto, como las anteriores que dependen de que este inscripto o no, notifica al usuario si el prestatario no se encuentra registrado
  271.     // tambien checkea si el prestatario a eliminar no tiene un prestamo en activo, en caso de ser asi permite elminarlo, en caso de que tenga un prestamo no lo permite
  272.     // PARAMETROS: Nombre y apellido del prestatario a modificar
  273.     // RETORNO: Retorna un string que indica si se elimino o no al prestatario que se desea
  274.     for (int i = 0; i <= cantidad_prestatarios; i++)
  275.     {
  276.         if (mayuscula(nombre) == mayuscula(prestatarios[i].nombre) && mayuscula(apellido) == mayuscula(prestatarios[i].apellido))
  277.         {
  278.             for (; i < cantidad_prestatarios; i++)
  279.             {
  280.                 prestatarios[i].nombre = prestatarios[i + 1].nombre;
  281.                 prestatarios[i].apellido = prestatarios[i + 1].apellido;
  282.             }
  283.             return ("Prestatario eliminado correctamente");
  284.         }
  285.     }
  286.     return ("Prestatario no encontrado");
  287. }
  288.  
  289.  
  290.  
  291. nodoprestamo* agregarPrestamo(string categoria, string nombre, string apellido, string descripcion,nodoprestamo* inicio1)
  292. {
  293.     // Funcion agregarPrestamo
  294.     // PROPOSITO: Agregar un prestamo al struct de los mismos, generando un booleano que indica el estado del prestamo, TRUE=prestamo activo, FALSE=prestamo finalizado
  295.     // PARAMETROS: Categoria del prestamo(aclaracion es un string ya que no se usara el codigo de la categoria, sino la descripcion del primer struct
  296.     // llamado categorias para hacer mas facil al usuario el ingreso), aparte de este, se pide nombre y apellido del prestatario
  297.     // y por ultimo una descripcion del prestamo
  298.     // RETORNO: Retorna un string que indica si se agrego o no satisfatoriamente el prestamo a la base de datos
  299.  
  300.     string categoria_aux = categoria;
  301.     string nombre_aux = nombre;
  302.     string apellido_aux = apellido;
  303.     string descripcion_aux = descripcion;
  304.     for (int i = 0; i < cantidad_categorias; i++)
  305.     {
  306.         if (mayuscula(categoria_aux) == mayuscula(categorias[i].descripcion))
  307.         {
  308.             for (int j = 0; i <= cantidad_prestatarios; j++)
  309.             {
  310.                 if (mayuscula(nombre_aux) == mayuscula(prestatarios[j].nombre) && mayuscula(apellido_aux) == mayuscula(prestatarios[j].apellido))
  311.                 {
  312.                     limpiar();
  313.                     nodoprestamo* nuevo=new nodoprestamo();
  314.                     nuevo->prestamo.codigo_categoria=categorias[i].codigo_categoria;
  315.                     nuevo->prestamo.prestatario=prestatarios[j].codigo_prestatario;
  316.                     nuevo->prestamo.descripcion=descripcion_aux;
  317.                     nuevo->prestamo.estado=true;
  318.  
  319.                     nodoprestamo* aux1=inicio1;
  320.                     nodoprestamo* aux2;
  321.  
  322.                     while(aux1!=NULL){
  323.                         aux2=aux1;
  324.                         aux1=aux1->siguiente;
  325.                     }
  326.                     if (inicio1==aux1){
  327.                         inicio1=nuevo;
  328.                     }
  329.                     else{
  330.                         aux2->siguiente=nuevo;
  331.                     }
  332.                     nuevo->siguiente=aux1;
  333.                     cout<<"Prestamo agregado satisfactoriamente"<<endl;
  334.                     return(inicio1);
  335.  
  336.                 }
  337.                 else{
  338.                     cout<<"El prestatario al que desea adjudicar el prestamo no existe";
  339.                 }
  340.             }
  341.  
  342.         }
  343.         else{
  344.             cout<<"La categoria a la que desea adjudicar el prestamo no existe";
  345.         }
  346.     }
  347. }
  348.  
  349. void modificarPrestamo(string descripcion,nodoprestamo* inicio)
  350. {
  351.     // Funcion modificar_prestamo
  352.     // PROPOSITO: Modificar la descripcion de un prestamo que se encuentre en la base de datos, en caso de que no se encuentre se informa al usuario
  353.     // PARAMETROS: Descripcion del prestamo a modificar
  354.     // RETORNO: Retorna un string informando al usuario sobre el estado de la operacion realizada, en otras palabras si la modificacion salio bien o no
  355.        string descripcion_aux=descripcion;
  356.        string nueva_descripcion;
  357.        nodoprestamo* aux=new nodoprestamo;
  358.        bool existe=false;
  359.        aux=inicio;
  360.        if(inicio!=NULL){
  361.            while(aux!=NULL && existe==false){
  362.                if(aux->prestamo.descripcion==descripcion_aux){
  363.                    limpiar();
  364.                    cout<<"El prestamo buscado existe"<<endl;
  365.                    cout<<"Ingrese la nueva descripcion para el prestamo: ";
  366.                    cin>>nueva_descripcion;
  367.                    aux->prestamo.descripcion=nueva_descripcion;
  368.                    existe=true;
  369.                    cout<<"Prestamo modificado satisfactoriamente!"<<endl;
  370.                }
  371.                aux=aux->siguiente;
  372.            }
  373.            if(existe==false){
  374.                cout<<"El prestamo que desea modificar no existe"<<endl;
  375.            }
  376.        }
  377.        else{
  378.            cout<<"No existen prestamos registrados!"<<endl;          
  379. }
  380. }
  381. string eliminarPrestamo(string descripcion,nodoprestamo* inicio) //ERROR AL QUERER ELIMINAR CUANDO SE BORRO UN ELEMENTO DE LA LISTA PERO YA SE BORRO EL PRIMER ELEMENTO
  382. {
  383.     // Funcion eliminar_prestamo
  384.     // PROPOSITO: Eliminar un prestamo de la base de datos
  385.     // PARAMETROS: Se pide la descripcion del prestamo a eliminar
  386.     // RETORNO: Retorna un string que indica el estado de la operacion realizada
  387.     string descripcion_aux=descripcion;  
  388.     if(inicio!=NULL){
  389.         nodoprestamo* aux;
  390.         nodoprestamo* anterior=NULL;
  391.         aux=inicio;
  392.         while(aux!=NULL && mayuscula(aux->prestamo.descripcion)!= mayuscula(descripcion_aux)){
  393.             anterior=aux;
  394.             aux=aux->siguiente;
  395.         }
  396.         if(aux==NULL){
  397.             return("El prestamo que desea eliminar no existe");
  398.             delete aux;
  399.         }
  400.         else if(anterior==NULL){
  401.             inicio=inicio->siguiente;
  402.             delete aux;
  403.             return("Prestamo eliminado satisfactoriamente");
  404.         }
  405.         else{
  406.             anterior->siguiente=aux->siguiente;
  407.             delete aux;
  408.             return("Prestamo eliminado satisfactoriamente");
  409.         }
  410.     }
  411.     else{
  412.         return("No existen prestamos registrados!");
  413.     }
  414.     return("default");
  415. }
  416.  
  417. string terminar_prestamo(string descripcion,nodoprestamo* inicio)
  418. {
  419.     // Funcion terminar_prestamo
  420.     // PROPOSITO: Terminar un prestamo en activo, cambiando su parte booleana de true a false
  421.     // PARAMETROS: La descripcion del prestamo a terminar
  422.     // RETORNO: Retorna un string y como todas las anteriores, este string indica si la operacion fue satisfatoria o no
  423.     string descripcion_aux=descripcion;
  424.     nodoprestamo* aux=new nodoprestamo();
  425.     aux=inicio;
  426.     bool existe=false;
  427.     if(aux!=NULL){
  428.         while(aux!=NULL && existe==false){
  429.             if(mayuscula(aux->prestamo.descripcion)==mayuscula(descripcion_aux)){
  430.                 existe=true;
  431.                 aux->prestamo.estado=false;
  432.                 return("El prestamo se ha terminado satisfactoriamente!");
  433.             }
  434.             aux=aux->siguiente;
  435.         }
  436.         if (existe==false){
  437.             return("El prestamo que busca terminar no existe");
  438.         }
  439.     }
  440.     else{
  441.         return("No existen prestamos registrados");
  442.     }
  443.     return("default");
  444. }
  445.  
  446. string title(string frase)
  447. {
  448.     // FUNCION: title
  449.     // PROPOSITO: visual, retornar una cadena de caracteres en formato titulo
  450.     // PARAMETROS: string
  451.     // RETORNO: retorna un string en formato titulo
  452.     string frase_aux = frase;
  453.     frase_aux[0] = toupper(frase_aux[0]);
  454.     for (int i = 1; i < frase_aux.length(); i++)
  455.     {
  456.         frase_aux[i] = tolower(frase_aux[i]);
  457.     }
  458.     return (frase_aux);
  459. }
  460.  
  461. void imprimirCategorias(c categorias[], int cantidad_categorias)
  462. {
  463.     // Funcion imprimirCategorias
  464.     // PROPOSITO: Imprimir lista de categorias
  465.     // PARAMETROS: Struct categorias, int cantegorias
  466.     // RETORNO: Void, no retorna
  467.     cout << "\nCategorias:" << endl;
  468.     cout << endl;
  469.     for (int i = 0; i < cantidad_categorias; i++)
  470.     {
  471.         cout << i + 1 << ". " << categorias[i].descripcion << endl;
  472.     }
  473.     cout << endl;
  474. }
  475.  
  476. void imprimir_prestamos_por_categoria(string descripcion) //TERMINAR
  477. {
  478.     // Funcion imprimir_prestamos_por_categoria
  479.     // PROPOSITO: Imprimir los prestamos que presentan la categoria deseada
  480.     // Parametro: La descripcion de la categoria
  481.     // Retorno: Void, no retorna nada
  482.  
  483. }
  484.  
  485. void imprimirObjetos_Categoria(c categorias[], int cantidad_categorias)
  486. {
  487.     // Funcion imprimirObjetos_Categoria
  488.     // PROPOSITO: Imprimir lista de objetos prestados
  489.     // PARAMETROS: Struct de categorias
  490.     // RETORNO: Void, no retorna
  491.     for (int i = 0; i < cantidad_categorias; i++)
  492.         {
  493.             cout << "Objeto Prestado: " << categorias[i].descripcion << endl;
  494.         }
  495.  
  496. }
  497.  
  498. void imprimirPrestatarios(pres prestatarios[], int cantidad_prestatarios)
  499. {
  500.     // Funcion imprimirPrestatarios
  501.     // PROPOSITO: Imprimir lista de prestatarios
  502.     // PARAMETROS: Struct prestatarios
  503.     // RETORNO: Void, no retorna
  504.     for (int i = 0; i < cantidad_prestatarios; i++)
  505.     {
  506.         cout << "Prestatario: " << prestatarios[i].nombre << " " << prestatarios[i].apellido << endl;
  507.     }
  508. }
  509.  
  510. void cantidad_objetos_categoria(string descripcion) //TERMINAR
  511. {
  512.     // Funcion cantidad_objetos_categoria
  513.     // Proposito:Imprimir la cantidad de objetos para una categoria dada
  514.     // Parametros:Descripcion de la categoria a buscar
  515.     // Retorno:Void, no retorna nada
  516.     string descripcion_aux = mayuscula(descripcion);
  517.     int codigo_aux = 0;
  518.     int cantidad_aux = 0;
  519.     bool existe = false;
  520.     for (int i = 0; i < cantidad_categorias; i++)
  521.     {
  522.         if (descripcion_aux == mayuscula(categorias[i].descripcion))
  523.         {
  524.             codigo_aux = categorias[i].codigo_categoria;
  525.             existe = true;
  526.         }
  527.     }
  528.     if (existe == true)
  529.     {
  530.  
  531. }
  532. }
  533.  
  534. void imprimirOrdenCategoria() //TERMINAR
  535. {
  536.     // Funcion imprimirPorCategoria
  537.     // PROPOSITO: Imprimir lista de prestamos por orden categoria
  538.     // PARAMETROS: Ninguno
  539.     // RETORNO: Void, no retorna
  540.     int cantidad_aux1 = 0;
  541.     for (int i = 0; i < cantidad_categorias; i++)
  542.     {
  543.         cout << "Los prestamos de " << categorias[i].descripcion << " son: " << endl;
  544.  
  545.     }
  546. }
  547.  
  548. void imprimirOrdenPrestatario() //TERMINAR
  549. {
  550.     // Funcion imprimirPorCategoria
  551.     // PROPOSITO: Imprimir lista de prestamos por orden prestatario
  552.     // PARAMETROS: Ninguno
  553.     // RETORNO: Void, no retorna
  554.     int cantidad_aux2 = 0;
  555.     for (int i = 0; i < cantidad_prestatarios; i++)
  556.     {
  557.         cout << "Los prestamos de " << prestatarios[i].nombre << " " << prestatarios[i].apellido << " son:" << endl;
  558.  
  559.     }
  560. }
  561.  
  562. void imprimirPrestatarioActivo() //TERMINAR
  563. {
  564.     // Funcion imprimirPrestatarioActivo
  565.     // PROPOSITO: Imprimir lista de prestatarios con prestamos activos
  566.     // PARAMETROS: Ninguno
  567.     // RETORNO: Void, no retorna
  568.     cout << "\nLista de prestatarios con prestamos activos: " << endl;
  569.     cout << endl;
  570.  
  571. }
  572.  
  573. /*
  574. ======================
  575.      FUNCION MAIN
  576. ======================
  577. */
  578.  
  579. int main()
  580. {
  581.     nodoprestamo* inicio=new nodoprestamo;
  582.     inicio=NULL;
  583.     char seleccion, seleccionA, seleccionB, seleccionC;                                                                  // variables donde se almacenara la opcion del usuario
  584.     string categoriaAgregar, categoriaModificar, categoriaEliminar;                                                      // variables donde se almacenara los datos del usuario del inciso A
  585.     string nombrePrestatario, apellidoPrestatario, nombreModificar, apellidoModificar, nombreEliminar, apellidoEliminar; // variables donde se almacenara los datos del usuario del inciso A
  586.     string seleccionMenuB, ingresarCategoriaB, agregarNombreB, agregarApellidoB, descripcionPrestamoB;                   // Variables utilizadas en inciso B
  587.     string seleccionMenuC, opcion_c;
  588.     ; // Variables usadas en el inciso C
  589.  
  590.     // Menu principal, loopeado mediante un do/while
  591.  
  592.     do
  593.     {                                            // Do del menu principal, para permitir volver al menu tras realizada cualquier opcion del menu
  594.         cout << "\nBienvenido al menu!" << endl; // Se muestra el menu mediante un COUT
  595.         cout << "\nA: Administrar y consultar Categorias y Prestatarios." << endl;
  596.         cout << "B: Administrar Prestamos." << endl;
  597.         cout << "C: Consultar Prestamos." << endl;
  598.         cout << "D: Salir." << endl;
  599.         cout << "\nElija la opcion a utilizar: ";
  600.         cin >> seleccion; // CIN ingresa la opcion deseada
  601.  
  602.         seleccion = toupper(seleccion); // convertimos la letra en mayusculas para que sea indiferente el ingreso de mayuscula o minuscula
  603.  
  604.         switch (seleccion)
  605.         {
  606.         case 'A':      // PRIMER CASO DEL MENU PRINCIPAL
  607.             limpiar(); // LIMPIA PANTALLA DEL MENU PRINCIPAL
  608.             do
  609.             { // Do del menu de la opcion A, para permitir volver al menu tras realizada cualquier seleccion
  610.                 cout << "\nOPCION A: Administracion y consulta de Categorias y Prestatarios!" << endl;
  611.                 cout << "\nA: Agregar categoria." << endl;
  612.                 cout << "B: Modificar categoria." << endl;   // Se pone en pantalla las opciones del apartado
  613.                 cout << "C: Eliminar categoria." << endl;    // Administracion y consultas de categorias
  614.                 cout << "\nD: Agregar prestatario." << endl; // Con un funcionamiento casi igual al principal
  615.                 cout << "E: Modificar prestatario." << endl; // Permite ingresar al usuario otra opcion del menu
  616.                 cout << "F: Eliminar prestatario." << endl;  // Y como en el principal, se comprueba si la opcion ingresada
  617.                 cout << "\nG: Volver al menu principal." << endl;
  618.                 cout << "\nElija la opcion a utilizar: "; // Es o no correcta.
  619.                 cin >> seleccionA;
  620.  
  621.                 seleccionA = toupper(seleccionA);
  622.  
  623.                 switch (seleccionA)
  624.                 {
  625.                 case 'A':
  626.                     cout << "\nOPCION A: Ingrese la categoria a agregar: "; // Se pide la categoria a agregar
  627.                     getline(cin >> ws, categoriaAgregar);                   // Se ingresa en la variable
  628.                     limpiar();                                              // Limpia pantalla
  629.                     cout << agregarCategoria(categoriaAgregar) << endl;     // Se ejecuta la funcion que la agrega en el struct
  630.                     break;
  631.  
  632.                 case 'B':
  633.                     cout << "\nOPCION B: Ingrese la categoria a modificar: "; // Se pide categoria a modificar
  634.                     getline(cin >> ws, categoriaModificar);                   // Se ingresa en la variable para ser modificada
  635.                     limpiar();                                                // Limpia pantalla
  636.                     cout << modificarCategoria(categoriaModificar) << endl;   // Se ejecuta la funcion que modifica la categoria
  637.                     break;
  638.  
  639.                 case 'C':
  640.                     cout << "\nOPCION C: Ingrese categoria a eliminar: "; // Se pide categoria a eliminar
  641.                     getline(cin >> ws, categoriaEliminar);                // Se ingresa la categoria
  642.                     limpiar();                                            // Se limpia pantalla
  643.                     cout << eliminarCategoria(categoriaEliminar) << endl; // Se elimina la categoria mediante la funcion
  644.                     break;
  645.  
  646.                 case 'D':
  647.                     cout << "\nOPCION D: Ingrese nombre del prestatario: ";                     // Se pide el nombre del prestatario
  648.                     getline(cin >> ws, nombrePrestatario);                                      // Se ingresa el nombre en la variable
  649.                     cout << "\nIngrese appelido del prestatario: ";                             // Se pide el apellido del prestatario
  650.                     getline(cin >> ws, apellidoPrestatario);                                    // Se ingresa el apellido en la variable
  651.                     limpiar();                                                                  // Se limpia pantalla
  652.                     cout << agregarPrestatario(nombrePrestatario, apellidoPrestatario) << endl; // Se procesan los datos en la funcion
  653.                     break;
  654.  
  655.                 case 'E':
  656.                     cout << "\nOPCION E: Ingrese nombre a modificar: ";                       // Se pide el nombre del prestatario a modificar
  657.                     getline(cin >> ws, nombreModificar);                                      // Se ingresa el nombre en la variable
  658.                     cout << "\nIngrese apellido a modificar: ";                               // Se pide el apellido del prestatario a modificar
  659.                     getline(cin >> ws, apellidoModificar);                                    // Se ingresa el apellido en la variable
  660.                     limpiar();                                                                // Se limpia pantalla
  661.                     cout << modificarPrestatario(nombreModificar, apellidoModificar) << endl; // Se modifica el nombre y apellido del prestatario mediante la funcion
  662.                     break;
  663.  
  664.                 case 'F':
  665.                     cout << "OPCION F: Ingrese nombre del prestatario a eliminar: ";       // Se pide el nombre del prestatario a modificar
  666.                     getline(cin >> ws, nombreEliminar);                                    // Se ingresa el nombre en la variable
  667.                     cout << "\nIngrese apellido del prestatario a eliminar: ";             // Se pide el apellido del prestatario a modificar
  668.                     getline(cin >> ws, apellidoEliminar);                                  // Se ingresa el apellido en la variable
  669.                     limpiar();                                                             // Se limpia pantalla
  670.                     cout << eliminarPrestatario(nombreEliminar, apellidoEliminar) << endl; // Se elimina el prestatario mdeiante la funcion
  671.                     break;
  672.                 case 'G':
  673.                     limpiar();
  674.                     cout << "'G': VOLVIENDO AL MENU PRINCIPAL" << endl; // MUESTRA EN PANTALLA LA OPCION SELECCIONADA Y REGRESA AL MENU PRINCIPAL
  675.                     break;
  676.  
  677.                 default:
  678.                     // EN EL CASO DE QUE INGRESE UNA LETRA ERRONEA, EL PROGRAMA MOSTRARA
  679.                     // ESTE MENSAJE Y LE DEJARA VOLVER A INGRESAR OTRA LETRA
  680.                     limpiar(); // se limpia la pantalla
  681.                     cout << "\nPOR FAVOR, SELECCIONE UNA OPCION VALIDA." << endl;
  682.                     break;
  683.                 }
  684.             } while (seleccionA != 'G');
  685.             break;
  686.  
  687.         case 'B':      // SEGUNDO CASO DEL MENU PRINCIPAL
  688.             limpiar(); // LIMPIA PANTALLA DEL MENU PRINCIPAL
  689.             do
  690.             { // Do del menu B, para permitir volver al menu tras realizada cualquier seleccion
  691.                 cout << "\nOPCION B: Administracion de Prestamos!" << endl;
  692.                 cout << "\nA: Agregar prestamo." << endl;
  693.                 cout << "B: Modificar prestamo." << endl; // Se ponen en pantalla las opciones del la opcion B
  694.                 cout << "C: Eliminar prestamo." << endl;
  695.                 cout << "D: Devolver prestamo." << endl;
  696.                 cout << "\nE: Volver al menu principal." << endl;
  697.                 cout << "\nElija la opcion a utilizar: ";
  698.                 cin >> seleccionB; // Se ingresa la opcion seleccionada
  699.  
  700.                 seleccionB = toupper(seleccionB);
  701.  
  702.                 switch (seleccionB)
  703.                 {
  704.                 case 'A':
  705.                     limpiar();
  706.                     cout << "Desea ver las categorias actuales para su Prestamo?" << endl; // Se pregunta al usuario si desea ver las categorias existentes para su prestamo
  707.                     cout << "S/N: ";
  708.                     cin >> seleccionMenuB; // Se ingresa s o n para si o no respectivamente
  709.                     if (mayuscula(seleccionMenuB) == "S")
  710.                     { // Se comprueba que se elija si
  711.  
  712.                         imprimirObjetos_Categoria(categorias, cantidad_categorias); // Se realizaria la muestra de las categorias para los prestamos
  713.  
  714.                         cout << "Ingrese una categoria para el prestamo: ";
  715.                         cin >> ingresarCategoriaB; // Y le permite ingresar la descripcion de la categoria
  716.                     }
  717.                     else if (mayuscula(seleccionMenuB) == "N")
  718.                     {                                                       // Se comprueba si eligio no
  719.                         cout << "Ingrese una categoria para el prestamo: "; // En caso de que no, se le da la opcion a ingresar una categoria sin ver todas
  720.                         cin >> ingresarCategoriaB;                          // Se ingresa la eleccion
  721.                     }
  722.  
  723.                     cout << "Desea ver los prestatarios ya inscriptos?" << endl; // Se realiza lo mismo que en la pregunta anterior pero con los prestatarios
  724.                     cout << "S/N: ";
  725.                     cin >> seleccionMenuB;
  726.                     if (mayuscula(seleccionMenuB) == "S")
  727.                     { // Caso Si
  728.  
  729.                         imprimirPrestatarios(prestatarios, cantidad_prestatarios); // Se realizaria la muestra de los prestatarios
  730.  
  731.                         cout << "Ingrese el nombre del prestatario para el prestamo: "; // Se pide el nombre del prestatario
  732.                         cin >> agregarNombreB;                                          // Se ingresa el nombre
  733.                         cout << "Ingrese el apellido para el prestamo: ";               // Se pide el apellido del prestatario
  734.                         cin >> agregarApellidoB;                                        // Se ingresa
  735.                     }
  736.  
  737.                     // ACLARACION, en la funcion se busca el codigo del prestatario y el codigo de la categoria, para poder almacenar en el struct prestamos
  738.  
  739.                     else if (mayuscula(seleccionMenuB) == "N")
  740.                     {                                                                   // Caso No
  741.                         cout << "Ingrese el nombre del prestatario para el prestamo: "; // Se piden e ingresan directamente nombre y
  742.                         cin >> agregarNombreB;                                          // apellido del prestatario para el prestamo
  743.                         cout << "Ingrese el apellido del prestatario para el prestamo: ";
  744.                         cin >> agregarApellidoB;
  745.                     }
  746.  
  747.                     cout << "Ingrese una descripcion para el prestamo: "; // Se pide ingresar una descripcion al prestamo
  748.                     cin >> descripcionPrestamoB;                          // Se ingresa
  749.                     limpiar();
  750.                     inicio=agregarPrestamo(ingresarCategoriaB, agregarNombreB, agregarApellidoB, descripcionPrestamoB,inicio);
  751.                     // Se llama a la funcion para agregar prestamo y con el cout se impreme el retorno de la funcion que es un mensaje de error o no error
  752.                     break;
  753.  
  754.                 case 'B':
  755.                     limpiar();
  756.                     cout << "\nOPCION B: Ingrese la descripcion del prestamo a modificar: "; // Se le pide al usuario ingresarla
  757.                     cin >> descripcionPrestamoB;                                             // Se ingresa
  758.                     limpiar();
  759.                     modificarPrestamo(descripcionPrestamoB,inicio);
  760.                     // Se llama a la funcion modificar_prestamo y con el cout se imprime el mensaje de error o no que devuelve la funcion
  761.                     break;
  762.  
  763.                 case 'C':
  764.                     limpiar();
  765.                     cout << "\nOPCION C: Ingrese la descripcion del prestamo a eliminar: "; // Se pide al usuario
  766.                     cin >> descripcionPrestamoB;                                            // Se Ingresa
  767.                     cout << eliminarPrestamo(descripcionPrestamoB,inicio) << endl;                 // Se llama a la funcion con un cout como en los anteriores casos para poder devolver el mensaje de error o lo contrario
  768.                     break;
  769.  
  770.                 case 'D':
  771.                     limpiar();
  772.                     cout << "\nOPCION D: Ingrese la descripcion del prestamo a devolver: "; // Se pide al usuario
  773.                     cin >> descripcionPrestamoB;                                            // Se ingresa
  774.                     cout << terminar_prestamo(descripcionPrestamoB,inicio) << endl;                // Se llama a la funcion con el parametro de la descripcion ingresada y se devuelve el mensaje de correcto o error
  775.                     break;
  776.  
  777.                 case 'E':
  778.                     limpiar();
  779.                     cout << "'E': VOLVIENDO AL MENU PRINCIPAL" << endl; // MUESTRA EN PANTALLA LA OPCION SELECCIONADA
  780.                     break;
  781.  
  782.                 default:
  783.                     // EN EL CASO DE QUE INGRESE UNA LETRA ERRONEA, EL PROGRAMA MOSTRARA
  784.                     // ESTE MENSAJE Y LE DEJARA VOLVER A INGRESAR OTRA LETRA
  785.                     limpiar(); // se limpia la pantalla
  786.                     cout << "\nPOR FAVOR, SELECCIONE UNA OPCION VALIDA." << endl;
  787.                     break;
  788.                 }
  789.             } while (seleccionB != 'E');
  790.             break;
  791.  
  792.         case 'C':      // TERCER CASO DEL MENU PRINCIPAL
  793.             limpiar(); // LIMPIA PANTALLA DEL MENU PRINCIPAL
  794.             do
  795.             { // Do del menu de la opcion C, para permitir volver al menu tras realizada cualquier seleccion
  796.                 cout << "\nOPCION C:Consultas de Prestamos!" << endl;
  797.                 cout << "\nA: Cantidad de objetos prestados por categoria." << endl;
  798.                 cout << "B: Listado de prestamos por categoria." << endl; // Se ponen en pantalla las opciones
  799.                 cout << "C: Listado de prestamos ordenados por prestatario o categoria." << endl;
  800.                 cout << "D: Prestatarios con objetos en prestamo." << endl;
  801.                 cout << "\nE: Volver al menu principal." << endl;
  802.                 cout << "\nElija la opcion a utilizar: ";
  803.                 cin >> seleccionC; // Se ingresa el numero de opcion
  804.  
  805.                 seleccionC = toupper(seleccionC);
  806.  
  807.                 switch (seleccionC)
  808.                 {
  809.                 case 'A':
  810.                     limpiar(); // se limpia pantalla
  811.                     cout << "OPCION A" << endl;
  812.                     imprimirCategorias(categorias, cantidad_categorias);                                           // imprime las categorias para que los usuarios puedan seleccionar la que desean
  813.                     cout << "\nIngrese la categoria de la que desea conocer la cantidad de objetos en prestamo: "; // se pide al usuario
  814.                     getline(cin >> ws, categoriaAgregar);                                                          // se ingresa
  815.                     cantidad_objetos_categoria(categoriaAgregar);                                                  // se imprime en pantalla
  816.                     break;
  817.  
  818.                 case 'B':
  819.                     limpiar(); // se limpia pantalla
  820.                     cout << "OPCION B" << endl;
  821.                     imprimirCategorias(categorias, cantidad_categorias);                            // imprime las categorias para que los usuarios puedan seleccionar la que desean
  822.                     cout << "Ingrese la categoria de la que desea conocer los prestamos activos: "; // se pide al usuario
  823.                     cin >> categoriaAgregar;                                                        // se ingresa
  824.                     imprimir_prestamos_por_categoria(categoriaAgregar);                             // se imprime en pantalla
  825.                     break;
  826.  
  827.                 case 'C':
  828.                     limpiar(); // se limpia pantalla
  829.                     cout << "OPCION C" << endl;
  830.                     cout << "Desea ver los prestamos ordenados por categoria o por prestatario(C/P): " << endl; // se pregunta al usuario
  831.                     cin >> opcion_c;                                                                            // se ingresa
  832.                     if (mayuscula(opcion_c) == "C")                                                             // se verifica
  833.                     {
  834.                         imprimirOrdenCategoria(); // se imprime
  835.                         break;
  836.                     }
  837.                     else if (mayuscula(opcion_c) == "P")
  838.                     {
  839.                         imprimirOrdenPrestatario(); // se imprime
  840.                         break;
  841.                     }
  842.  
  843.                 case 'D':
  844.                     limpiar();                    // LIMPIA LA PANTALLA
  845.                     cout << "\nOPCION D" << endl; // MUESTRA EN PANTALLA
  846.                     imprimirPrestatarioActivo();  // SE EJECUTA LA FUNCION QUE MUESTRA LOS PRESTATARIOS ACTIVOS
  847.                     break;
  848.  
  849.                 case 'E':
  850.                     limpiar();
  851.                     cout << "'E': VOLVIENDO AL MENU PRINCIPAL" << endl; // MUESTRA EN PANTALLA LA OPCION SELECCIONADA
  852.                     break;
  853.  
  854.                 default:
  855.                     // EN EL CASO DE QUE INGRESE UNA LETRA ERRONEA, EL PROGRAMA MOSTRARA
  856.                     // ESTE MENSAJE Y LE DEJARA VOLVER A INGRESAR OTRA LETRA
  857.                     limpiar(); // se limpia la pantalla
  858.                     cout << "\nPOR FAVOR, SELECCIONE UNA OPCION VALIDA." << endl;
  859.                     break;
  860.                 }
  861.             } while (seleccionC != 'E');
  862.             break;
  863.  
  864.         case 'D':
  865.             cout << "\nSELECCIONO LA OPCION SALIR." << endl; // MUESTRA EN PANTALLA QUE OPCION SELECCIONO
  866.             break;
  867.  
  868.         default:
  869.             // EN EL CASO DE QUE INGRESE UNA LETRA ERRONEA, EL PROGRAMA MOSTRARA
  870.             // ESTE MENSAJE Y LE DEJARA VOLVER A INGRESAR OTRA LETRA
  871.             limpiar(); // se limpia la pantalla
  872.             cout << "\nPOR FAVOR, SELECCIONE UNA OPCION VALIDA." << endl;
  873.             break;
  874.         }
  875.     } while (seleccion != 'D');
  876.  
  877.     cout << "\nFIN DEL PROGRAMA." << endl; // MUESTRA EN PANTALLA UN MENSAJE DE FIN
  878.  
  879.     getch();
  880.  
  881.     return 0;
  882. }
  883.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement