Mudanças entre as edições de "Sistemas Operacionais e Introdução a Programação - projeto em C"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 52: Linha 52:
 
** Condições compostas e de tamanho variável (ex: uma busca pode se basear somente no título, mas outra pode se basear em horário de início e local de realização).
 
** Condições compostas e de tamanho variável (ex: uma busca pode se basear somente no título, mas outra pode se basear em horário de início e local de realização).
  
==4: Ordenar tarefas==
+
==4: Importação e exportação para formato iCal==
* Detalhamento: o aluno deve aperfeiçoar a agenda para que os eventos guardados em arquivo estejam em ordem cronológica.
 
* Conhecimentos envolvidos:
 
** Uso de vetores para realizar o ordenamento em memória
 
** Algoritmos de ordenamento, como bubble sort (o mais simples)
 
 
 
==5: Horários livres em todas as agendas==
 
* Detalhamento: Um usuario deve poder inserir um evento nas agendas de outros usuarios, que serao os participantes do evento. A agenda deve poder identificar uma data e horario em que todos estao livres, de forma que o novo evento nao conflite com nenhum evento ja existente. Os usuarios convidados a participar do evento devem poder confirmar ou rejeitar o convite. Assim, o evento ao ser inserido deve ficar com status "CONFIRMAR", e cada usuario deve confirmar individualmente sua participacao. Para o status do evento ser CONFIRMADO, todos os usuarios devem confirma-lo. O usuario que criou o evento deve poder a qualquer momento adicionar ou excluir participantes.
 
* Conhecimentos envolvidos:
 
** Entrada e saída em múltiplos arquivos simultaneamente
 
 
 
Considerações do Prof. Sobral:
 
# Esta última etapa adiciona uma funcionalidade boa, mas não sei se isto pode ser expresso em uma agenda iCal.
 
 
 
==6: Importação e exportação para formato iCal==
 
 
* Detalhamento: um usuário deve poder exportar sua agenda para o formato iCal, o que possibilita que ela possa ser visualizada e manipulada por qualquer outro software que suporte esse formato (ex: Thunderbird, Outlook Express, Turba e outros). Analogamente, uma agenda iCal deve poder ser importada para ser visualizada e modificada.
 
* Detalhamento: um usuário deve poder exportar sua agenda para o formato iCal, o que possibilita que ela possa ser visualizada e manipulada por qualquer outro software que suporte esse formato (ex: Thunderbird, Outlook Express, Turba e outros). Analogamente, uma agenda iCal deve poder ser importada para ser visualizada e modificada.
 
* Conhecimentos envolvidos:
 
* Conhecimentos envolvidos:
Linha 75: Linha 61:
 
Considerações do Prof. Sobral:
 
Considerações do Prof. Sobral:
 
# Acho essa etapa 6 mais importante que a 5. Se tiver que escolher qual delas fazer, se faltar tempo (algo bastante provável), fico com a 6. O atraente nela é a ligação com uma aplicação real, que não parece somente um exercício de aula. E talvez ela possa ser uma etapa 4.
 
# Acho essa etapa 6 mais importante que a 5. Se tiver que escolher qual delas fazer, se faltar tempo (algo bastante provável), fico com a 6. O atraente nela é a ligação com uma aplicação real, que não parece somente um exercício de aula. E talvez ela possa ser uma etapa 4.
 +
  
 
=Referências Bibliográficas=
 
=Referências Bibliográficas=
 
