Brunoroman

PI ENTREGA 4.1

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