You are on page 1of 67

Universidade Estadual de Ponta Grossa - UEPG

Setor de Ciências Agrárias e de Tecnologia


Curso de Bacharelado em Informática
Disciplina de Projeto de Sistemas de Informação

PROJETO
SGCLUBE

Fabricio Henrique Tabarro


Geovani de Oliveira Fanine

Ariangelo Hauer Dias


(Orientador)

Novembro/2008
SUMÁRIO

1. DIAGNÓSTICO ATUAL ...................................................................................... 1

2. OBJETIVO DO PROJETO................................................................................... 2

3. ESCOPO .................................................................................................................. 2

4. PROPOSTA DE PROJETO .................................................................................. 2


4.1 BENEFÍCIOS ................................................................................................... 2
4.2 CUSTOS ........................................................................................................... 3
4.3 RISCOS ............................................................................................................ 6
4.4 DESCRIÇÃO DA MODELAGEM PRELIMINAR ......................................... 7
4.4.1 Diagrama de Fluxo de Dados .................................................................. 7
4.4.2 Diagrama Entidade Relacionamento ..................................................... 11
4.4.3 IDEF1X................................................................................................... 12
5. DICIONÁRIO DE DADOS ................................................................................. 13

6. SCRIPT DO BANCO ........................................................................................... 20


6.1 CRIAÇÃO DO BANCO ................................................................................. 20
6.2 CRIAÇÃO DAS TABELAS ........................................................................... 20
6.3 CRIAÇÃO DAS CHAVES PRIMÁRIAS ...................................................... 25
6.4 CRIAÇÃO DAS CHAVES ESTRANGEIRAS .............................................. 26
6.5 DEFINIÇÃO DOS CAMPOS ÚNICOS ......................................................... 30
6.6 DEFINIÇÃO DOS VALORES PADRÃO PARA CAMPOS ......................... 30
6.7 CRIAÇÃO DE GATILHOS NO BANCO (TRIGGERS). .................................. 32
7. PLANO DE TESTES ........................................................................................... 45

8. PROTÓTIPO DE INTERFACE ......................................................................... 52

9. CRONOGRAMA .................................................................................................. 59

10. CONCLUSÃO................................................................................................... 60

11. REFERÊNCIAS BIBLIOGRÁFICAS ........................................................... 61

12. RESPONSABILIDADES ................................................................................. 62


ÍNDICE DE FIGURAS

Figura 01 – Diagrama de Fluxo de Dados – Nível 0....................................................10


Figura 02 – Diagrama de Fluxo de Dados – Nível 1....................................................11
Figura 03– Diagrama de Fluxo de Dados – Nível 2 – Reservas...................................11
Figura 04 – Diagrama de Fluxo de Dados – Nível 2 – Sócios......................................12
Figura 05 – Diagrama de Fluxo de Dados – Nível 2 – Patrimônios.............................12
Figura 06 – Diagrama de Fluxo de Dados – Nível 2 – Caixa.......................................13
Figura 07 – Diagrama Entidade-Relacionamento........................................................14
Figura 08 – Modelagem IDEF1X.................................................................................15
Figura 09 – Tela de Boas vindas e Login.....................................................................54
Figura 10 – Tela Principal do Sistema.........................................................................54
Figura 11 – Tela de Cadastro de Sócio........................................................................55
Figura 12 – Tela de Cadastro de sócio 2......................................................................55
Figura 13 – Tela de Reserva 1......................................................................................56
Figura 14 – Tela de Reserva 2......................................................................................56
Figura 15 – Tela de cadastro de pagamentos e recebimentos.......................................57
Figura 16– Cronograma...............................................................................................58
ÍNDICE DE TABELAS

Tabela 1 – Custos com Softwares.................................................................................7


Tabela 2 – Custos com Hardwares...............................................................................8
Tabela 3 – Custos com Recursos Humanos.................................................................9
Tabela 4 – Dicionário de dados da tabela Área.........................................................16
Tabela 5 – Dicionário de dados da tabela associação................................................16
Tabela 6 – Dicionário de dados da tabela Baixa_pat................................................16
Tabela 7 – Dicionário de dados da tabela Cidade.....................................................16
Tabela 8 – Dicionário de dados da tabela Cliente.....................................................16
Tabela 9 – Dicionário de dados da tabela dependência............................................17
Tabela 10 – Dicionário de dados da tabela dependente............................................17
Tabela 11 – Dicionário de dados da tabela estado.....................................................17
Tabela 12 – Dicionário de dados da tabela fatura_mensalidade..............................17
Tabela 13 – Dicionário de dados da tabela física.......................................................18
Tabela 14 – Dicionário de dados da tabela Fornecedores.........................................18
Tabela 15 – Dicionário de dados da tabela grau_parentesco....................................18
Tabela 16 – Dicionário de dados da tabela jurídica...................................................18
Tabela 17 – Dicionário de dados da tabela motivos_baixa........................................18
Tabela 18 – Dicionário de dados da tabela natureza_contabil..................................19
Tabela 19 – Dicionário de dados da tabela natureza_pat..........................................19
Tabela 20 – Dicionário de dados da tabela patrimônio.............................................19
Tabela 21 – Dicionário de dados da tabela pessoa.....................................................19
Tabela 22 – Dicionário de dados da tabela reserva...................................................20
Tabela 23 – Dicionário de dados da tabela sócio........................................................20
Tabela 24 – Dicionário de dados da tabela taxas.......................................................20
Tabela 25 – Dicionário de dados da tabela taxas_dep...............................................20
Tabela 26 – Dicionário de dados da tabela taxas_socio.............................................21
Tabela 27 – Dicionário de dados da tabela telefone...................................................21
Tabela 28 – Dicionário de dados da tabela tipo_custo...............................................21
Tabela 29 – Dicionário de dados da tabel21a tipo_socio...........................................21
Tabela 30 – Dicionário de dados da tabela 21tipo_tel................................................21
Tabela 31 – Dicionário de dados da tabela título........................................................22
Tabela 32 – Dicionário de dados da tabela usuário....................................................22
1. DIAGNÓSTICO ATUAL
O Copel Clube Ponta Grossa (C.C.P.G.), é constituído de 270 sócios (entre funcionários
ativos e aposentados da Copel) que pagam mensalidade via desconto em folha de
pagamento. Hoje, o único controle dos associados é via cadastro da Copel dos funcionários
que possuem desconto da mensalidade na folha e mediante isso, as regras de negócio
quanto aos dependentes e até mesmo com os associados, não são seguidas “à risca”.

Quanto ao sistema de locações de dependências (churrasqueiras, campos, salão, etc) é feito


via sistema Lotus Notes hospedado nos servidores da Copel. Um dos problemas é que
qualquer momento a Copel pode (e fará) a exclusão do software de seu servidor, pois o
clube não possuí nenhum vínculo com a empresa Copel.

No aspecto financeiro da instituição, o controle é feito por planilhas que são preenchidas
mensalmente e que não possuem nenhuma administração de recursos e contabilidade,
sendo apenas para mera demonstração de pagamentos e recebimentos aos associados.

Na parte de controle dos patrimônios do clube (móveis, utensílios, materiais esportivos,


etc) não existe nada que controle quantitativa nem qualitativamente, sem saber quando nem
onde os patrimônios foram adquiridos e qual a situação atual dos mesmos.

SGCLUBE 1
2. OBJETIVO DO PROJETO
O objetivo deste projeto é ter uma sistemática de controle para o Copel Clube Ponta Grossa
(C.C.P.G.) em suas reservas, controle de associados, fluxo de caixa, controle patrimonial e
a emissão de relatórios de forma estratégica e clara.

O sistema contemplará os módulos do sistema (Patrimônios, Reservas, Associados)


podendo assim gerar recibos, mensalidades, pagamentos e demais operações financeiras de
forma identificada e que quando solicitadas em relatórios e demonstrações financeiras,
estarão disponíveis ao usuário do sistema.

3. ESCOPO
Este projeto permitirá que sejam cadastrados com detalhes os sócios, dependências,
controle de patrimônio, fluxo de caixa, pagamento das mensalidades e taxas de utilização
das dependências. O sistema imprimirá relatórios mostrando as atividades financeiras do
clube, sócios atrasados e comprovantes de pagamento das mensalidades.

4. PROPOSTA DE PROJETO
O software SGCLUBE será desenvolvido para a informatização do Copel Clube Ponta
Grossa, e contará com dois programadores que trabalharão 15 horas semanais em média.
Segundo levantamento, o clube comprará um computador o qual utilizará o sistema
operacional Windows XP e o banco de dados PostGreSQL, que terá que possuir 512Mb de
memória RAM, processador de 1.6 GHz. Também será necessária uma webcam para tirar
fotos dos sócios e uma impressora multifuncional que servirá tanto para impressões em
geral quanto para digitalizar as fotos caso não as tire via webcam.

Para o desenvolvimento do projeto será utilizado o Delphi 7 da Borland, já que é a


ferramenta de desenvolvimento que os programadores mais conhecem, como também
muito utilizando para a criação de softwares comerciais.

4.1 BENEFÍCIOS

Existem softwares no mercado, no exemplo do Bluware – Elite Clube, que tivemos acesso

SGCLUBE 2
à apresentação. Este sistema é bem completo para gestão de um clube, mas que é muito
grande e possui opções que nunca seriam usadas no Copel Clube, com muitas variáveis e
atributos que podem ser mudados, tornando o sistema de custosa parametrização e
customização. Os benefícios do SGCLUBE em relação a este e outros softwares do
mercado é que ele é feito de maneira a controlar os processos exclusivos deste clube e com
as limitações que ele terá. Seus relatórios serão muito específicos e de claro entendimento,
pois alguns deles serão impressos remotamente (o usuário estará em qualquer lugar com
Internet e o software estará rodando no clube com acesso a Internet por banda larga) para o
funcionário que controlará as reservas das dependências e fará as devidas verificações e
conferências em patrimônios.

