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
 
(30 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
Tema: agenda multiusuário.
+
Proposta de projeto: uma agenda de eventos multiusuário.
  
 
=Requisitos do Sistema=
 
=Requisitos do Sistema=
Linha 7: Linha 7:
 
* Um evento deve conter:
 
* Um evento deve conter:
 
*# título
 
*# título
*# horários de início e fim
+
*# datas e horários de início e fim
 
*# data e horário de criação
 
*# data e horário de criação
 
*# descrição
 
*# descrição
 
*# local de realização
 
*# local de realização
*# outros participantes.
 
 
*# estado.
 
*# estado.
 
*# categoria: pessoal, trabalho, etc.
 
*# categoria: pessoal, trabalho, etc.
Linha 18: Linha 17:
 
** Adicionar, ler/modificar ou remover eventos de sua agenda.
 
** Adicionar, ler/modificar ou remover eventos de sua agenda.
 
** Pesquisar eventos em sua agenda de acordo com qualquer dado de evento.
 
** 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 [http://www.ietf.org/rfc/rfc2445.txt iCalendar].
 
* A agenda deve poder ser tanto exportada quanto importada do formato [http://www.ietf.org/rfc/rfc2445.txt iCalendar].
  
 
=Etapas do projeto=
 
=Etapas do projeto=
 
==1: Ler/escrever tarefas==
 
==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.
+
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:
+
===Conhecimentos envolvidos===
** uso de tipos de dados básicos
+
* uso de tipos de dados básicos
** definição e uso de strings
+
* 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 estruturas de dados do tipo registro (''struct''), para representar um evento
** definição e uso de vetores
+
* definição e uso de vetores
** entrada e saída padrão, para mostrar mensagens na tela e ler dados do teclado
+
* 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 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
+
* estruturas de repetição (while ou for) para o laço do menu
  
Considerações do Prof. Sobral:
+
===Considerações dos Professores===
# 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.
+
* Prof. Sobral:
# 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.
+
** Para manter a agenda em memória define-se um vetor de eventos. Cada evento será representado por uma variável do tipo [http://www.ead.cpdee.ufmg.br/cursos/C/aulas/cb00.html struct].
# 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.
+
** Algumas considerações sobre os recursos da linguagem C a serem usados nesta etapa estarão na [[Projeto final de SOP - turmas 2070114 e 2070115|página de acompanhamento das turmas 207014 e 207015]]. Ali ficarão também pequenos exemplos de como resolver problemas específicos que aparecem no desenvolvimento da agenda (ex: como fazer para que forçar a leitura de um valor inteiro, mesmo que o usuário erre a digitação e forneça um valor de outro tipo).
 +
 
 +
* Prof. Ederson:
 +
** Alguns exercícios serão resolvidos em aula e [[Sistemas Operacionais e Introdução a Programação (diário 2009-2)#Início da Etapa 1|publicados no wiki]], como por exemplo a sequência de Fibonacci.
 +
*** Se alguém se interessar, pode modificar o código para melhorá-lo! :-)
  
 
==2: Ler/escrever no arquivo==
 
==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.
+
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:
+
===Conhecimentos envolvidos===
** Entrada e saída em arquivos
+
* 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
+
* 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.
+
* 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 [http://www.ead.cpdee.ufmg.br/cursos/C/aulas/c980.html fprintf e fscanf], que trabalham com representações de valores em formato de texto.
  
 
==3: Busca nas tarefas==
 
==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.
+
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:
+
===Conhecimentos 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).
+
* Condições compostas e de tamanho variável: manipulação de ''strings''. 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==
+
==4: Importação e exportação para formato iCalendar==
* 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.
+
Um usuário deve poder exportar sua agenda para o formato iCalendar, 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===
** Leitura e gravação de arquivos no formato iCal
+
* Leitura e gravação de arquivos no formato iCalendar
** Conversão de valores segundo o formato iCal
+
* Conversão de valores segundo o formato iCalendar
** Uso de <tt>fscanf</tt> para fazer ''parsing'' de linhas de texto
+
* Uso de <tt>fscanf</tt> para fazer ''parsing'' de linhas de texto
  
Considerações do Prof. Sobral:
+
===Considerações dos Professores===
# 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.
+
* 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.
  
 +
* Prof. Ederson:
 +
** Acompanhe a [[Discussão:Sistemas Operacionais e Introdução a Programação - projeto em C|discussão do projeto]].
  
 
=Calendário de Entregas=
 
=Calendário de Entregas=
 +
Em cada etapa do projeto, há três obrigações:
 +
# Apresentação do código-fonte completo.
 +
# Breve explicação do código-fonte da etapa em questão (+- 3min).
 +
# Demonstração de funcionalidade do programa compilado.
 +
 +
==Datas==
 
* Etapa 1: 30/09
 
* Etapa 1: 30/09
 
* Etapa 2: 13/11
 
* Etapa 2: 13/11
Linha 71: Linha 80:
 
=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.
 +
 +
 +
<center><small>[[Sistemas Operacionais e Introdução a Programação (diário 2009-2)#19/10: Projeto final|Diário de 2009-2 da disciplina - Prof. Ederson]]</small></center>
 +
 +
<center><small>[[Projeto final de SOP - turmas 2070114 e 2070115|Diário do projeto - Prof. Sobral]]</small></center>
 +
 +
<center><small>[[Sistemas Operacionais e Introdução a Programação (página)|Página principal da disciplina]]</small></center>

Edição atual tal como às 06h58min de 4 de novembro de 2009

Proposta de projeto: uma agenda de eventos 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. datas e horários de início e fim
    3. data e horário de criação
    4. descrição
    5. local de realização
    6. estado.
    7. categoria: pessoal, trabalho, etc.
    8. 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.
  • A agenda deve poder ser tanto exportada quanto importada do formato iCalendar.

Etapas do projeto

1: Ler/escrever tarefas

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 dos Professores

  • Prof. Sobral:
    • Para manter a agenda em memória define-se um vetor de eventos. Cada evento será representado por uma variável do tipo struct.
    • Algumas considerações sobre os recursos da linguagem C a serem usados nesta etapa estarão na página de acompanhamento das turmas 207014 e 207015. Ali ficarão também pequenos exemplos de como resolver problemas específicos que aparecem no desenvolvimento da agenda (ex: como fazer para que forçar a leitura de um valor inteiro, mesmo que o usuário erre a digitação e forneça um valor de outro tipo).
  • Prof. Ederson:
    • Alguns exercícios serão resolvidos em aula e publicados no wiki, como por exemplo a sequência de Fibonacci.
      • Se alguém se interessar, pode modificar o código para melhorá-lo! :-)

2: Ler/escrever no arquivo

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

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 envolvidos

  • Condições compostas e de tamanho variável: manipulação de strings. 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 iCalendar

Um usuário deve poder exportar sua agenda para o formato iCalendar, 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 iCalendar
  • Conversão de valores segundo o formato iCalendar
  • Uso de fscanf para fazer parsing de linhas de texto

Considerações dos Professores

  • 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.

Calendário de Entregas

Em cada etapa do projeto, há três obrigações:

  1. Apresentação do código-fonte completo.
  2. Breve explicação do código-fonte da etapa em questão (+- 3min).
  3. Demonstração de funcionalidade do programa compilado.

Datas

  • Etapa 1: 30/09
  • Etapa 2: 13/11
  • Etapa 3: 27/11
  • Etapa 4: 11/12

Referências Bibliográficas


Diário de 2009-2 da disciplina - Prof. Ederson
Diário do projeto - Prof. Sobral
Página principal da disciplina