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
}
}
0 Comentarios