Brunoroman

PI ENTREGA 4.2

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