Gestión de Eventos y Reservas en C: Código Fuente Comentado con Estructuras y Funciones

Informática y Telecomunicaciones2,88 KB

#include 

typedef struct
{
    int dia, mes;
} t_fecha;

typedef struct
{
    int codigo;
    char titulo[31];
    t_fecha fecha;
    int aforo, reservas;
} t_evento;

void cargarFicheroEventos(t_evento v[])
{
    int i, cod;
    t_evento aux;
    FILE *fp;

    for (i = 0; i < 50; i++)
        v[i].codigo = -1;

    if ((fp = fopen("eventos.txt", "r")) == NULL) {
        printf("Error en apertura de fichero de eventos");
    } else {
        while (fscanf(fp, "%d ", &cod) == 1) {
            aux.codigo = cod - 1;
            fscanf(fp, "%s %d %d %d\n", aux.titulo, &aux.fecha.dia,
                   &aux.fecha.mes, &aux.aforo);
            aux.reservas = 0;
            if (cod >= 1 && cod <= 50)
                v[cod - 1] = aux;
        }
        if (fclose(fp) == 1)
            printf("Error en cierre de fichero");
    }
}

int confirmarReservas(t_evento v[])
{
    FILE *fp;
    char meses[] = "EFMAYJLGSOND";
    int num, codigo, cont = 0;

    if ((fp = fopen("reservas.txt", "r")) == NULL) {
        printf("Error en apertura de fichero de reservas");
        return -1;
    } else {
        while (fscanf(fp, "%d %d", &codigo, &num) != EOF) {
            if (codigo >= 1 && codigo <= 50 && v[codigo - 1].codigo != -1 &&
                (v[codigo - 1].reservas) + num <= v[codigo - 1].aforo) {
                v[codigo - 1].reservas += num;
                printf("\nConfirmada la reserva: %s %d plazas %d-%c",
                       v[codigo - 1].titulo, num, v[codigo - 1].fecha.dia,
                       meses[v[codigo - 1].fecha.mes - 1]);
                cont++;
            }
        }
        if (fclose(fp) == 1)
            printf("Error en cierre de fichero");
        return cont;
    }
}

void mostrarEventosMes(t_evento v[], int mes)
{
    char meses[] = "EFMAYJLGSOND";
    int i;
    printf("\n\nEventos del mes de %c:", meses[mes - 1]);
    printf("\n======================");
    for (i = 0; i < 50; i++)
        if (v[i].codigo != -1 && v[i].fecha.mes == mes)
            printf("\n%-30s Dia: %4d Aforo:%4d  Plazas reservadas: %d",
                   v[i].titulo, v[i].fecha.dia, v[i].aforo, v[i].reservas);
}

void plazasLibresPorMes(t_evento v[], int vLibres[])
{
    int i;
    for (i = 0; i < 12; i++)
        vLibres[i] = 0;

    for (i = 0; i < 50; i++)
        if (v[i].codigo != -1)
            vLibres[(v[i].fecha.mes) - 1] += v[i].aforo - v[i].reservas;
}

int main()
{
    t_evento vEventos[50];
    int vLibres[12];
    int i;

    cargarFicheroEventos(vEventos);
    confirmarReservas(vEventos);
    plazasLibresPorMes(vEventos, vLibres);

    for (i = 1; i <= 12; i++) {
        mostrarEventosMes(vEventos, i);
        printf("\nPlazas libres este mes: %d", vLibres[i - 1]);
    }

    getch();
    return 1;
}

Descargar

PDF Word HTML