Viva... Estou aqui com problemas com o meu trabalho final de programação... Não sei por onde lhe hei-de pegar já perdi tempo infindos à volta disto e sempre que vou fazer algo, parece-me que deveria ter feito qualquer coisa antes...
O que eu pedia era um empurrãozito, uma luz, uma direcção, algo a que eu me podesse agarrar para começar a fazer o dito cujo...
Obrigado
O que eu pedia era um empurrãozito, uma luz, uma direcção, algo a que eu me podesse agarrar para começar a fazer o dito cujo...
Obrigado
1. Descrição Genérica do Problema
armazenamento e partilha de ficheiros. Os utilizadores deste sistema podem ser de
três tipos:
• BETA: usam o sistema de forma gratuita, mas com algumas limitações;
• PRO: pagam pelo serviço, dispondo de mais funcionalidades e espaço para
armazenamento;
• ADMINISTRADORES: são responsáveis pela gestão do sistema. Enquanto os
utilizadores BETA e PRO usam o sistema para criar directorias e fazer o upload
de ficheiros, os ADMINISTRADORES realizam outro tipo de tarefas, como por
exemplo, eliminar utilizadores que não cumpram as regras e criar, alterar ou
apagar grupos temáticos para onde os utilizadores podem enviar os seus
ficheiros tornando-os visíveis a terceiros.
O armazenamento (upload) dos ficheiros faz-se obrigatoriamente para dentro de
directorias previamente criadas.
Os utilizadores BETA têm as seguintes restrições:
- número máximo de directorias: MAX_DIR (por exemplo, 3)
- número máximo de ficheiros que podem armazenar: MAX_FICH (por exemplo,10)
- espaço de armazenamento limitado: MAX_ESPACO (por exemplo, 10 Mb)
Ao fazer upload de um ficheiro, é necessário testar se ainda há espaço disponível para
ele. Ou seja, a restrição 2 pode não ter sido atingida, mas não ser possível armazenar
o ficheiro devido à restrição 3. Quando as restrições 2 ou 3 forem atingidas, um
utilizador BETA pode fazer continuar a fazer o upload de ficheiros. No entanto, o
sistema esconderá os ficheiros mais antigos até que as restrições deixem de ser
violadas. Este princípio não se aplica às directorias. Caso um utilizador BETA decida
pagar a anuidade e passar a PRO, todos os ficheiros escondidos ficarão disponíveis,
passando a funcionar sem restrições enquanto o seu pagamento continuar em dia.
Um utilizador PRO não tem quaisquer limitações de espaço ou número máximo de
ficheiros que pode armazenar. No entanto, se não renovar a sua assinatura, deve ser
transferido automaticamente para BETA, passando a ter as restrições deste tipo de
utilizadores. Os eventuais ficheiros e directorias em excesso não são eliminados.
Devem apenas ficar escondidos e, caso ele decida mais tarde renovar a assinatura,
passarão de novo a estar visíveis e acessíveis.
As tarefas dos ADMINISTRADORES são diferentes: devem gerir os utilizadores BETA e
PRO e administrar GRUPOS. Na gestão dos utilizadores incluem-se tarefas de alteração
ou eliminação de um utilizador (consultar detalhes na secção 3.1).
Relativamente aos grupos: os grupos são espaços (por exemplo temáticos) para onde
os utilizadores BETA e PRO podem enviar os seus ficheiros, partilhando-os assim com
toda a comunidade. Na versão base do programa, todos os utilizadores BETA e PRO
podem ver todos os grupos e respectivos ficheiros. Como extra, pretende-se que os
alunos implementem o acesso aos grupos apenas a um número restrito de utilizadores
(ver mais detalhes na secção 4.).
Um administrador pode criar grupos e visualizar todos os grupos existentes. Só deve
poder alterar, bloquear e apagar grupos que tenham sido criados por si. Bloquear um
grupo consiste em não permitir que sejam enviados mais ficheiros para lá. Caso um
ADMINISTRADOR deixe de existir no sistema, os grupos por ele criados devem ser
apagados automaticamente.
2. Estruturas de dados
Todas as operações do programa são executadas sobre informação armazenada em
memória. Sendo assim, quando o programa é iniciado, toda a informação é carregada
para várias estruturas de dados. Quando o programa termina, os ficheiros de dados
devem ser actualizados.
As estruturas de dados manipuladas pelo programa devem estar organizadas da forma
descritas nas secções seguintes (tenha em atenção que as estruturas que a seguir se
descrevem não estão necessariamente completas. Se considerar necessário pode
acrescentar/alterar alguns campos ou criar estruturas alternativas).
2.1. UTILIZADORES
Os dados referentes aos utilizadores devem ser guardados em estruturas. Os campos
comuns aos três tipos de utilizadores são:
- nome do utilizador
- nickname (deve ser único e, caso já exista, deve ser pedido outro diferente)
- password
- data de registo no sistema
- número de directorias que já criou
- número de ficheiros armazenados
- número total de bytes já carregados no sistema
Para os utilizadores PRO é necessário considerar ainda a seguinte informação:
- número de directorias que já criou
- número de ficheiros armazenados
- número total de bytes já carregados no sistema
- o número do cartão de crédito usado para o pagamento
- o tipo de subscrição: por exemplo 0-MENSAL, 1-SEMESTRAL, 2-ANUAL
informação:
- número de grupos já criados
tipos de utilizadores.
2.2 DIRECTORIAS
Os dados referentes a uma directoria devem ser guardados numa estrutura contendo
os seguintes campos:
- Nome da directoria
- Número de ficheiros contidos na directoria.
2.3 FICHEIROS
Os dados referentes a um ficheiro devem ser guardados numa estrutura contendo os
seguintes campos:
- nome
- identificador único
- descrição
- tamanho que ocupa em disco (em bytes)
- data em que foi criado
nome do ficheiro (ou caminho completo, caso necessário). Os campos nome, descrição
e data devem ser preenchidos com a informação gravada no próprio ficheiro. O campo
id deve ser gerado pelo sistema de forma a garantir que não há identificadores
repetidos para o mesmo utilizador. O tamanho do ficheiro deve ser determinado pelo
próprio programa.
São fornecidos em anexo (disponibilizados na pasta TRABALHO_PRATICO/FICHEIROS)
um conjunto de ficheiros binários que devem ser usados no teste e validação desta
funcionalidade. Todos os ficheiros binários disponibilizados armazenam informação de
acordo com a seguinte organização:
- no início existe 1 estrutura do tipo Ficheiro contendo os dados necessários para a gestão do programa
- a seguir à estrutura estão armazenados vários bytes com informação irrelevante para o programa (o número de bytes varia de ficheiro para ficheiro).
typedef struct{
int id; //(*)
char nome_ficheiro[100];
char descricao[400];
long int tamanho; (**)
Data criado; //(***)
}Ficheiro;
(*) Este identificador único está colocado a zero em todos os ficheiros
fornecidos. Os alunos devem implementar um sistema que faça a gestão
deste identificador, actualizando-o sempre que o ficheiro é carregado,
garantindo que não há identificadores repetidos.
(**)Nos ficheiros fornecidos, o campo tamanho foi colocado a zero e deve
ser actualizado sempre que se faz o upload do ficheiro, com o número de
bytes que o ficheiro ocupa em disco.
(***) A estrutura Data é uma estrutura contendo três inteiros {dia, mes,
ano} correspondendo ao dia, mês e ano em que foi criado
Um utilizador pode fazer o upload de um ficheiro já existente no sistema. O programa
deve, no entanto, criar um identificador único para cada cópia do ficheiro que sirva
para saber qual o que se pretende eliminar ou enviar para um grupo, por exemplo.
2.4 GRUPOS
seguintes campos:
- nome do grupo
- nickname do administrador que o criou
- data em que foi criado
- número de ficheiros que possui
2.5 MEMÓRIA DINÂMICA
dinâmicas com a seguinte estrutura:
- Os utilizadores devem ser armazenados em 3 listas ligadas referenciadas por 3 ponteiros que estão armazenados num vector de 3 posições:
- Da primeira posição do vector, sai um ponteiro para uma lista de utilizadores BETA, da segunda posição do vector sai um ponteiro para uma lista de utilizadores PRO e da terceira posição uma lista para ADMINISTRADORES.
- De cada nó referente aos utilizadores BETA e PRO, sai um ponteiro que guarda o início de uma sub-lista contendo informação sobre as DIRECTORIAS criadas por esse utilizador.
- De cada nó referente a uma directoria, sai um ponteiro que guarda o início de uma terceira sub-lista contendo informação sobre todos os FICHEIROS colocados na directoria em causa.
- 2. Os grupos devem ser armazenados numa lista ligada:
- Em cada nó desta lista principal, deve existir um ponteiro que aponta para o início de uma lista contendo informação sobre os ficheiros partilhados pelos utilizadores.
- Quando um grupo é bloqueado pelo administrador que o criou, o último nó da sub-lista de ficheiros deve ser colocado a apontar para o início da lista (i.e., deve formar uma lista circular). Num grupo bloqueado não se podem colocar mais ficheiros.
3. Funcionamento do programa
Quando o programa é iniciado toda a informação associada aos utilizadores
(directorias, ficheiros, ...) e aos grupos existentes deve ser transferida dos ficheiros de
dados para as estruturas dinâmicas. Deve ser prevista a possibilidade de ainda não
existir nenhuma informação disponível.
Antes do menu inicial, deve aparecer no monitor um resumo da informação lida:
número de utilizadores (por tipo), número total de ficheiros carregados pelos
utilizadores e o número de grupos já criados.
Depois disso, o programa deverá apresentar um menu inicial com as seguintes
opções:
- LOGIN
- EFECTUAR REGISTO
- SAIR
não introduzir dados válidos (login e password correctos) deve voltar-se ao menu
inicial.
A opção 2. permite fazer o registo de um utilizador novo. Consoante o tipo do novo
utilizador, deve ser obtida toda a informação relevante para efectuar o registo:
- No caso de um utilizador PRO, para além do nome, nickname, password, devem ser pedidos os dados do cartão de crédito e o tipo de pagamento a efectuar (mensal, semestral, …)
- O registo de um ADMINISTRADOR deve ser validado através de um código alfanumérico.
Quando se entra no sistema, quer com LOGIN, quer com REGISTO, deve surgir o
menu apropriado ao tipo de utilizador, de acordo com as funcionalidades que possui.
Essas funcionalidades estão detalhadas de seguida.
3.1. Descrição das funcionalidades:
PARA UTILIZADORES BETA E PRO:
1. DADOS PESSOAIS – Mostra um sub-menu com as seguintes opções:
1.1. Mostrar dados actuais – Permite visualizar os dados do utilizador actual.
1.2. Alterar nickname – Permite alterar o nickname.
1.3. Alterar password – Permite alterar a password.
1.4. Apagar conta – permite excluir-se do sistema, apagando toda a sua
informação.
1.5. Alterar tipo – Permite que um utilizador passe de BETA a PRO mediante
o pagamento da respectiva anuidade.
2. DIRECTORIAS – Mostra um sub-menu com as seguintes opções:
2.1 Visualizar directorias – Permite visualizar as directorias do utilizador.
2.2 Criar directoria – Permite criar uma nova directoria (caso possa).
2.3 Eliminar directoria – Permite eliminar uma directoria, bem como todos
os ficheiros nela incluídos.
2.4 Alterar directoria – Permite alterar o nome de uma directoria. Não
deve permitir criar directorias com nomes repetidos.
3. FICHEIROS – Mostra um sub-menu com as seguintes opções:
3.1 Visualizar ficheiros – Permite visualizar os ficheiros de uma
determinada directoria.
3.2 Upload de ficheiro – Permite carregar o ficheiro para dentro de uma
directoria previamente seleccionada.
3.3 Apagar ficheiro - Permite apagar um ficheiro de uma determinada
directoria.
Programação I – 2006/07
Trabalho Prático 8
3.4 Ver grupos - Permite ver todos os grupos existentes, incluindo o nº de
ficheiros que cada um possui e a informação se está bloqueado ou não.
3.5 Enviar ficheiro para grupo - Permite enviar um ficheiro para um
grupo existente. Não é possível enviar ficheiros para grupos bloqueados.
O envio de um ficheiro para um grupo consiste em fazer uma cópia da
estrutura do ficheiro, contendo exactamente a mesma informação, e
inserir essa estrutura na lista ligada dos grupos.
PARA UTILIZADORES ADMINISTRADORES
1. DADOS PESSOAIS – Mostra um sub-menu com as seguintes opções:
1.1 Mostrar dados actuais – Permite visualizar os dados do utilizador
actual.
1.2 Alterar nickname – Permite alterar o nickname. A alteração deve
assegurar que o nickname continua a ser único.
1.3 Alterar password – Permite alterar a password.
1.4 Apagar conta – permite excluir-se do sistema, apagando toda a sua
informação.
2. GERIR UTILIZADORES – Mostra um sub-menu com as seguintes opções:
2.1 Ver todos – Permite visualizar os todos os utilizadores registados, por
tipo.
2.2 Alterar utilizador – Permite alterar os dados de um utilizador BETA ou
PRO.
2.3 Eliminar utilizador – Permite eliminar um utilizador BETA ou PRO,
incluindo todas as suas directorias e ficheiros.
2.4 Promover/despromover utilizador - permite passar manualmente e
devido a uma razão válida, um utilizador PRO a BETA ou um utilizador
BETA a PRO.
3. GRUPOS – Mostra um sub-menu com as seguintes opções:
3.1 Visualizar grupos – Permite visualizar todos os grupos criados,
nomeadamente a seguinte informação: nome do grupo, nº de ficheiros
que possui, quem o criou (nickname).
3.2 Criar grupo – Permite criar um grupo novo, sem ficheiros.
3.3 Apagar grupo - Permite apagar um grupo, incluindo todos os ficheiros
que possui.
3.4 Alterar grupo - Permite mudar o nome de um grupo. Não podem
existir grupos com o mesmo nome
3.5 Bloquear/desbloquear grupo - Permite bloquear um grupo, evitando
que mais ficheiros lhe sejam associados. Pode desbloquear um grupo,
tornando novamente possível o envio de ficheiros.
NOTA: as operações de APAGAR, ALTERAR, BLOQUEAR/DESBLOQUEAR grupos
só são possíveis em grupos que ele próprio criou.
Neste sistema de menus deve estar sempre visível a informação básica do utilizador
activo:
- Se for BETA: nickname, tipo de utilizador, nº de ficheiros e directorias criadas, percentagem do espaço disponível que já tem ocupado e data de registo no sistema.
- Se for PRO: nickname, tipo de utilizador, nº de ficheiros e directorias criadas, total de bytes já carregados, quantos dias faltam para terminar a subscrição, data de registo no sistema.
- Se for ADMIN: nickname, nº de grupos criados e data de registo no sistema.
4. Funcionalidades extras
É deixado ao critério do aluno a implementação de funcionalidades extras. Alguns
exemplos possíveis são:
- Acesso restrito aos grupos: cada grupo possui um número de utilizadores associado sendo que apenas estes lhe podem aceder, visualizando ou alterando o seu conteúdo.
- Sistema de sorteio semanal: todas as semanas é sorteado aleatoriamente um utilizador BETA que é premiado com uma subscrição anual, passando automaticamente a PRO, durante 1 ano