Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/11/2010, 11:26
frank2304
 
Fecha de Ingreso: octubre-2010
Mensajes: 11
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta ayuda en lista simpl. enlazada!!!

hola amigos del foro, quisiera que me ayuden con la funcion de borrar de la siguiente lista enlazada, lo que pasa es que no me borra...
les dejo el codigo, gracias de antemano

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <alloc.h>
#include <string.h>

typedef struct nodo {
char nom[20];
char ape[30];
char dni[9];
char tel[9];
nodo *sig;
}nodo;

void mostrar_menu();
void anadir_cliente();
void buscar_cliente();
void mostrar_lista();
void borrar_cliente();
void modificar_cliente();

nodo *primero, *ultimo,*u,*aux;


void main()
{
char opcion;
primero = (nodo *) NULL;
ultimo = (nodo *) NULL;
do{
mostrar_menu();
opcion = getch();
switch ( opcion )
{
case '1': anadir_cliente(); break;
case '2': modificar_cliente(); break;
case '3': borrar_cliente(); break;
case '4': mostrar_lista(); break;
case '5': buscar_cliente(); break;
case '6': exit(1);
default: clrscr();
gotoxy(3,25),printf("\a[!] Opcion invalida\n" ); break;
}
}while(opcion!='6');
}


void mostrar_menu()
{

gotoxy(25,2),printf("PROGRAMA DE REGISTRO DE CLIENTES\n");
gotoxy(3,3),printf("============================== =============================================\n");
gotoxy(3,4),printf("MENU\n");
gotoxy(3,6),printf("(1) Agregar nuevo cliente\n");
gotoxy(3,8),printf("(2) Modificar datos del cliente\n");
gotoxy(3,10),printf("(3) Eliminar cliente\n");
gotoxy(3,12),printf("(4) Mostrar lista de clientes\n");
gotoxy(3,14),printf("(5) Buscar cliente por dni\n");
gotoxy(3,16),printf("(6) Salir al sistema\n\n");
gotoxy(3,18),printf("============================= ==============================================\n") ;
gotoxy(3,20),printf("Ingrese opcion: ");fflush(stdin);

}

void anadir_cliente()
{
nodo *nuevo;
nuevo = (nodo *) malloc (sizeof(nodo));
clrscr();
if (nuevo==NULL)
printf("No hay memoria disponible\n");
else
{
printf("AGREGAR NUEVO CLIENTE\n");
printf("========================================== =================================\n");
printf("Nombre: "); fflush(stdin);
gets(nuevo->nom);
printf("Apellido: "); fflush(stdin);
gets(nuevo->ape);
printf("DNI: "); fflush(stdin);
gets(nuevo->dni);
printf("Teléfono: "); fflush(stdin);
gets(nuevo->tel);
nuevo->sig = NULL;
if (primero==NULL)
{
printf("========================================== =================================");
printf("\n[!] Cliente añadido satisfactoriamente\n");
primero = nuevo;
ultimo = nuevo;
}
else
{
printf("========================================== =================================");
printf("\n[!] Cliente añadido satisfactoriamente\n");
ultimo -> sig = nuevo;
ultimo = nuevo;
}
}
printf("========================================== =================================\n");
printf("\n Presione una tecla para continuar\n");
getch();
clrscr();
}

void mostrar_lista()
{
nodo *auxiliar;
int i;
i=0;
auxiliar = primero;
clrscr();
printf("MOSTRAR LISTA DE CLIENTES\n");
printf("========================================== =================================\n");
printf("Nº ");
printf("Nombre\t\t");
printf("Apellido\t\t");
printf("DNI\t\t");
printf("Telefono\t \n");
while (auxiliar!=NULL)
{
gotoxy(1,5+i),printf("%d\t",i+1);
gotoxy(7,5+i),printf("%s\t\t",auxiliar->nom);
gotoxy(25,5+i),printf("%s\t\t",auxiliar->ape);
gotoxy(49,5+i),printf("%s\t",auxiliar->dni);
gotoxy(65,5+i),printf("%s\t\n",auxiliar->tel);
auxiliar = auxiliar->sig;
i++;
}
if (i==0)
{
printf("========================================== =================================");
printf("\n[!] No hay clientes\n");
}
else
{
if (i>=0)
{
printf("========================================== =================================");
printf("\n[!] Numero de clientes: %d\n",i);
}
}
printf("========================================== =================================\n");
printf("\nPresione una tecla para continuar\n");
getch();
clrscr();
}

