Professional Documents
Culture Documents
PROJETO
SGCLUBE
Novembro/2008
SUMÁRIO
2. OBJETIVO DO PROJETO................................................................................... 2
3. ESCOPO .................................................................................................................. 2
9. CRONOGRAMA .................................................................................................. 59
10. CONCLUSÃO................................................................................................... 60
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.
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.
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.
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:
http://dia-
4 DIA 0.96 Free
installer.de/index_en.html
Total R$ 11.055,60
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.
installer.de/index_en.html.
Hardware:
SGCLUBE 4
Item Aplicativo Valor Fonte da informação
Impressora Multifuncional HP
9 R$ 311,95 www.balaodainformatica.com.br
OfficeJet j3680
Computador Clube HP
11 R$ 1.999,00 www.submarino.com.br
Pavillon S6330BR
Total R$ 6.429,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.
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.
4.3 RISCOS
SGCLUBE 6
4.4 DESCRIÇÃO DA MODELAGEM PRELIMINAR
Nas figuras a seguir serão representados os processos mostrando o que o sistema faz:
SGCLUBE 7
Figura 02 – Diagrama de Fluxo de Dados – Nível 1
SGCLUBE 8
Figura 04 – Diagrama de Fluxo de Dados – Nível 2 – Sócios
SGCLUBE 9
Figura 06 – Diagrama de Fluxo de Dados – Nível 2 – Caixa
SGCLUBE 10
4.4.2 Diagrama Entidade Relacionamento
SGCLUBE 11
4.4.3 IDEF1X
SGCLUBE 12
5. DICIONÁRIO DE DADOS
SGCLUBE 13
Tabela 9 – Dicionário de dados da tabela dependencia
SGCLUBE 14
Tabela 13 – Dicionário de dados da tabela fisica
SGCLUBE 15
Tabela 18 – Dicionário de dados da tabela natureza_contabil
SGCLUBE 16
Tabela 22 – Dicionário de dados da tabela reserva
SGCLUBE 17
Tabela 26 – Dicionário de dados da tabela taxas_socio
SGCLUBE 18
Tabela 31 – Dicionário de dados da tabela título
SGCLUBE 19
6. SCRIPT DO BANCO
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
);
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
);
SGCLUBE 22
ultima_cotacao REAL NULL,
dt_ultima_cotacao DATE NULL
);
SGCLUBE 23
id_taxa INTEGER NOT NULL,
id_tipo_socio INTEGER NOT NULL
);
SGCLUBE 24
senha VARCHAR2(20) NULL
);
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) ) ;
SGCLUBE 26
ALTER TABLE dependente
ADD ( FOREIGN KEY (id_grau)
REFERENCES grau_parentesco ) ;
SGCLUBE 27
ALTER TABLE patrimonio
ADD ( FOREIGN KEY (id_nat_pat)
REFERENCES natureza_pat ) ;
SGCLUBE 28
ALTER TABLE taxas_dep
ADD ( FOREIGN KEY (id_dependencia)
REFERENCES dependencia ) ;
SGCLUBE 29
ON DELETE SET NULL ) ;
SGCLUBE 30
ON UPDATE CASCADE;
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');
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';
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';
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';
SGCLUBE 36
RETURN NEW;
END; $F_login$ LANGUAGE 'plpgsql';
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';
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();
SGCLUBE 40
CREATE TRIGGER trg_reserva
BEFORE INSERT OR UPDATE ON titulo
FOR EACH ROW
EXECUTE PROCEDURE F_titulo();
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'
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
SGCLUBE 43
$F_baixa_pat$ LANGUAGE 'plpgsql
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
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.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.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!!”.
2. Manter Sócios
SGCLUBE 46
Teste 1: Cadastro de associado 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!”.
SGCLUBE 47
Teste 1: Consulta sócio corretamente
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.
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
SGCLUBE 48
3.2 Consultar Patrimônios
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”
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.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
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.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.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
SGCLUBE 52
Figura 11 – Tela de Cadastro de Sócio
SGCLUBE 53
Figura 13 – Tela de Reserva 1
SGCLUBE 54
Figura 15 – Tela de cadastro de pagamentos e recebimentos
SGCLUBE 55
Figura 17 – Tela de Cadastro de Patrimônios
SGCLUBE 56
Figura 19 – Tela de Cadastro de Natureza dos Patrimônios
SGCLUBE 57
Figura 21- Tela de cadastro de dependentes
SGCLUBE 58
9. 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.
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.
SGCLUBE 61
12. RESPONSABILIDADES
Almir Nezgoda
(Cliente)
Data do projeto:
SGCLUBE 62