From f308d47e9dbee2d0ab08c200c38c3c894579999e Mon Sep 17 00:00:00 2001 From: sanitolina Date: Sat, 14 Dec 2024 16:22:43 +0000 Subject: [PATCH 1/2] Fixed inexistent functions --- .gitignore | 3 +++ estacionamento.h | 14 +++++++------- func.c | 32 +++++++++++--------------------- 3 files changed, 21 insertions(+), 28 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ee4ac56 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.vscode/ +output/ +*.exe diff --git a/estacionamento.h b/estacionamento.h index 4a0f79e..e94cea5 100644 --- a/estacionamento.h +++ b/estacionamento.h @@ -61,6 +61,12 @@ typedef struct parque { Tarifario tarifa_parque; } Parque; +typedef struct data { + int dia; + int mes; + int ano; +} Data; + typedef struct estacionamento { int numE; char matricula[MAX_MATRICULA]; @@ -68,17 +74,11 @@ typedef struct estacionamento { Data data_saida; Horario entrada; Horario saida; - Lugar lugar; + char lugar[MAX_CODIGO]; float valor_pago; char observacoes[50]; } Estacionamento; -typedef struct data { - int dia; - int mes; - int ano; -} Data; - // Funções relacionadas ao parque void configurar_parque(Parque *parque); void configurar_piso(Piso *piso, int numero, int *total_lugares); diff --git a/func.c b/func.c index 2367a32..4812713 100644 --- a/func.c +++ b/func.c @@ -260,30 +260,20 @@ int carregar_tarifario(Tarifario *tarifa_parque) { } void Ler_estacionamento (Estacionamento *estacionamento) { - printf("Digite o número de entrada do estacionamento\n"); + printf("Digite o número de entrada do estacionamento"); scanf("%d", &estacionamento->numE); - printf("Digite a matrícula do veículo\n"); + printf("Digite a matrícula do veículo"); scanf("%s", &estacionamento->matricula); - printf("Digite a data de entrada do veículo (dd/mm/aaaa)\n"); - scanf("%d %d %d", &estacionamento->data_entrada.dia, &estacionamento->data_entrada.mes, &estacionamento->data_entrada.ano); - - printf("Digite a hora de entrada (hh:mm:ss)\n"); - scanf("%d %d %d", &estacionamento->entrada.hora, &estacionamento->entrada.min, &estacionamento->entrada.seg); - - printf("Digite o lugar do carro (Piso_Fila_Lugar(0-50))\n"); - scanf("%d %c %d", &estacionamento->lugar.num_piso, &estacionamento->lugar.fila, &estacionamento->lugar.lugar); - - printf("Digite a data de saída (hh:mm:ss)\n"); - scanf("%d %d %d", &estacionamento->saida.hora, &estacionamento->saida.min, &estacionamento->saida.seg); - - printf("Digite a data de saída (dd/mm/aaaa) \n"); - scanf("%d %d %d", &estacionamento->data_saida.dia, &estacionamento->data_saida.mes, &estacionamento->data_saida.ano);~ + printf("Digite a data de entrada do veículo (dd/mm/aaaa)"); + scanf("%d %d %d", &estacionamento->entrada); +} - printf("Digite o valor pago \n"); - scanf("%f", &estacionamento->valor_pago); +void registar_entrada(Parque *parque, const char *matricula, int piso, char fila, int lugar, Horario entrada) { + printf("To be implemented"); +} - printf("Digite as observações\n"); - scanf("%s", &estacionamento->observacoes); -} \ No newline at end of file +void registar_saida(Parque *parque, const char *matricula, Horario saida, const Tarifario *tarifario) { + printf("To be implemented"); +} From 3849e433949807aee303c5b2738028d7c6ef673e Mon Sep 17 00:00:00 2001 From: sanitolina Date: Sun, 5 Jan 2025 19:46:36 +0000 Subject: [PATCH 2/2] Rodrigo --- estacionamento.h | 3 ++ func.c | 105 +++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 101 insertions(+), 7 deletions(-) diff --git a/estacionamento.h b/estacionamento.h index e94cea5..bb23533 100644 --- a/estacionamento.h +++ b/estacionamento.h @@ -97,5 +97,8 @@ void gravar_estacionamentos(const char *filename, Estacionamento *estacionamento // Funções relacionadas à gestão de entradas e saídas do parque void registar_entrada(Parque *parque, const char *matricula, int piso, char fila, int lugar, Horario entrada); void registar_saida(Parque *parque, const char *matricula, Horario saida, const Tarifario *tarifario); +void ler_estacionamentos(const char *nomeFicheiro); +Tarifario ler_Tarifario(const char *filename); +void imprimir_tarifario(const Tarifario *tarifario); #endif diff --git a/func.c b/func.c index 4812713..64131ef 100644 --- a/func.c +++ b/func.c @@ -259,15 +259,106 @@ int carregar_tarifario(Tarifario *tarifa_parque) { return num_tarifas; } -void Ler_estacionamento (Estacionamento *estacionamento) { - printf("Digite o número de entrada do estacionamento"); - scanf("%d", &estacionamento->numE); +//função para ler o ficheiro estacionamento.txt +void ler_estacionamentos(const char *nomeFicheiro) { + FILE *ficheiro = fopen(nomeFicheiro, "r"); + if (ficheiro == NULL) { + perror("Erro ao abrir o ficheiro"); + return; + } + + Estacionamento est; + while (fscanf(ficheiro, "%d %s %d/%d/%d %d/%d/%d %d:%d:%d %d:%d:%d %s %f %s", + &est.numE, + est.matricula, + &est.data_entrada.dia, &est.data_entrada.mes, &est.data_entrada.ano, + &est.data_saida.dia, &est.data_saida.mes, &est.data_saida.ano, + &est.entrada.hora, &est.entrada.min, &est.entrada.min, + &est.saida.hora, &est.saida.min, &est.saida.seg, + est.lugar, + &est.valor_pago, + est.observacoes) == 17) { + // Imprime os dados lidos + printf("Número: %d\n", est.numE); + printf("Matrícula: %s\n", est.matricula); + printf("Data Entrada: %02d/%02d/%04d\n", est.data_entrada.dia, est.data_entrada.mes, est.data_entrada.ano); + printf("Data Saída: %02d/%02d/%04d\n", est.data_saida.dia, est.data_saida.mes, est.data_saida.ano); + printf("Hora Entrada: %02d:%02d:%02d\n", est.entrada.hora, est.entrada.min, est.entrada.seg); + printf("Hora Saída: %02d:%02d:%02d\n", est.saida.hora, est.saida.min, est.saida.seg); + printf("Lugar: %s\n", est.lugar); + printf("Valor Pago: %.2f\n", est.valor_pago); + printf("Observações: %s\n", est.observacoes); + printf("--------------------------\n"); + } + + fclose(ficheiro); +} - printf("Digite a matrícula do veículo"); - scanf("%s", &estacionamento->matricula); +//Função para ler o ficheiro tarifario.txt +Tarifario ler_Tarifario(const char *filename) { + Tarifario tarifario; + tarifario.lista_tarifas = NULL; + tarifario.num_tarifas = 0; + + FILE *file = fopen(filename, "r"); + if (file == NULL) { + perror("Erro ao abrir o arquivo"); + exit(EXIT_FAILURE); + } + + char line[256]; + while (fgets(line, sizeof(line), file)) { + if (line[0] != '\n') { // Ignorar linhas vazias + tarifario.num_tarifas++; + } + } - printf("Digite a data de entrada do veículo (dd/mm/aaaa)"); - scanf("%d %d %d", &estacionamento->entrada); + tarifario.lista_tarifas = malloc(tarifario.num_tarifas * sizeof(Tarifa)); + if (tarifario.lista_tarifas == NULL) { + perror("Erro ao alocar memória para tarifas"); + fclose(file); + exit(EXIT_FAILURE); + } + + rewind(file); + int i = 0; + while (fgets(line, sizeof(line), file)) { + if (line[0] != '\n') { + Tarifa *tarifa = &tarifario.lista_tarifas[i]; + + sscanf(line, "%c\t%3s\t%2d:%2d\t%2d:%2d\t%f", + &tarifa->tp_tarifa, + tarifa->cod_tarifa, + &tarifa->inicio.hora, &tarifa->inicio.min, + &tarifa->fim.hora, &tarifa->fim.min, + &tarifa->valor_hora); + + tarifa->inicio.seg = 0; + tarifa->fim.seg = 0; + tarifa->dias = 0; + snprintf(tarifa->nome, sizeof(tarifa->nome), "Tarifa%s", tarifa->cod_tarifa); + + i++; + } + } + + fclose(file); + return tarifario; +} + +//FUNÇAO SO PRA TESTE DA FUNÇAO DE LER TARIFARIO +void imprimir_tarifario(const Tarifario *tarifario) { + for (int i = 0; i < tarifario->num_tarifas; i++) { + Tarifa tarifa = tarifario->lista_tarifas[i]; + printf("Tipo: %c\n", tarifa.tp_tarifa); + printf("Código: %s\n", tarifa.cod_tarifa); + printf("Hora início: %02d:%02d:%02d\n", tarifa.inicio.hora, tarifa.inicio.min, tarifa.inicio.seg); + printf("Hora fim: %02d:%02d:%02d\n", tarifa.fim.hora, tarifa.fim.min, tarifa.fim.seg); + printf("Valor hora: %.2f\n", tarifa.valor_hora); + printf("Nome: %s\n", tarifa.nome); + printf("Dias: %d\n", tarifa.dias); + printf("---------------------\n"); + } } void registar_entrada(Parque *parque, const char *matricula, int piso, char fila, int lugar, Horario entrada) {