4.2 CUSTOS

Estão listados como custos do projeto, softwares usados para confecção do projeto,
hardwares usados para confecção do projeto e instalação do sistema no local e os recursos
humanos necessários.

Software:

Item Aplicativo Valor Fonte da informação

1 SGBD PostgreSQL 8.3.1 Free www.postgresql.org

2 Delphi 7.0 R$ 3.746,00 www.borland.com

All Fusion ERWIN


3 R$ 6.591,00 www.ca.com
Data Modeler 7.2

http://dia-
4 DIA 0.96 Free
installer.de/index_en.html

5 SmartDraw 2008 R$ 325,05 http://www.smartdraw.com/buy/

Microsoft Office 2007


6 R$ 194,65 www.balaodainformatica.com.br
Home Student

Microsoft Windows Vista


7 R$ 198,90 www.balaodainformatica.com.br
Home Premium

Total R$ 11.055,60

Tabela 1 – Custos com Softwares

1. A licença do PostGreSQL 8.3.1 é gratuita, pois se trata de um software de uso livre,


conforme www.postgresql.org.

SGCLUBE 3
2. A licença do Delphi 7.0 Enterprise custa aproximadamente $ 2.270,81, conforme o
endereço
http://www.checkoutsoftware.com/shop/viewPrd.asp?pid=4042&ref=related_b ,
com a cotação do dólar em R$ 1,65 verificado em 15 de abril de 2008 no site
http://economia.uol.com.br/cotações. Em reais, fica em aproximadamente R$
3.746,00, ainda que a licença do Delphi 7 não exista no mercado, temos que adquirir a
licença do Delphi 2007 e solicitar à Borland a regressão (downgrade) da licença para
utilizar o Delphi 7.

3. Licença do ERWIN 7.2 adquirida em


http://store.ca.com/dr/v2/ec_Main.Entry17c?SID=40705&SP=10023&CID=0&PID=6
47416&PN=1&V1=647416&CUR=840&DSP=&PGRP=0&ABCODE=&CACHE_ID
=0 na data de 15 de Abril de 2008, com o valor via site de U$ 3.995,00, que em reais
fica aproximadamente R$ 6.591,00.

4. A licença do DIA for Windows é Free e se encontra no site http://dia-

installer.de/index_en.html.

5. O SmartDraw 2008 encontra-se no endereço http://www.smartdraw.com/buy/ pelo


valor de U$ 197,00, e em reais fica por R$ 325,05.

6. A licença do Office 2007 Home & Student, consta em


https://www.balaodainformatica.com.br/detalheprod.asp?prod_id=6662&url_comp=co
dnome%3Doffice%2B2007%26sa%3Dbuscar%26lista%3Dbusca no valor de R$
194,65.

7. A licença do Microsoft Windows Vista Home Premium consta em


https://www.balaodainformatica.com.br/site/?prod_id=6090 no valor de R$ 198,90.

Hardware:

SGCLUBE 4
Item Aplicativo Valor Fonte da informação

8 Notebook HP TX1320us R$ 3.900,00 www.shopbox.com.br

Impressora Multifuncional HP
9 R$ 311,95 www.balaodainformatica.com.br
OfficeJet j3680

10 WebCam LifeCam VX-3000 R$ 219,00 www.balaodainformatica.com.br

Computador Clube HP
11 R$ 1.999,00 www.submarino.com.br
Pavillon S6330BR

Total R$ 6.429,95

Tabela 2 – Custos com Hardwares

8. O notebook referido é para confecção do projeto e pode ser encontrado em


www.shopbox.com.br pelo valor de R$ 3.931,64.

9. A impressora para utilização do Clube posteriormente encontra-se à venda em


https://www.balaodainformatica.com.br/detalheprod.asp?prod_id=6950&url_comp
=codnome%3Dj3680%26sa%3Dbuscar%26lista%3Dbusca pelo valor de R$
311,95.

10. A Web Cam que também será utilizada posteriormente pelo Clube, encontra-se à
venda em
https://www.balaodainformatica.com.br/detalheprod.asp?prod_id=5848&url_comp
=codnome%3Dvx%2D3000%26sa%3Dbuscar%26lista%3Dbusca pelo valor de R$
219,00.

11. O microcomputador HP Pavillon S6330BR supre as necessidades do software e


pode ser adquirido em
http://www.submarino.com.br/software_productdetails.asp?Query=ProductPage&P
rodTypeId=10&ProdId=21351239&ST=SR por R$ 1.999,00.

SGCLUBE 5
Recursos Humanos:

Foi considerados que no primeiro semestre de 2008 trabalharemos cada integrante cerca de
6 horas semanais cada e, à partir de julho, trabalharemos 12 horas semanais cada para
garantir a entrega na data combinada o software.

Item Aplicativo Valor Fonte da informação


Programador (18,75 R$/Hr)
11 R$ 12.375,00 www.catho.com.br
330 horas cada integrante
Tabela 3 – Custos com Recursos Humanos

Em http://www3.catho.com.br/vag/busca/search.php?q=delphi&x=0&y=0 um analista que


trabalha cerca de 40 horas semanais ganha cerca de R$ 3.000,00 por mês, e se dividindo
para se saber o valor da hora, deu o valor da hora em torno de R$ 18,75.

Custos com Software R$ 11.055,60

Custos com Hardware R$ 6.429,95

Custo com Recursos R$ 12.375,00


Humanos
Total R$ 31.947,48

O custo total estimado para desenvolvimento e funcionamento do software ficará em torno


de R$ 31.947,48.

4.3 RISCOS

• Não cumprimento do prazo do projeto, ultrapassando as datas definidas no cronograma


inicial. A solução para esse risco é definir um cronograma para ficar dentro do prazo.

• A equipe não conhecer completamente o SGBD postgreSQL, o que pode resultar em


contra-tempos. A solução é buscar ajuda com professores, pessoas especialistas, livros
e Internet.

• A equipe nunca realizou um projeto de sistemas de informação de forma completa. A


solução é buscar a opinião de professores, quanto aos requisitos e funcionalidades do
projeto.

SGCLUBE 6
4.4 DESCRIÇÃO DA MODELAGEM PRELIMINAR

4.4.1 Diagrama de Fluxo de Dados

A criação do D.F.D. tem grande complexidade no entendimento e na construção. Segundo


REZENDE (1999), o D.F.D. é uma técnica usada na programação estruturada de diagramação
de software que possui diversos tipos de diagramas, derivando-se em outros diagramas
subseqüentes.

Nas figuras a seguir serão representados os processos mostrando o que o sistema faz:

Figura 01 – Diagrama de Fluxo de Dados – Nível 0

SGCLUBE 7
Figura 02 – Diagrama de Fluxo de Dados – Nível 1

Figura 03– Diagrama de Fluxo de Dados – Nível 2 – Reservas

SGCLUBE 8
Figura 04 – Diagrama de Fluxo de Dados – Nível 2 – Sócios

Figura 05 – Diagrama de Fluxo de Dados – Nível 2 – Patrimônios

SGCLUBE 9
Figura 06 – Diagrama de Fluxo de Dados – Nível 2 – Caixa

SGCLUBE 10
4.4.2 Diagrama Entidade Relacionamento

Figura 07 – Diagrama Entidade-Relacionamento

SGCLUBE 11
4.4.3 IDEF1X

Figura 08 – Modelagem IDEF1X

SGCLUBE 12
5. DICIONÁRIO DE DADOS

Tabela 4 – Dicionário de dados da tabela Área

Tabela 5 – Dicionário de dados da tabela associacao

Tabela 6 – Dicionário de dados da tabela Baixa_pat

Tabela 7 – Dicionário de dados da tabela Cidade

Tabela 8 – Dicionário de dados da tabela Cliente

SGCLUBE 13
Tabela 9 – Dicionário de dados da tabela dependencia

Tabela 10 – Dicionário de dados da tabela dependente

Tabela 11 – Dicionário de dados da tabela estado

Tabela 12 – Dicionário de dados da tabela fatura_mensalidade

SGCLUBE 14
Tabela 13 – Dicionário de dados da tabela fisica

Tabela 14 – Dicionário de dados da tabela Fornecedores

Tabela 15 – Dicionário de dados da tabela grau_parentesco

Tabela 16 – Dicionário de dados da tabela juridica

Tabela 17 – Dicionário de dados da tabela motivos_baixa

SGCLUBE 15
Tabela 18 – Dicionário de dados da tabela natureza_contabil

Tabela 19 – Dicionário de dados da tabela natureza_pat

Tabela 20 – Dicionário de dados da tabela patrimonio

Tabela 21 – Dicionário de dados da tabela pessoa

SGCLUBE 16
Tabela 22 – Dicionário de dados da tabela reserva

Tabela 23 – Dicionário de dados da tabela socio

Tabela 24 – Dicionário de dados da tabela taxas

Tabela 25 – Dicionário de dados da tabela taxas_dep

SGCLUBE 17
Tabela 26 – Dicionário de dados da tabela taxas_socio

Tabela 27 – Dicionário de dados da tabela telefone

Tabela 28 – Dicionário de dados da tabela tipo_custo

Tabela 29 – Dicionário de dados da tabela tipo_socio

Tabela 30 – Dicionário de dados da tabela tipo_tel

SGCLUBE 18
Tabela 31 – Dicionário de dados da tabela título

Tabela 32 – Dicionário de dados da tabela usuário

SGCLUBE 19
6. SCRIPT DO BANCO

6.1 CRIAÇÃO DO BANCO

-- Cria usuario do banco


