[ Foro de C++ ]

AYUDAA ARCHIV OS BINARIOS Y ESTRUCTURA

05-Nov-2020 02:42
Invitado (Gianfranco)
0 Respuestas

Necesito en la funcion Buscar_Usuarios, buscar el usuario ingresado y mostrar su datos pero no me sale por nada del mundo ya intente todo nose que esta mal pueden ayudarme porfavor

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

/*Estructuras UwU*/
struct registroUsuarios{
unsigned long nroCuenta;
char nombreUsuario[80];
char patente[10];
unsigned long saldo;
}Usuario;
typedef struct registroUsuarios Usuarios;

struct recargasUsuarios{
int nroControl;
unsigned long nroCuenta;
unsigned long monto;
unsigned long saldoPrevio;
char fecha[6];
char hora[6];
}UsuarioRecargas;

/*Titulo del Programa*/
void tituloPrincipal();
/*Menú principal del Programa*/
int menuPrincipal();

/*Prototipado de Funciones*/
void Registrar_Usuarios ();
void Buscar_Usuarios();
void Recargas_Usuarios();
char existeUsuario(int nroCuenta, Usuarios *registroUsuarios);
char insertarUsuario(Usuarios registroUsuarios);

int main (){
setlocale(LC_ALL, "spanish");
int x;

do{
x = menuPrincipal();
switch (x){
case 1: Registrar_Usuarios();
break;
case 2: Recargas_Usuarios();
break;
case 3: Buscar_Usuarios();
break;
}
    }while(x != 7);

return 0;
}

void Recargas_Usuarios(){
FILE * Usuarios_recargas;
char repite = 0;
char respuesta[1];
int i=0;
do {
system("cls");
tituloPrincipal();
printf("\n\t\t\t\t    ==> RECARGA DE CREDITO <==\n");
printf ("\n\t\t\t\tNº control: %i",i);
printf ("\n\n\t\t\t\tNúmero de cuenta: ");
scanf ("%u",&UsuarioRecargas.nroCuenta);
printf ("\n\t\t\t\tMonto a cargar (MINIMO $100): "); //Crear comprobación en donde si el usuario ingresa monto<100 escriba en pantalla "Sos boludo o no sabes leer"
scanf ("%u",&UsuarioRecargas.monto);
UsuarioRecargas.saldoPrevio=(Usuario.saldo+UsuarioRecargas.monto);
printf ("\n\t\t\t\tFecha (Dia/Mes/Año): ");
scanf ("%s",&UsuarioRecargas.fecha);
printf ("\n\t\t\t\tHora: ");
scanf ("%s",&UsuarioRecargas.fecha);
//printf("%u",UsuarioRecargas.saldoPrevio);  NO FUNCIONA COMO DEBERÍA
if ((Usuarios_recargas = fopen("recargas.dat","ab")) != NULL){
fwrite (&UsuarioRecargas,sizeof(UsuarioRecargas),1,Usuarios_recargas);
fclose(Usuarios_recargas);
}else
printf ("Error de apertura de archivo");

printf("\n\t\t\t\tDesea recargar el crédito de otro usuario? [S/N]: ");
scanf("%s",&respuesta);
    if (!(strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
    repite = 1;
    }
   i++;
   }while (repite==0);
}

char existeUsuario(int nroCuenta, Usuarios *registroUsuarios){
  FILE *archivo;
   char existe;

    /* Abre el archivo en modo lectura */
    archivo = fopen("usuarios.dat", "rb");

    if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
    existe = 0;

} else {
    existe = 0;

    /* Se busca el usuario cuyo código coincida con nroCuenta (celular del usuario) */
    fread(&(*registroUsuarios), sizeof(*registroUsuarios), 1, archivo);
    while (!feof(archivo)){
    if ((*registroUsuarios).nroCuenta == Usuario.nroCuenta) {  //Hace la comprobación
    existe = 1;
    break;
    }
    fread(&(*registroUsuarios), sizeof(*registroUsuarios), 1, archivo);
    }
    /* Cierra el archivo */
    fclose(archivo);
    }
    return existe;
   }
   
char insertarUsuario(Usuarios registroUsuarios){
  FILE *archivo;
   char insercion;

   /* Abre el archivo para agregar datos al final */
  archivo = fopen("usuarios.dat", "ab"); /* Añade datos al final. Si el archivo no existe, es creado */

    if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
    insercion = 0;
}
else {
    fwrite(&registroUsuarios, sizeof(registroUsuarios), 1, archivo);
    insercion = 1;
    /* Cierra el archivo */
    fclose(archivo);
    }
    return insercion;
   }
   
