Mudanças entre as edições de "Sistemas Operacionais e Introdução a Programação - projeto em C"
Linha 35: | Linha 35: | ||
* 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 | + | Considerações |
− | # 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. | + | *# 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. |
− | # 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. | + | *# 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. |
+ | *# 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. | ||
+ | |||
+ | * Prof. Ederson: | ||
+ | *# Alguns exercícios serão resolvidos em aula e [[Sistemas Operacionais e Introdução a Programação (diário 2009-2)#Etapa 1|publicados no wiki]], como por exemplo a sequência de Fibonacci. | ||
==2: Ler/escrever no arquivo== | ==2: Ler/escrever no arquivo== |
Edição das 13h49min de 20 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.
- Cada usuário tem sua própria agenda para anotar seus eventos.
- Um evento deve conter:
- título
- horários de início e fim
- data e horário de criação
- descrição
- local de realização
- outros participantes.
- estado.
- categoria: pessoal, trabalho, etc.
- 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
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
- Prof. Sobral:
- 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.
- 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.
- 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.
- Prof. Ederson:
- Alguns exercícios serão resolvidos em aula e publicados no wiki, como por exemplo a sequência de Fibonacci.
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 (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 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.
Considerações do Prof. Ederson:
- Acompanhe a discussão do projeto.
Calendário de Entregas
- Etapa 1: 30/09
- Etapa 2: 13/11
- Etapa 3: 27/11
- Etapa 4: 11/12
Referências Bibliográficas
- Curso de linguagem C - disponível nas referências bibliográficas da disciplina.