-- Primeiro deleta o que tiver feito.
DROP DATABASE db_sgclub;
DROP TABLESPACE tbs_sgclub;
DROP ROLE sgclub;
CREATE ROLE sgclub LOGIN PASSWORD 'sgclub'; -- Cria tabela fisica dando acesso
ao usuario criado CREATE TABLESPACE tbs_sgclub
OWNER sgclub LOCATION ‘C:/Program Files/PostgreSQL/8.2/data/sgbluc’; -- Cria
banco de dados com acesso do usuario criado gravando na tabela fisica criada
CREATE DATABASE db_sgclub
WITH OWNER = sgclub
ENCODING = 'SQL_ASCII'
TABLESPACE = tbs_sgclub;

-- Connecta do banco sgclub


\connect db_sgclub postgres

-- Cria esquema para gravar as tabelas e triggers


-- primeiro exclui o esquema publico DROP SCHEMA public CASCADE;

-- depois cria-se o esquema sgclub

CREATE SCHEMA ssgclub AUTHORIZATION sgclub;


GRANT ALL ON SCHEMA ssgclub TO sgclub;
COMMENT ON SCHEMA ssgbluc IS 'Esquema do banco de dados SGCLUB, onde estão
as tabelas, gatilhos e visões';
\connect - sgclub ssgclub

6.2 CRIAÇÃO DAS TABELAS

CREATE TABLE area (


id_area INTEGER NOT NULL,
descr_area VARCHAR(20) NOT NULL,
descr_detal_area VARCHAR(60) NOT NULL
);
CREATE TABLE associacao (
dt_evento DATE NOT NULL,
ES CHAR(1) NOT NULL,
id_pessoa INTEGER NOT NULL
);
CREATE TABLE baixa_pat (
id_pat INTEGER NOT NULL,
dt_baixa DATE NOT NULL,
motivo_detalhado VARCHAR(100) NOT NULL,
id_motivo INTEGER NOT NULL,

SGCLUBE 20
id_baixa INTEGER NOT NULL
);
CREATE TABLE cidade (
id_cidade INTEGER NOT NULL,
nome VARCHAR(50) NOT NULL,
uf CHAR(2) NOT NULL
);

CREATE TABLE cliente (


id_pessoa INTEGER NOT NULL,
contato VARCHAR(20) NULL
);

CREATE TABLE dependencia (


id_dependencia INTEGER NOT NULL,
descr_dependencia VARCHAR(20) NOT NULL,
situacao VARCHAR2(20) NULL,
capacidade INTEGER NULL,
localizacao VARCHAR(20) NOT NULL,
locabilidade CHAR(1) NOT NULL,
forma_locacao CHAR(1) NULL,
tempo_limpeza DATE NULL,
Observacoes VARCHAR(100) NULL
);

CREATE TABLE dependente (


id_pessoa INTEGER NOT NULL,
id_dependente CHAR(2) NOT NULL,
nome VARCHAR(50) NOT NULL,
dt_nascimento DATE NOT NULL,
id_grau INTEGER NOT NULL,
foto BLOB NULL
);

CREATE TABLE estado (


uf CHAR(2) NOT NULL,
descr_estado VARCHAR(20) NOT NULL
);

CREATE TABLE fatura_mesalidade (


id_pessoa INTEGER NOT NULL,
mes_ano DATE NOT NULL,
dt_pagamento DATE NULL,
id_fatura INTEGER NOT NULL,
id_taxa INTEGER NOT NULL,
valor REAL NULL
);

CREATE TABLE fisica (

SGCLUBE 21
id_pessoa INTEGER NOT NULL,
cpf CHAR(11) NULL,
rg VARCHAR2(12) NULL,
dt_nascimento DATE NULL,
Orgao_exp VARCHAR(5) NULL,
sexo CHAR(1) NOT NULL
);

CREATE TABLE fornecedores (


contato VARCHAR(20) NULL,
id_pessoa INTEGER NOT NULL
);

CREATE TABLE grau_parentesco (


id_grau INTEGER NOT NULL,
descr_grau VARCHAR(20) NOT NULL
);

CREATE TABLE juridica (


id_pessoa INTEGER NOT NULL,
razao_social VARCHAR(40) NOT NULL,
cnpj CHAR(12) NOT NULL
);

CREATE TABLE motivos_baixa (


id_motivo INTEGER NOT NULL,
descr_resumido_motivo VARCHAR(20) NOT NULL
);

CREATE TABLE natureza_contabil (


id_natureza INTEGER NOT NULL,
descr_natureza VARCHAR(20) NOT NULL,
descr_detalhada_natureza VARCHAR2(60) NOT NULL
);

CREATE TABLE natureza_pat (


id_nat_pat INTEGER NOT NULL,
descr_natureza_pat VARCHAR(50) NOT NULL
);

CREATE TABLE patrimonio (


id_pat INTEGER NOT NULL,
descr_resumida_pat VARCHAR(20) NOT NULL,
dt_compra DATE NOT NULL,
descr_detalhada_pat VARCHAR(60) NOT NULL,
preco_compra REAL NULL,
id_nat_pat INTEGER NOT NULL,
id_dependencia INTEGER NOT NULL,
quantidade INTEGER NOT NULL,

SGCLUBE 22
ultima_cotacao REAL NULL,
dt_ultima_cotacao DATE NULL
);

CREATE TABLE pessoa (


id_pessoa INTEGER NOT NULL,
nome VARCHAR(50) NOT NULL,
endereco VARCHAR(40) NOT NULL,
num VARCHAR2(5) NULL,
complemento VARCHAR(30) NULL,
id_cidade INTEGER NOT NULL,
bairro VARCHAR(60) NOT NULL,
CEP CHAR(8) NULL
);

CREATE TABLE reserva (


id_reserva INTEGER NOT NULL,
dt_inicio DATE NOT NULL,
hr_inicio DATE NOT NULL,
dt_fim DATE NOT NULL,
hr_fim DATE NOT NULL,
id_pessoa INTEGER NOT NULL,
id_dependente CHAR(2) NULL,
id_dependencia INTEGER NOT NULL,
qtd_pessoas INTEGER NOT NULL
);

CREATE TABLE socio (


id_pessoa INTEGER NOT NULL,
foto BLOB NULL,
matricula CHAR2(10) NOT NULL,
dt_associacao DATE NOT NULL,
id_tipo_socio INTEGER NOT NULL,
id_area INTEGER NOT NULL,
ativo CHAR(1) NOT NULL
);

CREATE TABLE taxas (


id_taxa INTEGER NOT NULL,
descr_taxa VARCHAR(20) NOT NULL,
valor REAL NOT NULL
);

CREATE TABLE taxas_dep (


id_taxa INTEGER NOT NULL,
id_dependencia INTEGER NOT NULL
);

CREATE TABLE taxas_socio (

SGCLUBE 23
id_taxa INTEGER NOT NULL,
id_tipo_socio INTEGER NOT NULL
);

CREATE TABLE telefone (


telefone CHAR(8) NOT NULL,
id_pessoa INTEGER NOT NULL,
id_telefone NUMERIC NOT NULL,
id_tipo_tel INTEGER NOT NULL,
DDD CHAR(2) NOT NULL
);

CREATE TABLE tipo_custo (


id_tipo_custo INTEGER NOT NULL,
descr_tipo VARCHAR(20) NOT NULL,
descr_detalhada_tipo VARCHAR(60) NOT NULL,
id_natureza INTEGER NOT NULL
);

CREATE TABLE tipo_socio (


id_tipo_socio INTEGER NOT NULL,
descr_tipo VARCHAR(20) NOT NULL,
descr_detal_tipos VARCHAR(60) NOT NULL
);

CREATE TABLE tipo_tel (


id_tipo_tel INTEGER NOT NULL,
descr_tipo_tel VARCHAR(20) NOT NULL
);

CREATE TABLE titulo (


id_titulo INTEGER NOT NULL,
valor REAL NOT NULL,
dt_prazo DATE NULL,
DC CHAR(1) NOT NULL,
dt_criacao DATE NOT NULL,
id_fatura INTEGER NULL,
dt_pagto DATE NOT NULL,
id_tipo_custo NUMERIC NOT NULL,
id_reserva INTEGER NULL,
id_pessoa INTEGER NOT NULL,
id_taxa NUMERIC NULL,
descr_titulo VARCHAR(40) NOT NULL
);

CREATE TABLE Usuario (


id_pessoa CHAR(18) NOT NULL,
login VARCHAR2(20) NOT NULL,

SGCLUBE 24
senha VARCHAR2(20) NULL
);

6.3 CRIAÇÃO DAS CHAVES PRIMÁRIAS

ALTER TABLE area


ADD ( PRIMARY KEY (id_area) ) ;
ALTER TABLE associacao
ADD ( PRIMARY KEY (dt_evento, id_pessoa) ) ;
ALTER TABLE baixa_pat
ADD ( PRIMARY KEY (id_baixa) ) ;
ALTER TABLE cidade
ADD ( PRIMARY KEY (id_cidade) ) ;
ALTER TABLE cliente
ADD ( PRIMARY KEY (id_pessoa) ) ;
ALTER TABLE dependencia
ADD ( PRIMARY KEY (id_dependencia) ) ;
ALTER TABLE dependente
ADD ( PRIMARY KEY (id_pessoa, id_dependente) ) ;
ALTER TABLE estado
ADD ( PRIMARY KEY (uf) ) ;
ALTER TABLE fatura_mesalidade
ADD ( PRIMARY KEY (id_fatura) ) ;
ALTER TABLE fisica
ADD ( PRIMARY KEY (id_pessoa) ) ;
ALTER TABLE fornecedores
ADD ( PRIMARY KEY (id_pessoa) ) ;
ALTER TABLE grau_parentesco
ADD ( PRIMARY KEY (id_grau) ) ;
ALTER TABLE juridica
ADD ( PRIMARY KEY (id_pessoa) ) ;
ALTER TABLE motivos_baixa
ADD ( PRIMARY KEY (id_motivo) ) ;
ALTER TABLE natureza_contabil
ADD ( PRIMARY KEY (id_natureza) ) ;
ALTER TABLE natureza_pat
ADD ( PRIMARY KEY (id_nat_pat) ) ;
ALTER TABLE patrimonio
ADD ( PRIMARY KEY (id_pat) ) ;
ALTER TABLE pessoa
ADD ( PRIMARY KEY (id_pessoa) ) ;
ALTER TABLE reserva
ADD ( PRIMARY KEY (id_reserva) ) ;
ALTER TABLE socio
ADD ( PRIMARY KEY (id_pessoa) ) ;
ALTER TABLE taxas
ADD ( PRIMARY KEY (id_taxa) ) ;
ALTER TABLE taxas_dep
ADD ( PRIMARY KEY (id_taxa) ) ;

