relatorio aed

19
Algoritmos E Estrutura de Dados II André Sousa, 11304/Miguel Oliveira, 10206/Vitor Ferreira, 6583 ESI-Engenharia de Sistemas Informáticos | 5 de junho de 2015 TRABALHO PRÁTICO DE ALGORITMOS E ESTRUTURA DE DADOS II

Upload: vitor-ferreira

Post on 11-Dec-2015

248 views

Category:

Documents


0 download

DESCRIPTION

Relatório trabalho Algoritmos

TRANSCRIPT

Page 1: Relatorio AED

Algoritmos E Estrutura de Dados II

André Sousa, 11304/Miguel Oliveira, 10206/Vitor Ferreira, 6583

ESI-Engenharia de Sistemas Informáticos | 5 de junho de 2015

TRABALHO PRÁTICO DE ALGORITMOS E ESTRUTURA DE DADOS II

Page 2: Relatorio AED

PÁGINA 1

Page 3: Relatorio AED

PÁGINA 2

Agradecimentos

Aos professores em geral, “porque os professores com sabedoria e carinho, dedicam seu tempo para a

formação dos homens/mulheres do amanhã”.

Aos nossos pais e Irmãos, pois eles também são uma peça chave deste caminho, e estão sempre a puxar por

nós.

Aos nossos melhores amigos, e também em geral a nossa turma.

Page 4: Relatorio AED

PÁGINA 3

Indice Remissivo

Agradecimentos .................................................................................................................................... 2

Índice de imagens ................................................................................................................................. 4

Introdução ............................................................................................................................................. 5

Divisão do Trabalho .............................................................................................................................. 6

Os nossos registos (structs) .................................................................................................................. 7

A função numero um, Adicionar um cliente....................................................................................... 9

A função numero 2, alteração de dados ............................................................................................. 10

A função numero três, remoção de um cliente ................................................................................... 11

A função numero quatro, procurar um cliente .................................................................................. 12

A função numero 5, gestão de infractores .......................................................................................... 13

Opção 6 do Menu – Procura de um carro .......................................................................................... 16

Opção 7 – verificar a situação de um cliente ...................................................................................... 17

Conclusão ............................................................................................................................................. 18

Page 5: Relatorio AED

PÁGINA 4

Índice de imagens

Figura 1 - Menu (VVManager) .............................................................................................................. 6

Figura 2 - Funcionamento real do sistema (Sistema RFID) ............................................................... 6

Figura 3 - Registos (structs) do vvmanager ......................................................................................... 7

Figura 4 - Adicionar um cliente ........................................................................................................... 9

Figura 5-Alterar cliente ........................................................................................................................ 10

Figura 6 - Ciclo de procura while ......................................................................................................... 11

Figura 7 - Renomear um ficheiro temporário para o original e remover o mesmo .......................... 11

Figura 8 – Subopção 2 da opção 4 do menu principal (Listagem de todos os clientes) .................. 12

Figura 9 - Algoritmo de procura de cliente (tendo em conta que é indicado o nome) ................... 12

Figura 10 - Introdução de um infractor .............................................................................................. 13

Figura 11 - Listagem de infractores ...................................................................................................... 14

Figura 12 - Procurar um carro .............................................................................................................. 16

Figura 13 - Verificar cliente .................................................................................................................. 17

Page 6: Relatorio AED

PÁGINA 5

Introdução

O presente trabalho tem como objetivo principal a consolidação de aptidões, ou seja

conseguir verificar se as aulas prático-teóricas ficaram de facto enraizadas, e se conseguimos num

qualquer programa, implementar estruturas de dados como listas, apontadores e arvores.

Optamos por desenvolver um simples sistema, em C (linguagem obrigatória), cujo

objetivo era a construção de um sistema capaz de gerir clientes/automóveis/infratores e preços de

uma dada Autoestrada

O Ideal seria, o sistema fazer exatamente toda a gestão da mesma autoestrada, ou seja

adicionar uma lista de clientes, que em determinado dia passaram naquele pórtico de portagem,

assim como adicionar numa outra lista há parte um outro sistema que fosse capaz de gerir as

infrações cometidas por um ou mais utilizadores da autoestrada (quando me refiro a infrações,

refiro-me a passagem na entrada da autoestrada ou à saída, sem por exemplo ter o devido

identificador colocado no vidro).

Como dito atrás a linguagem de programação utilizada, foi o C, e o IDE foi o visual studio

2013 (por opção própria)

Trabalhamos sempre com ficheiros, e temos sempre em conta que a informação é útil, dai

a nossa preocupação em nunca perder um único dado.

Page 7: Relatorio AED

PÁGINA 6

Divisão do Trabalho

O presente trabalho (programa) está no momento capaz de efetuar as seguintes situações:

Adicionar um cliente

Atualizar dados de um cliente

Remover um cliente

