Ayuda con codigo de banco

Iniciado por MrAxelLag, 9 Mayo 2018, 02:10 AM

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

MrAxelLag

Consegui avanzar demasiado, ahora este es el problema, al borrar datos y volverlos a mostrar me imprime basura, y no se como arreglar eso, mira...


#include <stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define p printf
#define cls system("cls");

const int max = 2;

typedef struct{
   char nombre[20];
   char fecha[20];
   char numero[20];
   float saldo;
}_persona;

void buscar(_persona* personas);
void agregar(_persona* personas);
void mostrar(const _persona* personas);
void modificar(_persona* personas);
void borrar(_persona* personas);

int main(int argc, char* argv[]){
   int op, opc=0,band,max=2,j=0;

   _persona personas[max];
   do{
        cls;
      p("1.Agregar saldos\n");
      p("2.-Ver saldos\n");
      p("3.-Buscar saldos\n");
      p("4.-Modificar saldos\n");
      p("5.-Borrar\n\n");
      p("Que opcion desea ejecutar?\n ");
      scanf("%d",&op);

      switch(op){
         case 1:
             cls;
            agregar(personas);
         break;
         case 2:
            mostrar(personas);
            getch();
         break;
         case 3:
            p("Ha elegido Buscar saldos...\n");
            getch();
            buscar(personas);
            getch();
            break;
            case 4:
                p("Ha elegido Modificar saldos...\n");
                getch();
                modificar(personas);
                getch();
                break;
            case 5:
                p("Ha elegido Borrar Datos....\n");
                getch();
                borrar(personas);
                getch();
                break;
      }
   }while(opc != 6);
}

void agregar(_persona* personas){
   cls;
   int i,j;
   for(i=0; i<max; i++){
      p("Digite su nombre: ");
      fflush(stdin);
      scanf("%s", personas.nombre);
      p("Digite su num. de cuenta: ");
      scanf("%s", personas.numero);
      p("Digite la fecha(dd-mm-aaaa)");
      fflush(stdin);
      scanf("%s", personas.fecha);
      p("Digite el saldo:%c",36);
      fflush(stdin);
      scanf("%f",&personas.saldo);
      p("Su saldo es de: %c%.2f\n",36,personas.saldo);
   }
}

void mostrar(const _persona* personas){
    cls;
   int i,h,j;
   p("Ha elegido ver los saldos...\n");
   for(i=0; i<max; i++){
        p("Nombre: %s \n",personas.nombre);
      p("Numero de cuenta:%s \n",personas.numero);
      p("La fecha es: %s\n",personas.fecha);
      p("Su saldo es de: %c%.2f\n",36,personas.saldo);
        }
}


void buscar(_persona* personas){
    int band;

    int i,comp;
    char jaja[20];
    p("Introduzca numero de cuenta:");
    fflush(stdin);
    scanf("%s",&jaja);
    band=0;
    for(i=0; i<max; i++){
    if(strcmp(personas.numero,jaja)==0){
        p("Nombre: %s \n",personas.nombre);
      p("Numero de cuenta %s \n:",personas.numero);
      p("La fecha es %s \n:",personas.fecha);
      p("Su saldo es de: %c%.2f\n",36,personas.saldo);
      band=1;
   }


    }
        if(band!=1)
            p("\n No encontrado\n");
        else
            p("\n Encontrado \n");

}


void modificar(_persona* personas){
    int band;

    int i,comp;
    char jaja[20];
    p("Introduzca numero de cuenta:");
    fflush(stdin);
    scanf("%s",&jaja);
    band=0;
    for(i=0; i<max; i++){
    if(strcmp(personas.numero,jaja)==0){
        p("Nombre: %s \n",personas.nombre);
      p("Su saldo es de: %c%.2f\n",36,personas.saldo);
      p("\nDatos Nuevos \n");
        p("Digite su nombre nuevo: ");
      fflush(stdin);
      scanf("%s", personas.nombre);
      p("Digite su nuevo num. de cuenta: ");
      scanf("%s", personas.numero);
      p("Digite la nueva fecha(dd-mm-aaaa)");
      fflush(stdin);
      scanf("%s", personas.fecha);
      p("Digite el nuevo saldo:%c",36);
      fflush(stdin);
      scanf("%f",&personas.saldo);
      p("Su saldo es de: %c%.2f\n",36,personas.saldo);
      band=1;
    }


    }
        if(band!=1)
            p("\n No se pudo modificar los datos\n");
        else
            p("\n Modificación Exitosa\n");

}

