Escolar Documentos
Profissional Documentos
Cultura Documentos
2023/2024
Projeto
Prazo de entrega: 10/12/2022
Introdução
O trabalho a realizar neste projeto insere-se na temática do tráfego rodoviário. Em particular,
pretende-se analisar o tráfego rodoviário nas autoestradas e vias rápidas mais importantes
do país.
Trabalho
Pretende-se um programa cuja função principal que se chame main e receba um argumento,
nomeBD: uma string com o nome da base de dados SQLite3, que deve ser criada e
consultada pelo programa.
1. criar as tabelas na base de dados nomeBD, caso estas não existam, e carregar os
dados que estão na pasta data.
2. ficar num ciclo, pedindo comandos ao utilizador e realizando as operações pedidas,
até que seja digitado o comando “fim”. Nesse caso, deve fechar a base de dados e
terminar.
Base de Dados
Uma primeira análise ao problema determinou que a base de dados deve conter as seguintes
tabelas:
Sublancos: tabela com os sublanços (troço entre dois acessos) das estradas.
Contém os campos Id, com o identificador do sublanço; Estrada, com o identificador
da estrada; Inicio, com o nome do acesso de início do sublanço e; Fim, com o nome
do acesso de final do sublanço.
Trafego: tabela que contém o volume de tráfego rodoviário para um dado sublanço
para um dado mês de um dado ano. Contém os campos Sublanco, com o identificador
do sublanço; Ano, com o ano da medição; Mes, com o mês da medição e; Trafego,
com o número indicador do volume de tráfego.
Note que os nomes das tabelas e dos campos não têm pontuação em cedilhas.
que devem ser interpretadas como: Id = 1, Estrada = 1, Início = Sacavém e Fim = S. João da Talha,
ou seja, o sublanço da autoestrada A1 entre Sacavém e S. João da Talha.
Note que cada ficheiro tem uma linha de cabeçalho que deve ser ignorada.
Plano de Desenvolvimento
Sugerimos que siga o seguinte plano de desenvolvimento e que vá testando as funções
individualmente no Mooshak. Serão disponibilizados testes no Mooshak para cada um dos passos
abaixo (mais detalhes no Piazza).
1. Tabela Estradas
Crie a tabela Estradas e carregue para a mesma os dados contidos no ficheiro estradas.csv. Tem à
sua disponibilidade no CLIP uma base de código, de nome projeto.py. Verá que essa base já contém
o código para a criação da tabela Estradas, faltando, no entanto, a parte do carregamento dos dados.
Note que os ficheiros são ficheiros de texto com a codificação UTF-8. Para garantir o suporte para
tal codificação, deverá abrir o ficheiro com a opção encoding=”utf-8”. Tem um exemplo na base de
código.
Uma vez implementado o carregamento dos dados que constam no ficheiro estradas.csv,
implemente a função
• numeroEstradas(cursor)
que recebe apenas o cursor para o acesso à base de dados e retorna o número de estradas na
tabela Estradas usando, para tal, uma query SQL. Para o ficheiro estradas.csv dado, o resultado
será 45, mas nós poderemos testar com outros ficheiros.
Testar localmente
Fazendo uso da base de código, para testar a função na consola deve, inicialmente, utilizar a
seguinte sequência de instruções:
conn = setupDB(“teste.db”)
cursor = conn.cursor()
numeroEstradas(cursor)
Se não alterar a implementação da função setupDB (nem fechar a consola), os testes subsequentes
podem ser realizados executando apenas a instrução:
numeroEstradas(cursor)
Testar no Mooshak
Quando achar que a sua solução está correta, pode submeter no Mooshak para obter o resultado
dos testes lá efetuados.
Será comunicado no Piazza quais são os exercícios Mooshak correspondentes a cada função. Para
todos os testes deverá submeter o ficheiro project.py com a sua solução.
2. Tabela Sublanços
Complete a implementação das funções que criam a tabela Sublancos e carregam para a mesma os
dados contidos no ficheiro sublancos.csv. Depois disso implemente e teste no Mooshak as seguintes
funções:
• numeroSublancosDaEstrada(cursor, estrada)
que recebe como argumento o cursor para acesso à base de dados e o nome da estrada sobre a
qual se quer obter a informação, e retorna o número de acessos existentes nessa estrada. Por
exemplo, com os ficheiros dados, o resultado da chamada numeroSublancosDaEstrada (cursor,
“A1”) será 34.
• estradasDeAcesso(cursor, acesso)
que recebe como argumento o cursor para acesso à base de dados e o nome de um acesso a uma
estrada, e retornam o nome das estradas que podem ser acedidas a partir desse acesso. Por
exemplo, com os ficheiros dados, o resultado da chamada estradasDeAcesso (cursor, “Carvalhos”)
deverá ser [‘A1’, ‘A20’].
3. Tabela Tráfego
Complete a implementação das funções que criam a tabela Trafego e carregue os dados contidos
nos ficheiros trafego2022.csv. Note que, ao contrário do que aconteceu nos ficheiros anteriores,
estes ficheiros não seguem a estrutura da tabela. Cada linha é da forma:
em que os meses não têm de começar em janeiro e terminar em dezembro. Por exemplo, no ficheiro
trafego2022.csv temos valores de abril (representado pelo número 4) a dezembro (representado pelo
número 12) e no ficheiro trafego2023.csv, de janeiro a junho. Focando nas três primeiras linhas do
ficheiro trafego2022.csv, temos o conteúdo:
Sublanco;4;5;6;7;8;9;10;11;12
1;96533;99751;97402;101044;100361;101690;97658;96961;96114
2;88788;91561;89627;93189;93275;93510;89592;88772;88287
Note que pode haver meses para os quais não há registo de volume para um dado sublanço. O valor
definido no ficheiro para esses casos é 0. Assim sendo, se na segunda linha do ficheiro
trafego2022.csv tivéssemos os dados:
1;96533;99751;97402;101044;100361;101690;97658;0;0
Os registos para os meses novembro e dezembro não deveriam ser inseridos na base de dados.
Naturalmente, a sua solução deve funcionar para ficheiros diferentes. Para além do ficheiro
trafego2022.csv, poderá testar com o ficheiro trafego2023.csv.
que retorna o tráfego rodoviário para todos os sublanços que têm início ou fim no dado acesso, num
dado mês de um dado ano. Exemplo: trafegoAcesso (“Carvalhos”, 2022, 4) deveré retornar
[('Feiteira', 'Carvalhos', 71165), ('Carvalhos', 'Jaca', 42700), ('A1/IC2', 'Carvalhos', 36151),
('Carvalhos', 'A20/A32', 36151)]
• trafegoMaxEstrada(nome_estrada)
que retorna um tuplo com os acessos de início e fim do sublanço com mais tráfego, o volume de
tráfego e o mês o e ano em tal tráfego aconteceu. Exemplo: trafegoMaxEstrada(“A2”) deve retornar
('Ponte 25 de Abril', 'Ponte 25 de Abril', 158697, 7, 2022)
que retorna o tráfego rodoviário total anual para uma dada estrada, definida pelo seu nome, um dado
ano. Exemplo: trafegoTotalEstrada(cursor, "A2", 2022) deve retornar 4700218
que retorna o tráfego médio rodoviário anual (arredondado às unidades) para um dado sublanço,
definido pelos acessos de início e fim, e um dado ano. Exemplo: trafegoMedioSublanco(“Sacavém”,
“S. João da Talha”, 2022) deve retornar 98613. Será valorizado o suporte para a comutatividade dos
nomes dos acessos, ou seja: trafegoMedioSublanco(“S. João da Talha”, “Sacavém”, 2022) também
deverá retornar 98613.
Interpretador de comandos
Para terminar, deve completar a implementação de um pequeno interpretador de comandos. A base
de código exemplifica o procedimento com o tratamento do comando acesso. Para uma melhore
compreensão dos conceitos, o tópico também será abordado nas aulas teóricas.
Para além do comando fim referido no início deste documento, o programa deve reconhecer a
seguinte lista de comandos:
• acesso nome_acesso ano mês: que deverá chamar a função trafegoAcesso passando o
cursor para a base de dados e os valores digitados. A interpretação deste comando está
implementada na base de código.
• est max nome_estrada: que deverá chamar a função trafegoMaxEstrada passando o cursor
para a base de dados e os valores digitados.
• est total nome_estrada ano mês: que deverá chamar a função trafegoTotalEstrada
passando o cursor para a base de dados e os valores digitados.
• sub med nome nome_acesso_inicio, nome_acesso_fim, ano: que deverá chamar a função
trafegoMedioEstrada passando o cursor para a base de dados e os valores digitados.
Entrega do Trabalho
Garanta que no início do programa (o ficheiro .py que entrega) tem num comentário os
números e nomes dos alunos do grupo.
O trabalho tem de ser entregue até às 23h59 do dia 10 de dezembro de 2023 (no site
http://miup-pub.pub.di.fct.unl.pt/~mooshak (como o mini-projecto); instruções seguirão em
breve.
5 Critérios de Avaliação
De acordo com o Regulamento de Avaliação de Conhecimentos da FCT/UNL, os estudantes
diretamente envolvidos numa fraude são liminarmente reprovados na disciplina. Em ICE,
considera-se que um aluno que dá ou que recebe código num trabalho comete fraude.
Igualmente, sendo o trabalho para realizarem grupos de um ou de dois alunos, considera-
se que as situações em que os alunos realizam o trabalho em grupos maiores, partilhando
o código, são situações de fraude equivalentes a dar e receber o código entre os vários
grupos. Os alunos que cometerem fraude num trabalho não obterão frequência.
A nota do trabalho será um número entre zero e vinte. Portanto, se o programa for
decomposto em funções, a incorreção de uma função não deve impedir a programação das
outras. Também, mesmo que não consiga implementar todos os comandos, é preferível ser
capaz de efetuar alguns corretamente do que tentar fazer todos, mas nenhum funcionar.