Verificar a “situação” de um cliente

Adicionar infratores, bem como listar os mesmos

Listagem dos infractores de um dos últimos dias (com recurso a ficheiros)

Procurar clientes e carros

Adicionar um carro a um cliente (um cliente se por exemplo for uma empresa, pode ter

mais do que um carro)

Figura 1 - Menu (VVManager)

Quando aqui me refiro a situação de um cliente, refiro-me obviamente a situação do mesmo para

com a empresa em causa que faz a gestão das autoestradas. Ou seja refiro-me a se por exemplo a

situação está regularizada, se existem portagens por pagar ou se foi detetado algum problema ou

avaria, pois na verdade este sistema eletrónico que existe nas autoestradas é capaz de detetar

anomalias se as mesmas existirem.

Figura 2 - Funcionamento real do sistema (Sistema RFID)

Page 8: Relatorio AED

PÁGINA 7

Os nossos registos (structs)

Temos registos para praticamente todos os objectos envolventes. Consideramos objectos

envolventes, os seguintes objectos:

Autoestradas

Clientes

Automóveis

Infractores

NIB/IBAN

Figura 3 - Registos (structs) do vvmanager

Consideramos a autoestrada e todos os outros “elementos” como um objeto, porque a mesma

contem informações armazenadas uteis ao programa, no momento de execução. Essas

informações dizem respeito a, por exemplo no caso da autoestrada:

Designacao

Local e código de Entrada

Local e código de saída

Preço

Classe do veiculo em causa

Page 9: Relatorio AED

PÁGINA 8

No caso do cliente, considera-se útil conhecer:

O id, para exclusivamente associar um automóvel ao mesmo

Nome

Apelido

Idade

Sexo

Número de Telefone

Número de BI

Situação

No caso de um automóvel ou até mesmo no caso dos infractores considera-se útil conhecer:

Marca

Modelo

Matricula

Classe do veículo

Preço de portagem

Page 10: Relatorio AED

PÁGINA 9

A função numero um, Adicionar um cliente

Como dito atrás todas as nossas funções envolvem a manipulação de ficheiros como é o caso desta.

Antes de mais nada ao construir esta função era necessário ter em conta que um cliente tinha um

ID, e que não deveriam existir ID’s repetidos, nem tão pouco ID’s negativos

O primeiro passo passa por pedir ao cliente que pretende aderir ao sistema, os dados acima

descritos na struct, como por exemplo o nome, apelido, idade, morada …

Numa segunda fase, mais avançada, devia-se então proceder a verificação do ID, uma vez que

(supomos) que este é introduzido manualmente por aquele, que de momento opera sob o sistema.

Para prosseguir com essa verificação será necessário abrir o ficheiro e percorrer o mesmo, através

da instrução fscanf(f,”%x”,var), onde f é um ficheiro passado por referencia, “%x” é um ou

mais parâmetros de leitura que diferenciam conforme os dados, e var, é a existência de

uma ou mais variáveis que vao guardar os dados lidos.

Numa terçeira fase esta função implicaria o percorrer de todos os clientes existentes em ficheiro,

com o um ciclo semelhante a while(!feof(f)) e apenas quando o fim do ficheiro for encontrado é

que era acresentado o cliente.

Por fim procedíamos ao Rename()&&Remove() com recurso a uma decisão ou um If() bem como

ao fechar do ficheiro (Instrução: fclose(f))

Figura 4 - Adicionar um cliente

Page 11: Relatorio AED

PÁGINA 10

A função numero 2, alteração de dados

A função número 2 deveria permitir encontrar um cliente e alterar alguns dos dados do mesmo

como morada, situação face à empresa, idade, número de telemóvel …

Devido ao facto de ocorrerem problemas, na manipulação de ficheiros, este método está a

conseguir encontrar os clientes, mas depois falha, quando tem que escrever o cliente em causa já

atualizado. A manipulação de ficheiros, conforme direi na conclusão, foi das maiores dificuldades

que encontramos, na implementação deste sistema.

Figura 5-Alterar cliente

Page 12: Relatorio AED

PÁGINA 11

A função numero três, remoção de um cliente

A função número três é em tudo semelhante a primeira função, exceto em duas situações

concretas.

Figura 6 - Ciclo de procura while

Podemos observar que aqui é pedida a referência de um cliente e que depois todos os clientes

exceto aquele que foi referenciado, são escritos num novo ficheiro, que será renomeado para o

ficheiro original e posteriormente apagado, conforme mostra o algoritmo abaixo.

Figura 7 - Renomear um ficheiro temporário para o original e remover o mesmo

De notar também que antes de entrar em execução o If(…) é necessário fechar ambos os ficheiros

para evitar erros por parte da execução, como “Denied Acess”

Page 13: Relatorio AED

PÁGINA 12

A função numero quatro, procurar um cliente

