Generation

language from codeWed, 11 Dec 2024

#ifndef ESTRUCTURAS_H #define ESTRUCTURAS_H #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> typedef enum { BASICA, PLUS, PLATINO } TipoMembresia; typedef struct { int dia; int mes; int anio; } FechaNacimiento; typedef struct { TipoMembresia tipo; time_t fecha_inicio; int estado; // 0: vencida, 1: activa } Membresia; typedef struct { char nombre[50]; char apellido[50]; char correo[70]; char telefono[15]; FechaNacimiento fecha_nacimiento; Membresia membresia; } Cliente; int guardar_clientes(Cliente* clientes, int num_clientes, const char* nombre_archivo) { FILE* archivo = fopen(nombre_archivo, "w"); if (!archivo) return 0; for (int i = 0; i < num_clientes; i++) { fprintf(archivo, "%s,%s,%s,%s,%d/%d/%d,%d,%ld,%d\n", clientes[i].nombre, clientes[i].apellido, clientes[i].correo, clientes[i].telefono, clientes[i].fecha_nacimiento.dia, clientes[i].fecha_nacimiento.mes, clientes[i].fecha_nacimiento.anio, clientes[i].membresia.tipo, clientes[i].membresia.fecha_inicio, clientes[i].membresia.estado); } fclose(archivo); return 1; } int cargar_clientes(Cliente** clientes, int* num_clientes, const char* nombre_archivo) { FILE* archivo = fopen(nombre_archivo, "r"); if (!archivo) return 0; *num_clientes = 0; *clientes = NULL; Cliente temp; while (fscanf(archivo, "%[^,],%[^,],%[^,],%[^,],%d/%d/%d,%d,%ld,%d\n", temp.nombre, temp.apellido, temp.correo, temp.telefono, &temp.fecha_nacimiento.dia, &temp.fecha_nacimiento.mes, &temp.fecha_nacimiento.anio, (int*)&temp.membresia.tipo, &temp.membresia.fecha_inicio, &temp.membresia.estado) == 10) { Cliente* nuevo = realloc(*clientes, (*num_clientes + 1) * sizeof(Cliente)); if (!nuevo) { fclose(archivo); return 0; } *clientes = nuevo; (*clientes)[*num_clientes] = temp; (*num_clientes)++; } fclose(archivo); return 1; } Cliente* crear_cliente() { Cliente* nuevo = (Cliente*)malloc(sizeof(Cliente)); if (!nuevo) return NULL; printf("Nombre: "); scanf("%49s", nuevo->nombre); printf("Apellido: "); scanf("%49s", nuevo->apellido); printf("Correo: "); scanf("%69s", nuevo->correo); printf("Telefono: "); scanf("%14s", nuevo->telefono); printf("Fecha de nacimiento\n"); printf("Dia: "); scanf("%d", &nuevo->fecha_nacimiento.dia); printf("Mes: "); scanf("%d", &nuevo->fecha_nacimiento.mes); printf("Anio: "); scanf("%d", &nuevo->fecha_nacimiento.anio); nuevo->membresia.tipo = BASICA; nuevo->membresia.fecha_inicio = time(NULL); nuevo->membresia.estado = 1; return nuevo; } int registrar_cliente(Cliente** clientes, int* num_clientes) { Cliente* nuevo = crear_cliente(); if (!nuevo) return 0; Cliente* temp = realloc(*clientes, (*num_clientes + 1) * sizeof(Cliente)); if (!temp) { free(nuevo); return 0; } *clientes = temp; (*clientes)[*num_clientes] = *nuevo; (*num_clientes)++; free(nuevo); return 1; } int modificar_cliente(Cliente* clientes, int num_clientes, const char* correo) { Cliente* cliente = buscar_cliente_correo(clientes, num_clientes, correo); if (!cliente) return 0; int opcion; printf("\n1. Modificar nombre\n"); printf("2. Modificar apellido\n"); printf("3. Modificar telefono\n"); printf("4. Modificar tipo de membresia\n"); printf("Seleccione una opcion: "); scanf("%d", &opcion); getchar(); switch(opcion) { case 1: printf("Nuevo nombre: "); scanf("%49s", cliente->nombre); break; case 2: printf("Nuevo apellido: "); scanf("%49s", cliente->apellido); break; case 3: printf("Nuevo telefono: "); scanf("%14s", cliente->telefono); break; case 4: printf("Nuevo tipo de membresia (1:PLUS, 2:PLATINO): "); int tipo; scanf("%d", &tipo); if (tipo == 1) { cliente->membresia.tipo = PLUS; } else if (tipo == 2) { cliente->membresia.tipo = PLATINO; } cliente->membresia.fecha_inicio = time(NULL); cliente->membresia.estado = 1; break; default: return 0; } return 1; } Cliente* buscar_cliente_correo(Cliente* clientes, int num_clientes, const char* correo) { for (int i = 0; i < num_clientes; i++) { if (strcmp(clientes[i].correo, correo) == 0) { return &clientes[i]; } } return NULL; } Cliente* buscar_clientes_membresia(Cliente* clientes, int num_clientes, TipoMembresia tipo, int* encontrados) { *encontrados = 0; Cliente* resultados = malloc(sizeof(Cliente) * num_clientes); if (!resultados) return NULL; for (int i = 0; i < num_clientes; i++) { if (clientes[i].membresia.tipo == tipo) { resultados[*encontrados] = clientes[i]; (*encontrados)++; } } return resultados; }

Please keep input under 1000 characters

Want to kickstart your project?Use the new AI Studio to create your code