void Registrar_Usuarios(){
FILE * Usuarios_registrados;
Usuarios registroUsuarios;
int nroCuenta=0;
char repite = 0;
char respuesta[1];
do {
system("cls");
tituloPrincipal();
printf("\n\t\t\t\t    ==> REGISTRO DE USUARIOS <==\n");
printf ("\n\t\t\t\tIngrese el número de celular del usuario: ");
scanf ("%u",&Usuario.nroCuenta);
if (!existeUsuario(nroCuenta, &registroUsuarios)){
//registroUsuarios.nroCuenta = nroCuenta;

getchar();
printf ("\n\t\t\t\tIngrese su nombre completo: ");
scanf ("%s",&Usuario.nombreUsuario);
printf ("\n\t\t\t\tIngrese la patente de su automovil: ");
scanf ("%s",&Usuario.patente);
//printf ("Ingresar el saldo");
//scanf ("%u",&Usuario.saldo);
Usuario.saldo=50; //Inicializa en 50$ para motivar al usuario a descargarse la app y tener 1HS de estacionamiento gratuito, y así poder controlar a la población con un Malware
if ((Usuarios_registrados = fopen("usuarios.dat","ab")) != NULL){
fwrite (&Usuario,sizeof(Usuario),1,Usuarios_registrados);
fclose(Usuarios_registrados);
}else
printf ("Error de apertura de archivo");

/* Se inserta al usuario en el archivo */
   if (insertarUsuario(registroUsuarios)) {
    printf("\n\t\t\t\tEl usuario fue agregado correctamente.\n");
} else {
    printf("\n\tOcurrió un error al intentar agregar el usuario.\n");
    }
} else {
    /* El usuario ya existe, no puede ser insertado. */
    printf("\n\t\t\t\tHa ingresado un usuario ya existente\n");
    }

printf("\n\t\t\t\tDesea seguir registrando usuarios? [S/N]: ");
scanf("%s",&respuesta);
    if (!(strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
    repite = 1;
    }
   } while (repite==0);
   
   //ANULANDO MOSTRAR USUARIOS
//Esto debe ser una funcionMostrarUsuario(); o funcionBuscarUsuario();
//Estado == funcionando
/*
if ((Usuarios_registrados = fopen("usuarios.dat","rb")) != NULL){
fread (&Usuario,sizeof(Usuario),1,Usuarios_registrados);
while (!feof(Usuarios_registrados)){
printf ("%u\n",Usuario.nroCuenta);
puts (Usuario.nombreUsuario);
puts (Usuario.patente);
printf ("%u",Usuario.saldo);
fread (&Usuario,sizeof(Usuario),1,Usuarios_registrados);
}
fclose (Usuarios_registrados);

} else printf ("Error de apertura de archivo");
*/

}

int menuPrincipal(){
int x;
system("cls");
tituloPrincipal();
printf("\n\t\t\t\t\t\tMENU PRINCIPAL\n");
   printf("\n\t\t\t\t[1]. Carga de Usuarios.\n");
printf("\t\t\t\t[2]. Carga de Crédito.\n");
   printf("\t\t\t\t[7]. Salir\n");
   printf("\n\t\t\t\tIngrese su opción: [ ]\b\b");
scanf("%d",&x);
return x;
}

void tituloPrincipal(){
    int i;
    printf("\n       .==============================================.\n");
    printf("\t\t\t\t |   Sistema de Estacionamiento Medido  (SEM) |\n");
    printf("\t\t\t\t |         Version: 1.0.3 BETA TEST |\n");
    printf("\t\t\t\t |     Copyright 2020 | Miche,LS,amumu |\n");
    printf("       .==============================================.\n");

    i = 0;
    putchar('\n');
    for (; i < 120; i++) {
    putchar('_');
    }
   }
   
   void Buscar_Usuarios(){
    FILE * Usuarios_registrados;
char nombre_Usuario[80];
int existe = 0;

printf ("Ingrese el usuario a buscar");
scanf ("%s",nombre_Usuario);
if ((Usuarios_registrados = fopen("Usuarios.dat","r+b")) != NULL){
fread (&Usuario,sizeof(Usuario),1,Usuarios_registrados);
while (!feof(Usuarios_registrados)){
if (nombre_Usuario==Usuario.nombreUsuario){
printf ("%s %u %s %u",Usuario.nombreUsuario, Usuario.nroCuenta, Usuario.patente, Usuario.saldo);
existe = 1;

fread (&Usuario,sizeof(Usuario),1,Usuarios_registrados);
}  
}if (existe == 0) printf ("El usuario ingresado no existe");

fclose (Usuarios_registrados);

} else printf ("Error de apertura de archivo");





}




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)