Na opção quatro, eram dadas duas opções de procura do cliente (dos clientes). No primeiro caso

teríamos apenas de introduzir o primeiro nome para termos todos os clientes que continham

aquele nome, e no segundo caso existia um percorrer de todo o ficheiro, e todos os clientes eram

adicionados (impressos) no sistema

Em ambos os casos o algoritmo foi elaborado com recurso a um ou no máximo dois ciclos

While(…)

Figura 8 – Subopção 2 da opção 4 do menu principal (Listagem de todos os clientes)

No caso da procura pelo nome podemos observar o algoritmo implementado, no visual studio,

que na minha opinião é de muito fácil compreensão:

Figura 9 - Algoritmo de procura de cliente (tendo em conta que é indicado o nome)

Page 14: Relatorio AED

PÁGINA 13

A função numero 5, gestão de infractores

A função numero 5, foi muito provavelmente a única função a dar muito mais trabalho. E é fácil

entender a razão da mesma função ter dado tanto trabalho. Numa primeira situação a função

número 5 começa logo com a introdução de um infractor, sim, pois sem infractores, não podemos

considerar “aceitável”

trabalhar com esta opção.

Não sei se cheguei a referir na

introdução mas o programa,

trabalha na sua maioria, com

apontadores e stacks para a

manipulação de dados. Aqui

as stacks também entram,

mas não dominam.

Na verdade existe uma lista

para Infractores que tem um

número de ordem

(semelhante a ordem de

chegada dos infractores). Um

infractor é introduzido e o

sistema avança para o

infractor seguinte (introdução de um novo infractor) até o operador introduzir um número menor

do que 0.

Durante esta operação de introdução de infractores, consideramos ser útil ter em conta o local da

infração (nó da autoestrada), bem como a classe do veiculo (porque classe diferente, preço

diferente) e o preço (Que deve ser o preço máximo, isto é por exemplo um veiculo de classe 1, que

cometa esta infração paga o equivalente a ir de Maia a Valença do Minho, ou seja 8.60€, para

qualquer local onde a infração tenha sido cometida)

Figura 10 - Introdução de um infractor

Page 15: Relatorio AED

PÁGINA 14

O método dá ainda a

possibilidade de acrescentar

infractores bem como listas os

infractores atuais, e iniciar

uma nova lista, buscando os

infractores, por exemplo de

ontem a um ficheiro já

existente, no local do projecto.

Figura 11 - Listagem de infractores

Page 16: Relatorio AED

PÁGINA 15

Page 17: Relatorio AED

PÁGINA 16

Opção 6 do Menu – Procura de um carro

Em tudo semelhante a procura do cliente, só que aqui é pedida a matricula de um carro, e se o

mesmo for encontrado nos ficheiros do sistema é impresso. Aqui opto por pedir a matricula, pela

razão de que existem muitos carros iguais com a mesma marca e modelo mas não existem duas

matriculas iguais (a não ser que exista uma falsificação das mesmas), o que não pressuponho

Figura 12 - Procurar um carro

Page 18: Relatorio AED

PÁGINA 17

Opção 7 – verificar a situação de um cliente

Imaginemos que é necessário verificar a situação de um cliente que reclama, ou diz que não está

em divida com a empresa. Como fazíamos? Simples, não é.

É na verdade um algoritmo de procura que aqui está implementado, que percorre o ficheiro,

verifica se o cliente está no mesmo e se estiver imprime apenas a situação corrente do cliente.

Para termos um maior rigor optamos por pedir ao cliente o nome, bem como os respetivos

apelidos, pois apenas queremos mostrar a “situação” para um cliente e não para dois.

Figura 13 - Verificar cliente

Page 19: Relatorio AED

PÁGINA 18

Conclusão

Começo por dizer que é pena termos apenas duas semanas (cerca disso) para fazermos um projeto

desta envergadura.

Se não existissem testes e trabalhos de outras disciplinas consideraria tempo suficiente para

implementar este sistema, mas assim o projeto corria alguns riscos que de facto acabaram por ser

cometidos.

A nível de dificuldades posso dizer que cheguei a ficar um pouco confuso e desnorteado, quando

na opção 5 decidi implementar listas para gerir infractores, mas safei-me bem ai, e esta é das

funções que o programa melhor tem a correr.

Mas os verdadeiros problemas chegaram quando tive que implementar funções para trabalhar ou

manipular os clientes. Com constante manipulação a pressão foi tal que acabei-me por perder um

pouco dentro dos ciclos while e das instruções fscanf() e fprintf().

Apesar de tudo penso que no geral, ou seja no percurso do trabalho, este não me deu muitos

problemas e consegui em muitas situações safar-me, sem ajuda do grupo. O trabalho em si foi

bastante estimulante, dei muito de mim, perdi aqui muito, mas mesmo muito tempo.

Penso que valeu o sacrifício!