Você está na página 1de 34

2022/2023

Relatório Projeto Final

A14291-Jorge Rafael Gonçalves da Ponte


A26595-Ignez de Lucena de Barros

1
2022/2023

Índice
Introdução ................................................................................................................................ 3
Objetivos: ................................................................................................................................. 4
Pseudocódigo ....................................................................................................................... 6
Fluxograma ......................................................................................................................... 19
Código em C ........................................................................................................................ 28
Conclusão ............................................................................................................................... 34

2
2022/2023

Introdução
Este projeto visa reconhecer os conhecimentos adquiridos sobre estruturas, arrays, instruções
de decisão e de repetição, ficheiros e como também funções e procedimentos, isto tanto na
vertente de Pseudocódigo, como em fluxogramas e também na vertente de linguagem C.

3
2022/2023

Objetivos:
O parque de estacionamento do IPCA pretende implementar um sistema de gestão de

aquisição de veículos que entram nas instalações.

Para cada veículo será guardado a matrícula, a quem pertence o carro, hora de
entrada,

hora de saída e data.

Escreva um programa em Linguagem C, com pseudocódigo e fluxograma, que

implemente este sistema sendo a base de dados armazenada em ficheiros de texto no


diretório

da aplicação.

É encorajado o aperfeiçoamento e inclusão de funcionalidades úteis ou de otimização,

sendo no entanto obrigatória a implementação das seguintes funcionalidades:

• Inserir tipo de carro:

o Matrícula;

o Marca do carro;

o Gasolina/gasóleo/gás/elétrico

o A quem pertence o carro

o Ficha do aluno/docente/funcionário

• Inserir novo carro:

o Nome do aluno/docente/funcionário

o Número do aluno/docente/funcionário

o NIF

o Tipo de carro

• Pesquisar carro pelo número mecanográfico do dono: esta funcionalidade

deve estar disponível no menu da aplicação. Deverá ser exibido um pedido de

introdução do número do aluno/docente/funcionário a pesquisar. E no monitor

deve ser exibido um pedido de introdução do número mecanográfico. No final,

deve aparecer a informação relativa ao aluno/docente/funcionário.

4
2022/2023

• Pesquisar carro pela matrícula: esta funcionalidade deve estar disponível no

menu da aplicação. Deverá ser exibido um pedido de introdução da matrícula

do carro a pesquisar. E no monitor deve ser exibido um pedido de introdução

da matrícula. No final, deve aparecer a informação relativa ao

aluno/docente/funcionário e ao seu carro aluno/docente/funcionário.

• Pesquisar carro pelo NIF do dono: esta funcionalidade deve estar disponível

no menu da aplicação. Deverá ser exibido um pedido de introdução do NIF do

dono do carro a pesquisar. E no monitor deve ser exibido um pedido de

introdução do NIF do dono do carro. No final, deve aparecer a informação

relativa ao aluno/docente/funcionário e ao seu carro

aluno/docente/funcionário.

• Listar matrículas de carros inseridos no sistema : esta funcionalidade deve

estar disponível no menu da aplicação. Deverá exibir uma listagem da

totalidade de carros inseridos na aplicação. Onde nessa lista deve estar

apresentado os dados do aluno/docente/funcionário e do carro associado a si.

• Alterar dados: esta funcionalidade deve estar disponível no menu da aplicação.

Deverá exibir um pedido de introdução da matrícula do carro. Deve mostrar no

monitor toda a informação do carro e do dono associado. O utilizador poderá

então indicar qual o campo de informação que pretende alterar. As alterações

deverão estar armazenadas no ficheiro.

• Remover carro: esta funcionalidade deve estar disponível no menu da

aplicação. Deverá exibir um pedido de introdução da matrícula do carro. E essa

informação deve ser removida/eliminada do ficheiro.

• Reservar lugar no parque de estacionamento: esta funcionalidade deve estar

disponível no menu da aplicação. Deverá exibir um pedido de introdução da

matrícula do carro. E fazer uma reserva de lugar no parque de estacionamento.

