Ir para conteúdo
Fórum Script Brasil
  • 0

sistema de gerenciamento de tempo.


Gio

Pergunta

Estou com um trabalho para fazer e tentei começar. Fiz a agenda e ao tentar fazer o resto simplesmente não sei como fazer.

Me ajudem por favor?! Qualquer ajuda ou conselho vale muito.

O trabalho é o seguinte:

A maioria dos professores do DCC se sente sobrecarregada com encargos e reuniões e

acaba por não conseguir cumprir todos os seus compromissos. Tendo em vista o aumento

esperado dos encargos didáticos no próximo ano, devido ao programa REUNI, o

Departamento resolveu desenvolver um sistema automatizado de gerenciamento de

tempo, e, para tanto, contrata você para fazê-lo. A especificação do sistema segue abaixo.

Tipos Abstrato de Dados

Você deve implementar três tipos abstratos de dados, definidos a seguir:

1. Compromisso

A agenda de um professor pode ter vários tipos de compromissos, definidos a partir de

um identificador numérico de tipo bem como informações adicionais associadas. O

sistema a ser desenvolvido deve suportar 5 tipos de compromissos:

• AULA: aulas para turmas de graduação, pós-graduação ou especialização. Este

compromisso tem associado as seguintes informações: data, hora, duração (em

minutos) e nome da disciplina ministrada.

• ORIENTAÇÃO: orientação de alunos. Este compromisso possui uma data, hora,

duração (em minutos) e nome do aluno orientado.

• REUNIÃO: reuniões do departamento. Inclui data, hora, duração (em minutos) e

nome da reunião (ex: COLEGIADO DA GRADUAÇÃO ou COPEQ)

• EVENTO: participação em eventos técnicos como congressos e conferências.

Possui data, hora, duração (em dias), nome do evento. Você pode assumir que um

evento começa as 0hs do dia inicial e terminam as 24hs do último dia.

• COMPROMISSO PARTICULAR: qualquer compromisso particular, que possui

data , hora, duração (em minutos) e razão (ex: médico).

Você pode assumir que nome de disciplina, nome de aluno, nome de reunião, nome de

evento e razão de compromisso particular são cadeias de caracteres, todas com um

tamanho máximo M = 100.

Cada compromisso possui também um identificador numérico único, que servirá para

realização de alterações após a criação do mesmo.

Cada tipo de compromisso tem um grau de prioridade que, por default, deve ser:

AULA 2 ORIENTAÇÃO 1 REUNIÃO 4

EVENTO 3 COMPROMISSO PARTICULAR 2

Um professor deve poder alterar (aumentar ou diminuir) o grau de prioridade de qualquer

compromisso. Os graus de prioridade deverão ser utilizados para definir quais

compromissos serão cumpridos e quais deverão ser cancelados. Se dois compromissos

têm conflito de horário, aquele com a maior prioridade deverá ser cumprido (Vide regras

de desempate abaixo).

Um professor ainda poderá definir se um dado compromisso pode ser adiado ou não,

definindo o campo adiável apropriadamente. Note que AULA e EVENTO não podem ser

adiados.

Em caso de conflito, se o compromisso com menor prioridade for adiável, ele será

adiado. Caso contrário, ele terá que ser cancelado (veja descrição abaixo). Neste caso,

cada compromisso tem também um campo status associado informando se ele poderá ser

cumprido, se ele deverá ser cancelado ou adiado. Em outras palavras, este campo pode

assumir um dos código (valores numéricos) “A SER CUMPRIDO”, “ADIADO” ou

“CANCELADO”.

Um compromisso deve suportar, no mínimo, as seguintes operações:

• inicializaCompromisso(tipo, data, hora, duração e nome): inicializa um

compromisso com os valores informados. Esta função deve atribuir um

identificador numérico único para o compromisso e retorná-lo como resultado.

Além disto, no momento de criação, todo compromisso deve poder ser cumprido

e não pode ser adiado. Logo, o status de um compromisso recém-criado será

sempre “A SER CUMPRIDO”, e o campo adiável deverá ser inicializado com

FALSE.

• alteraPrioridade(novaPri): altera a prioridade de um compromisso com um novo

valor passado como parâmetro.

• retornaPrioridade(): retorna a prioridade de um compromisso.

• eAdiavel(flag): define se compromisso passado como parâmetro é adiável ou

não. O parâmetro flag deve ser TRUE se compromisso é adiável e FALSE caso

contrário.

• temConflito(compromisso1, compromisso2): esta operação deve retornar se há ou

não conflito nos horários dos dois compromissos passados como parâmetros.

• atribuiStatus(flag): determina se o compromisso poderá ser cumprido, se ele

deverá ser cancelado ou adiado. O parâmetro flag deve conter um dos três valores

“A SER CUMPRIDO”, “ADIADO” ou “CANCELADO”.

• retornaStatus(): retorna se compromisso poderá ser cumprido, se ele deverá ser

cancelado ou adiado.

• imprimeCompromisso(): imprime todas as informações associadas a um

compromisso seguindo a ordem identificador, tipo, data, hora, duração, nome de

disciplina/aluno/reunião/evento (ou razão), adiável, status. Você deve imprimir o

tipo na forma de cadeia de caracteres (ex: REUNIÃO) e não o valor numérico.

2. Agenda

O sistema sendo desenvolvido deve permitir a criação de agendas, uma para cada

