Ver Mensaje Individual
  #13 (permalink)  
Antiguo 17/07/2013, 22:13
ambigus
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 16 años, 2 meses
Puntos: 1
Pregunta Respuesta: Programación Orientada en Objetos de C++

¿Qué hay de mal en este código?, ¿Porqué no me elimina al estudiante que le digito el código?

Código C++:
Ver original
  1. #include "stdafx.h"
  2. #include "iostream"
  3. #include <conio.h>
  4. using namespace System;
  5. using namespace std;
  6. struct nodo
  7. {
  8.     int   codigo; // Nuevo
  9.     char *nombre; // Nuevo
  10.     int   nivel; // Nuevo
  11.     nodo *sig; // Nuevo
  12. };
  13.  
  14. nodo *inicial=NULL;
  15. /////////////////////////////////////////////////////
  16. void leer_nodo(nodo *nuevo)
  17. {
  18.     cout<<"Entre codigo del estudiante"<<endl;  // Nuevo
  19.     cin>>nuevo->codigo;                         // Nuevo
  20.     cout<<"Entre nombre del estudiante"<<endl;  // Nuevo
  21.     cin.ignore();                               // Nuevo
  22.     nuevo->nombre=new char[30];                 // Nuevo
  23.     cin.getline(nuevo->nombre,30);              // Nuevo
  24.     cout<<"Entre nivel del estudiante"<<endl;   // Nuevo
  25.     cin>>nuevo->nivel;                          // Nuevo
  26. }
  27.  
  28. /////////////////////////////////////////////////////
  29. void crear_lista(nodo *anterior, nodo *nuevo)
  30. {
  31.     if(anterior == NULL)
  32.     {
  33.         nuevo->sig = inicial;
  34.         leer_nodo(nuevo);
  35.         inicial = nuevo;
  36.     }
  37.     else
  38.     {
  39.         nuevo->sig = anterior->sig;
  40.         anterior->sig = nuevo;
  41.         leer_nodo(nuevo);
  42.     }
  43. }
  44.  
  45. /////////////////////////////////////////////////////
  46. void imprime_nodo(nodo *apun)
  47. {
  48.     cout<<"-----------------------------"<<endl;
  49.     cout<<"El codigo es:     "<<apun->codigo<<endl;
  50.     cout<<"El nombre es:     "<<apun->nombre<<endl;
  51.     cout<<"El nivel  es:     "<<apun->nivel<<endl;
  52.     cout<<"-----------------------------"<<endl;
  53. }
  54.  
  55. /////////////////////////////////////////////////////
  56. void reco_recur(nodo *apun)
  57. {
  58.     if (apun != NULL)
  59.     {
  60.         imprime_nodo(apun);
  61.         reco_recur(apun->sig);
  62.     }
  63. }
  64.  
  65. /////////////////////////////////////////////////////
  66. void borrar_lista(nodo *apun)
  67. {
  68.     nodo *inicial;
  69.     while(apun != NULL)
  70.     {
  71.         inicial=apun->sig;
  72.         delete apun;
  73.         apun=inicial;
  74.     }
  75. }
  76.  
  77. /////////////////////////////////////////////////////
  78. nodo *buscar_nodo(nodo *apun,int &codigo)
  79. {
  80.     while(apun != NULL)
  81.     {
  82.         if(apun->codigo==codigo)return apun;
  83.         else apun=apun->sig;
  84.     }
  85.     return NULL;
  86. }
  87.  
  88. ////////// INVENTADO ////////////////////////
  89. nodo *eliminar_nodo(nodo *apun,int &codigo)
  90. {
  91.     nodo *aux;
  92.     aux=inicial;
  93.  
  94.     while(aux->sig != apun)aux=aux->sig;
  95.     aux->sig = apun ->sig;
  96.     delete apun;
  97.     return NULL;
  98. }
  99.  
  100. /////////////////////////////////////////////////////
  101. nodo *agregar_nodo(nodo *anterior,nodo *nuevo,int &codigo)
  102. {
  103.     if(codigo == 0)
  104.     {
  105.         //agrega al inicio de la lista
  106.         nuevo->sig=anterior;
  107.         anterior=nuevo;
  108.         leer_nodo(nuevo);
  109.         return anterior;
  110.     }
  111.     else
  112.     {
  113.         //Agrega despues del primero, segundo,..., o último
  114.         //elemento de la lista
  115.         nuevo->sig=anterior->sig;
  116.         anterior->sig=nuevo;
  117.         leer_nodo(nuevo);
  118.         return anterior;
  119.     }
  120. };
  121.  
  122.  /////////////////////////////////////////////////////
  123. void main()
  124. {
  125.     nodo *anterior, *nuevo, *apun; char resp; anterior=NULL;
  126.     cout<<"EMPIEZA A CREAR LA LISTA ORIGINAL"<<endl<<endl;;
  127.     do
  128.     {
  129.         nuevo = new nodo;
  130.         crear_lista(anterior, nuevo);
  131.         anterior = nuevo;
  132.         cout<<endl ;
  133.         cout<<"DESEA CREAR OTRO NODO? (s/n) "<<endl<<endl;;
  134.         cin>>resp;
  135.         resp=tolower(resp);
  136.     }while(resp != 'n');
  137.  
  138.     //inicio del recorrido de la lista
  139.     cout<<"LA LISTA ORIGINALMENTE CREADA ES : "<<endl;
  140.     apun = inicial;
  141.     reco_recur(apun);
  142.     //inicio de la agregación de nuevos nodos
  143.     cout<<endl ;
  144.     cout<<"INICIO DE LA AGREGACION DE NUEVOS NODOS A LA LISTA ORIGINAL"<<endl;
  145.     int codigo;
  146.     apun=inicial;
  147.     do
  148.     {
  149.         cout<<endl;
  150.         cout<<"Entre codigo clave (Digite 0 si va agregar a la cabeza de la lista,"<<endl;
  151.         cout<<"en caso contrario digite el codigo del nodo anterior al que va a crear) "<<endl<<endl;
  152.        
  153.         cin>>codigo ;
  154.         if(codigo==0)
  155.         {
  156.             nuevo =new nodo;
  157.             inicial = agregar_nodo(inicial,nuevo,codigo);
  158.         }
  159.         else
  160.         {
  161.             anterior=inicial;
  162.             anterior = buscar_nodo(anterior,codigo);
  163.             if(anterior!=NULL)
  164.             {
  165.                 nuevo =new nodo;
  166.                 anterior = agregar_nodo(anterior,nuevo,codigo);
  167.             }
  168.             else cout<<"El nodo no ha sido encontrado "<<endl;
  169.         }
  170.         cout<<"DESEA AGREGAR OTRO NODO (s/n)"<<endl;
  171.         cin>>resp;
  172.         resp=tolower(resp);
  173.     }while(resp != 'n');
  174.  
  175.     cout<< "LA LISTA COMPLETA ES: "<<endl;
  176.     apun = inicial;
  177.     reco_recur(apun);
  178.  
  179.         //inicio de la agregación de nuevos nodos
  180.     cout<<endl ;
  181.     cout<<"INICIO DE LA ELIMINACION DE NODOS DE LA LISTA ACTUAL"<<endl;
  182.    
  183.     apun=inicial;
  184.     do
  185.     {
  186.         cout<<endl;
  187.         cout<<"Entre codigo clave (Digite el codigo del estudiante que va a eliminar) "<<endl<<endl;
  188.        
  189.         cin>>codigo ;
  190.  
  191.         anterior=inicial;
  192.         anterior = buscar_nodo(anterior,codigo);
  193.  
  194.         if(anterior!=NULL)
  195.         {
  196.             anterior = eliminar_nodo(anterior,codigo);
  197.             if ( anterior==NULL)
  198.             {
  199.                 cout<<"El nodo ha sido eliminado existosamente "<<endl;
  200.             }
  201.         }
  202.         else cout<<"El nodo no ha sido encontrado "<<endl;
  203.        
  204.         cout<<"DESEA ELIMINAR OTRO NODO (s/n)"<<endl;
  205.         cin>>resp;
  206.         resp=tolower(resp);
  207.     }while(resp != 'n');
  208.  
  209.     cout<< "LA LISTA COMPLETA ES: "<<endl;
  210.     apun = inicial;
  211.     reco_recur(apun);
  212.  
  213.     getch();
  214.     borrar_lista(inicial);
  215. }