• Listar o número de lugares disponíveis no parque: esta funcionalidade deve

estar disponível no menu da aplicação. Listar os lugares já ocupados do parque,

isto é a quantidade de carros que se encontram dentro do parque e o número

de lugares disponíveis ainda.

5
2022/2023

Pseudocódigo
Criar estrutura "Veiculo" com campos:

matricula[10]

marca[20]

tipoCombustivel[10]

nomeDono[50]

numeroDono[10]

NIF[15]

Criar estrutura "Reserva" com campos:

matricula[10]

lugar

VARIÁVEIS:

Criar vetor "veiculos" com tamanho MAX_VEICULOS e tipo Veiculo

int numVeiculos <- 0

Criar vetor "reservas" com tamanho MAX_LUGARES e tipo Reserva

int numLugaresOcupados <- 0

abrir arquivo veiculos.txt com permissão de escrita

inicio_InserirVeiculo()

imprimir("\n\t\t\tInsira a matrícula: ")

ler matricula

escrever matricula no arquivo veiculos.txt

imprimir("\t\t\tInsira a marca: ")

ler marca

escrever marca no arquivo veiculos.txt

imprimir("\t\t\tInsira o tipo de combustível: ")

ler tipoCombustivel

escrever tipoCombustivel no arquivo veiculos.txt

6
2022/2023

imprimir("\t\t\tInsira o nome do dono: ")

ler nomeDono

escrever nomeDono no arquivo veiculos.txt

imprimir("\t\t\tInsira o número do dono: ")

ler numeroDono

escrever numeroDono no arquivo veiculos.txt

imprimir("\t\t\tInsira o NIF: ")

ler NIF

escrever NIF no arquivo veiculos.txt

incrementar numVeiculos

imprimir("\t\t\tVeículo guardado com sucesso!\n\n")

fechar arquivo veiculos.txt

fim_InserirVeiculo()

inicio_procurarVeiculoPorNumero()

matricula[10]

Escrever("Insira o número mecanografico: ")

Ler(NIF)

Limpar a tela

Abrir arquivo "veiculos.txt" para leitura e atribuir a veiculosFile

found = 0

Enquanto não for final do arquivo faça:

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].matricula

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].marca

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].tipoCombustivel

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].nomeDono

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].numeroDono

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].NIF

7
2022/2023

Se veiculos[numVeiculos].numeroDono for igual a numeroDono então

Escrever("****************************************\n")

Escrever("***********Veiculo Encontrado***********\n")

Escrever("\n")

Escrever("\t\t\tDono: %s\n", veiculos[numVeiculos].nomeDono);

Escrever("\t\t\tMatricula: %s\n", veiculos[numVeiculos].matricula);

Escrever("\t\t\tMarca: %s\n", veiculos[numVeiculos].marca);

Escrever("\t\t\tTipo de combustível: %s\n",


veiculos[numVeiculos].tipoCombustivel);

Escrever("\t\t\tNIF: %s\n", veiculos[numVeiculos].NIF);

Senão

Escrever("*********Veiculo não Encontrado*********\n")

Fim se

Fim enquanto

Fechar arquivo veiculosFile

fim_procurarVeiculoPorNumero()

inicio_procurarVeiculoPorMatricula()

matricula[10]

Escrever("Insira a matrícula: ")

Ler(matricula)

Limpar a tela

Abrir arquivo "veiculos.txt" para leitura e atribuir a veiculosFile

found = 0

Enquanto não for final do arquivo faça:

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].matricula

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].marca

8
2022/2023

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].tipoCombustivel

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].nomeDono

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].numeroDono

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].NIF

Se veiculos[numVeiculos].matricula for igual a matricula então

Escrever("****************************************\n")

Escrever("***********Veiculo Encontrado***********\n")

Escrever("\n")

Escrever("Dono: ", veiculos[numVeiculos].nomeDono, "\n")

Escrever("Numero do dono: ", veiculos[numVeiculos].numeroDono, "\n")

