Advertisement
Brunoroman

PI ENTREGA 5.0

Nov 22nd, 2021
992
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 58.25 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. /*
  11. ===================
  12.      VARIABLES
  13. ===================
  14. */
  15.  
  16. const int dFisica = 100; // DIMENSION FISICA DE LOS ARREGLOS
  17.  
  18. int cantidad_categorias = 0;   // Variable para saber la dimension logica de las categorias
  19. int cantidad_prestamos = 0;    // Lo mismo que la anterior para los prestamos
  20. int cantidad_prestatarios = 0; // Lo mismo para los prestatarios
  21.  
  22. /*
  23. ================
  24.      STRUCS
  25. ================
  26. */
  27.  
  28. struct categoria
  29. { // Plantilla del struct para las categorias
  30.     int codigo_categoria;
  31.     string descripcion;
  32. };
  33.  
  34. struct prestamo
  35. { // Plantilla del struct para los prestamos
  36.     int codigo_categoria;
  37.     int prestatario;
  38.     string descripcion;
  39.     bool estado;
  40. };
  41.  
  42. struct prestatario
  43. { // Plantilla del struct para prestatarios
  44.     int codigo_prestatario;
  45.     string apellido;
  46.     string nombre;
  47. };
  48. struct nodoprestamo{
  49.     //Plantilla del struct para cada nodo de prestamos
  50.     prestamo prestamo;
  51.     nodoprestamo* siguiente;
  52. };
  53.  
  54. categoria categorias[dFisica]; //Definicion de los arreglos estaticos para las categorias y los prestatarios
  55. prestatario prestatarios[dFisica];
  56.  
  57. /*
  58. ===================
  59.      FUNCIONES
  60. ===================
  61. */
  62.  
  63. void limpiar()
  64. {
  65.     // Funcion limpiar
  66.     // PROPOSITO: Limpiar la pantalla mediante system("cls")
  67.     // PARAMETROS: No pide ningun parametro
  68.     // RETORNO:No retorna nada ya que es del tipo void
  69.  
  70.     system("cls");
  71. }
  72.  
  73. string mayuscula(string cadena)
  74. {
  75.     // Funcion mayuscula
  76.     // PROPOSITO: Hacer que el string ingresado, retorne en mayusculas, sirve para normalizar los string que se utilicen y evitar errores al compararlos
  77.     // PARAMETROS: Un string deseado para convertirlo en mayusculas
  78.     // RETORNO: Retorna un string que es el mismo que el ingresado, pero con todas sus letras en mayusculas
  79.     int largo=cadena.length(); //Se busca el largo de la cadena
  80.  
  81.     for (int i = 0; i < largo; i++) //Se recorre la cadena haciendo que sus elementos se transformen en su version toupper(mayuscula)
  82.     {
  83.         cadena[i] = toupper(cadena[i]);
  84.     }
  85.     return cadena; //Se retorna la cadena
  86. }
  87.  
  88. string title(string frase)
  89. {
  90.     // FUNCION: title
  91.     // PROPOSITO: visual, retornar una cadena de caracteres en formato titulo
  92.     // PARAMETROS: string
  93.     // RETORNO: retorna un string en formato titulo
  94.  
  95.     string frase_aux = frase; //Se crea una cadena auxiliar
  96.     int largo=frase_aux.length(); //Se almacena el largo de la cadena en la variable "largo"
  97.     frase_aux[0] = toupper(frase_aux[0]); //Se pone la primera letra en mayuscula
  98.     for (int i = 1; i < largo; i++) //Se recorre la cadena desde la segunda letra poniendo las letras en minuscula
  99.     {
  100.         frase_aux[i] = tolower(frase_aux[i]);
  101.     }
  102.     return (frase_aux); //Se retorna la cadena
  103. }
  104.  
  105. void imprimirObjetos_Categoria(categoria categorias[], int cantidad_categorias)
  106. {
  107.     // Funcion imprimirObjetos_Categoria
  108.     // PROPOSITO: Imprimir lista de objetos prestados
  109.     // PARAMETROS: Struct de categorias
  110.     // RETORNO: Void, no retorna
  111.  
  112.     for (int i = 0; i < cantidad_categorias; i++) //Se recorre el arreglo de categorias
  113.         {
  114.             cout<<"Objeto Prestado: "<<title(categorias[i].descripcion)<<" codigo: "<<categorias[i].codigo_categoria<< endl; //Se imprimen las descripciones de cada una
  115.         }
  116.  
  117. }
  118.  
  119. void imprimirPrestatarios(prestatario prestatarios[], int cantidad_prestatarios)
  120. {
  121.     // Funcion imprimirPrestatarios
  122.     // PROPOSITO: Imprimir lista de prestatarios
  123.     // PARAMETROS: Struct prestatarios
  124.     // RETORNO: Void, no retorna
  125.  
  126.     for (int i = 0; i < cantidad_prestatarios; i++) //Se recorre el arreglo de prestatarios
  127.     {
  128.         cout << "Prestatario: " << title(prestatarios[i].nombre) << " " << title(prestatarios[i].apellido) <<" codigo: "<<prestatarios[i].codigo_prestatario<< endl; //Se imprimen nombre y apellido de cada prestatario
  129.     }
  130. }
  131.  
  132. void imprimirCategorias(categoria categorias[], int cantidad_categorias)
  133. {
  134.     // Funcion imprimirCategorias
  135.     // PROPOSITO: Imprimir lista de categorias
  136.     // PARAMETROS: Struct categorias, int cantegorias
  137.     // RETORNO: Void, no retorna
  138.  
  139.     cout << "\nCategorias:" << endl;
  140.     cout << endl;
  141.     for (int i = 0; i < cantidad_categorias; i++) //Se recorre el arreglo categorias y se imprimen las categorias existentes
  142.     {
  143.         cout << i + 1 << ". " << categorias[i].descripcion <<" codigo: "<<categorias[i].codigo_categoria<< endl;
  144.     }
  145.     cout << endl;
  146. }
  147.  
  148. string agregarCategoria(string descripcion)
  149. {
  150.     // Funcion agregar_categoria
  151.     // PROPOSITO: Agregar una categoria al struct categorias, le asigna un codigo interno a la categoria y revisa que la categoria no este repetida
  152.     // PARAMETROS: Descripcion de la categoria a agregar
  153.     // RETORNO: Retorna un string que dice si se agrego o no la categoria
  154.  
  155.     for (int i = 0; i <= cantidad_categorias; i++)
  156.     {
  157.         if (mayuscula(descripcion) == mayuscula(categorias[i].descripcion))
  158.         {
  159.             return ("La categoria que desea agregar ya existe!"); //Se comprueba recorriendo el arreglo de categorias, si la categoria ya se encuentra registrada
  160.         }
  161.     }
  162.     for (int i = 0; i <= cantidad_categorias; i++)
  163.     {
  164.         if (mayuscula(descripcion) != mayuscula(categorias[i].descripcion)) //Se recorre el arreglo
  165.         {
  166.             for (int j = cantidad_categorias; j < dFisica; j++)
  167.             {
  168.                 categorias[j].codigo_categoria = cantidad_categorias; //Se almacena los datos de la categoria
  169.                 categorias[j].descripcion = descripcion;
  170.                 cantidad_categorias++; //Se aumenta el numero de categorias
  171.                 return ("Categoria agregada satisfatoriamente!"); //Se retorna el mensaje de exito
  172.             }
  173.         }
  174.     }
  175.     return ("default");
  176. }
  177.  
  178. string modificarCategoria(string descripcion)
  179. {
  180.     // Funcion modificar_categoria
  181.     // PROPOSITO: Modificar una categoria existente en el struct categorias
  182.     // PARAMETROS: Descripcion de la categoria a modificar
  183.     // RETORNO: Retorna un string que dice si la modificacion fue satisfatoria o no
  184.  
  185.     string categoria_modif;
  186.     string aux = descripcion;
  187.  
  188.     for (int i = 0; i <= cantidad_categorias; i++)
  189.     {
  190.         if (mayuscula(categorias[i].descripcion) == mayuscula(aux)) //Se recorre el arreglo para ver si existe la categoria a modificar
  191.         {
  192.             cout << "La categoria a modificar ingresada es correcta!" << endl; //Se informa que xiste
  193.             cout << "\nA continuacion ingrese el nuevo nombre para la categoria: "; //Se pide que se ingrese el nuevo nombre
  194.             cin >> categoria_modif;
  195.             categorias[i].descripcion = categoria_modif; //Se cambia
  196.             limpiar();
  197.             return ("Categoria modificada satisfactoriamente!"); //Se retorna el mensaje de exito
  198.         }
  199.     }
  200.     for (int i = 0; i <= cantidad_categorias; i++)
  201.     {
  202.         if (mayuscula(categorias[i].descripcion) != mayuscula(aux))
  203.         {
  204.             return ("La categoria que desea modificar no existe!"); //Se recorre en diferido para evitar que se informe mas de una vez que no es igual
  205.         }
  206.     }
  207.     return ("default");
  208. }
  209.  
  210. string eliminarCategoria(string descripcion,nodoprestamo* inicio)
  211. {
  212.     // Funcion eliminar_categoria
  213.     // PROPOSITO: Eliminar una categoria del struct antes nombrado, si y solo si la categoria no tiene un prestamo en activo
  214.     // PARAMETROS: Descripcion de la categoria a eliminar y el inicio de la lista de prestamos
  215.     // RETORNO: Retorna un string que dice si se pudo eliminar o no la categoria
  216.  
  217.     string descripcion_aux = descripcion;
  218.     int posicion = 0;
  219.     int codigo_cat = 0;
  220.     bool ocupado=false;
  221.     bool existe=false;
  222.     for(int i=0;i<cantidad_categorias;i++){
  223.         if(mayuscula(descripcion_aux)==mayuscula(categorias[i].descripcion)){  //Se recorre el arreglo para ver si existe la categoria
  224.             codigo_cat=categorias[i].codigo_categoria;
  225.             posicion=i;
  226.             existe=true;
  227.             break;
  228.         }
  229.     }
  230.     if(existe==true){ //Si existe se pasa a recorrer la lista de prestamos para ver si se encuentra utilizada la categoria
  231.         nodoprestamo* aux=new nodoprestamo;
  232.         aux=inicio;
  233.         if(aux!=NULL){
  234.             while(aux!=NULL && ocupado==false){
  235.                 if(codigo_cat==aux->prestamo.codigo_categoria){
  236.                     ocupado=true; //Si se encuentra, el bool ocupado toma el valor true
  237.                 }
  238.                 aux=aux->siguiente;
  239.             }
  240.         }
  241.         if(ocupado!=true){ //Si no esta ocupada la categoria, se pasa a eliminar la categoria
  242.             for(int i=posicion;i<cantidad_categorias;i++){
  243.                 categorias[i]=categorias[i+1];
  244.                 cantidad_categorias--;
  245.                 return("Categoria eliminada satisfactoriamente!");
  246.             }
  247.         }
  248.         else if(ocupado==true){ // Si se encuentra ocupada se informa que no es posible eliminar
  249.             return("La categoria que desea eliminar se encuentra registrada en un prestamo, no es posible eliminarla");
  250.         }
  251.     }
  252.     else{ //Si el bool existe sigue en false, se informa que no existe la categoria
  253.         return("La categoria que desea eliminar no existe");
  254.     }
  255.     return("Default");
  256. }
  257.  
  258. string agregarPrestatario(string nombre, string apellido)
  259. {
  260.     // Funcion agregarPrestatario
  261.     // PROPOSITO: Agregar un prestatario al struct prestatarios
  262.     // PARAMETROS: Nombre y Apellido del prestatario a agregar
  263.     // RETORNO: Retorna un string que dice si se agrego o no el prestatario
  264.  
  265.     int repetidos = 0;
  266.     for (int i = 0; i <= cantidad_prestatarios; i++)
  267.     {
  268.         if (mayuscula(nombre) == mayuscula(prestatarios[i].nombre) && mayuscula(apellido) == mayuscula(prestatarios[i].apellido))
  269.         {
  270.             repetidos++; //Se recorre el arreglo de prestatarios para comprobar que el prestatario a agregar se encuentra o no registrado ya
  271.         }
  272.     }
  273.     if (repetidos == 0) //Si repetidos es igual a 0(lo que indica que no se encuentra registrado ya, se pasa a agregar el prestatario al arreglo
  274.     {
  275.         prestatarios[cantidad_prestatarios].nombre = nombre;
  276.         prestatarios[cantidad_prestatarios].apellido = apellido;
  277.         prestatarios[cantidad_prestatarios].codigo_prestatario = cantidad_prestatarios;
  278.         cantidad_prestatarios++;
  279.         return ("Prestatario agregado satisfatoriamente!");
  280.     }
  281.     else{//Si repetido es diferente de 0, el prestatario ya se encuentra registrado, por lo tanto se informa que no se puede agregar
  282.         return ("El prestatario que desea agregar ya existe!");
  283.     }
  284. }
  285.  
  286. string modificarPrestatario(string nombre, string apellido)
  287. {
  288.     // Funcion modificarPrestatario
  289.     // PROPOSITO: modificar prestatario ya agregado
  290.     // PARAMETROS: Nombre y apellido del prestatario a modificar
  291.     // RETORNO: Retorna un string que indica si se modifico o no al prestatario que se desea
  292.  
  293.     string nombre_modif;
  294.     string apellido_modif;
  295.     string nombre_aux = nombre;
  296.     string apellido_aux = apellido;
  297.     for (int i = 0; i < cantidad_prestatarios; i++)
  298.     {
  299.         if (mayuscula(nombre_aux) == mayuscula(prestatarios[i].nombre) && mayuscula(apellido_aux) == mayuscula(prestatarios[i].apellido))
  300.         {   //Se recorre el arreglo para comprobar si el prestatario existe
  301.             cout << "El prestatario a modificar es correcto!" << endl; //Si existe se pasa a pedir al usuario el nuevo nombre y apellido para el prestatario
  302.             cout << "Ingrese el nuevo nombre del prestatario: ";
  303.             cin >> nombre_modif;
  304.             cout << "Ingrese el nuevo apellido del prestatario: ";
  305.             cin >> apellido_modif;
  306.             prestatarios[i].nombre = nombre_modif; //Se cambian los dos parametros, por los nuevos
  307.             prestatarios[i].apellido = apellido_modif;
  308.             return ("Prestatario modificado satisfactoriamente!"); //Se retorna para informar al usuario el exito de la operacion
  309.         }
  310.     }
  311.     for (int i = 0; i < cantidad_prestatarios; i++) //Se recorre el arreglo
  312.     {
  313.         if (mayuscula(nombre_aux) != mayuscula(prestatarios[i].nombre) && mayuscula(apellido_aux) != mayuscula(prestatarios[i].apellido))
  314.         {
  315.             return ("El prestatario que desea modificar no existe!"); //Para poder avisar que el prestatario a modificar no existe, retornando el mensaje de error
  316.         }
  317.     }
  318.     return ("default");
  319. }
  320.  
  321. string eliminarPrestatario(string nombre, string apellido, nodoprestamo* inicio)
  322. {
  323.     // Funcion eliminarPrestatario
  324.     // 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
  325.     // 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
  326.     // PARAMETROS: Nombre y apellido del prestatario a modificar y el comienzo de la lista de prestamos.
  327.     // RETORNO: Retorna un string que indica si se elimino o no al prestatario que se desea.
  328.  
  329.     string nombre_aux=nombre;
  330.     string apellido_aux=apellido;
  331.     int posicion = 0;
  332.     int codigo_presta = 0;
  333.     bool ocupado=false;
  334.     bool existe=false;
  335.     for(int i=0;i<cantidad_prestatarios;i++){ //Con el mismo funcionamiento que eliminarCategoria
  336.         if(mayuscula(nombre_aux)==mayuscula(prestatarios[i].nombre)&&mayuscula(apellido_aux)==mayuscula(prestatarios[i].apellido)){
  337.             codigo_presta=prestatarios[i].codigo_prestatario;
  338.             posicion=i;
  339.             existe=true;  //Se revisa el arreglo de prestatarios para ver si existe, en caso de que si se pone existe en true
  340.             break;
  341.         }
  342.  
  343.     }
  344.     if(existe==true){      //En caso de que existe sea true, se pasa a ver si tiene un prestamo registrado el prestatario
  345.         nodoprestamo* aux=new nodoprestamo;
  346.         aux=inicio;
  347.         if(aux!=NULL){
  348.             while(aux!=NULL && ocupado==false){
  349.                 if(codigo_presta==aux->prestamo.prestatario){
  350.                     ocupado=true;
  351.                 }
  352.                 aux=aux->siguiente;
  353.             }
  354.         }
  355.         if(ocupado!=true){ //En caso de que ocupado sea false(no tiene prestamos registrados) se para a eliminar del arreglo el prestatario
  356.             for(int i=posicion;i<cantidad_prestatarios;i++){
  357.                 prestatarios[i]=prestatarios[i+1];
  358.                 cantidad_prestatarios--;
  359.                 return("Prestatario eliminado satisfactoriamente!");  //Y se informa al usuario del exito de la operacion
  360.             }
  361.         }
  362.         else if(ocupado==true){ //Si ocupado es true, se avisa al usuario del error
  363.             return("El prestatario que desea eliminar esta registrado en un prestamo, no es posible eliminarlo!");
  364.         }
  365.     }
  366.     else{ //Si existe no es true, el prestatario no existe, por lo tanto se avisa al usuario
  367.         return("El prestatario que desea eliminar no existe!");
  368.     }
  369.     return("Default");
  370. }
  371.  
  372.  
  373.  
  374. nodoprestamo* agregarPrestamo(string categoria, string nombre, string apellido, string descripcion,nodoprestamo* inicio1)
  375. {
  376.     // Funcion agregarPrestamo
  377.     // PROPOSITO: Agregar un prestamo al struct de los mismos, generando un booleano que indica el estado del prestamo, TRUE=prestamo activo, FALSE=prestamo finalizado
  378.     // PARAMETROS: Categoria del prestamo(aclaracion es un string ya que no se usara el codigo de la categoria, sino la descripcion del primer struct
  379.     // llamado categorias para hacer mas facil al usuario el ingreso), aparte de este, se pide nombre y apellido del prestatario
  380.     // se ingresa tambien la descripcion para el prestamo que va a ser la principal forma de detectar prestamos y para poder agregarlo
  381.     // se pasa como parametro el puntero que va al comienzo de la lista
  382.     // RETORNO: retorna el inicio de la lista
  383.  
  384.     if(cantidad_categorias==0 && cantidad_prestatarios==0){
  385.         cout<<"No se encuentran categorias ni prestararios registrados"<<endl; //Se comprueba que haya por lo menos una categoria
  386.         cout<<"Sera devuelto al menu"<<endl;                                  //y un prestatario antes de pasar a registrar el
  387.         return(inicio1);                                                     //para evitar posibles errores
  388.     }
  389.     else if(cantidad_categorias==0 && cantidad_prestatarios!=0){
  390.         cout<<"No se encuentran categorias registradas"<<endl;
  391.         cout<<"Sera devuelto al menu"<<endl;
  392.         return(inicio1);
  393.     }
  394.     else if(cantidad_categorias!=0 && cantidad_prestatarios==0){
  395.         cout<<"No se encuentran prestatarios registrados"<<endl;
  396.         cout<<"Sera devuelto al menu"<<endl;
  397.         return(inicio1);
  398.     }
  399.     else{ //En caso que haya categorias y prestatarios disponibles se pasa a anidar dos for, para recorrer sus arreglos y tener los codigos de categoria y prestatario para el prestamo
  400.         for (int i = 0; i < cantidad_categorias; i++)
  401.         {
  402.             if (mayuscula(categoria) == mayuscula(categorias[i].descripcion))
  403.             {
  404.                 for (int j = 0; i <= cantidad_prestatarios; j++)
  405.                 {
  406.                     if (mayuscula(nombre) == mayuscula(prestatarios[j].nombre) && mayuscula(apellido) == mayuscula(prestatarios[j].apellido))
  407.                     {
  408.                         limpiar();
  409.                         nodoprestamo* nuevo=new nodoprestamo(); //Se crea el nuevo nodo
  410.                         nuevo->prestamo.codigo_categoria=categorias[i].codigo_categoria; //Se le asignan los valores al struct dentro del nodo
  411.                         nuevo->prestamo.prestatario=prestatarios[j].codigo_prestatario;
  412.                         nuevo->prestamo.descripcion=descripcion;
  413.                         nuevo->prestamo.estado=true;
  414.  
  415.                         nodoprestamo* aux1=inicio1; //nodos auxiliares
  416.                         nodoprestamo* aux2;
  417.  
  418.                         while(aux1!=NULL){
  419.                             aux2=aux1;
  420.                             aux1=aux1->siguiente;
  421.                         }
  422.                         if (inicio1==aux1){
  423.                             inicio1=nuevo; //Se lo ubica donde tenga que ir, ya sea que es el primer nodo agregado, o el segundo, o otro
  424.                         }
  425.                         else{
  426.                             aux2->siguiente=nuevo;
  427.                         }
  428.                         nuevo->siguiente=aux1;
  429.  
  430.                         cout<<"Prestamo agregado satisfactoriamente"<<endl; //Se avisa al usuario del exito
  431.                         cantidad_prestamos++; //Se aumenta la cantidad de prestamos
  432.                         return(inicio1); //Se retorna el inicio
  433.  
  434.                     }
  435.                     else{
  436.                         cout<<"El prestatario al que desea adjudicar el prestamo no existe"; //Se avisa que no existe el prestatario que se quiso utilizar
  437.                         return(inicio1);
  438.                     }
  439.                 }
  440.  
  441.             }
  442.             else{
  443.                 cout<<"La categoria a la que desea adjudicar el prestamo no existe"; //Se avisa que no existe la categoria que se quiso utilizar
  444.                 return(inicio1);
  445.             }
  446.         }
  447.     }
  448.     return(inicio1);
  449. }
  450.  
  451. void modificarPrestamo(string descripcion,nodoprestamo* inicio)
  452. {
  453.     // Funcion modificar_prestamo
  454.     // 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
  455.     // PARAMETROS: Descripcion del prestamo a modificar y el inicio de la lista enlazada
  456.     // RETORNO: void, no retorna nada
  457.  
  458.        string descripcion_aux=descripcion;
  459.        string nueva_descripcion;          //Se crean variables, auxiliares, una variable para la nueva descripcion, un nodo para recorrer la lista
  460.        nodoprestamo* aux=new nodoprestamo;//Y un bool para ver si el prestamo buscado existe en la lista
  461.        bool existe=false;
  462.        aux=inicio; //Se iguala el auxiliar al inicio de la lista
  463.        if(inicio!=NULL){
  464.            while(aux!=NULL && existe==false){
  465.                if(aux->prestamo.descripcion==descripcion_aux && aux->prestamo.estado==true){
  466.                    limpiar();
  467.                    cout<<"El prestamo buscado existe"<<endl;
  468.                    cout<<"Ingrese la nueva descripcion para el prestamo: "; //Se recorre y se marca existe como true para salir del while
  469.                    cin>>nueva_descripcion; //Aparte de lo anterior se pide el ingreso de la nueva descripcion y se cambia, todo esto en caso que exista el prestamo
  470.                    aux->prestamo.descripcion=nueva_descripcion;
  471.                    existe=true;
  472.                    cout<<"Prestamo modificado satisfactoriamente!"<<endl; //Y se avisa al usuario del exito de la operacion
  473.                }
  474.                aux=aux->siguiente;
  475.            }
  476.            if(existe==false){ //En caso que no exista un prestamo con la descripcion dada se avisa al usuario
  477.                cout<<"El prestamo que desea modificar no existe"<<endl;
  478.            }
  479.        }
  480.        else{ //Si inicio es igual a NULL, no existen prestamos registrados por lo que se pasa a avisar al usuario de esto
  481.            cout<<"No existen prestamos registrados!"<<endl;
  482. }
  483. }
  484. 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
  485. {
  486.     // Funcion eliminar_prestamo
  487.     // PROPOSITO: Eliminar un prestamo de la base de datos
  488.     // PARAMETROS: Se pide la descripcion del prestamo a eliminar para poder identificarlo y el inicio de la lista
  489.     // RETORNO: Retorna un string que indica el estado de la operacion realizada
  490.  
  491.     string descripcion_aux=descripcion;
  492.     if(cantidad_prestamos==0){ //Se revisa si existen prestamos registrados
  493.         return("No se encuentran prestamos registrados");
  494.     }
  495.     if(inicio!=NULL){
  496.         nodoprestamo* aux;
  497.         nodoprestamo* anterior=NULL;
  498.         aux=inicio;
  499.         while(aux!=NULL && mayuscula(aux->prestamo.descripcion)!= mayuscula(descripcion_aux)){
  500.             anterior=aux;
  501.             aux=aux->siguiente;
  502.         }
  503.         if(aux==NULL){
  504.             return("El prestamo que desea eliminar no existe"); //Si aux llego al final de la lista y no se cumplio la condicion, no existe el prestamo buscado y se avisa
  505.             delete aux;
  506.         }
  507.         else if(anterior==NULL){ //Si el prestamo existe, se pasa a eliminarlo
  508.             inicio=inicio->siguiente;
  509.             delete aux;
  510.             return("Prestamo eliminado satisfactoriamente");
  511.         }
  512.         else{
  513.             anterior->siguiente=aux->siguiente; //Mismo caso que el anterior pero cuando se encuentra en diferente posicion
  514.             delete aux;
  515.             return("Prestamo eliminado satisfactoriamente");
  516.         }
  517.     }
  518.     return("default");
  519. }
  520.  
  521. void imprimirPrestatarioActivo(nodoprestamo* inicio)
  522. {
  523.     // Funcion imprimirPrestatarioActivo
  524.     // PROPOSITO: Imprimir lista de prestatarios con prestamos activos
  525.     // PARAMETROS: El inicio de la lista
  526.     // RETORNO: Void, no retorna
  527.  
  528.     cout << "\nLista de prestatarios con prestamos activos: " << endl; //Se imprime
  529.     cout << endl;
  530.     nodoprestamo* aux=new nodoprestamo; //Se crea aux para reocrrer la lista
  531.     aux=inicio;
  532.     int cantidad=0;//cantidad para comprobaciones
  533.     for(int i=0;i<cantidad_prestatarios;i++){//Se recorre el arreglo de prestatarios
  534.         aux=inicio;
  535.         cantidad=0;
  536.         if(aux!=NULL){//Si aux!=NULL la lista de prestamos no esta vacia
  537.  
  538.             while(aux!=NULL){ //Se recorre la lista
  539.                 if(aux->prestamo.prestatario==prestatarios[i].codigo_prestatario && aux->prestamo.estado==true){
  540.                     cantidad++; //Si el prestatario tien prestamos cantidad+1
  541.                 }
  542.                 aux=aux->siguiente;
  543.             }
  544.             if(cantidad!=0){ //Si cantidad no es 0 el prestatario tiene prestamos, por lo tanto se imprime su nombre y apellido y cuandos prestamos tiene
  545.                 cout<<"El prestatario "<<title(prestatarios[i].nombre)<<" "<<title(prestatarios[i].apellido)<<" con codigo "<<prestatarios[i].codigo_prestatario<<" tiene "<<cantidad<< " prestamos"<<endl;
  546.             }
  547.         }
  548.         else{ //Si la lista esta vacia, aux==NULL se imprime
  549.             cout<<"La lista de prestamos se encuentra vacia!"<<endl;
  550.         }
  551.     }
  552.  
  553. }
  554.  
  555. string terminar_prestamo(nodoprestamo* inicio)
  556. {
  557.     // Funcion terminar_prestamo
  558.     // PROPOSITO: Terminar un prestamo en activo, cambiando su parte booleana de true a false
  559.     // PARAMETROS: La descripcion del prestamo a terminar y el puntero al comienzo de la lista
  560.     // RETORNO: Retorna un string y como todas las anteriores, este string indica si la operacion fue satisfatoria o no
  561.  
  562.     int codigoprestatario=0;
  563.     string descripciones[dFisica]={"\0"};
  564.     imprimirPrestatarioActivo(inicio);
  565.     cout<<"Ingrese el codigo del prestatario del cual desea ver sus prestamos:"<<endl;
  566.     cin>>codigoprestatario;
  567.     nodoprestamo* aux=new nodoprestamo();
  568.     aux=inicio;
  569.     int cantidad=1;
  570.     if(aux!=NULL){
  571.         while(aux!=NULL){
  572.             if(aux->prestamo.estado==true && aux->prestamo.prestatario==codigoprestatario){
  573.                 cout<<"Prestamo "<<cantidad<<" : "<<aux->prestamo.descripcion<<endl;
  574.                 descripciones[cantidad-1]=aux->prestamo.descripcion;
  575.                 cantidad++;
  576.             }
  577.             aux=aux->siguiente;
  578.         }
  579.     }
  580.     else{
  581.         return("La lista de prestamos se encuentra vacia");
  582.     }
  583.     aux=inicio;
  584.     bool existe=false;
  585.     cout<<"Ingrese el numero de prestamo a terminar"<<endl;
  586.     cin>>codigoprestatario;
  587.     if(aux!=NULL){
  588.         while(aux!=NULL && existe==false){
  589.             if(aux->prestamo.estado==true && descripciones[codigoprestatario-1]==aux->prestamo.descripcion){
  590.                 aux->prestamo.estado=false;
  591.                 existe=true;
  592.             }
  593.             aux=aux->siguiente;
  594.         }
  595.     }
  596.     if(existe==true){
  597.         return("Prestamo terminado satisfactoriamente");
  598.     }
  599.     else{
  600.         return("Prestamo ingresado incorrectamente");
  601.     }
  602.  
  603. }
  604.  
  605. void imprimir_prestamos_por_categoria(string descripcion,nodoprestamo* inicio)
  606. {
  607.     // Funcion imprimir_prestamos_por_categoria
  608.     // PROPOSITO: Imprimir los prestamos que presentan la categoria deseada
  609.     // Parametro: La descripcion de la categoria y el inicio de la lista de prestamos
  610.     // Retorno: Void, no retorna nada
  611.  
  612.     string descripcion_categoria=descripcion;
  613.     int codigo_cat=0;
  614.     bool existe=false; //Se crean variables para la descricion a buscar, un int que guarda el codigo de categorias
  615.     int i=0;          // Un bool para guardar si existe o no la categoria, y un int i para iterar con el while
  616.     while(existe==false && i<=cantidad_categorias){
  617.         if(mayuscula(categorias[i].descripcion)==mayuscula(descripcion_categoria)){
  618.             existe=true;
  619.             codigo_cat=categorias[i].codigo_categoria;
  620.         }
  621.         i++;
  622.     }
  623.     if(existe==true){ //Si existe, se pasa a recorrer la lista de prestamos, y se crea un arreglo estatico para almacenar
  624.                      //las descripciones de cada prestamo
  625.         nodoprestamo* aux=new nodoprestamo;
  626.         aux=inicio;
  627.         string lista_p[dFisica]={"\0"};
  628.         int cantidad=0;
  629.         if(aux!=NULL){
  630.             while(aux!=NULL){
  631.                 if(aux->prestamo.codigo_categoria==codigo_cat && aux->prestamo.estado==true){
  632.                     lista_p[cantidad]=aux->prestamo.descripcion;
  633.                     cantidad++;
  634.                 }
  635.                 aux=aux->siguiente;
  636.             }
  637.         }
  638.         else{
  639.             cout<<"No existen prestamos registrados"<<endl; //Si aux es igual a NULL significa que inicio es igual a NULL por lo tanto no hay prestamos registrados
  640.         }
  641.         if(lista_p[0]!="\0"){ //Si el arreglo no se encuentra lleno de "\0"(arreglo vacio para el algoritmo), se pasa a imprimir los miembros del arreglo
  642.             cout<<"Los objetos en prestamo de la categoria ";
  643.             cout<<title(descripcion_categoria);
  644.             cout<<" son:"<<endl;
  645.             for(int i=0;i<cantidad;i++){
  646.                 cout<< i+1;
  647.                 cout<<". ";
  648.                 cout<<lista_p[i]<<endl;
  649.             }
  650.         }
  651.         else if(lista_p[0]=="\0"){ //Si el arreglo sigue con todos los "\0", nunca se cumplio la condicion del if dentro del while por lo tanto la categoria existe
  652.                                   //Pero nunca se registraron prestamos con esa categoria
  653.             limpiar();
  654.             cout<<"La categoria no presenta prestamos registrados o activos"<<endl;
  655.         }
  656.     }
  657.     else{
  658.         cout<<"La categoria que desea buscar no existe!"<<endl;//En caso de existe==false, la categoria que se quiso buscar no existe
  659.     }
  660. }
  661.  
  662.  
  663.  
  664. void cantidad_objetos_categoria(string descripcion,nodoprestamo* inicio)
  665. {
  666.     // Funcion cantidad_objetos_categoria
  667.     // Proposito:Imprimir la cantidad de objetos para una categoria dada
  668.     // Parametros:Descripcion de la categoria a buscar y el puntero al inicio de la lista
  669.     // Retorno:Void, no retorna nada
  670.  
  671.     string descripcion_categoria=descripcion;
  672.     int codigo_cat=0; //Se crean variables locales para almacenar, la descripcion a buscar
  673.     bool existe=false;//Un bool para ver si existe la categoria buscada
  674.     int i=0;//Un i para iterar con el while
  675.     while(existe==false && i<=cantidad_categorias){
  676.         if(mayuscula(categorias[i].descripcion)==mayuscula(descripcion_categoria)){ //Se recorre el arreglo de categorias buscando la categoria ingresada
  677.             existe=true;                                                            //Para obtener el codigo de categoria y saber si existe
  678.             codigo_cat=categorias[i].codigo_categoria;
  679.         }
  680.         i++;
  681.     }
  682.     if(existe==true){ //Si existe se pasa a recorrer la lista de prestamos
  683.         nodoprestamo* aux=new nodoprestamo;//Nodo auxiliar para recorrer
  684.         aux=inicio; //Se iguala a inicio el nodo aux
  685.         int cantidad=0; //Variable para contar cuantas veces se encuentra un prestamo con la categoria buscada
  686.         if(aux!=NULL){
  687.             while(aux!=NULL){
  688.                 if(aux->prestamo.codigo_categoria==codigo_cat && aux->prestamo.estado==true){
  689.                     cantidad++;
  690.                 }
  691.                 aux=aux->siguiente;
  692.             }
  693.         }
  694.         else{
  695.             cout<<"No existen prestamos registrados"<<endl; //Si aux==NULL, no hay partes de la lista
  696.         }
  697.         delete aux; //Se borra aux tras recorrer la lista
  698.         if(cantidad>0){ //Si cantidad es mayor a 0, hay prestamos registrados con esa categoria
  699.             cout<<"La cantidad de prestamos activos de la categoria ";
  700.             cout<<title(descripcion_categoria);
  701.             cout<<" es: ";                 //Se imprime, la descripcion de la categoria y cuantos prestamos tiene adjudicados
  702.             cout<<cantidad<<endl;
  703.         }
  704.         if(cantidad==0){ //Si cantidad es 0 no hay prestamos registrados con esa categoria
  705.             limpiar(); //Se imprime el mensaje de error
  706.             cout<<"La categoria de la cual desea saber la cantidad de prestamos activos no tiene ninguno"<<endl;
  707.         }
  708.     }
  709.     else if(existe==false){ //Si existe sigue siendo false a este punto, no existe la categoria
  710.         cout<<"La categoria que desea no existe"<<endl;
  711.     }
  712. }
  713.  
  714. void imprimirOrdenCategoria(nodoprestamo* inicio)
  715. {
  716.     // Funcion imprimirPorCategoria
  717.     // PROPOSITO: Imprimir lista de prestamos por orden categoria
  718.     // PARAMETROS: el inicio de la lista
  719.     // RETORNO: Void, no retorna
  720.  
  721.     int cantidad=0; //Se crea un int para temas visuales
  722.     nodoprestamo* aux=new nodoprestamo; //Se crea un nodo auxiliar para recorrer la lista de prestamos
  723.     for (int i = 0; i < cantidad_categorias; i++)
  724.     {
  725.         aux=inicio;//Se iguala a inicio, para siempre recorrer la lista desde el principio en cada vuelta del for
  726.         cantidad=1; //Cantidad=1 para grafico
  727.         if(aux!=NULL){//Si la lista no esta vacia
  728.             cout << "Los prestamos de " << categorias[i].descripcion << " son: " << endl;//Se imprime la descripcion de categoria
  729.             while(aux!=NULL){ //Se recorre la lista
  730.                 if(aux->prestamo.codigo_categoria==categorias[i].codigo_categoria && aux->prestamo.estado==true){
  731.                     cout<<cantidad; //Y si se cumple la condicion se imprime cantidad y la descripcion de cada prestamo con la categoria deseada
  732.                     cout<<". ";
  733.                     cout<<aux->prestamo.descripcion<<endl;
  734.                     cantidad++;
  735.                 }
  736.                 aux=aux->siguiente;
  737.             }
  738.             delete aux; //Se borra aux
  739.             if(cantidad==1){
  740.                 cout<<"La categoria no presenta ningun prestamo activo registrado!"<<endl;//Si cantidad sigue siendo 1 no hay prestamos de esa categoria
  741.             }
  742.         }
  743.         else{//Si aux==NULL se para a avisar al usuario que no hay prestamos registrados
  744.             cout<<"No se encuentra ningun prestamo registrado!"<<endl;
  745.             delete aux;//Se borra aux
  746.         }
  747.     }
  748. }
  749.  
  750. void imprimirOrdenPrestatario(nodoprestamo* inicio)
  751. {
  752.     // Funcion imprimirPorCategoria
  753.     // PROPOSITO: Imprimir lista de prestamos por orden prestatario
  754.     // PARAMETROS: El puntero al inicio de la lista de prestamos
  755.     // RETORNO: Void, no retorna
  756.  
  757.     int cantidad = 1; //Cantidad con una funcion parecida a la funcion anterior
  758.     nodoprestamo* aux=new nodoprestamo;//Se crea un nodo aux para recorrer
  759.     for (int i = 0; i < cantidad_prestatarios; i++)
  760.     {
  761.         aux=inicio;//funcionalidad muy parecida a la anterior
  762.         cantidad=1;
  763.         if(aux!=NULL){
  764.             cout << "Los prestamos de " << title(prestatarios[i].nombre) <<" "<< title(prestatarios[i].apellido) << " son: " << endl;
  765.             while(aux!=NULL){ //Lo unico que cambiarira es como se imprimen y que condicion tiene el if
  766.                 if(aux->prestamo.prestatario==prestatarios[i].codigo_prestatario && aux->prestamo.estado==true){
  767.                     cout<<cantidad;
  768.                     cout<<". ";
  769.                     cout<<aux->prestamo.descripcion<<endl;
  770.                     cantidad++;
  771.                 }
  772.                 aux=aux->siguiente;
  773.             }
  774.             delete aux;
  775.             if(cantidad==1){
  776.                 cout<<"El prestatario no presenta ningun prestamo activo registrado!"<<endl;
  777.             }
  778.         }
  779.         else{
  780.             cout<<"No se encuentra ningun prestamo registrado!"<<endl;
  781.             delete aux;
  782.         }
  783.     } //La funcion tiene el mismo procedimiento que imprimirOrdenCategoria
  784. }
  785.  
  786.  
  787.  
  788. /*
  789. ======================
  790.      FUNCION MAIN
  791. ======================
  792. */
  793.  
  794. int main()
  795. {
  796.     nodoprestamo* inicio=new nodoprestamo; //Se crea el nodo para el inicio de la lista de prestamos
  797.     inicio=NULL; //Se iguala a NULL para expresar que esta vacia
  798.     char seleccion, seleccionA, seleccionB, seleccionC;                                                                  // variables donde se almacenara la opcion del usuario
  799.     string categoriaAgregar, categoriaModificar, categoriaEliminar;                                                      // variables donde se almacenara los datos del usuario del inciso A
  800.     string nombrePrestatario, apellidoPrestatario, nombreModificar, apellidoModificar, nombreEliminar, apellidoEliminar; // variables donde se almacenara los datos del usuario del inciso A
  801.     string seleccionMenuB, ingresarCategoriaB, agregarNombreB, agregarApellidoB, descripcionPrestamoB;                   // Variables utilizadas en inciso B
  802.     string seleccionMenuC, opcion_c;
  803.     ; // Variables usadas en el inciso C
  804.  
  805.     // Menu principal, loopeado mediante un do/while
  806.  
  807.     do
  808.     {                                            // Do del menu principal, para permitir volver al menu tras realizada cualquier opcion del menu
  809.         cout << "\nBienvenido al menu!" << endl; // Se muestra el menu mediante un COUT
  810.         cout << "\nA: Administrar y consultar Categorias y Prestatarios." << endl;
  811.         cout << "B: Administrar Prestamos." << endl;
  812.         cout << "C: Consultar Prestamos." << endl;
  813.         cout << "D: Salir." << endl;
  814.         cout << "\nElija la opcion a utilizar: ";
  815.         cin >> seleccion; // CIN ingresa la opcion deseada
  816.  
  817.         seleccion = toupper(seleccion); // convertimos la letra en mayusculas para que sea indiferente el ingreso de mayuscula o minuscula
  818.  
  819.         switch (seleccion)
  820.         {
  821.         case 'A':      // PRIMER CASO DEL MENU PRINCIPAL
  822.             limpiar(); // LIMPIA PANTALLA DEL MENU PRINCIPAL
  823.             do
  824.             { // Do del menu de la opcion A, para permitir volver al menu tras realizada cualquier seleccion
  825.                 cout << "\nOPCION A: Administracion y consulta de Categorias y Prestatarios!" << endl;
  826.                 cout << "\nA: Agregar categoria." << endl;
  827.                 cout << "B: Modificar categoria." << endl;   // Se pone en pantalla las opciones del apartado
  828.                 cout << "C: Eliminar categoria." << endl;    // Administracion y consultas de categorias
  829.                 cout << "\nD: Agregar prestatario." << endl; // Con un funcionamiento casi igual al principal
  830.                 cout << "E: Modificar prestatario." << endl; // Permite ingresar al usuario otra opcion del menu
  831.                 cout << "F: Eliminar prestatario." << endl;  // Y como en el principal, se comprueba si la opcion ingresada
  832.                 cout << "\nG: Volver al menu principal." << endl;
  833.                 cout << "\nElija la opcion a utilizar: "; // Es o no correcta.
  834.                 cin >> seleccionA;
  835.  
  836.                 seleccionA = toupper(seleccionA);
  837.  
  838.                 switch (seleccionA)
  839.                 {
  840.                 case 'A':
  841.                     limpiar();
  842.                     cout << "\nOPCION A: Ingrese la categoria a agregar: "; // Se pide la categoria a agregar
  843.                     getline(cin >> ws, categoriaAgregar);                   // Se ingresa en la variable
  844.                     limpiar();                                              // Limpia pantalla
  845.                     cout << agregarCategoria(categoriaAgregar) << endl;     // Se ejecuta la funcion que la agrega en el struct
  846.                     break;
  847.                 case 'B':
  848.                     limpiar();
  849.                     if(cantidad_categorias==0){
  850.                         cout<<"No se encuentran categorias registradas"<<endl; //Se comprueba si hay categorias registradas para ahorrar errores
  851.                         break;
  852.                     }
  853.                     else{                      
  854.                         imprimirCategorias(categorias,cantidad_categorias);       //Se muestran las categorias existentes
  855.                         cout << "\nOPCION B: Ingrese la descripcion de la categoria a modificar: "<<endl; // Se pide categoria a modificar
  856.                         getline(cin >> ws, categoriaModificar);                   // Se ingresa en la variable para ser modificada                                                                   // Limpia pantalla
  857.                         cout << modificarCategoria(categoriaModificar) << endl;   // Se ejecuta la funcion que modifica la categoria
  858.                         break;
  859.                     }
  860.                 case 'C':
  861.                     limpiar();
  862.                     if(cantidad_categorias==0){
  863.                         cout<<"No se encuentran categorias registradas"<<endl; //Se comprueba si hay categorias registradas para no querer eliminar algo que no existe
  864.                         break;
  865.                     }
  866.                     else{
  867.                         imprimirCategorias(categorias,cantidad_categorias);         //Se muestran las categorias existentes
  868.                         cout << "\nOPCION C: Ingrese la descripcion de la categoria a eliminar: "<<endl;; // Se pide categoria a eliminar
  869.                         getline(cin >> ws, categoriaEliminar);                // Se ingresa la categoria
  870.                         limpiar();                                            // Se limpia pantalla
  871.                         cout << eliminarCategoria(categoriaEliminar,inicio) << endl; // Se elimina la categoria mediante la funcion
  872.                         break;
  873.                     }
  874.                 case 'D':
  875.                     limpiar();
  876.                     cout << "\nOPCION D: Ingrese nombre del prestatario: ";                     // Se pide el nombre del prestatario
  877.                     getline(cin >> ws, nombrePrestatario);                                      // Se ingresa el nombre en la variable
  878.                     cout << "\nIngrese appelido del prestatario: ";                             // Se pide el apellido del prestatario
  879.                     getline(cin >> ws, apellidoPrestatario);                                    // Se ingresa el apellido en la variable
  880.                     limpiar();                                                                  // Se limpia pantalla
  881.                     cout << agregarPrestatario(nombrePrestatario, apellidoPrestatario) << endl; // Se procesan los datos en la funcion
  882.                     break;
  883.                 case 'E':
  884.                     limpiar();
  885.                     if(cantidad_prestatarios==0){
  886.                         cout<<"No se encuentran prestatarios registrados"<<endl;
  887.                         break;
  888.                     }
  889.                     else{
  890.                         cout << "\nOPCION E:"<<endl;
  891.                         cout <<" Prestatarios registrados:"<<endl;
  892.                         imprimirPrestatarios(prestatarios,cantidad_prestatarios);
  893.                         cout << "Ingrese nombre a modificar: ";                       // Se pide el nombre del prestatario a modificar
  894.                         getline(cin >> ws, nombreModificar);                                      // Se ingresa el nombre en la variable
  895.                         cout << "\nIngrese apellido a modificar: ";                               // Se pide el apellido del prestatario a modificar
  896.                         getline(cin >> ws, apellidoModificar);                                    // Se ingresa el apellido en la variable
  897.                         limpiar();                                                                // Se limpia pantalla
  898.                         cout << modificarPrestatario(nombreModificar, apellidoModificar) << endl; // Se modifica el nombre y apellido del prestatario mediante la funcion
  899.                         break;
  900.                     }
  901.                 case 'F':
  902.                     limpiar();
  903.                     if(cantidad_prestatarios==0){
  904.                         cout<<"No se encuentran prestatarios registrados"<<endl;
  905.                         break;
  906.                     }
  907.                     else{
  908.                         cout<<"OPCION F: "<<endl;
  909.                         cout<<"Prestatarios registrados"<<endl;
  910.                         cout << "Ingrese nombre del prestatario a eliminar: ";       // Se pide el nombre del prestatario a modificar
  911.                         getline(cin >> ws, nombreEliminar);                                    // Se ingresa el nombre en la variable
  912.                         cout << "\nIngrese apellido del prestatario a eliminar: ";             // Se pide el apellido del prestatario a modificar
  913.                         getline(cin >> ws, apellidoEliminar);                                  // Se ingresa el apellido en la variable
  914.                         limpiar();                                                             // Se limpia pantalla
  915.                         cout << eliminarPrestatario(nombreEliminar, apellidoEliminar,inicio) << endl; // Se elimina el prestatario mdeiante la funcion
  916.                         break;
  917.                     }
  918.  
  919.                 case 'G':
  920.                     limpiar();
  921.                     cout << "'G': VOLVIENDO AL MENU PRINCIPAL" << endl; // MUESTRA EN PANTALLA LA OPCION SELECCIONADA Y REGRESA AL MENU PRINCIPAL
  922.                     break;
  923.  
  924.                 default:
  925.                     // EN EL CASO DE QUE INGRESE UNA LETRA ERRONEA, EL PROGRAMA MOSTRARA
  926.                     // ESTE MENSAJE Y LE DEJARA VOLVER A INGRESAR OTRA LETRA
  927.                     limpiar(); // se limpia la pantalla
  928.                     cout << "\nPOR FAVOR, SELECCIONE UNA OPCION VALIDA." << endl;
  929.                     break;
  930.                 }
  931.             } while (seleccionA != 'G');
  932.             break;
  933.  
  934.         case 'B':      // SEGUNDO CASO DEL MENU PRINCIPAL
  935.             limpiar(); // LIMPIA PANTALLA DEL MENU PRINCIPAL
  936.             do
  937.             { // Do del menu B, para permitir volver al menu tras realizada cualquier seleccion
  938.                 cout << "\nOPCION B: Administracion de Prestamos!" << endl;
  939.                 cout << "\nA: Agregar prestamo." << endl;
  940.                 cout << "B: Modificar prestamo." << endl; // Se ponen en pantalla las opciones del la opcion B
  941.                 cout << "C: Eliminar prestamo." << endl;
  942.                 cout << "D: Devolver prestamo." << endl;
  943.                 cout << "\nE: Volver al menu principal." << endl;
  944.                 cout << "\nElija la opcion a utilizar: ";
  945.                 cin >> seleccionB; // Se ingresa la opcion seleccionada
  946.  
  947.                 seleccionB = toupper(seleccionB);
  948.  
  949.                 switch (seleccionB)
  950.                 {
  951.                 case 'A':
  952.                     limpiar();
  953.                     cout << "Desea ver las categorias actuales para su Prestamo?" << endl; // Se pregunta al usuario si desea ver las categorias existentes para su prestamo
  954.                     cout << "S/N: ";
  955.                     cin >> seleccionMenuB; // Se ingresa s o n para si o no respectivamente
  956.                     if (mayuscula(seleccionMenuB) == "S")
  957.                     { // Se comprueba que se elija si
  958.  
  959.                         imprimirObjetos_Categoria(categorias, cantidad_categorias); // Se realizaria la muestra de las categorias para los prestamos
  960.  
  961.                         cout << "Ingrese una categoria para el prestamo: ";
  962.                         cin >> ingresarCategoriaB; // Y le permite ingresar la descripcion de la categoria
  963.                     }
  964.                     else if (mayuscula(seleccionMenuB) == "N")
  965.                     {                                                       // Se comprueba si eligio no
  966.                         cout << "Ingrese una categoria para el prestamo: "; // En caso de que no, se le da la opcion a ingresar una categoria sin ver todas
  967.                         cin >> ingresarCategoriaB;                          // Se ingresa la eleccion
  968.                     }
  969.                     else{
  970.                         cout<<"Ingreso una opcion incorrecta"<<endl;
  971.                         cout<<"Sera devuelto al menu"<<endl;
  972.                         break;
  973.                     }
  974.  
  975.                     cout << "Desea ver los prestatarios ya inscriptos?" << endl; // Se realiza lo mismo que en la pregunta anterior pero con los prestatarios
  976.                     cout << "S/N: ";
  977.                     cin >> seleccionMenuB;
  978.                     if (mayuscula(seleccionMenuB) == "S")
  979.                     { // Caso Si
  980.  
  981.                         imprimirPrestatarios(prestatarios, cantidad_prestatarios); // Se realizaria la muestra de los prestatarios
  982.  
  983.                         cout << "Ingrese el nombre del prestatario para el prestamo: "; // Se pide el nombre del prestatario
  984.                         cin >> agregarNombreB;                                          // Se ingresa el nombre
  985.                         cout << "Ingrese el apellido para el prestamo: ";               // Se pide el apellido del prestatario
  986.                         cin >> agregarApellidoB;                                        // Se ingresa
  987.                     }
  988.  
  989.                     // ACLARACION, en la funcion se busca el codigo del prestatario y el codigo de la categoria, para poder almacenar en el struct prestamos
  990.  
  991.                     else if (mayuscula(seleccionMenuB) == "N")
  992.                     {                                                                   // Caso No
  993.                         cout << "Ingrese el nombre del prestatario para el prestamo: "; // Se piden e ingresan directamente nombre y
  994.                         cin >> agregarNombreB;                                          // apellido del prestatario para el prestamo
  995.                         cout << "Ingrese el apellido del prestatario para el prestamo: ";
  996.                         cin >> agregarApellidoB;
  997.                     }
  998.                     else{
  999.                         cout<<"Ingreso una opcion incorrecta"<<endl;
  1000.                         cout<<"Sera devuelto al menu"<<endl;
  1001.                         break;
  1002.                     }
  1003.                     cout << "Ingrese una descripcion para el prestamo: "; // Se pide ingresar una descripcion al prestamo
  1004.                     cin >> descripcionPrestamoB;                          // Se ingresa
  1005.                     limpiar();
  1006.                     inicio=agregarPrestamo(ingresarCategoriaB, agregarNombreB, agregarApellidoB, descripcionPrestamoB,inicio);
  1007.                     // Se llama a la funcion para agregar prestamo
  1008.                     break;
  1009.  
  1010.                 case 'B':
  1011.                     limpiar();
  1012.                     if(cantidad_prestamos==0){
  1013.                         cout<<"No se encuentran prestamos registrados"<<endl;
  1014.                         break;
  1015.                     }
  1016.                     else{
  1017.                         cout << "\nOPCION B: Ingrese la descripcion del prestamo a modificar: "; // Se le pide al usuario ingresarla
  1018.                         cin >> descripcionPrestamoB;                                             // Se ingresa
  1019.                         limpiar();
  1020.                         modificarPrestamo(descripcionPrestamoB,inicio);
  1021.                         // Se llama a la funcion modificar_prestamo y con el cout se imprime el mensaje de error o no que devuelve la funcion
  1022.                         break;
  1023.                     }
  1024.  
  1025.                 case 'C':
  1026.                     limpiar();
  1027.                     if(cantidad_prestamos==0){
  1028.                         cout<<"No se encuentran prestamos registrados"<<endl;
  1029.                         break;
  1030.                     }
  1031.                     else{
  1032.                         cout << "\nOPCION C: Ingrese la descripcion del prestamo a eliminar: "; // Se pide al usuario
  1033.                         cin >> descripcionPrestamoB;                                            // Se Ingresa
  1034.                         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
  1035.                         break;
  1036.                     }
  1037.  
  1038.                 case 'D':
  1039.                     limpiar();
  1040.                     if(cantidad_prestamos==0){
  1041.                         cout<<"No se encuentran prestamos registrados"<<endl;
  1042.                         break;
  1043.                     }
  1044.                     else{
  1045.                         cout << terminar_prestamo(inicio) << endl;                // Se llama a la funcion con el parametro de la descripcion ingresada y se devuelve el mensaje de correcto o error
  1046.                         break;
  1047.                     }
  1048.  
  1049.                 case 'E':
  1050.                     limpiar();
  1051.                     cout << "'E': VOLVIENDO AL MENU PRINCIPAL" << endl; // MUESTRA EN PANTALLA LA OPCION SELECCIONADA
  1052.                     break;
  1053.  
  1054.                 default:
  1055.                     // EN EL CASO DE QUE INGRESE UNA LETRA ERRONEA, EL PROGRAMA MOSTRARA
  1056.                     // ESTE MENSAJE Y LE DEJARA VOLVER A INGRESAR OTRA LETRA
  1057.                     limpiar(); // se limpia la pantalla
  1058.                     cout << "\nPOR FAVOR, SELECCIONE UNA OPCION VALIDA." << endl;
  1059.                     break;
  1060.                 }
  1061.             } while (seleccionB != 'E');
  1062.             break;
  1063.  
  1064.         case 'C':      // TERCER CASO DEL MENU PRINCIPAL
  1065.             limpiar(); // LIMPIA PANTALLA DEL MENU PRINCIPAL
  1066.             do
  1067.             { // Do del menu de la opcion C, para permitir volver al menu tras realizada cualquier seleccion
  1068.                 cout << "\nOPCION C:Consultas de Prestamos!" << endl;
  1069.                 cout << "\nA: Cantidad de objetos prestados por categoria." << endl;
  1070.                 cout << "B: Listado de prestamos por categoria." << endl; // Se ponen en pantalla las opciones
  1071.                 cout << "C: Listado de prestamos ordenados por prestatario o categoria." << endl;
  1072.                 cout << "D: Prestatarios con objetos en prestamo." << endl;
  1073.                 cout << "\nE: Volver al menu principal." << endl;
  1074.                 cout << "\nElija la opcion a utilizar: ";
  1075.                 cin >> seleccionC; // Se ingresa el numero de opcion
  1076.  
  1077.                 seleccionC = toupper(seleccionC);
  1078.  
  1079.                 switch (seleccionC)
  1080.                 {
  1081.                 case 'A':
  1082.                     limpiar(); // se limpia pantalla
  1083.                     if(cantidad_prestamos==0){
  1084.                         cout<<"No se encuentran prestamos registrados"<<endl;
  1085.                         break;
  1086.                     }
  1087.                     else{
  1088.                         cout << "OPCION A" << endl;
  1089.                         imprimirCategorias(categorias, cantidad_categorias);                                           // imprime las categorias para que los usuarios puedan seleccionar la que desean
  1090.                         cout << "\nIngrese la descripcion de la categoria de la que desea conocer la cantidad de objetos en prestamo: "; // se pide al usuario
  1091.                         getline(cin >> ws, categoriaAgregar);                                                          // se ingresa
  1092.                         cantidad_objetos_categoria(categoriaAgregar,inicio);                                                  // se imprime en pantalla
  1093.                         break;
  1094.                     }
  1095.                 case 'B':
  1096.                     limpiar(); // se limpia pantalla
  1097.                     if(cantidad_prestamos==0){
  1098.                         cout<<"No se encuentran prestamos registrados"<<endl;
  1099.                         break;
  1100.                     }
  1101.                     else{
  1102.                         cout << "OPCION B" << endl;
  1103.                         imprimirCategorias(categorias, cantidad_categorias);                            // imprime las categorias para que los usuarios puedan seleccionar la que desean
  1104.                         cout << "Ingrese la descripcion de la categoria de la que desea conocer los prestamos activos: "; // se pide al usuario
  1105.                         cin >> categoriaAgregar;                                                        // se ingresa
  1106.                         imprimir_prestamos_por_categoria(categoriaAgregar,inicio);                             // se imprime en pantalla
  1107.                         break;
  1108.                     }
  1109.                 case 'C':
  1110.                     limpiar(); // se limpia pantalla
  1111.                     if(cantidad_prestamos==0){
  1112.                         cout<<"No se encuentran prestamos registrados"<<endl;
  1113.                         break;
  1114.                     }
  1115.                     else{
  1116.                         cout << "OPCION C" << endl;
  1117.                         cout << "Desea ver los prestamos ordenados por categoria o por prestatario(C/P): " << endl; // se pregunta al usuario
  1118.                         cin >> opcion_c;                                                                            // se ingresa
  1119.                         if (mayuscula(opcion_c) == "C")                                                             // se verifica
  1120.                         {
  1121.                             imprimirOrdenCategoria(inicio); // se imprime
  1122.                             break;
  1123.                         }
  1124.                         else if (mayuscula(opcion_c) == "P")
  1125.                         {
  1126.                             imprimirOrdenPrestatario(inicio); // se imprime
  1127.                             break;
  1128.                         }
  1129.                         else{
  1130.                             cout<<"Ha ingresado una opcion incorrecta"<<endl;
  1131.                             cout<<"Sera devuelto al menu principal"<<endl;
  1132.                             break;
  1133.                         }
  1134.                     }
  1135.                 case 'D':
  1136.                     limpiar();                    // LIMPIA LA PANTALLA
  1137.                     if(cantidad_prestamos==0){
  1138.                         cout<<"No se encuentran prestamos registrados"<<endl;
  1139.                         break;
  1140.                     }
  1141.                     else{
  1142.                         cout << "\nOPCION D" << endl; // MUESTRA EN PANTALLA
  1143.                         imprimirPrestatarioActivo(inicio);  // SE EJECUTA LA FUNCION QUE MUESTRA LOS PRESTATARIOS ACTIVOS
  1144.                         break;
  1145.                     }
  1146.                 case 'E':
  1147.                     limpiar();
  1148.                     cout << "'E': VOLVIENDO AL MENU PRINCIPAL" << endl; // MUESTRA EN PANTALLA LA OPCION SELECCIONADA
  1149.                     break;
  1150.  
  1151.                 default:
  1152.                     // EN EL CASO DE QUE INGRESE UNA LETRA ERRONEA, EL PROGRAMA MOSTRARA
  1153.                     // ESTE MENSAJE Y LE DEJARA VOLVER A INGRESAR OTRA LETRA
  1154.                     limpiar(); // se limpia la pantalla
  1155.                     cout << "\nPOR FAVOR, SELECCIONE UNA OPCION VALIDA." << endl;
  1156.                     break;
  1157.                 }
  1158.             } while (seleccionC != 'E');
  1159.             break;
  1160.  
  1161.         case 'D':
  1162.             cout << "\nSELECCIONO LA OPCION SALIR." << endl; // MUESTRA EN PANTALLA QUE OPCION SELECCIONO
  1163.             break;
  1164.  
  1165.         default:
  1166.             // EN EL CASO DE QUE INGRESE UNA LETRA ERRONEA, EL PROGRAMA MOSTRARA
  1167.             // ESTE MENSAJE Y LE DEJARA VOLVER A INGRESAR OTRA LETRA
  1168.             limpiar(); // se limpia la pantalla
  1169.             cout << "\nPOR FAVOR, SELECCIONE UNA OPCION VALIDA." << endl;
  1170.             break;
  1171.         }
  1172.     } while (seleccion != 'D');
  1173.  
  1174.     cout << "\nFIN DEL PROGRAMA." << endl; // MUESTRA EN PANTALLA UN MENSAJE DE FIN
  1175.  
  1176.     getch();
  1177.  
  1178.     return 0;
  1179. }
  1180.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement