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:
InicioSesion();
break;
case 2:
RegistrarUsuario();
break;
case 3:
break;
case 4:
FinalizarPrograma();
break;
default:
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);
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);
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);
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);
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
);
if((strcmp(usuario.
e_mail, e_mail
) == 0) && (strcmp(usuario.
pasword, pass
) == 0)){ encontrado = 1;
}
fread(&usuario
, sizeof(usuario
), 1, archivo
); }
if(encontrado == 1){
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();
}
}
}
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
);
if(strcmp(usuario
->e_mail
, email
) == 0){ existe = 1;
break;
}
fread(usuario
, sizeof(usuario
), 1, 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
); printf("\n\t\tUsuario Registrado con EXITO"); }
}
int LeerCadena(char *cadena, int n){
int i, c;
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);
main();
}
void MenuInicioSesion(){
Sleep(3000);
MostrarMenu_InicioSesion();
}
void FinalizarPrograma(){
printf("\n\t ==================================================="); printf("\n\t| LA Billetera Virtual CERRARA en Cualquier Momento |"); printf("\n\t ===================================================\n\n"); Sleep(3000);
}