quine me ayuda arreglar la parte de eliminar

Iniciado por geshiro, 17 Junio 2015, 04:47 AM

0 Miembros y 1 Visitante están viendo este tema.

geshiro

 la parte de eliminar si borra bien pero cuando borro si me borra bien pero cuando quiero borrar la cuenta 1  no me deja como lo arreglo


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
/*malloc-free-alloc-realloc unsigned*/
struct nodo{//DEFINE LA ESTRUCTURA
char nombre[128];
char fecha[10];
int cuenta;
float saldo;
struct nodo * sig;//SE CREA EL APUNTADOR DEL TAMAÑO DE UN NODO SIMILAR
};
typedef struct nodo NODO;//DEFINE TIPO DE DATO A PARTIR DE LA ESTRUCTURA DE nodo
typedef NODO *NODOPTR;//DEFINE UN TIPO DE APUNTADOR BASADO EN EL TAMAÑO DE NODO
NODOPTR fin=NULL,aux=NULL;
int isEmpty(NODOPTR cima){//RECIBE LA CIMA PARA LA COMPARACION
return (cima == NULL);
}
void add(NODOPTR * cima,NODOPTR * final,char nombre[128],char fecha[10],int cuenta,float saldo){//se agrega un nodo que la ara de final
system("cls");
NODOPTR nuevo;//APUNTADOR PARA EL NUEVO DATO
NODOPTR actual;//APUNTADOR TEMPORAL QUE SE UTILIZA CUANDO EXISTE AL MENOS UN DATO
nuevo = (NODO *) malloc(sizeof(NODO));//REGRESA LA DIRECCION DE UN BLOQUE DE MEMORIA EN EL CUAL SE ASIGNARAN LOS VALORES
if(nuevo==NULL){
printf("No se puede agregar");
}else{
if(isEmpty(*cima)){//SE ASIGNAN LOS VALORES RECIBIDOS POR LA FUNCION
strcpy(nuevo->nombre,nombre);
strcpy(nuevo->fecha,fecha);
nuevo->cuenta = cuenta;
nuevo->saldo = saldo;
nuevo->sig = NULL;//SE ASIGNA NULO POR QUE EL PRIMERO
*cima = nuevo;//AL SER EL PRIMERO SE ESTABLECE COMO LA CIMA
*final=nuevo;//AL SER EL ULTIMO SE ESTABLECE COMO EL FINAL
}else{
actual = *cima;//SE ALMACENA EL APUNTADOR DE LA CIMA ACTUAL
while(actual->sig != NULL){//SE RECORREN TODOS LOS ELEMENTOS DE LA COLA HASTA ENCONTRAR UN VALOR "NULL" EN LA PROPIEDAD DE SIGUIENTE
actual = actual->sig;//SE ASIGNA LA ESTRUCTURA SIGUIENTE A LA ACTUAL
}
strcpy(nuevo->nombre,nombre);
strcpy(nuevo->fecha,fecha);
nuevo->cuenta = cuenta;
nuevo->saldo = saldo;
nuevo->sig = NULL;
actual->sig = nuevo;//SE ASIGNA EL APUNTADOR DEL NUEVO ELEMENTO AL ULTIMO
}
}
}
/*void remove(NODOPTR *cima,int id){//RECIBE EL APUNTADOR DONDE SE ENCUENTRA LA CIMA
NODOPTR temp;//SE CREA UN NODO TEMPORAL
temp = *cima;//ALMACENA EL APUNTADOR DE LA CIMA
*cima = (*cima)->sig;//SE ALMACENA EL APUNTADOR DEL SIGUIENTE ELEMENTO EN LA LOCACION DE LA CIMA
free(temp);//SE LIBERA LA LOCACION DE MEMORIA TEMPORAL DONDE SE ENCONTRABA LA CIMA ACTUAL
}*/
void baja(NODOPTR cima,NODOPTR final,NODOPTR aux,int cuentaa)
{
NODOPTR nuevo;
for(nuevo=cima;nuevo!=NULL;aux=nuevo,nuevo=nuevo->sig)
{
if(nuevo->cuenta==cuentaa)
{
if(nuevo==cima)
     {
 cima=cima->sig;
 free(nuevo);
    }
else if(nuevo==final)
   {
final=aux;
free(nuevo);
final->sig=NULL;
   }
  else
   {
aux->sig=nuevo->sig;
free(nuevo);
   }
break;
}

}
}
void show(NODOPTR cima){//RECIBE LA CIMA
system("cls");
if(cima == NULL){
printf("La cola esta vacia");
}else{
while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO
printf("-----------------------------------------------------\n");
printf("Numero de cuenta:%d\n",cima->cuenta);
printf("Nombre:%s\n",cima->nombre);
printf("Fecha de nacimiento:%s\n",cima->fecha);
printf("Saldo:%f:\n",cima->saldo);
cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL
}
}
getch();
}
int find(NODOPTR cima,int cuenta){//RECIBE LA CIMA
int found = 0;
if(cima == NULL){
printf("La cola esta vacia");
}else{
while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO
if(cima->cuenta == cuenta){
found = 1;
break;
}
cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL
}
}
return found;
}
int edit(NODOPTR cima,int cuenta,char nombre[128],char fecha[10]){//RECIBE LA CIMA
int success = 0;
if(cima == NULL){
printf("La cola esta vacia");
}else{
while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO
if(cima->cuenta == cuenta){
strcpy(cima->nombre,nombre);
strcpy(cima->fecha,fecha);
success = 1;
break;
}
cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL
}
}
return success;
}
int deposito(NODOPTR cima,int cuenta,int cantidad){//RECIBE LA CIMA
int success = 0;
if(cima == NULL){
printf("La cola esta vacia");
}else{
while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO
if(cima->cuenta == cuenta){
cima->saldo+=cantidad;
success = 1;
break;
}
cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL
}
}
return success;
}
int retirar(NODOPTR cima,int cuenta,int cantidad){//RECIBE LA CIMA//
int success = 0;
if(cima == NULL){
printf("La cola esta vacia");
}else{
while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO
if(cima->cuenta == cuenta){
if(cima->saldo>=cantidad){
cima->saldo-=cantidad;
success = 1;
break;
}else
printf("No cuenta con el saldo suficiente\n");
}
cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL
}
}
return success;
}
//RETORNO DE APUNTADOR
NODOPTR findptr(NODOPTR cima,int cuenta){//RECIBE LA CIMA
NODOPTR found = NULL;
if(cima == NULL){
printf("La cola esta vacia");
}else{
while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO
if(cima->cuenta == cuenta){
found = cima;
break;
}
cima = cima->sig;//SE ASIGNA EL SIGUIENTE A LA CIMA ACTUAL
}
}
return found;
}
int main(){
NODOPTR cima = NULL;
/*NODOPTR cuenta_1 = NULL;
NODOPTR cuenta_2 = NULL;*/
int cuenta_1,cuenta_2;
int x = 0;
//Variables
char nombre[128];
char fecha[100];
int cuenta,cuenta_3;
float cantidad;
strcpy(nombre,"Roberto");
strcpy(fecha,"1991-06-07");
add(&cima,&fin,nombre,fecha,1,1000.00);
strcpy(nombre,"Saul");
strcpy(fecha,"1996-09-30");
add(&cima,&fin,nombre,fecha,2,1900.00);
//show(cima);
/*cuenta_1 = findptr(cima,1);
cuenta_2 = findptr(cima,2);
printf("%f\n",cuenta_1->saldo);
printf("%f\n",cuenta_2->saldo);
return 0; */
do{
system("cls");
printf("Seleccione una opcion\n");
printf("1.Agregar\n");
printf("2.Modificar\n");
printf("3.Desplegar cuentas\n");
printf("4.Deposito\n");
printf("5.Retiro\n");
printf("6.Transferencia\n");
printf("7.Baja\n");
printf("0.Salir\n");
scanf("%d",&x);
switch(x){
case 1:
system("cls");
printf("Ingrese el nombre del titular:\n");
fflush(stdin);
gets(nombre);//fgets(nombre,sizeof(nombre),stdin);
system("cls");
printf("Ingrese la fecha de nacimiento del titular:\n");
fflush(stdin);
gets(fecha);//fgets(fecha,sizeof(fecha),stdin);
do{
system("cls");
printf("Ingrese el numero de cuenta del titular:\n");
scanf("%d",&cuenta);
}while(find(cima,cuenta)==1);
add(&cima,&fin,nombre,fecha,cuenta,0.00);//////////////// SE AGREGO FINAL
break;
case 2:
do{
system("cls");
printf("Ingrese el numero de cuenta:\n");
scanf("%d",&cuenta);
}while((find(cima,cuenta))==0);
if(cuenta != 0){
system("cls");
printf("Ingrese el nombre del titular:\n");
fflush(stdin);
gets(nombre);
system("cls");
printf("Ingrese la fecha de nacimiento del titular:\n");
fflush(stdin);
gets(fecha);
if(edit(cima,cuenta,nombre,fecha)==1)
printf("Sus datos fueron almacenados\n");
else
printf("Hubo un error al almacenar sus datos\n");
}
break;
case 3:
show(cima);
break;
case 4:
do{
system("cls");
printf("Ingrese el numero de cuenta:\n");
scanf("%d",&cuenta);
}while((find(cima,cuenta))==0);
if(cuenta != 0){
system("cls");
printf("Ingrese la cantidad a depositar:\n");
scanf("%f",&cantidad);
if(deposito(cima,cuenta,cantidad)==1)
printf("Deposito realizado con exito\n");
else
printf("Hubo un error al depositar\n");
}
break;
case 5:
do{
system("cls");
printf("Ingrese el numero de cuenta:\n");
scanf("%d",&cuenta);
}while((find(cima,cuenta))==0);
if(cuenta != 0){
system("cls");
printf("Ingrese la cantidad a retirar:\n");
scanf("%f",&cantidad);
if(retirar(cima,cuenta,cantidad)==1)
printf("Retiro realizado con exito\n");
else
printf("Hubo un error al retirar\n");
}
break;
case 6:
do{
system("cls");
printf("Ingrese el numero de cuenta benefactora:\n");
scanf("%d",&cuenta_1);
}while((find(cima,cuenta_1))==0);
do{
system("cls");
printf("Ingrese el numero de cuenta beneficiario:\n");
scanf("%d",&cuenta_2);
}while((find(cima,cuenta_2))==0);
if(cuenta_1 != 0 && cuenta_2 != 0){
system("cls");
printf("Ingrese la cantidad a transferir:\n");
scanf("%f",&cantidad);
if(retirar(cima,cuenta_1,cantidad)==1){
if(deposito(cima,cuenta_2,cantidad))
printf("Transferencia realizada con exito\n");
}else
printf("Hubo un error al retirar\n");
}
break;
case 7:// ELIMINA

system("cls");
printf("°NO ELIMINAR EL 1°\n");
printf("Que cuenta quieres darle de baja ? :\n");
scanf("%d",&cuenta_3);
baja(cima,fin,aux,cuenta_3);
       break;
}
}while(x!=0);

return 0;
}

engel lex

Aclaro reglas del foro... los titulos de los temas deben ser descriptivos


"quien me ayuda c" no es descriptivo (al igual que ninguno de tus titulos anteriores)

si publicas un tema en C/C++ se obvia que es solicitando una ayuda sobre C o C++, y lo de "quien" se sobreentiende...

por favor coloca un titulo claro y descriptivo al problema
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.