#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
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
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
}
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;
}
else if(nuevo==final)
{
final=aux;
final->sig=NULL;
}
else
{
aux->sig=nuevo->sig;
}
break;
}
}
}
void show(NODOPTR cima){//RECIBE LA CIMA
if(cima == NULL){
}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
}
}
}
int find(NODOPTR cima,int cuenta){//RECIBE LA CIMA
int found = 0;
if(cima == NULL){
}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){
}else{
while(cima != NULL){//RECORRE HASTA ENCONTRAR EL ULTIMO ELEMENTO
if(cima->cuenta == cuenta){
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){
}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){
}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){
}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;
add(&cima,&fin,nombre,fecha,1,1000.00);
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{
printf("Seleccione una opcion\n"); printf("3.Desplegar cuentas\n"); switch(x){
case 1:
printf("Ingrese el nombre del titular:\n"); gets(nombre
);//fgets(nombre,sizeof(nombre),stdin); printf("Ingrese la fecha de nacimiento del titular:\n"); gets(fecha
);//fgets(fecha,sizeof(fecha),stdin); do{
printf("Ingrese el numero de cuenta del titular:\n"); }while(find(cima,cuenta)==1);
add(&cima,&fin,nombre,fecha,cuenta,0.00);//////////////// SE AGREGO FINAL
break;
case 2:
do{
printf("Ingrese el numero de cuenta:\n"); }while((find(cima,cuenta))==0);
if(cuenta != 0){
printf("Ingrese el nombre del titular:\n"); printf("Ingrese la fecha de nacimiento del titular:\n"); 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{
printf("Ingrese el numero de cuenta:\n"); }while((find(cima,cuenta))==0);
if(cuenta != 0){
printf("Ingrese la cantidad a depositar:\n"); if(deposito(cima,cuenta,cantidad)==1)
printf("Deposito realizado con exito\n"); else
printf("Hubo un error al depositar\n"); }
break;
case 5:
do{
printf("Ingrese el numero de cuenta:\n"); }while((find(cima,cuenta))==0);
if(cuenta != 0){
printf("Ingrese la cantidad a retirar:\n"); if(retirar(cima,cuenta,cantidad)==1)
printf("Retiro realizado con exito\n"); else
printf("Hubo un error al retirar\n"); }
break;
case 6:
do{
printf("Ingrese el numero de cuenta benefactora:\n"); }while((find(cima,cuenta_1))==0);
do{
printf("Ingrese el numero de cuenta beneficiario:\n"); }while((find(cima,cuenta_2))==0);
if(cuenta_1 != 0 && cuenta_2 != 0){
printf("Ingrese la cantidad a transferir:\n"); 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
printf("°NO ELIMINAR EL 1°\n"); printf("Que cuenta quieres darle de baja ? :\n"); baja(cima,fin,aux,cuenta_3);
break;
}
}while(x!=0);
return 0;
}