Escrever("Marca: ", veiculos[numVeiculos].marca, "\n")

Escrever("Tipo de combustível: ", veiculos[numVeiculos].tipoCombustivel, "\n")

Escrever("NIF: ", veiculos[numVeiculos].NIF, "\n")

Senão

Escrever("*********Veiculo não Encontrado*********\n")

Fim se

Fim enquanto

Fechar arquivo veiculosFile

Fim_procurarVeiculoPorMatricula()

inicio_procurarVeiculoPorNIF()

matricula[10]

Escrever("Insira o NIF: ")

Ler(NIF)

Limpar a tela

Abrir arquivo "veiculos.txt" para leitura e atribuir a veiculosFile

found = 0

9
2022/2023

Enquanto não for final do arquivo faça:

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].matricula

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].marca

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].tipoCombustivel

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].nomeDono

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].numeroDono

Ler uma linha do arquivo veiculosFile e atribuir a veiculos[numVeiculos].NIF

Se veiculos[numVeiculos].NIF for igual a NIF então

Escrever("****************************************\n")

Escrever("***********Veiculo Encontrado***********\n")

Escrever("\n")

Escrever("Matricula: ", veiculos[numVeiculos].matricula, "\n")

Escrever("Dono: ", veiculos[numVeiculos].nomeDono, "\n")

Escrever("Numero do dono: ", veiculos[numVeiculos].numeroDono, "\n")

Escrever("Marca: ", veiculos[numVeiculos].marca, "\n")

Escrever("Tipo de combustível: ", veiculos[numVeiculos].tipoCombustivel, "\n")

Senão

Escrever("*********Veiculo não Encontrado*********\n")

Fim se

Fim enquanto

Fechar arquivo veiculosFile

Fim_procurarVeiculoPorNIF()

inicio_listaVeiculos

Abrir arquivo "veiculos.txt" para leitura e atribuir a veiculosFile

se veiculosFile for nulo

Escrever "Erro ao abrir o arquivo veiculos.txt"

retornar

10
2022/2023

fim-se

char line[100]

Escrever "Lista de veículos:"

enquanto houver linha a ser lida do veiculosFile

ler linha do veiculosFile para a variável linha

Escrever linha

fim-enquanto

fechar arquivo veiculosFile

fim_listaVeiculos

inicio_atualizarVeiculo()

matricula[10]

Escrever "Insira a matrícula: "

Ler matricula

Abrir arquivo "veiculos.txt" para leitura e atribuir a veiculosFile

found <- 0

linha[256]

enquanto houver linha para ler do veiculosFile

se linha contém matricula então

found <- 1

break

fim_se

fim_enquanto

se found é igual a 0 então

Escrever "Veículo não encontrado."

retornar

fim_se

int i

para i = 0 ATÉ i < numVeiculos fazer

11
2022/2023

se veiculos[numVeiculos].matricula é igual a matricula então

break

fim_se

fim_para

Escrever "Insira a nova marca: "

Ler veiculos[numVeiculos].marca

Escrever "Insira o novo tipo de combustível: "

Ler veiculos[numVeiculos].tipoCombustivel

Escrever "Insira o novo nome do dono: "

Ler veiculos[numVeiculos].nomeDono

Escrever "Insira o novo número do dono: "

Ler veiculos[numVeiculos].numeroDono

Escrever "Insira o novo NIF: "

Ler veiculos[numVeiculos].NIF

Escrever "Veículo atualizado com sucesso!\n\n"

fechar arquivo veiculosFile

Abrir arquivo "veiculos.txt" para leitura e atribuir a veiculosFile

para i = 0 até i < numVeiculos fazer

Escrever no arquivo veiculosFile:

"Matrícula: veiculos[numVeiculos].matricula\n"

"Marca: veiculos[numVeiculos].marca\n"

"Tipo de combustível: veiculos[numVeiculos].tipoCombustivel\n"

"Nome do dono: veiculos[numVeiculos].nomeDono\n"