* [http://www.ead.cpdee.ufmg.br/cursos/C/c.html Curso de linguagem C] - disponível nas [[Sistemas Operacionais e Introdução a Programação#Referências Bibliográficas|referências bibliográficas]] da disciplina.
 
* [http://www.ead.cpdee.ufmg.br/cursos/C/c.html Curso de linguagem C] - disponível nas [[Sistemas Operacionais e Introdução a Programação#Referências Bibliográficas|referências bibliográficas]] da disciplina.

Edição das 09h59min de 19 de outubro de 2009

Tema: agenda multiusuário.

Requisitos do Sistema

  • Uma agenda é formada por eventos inseridos pelo usuário.
    • Cada usuário tem sua própria agenda para anotar seus eventos.
      • Cada agenda será armazenada em um arquivo exclusivo, onde serão escritos/lidos esses eventos.
  • Um evento deve conter:
    1. título
    2. horários de início e fim
    3. data e horário de criação
    4. descrição
    5. local de realização
    6. outros participantes.
    7. estado.
    8. categoria: pessoal, trabalho, etc.
    9. recorrência: com que regularidade ocorre e prazo.
  • Um usuário poderá:
    • Adicionar, ler/modificar ou remover eventos de sua agenda.
    • Pesquisar eventos em sua agenda de acordo com qualquer dado de evento.
    • Inserir um evento nas agendas de outros usuários, que serão os participantes do evento. Esse evento não pode conflitar com nenhum evento já existente.
      • O sistema deverá identificar uma data e horário em que todos estão livres.
      • Os demais usuários deverão confirmar/negar suas participações.
  • A agenda deve poder ser tanto exportada quanto importada do formato iCalendar.

Etapas do projeto

1: Ler/escrever tarefas

  • Detalhamento: o aluno deve modelar um evento, e criar uma interface baseada em menus para inseri-los e mostrar os eventos existentes. Os eventos devem ser armazenados em memória RAM, e por isto serão perdidos quando o programa da agenda terminar.
  • Conhecimentos envolvidos:
    • uso de tipos de dados básicos
    • definição e uso de strings
    • definição e uso de estruturas de dados do tipo registro (struct), para representar um evento
    • definição e uso de vetores
    • entrada e saída padrão, para mostrar mensagens na tela e ler dados do teclado
    • estruturas de decisão (if e switch) para identificar opção de menu escolhida
    • estruturas de repetição (while ou for) para o laço do menu

Considerações do Prof. Sobral:

  1. Na etapa 1 existe apenas um evento, que fica em uma variável do tipo struct. Assim, nessa etapa o aluno exercita mais é a criação da interface. E na etapa 2 ele pode guardar os eventos em um arquivo, e assim em nenhum momento usará um vetor de eventos em memória.
  2. Mantém-se o uso do vetor de eventos em memória na etapa 1, porém limitado a uma pequena quantidade de eventos. Isto funcionaria como um buffer, que seria aproveitado na etapa 2 para as transferências entre arquivo e memória.
  3. Mantém-se o uso do vetor de eventos em memória na etapa 1, e o acesso ao arquivo ocorre somente quando se carrega ou grava uma agenda. Acho esta última opção a melhor.

2: Ler/escrever no arquivo

  • Detalhamento: o aluno deve implementar o armazenamento da agenda em um arquivo. Assim, será necessário definir um formato de gravação dos eventos em arquivo, de forma a poder facilmente recuperá-los. Cada novo evento deve ser gravado individualmente no arquivo. Não pode haver eventos conflitantes.
  • conhecimentos envolvidos:
    • Entrada e saída em arquivos
    • funções, para encapsular os algoritmo envolvidos: leitura de evento, gravação de evento, pesquisa de evento conflitante, pesquisa de intervalos livres
    • representação de dados em arquivo, e conversão para a representação em memória. Há detalhes sobre como armazenar cada tipo de dados: convertendo tudo para um formato de texto, ou guardar os dados em formato cru (raw). Creio que seja mais fácil explorar o potencial das funções fprintf e fscanf, que trabalham com representações de valores em formato de texto.

3: Busca nas tarefas

  • Detalhamento: o aluno deve implementar na agenda a pesquisa de tarefas de acordo com uma combinação de seus dados, que são: título, data e horário, duração, participantes, estado.
  • Conhecimentos adicionais envolvidos:
    • Condições compostas e de tamanho variável (ex: uma busca pode se basear somente no título, mas outra pode se basear em horário de início e local de realização).

4: Importação e exportação para formato iCal

  • Detalhamento: um usuário deve poder exportar sua agenda para o formato iCal, o que possibilita que ela possa ser visualizada e manipulada por qualquer outro software que suporte esse formato (ex: Thunderbird, Outlook Express, Turba e outros). Analogamente, uma agenda iCal deve poder ser importada para ser visualizada e modificada.
  • Conhecimentos envolvidos:
    • Leitura e gravação de arquivos no formato iCal
    • Conversão de valores segundo o formato iCal
    • Uso de fscanf para fazer parsing de linhas de texto

Considerações do Prof. Sobral:

  1. Acho essa etapa 6 mais importante que a 5. Se tiver que escolher qual delas fazer, se faltar tempo (algo bastante provável), fico com a 6. O atraente nela é a ligação com uma aplicação real, que não parece somente um exercício de aula. E talvez ela possa ser uma etapa 4.


Referências Bibliográficas