void buscar_cliente()
{
char dniop[9];
int i;
i=0;
nodo* inicio;
nodo* aux;
inicio = primero;
clrscr();
printf("BUSCAR CLIENTE POR DNI\n");
printf("========================================== =================================\n");
printf("Ingrese DNI del cliente a buscar: ");
scanf("%s", &dniop);
for (aux = inicio; aux!=NULL; aux=aux->sig)
if (strcmp(aux->dni,dniop)==0)
{
printf("\nNombre : %s\n", aux -> nom);
printf("Apellido : %s\n", aux -> ape);
printf("DNI : %s\n", aux -> dni);
printf("Telefono : %s\n", aux -> tel);
i++;
}
printf("========================================== =================================");
printf("\n[!] Clientes encontrados: %d\n",i);
printf("========================================== =================================\n");
printf("\nPresione una tecla para continuar\n");
getch();
clrscr();
}

void borrar_cliente()
{
char dniop[9];
nodo* inicio;
nodo* aux;
nodo* ant;
inicio = primero;
clrscr();
printf("BORRAR CLIENTE POR DNI\n");
printf("========================================== =================================\n");
printf("Ingrese DNI del cliente a borrar: ");
scanf("%s", &dniop);
ant = NULL;
for (aux = inicio; aux!=NULL; aux=aux->sig)
if (strcmp(aux->dni,dniop)==0)
{
if (ant != NULL) // Me fijo que ant no sea nulo. Indica si estoy o no en el primer elemento.
ant->sig = aux -> sig;
else
inicio = aux->sig; // En este caso borro el primer elemento por lo que tengo que modificar el primero.
free(aux);
}
printf("\nPresione una tecla para continuar\n");
getch();
clrscr();
}

void modificar_cliente()
{
int band=1;
char modifica[20],opc;
u=primero;
clrscr();
printf("MODIFICAR DATOS DEL CLIENTE\n");
printf("========================================== =================================\n");
printf("(1) Modificar nombre\n");
printf("(2) Modificar apellido\n");
printf("(3) Modificar DNI\n");
printf("(4) Modificar telefono\n\n");
printf("========================================== =================================\n");
printf("Ingrese opcion: ");
opc = getch();
switch ( opc )
{
case '1':
printf("\nIngrese nombre a modificar: ");
gets(modifica);
while(u!=NULL){
if(strcmp(modifica,u->nom)==0){
printf("\Ingrese reemplazo: ");
gets(u->nom);
band=0;
}
u=u->sig;
}
if(band==1){
printf("========================================== =================================");
printf("\n[!] No se encontro nombre a modificar\n");
printf("========================================== =================================\n");
}
break;
case '2':
printf("\nIngrese apellido a modificar: ");
gets(modifica);
while(u!=NULL){
if(strcmp(modifica,u->ape)==0){
printf("\Ingrese reemplazo: ");
gets(u->ape);
band=0;
}
u=u->sig;
}
if(band==1){
printf("========================================== =================================");
printf("\n[!] No se encontro apellido a modificar\n");
printf("========================================== =================================\n");
}
break;
case '3':
printf("\nIngrese DNI a modificar: ");
gets(modifica);
while(u!=NULL){
if(strcmp(modifica,u->dni)==0){
printf("\Ingrese reemplazo: ");
gets(u->dni);
band=0;
}
u=u->sig;
}
if(band==1){
printf("========================================== =================================");
printf("\n[!] No se encontro DNI a modificar\n");
printf("========================================== =================================\n");
}
break;
case '4':
printf("\nIngrese telefono a modificar: ");
gets(modifica);
while(u!=NULL){
if(strcmp(modifica,u->tel)==0){
printf("\Ingrese reemplazo: ");
gets(u->tel);
band=0;
}
u=u->sig;
}
if(band==1){
printf("========================================== =================================");
printf("\n[!] No se encontro telefono a modificar\n");
printf("========================================== =================================\n");
}
break;
}
printf("\nPresione una tecla para continuar\n");
getch();
clrscr();
}