"Numero do dono: veiculos[numVeiculos].numeroDono\n"

"NIF: veiculos[numVeiculos].NIF\n"

fim_para

fechar arquivo veiculosFile

fim_atualizarVeiculo()

12
2022/2023

inicio_removerVeiculo()

char matricula[10]

Escrever("\n\t\t\tInsira a matrícula do veículo a remover: ")

Ler("%s", matricula)

Abrir arquivo "veiculos.txt" para leitura e atribuir a veiculosFile

int i, j

int found <- 0

para (i = 0; i < numVeiculos; i++)

se(strcmp(veiculos[numVeiculos].matricula, matricula) == 0)

found <- 1;

para (j = i; j < numVeiculos - 1; j++)

veiculos[j] = veiculos[j + 1];

fim_para

numVeiculos--;

break;

fim_se

fim_para

se (found)

para (i = 0; i < numVeiculos; i++)

Escrever no arquivo veiculosFile:

"Matrícula: veiculos[numVeiculos].matricula\n"

"Marca: veiculos[numVeiculos].marca\n"

"Tipo de combustível: veiculos[numVeiculos].tipoCombustivel\n"

"Nome do dono: veiculos[numVeiculos].nomeDono\n"

"Numero do dono: veiculos[numVeiculos].numeroDono\n"

"NIF: veiculos[numVeiculos].NIF\n"

fim_para

Escrever("\t\t\tVeículo removido com sucesso!\n\n")

senão

Escrever("\t\t\tVeículo não encontrado!\n\n")

fim_senão

13
2022/2023

fechar arquivo veiculosFile

fim_removerVeiculo()

inicio_darEntradaVeiculo()

se numLugaresOcupados == MAX_LUGARES

Escrever("\t\t\tNão há lugares disponíveis.\n")

returnar

char matricula[10];

Escrever("\t\t\tInsira a matrícula: ");

Ler("%s", matricula);

Abrir arquivo "veiculos.txt" para leitura e atribuir a veiculosFile

se (file == NULL)

Escrever("\t\t\tErro ao abrir o arquivo veiculos.txt.\n")

returnar

fim_se

int found <-0;

char linha[100];

enquanto (fgets(linha, sizeof(linha), file) != NULL)

se(strstr(linha, "Matrícula: ") != NULL && strstr(linha, matricula) != NULL)

found <- 1

break;

fim_se

fechar arquivo veiculosFile

se (!found)

Escrever("\t\t\tVeículo não encontrado.\n")

returnar

fim_se

Escrever("\t\t\tVeículo encontrado!\n")

numLugaresOcupados++

Escrever("\t\t\tEntrada dada com sucesso!\n")

14
2022/2023

fim_darEntradaVeiculo()

inicio_darSaidaVeiculo()

se numLugaresOcupados == MAX_LUGARES

Escrever("\t\t\tNão há lugares disponíveis.\n")

returnar

char matricula[10];

Escrever("\t\t\tInsira a matrícula: ");

Ler("%s", matricula);

Abrir arquivo "veiculos.txt" para leitura e atribuir a veiculosFile

se (file == NULL)

Escrever("\t\t\tErro ao abrir o arquivo veiculos.txt.\n")

retorne

fim_se

int found <-0;

char linha[100];

enquanto (fgets(linha, sizeof(linha), file) != NULL)

se(strstr(linha, "Matrícula: ") != NULL && strstr(linha, matricula) != NULL)

found <- 1

break;

fim_se

fechar arquivo veiculosFile

se (!found)

Escrever("\t\t\tVeículo não encontrado.\n")

retorne

fim_se

Escrever("\t\t\tVeículo encontrado!\n")

numLugaresOcupados--

Escrever("\t\t\tSaída dada com sucesso!\n")

fim_darSaidaVeiculo()

15
2022/2023

incio_nrLugaresDisponiveis

int nrLugares = MAX_LUGARES - numLugaresOcupados

abra o arquivo "reservas.txt" para leitura e atribua o resultado a reservasFile