SGCLUBE 25
ALTER TABLE taxas_socio
ADD ( PRIMARY KEY (id_taxa) ) ;
ALTER TABLE telefone
ADD ( PRIMARY KEY (id_pessoa, id_telefone) ) ;
ALTER TABLE tipo_custo
ADD ( PRIMARY KEY (id_tipo_custo) ) ;
ALTER TABLE tipo_socio
ADD ( PRIMARY KEY (id_tipo_socio) ) ;
ALTER TABLE tipo_tel
ADD ( PRIMARY KEY (id_tipo_tel) ) ;
ALTER TABLE titulo
ADD ( PRIMARY KEY (id_titulo) ) ;
ALTER TABLE Usuario
ADD ( PRIMARY KEY (id_pessoa) ) ;

6.4 CRIAÇÃO DAS CHAVES ESTRANGEIRAS

ALTER TABLE associacao


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES socio ) ;

ALTER TABLE baixa_pat


ADD ( FOREIGN KEY (id_motivo)
REFERENCES motivos_baixa ) ;

ALTER TABLE baixa_pat


ADD ( FOREIGN KEY (id_pat)
REFERENCES patrimonio
ON DELETE SET NULL ) ;

ALTER TABLE cidade


ADD ( FOREIGN KEY (uf)
REFERENCES estado ) ;

ALTER TABLE cliente


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES juridica
ON DELETE CASCADE ) ;

ALTER TABLE cliente


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES fisica
ON DELETE CASCADE ) ;

SGCLUBE 26
ALTER TABLE dependente
ADD ( FOREIGN KEY (id_grau)
REFERENCES grau_parentesco ) ;

ALTER TABLE dependente


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES socio ) ;

ALTER TABLE fatura_mesalidade


ADD ( FOREIGN KEY (id_taxa)
REFERENCES taxas_socio ) ;

ALTER TABLE fatura_mesalidade


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES socio ) ;

ALTER TABLE fisica


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES pessoa
ON DELETE CASCADE ) ;

ALTER TABLE fornecedores


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES juridica
ON DELETE CASCADE ) ;

ALTER TABLE fornecedores


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES fisica
ON DELETE CASCADE ) ;

ALTER TABLE juridica


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES pessoa
ON DELETE CASCADE ) ;

ALTER TABLE patrimonio


ADD ( FOREIGN KEY (id_dependencia)
REFERENCES dependencia ) ;

SGCLUBE 27
ALTER TABLE patrimonio
ADD ( FOREIGN KEY (id_nat_pat)
REFERENCES natureza_pat ) ;

ALTER TABLE pessoa


ADD ( FOREIGN KEY (id_cidade)
REFERENCES cidade ) ;

ALTER TABLE reserva


ADD ( FOREIGN KEY (id_dependencia)
REFERENCES dependencia
ON DELETE SET NULL ) ;

ALTER TABLE reserva


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES cliente
ON DELETE SET NULL ) ;

ALTER TABLE reserva


ADD ( FOREIGN KEY (id_pessoa, id_dependente)
REFERENCES dependente
ON DELETE SET NULL ) ;

ALTER TABLE reserva


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES socio
ON DELETE SET NULL ) ;

ALTER TABLE socio


ADD ( FOREIGN KEY (id_area)
REFERENCES area ) ;

ALTER TABLE socio


ADD ( FOREIGN KEY (id_tipo_socio)
REFERENCES tipo_socio ) ;

ALTER TABLE socio


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES fisica
ON DELETE CASCADE ) ;

SGCLUBE 28
ALTER TABLE taxas_dep
ADD ( FOREIGN KEY (id_dependencia)
REFERENCES dependencia ) ;

ALTER TABLE taxas_dep


ADD ( FOREIGN KEY (id_taxa)
REFERENCES taxas
ON DELETE CASCADE ) ;

ALTER TABLE taxas_socio


ADD ( FOREIGN KEY (id_tipo_socio)
REFERENCES tipo_socio
ON DELETE SET NULL ) ;

ALTER TABLE taxas_socio


ADD ( FOREIGN KEY (id_taxa)
REFERENCES taxas
ON DELETE CASCADE ) ;

ALTER TABLE telefone


ADD ( FOREIGN KEY (id_tipo_tel)
REFERENCES tipo_tel ) ;

ALTER TABLE telefone


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES pessoa ) ;

ALTER TABLE tipo_custo


ADD ( FOREIGN KEY (id_natureza)
REFERENCES natureza_contabil ) ;

ALTER TABLE titulo


ADD ( FOREIGN KEY (id_taxa)
REFERENCES taxas
ON DELETE SET NULL ) ;

ALTER TABLE titulo


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES cliente

SGCLUBE 29
ON DELETE SET NULL ) ;

ALTER TABLE titulo


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES fornecedores
ON DELETE SET NULL ) ;

ALTER TABLE titulo


ADD ( FOREIGN KEY (id_reserva)
REFERENCES reserva
ON DELETE SET NULL ) ;

ALTER TABLE titulo


ADD ( FOREIGN KEY (id_tipo_custo)
REFERENCES tipo_custo ) ;

ALTER TABLE titulo


ADD ( FOREIGN KEY (id_fatura)
REFERENCES fatura_mesalidade
ON DELETE SET NULL ) ;

ALTER TABLE Usuario


ADD ( FOREIGN KEY (id_pessoa)
REFERENCES fisica
ON DELETE CASCADE ) ;

6.5 DEFINIÇÃO DOS CAMPOS ÚNICOS

ALTER TABLE PESSOA_JURIDICA


ADD CONSTRAINT U_cnpj UNIQUE (cnpj);

6.6 DEFINIÇÃO DOS VALORES PADRÃO PARA CAMPOS

ALTER TABLE SOCIO


ADD CONSTRAINT FK_SOCIO_PESSOA_FISICA FOREIGN KEY
(ID_PESSOA)
REFERENCES PESSOA_FISICA
ON DELETE CASCADE
ON UPDATE CASCADE;

ALTER TABLE USUARIO


ADD CONSTRAINT FK_USUARIO_PESSOA_FISICA FOREIGN KEY
(ID_PESSOA)
REFERENCES PESSOA_FISICA
ON DELETE CASCADE

SGCLUBE 30
ON UPDATE CASCADE;

ALTER TABLE CLIENTE


ADD CONSTRAINT FK_CLIENTE_PESSOA_FISICA FOREIGN KEY
(ID_PESSOA)
REFERENCES PESSOA_FISICA
ON DELETE CASCADE
ON UPDATE CASCADE;

ALTER TABLE FORNECEDORES


ADD CONSTRAINT FK_FORNECEDORES_PESSOA_JURIDICA FOREIGN
KEY (ID_PESSOA)
REFERENCES PESSOA_JURIDICA
ON DELETE CASCADE
ON UPDATE CASCADE;

ALTER TABLE PESSOA_FISICA


ADD CONSTRAINT FK_PESSOA_FISICA_PESSOA FOREIGN KEY
(ID_PESSOA)
REFERENCES PESSOA
ON DELETE CASCADE
ON UPDATE CASCADE;

ALTER TABLE PESSOA_JURIDICA


ADD CONSTRAINT FK_PESSOA_JURIDICA_PESSOA FOREIGN KEY
(IDE_PESSOA)
REFERENCE PESSOA
ON DELETE CASCADE
ON UPDATE CASCADE;

ALTER TABLE PESSOA_JURIDICA


