Ayuda con codigo de banco

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

0 Miembros y 4 Visitantes están viendo este tema.

Kenji-chan

tal y como tienes ahora mismo el código tendrías que hacer otro switch dentro del caso 3
tomando el numero de cuenta ingresado por el usuario y para cada caso todos los números de cuenta almacenados pero si lo haces con estructuras y arrays solo tienes que recorrer el array en comparando el dato miembro del dato a buscar

MrAxelLag

No te entiendo a lo que dices de recorrer el array, como podria realizar esto?

Kenji-chan

si tienes el código echo con una estruct y un arrar

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

_persona personas[max];


puedes recorrer el array personas con un ciclo for

for(i=0; i<max; i++){
if(personas[i].numero == buscar){
/*mostrar los datos de la persona*/
}
}

MrAxelLag

ok intente agregarle la funcion buscar de la manera en que me indicase pero no me imprime los datos. Sabes donde esta mi error?

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

#define p printf
#define cls system("cls");

const int max = 10;

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

void buscar(_persona personas[max]);
void agregar(_persona* personas);
void mostrar(const _persona* personas);


int main(int argc, char* argv[]){
   int op, opc=0;
   _persona personas[max];
   do{
        cls;
      p("1.Agregar saldos\n");
      p("2.-Ver saldos\n");
      p("3.-Modificar saldos\n");
      p("4.-Buscar saldos\n");
      p("5.-Salir\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 Modificar saldos...\n");
            buscar(personas);
         break;
      }
   }while(opc != 5);
}

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

void mostrar(const _persona* personas){
    cls;
   int i;
   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){
    cls;
    int y,i;
    p("Introduzca numero de cuenta:");
    scanf("%d",&y);
    for(i=0; i<max; i++){
   if(personas.numero == y){
        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);
        }
    }
}

Kenji-chan

El número de cuenta en el struc esta declarado como un char* (string) y en la función buscar lo capturas como un int ya sea que lo cambies en el estruct como un int o en la función como un char* y lo compares con la función strcmp () de la biblioteca string.h

MrAxelLag

jamas habia usado la funcion de strcmp, ya que apenas estamos en lo basico, lo implemente de esta forma pero el program deja de funcionar, no estoy seguro si de lo implemente bien, tu que opinas?



void buscar(_persona* personas){
    cls;
    int i,c;
    char y[20];
    p("Introduzca numero de cuenta:");
    scanf("%d",&y);
    c = strcmp( y, personas.numero);
    if (c = 0)
        for(i=0; i<max; i++){
        if(personas.numero == y){
            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);
        }
    if (c != 0)
        p("El numero de cuenta no se encuentra");
    }
}

Kenji-chan

la funcion int strcmp(const char *str1, const char *str2) recibe dos parámetros si el valor de Retorno <0 indica que str1 es menor que str2. si Valor de retorno> 0 indica que str2 es menor que str1. si el valor de Retorno = 0 indica que str1 es igual a str2.

ademas de que cuando capturas el string lo haces mal

p("Introduzca numero de cuenta:");
    scanf("%d",&y);

cuando deberia de ser

p("Introduzca numero de cuenta:");
    scanf("%s", y);


pero si nunca has usado esta función mejor te recomiendo que cambies el tipo de variable a int en el struc de esa forma te sera mas fácil

MrAxelLag

Es que igual con el %s me sigue cerrando el programa. y cambiando el tipo de variable en el struct, como quedaria el codigo en la funcion de buscar?

Kenji-chan

si en el struct

typedef struct{
   char nombre[20];
   char fecha[20];
   int numero[20]; //lo cambiamos a int
   float saldo;
}_persona;


entonces para buscarlo seria tan fácil como

for(i=0; i<max; i++){
if(personas[i].numero == buscar){
/*mostrar los datos de la persona*/
                break; //esto es para que pare de buscar
}
}


pero ten en cuenta que al cambiar el tipo de variable las funciones

void agregar(_persona* personas);
void mostrar(const _persona* personas);


se verán afectadas

MrAxelLag

Vale, pero pese a ya corregir las funciones me sigue sin imprimir los datos al buscar, por que no sale ?, que estoy haciendo mal?


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

#define p printf
#define cls system("cls");

const int max = 10;

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

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


int main(int argc, char* argv[]){
   int op, opc=0;
   _persona personas[max];
   do{
        cls;
      p("1.Agregar saldos\n");
      p("2.-Ver saldos\n");
      p("3.-Modificar saldos\n");
      p("4.-Buscar saldos\n");
      p("5.-Salir\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:
             getch();
            p("Ha elegido Modificar saldos...\n");
            getch();
            buscar(personas);
            getch();
         break;
      }
   }while(opc != 5);
}

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

void mostrar(const _persona* personas){
    cls;
   int i;
   p("Ha elegido ver los saldos...\n");
   for(i=0; i<max; i++){
      p("Nombre: %s \n",personas.nombre);
      p("Numero de cuenta %d \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){
    cls;
    int i,c,bus;
    p("Introduzca numero de cuenta:");
    scanf("%s",&bus);
    for(i=0; i<max; i++){
   if(personas.numero == bus){
        p("Nombre: %s \n",personas.nombre);
      p("Numero de cuenta %d \n:",personas.numero);
      p("La fecha es %s \n:",personas.fecha);
      p("Su saldo es de: %c%.2f\n",36,personas.saldo);
      break;
        }
    }
}