professor.

Assim, cada agenda deve conter

• um identificador único do professor,

• o nome do professor,

• o ano,

• uma sequência de eventos. Você pode assumir um número máximo, pré-definido,

de eventos no ano em cada agenda.

Um professor deve ser capaz de, no mínimo, realizar as seguintes operações com sua

agenda:

• criaAgenda(idProf, nome, ano): cria uma nova agenda para o professor com

identificador e nome informados. O ano também é passado como parâmetro. Esta

operação deve criar uma agenda vazia, sem nenhum compromisso.

• recuperaAgenda(data): recebe uma data, e retorna uma mensagem na tela com o

nome do professor, o ano e o número de compromissos na agenda com data após

a data fornecida.

• insereCompromisso(tipo, data, hora, duração, nome): recebe as informações

associadas de um novo compromisso, que deve ser inicializado (chamando a

operação respectiva no TAD Compromisso) e inserido na agenda. A operação

deve imprimir uma mensagem informando sucesso ou falha. Em caso de sucesso,

o identificador do compromisso deve ser impresso.

• removeCompromisso(idCompromisso): recebe o identificador de um

compromisso. Esta operação deve remover o ompromisso identificado da agenda

do professor, caso ele exista.

• imprimeAgenda(): esta operação deve imprimir todos os compromissos

agendados do professor, ordenados cronologicamente pelo instante de início. Em

caso de empate, deve-se imprimir primeiro os compromissos com maior

prioridade. Se ainda houver empate, deve-se respeitar a ordem de impressão:

EVENTO, REUNIÃO, AULA, ORIENTAÇÃO, COMPROMISSO

PARTICULAR.

• resolveConflito(): esta operação deve visitar toda a agenda a procura de conflitos

entre compromissos. Cada conflito encontrado deve ser resolvido a partir da

atribuição de status de CANCELADO ou ADIADO para alguns compromissos.

A resolução de conflitos deve seguir a ordem de prioridade dos eventos. Em caso

de empate, deve-se priorizar compromissos que iniciam primeiro. Caso ainda haja

empate, deve-se seguir a mesma ordem de impressão, informada acima.

• retornaNAdiamentos(): retorna o número total de compromissos com status

“ADIADO”.

• retornaNCancelamentos(): retorna ao número total de compromissos com status

“CANCELADO”.

• retornaNCompromissos(): retorna o número total de eventos na agenda.

• imprimeCompromissosAdiados(): esta operação deve imprimir todos os

compromissos agendados que foram adiados, seguindo a mesma ordem da

operação imprimeAgenda.

• imprimeCompromissosCancelados(): esta operação deve imprimir todos os

compromissos agendados que foram cancelados devido a conflitos, seguindo a

mesma ordem da operação imprimeAgenda.

• imprimeCompromissosACumprir(): esta operação deve imprimir todos os

compromissos que ainda pode ser cumpridos, seguindo a mesma ordem da

operação imprimeAgenda.

Note que a declaração exata das operações listadas tanto para o TAD Compromisso

quanto para o TAD Agenda fica a critério dos alunos. Lista-se acima apenas as

funcionalidades mínimas esperadas bem como parâmetros essenciais para suas

execuções. Caso o aluno sinta necessidade de criar novas operações, ou de modificar a

lista de parâmetros das apresentadas, as modificações deverão ser discutidas e justificadas

no relatório.

Sistema de Gerenciamento de Tempo

O sistema de gerenciamento de tempo a ser desenvolvido deve permitir a criação,

atualização e visualização das agendas de todos os P = 60 professores do departamento.

O sistema deve ser interativo permitindo que o usuário (isto é, um professor) defina qual

operação deseja realizar em cada interação. Em outras palavras, o sistema deve fornecer

um menu para que o usuário interaja com o sistema e eventualmente saia do mesmo.

Escolhida a operação, o sistema deverá solicitar que o usuário entre com as informações

necessárias para a sua realização e imprima os resultados (se houver) na tela.

O menu não precisa ser sofisticado, bastando uma interface ASCII simples com código

de escolha de cada operação que o usuário pode fazer em cada instante. Testes de

corretude e de sanidade deverão ser realizados em cada operação.

O sistema deve poder ser utilizar por todos os P professores, embora o acesso seja

sequencial.

Apresente uma descrição do TAD, com as estruturas de dados e

funções/procedimentos implementados. Apresente também a ordem de complexidade de

cada função ou procedimento implementado.

As regras de submissão estão no site da disciplina. Em particular, atente para:

• O programa deve ser organizado em, no mínimo, 3 módulos: compromisso.c

(compromisso.h), agenda.c (agenda.h) e main.c

• O programa deve estar bem indentado e comentado

• O programa não deve fazer uso de comando goto nem de variáveis globais

• Caso apareçam números fixos no código, estes devem ser definidos como

constantes.

• O trabalho é individual. Trabalhos copiados serão penalizados conforme

informado em sala.

ATENÇÃO: Soluções que não correspondam à implementação de um Tipo Abstrato de

Dados serão duramente penalizadas por não atenderem a especificação.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Ola,

bom, tirando a parte da agenda eu infelizmente to com dúvida em praticamente tudo.

Eu cheguei a criar as strcts de AULA, COMPROMISSO, etc, mas não to conseguindo trabalhar isso dentro da ideia do gerenciador de tempo.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...