ADD CONSTRAINT CK_CNPJ CHECK( (CNPJ ~ '[0-9][0-9][0-9][0-9][0-9][0-
9][0-9][0-9][0-9][0-9][0-9]
[0-9][0-9][0-9]') );

ALTER TABLE PESSOA_FISICA


ADD CONSTRAINT CK_CPF CHECK ( (CPF ~ '[0-9][0-9][0-9][0-9][0-9][0-
9][0-9][0-9][0-9][0-9][0-9]') );

ALTER TABLE PESSOA_FISICA


ADD CONSTRAINT CK_SEXO CHECK ( (SEXO='F') OR (SEXO='M') );

ALTER TABLE TITULO


ADD CONSTRAINT CK_DC CHECK ( (DC='C') OR (DC='D') );

ALTER TABLE TAXAS


ADD CONSTRAINT CK_TAXA CHECK (VALOR>0);

ALTER TABLE ESTADO

SGCLUBE 31
ADD CONSTRAINT CK_ESTADO CHECK (uf='AM') or (uf ='AC') or (uf = 'PA')
or (uf = 'RO') or (uf = 'RR') or (uf = 'TO') or (uf = 'GO') or (uf = 'MT') or (uf = 'MS') or (uf
= 'AL') or (uf = 'BA') or (uf = 'CE') or (uf = 'MA') or (uf = 'PB') or (uf = 'PI') or (uf = 'RN')
or (uf = 'SE') or (uf = 'ES') or (uf = 'MG') or (uf = 'RJ') or (uf = 'SP') or (uf = 'PR') or (uf =
'RS') or (uf = 'SC') or (uf = 'DF');

6.7 CRIAÇÃO DE GATILHOS NO BANCO (Triggers).

CREATE OR REPLACE FUNCTION VER_JURIDICA() RETURN TRIGGER AS'


BEGIN
------Verifica se a pessoa física não é um pessoa jurídica
IF EXISTS (SELECT * FROM PESSOA FISICA PF WHERE PF.ID_PESSOA =
NEW.ID_PESSOA) THEN
IF TG_OP = "INSERT" THEN
RAISE EXCEPTION "NÃO SE PODE CADASTRAR UMA PESSOA JURÍDICA
COMO PESSOA FÍSICA";
END IF;
END IF;
IF (NEW.CNPJ <> "") THEN
IF EXISTS (SELECT * FROM PESSOA_JURIDICA PJ WHERE PJ.CNPJ =
NEW.CNPJ) THEN
RAISE EXCEPTION "CNPJ JÁ CADASTRADO";
END IF;
END IF;
RETURN NEW;
END;
'LANGUAGE PLPGSQL;

CREATE TRIGGER TRG_VALIDA_JURIDICA


BEFORE INSERT OR UPDATE
ON JURIDIA FOR EACH ROW
EXECUTE PROCEDURE VER_JURIDICA();

CREATE OR REPLACE FUNCTION F_juridica()


RETURNS TRIGGER AS $F_juridica$
DECLARE -- Variaveis
i INT4; -- Contador
iProd INT4; -- Somatório
iMult INT4; -- Fator
iDigito INT4; -- Digito verificador calculado
sNumero VARCHAR(20); -- numero do docto completo
BEGIN
-- verifica se codigo ja eh de pessoa fisica
IF (SELECT COUNT(*) FROM fisica WHERE cod_pessoa =
NEW.cod_pessoa) = 1 THEN
RAISE EXCEPTION 'A pessoa ja esta cadastrada como fisica';

SGCLUBE 32
END IF;
-- se o cnpj for vazio
IF NEW.cnpj IS NULL OR NEW.cnpj = '' THEN
RAISE EXCEPTION 'Eh necessario informar o cnpj';
END IF;
sNumero := trim(NEW.cnpj);
FOR i IN 1..char_length(sNumero) LOOP
IF position(substring(sNumero, i, 1) in '1234567890') = 0 THEN
RAISE EXCEPTION 'O cnpj % contem caracter
invalido',NEW.cnpj;
END IF;
END LOOP;
sNumero := '';
-- Verifica a validade do cnpj
IF (char_length(trim(NEW.cnpj)) = 14) THEN
-- primeiro digito
sNumero := substring(NEW.cnpj from 1 for 12);
iMult := 2;
iProd := 0;
FOR i IN REVERSE 12..1 LOOP
iProd := iProd + to_number(substring(sNumero from i for 1),'9')
* iMult;
IF iMult = 9 THEN
iMult := 2;
ELSE
iMult := iMult + 1;
END IF;
END LOOP;
iDigito := 11 - (iProd % 11);
IF iDigito >= 10 THEN
iDigito := 0;
END IF;
sNumero := substring(NEW.cnpj from 1 for 12) ||
trim(to_char(iDigito,'9')) || '0';
-- segundo digito
iMult := 2;
iProd := 0;
FOR i IN REVERSE 13..1 LOOP
iProd := iProd + to_number(substring(sNumero from i for 1),'9')
* iMult;
IF iMult = 9 THEN
iMult := 2;
ELSE
iMult := iMult + 1;
END IF;
END LOOP;
iDigito := 11 - (iProd % 11);
IF iDigito >= 10 THEN
iDigito := 0;

SGCLUBE 33
END IF;
sNumero := substring(sNumero from 1 for 13) ||
trim(to_char(iDigito,'9'));
END IF;
-- faz a verificacao do digito verificador calculado
IF NEW.cnpj = sNumero::bpchar THEN
RETURN NEW;
ELSE
RAISE EXCEPTION 'O cnpj % eh invalido',NEW.cnpj;
END IF;
END; $F_juridica$ LANGUAGE 'plpgsql';

CREATE TRIGGER trg_juridica


BEFORE INSERT OR UPDATE
ON juridica
FOR EACH ROW EXECUTE
PROCEDURE F_juridica();

CREATE OR REPLACE FUNCTION F_fisica_DT() RETURNS TRIGGER AS


$F_fisica_DT$
BEGIN
IF(new.dt_nascimento < '01/01/1908') then
RAISE EXCEPTION 'A data de nascimento deve ser maior que 01/01/1908';
END IF;
RETURN NEW;
END; $F_Fisica_DT$ LANGUAGE 'plpgsql';

CREATE TRIGGER trg_Fisica_DT


BEFORE INSERT OR UPDATE
ON fisica
FOR EACH ROW EXECUTE
PROCEDURE F_Fisica_DT();

CREATE OR REPLACE FUNCTION F_fisica() RETURNS TRIGGER AS $F_fisica$


DECLARE
-- Variaveis
i INT4; -- Contador
iProd INT4; -- Somatório
iMult INT4; -- Fator
iDigito INT4; -- Digito verificador calculado
sNumero VARCHAR(11); -- numero do docto completo

BEGIN
if new.cpf is null then

SGCLUBE 34
return NEW;
end if;
IF (char_length(NEW.cpf) <> 11) THEN
raise exception ''CPF Invalido.'';
end if;
-- primeiro digito
iDigito := 0;
iProd := 0;
sNumero := substring(NEW.cpf from 1 for 9);
FOR i IN 1..9 LOOP
iProd := iProd + (to_number(substring(sNumero from i for
1),''9'') * (11 - i));
END LOOP;
iDigito := 11 - (iProd % 11);
IF (iDigito) >= 10 THEN
iDigito := 0;
END IF;
sNumero := substring(NEW.cpf from 1 for 9) ||
trim(to_char(iDigito,''9'')) || ''0'';
-- segundo digito
iProd := 0;
FOR i IN 1..10 LOOP
iProd := iProd + (to_number(substring(sNumero from i for
1),''9'') * (12 - i));
END LOOP;
iDigito := 11 - (iProd % 11);
IF (iDigito) >= 10 THEN
iDigito := 0;
END IF;
sNumero := substring(sNumero from 1 for 10) ||
trim(to_char(iDigito,''9''));
-- faz a verificacao do digito verificador calculado
IF NEW.cpf = sNumero THEN
RETURN NEW;
ELSE
raise exception ''CPF Invalido.'';
END IF;
END;$F_fisica$ LANGUAGE 'plpgsql';

CREATE TRIGGER trg_fisica


BEFORE INSERT OR UPDATE ON fisica
FOR EACH ROW
EXECUTE PROCEDURE F_fisica();

CREATE OR REPLACE FUNCTION F_fornecedor() RETURNS TRIGGER AS


$F_fornecedor$
BEGIN

SGCLUBE 35
-- verifica a chave extrangeira id_pessoa (tem q ser física ou jurídica
IF (SELECT COUNT(*) FROM juridica WHERE id_pessoa = NEW.id_pessoa) = 0
AND (SELECT COUNT(*) FROM fisica WHERE id_pessoa = NEW.id_pessoa) = 0
THEN
RAISE EXCEPTION 'O codigo selecionado não é pessoa fisica/juridica';
END IF;
RETURN NEW;
END; $F_fornecedor$ LANGUAGE 'plpgsql';

CREATE TRIGGER trg_fornecedor


BEFORE INSERT ON fornecedor
FOR EACH ROW
EXECUTE PROCEDURE f_fornecedor();

CREATE OR REPLACE FUNCTION F_tipo_tel() RETURNS TRIGGER AS


$F_tipo_tel$
BEGIN
--verifica se o tipo de telefone (1-RES, 2-CEL, 3-COM, 4-FAX, 5-RECADO)
IF position(substring(NEW.tipo, 1, 1) in '12345') = 0 THEN
RAISE EXCEPTION 'O tipo % não existe',NEW.descr_tipo_tel;
END IF;
RETURN NEW;
END; $F_tipo_tel$ LANGUAGE 'plpgsql';

CREATE TRIGGER trg_tipo_tel


BEFORE INSERT OR UPDATE ON tipo_tel
FOR EACH ROW
EXECUTE PROCEDURE f_telefone();

CREATE OR REPLACE FUNCTION F_login()


RETURNS TRIGGER AS $F_login$
BEGIN
-- verifica se o login possui mínimo de 6 caracteres
IF CHAR_LENGTH(NEW.login) < 6 THEN
RAISE EXCEPTION 'O nome para login deve conter no mínimo 6 caracteres';
END IF;
-- verifica se senha possui minimo de 6 caracteres
IF CHAR_LENGTH(NEW.senha) < 6 THEN
RAISE EXCEPTION 'A senha deve conter no mínimo 6 caracteres';
END IF;
--Verifica se o id_pessoa é uma pessoa física
IF SELECT COUNT(*) FROM fisica WHERE id_pessoa = NEW.id_pessoa = 0 THEN
RAISE EXCEPTION 'O Login necessita ser uma pessoa física';
END IF;

SGCLUBE 36
RETURN NEW;
END; $F_login$ LANGUAGE 'plpgsql';

CREATE TRIGGER trg_login


BEFORE INSERT OR UPDATE
ON login
FOR EACH ROW EXECUTE PROCEDURE F_login();

CREATE OR REPLACE FUNCTION F_socio() RETURNS TRIGGER AS


$F_socio$
BEGIN
-- verifica a chave extrangeira id_pessoa é física
IF SELECT COUNT(*) FROM fisica WHERE id_pessoa = NEW.id_pessoa = 0 THEN
RAISE EXCEPTION 'O Sócio necessita ser uma pessoa física';
END IF;
--Verifica se o id_tipo está na tabela tipo_socio
IF SELECT COUNT(*) FROM tipo_socio WHERE id_tipo = NEW.id_tipo = 0 THEN
RAISE EXCEPTION 'O Sócio necessita de um tipo válido da tabela tipo_socio';
END IF;
--Verifica se o id_area consta na tabela id_area
IF SELECT COUNT(*) FROM area WHERE id_area = NEW.id_area = 0 THEN
RAISE EXCEPTION 'O Sócio necessita estar em uma área válida na tabela area';
END IF;
IF (new.dt_associcao < '01/01/1960') then
RAISE EXCEPTION 'O sócio não pode ser associado a uma data inferior a
01/01/1960')
END IF;
RETURN NEW;
END; $F_socio$ LANGUAGE 'plpgsql';

CREATE TRIGGER trg_socio


BEFORE INSERT OR UPDATE ON SOCIO
FOR EACH ROW
EXECUTE PROCEDURE F_socio();

CREATE OR REPLACE FUNCTION F_dependente_id() RETURNS TRIGGER AS


$F_dependente_id$
BEGIN
-- verifica a chave extrangeira id_pessoa está na tabela sócio
IF SELECT COUNT(*) FROM socio WHERE id_pessoa = NEW.id_pessoa = 0 THEN
RAISE EXCEPTION 'O Dependente necessita estar ligado a um sócio';
END IF;
-- Verifica se o id_grau está tem correspondecia a tabela id_grau
IF SELECT COUNT(*) FROM grau_parentesco WHERE id_grau = NEW.id_grau = 0

SGCLUBE 37
THEN
RAISE EXCEPTION 'O Dependente necessita estar ligado a tipo de grau de
parentesco com o sócio existente na tabela grau';
END IF;
RETURN NEW;
END; $F_dependente_id$ LANGUAGE 'plpgsql';

CREATE TRIGGER trg_dependente_id


BEFORE INSERT OR UPDATE ON dependente
FOR EACH ROW
EXECUTE PROCEDURE F_dependente_id();

CREATE OR REPLACE FUNCTION F_fatura() RETURNS TRIGGER AS


$F_fatura$
BEGIN
-- verifica a chave extrangeira id_pessoa está na tabela sócio
IF SELECT COUNT(*) FROM socio WHERE id_pessoa = NEW.id_pessoa = 0 THEN
RAISE EXCEPTION 'A Fatura necessita estar ligado a um sócio';
END IF;
--Verifica se a data de geração das faturas é a data atual
IF NEW.mes_ano <> CURRENT_DATE THEN
RAISE EXCEPTION 'A data de referente a mensalidade deve ser igual a data atual';
END IF;
--Verifica se a data de pagamento é maior que a data que foi gerada a mensagelidade.
IF NEW.dt_pagamento < NEW.mes_ano THEN
RAISE EXCEPTION 'A data de pagamento deve ser maior que a data que foi gerada a
fatura';
END IF;
RETURN NEW;
END; $F_fatura$ LANGUAGE 'plpgsql'

CREATE TRIGGER trg_fatura


BEFORE INSERT OR UPDATE ON fatura
FOR EACH ROW
EXECUTE PROCEDURE F_fatura();

CREATE OR REPLACE FUNCTION F_reserva() RETURNS TRIGGER AS


$F_reserva$
BEGIN
--Verifica se a data inicial e final são maiores que a data corrente
IF ( (NEW.dt_inicio < CURRENT_DATE) or (NEW.dt_final < CURRENT_DATE) )
then
RAISE EXCEPTION 'A data final e inicial deve ser maior ou igual a da corrente';
END IF;

SGCLUBE 38
--Verifica se a data inicial é menor que a data final
IF NEW.dt_inicio < dt_fim THEN
RAISE EXCEPTION 'A data final da reserva tem que ser maior que a data inicial';
END IF;
--Verifica se o id_pessoa está na tabela sócio ou cliente
IF ( (SELECT COUNT(*) FROM socio WHERE id_pessoa = NEW.id_pessoa = 0) or
(SELECT COUNT(*) FROM cliente WHERE id_pessoa = NEW.id_pessoa = 0) THEN
RAISE EXCEPTION 'A reserva deve estar ligada com o sócio ou o cliente';
END IF;
--Verifica se o Id_dependente é NULL ou se ele está na tabela Dependente
IF NEW.id_dependente IS not NULL OR NEW.cpf <> '' THEN
begin
IF (SELECT COUNT(*) FROM dependente WHERE id_dependente =
NEW.id_dependente) = 0 ) then
RAISE EXCEPTION 'A reserva com a tabela depêndente';
END IF;
END IF;
--verifica se a dependencia está na tabela depêndencia
IF (SELECT COUNT(*) FROM dependencia WHERE id_dependencia =
NEW.id_dependencia) = 0 ) then
RAISE EXCEPTION 'A reserva com a tabela dependência';
END IF;
--Verifica se não existe outra reserva marcada para o mesmo horário.
If (SELECT COUNT(*) FROM RESERVA WHERE dt_inicio <= NEW.dt_inicio AND
hr_inicio < NEW.hr_inicio AND hr_fim > NEW.hr_inicio AND
id_dependencia=NEW.id_dependencia) <> 0 = then
RAISE EXCEPTION 'Já existe uma reserva para esta dependência na data e no
horário escolhido';
END IF;
If (SELECT COUNT(*) FROM RESERVA WHERE dt_fim <= NEW.dt_inicio AND
hr_fim > NEW.hr_inicio AND id_dependencia=NEW.id_dependencia) <> 0 = then
RAISE EXCEPTION 'Já existe uma reserva para esta dependência na data e no
horário escolhido';
END IF;
If (SELECT COUNT(*) FROM RESERVA WHERE dt_inicio = NEW.dt_inicio AND
hr_inicial > NEW.hr_inicio AND hr_inicial < NEW.hr_final AND
id_dependencia=NEW.id_dependencia) <> 0 = then
RAISE EXCEPTION 'Já existe uma reserva para esta dependência na data e no
horário escolhido';
END IF;
If (SELECT COUNT(*) FROM RESERVA WHERE dt_inicio = NEW.dt_inicio AND
hr_final > NEW.hr_inicio AND hr_final < NEW.hr_final AND
id_dependencia=NEW.id_dependencia) <> 0 = then
RAISE EXCEPTION 'Já existe uma reserva para esta dependência na mesma data e
horário escolhido';
END IF;
RETURN NEW;
END; $F_reserva$ LANGUAGE 'plpgsql'

SGCLUBE 39
CREATE TRIGGER trg_reserva
BEFORE INSERT OR UPDATE ON reserva
FOR EACH ROW
EXECUTE PROCEDURE F_reserva();

CREATE OR REPLACE FUNCTION F_titulo() RETURNS TRIGGER AS


$F_titulo$
BEGIN
IF ( (NEW.valor < 0) then
RAISE EXCEPTION 'O valor do título dever ser maior que zero';
END IF;
--Verifica se existe o id_fatura
IF (NEW.id_fatura IS not NULL) OR (NEW.id_fatura <> '') or (SELECT COUNT(*)
FROM fatura WHERE id_fatura = NEW.id_fatura) = 0 THEN
RAISE EXCEPTION 'A Título necessita estar ligado a uma fatura';
END IF;
--Verifica se o id_tipo existe
IF (SELECT COUNT(*) FROM tipo_custo WHERE id_tipo = NEW.id_tipo) = 0 THEN
RAISE EXCEPTION 'A Título necessita estar ligado a um tipo de custo';
END IF;
--Verifica se a pessoa ligada ao título existe
IF (SELECT COUNT(*) FROM pessoa WHERE id_pessoa = NEW.id_pessoa) = 0
THEN
RAISE EXCEPTION 'A Título necessita estar ligado a uma pessoa';
END IF;
--Verifica se o id_reserva existe na tabela reserva
IF (NEW.id_reserva IS not NULL) OR (NEW.id_reserva <> '') or (SELECT COUNT(*)
FROM reserva WHERE id_reserva = NEW.id_reserva) = 0 THEN
RAISE EXCEPTION 'A reserva indicada para o título não existe';
END IF;
--Verifica se possui taxa e se possui se a mesma exista na tabela.
IF (NEW.id_taxa IS not NULL) OR (NEW.id_taxa <> '') or (SELECT COUNT(*)
FROM taxa WHERE id_taxa = NEW.id_taxa) = 0 THEN
RAISE EXCEPTION 'A taxa indicada para o título não existe';
END IF;
--Verifica se a data de criação do título é igual a data atual.
IF NEW.dt_criacao <> CURRENT_DATE THEN
RAISE EXCEPTION 'A data de criação do título deve ser a data atual';
END IF;
--Verifica se as datas de pagamento e de prazo são maiores que a data de criação do título
IF ( NEW.dt_prazo < dt_criacao) or (NEW.dt_pagto < dt_criacao) ) then
RAISE EXCEPTION 'A data de prazo e de pagamento devem ser maiores que a
data de criação do título';
END IF;
RETURN NEW;
END;
$F_titulo$ LANGUAGE 'plpgsql'

SGCLUBE 40
CREATE TRIGGER trg_reserva
BEFORE INSERT OR UPDATE ON titulo
FOR EACH ROW
EXECUTE PROCEDURE F_titulo();

CREATE OR REPLACE FUNCTION F_titulo() RETURNS TRIGGER AS


$F_associacao$
BEGIN
--Verifica se o id_pessoa é um socio
IF (SELECT COUNT(*) FROM socio WHERE id_pessoa = NEW.id_pessoa) = 0
THEN
RAISE EXCEPTION 'A associação necessita estar ligado a um Sócio';
END IF;
RETURN NEW;
END;
$F_associacao$ LANGUAGE 'plpgsql'

CREATE TRIGGER trg_associacao


BEFORE INSERT OR UPDATE ON associacao
FOR EACH ROW
EXECUTE PROCEDURE F_associacao();

CREATE OR REPLACE FUNCTION F_cidade() RETURNS TRIGGER AS


$F_cidade$
BEGIN
--Verifica se a id_cidade está na tabela cidade
IF (SELECT COUNT(*) FROM cidade WHERE id_cidade = NEW.id_cidade) = 0
THEN
RAISE EXCEPTION 'A Pessoa necessita estar ligado a uma cidade existente na
tabela cidade';
END IF;
RETURN NEW;
END;
$F_cidade$ LANGUAGE 'plpgsql'

CREATE TRIGGER trg_cidade


BEFORE INSERT OR UPDATE ON pessoa
FOR EACH ROW
EXECUTE PROCEDURE F_cidade();

CREATE OR REPLACE FUNCTION F_estado() RETURNS TRIGGER AS

SGCLUBE 41
$F_estado$
BEGIN
--Verifica se a id_cidade está na tabela cidade
IF (SELECT COUNT(*) FROM estado WHERE uf = NEW.uf) = 0 THEN
RAISE EXCEPTION 'A Cidade necessita estar ligado a um estado válida da tabela
estado';
END IF;
RETURN NEW;
END;
$F_estado$ LANGUAGE 'plpgsql'

CREATE TRIGGER trg_estado


BEFORE INSERT OR UPDATE ON cidade
FOR EACH ROW
EXECUTE PROCEDURE F_estado();

CREATE OR REPLACE FUNCTION F_natureza() RETURNS TRIGGER AS


$F_natureza$
BEGIN
--Verifica se o id_natureza possui um correspondente na tabela natureza
IF (SELECT COUNT(*) FROM natureza WHERE id_natureza = NEW.id_natureza) =
0 THEN
RAISE EXCEPTION 'O tipo de custo deve estar associado a uma natureza de
custo contida na tabala natureza';
END IF;
RETURN NEW;
END;
$F_natureza$ LANGUAGE 'plpgsql

CREATE TRIGGER trg_natureza


BEFORE INSERT OR UPDATE ON tipo_custo
FOR EACH ROW
EXECUTE PROCEDURE F_natureza();

CREATE OR REPLACE FUNCTION F_pat_id() RETURNS TRIGGER AS


$F_pat_id$
BEGIN
--Verifica se o id_nat_pat possui um correspondente na tabela natureza_pat
IF (SELECT COUNT(*) FROM NATUREZA_PAT WHERE id_nat_pat =
NEW.id_nat_pat) = 0 THEN
RAISE EXCEPTION 'O patrimônio deve estar associado a uma natureza de
patrimônio contida na tabala natureza_pat';
END IF;
IF (NEW.id_baixa IS not NULL) OR (NEW.id_baixa <> '') or (SELECT COUNT(*)

SGCLUBE 42
FROM baixa_pat WHERE id_baixa = NEW.id_baixa) = 0 THEN
RAISE EXCEPTION 'Para dar baixa em um patrimônio deve estar associado a
uma tipo de baixa de patrimônio contida na tabala baixa_pat';
END IF;
IF (NEW.dt_ultima_cotacao IS not NULL) OR (NEW.dt_ultima_cotacao <> '') or
(dt_compra < NEW.dt_ultima_cotacao) then
RAISE EXCEPTION 'A data de ultima cotação deve ser maior que a data de
compra';
END IF;
IF (NEW.ultima_cotacao IS not NULL) OR (NEW.ultima_cotacao <> '') or (0 <
NEW.ultima_cotacao) then
RAISE EXCEPTION 'o valor de ultima cotação deve ser maior que zero';
END IF;
IF (NEW.preco_compra IS not NULL) OR (NEW.preco_compra <> '') or (0 <
NEW.preco_compra) then
RAISE EXCEPTION 'o valor do preço de compra deve ser maior que zero';
END IF;
IF (NEW.quantidade IS not NULL) OR (NEW.quantidade <> '') or (0 <
NEW.quantidade) then
RAISE EXCEPTION 'A quantidade do patrimônio deve ser maior que zero';
END IF;

RETURN NEW;
END;
$F_pat_id$ LANGUAGE 'plpgsql

CREATE TRIGGER trg_pat_id


BEFORE INSERT OR UPDATE ON tipo_custo
FOR EACH ROW
EXECUTE PROCEDURE F_pat_id();

CREATE OR REPLACE FUNCTION F_baixa_pat() RETURNS TRIGGER AS


$F_baixa_pat$
BEGIN
--Verifica se o id_motivo possui um correspondente na tabela motivo_baixa
IF (SELECT COUNT(*) FROM motivo_baixa WHERE id_motivo = NEW.id_motivo)
= 0 THEN
RAISE EXCEPTION 'A baixa de patrimônio deve estar associado a um motivo de
baixa contida na tabala motivo_baixa';
END IF;
IF ( (select dt_compra from patrimonio where id_pat=NEW.id_pat) > NEW.dt_baixa) )
THEN
RAISE EXCEPTION 'A data da baixa do patrimônio deve ser maior que a data de
compra';
END IF;
RETURN NEW;
END;

SGCLUBE 43
$F_baixa_pat$ LANGUAGE 'plpgsql

CREATE TRIGGER trg_baixa_pat


BEFORE INSERT OR UPDATE ON baixa_pat
FOR EACH ROW
EXECUTE PROCEDURE F_baixa_pat();

SGCLUBE 44
7. PLANO DE TESTES

1. Manter Reservas
1.1 Fazer Reservas
1.2 Aprovar Reservas
1.3 Consulta Reservas

2. Manter Sócios
2.1 Cadastrar sócios
2.2 Gerar mensalidades
2.3 Consultar sócios
2.4 Gerar Carteirinha

3. Manter Patrimônios
3.1 Cadastrar ou alterar patrimônios
3.2 Consultar patrimônios
3.3 Dar baixa em patrimônios
3.4 Gerar Relatórios

4. Manter Caixa
4.1 Cadastrar pagamento
4.2 Cadastrar recebimento
4.3 Gerar relatório

1. Manter Reservas

1.1. Fazer Reservas

Teste 1: Cadastro de reserva corretamente

Entrada 1: preencher todos os dados corretamente


Saída 1: Reserva cadastrada com sucesso

Teste 2: Cadastro de reserva inválida

Entrada 2.1: Data solicitada já tem reserva naquela dependência


Saída 2.1: Mensagem: “Indisponível para essa data”.

SGCLUBE 45
Entrada 2.2: Quantidade de pessoas maior que a capacidade da dependência
Saída 2.2: Mensagem: “Quantidade de pessoas não suportada”.

Entrada 2.3: Data de início menor que a data atual.


Saída 2.3: mensagem de erro: “Data da reserva menor que a data atual”.

Entrada 2.4: Data final menor que data inicial


Saída 2.4: mensagem de erro: “Data final menor que a data inicial”.

Entrada 2.5: Hora final menor que hora inicial (no mesmo dia).
Saída 2.5: mensagem de erro: “Hora inicial menor que hora final”.

Entrada 2.6: Falta o solicitante da reserva


Saída 2.6: mensagem de erro: “Informe o solicitante da reserva”.

Entrada 2.7: Falta indicar a dependência que está reservando.


Saída 2.7: mensagem de erro: “informe a dependência solicitada”

1.2. Aprovar Reservas

Teste 1: Aprova reservas corretamente

Entrada 1: Seleciona uma reserva que já foi paga


Saída 1: Mensagem: “Reserva aprovada com sucesso!”.

Teste 2: Tenta aprovar reservas ainda não pagas

Entrada 2.1: Clica em aprovar a reserva mas o titulo da reserva ainda não foi pago
Saída 2.1: mensagem de erro: “Reserva ainda não foi paga!!”.

1.3. Consultar Reservas

Teste 1: Consulta realizada com sucesso

Entrada 1: Fornece os dados da reserva corretamente


Saída 1: Lista de reservas que satisfazem a consulta

Teste 2: Cadastro de reserva não encontrada

Entrada 2.1: Fornece dados insuficientes ou incorretos para procura da reserva


Saída 2.1: mensagem de erro: “Reserva não encontrada”.

2. Manter Sócios

2.1 Cadastrar Associado

SGCLUBE 46
Teste 1: Cadastro de associado corretamente

Entrada 1: preencher todos os dados solicitados corretamente


Saída 1: Associado Cadastrado com Sucesso!

Teste 2: Cadastro de associado incorreto

Entrada 2.1: Não preencheu o nome do sócio


Saída 2.1: Mensagem de erro: “Favor Preencher Nome”.

Entrada 2.2: Não preencheu endereço


Saída 2.2: Mensagem de erro: “Favor Preencher Endereço”.

Entrada 2.3: Não preencheu bairro.


Saída 2.3: Mensagem de erro: “Favor Preencher Bairro”.

Entrada 2.4: Não preencheu estado


Saída 2.4: Mensagem de erro: “Favor Preencher Estado”.

Entrada 2.5: Não preencheu cidade


Saída 2.5: Mensagem de erro: “Favor Preencher Cidade”.

Entrada 2.6: Não preencheu data de associação


Saída 2.6: Mensagem de erro: “Favor Preencher Data da Associação”.

Entrada 2.7: Não preencheu o tipo de sócio.


Saída 2.7: Mensagem de erro: “Favor Preencher Tipo de Sócio”.

Entrada 2.8: Não preencheu data de nascimento


Saída 2.8: Mensagem de erro: “Favor Preencher Data da Nascimento”.

Entrada 2.9: Digitou CPF Inválido.


Saída 2.9: Mensagem de erro: “Favor Preencher CPF Corretamente”.

2.2 Gerar Mensalidades

Teste 1: Gera mensalidades corretamente

Entrada 1: Seleciona um associado que ainda não tenha gerado a mensalidade do mês
Saída 1: Mensagem: “Mensalidade gerada com sucesso!”.

Teste 2: Tenta gerar mensalidade e não consegue

Entrada 2.1: Seleciona um associado que já teve a mensalidade gerada


Saída 2.1: mensagem de erro: “Associado já tem mensalidade gerada neste mês!!”.

2.3 Consultar Sócios

SGCLUBE 47
Teste 1: Consulta sócio corretamente

Entrada 1: Insere o nome de um associado existente


Saída 1: Associados que contém os caracteres digitados no nome

Teste 2: Consulta sócio erroneamente

Entrada 2.1: Digita algarismos ou seqüência de caracteres que não está no nome de
nenhum associado
Saída 2.1: Não aparece nenhum associado com o nome digitado.

2.4 Gerar Carteirinha

Teste 1: Informa número de sócio existente e gera carteirinha

Entrada 1: Insere o(s) número(s) ou nome(s) de sócio(s) existente(s)


Saída 1: Relatório para impressão com o formato da(s) carteirinha(s) solicitada(s).

Teste 2: Tenta gerar carteirinha de sócio não existente.

Entrada 2.1: Digita algarismos ou seqüência de caracteres que não está no nome ou
número de nenhum associado.
Saída 2.1: Não aparece nenhum associado e não habilita o botão de “Gerar Carteirinha(s)”.

3 Manter Patrimônios

3.1 Cadastrar ou alterar patrimônios

Teste 1: Cadastra patrimônio corretamente

Entrada 1:Insere os dados do patrimônio corretamente


Saída 1: Mensagem : “Patrimônio cadastrado com sucesso”.

Teste 2: Altera patrimônio corretamente.

Entrada 2.1: Modifica os dados do patrimônio e mantém no padrão de cadastro.


Saída 2.1: Mensagem: “Patrimônio Alterado com sucesso”.

Teste 3: Cadastra patrimônio erroneamente.

Entrada 3.1: Não preenche a descrição resumida do patrimônio.


Saída 3.1: Mensagem de erro: “Favor preencher o campo Descrição Resumida”.

Entrada 3.2: Não escolhe uma dependência para vincular o patrimônio.


Saída 3.2: Mensagem de erro: “Favor vincular a uma dependência”

Entrada 3.3: Não preenche a quantidade do patrimônio no clube.


Saída 3.3: Mensagem de erro: “Favor preencher o campo Quantidade”.

SGCLUBE 48
3.2 Consultar Patrimônios

Teste 1: Consulta patrimônio corretamente

Entrada 1:Insere o número de patrimônio existente


Saída 1: Demonstração dos dados do patrimônio.

Entrada 1.2: Insere caracteres que filtrem patrimônio existente.


Saída 1.2: Demonstração dos patrimônios que satisfazem a consulta”.

Teste 2: Consulta patrimônio erroneamente.

Entrada 2.1: Insere número de patrimônio inexistente.


Saída 2.1: Mensagem de erro: “Patrimônio Inexistente, verifique o número digitado”.

Entrada 2.2: Insere caracteres que não são encontrados na descrição de nenhum
patrimônio.
Saída 2.2: Mensagem de erro: “Patrimônio Inexistente, verifique os caracteres digitados”

3.3 Dar baixa em Patrimônio

Teste 1: Dá baixa em patrimônio corretamente

Entrada 1:Insere os dados da baixa corretamente


Saída 1: Mensagem : “Patrimônio Baixado corretamente”.

Teste 2: Tenta dar baixa em patrimônios faltando dados

Entrada 2.1: Escolhe um número de patrimônio já baixado.


Saída 2.1: Mensagem de erro: “Patrimônio já baixado”.

Entrada 2.2: Não insere a data da baixa.


Saída 2.2: Mensagem de erro: “Favor preencher a data da baixa”

Entrada 2.3: Não escolhe o motivo da baixa.


Saída 2.3: Mensagem de erro: “Favor escolher o motivo da baixa”

Entrada 2.4: Não descreve o motivo detalhado da baixa


Saída 2.4: Mensagem de erro: “Favor descrever o motivo detalhado da baixa”

3.4 Gerar relatórios dos patrimônios

Teste 1: Gera relatório corretamente

Entrada 1:Insere os dados do relatório corretamente


Saída 1: Relatório pronto para ser impresso

Teste 2: Não fornece os parâmetros necessários para a geração do relatório

SGCLUBE 49
Entrada 2.1: Não escolhe dentre os filtros possíveis, o que quer no relatório.
Saída 2.1: Mensagem de erro: “Escolha um filtro de pesquisa”.

Entrada 2.2: Insere datas improváveis.


Saída 2.2: Mensagem de erro: “Favor preencher a data corretamente”

Entrada 2.3: Escolhe critérios que não possuem patrimônios que satisfaçam a busca.
Saída 2.3: Mensagem: “Não foram encontrados patrimônios que satisfazem os critérios”

4 Manter Caixa

4.1 Cadastrar pagamento

Teste 1: Cadastra pagamento corretamente

Entrada 1:Insere os dados do pagamento corretamente


Saída 1: Mensagem: “Pagamento cadastrado com sucesso”.

Teste 2: Não fornece os dados necessários para cadastrar o pagamento.

Entrada 2.1: Não fornece a data de prazo do pagamento.


Saída 2.1: Mensagem de erro: “Forneça a data de prazo do pagamento”

Entrada 2.2: Não fornece o valor do pagamento.


Saída 2.2: Mensagem de erro: “Favor preencher o valor do pagamento”

Entrada 2.3: Não fornece o tipo de custo do pagamento.


Saída 2.3: Mensagem de erro: “Favor escolher o tipo de custo”

Entrada 2.4: Não fornece a descrição do pagamento.


Saída 2.4: Mensagem de erro: “Forneça a descrição do pagamento”

4.2 Cadastrar recebimento

Teste 1: Cadastra recebimento corretamente

Entrada 1:Insere os dados do recebimento corretamente


Saída 1: Mensagem: “Recebimento cadastrado com sucesso”.

Teste 2: Não fornece os dados necessários para cadastrar o recebimento.

Entrada 2.1: Não fornece a data de prazo do recebimento.


Saída 2.1: Mensagem de erro: “Forneça a data de prazo do recebimento”

Entrada 2.2: Não fornece o valor do recebimento.


Saída 2.2: Mensagem de erro: “Favor preencher o valor do recebimento”

SGCLUBE 50
Entrada 2.3: Não fornece o tipo de custo do recebimento.
Saída 2.3: Mensagem de erro: “Favor escolher o tipo de custo”

Entrada 2.4: Não fornece a descrição do recebimento.


Saída 2.4: Mensagem de erro: “Forneça a descrição do recebimento”

4.3 Gerar relatório

Teste 1: Gera relatório corretamente

Entrada 1:Insere os dados do relatório corretamente


Saída 1: Relatório pronto para ser impresso

Teste 2: Não fornece os parâmetros necessários para a geração do relatório

Entrada 2.1: Não escolhe dentre os filtros possíveis, o que se quer no relatório.
Saída 2.1: Mensagem de erro: “Escolha um filtro de pesquisa”.

Entrada 2.2: Insere datas improváveis.


Saída 2.2: Mensagem de erro: “Favor preencher a data corretamente”

Entrada 2.3: Escolhe critérios que não possuem pagamentos ou recebimentos que
satisfaçam a busca.
Saída 2.3: Mensagem: “Não foram encontrados pagamentos que satisfazem os critérios”

SGCLUBE 51
8. PROTÓTIPO DE INTERFACE

Figura 09 – Tela de Boas vindas e Login

Figura 10 – Tela Principal do Sistema

SGCLUBE 52
Figura 11 – Tela de Cadastro de Sócio

Figura 12 – Tela de Cadastro de sócio 2

SGCLUBE 53
Figura 13 – Tela de Reserva 1

Figura 14 – Tela de Reserva 2

SGCLUBE 54
Figura 15 – Tela de cadastro de pagamentos e recebimentos

Figura 16 – Tela de cadastro de Cidade e Estado

SGCLUBE 55
Figura 17 – Tela de Cadastro de Patrimônios

Figura 18 – Tela de Cadastro de Dependência

SGCLUBE 56
Figura 19 – Tela de Cadastro de Natureza dos Patrimônios

Figura 20 – Tela demonstrativa de sócios

SGCLUBE 57
Figura 21- Tela de cadastro de dependentes

Figura 22 – Tela de Cadastro de Áreas

SGCLUBE 58
9. CRONOGRAMA

Figura 23– Cronograma

SGCLUBE 59
10. CONCLUSÃO
Após a finalização da modelagem do banco de dados e a esquematização do fluxo de dados,
constatamos que o sistema esta de acordo com todos os requisitos necessários e/ou solicitados
pelo cliente.

A partir deste diagnostico atual, o projeto mostra que será de grande valia para a empresa a
qual se destina. Estimamos que os custos de implantação do sistema serão mínimos, pois já
possuem a estrutura necessária para operação. Vemos também que os benefícios desse sistema
para a empresa, serão mostrados no maior controle e gerenciamento, minimização dos
problemas de cadastros e, principalmente, com o acompanhamento sistematizado separado da
entidade Copel.

Observamos também que na demonstração e operação do sistema pelo usuário, o mesmo


aprendeu rapidamente os comando e as funcionalidades, enaltecendo a facilidade em se operar
o software.

SGCLUBE 60
11. REFERÊNCIAS
PRESSMAN, Roger S. Engenharia de Software. São Paulo: Makron Books, 1997.

REZENDE, Denis Alcides. Engenharia de Software e S.I.. 1ª ed., Rio de Janeiro, Brasport,
1999.

Projetos 2006 UEPG. Disponível em: http://pacheco.w3.inf.br acessado em 01/04/2008.

Sistema Bluware – Elite Clube. Disponível em www.bluware.com.br/apresenta acessado em


01/03/2008.

SGCLUBE 61
12. RESPONSABILIDADES

Fabricio Henrique Tabarro Geovani de Oliveira Fanine


(Desenvolvedor) (Desenvolvedor)

Ariangelo Hauer Dias


(Orientador)

Almir Nezgoda
(Cliente)

Data do projeto:

Ponta Grossa, 05 de Dezembro de 2008

SGCLUBE 62

You might also like