se reservasFile for igual a NULO então

Escrever "Erro ao abrir o arquivo reservas.txt."

retorne

fim-se

char linha[100]

enquanto fgets retornar diferente de NULO

se a string "Matrícula: " estiver presente na variável linha então

decremente nrLugares

fim-se

fim-enquanto

feche o arquivo reservasFile

Escrever("\t\t\tNúmero de lugares disponíveis: %d\n", nrLugares)

fim_nrLugaresDisponiveis

inicio_reservarLugar()

se (numLugaresOcupados == MAX_LUGARES)

Escrever "Não há lugares disponíveis."

retorne

fim-se

char matricula[10];

abra o arquivo "veiculos.txt" para leitura

se o arquivo não puder ser aberto

Escrever "Erro ao abrir o arquivo veiculos.txt."

retorne

fim-se

int found <- 0

16
2022/2023

char linha[100]

enquanto houver uma linha para ser lida no arquivo

se linha contém "Matrícula: " e linha contém matricula

found <- 1

break

fim-se

fim-enquanto

feche o arquivo

se found é igual a 0

Escrever "Veículo não encontrado."

retorne

fim-se

int lugarEscolhido, i, j, encontrado <- 0

Escrever "Insira a matrícula do veículo: "

Ler matricula

abra o arquivo "reservas.txt" para escrita no final

Escrever "Matrícula: " e matricula no arquivo

feche o arquivo

atribua matricula para reservas[numLugaresOcupados].matricula

incremente numLugaresOcupados

Escrever "Lugar reservado com sucesso!"

fim_reservarLugar()

inicio

int opcao

Escrever "***************************************"

Escrever "******** SISTEMA GESTÃO PARQUE ********"

Escrever "***************************************"

Escrever "MENU"

17
2022/2023

Escrever "1. Entrada de veículo"

Escrever "2. Saída de veículo"

Escrever "3. Lugares Disponiveis"

Escrever "4. Lista de veículos inseridos"

Escrever "5. Inserir novo veículo"

Escrever "6. Atualizar veículo"

Escrever "7. Remover veículo"

Escrever "8. Procurar veículo por número mecanografico"

Escrever "9. Procurar veículo por matrícula"

Escrever "10. Procurar veículo por NIF"

Escrever "11. Reservar lugar"

Escrever "12. Sair"

Escrever "***************************************"

Escrever "Insira opcao: "

Ler opcao

Escolha opcao

Caso 1: Chamar função "darEntradaVeiculo"

Caso 2: Chamar função "darSaidaVeiculo"

Caso 3: Chamar função "nrLugaresDisponiveis"

Caso 4: Chamar função "listaVeiculos"

Caso 5: Chamar função "inserirVeiculo"

Caso 6: Chamar função "atualizarVeiculo"

Caso 7: Chamar função "removerVeiculo"

Caso 8: Chamar função "procurarVeiculoPorNumero"

Caso 9: Chamarfunção "procurarVeiculoPorMatricula"

Caso 10: Chamar função "procurarVeiculoPorNIF"

Caso 11: Chamar função "reservarLugar"

Caso 12: Não fazer nada

default Escrever "Opcao invalida!"

Enquanto opcao diferente de 12

fim

18
2022/2023

Fluxograma

19
2022/2023

20
2022/2023

21
2022/2023

22
2022/2023

23
2022/2023

24
2022/2023

25
2022/2023

26
2022/2023

27
2022/2023

Código em C

28
2022/2023

29
2022/2023

30
2022/2023

31
2022/2023

32
2022/2023

33
2022/2023

Conclusão

Este trabalho projeto final foi uma excelente forma e oportunidade de concretizar conteúdos

aprendidos nas aulas e metendo-os em prática para assim também ao mesmo tempo termos

consciência de que o aprendemos e foi lecionado.

Tivemos dificuldades nas manipulações de ficheiros. Assim sendo as funções atualizarVeiculo e


removerVeiculo não estão a funcionar corretamente

34

Você também pode gostar