Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.vscode/
output/
*.exe
17 changes: 10 additions & 7 deletions estacionamento.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,24 +61,24 @@ 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];
Data data_entrada;
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);
Expand All @@ -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
121 changes: 101 additions & 20 deletions func.c
Original file line number Diff line number Diff line change
Expand Up @@ -259,31 +259,112 @@ int carregar_tarifario(Tarifario *tarifa_parque) {
return num_tarifas;
}

void Ler_estacionamento (Estacionamento *estacionamento) {
printf("Digite o número de entrada do estacionamento\n");
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\n");
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)\n");
scanf("%d %d %d", &estacionamento->data_entrada.dia, &estacionamento->data_entrada.mes, &estacionamento->data_entrada.ano);
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);
}

printf("Digite a hora de entrada (hh:mm:ss)\n");
scanf("%d %d %d", &estacionamento->entrada.hora, &estacionamento->entrada.min, &estacionamento->entrada.seg);
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);

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);
i++;
}
}

printf("Digite a data de saída (hh:mm:ss)\n");
scanf("%d %d %d", &estacionamento->saida.hora, &estacionamento->saida.min, &estacionamento->saida.seg);
fclose(file);
return tarifario;
}

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);~
//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");
}
}

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);
}
void registar_saida(Parque *parque, const char *matricula, Horario saida, const Tarifario *tarifario) {
printf("To be implemented");
}