void borrar(_persona* personas){
    int band;

    int z, i,com,j;
    char jaja[20];
    p("Introduzca numero de cuenta a borrar:");
    fflush(stdin);
    scanf("%s",&jaja);
    band=0;
    for(i=0; i<max; i++){
    if(strcmp(personas.numero,jaja)==0){
        strcpy(personas.nombre,"");
        strcpy(personas.numero,"");
        strcpy(personas.fecha,"");
        personas.saldo=0;
      band=1;
      j=j+1;
      for(;i<max;i++){
      z=i+1;
      strcpy(personas.nombre,personas[z].nombre);
        strcpy(personas.numero,personas[z].numero);
        strcpy(personas.fecha,personas[z].fecha);
        personas.saldo=personas[z].saldo;}

   }


    }
        if(band!=1)
            p("\n Datos no eliminados\n");
        else
            p("\n Datos eliminados exitosamente\n");

}

Kenji-chan

lo de borrar datos es mas sencillo dado que estamos usando una constante que nos define el largo de nuestro array tendremos que poner un dato extra en nuestra estructura

typedef struct{
   char nombre[20];
   char fecha[20];
   char numero[20];
   float saldo;
   int estado;//->nuevo dato miembro de nuestra estructura
}_persona;


este nuevo datos solo podrá contener dos valores 1 para vacio y 0 para en uso de este modo cuando estés borrando datos lo único que tienes que hacer es poner el la variable estado a 1 pero tendremos que modificar las demás funciones para que estas se integren con el nuevo dato


void buscar(_persona* personas);/*esta funcion solo buscara datos que tengan un estado de 0*/
void agregar(_persona* personas);/*esta funcion agregara datos con que tengan un estado diferente(!=) a 0 */
void mostrar(const _persona* personas);/*esta funcion unica mente mostrara datos que tengan un estado de 0*/
void modificar(_persona* personas); /*esta funcion solo modifica datos que tengan un estado de 0*/



MrAxelLag

Logre borrar los datos, lo ultimo que me queda por hacer es lograr que ordene por el metodo burbuja los numeros de cuenta pero no lo hace, sabes donde eta mi error?



void ordenar(_persona* personas){
    int z, i,aux,j,k;

    for(i=0;i<max;i++){
            if(personas.numero>personas[i+1].numero){
               strcpy(aux,personas.numero);
                strcpy(personas.numero,personas[i+1].numero);
                strcpy(personas[i+1].numero,aux);
        }

    }
}

Kenji-chan

el método de la burbuja se compone de dos ciclos for


void burbuja(_persona* array){
int i, j;
_persona aux;
for(i=1; i<max; i++){//comenzamos el iterador i desde el indice 1(pos 2)
for(j=0; j<max-i; j++){//comenzamos el iterador j desde el indice 0(pos 1)
if(array[j] > array[j+1]){/*si el que esta a la derecha del indice j es mayor hacemos el cambio*/
aux = array[j+1];
array[j+1] = array[j];
array[j] = aux;
}
}
}
}

MrAxelLag

No encuentro como comparar la cadena para saber cual numero es mayor como hago eso?


void ordenar(_persona* personas){
    int z, i,j,k;
    char aux[20];
    for(i=0;i<=max;i++){
            for(j=0;j<=max;j++){
            if(personas[j].numero>personas[j+1].numero){
                strcpy(personas[j].numero,aux);
                strcpy(personas[j+1].numero,personas[j].numero);
                strcpy(aux,personas[j+1].numero);
                }
            }
    }
}

Kenji-chan


void ordenar(_persona* personas){
    int z, i,j,k;//-> las variavles z y k las declaras pero no las usas
    char aux[20];//-> este auxiliar es para un estring y lo que queremos es intercambiar variavles de tipo _persona
    for(i=0;i<=max;i++){//-> el <=max hace que nos salgamos del rango de memoria reservada para el array
            for(j=0;j<=max;j++){//-> lomismo a qui
            if(personas[j].numero>personas[j+1].numero){/*-> personas.[j].numero es una variable de tipo char* para comparar dos char* se usa la funcion int strcmp(const char *str1, const char *str2)*/
/*en este trozo de codigo lo unico que haces es intercambiar la variable numero pero los demas datos se mantienen en la misma pocicion, tienes que intercambiar toda la estructura para que el ordenamiento sea correcto*/
                strcpy(personas[j].numero,aux);
                strcpy(personas[j+1].numero,personas[j].numero);
                strcpy(aux,personas[j+1].numero);
                }
            }
    }
}