Nota Final: 15,3
O projeto por nós desenolvido foi um Sistema de Gestão de Núcleos: Este assente numa base de dados com diversas entidades e uma interface apelativa pretendia que a gestão de eventos por parte de um núcleo fosse facilitada. Assim, a partir deste conseguiriamos adicionar Eventos e Eventos Não Monetários (com Sponsor), Gerir os Trabalhadores (Adicionar, Eleminar e Editar), Pulseiras, método do núcleo ter lucro por Eventos, cada produto comprado dá direito a uma pulseira (Adicionar x pulseiras e Ver por evento quantas foram vendidas) e um Armazém (Ver produtos consoante Comida e Bebida e Adicionar Produtos).
O nosso trabalho encontra-se estratificado da seguinte forma, Video.zip que contem o video de demonstração da interface, um zip, GestaoNucleos.zip, um zip com os ficheiros utilizados na interface, uma pasta Relatorio com o relatorio e outra SQL_Code com o codigo SQL, contendo Indexes, Inserções, Procedures, Tables, Triggers, UDFs e Views.
Após recebermos a opinião do professor durante a APF-E, decidimos realizar alterações no trabalho com base em suas sugestões. Uma das principais mudanças foi na introdução de eventos não monetários na base de dados. Para evitar conflitos de ID e simplificar o processo de inserção, agora, o utilizador não precisa de inserir manualmente o ID do evento ao criar um novo Evento Monetário.
Essa solução trouxe as seguintes vantagens:
- Evita conflitos de ID: A atribuição automática do ID do evento pela base de dados elimina duplicações e conflitos entre registos.
- Simplifica a inserção de eventos: Os utilizadores passam a não necessitar de fornecer o número de ID, tornando o processo mais intuitivo e menos propenso a erros.
- Aumenta a eficiência: A automatização da atribuição do ID reduz a carga de trabalho e otimiza o processo de inserção na base de dados.
Código:
-- adicionar evento monetario
CREATE PROCEDURE [dbo].[AddEventoMonetario]
@numero int,
@nome varchar(128),
@local varchar(64),
@tipo varchar(64),
@n_participantes int,
@n_trabalhadores int,
@area varchar(64),
@data datetime,
@lucro decimal(18, 2)
AS
BEGIN
BEGIN TRY
DECLARE @codigo_ev_mon varchar(64);
DECLARE @random_number float;
-- Inserir na tabela GestaoNucleos.Eventos
INSERT INTO GestaoNucleos.Eventos(numero, nome, local, tipo, n_participantes, n_trabalhadores, area, data)
VALUES (@numero, @nome, @local, @tipo, @n_participantes, @n_trabalhadores, @area, @data);
-- Verificar se o número de evento existe na tabela GestaoNucleos.Eventos
IF EXISTS (SELECT 1 FROM GestaoNucleos.Eventos WHERE numero = @numero)
BEGIN
-- Inserir na tabela GestaoNucleos.EventosMonetarios
SET @random_number = RAND();
SET @codigo_ev_mon = ROUND((@random_number * 900) + 100, 0);
INSERT INTO GestaoNucleos.EventosMonetarios(numero, lucro, codigo_ev_mon)
VALUES (@numero, @lucro, @codigo_ev_mon);
END
ELSE
BEGIN
-- Código de tratamento quando o número de evento não existe na tabela GestaoNucleos.Eventos
RAISERROR('O número de evento fornecido não existe na tabela GestaoNucleos.Eventos.', 16, 1);
END;
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
SET @ErrorMessage = ERROR_MESSAGE();
RAISERROR(@ErrorMessage, 16, 1);
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
END;
Triggers:
- CC (8 digitos)
- 40 horas do trabalhador
UDFs:
- ContarAlimentacao
- ContarBebidas
Views:
- Informação do Evento
Alguns procedures que foram feitos na base de dados não foram implementados na interface devido a falta de tempo e/ou algumas falhas que surgiam da sua utilização.
Estes tratam-se de:
- VerMembros: Mostraria o nome, nº mecanográfico e o número de horas trabalhadas pelos Membros (alunos UA).
- ObterExternos: Mostra a tabela de Externos a que necessita de pagar, através da inserção do id do RF. O resultado final deste seria o nºCC, o salário por hora e o montante final pago
- AddPulseira: Introduz x número de pulseiras na tabela Pulseiras, através da inserção do número do evento e número de pulseiras que se pretende introduzir, gerando automaticamente um id para cada.
- AddComidaEBebida:Introduz Alimento/Bebida na tabela "Produtos", desde que o tipo contenha a palavra "Bebida" ou "Alimentacao"
Note-se que destes 3 o único que nao funcionava integralmente é o VerMembros, em que a quantidade de Membros apresentada não corresponde às linhas da tabela Membros.