Ayuda URGENTE con este programa en C

Iniciado por mari2diaz, 22 Octubre 2018, 01:13 AM

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

mari2diaz

Tengo problemas con estas  dos funciones void RegistrarUsuario(); void InicioSesion(); la registrar usuario me guarda el primer usuario cuando se crea al archivo pero luego me dice email registrado con todos los demás que intento guardar y inicio sesión después de introducir email y contraseña dice programa dejo de funcionar

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

#define MAX 50

char Linea[MAX];

/* ----------------------
 | Definir Estructuras |
 ----------------------*/

// Usuario
typedef struct Billetera{
char moneda[MAX];
float saldo;
}Monedas;

typedef struct Datos{
char nombre[MAX];
char apellido[MAX];
char telefono[MAX];
char pais[MAX];
}DatosPersonales;

typedef struct PerfilUsuario{
char e_mail[MAX];
char pasword[MAX];
DatosPersonales p;
Monedas m;
}Usuario;
// Administrador
typedef struct CompraVenta{
char moneda[MAX];
float precioD;
float precioE;
float precioBS;
float compra;
float venta;
}Moneda;

typedef struct PerfilAdministrador{
Moneda monedas;
}Administrador;

int MostrarMenu_BilleteraVirtual();
int MostrarMenu_InicioSesion();
int LeerCadena(char *cadena, int n);
int ConfirmarEmail(char email[], Usuario *usuario);

void InicioSesion();
void RegistrarUsuario();
void GuardarCuentaUsuario(Usuario *usuario);

void MenuPrincipal();
void MenuInicioSesion();
void FinalizarPrograma();


int main(){

switch(MostrarMenu_BilleteraVirtual()){
case 1:
system("cls");
InicioSesion();
system("cls");
break;
case 2:
system("cls");
RegistrarUsuario();
   break;
case 3:
   break;
case 4:
   FinalizarPrograma();
   break;
default:
   system("cls");
   printf("\n\t\t ===================");
   printf("\n\t\t| Opcion incorrecta |");
   printf("\n\t\t ===================");
   MenuPrincipal();
   main();
}

return 0;
}

int MostrarMenu_BilleteraVirtual(){
int opcion = 0;
printf("\n\t\t\t\t ===================");
printf("\n\t\t\t\t| Billetera Virtual |");
printf("\n\t\t\t\t ===================\n\n");

printf("\t\t[1] Ingresar como Usuario\n");
printf("\t\t[2] Registrarse\n");
printf("\t\t[3] Ingresar como Administrador\n");
printf("\t\t[4] Salir del Programa\n");

printf("\n\t\tDigite su opcion: [ ]\b\b");
LeerCadena(Linea, MAX);
sscanf(Linea, "%d", &opcion);
return opcion;
}

int MostrarMenu_InicioSesion(){
int opcion = 0;

printf("\t\t[1] Perfil de Usuario\n");
printf("\t\t[2] Su Billetera\n");
printf("\t\t[3] Comprar Criptomonedas\n");
printf("\t\t[4] Vender Criptomonedas\n");
printf("\t\t[5] Cerrar Sesion\n");

printf("\n\t\tDigite su opcion: [ ]\b\b");
LeerCadena(Linea, MAX);
sscanf(Linea, "%d", &opcion);
return opcion;
}

void RegistrarUsuario(){
Usuario usuario;
printf("\n\t\t\t\t ================");
printf("\n\t\t\t\t| Cree su Cuenta |");
printf("\n\t\t\t\t ================\n\n");
   printf("\t\tNombre de pila: ");
LeerCadena(usuario.p.nombre, MAX);
printf("\t\tApellido: ");
LeerCadena(usuario.p.nombre, MAX);
printf("\n\t\tCorreo elctronico: ");
LeerCadena(usuario.e_mail, MAX);
printf("\t\tElegir una contasena: ");
LeerCadena(usuario.pasword, MAX);

if(ConfirmarEmail(usuario.e_mail, &usuario) == 0){
GuardarCuentaUsuario(&usuario);
MenuPrincipal();
}else{
printf("\n\t\tEste Email ya tiene Cuenta de Usuario");
MenuPrincipal();
}
}

