Listas C++: Insertar, Eliminar, Mostrar

 


Catalogo de Libros (Nombre, Codigo, Area, Año, Autor, Editorial con listas. Ingresar - Mostrar - Eliminar la lista (Eliminar primera o ultima lista y eliminar dado un parametro).


#include <iostream>

#include <stdlib.h>

#include <string.h>


using namespace std;

struct Nodo{   //Se crea un nuevo nodo

    string nombre;   //Definimos Paramentro Nombre Libro

    string codigo;   //Definimos Parametro Codigo

    string area;     //Definimos Paramtetro Area

    string year;     //Definimos Parametro Año de Publicación

    string autor;    //Definimos Parametro Nombre del Autor

    string editorial;//Definimos Parametro Nombre de la Editorial

    Nodo *siguiente;

};


//Prototipo de Funciones

void menuListas(Nodo *,string nombre, string codigo, string area, string year, string autor, string editorial, int nLibros); //Procedimiento para Menu Principal

void menuEliminacion(Nodo *,string nombre, string codigo, string area, string year, string autor, string editorial);   //Procedimiento para Menu de Eliminacion por Parametros

void insertarLista(Nodo *&, string nombre, string codigo, string area, string year, string autor, string editorial);  //Procedimiento para Insertar un elemento a la lista

void mostrarLista(Nodo *);   //Procedimiento para Mostrar una lista

void eliminarListaNombre(Nodo *, string);     //Procedimiento para Eliminar Lista por Nombre

void eliminarListaCodigo(Nodo *, string);     //Procedimiento para Eliminar Lista por Codigo

void eliminarListaArea(Nodo *, string);       //Procedimiento para Eliminar Lista por Area

void eliminarListaYear(Nodo *, string);       //Procedimiento para Eliminar Lista por Año de Publicacion

void eliminarListaAutor(Nodo *, string);      //Procedimiento para Eliminar Lista por Autor

void eliminarListaEditorial(Nodo *, string);  //Procedimiento para Eliminar Lista por Editorial

void elimnarPrimeroLista(Nodo *&,string nombre, string codigo, string area, string year, string autor, string editorial); //Procedimiento para Eliminar el Primer elemento de una lista

void elimnarUltimoLista(Nodo *&, string nombre, string codigo, string area, string year, string autor, string editorial); //Procedimiento para Eliminar el Ultimo elemento de una lista



bool validacionEntero(string s)  //Funcion para validar si la expresion ingresada son numeros enteros y no otro caracter

{

    for (int i = 0; i < s.length(); i++)

     if (isdigit(s[i]) == false)

     return false;

    

     return true; //Funcion retorna 1 si todos los elementos de la expresion ingresada estan en el rango de '0-9'

}


int main(int argc, const char * argv[]) {

    Nodo *lista = NULL;

    string nombre;

    string codigo;

    string area;

    string year;

    string autor;

    string editorial;

    int nLibros;  //Definimos Numero de libros a ingresar

    cout<<" ¿Cuántos Libros Desea Ingresar?:  ";

    cin>>nLibros;

    menuListas(lista,nombre,codigo,area,year,autor,editorial,nLibros);

    return 0;

}

void menuListas(Nodo *lista, string nombre, string codigo, string area, string year, string autor, string editorial, int nLibros){

    

    int opcion, opcion3;

    //MENU

    do{

        cout<<endl;

        cout<<" 1. Ingresar Elementos a la Lista"<<endl;

        cout<<" 2. Mostrar Lista"<<endl;

        cout<<" 3. Eliminar Cualquier Lista Ingresada"<<endl;

        cout<<" 4. Eliminar Última Lista Ingresada"<<endl;

        cout<<" 5. Eliminar Primera Lista Ingresada"<<endl;

    

        cout<<" Introduzca una opcion (1-5): ";

        cin>>opcion;

    

    switch (opcion)

    {

        case 1:

            //Pedir los elementos a ingresar en la lista

            for( int i = 0; i < nLibros ; i++){

            cout<<" \n Ingrese Nombre del Libro: ";

            fflush(stdin);  //Vaciar buffer

            getline (cin,nombre);  //Leer con espacios en blanco

             

                

             do{

            cout<<" Ingrese Código del Libro: ";

            cin>>codigo;

             if (validacionEntero(codigo)){

             //Funcion retorna 1 si todos los elementos de la expresion ingresada estan en el rango de '0-9'

             }else{

             //Funcion retorna 0 si todos los elementos de la expresion ingresada no estan en el rango de '0-9'

             cout <<" ERROR: Digite Números Enteros"<<endl;

             }

             }while(validacionEntero(codigo)==false); //Repetir hasta que se ingrese una expresion solo con numeros enteros

                

            cout<<" Ingrese Área: ";

            fflush(stdin);  //Vaciar buffer

            getline (cin,area);  //Leer con espacios en blanco

            

            do{

            cout<<" Ingrese Año de Publicación: ";

            cin>>year;

            if (validacionEntero(year)){

            //Funcion retorna 1 si todos los elementos de la expresion ingresada estan en el rango de '0-9'

            }else{

            //Funcion retorna 0 si todos los elementos de la expresion ingresada no estan en el rango de '0-9'

            cout <<" ERROR: Digite Números Enteros"<<endl;

            }

            }while(validacionEntero(year)==false); //Repetir hasta que se ingrese una expresion solo con numeros enteros

            

            cout<<" Ingrese Autor: ";

            fflush(stdin);  //Vaciar buffer

            getline (cin,autor);  //Leer con espacios en blanco

           

            cout<<" Ingrese la Editorial: ";

            fflush(stdin);  //Vaciar buffer

            getline (cin,editorial);  //Leer con espacios en blanco

               

            insertarLista(lista,nombre,codigo,area,year,autor,editorial);

            }

            break;

       

         case 2:

            mostrarLista(lista);

            break;

         

        case 3:

            cout<<" \n NOTA: Para Eliminar por un Parámetro necesita tener ingresado al menos dos libros"<<endl;

            cout<<"Digite 1 para Continuar o 0 para volver al Menu Principal: ";

            cin>>opcion3;

            if( opcion3 == 1 ){

            menuEliminacion(lista,nombre,codigo,area,year,autor,editorial);

            }else{

                menuListas(lista,nombre,codigo,area,year,autor,editorial,nLibros);

            }

           break;


        case 4:

           elimnarPrimeroLista(lista,nombre,codigo,area,year,autor,editorial);

           break;

            

        case 5:

           elimnarUltimoLista(lista,nombre,codigo,area,year,autor,editorial);

           break;

           }

    } while(opcion != 6);

}


void menuEliminacion(Nodo *lista,string nombre, string codigo, string area, string year, string autor, string editorial ){

    int opcion1;

    //Pedir por cual parametro desea eliminar una lista el usuario

    cout<<" \n Elija Por Cual Parámetro Desea Eliminar una Lista "<<endl;

    cout<<" 1. Por Nombre"<<endl;

    cout<<" 2. Por Codigo"<<endl;

    cout<<" 3. Por Área"<<endl;

    cout<<" 4. Por Año de Publicación"<<endl;

    cout<<" 5. Por Autor"<<endl;

    cout<<" 6. Por Editorial"<<endl;

    

  

    cout<<" Introduzca una opcion (1-6): ";

    cin>>opcion1;

    switch (opcion1)

    {

        case 1:

        cout<<" \n Digite el Nombre del Libro a Eliminar: ";

        cin>>nombre;

        eliminarListaNombre(lista,nombre);

        break;

        case 2:

        cout<<" \n Digite el Código del Libro a Eliminar: ";

        cin>>codigo;

        eliminarListaCodigo(lista,codigo);

        break;

        case 3:

        cout<<" \n Digite el Área del Libro a Eliminar: ";

        cin>>area;

        eliminarListaArea(lista,area);

        break;

        case 4:

        cout<<" \n Digite el Año de Publicación del Libro a Eliminar: ";

        cin>>year;

        eliminarListaYear(lista,year);

        break;

        case 5:

        cout<<" \n Digite el Autor del Libro a Eliminar: ";

        cin>>autor;

        eliminarListaAutor(lista,autor);

        break;

        case 6:

        cout<<" \n Digite la Editorial del Libro a Eliminar: ";

        cin>>editorial;

        eliminarListaEditorial(lista,editorial);

        break;

}

}

 

void insertarLista(Nodo *&lista, string nombre, string codigo, string area, string year, string autor, string editorial){  //Procedimiento para Insertar un elemento a la lista

   

    Nodo *nuevoNodo = new Nodo();  //Crear un nuevo nodo

    nuevoNodo->nombre = nombre; //Asigna a nuevoNodo el elemento,"nombre", que se quiera incluir en la lista

    nuevoNodo->codigo = codigo; //Asigna a nuevoNodo el elemento,"codigo", que se quiera incluir en la lista

    nuevoNodo->area = area; //Asigna a nuevoNodo el elemento,"area", que se quiera incluir en la lista

    nuevoNodo->year = year; //Asigna a nuevoNodo el elemento,"year", que se quiera incluir en la lista

    nuevoNodo->autor = autor; //Asigna a nuevoNodo el elemento,"autor", que se quiera incluir en la lista

    nuevoNodo->editorial = editorial; //Asigna a nuevoNodo el elemento,"editorial", que se quiera incluir en la lista

    Nodo *aux1 = lista;  //Se crea dos nodos auxiliares y se le asigna lista al primero

    Nodo *aux2;


    if( lista == aux1){       //Permite ir insertando mas elementos a la lista

        lista = nuevoNodo;

    }

    else{

        aux2->siguiente = nuevoNodo;

    }

    nuevoNodo->siguiente = aux1;

    }



void mostrarLista(Nodo *lista){

    cout<<" \n El Registro de su Libro es: "<<endl;

    while(lista != NULL){   //Repetir esto hasta que se llegue a NULL, es decir, hasta que ya no exista mas elementos a recorrer

        cout<<endl;

        //Imprimir cada elmento que exista en cada lista

        cout<<" Libro: "<< lista->nombre <<endl;

        cout<<" Código: "<< lista->codigo <<endl;

        cout<<" Área: "<< lista->area <<endl;

        cout<<" Año de Publicación: "<< lista->year <<endl;

        cout<<" Autor: "<< lista->autor <<endl;

        cout<<" Editorial: "<< lista->editorial <<endl;

        lista = lista->siguiente//Recorremos la lista

    }

}


 void eliminarListaNombre(Nodo *lista, string n ){

     Nodo *aux = lista;

     while (lista != NULL){ //Si la lista no esta vacia

         if (lista -> nombre == n) {  //Si el elemento ingresado se encuentra dentro de la lista

             aux ->siguiente = lista ->siguiente; //Eliminamos la lista donde se encuentre ese elemento

         }

         aux = lista;

         lista = lista ->siguiente;

     }

     if(lista==NULL){

         cout<<" Elemento no ha sido encontrado dentro de la lista"<<endl; //Si el elemento ingresado por el usuario no esta dentro de la lista

     }

 }

void eliminarListaCodigo(Nodo *lista, string n ){

    Nodo *aux = lista;

    while (lista != NULL){ //Si la lista no esta vacia

        if (lista -> codigo == n) {  //Si el elemento ingresado se encuentra dentro de la lista

            aux ->siguiente = lista ->siguiente; //Eliminamos la lista donde se encuentre ese elemento

        }

        aux = lista;

        lista = lista ->siguiente;

    }

    if(lista==NULL){

        cout<<" Elemento no ha sido encontrado dentro de la lista"<<endl; //Si el elemento ingresado por el usuario no esta dentro de la lista

    }

}

void eliminarListaArea(Nodo *lista, string n ){

    Nodo *aux = lista;

    while (lista != NULL){ //Si la lista no esta vacia

        if (lista -> area == n) {  //Si el elemento ingresado se encuentra dentro de la lista

            aux ->siguiente = lista ->siguiente; //Eliminamos la lista donde se encuentre ese elemento

        }

        aux = lista;

        lista = lista ->siguiente;

    }

    if(lista==NULL){

        cout<<" Elemento no ha sido encontrado dentro de la lista"<<endl; //Si el elemento ingresado por el usuario no esta dentro de la lista

    }

}

void eliminarListaYear(Nodo *lista, string n ){

    Nodo *aux = lista;

    while (lista != NULL){ //Si la lista no esta vacia

        if (lista -> year == n) { //Si el elemento ingresado se encuentra dentro de la lista

            aux ->siguiente = lista ->siguiente; //Eliminamos la lista donde se encuentre ese elemento

        }

        aux = lista;

        lista = lista ->siguiente;

    }

    if(lista==NULL){

        cout<<" Elemento no ha sido encontrado dentro de la lista"<<endl; //Si el elemento ingresado por el usuario no esta dentro de la lista

    }

}

void eliminarListaAutor(Nodo *lista, string n ){

    Nodo *aux = lista;

    while (lista != NULL){ //Si la lista no esta vacia

        if (lista -> autor == n) {  //Si el elemento ingresado se encuentra dentro de la lista

            aux ->siguiente = lista ->siguiente; //Eliminamos la lista donde se encuentre ese elemento

        }

        aux = lista;

        lista = lista ->siguiente;

    }

    if(lista==NULL){

        cout<<" Elemento no ha sido encontrado dentro de la lista"<<endl; //Si el elemento ingresado por el usuario no esta dentro de la lista

    }

}


void eliminarListaEditorial(Nodo *lista, string n ){

    Nodo *aux = lista;

    while (lista != NULL){ //Si la lista no esta vacia

        if (lista -> editorial == n) { //Si el elemento ingresado se encuentra dentro de la lista

            aux ->siguiente = lista ->siguiente//Eliminamos la lista donde se encuentre ese elemento

        }

        aux = lista;

        lista = lista ->siguiente;

    }

    if(lista==NULL){

        cout<<" Elemento no ha sido encontrado dentro de la lista"<<endl; //Si el elemento ingresado por el usuario no esta dentro de la lista

    }

}


void elimnarPrimeroLista(Nodo *&lista, string nombre, string codigo, string area, string year, string autor, string editorial){

    if(lista != NULL){   //Si la lista no esta vacia

        Nodo *auxEliminar;

        auxEliminar=lista;


            lista = lista -> siguiente//Señalamos al primer elemento de la lista

            delete auxEliminar;  //Eliminamos el primer elemento

}

}



void elimnarUltimoLista(Nodo *&lista,  string nombre, string codigo, string area, string year, string autor, string editorial){

    if(lista != NULL){   //Si la lista no esta vacia

        Nodo *auxEliminar;

        auxEliminar=lista;

        while ((auxEliminar -> siguiente) -> siguiente != NULL){   //Recorremos la lista hasta que se llegue a Null

        auxEliminar = auxEliminar -> siguiente;

       }

        

        delete auxEliminar -> siguiente//Eliminamos el ultimo elemento

        auxEliminar -> siguiente = NULL//Enlazamos el penultimo elemento con NULL

    }

}


Publicar un comentario

0 Comentarios