/*Actividad 13*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 5
typedef struct {
char nombres[40];
char apellidoMat[30];
char apellidoPat[30];
char tarjeta[20];
char cvc[6];
char nickname[30];
float saldo;
} usuario;
void guardarUsuarios(usuario reg[], int total);
void leerArchivoTexto();
void leerArchivoBinario();
void mostrarUsuario(usuario x);
usuario registro(usuario reg[], int pos);
int main() {
usuario reg[MAX] = {
{"Luis David", "García", "Pérez", "1234567891011", "123", "Maximander8", 150.0},
{"Hazel", "Hernández", "Ruiz", "1110987654321", "456", "UrialHaz7", 30000.5},
{"Sofia Sunashi", "Rojas", "Vásquez", "1223334444", "789", "Pebble", 75.25}
};
int total = 3;
int opcion;
do {
printf("\n==================== Menú de opciones ====================");
printf("\n1-Guardar usuarios en archivo binarion\n2-Mostrar contenido de
archivo\n3-Archivo binario\n4-Nuevo usuario\n0-Salir\nPor favor seleccione lo que desea
realizar: ");
scanf("%d", &opcion);
getchar();
switch (opcion) {
case 1:
guardarUsuarios(reg, total);
break;
case 2:
leerArchivoTexto();
break;
case 3:
leerArchivoBinario();
break;
case 4:
if (total < MAX) {
reg[total] = registro(reg, total);
total++;
printf("Usuario registrado exitosamente :D\n");
} else {
printf("Nos quedamos sin cupo para usuarios D: (máximo %d).\n", MAX);
}
break;
case 0:
printf("Hasta luego...\n");
break;
default:
printf("Opción incorrecta.\n");
}
} while (opcion != 0);
return 0;
}
void guardarUsuarios(usuario reg[], int total) {
char nombreArchivo[100];
printf("Por favor ingrese un nombre para el archivo binario: ");
fgets(nombreArchivo, sizeof(nombreArchivo), stdin);
nombreArchivo[strcspn(nombreArchivo, "\n")] = '\0';
FILE *f = fopen(nombreArchivo, "wb");
if (f == NULL) {
printf("Error al abrir el archivo...\n");
return;
}
fwrite(reg, sizeof(usuario), total, f);
fclose(f);
printf("Los usuarios se han guardado exitosamente (Yei) en '%s'.\n", nombreArchivo);
printf("\nContenido guardado en '%s':\n", nombreArchivo);
f = fopen(nombreArchivo, "rb");
if (f == NULL) {
printf("No se pudo abrir el archivo para lectura :C '%s'.\n", nombreArchivo);
return;
}
usuario u;
while (fread(&u, sizeof(usuario), 1, f)) {
mostrarUsuario(u);
}
fclose(f);
}
void leerArchivoTexto() {
char nombreArchivo[100];
printf("Ingrese el nombre del archivo de texto que desea ver: ");
fgets(nombreArchivo, sizeof(nombreArchivo), stdin);
nombreArchivo[strcspn(nombreArchivo, "\n")] = '\0';
FILE *f = fopen(nombreArchivo, "r");
if (f == NULL) {
printf("No se pudo abrir el archivo :C'%s'.\n", nombreArchivo);
return;
}
printf("\nAbriendo archivo :D '%s':\n\n", nombreArchivo);
char linea[200];
while (fgets(linea, sizeof(linea), f)) {
printf("%s", linea);
}
fclose(f);
}
void leerArchivoBinario() {
char nombreArchivo[100];
printf("Ingrese el nombre del archivo binario a leer: ");
fgets(nombreArchivo, sizeof(nombreArchivo), stdin);
nombreArchivo[strcspn(nombreArchivo, "\n")] = '\0';
FILE *f = fopen(nombreArchivo, "rb");
if (f == NULL) {
printf("No se pudo abrir el archivo :C '%s'.\n", nombreArchivo);
return;
}
usuario u;
printf("\nUsuarios almacenados en '%s':\n", nombreArchivo);
while (fread(&u, sizeof(usuario), 1, f)) {
mostrarUsuario(u);
}
fclose(f);
}
void mostrarUsuario(usuario x) {
printf("\n----------------------------------------");
printf("\nNombre completo: %s %s %s", [Link], [Link], [Link]);
printf("\nTarjeta: %s | CVC: %s", [Link], [Link]);
printf("\nNickname: %s", [Link]);
printf("\nSaldo: $%.2f", [Link]);
printf("\n----------------------------------------\n");
}
usuario registro(usuario reg[], int pos) {
usuario nueva;
int i, repetido;
printf("\nIngrese nombre(s): ");
fgets([Link], sizeof([Link]), stdin);
[Link][strcspn([Link], "\n")] = '\0';
printf("Apellido paterno: ");
fgets([Link], sizeof([Link]), stdin);
[Link][strcspn([Link], "\n")] = '\0';
printf("Apellido materno: ");
fgets([Link], sizeof([Link]), stdin);
[Link][strcspn([Link], "\n")] = '\0';
printf("Número de tarjeta: ");
fgets([Link], sizeof([Link]), stdin);
[Link][strcspn([Link], "\n")] = '\0';
printf("CVC: ");
fgets([Link], sizeof([Link]), stdin);
[Link][strcspn([Link], "\n")] = '\0';
do {
repetido = 0;
printf("Nickname: ");
fgets([Link], sizeof([Link]), stdin);
[Link][strcspn([Link], "\n")] = '\0';
for (i = 0; i < pos; i++) {
if (strcmp([Link], reg[i].nickname) == 0) {
printf("Ese nickname ya está registrado. Intente otro.\n");
repetido = 1;
break;
}
}
} while (repetido);
[Link] = 0;
return nueva;
}