void InicioSesion(){
FILE *archivo = fopen("BilleteraVirtualUsuarios.dat", "rb");
char pass[MAX], e_mail[MAX], encontrado;
Usuario usuario;

if(archivo == NULL){
printf("\n\t\t ========================");
printf("\n\t\t|Lo siento. ERROR Interno|");
printf("\n\t\t ========================");
MenuPrincipal();
}else{
encontrado = 0;
printf("\n\t\t\t =====================================");
   printf("\n\t\t\t| Iniciar sesion en Billetera Virtual |");
   printf("\n\t\t\t =====================================\n\n");
   
   printf("\t\tCorreo electronico: ");
   LeerCadena(e_mail, MAX);
   printf("\t\tContrasena: ");
   LeerCadena(pass, MAX);
   
   /* Se recorre el archivo secuencialmente */
fseek(archivo, 0, SEEK_SET); /* Posiciona el cursor al principio del archivo */
   fread(&usuario, sizeof(usuario), 1, archivo);
   
   while(!feof(archivo)){
    if((strcmp(usuario.e_mail, e_mail) == 0) && (strcmp(usuario.pasword, pass) == 0)){
    encontrado = 1;
}
fread(&usuario, sizeof(usuario), 1, archivo);
}

if(encontrado == 1){
system("cls");
printf("\n\tBilletera Virtual\t\t%s %s\n\n", usuario.p.nombre, usuario.p.apellido);

switch(MostrarMenu_InicioSesion()){
case 1:
break;
case 2:
   break;
case 3:
   break;
case 4:
   break;
case 5:
MenuPrincipal();
   break;
default:
printf("\n\t\t ===================");
           printf("\n\t\t| Opcion incorrecta |");
           printf("\n\t\t ===================");
       MenuInicioSesion();
   break;
}

}else{
printf("\n\n\t\tUsuario no registrado");
MenuPrincipal();
}

fclose(archivo);
}
}

int ConfirmarEmail(char email[], Usuario *usuario){
FILE *archivo = fopen("BilleteraVirtualUsuarios.dat", "rb");
int existe;

if(archivo == NULL){
existe = 0;
}else{
existe = 0;

fread(usuario, sizeof(usuario), 1, archivo);

while(!feof(archivo)){
if(strcmp(usuario->e_mail, email) == 0){
existe = 1;
break;
}
fread(usuario, sizeof(usuario), 1, archivo);
}

fclose(archivo);
}
return existe;
}

void GuardarCuentaUsuario(Usuario *usuario){
FILE *archivo = fopen("BilleteraVirtualUsuarios.dat", "ab");

if(archivo == NULL){
printf("\n\t\t ========================");
printf("\n\t\t|Lo siento. ERROR Interno|");
printf("\n\t\t ========================");
MenuPrincipal();
}else{
fwrite(usuario, sizeof(usuario), 1, archivo);
fclose(archivo);
printf("\n\t\tUsuario Registrado con EXITO");
}
}

int LeerCadena(char *cadena, int n){
int i, c;

c = getchar();
if (c == EOF) {
cadena[0] = '\0';
return 0;
}

if (c == '\n') {
i = 0;
} else {
cadena[0] = c;
i = 1;
}

for (; i < n - 1 && (c = getchar()) != EOF && c != '\n'; i++) {
cadena[i] = c;
}
cadena[i] = '\0';

if (c != '\n' && c != EOF)
while ((c = getchar()) != '\n' && c != EOF);

return 1;
}

void MenuPrincipal(){
Sleep(3000);
system("cls");
main();
}

void MenuInicioSesion(){
Sleep(3000);
system("cls");
MostrarMenu_InicioSesion();
}

void FinalizarPrograma(){
system("cls");
   printf("\n\t ===================================================");
printf("\n\t| LA Billetera Virtual CERRARA en Cualquier Momento |");
printf("\n\t ===================================================\n\n");
Sleep(3000);
   exit(0);
}