• Jueves 28 de Marzo de 2024, 21:09

Autor Tema:  eliminar nodo de una multilista EN C++ VISUAL STUDIO  (Leído 2628 veces)

anitamape

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
eliminar nodo de una multilista EN C++ VISUAL STUDIO
« en: Domingo 10 de Abril de 2016, 04:09 »
0
buena noche, tengo un codigo donde debo de ingresar un dato y eliminarlo pero no me eliminar, por favor si alguien sabe donde tengo el error, poco se programar!!! GRACIAS A LA PERSONA QUE ME COLABORE
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

class Nodo
{
private:
   Nodo *sig;
   Nodo *primero;
   string nombre;
public:
   friend class Marca_y_Modelo;
   Nodo()
   {
      sig = NULL;
      nombre = "";
      primero = NULL;
   }
};

class Marca_y_Modelo
{
private:
   Nodo *primerMarca;
public:
   Marca_y_Modelo()
   {
      primerMarca = NULL;
   }

   void insertarMarca(string marca)
   {
      Nodo *nuevo;
      nuevo = new Nodo;
      nuevo->nombre = marca;
      if (primerMarca == NULL)
         primerMarca = nuevo;
      else
      {
         Nodo *aux;
         aux = primerMarca;
         while (aux->sig != NULL)
            aux = aux->sig;
         aux->sig = nuevo;
      }
   }

   void insertarModelo(string marca2, string modelo)
   {
      if (primerMarca != NULL)
      {
         Nodo *aux;
         aux = primerMarca;
         while (aux->nombre != marca2 && aux->sig != NULL)
            aux = aux->sig;
         if (aux->nombre == marca2)
         {
            Nodo *nuevo;
            nuevo = new Nodo;
            nuevo->nombre = modelo;
            if (aux->primero == NULL)
               aux->primero = nuevo;
            else
            {
               Nodo *aux2;
               aux2 = aux->primero;
               while (aux2->sig != NULL)
                  aux2 = aux2->sig;
               aux2->sig = nuevo;
            }
         }
         else
            cout << " Marca inexistente!! " << endl;
      }
      else
         cout << " Modelo ingresado antes que la marca " << endl;
   }

   void eliminarModelo(string marca2, string modelo)
   {
      if (primerMarca != NULL)/*INGRESA A LA LISTA MARCA Y PREGUNTA SI ESTA VACIA*/
      {
         Nodo *aux;
         aux = primerMarca;
         while (aux->nombre != marca2 && aux->sig != NULL)
            aux = aux->sig;
         if (aux->nombre == marca2)/*INGRESA A LA LISTA MARCA Y PREGUNTA SI LA MARCA ES IGUAL A LA QUE ESCRIBIMOS POR PANTALLA*/
         {
            Nodo *aux2;
            aux2->nombre = modelo;
            if (aux2->primero == NULL/*SI LA MARCA ESCRITA ES CORRECTA ENTRA A LA LISTA DE MODELOS Y PREGUNTA SI ES VACIA*/
            {
                  cout << " Modelo vacio!! " << endl;
            else

               if (aux2->nombre == modelo)/*ENTRA A LA LISTA DE MODELOS Y BUSCA EL MODELO QUE ESCRIBIMOS Y LO ELIMINA*/
               {
                  aux2->primero = aux->sig;

               }
               /*SI NO ENCUENTRA EL MODELO DEBE DE SALIR EL MENSAJE MODELO NO EXISTE*/
            }
         }
         else
            cout << " Marca inexistente!! " << endl;
      }
   }


   void presentar()
   {
      if (primerMarca != NULL)
      {
         Nodo *aux;
         aux = primerMarca;
         while (aux != NULL)
         {
            cout << "Marca: " << aux->nombre << endl;
            if (aux->primero != NULL)
            {
               Nodo *aux2;
               aux2 = aux->primero;
               while (aux2 != NULL)
               {
                  cout << "Modelo: " << aux2->nombre << endl;
                  aux2 = aux2->sig;
               }
            }
            else
               cout << aux->nombre << "No tiene modelos" << endl;
            aux = aux->sig;
         }
      }
      else
         cout << "No hay datos para presentar" << endl;
   }

   void menu()
   {
      int menu;
      string marca;
      string marca2;
      string modelo;
      do
      {
         cout << "--------------------------------" << endl;
         cout << "------------- MENU -------------" << endl;
         cout << "--------------------------------" << endl;
         cout << " 1. Agregar marca               " << endl;
         cout << " 2. Agregar modelo de una marca " << endl;
         cout << " 3. Eliminar Modelo            " << endl;
         cout << " 4. Mostrar la lista            " << endl;
         cout << " 5. Salir                       " << endl;
         cout << "--------------------------------" << endl;
         cout << "Digite opcion: ";
         cin >> menu;
         switch (menu)
         {
         case 1:
            cout << "Escriba la marca: ";
            cin >> marca;
            insertarMarca(marca);
            break;
         case 2:
            cout << "Escriba la marca para luego asignar un modelo: ";
            cin >> marca2;
            cout << "Escriba el modelo: ";
            cin >> modelo;
            insertarModelo(marca2, modelo);
            break;
         case 3:
            cout << "Escriba la marca: ";
            cin >> marca2;
            cout << "Escriba el modelo: ";
            cin >> modelo;
            eliminarModelo(marca2, modelo);
            break;
         case 4:
            presentar();
            break;
         default:
            cout << "Finalizar" << endl;
            break;
         }
      } while (menu != 5);
   }
};

void main()
{
   Marca_y_Modelo lista;
   lista.menu();
}