Escolar Documentos
Profissional Documentos
Cultura Documentos
DEPARTAMEMENTO DE INFORMTICA E
ESTATTISTICA
BACHARELADO EM SISTEMAS DE INFORMAO
DESENVOLVIMENTO DE UM SOFTWARE DE
GERENCIAMENTO DE CAMPEONATOS DE FUTEBOL
Fernando Peron
Trabalho de concluso de curso apresentado
como parte dos requisitos para obteno do
grau de Bacharel em Sistemas de Informao
Florianpolis - SC
2005/1
Fernando Peron
DESENVOLVIMENTO DE UM SOFTWARE DE
GERENCIAMENTO DE CAMPEONATOS DE FUTEBOL
_______________________________________________
Orientador: Prof. Fernando Augusto da Silva Cruz, Dr.
Banca Examinadora:
_______________________________________
Prof. Ricardo Pereira e Silva, Dr.
_______________________________________
Prof. Rosvelter Coelho da Costa, Dr.
Sumrio
SUMRIO .......................................................................................................... 3
LISTA DE FIGURAS.......................................................................................... 6
RESUMO ........................................................................................................... 8
1 INTRODUO ............................................................................................... 9
1.1
Objetivos .................................................................................................................................9
1.2
Motivao................................................................................................................................9
1.3
1.4
Organizao do Trabalho..................................................................................................... 11
2.2
Pontuao.............................................................................................................................. 13
2.3
2.4
2.5
3.2
3.3
4 FUNDAMENTOS TERICOS...................................................................... 26
4.1
Fundamentos Tericos.......................................................................................................... 26
4.2
UML...................................................................................................................................... 27
4.3
4.3.1
4.3.2
A Fase Construir................................................................................................................... 28
4.3.3
4.3.4
Fase Projetar......................................................................................................................... 31
4.3.5
Fase Testar............................................................................................................................ 31
4.3.6
5 PROPOSTA DO TRABALHO...................................................................... 33
5.1
5.2
5.3
5.3.1
Manuteno de Campeonatos............................................................................................... 36
5.3.2
Manuteno de Equipes........................................................................................................ 38
5.3.3
5.3.4
Administrao de Temporadas............................................................................................. 41
5.3.4.1
Manuteno de Temporadas............................................................................................ 43
5.3.4.2
Equipes Participantes....................................................................................................... 46
5.3.4.3
Manuteno de Jogadores................................................................................................ 47
5.3.4.4
5.3.4.5
5.3.4.6
Punies............................................................................................................................ 56
5.3.4.7
5.3.4.7.1
5.3.4.7.2
5.3.4.7.3
5.4
5.5
6.2
Os Cadastros......................................................................................................................... 76
6.2.1
6.2.2
6.2.3
6.2.4
6.3
6.3.1
6.3.2
Cadastro de rbitro.............................................................................................................. 81
6.3.3
6.3.4
Cadastro de Jogador............................................................................................................. 83
6.3.5
6.4
6.4.1
Manuteno de Jogos............................................................................................................ 86
6.4.2
6.4.3
6.5
As Estatsticas ....................................................................................................................... 91
6.5.1
Tabela de Classificao......................................................................................................... 92
6.5.2
Lista de Figuras
Figura 3.1. LeguePad: Tela de Abertura....................................................................
16
17
18
19
20
21
22
23
24
25
34
35
36
38
40
43
44
46
48
50
53
57
59
60
60
63
65
68
70
72
73
75
77
78
79
80
81
82
83
84
85
86
87
88
88
89
90
91
92
93
Resumo
O presente trabalho apresenta o desenvolvimento de um sistema de informao
para campeonatos de futebol.
O trabalho contextualiza o leitor para o entendimento do problema e mostra,
resumidamente, uma abordagem para o desenvolvimento de software orientado a
objetos.
Sua finalidade a da aplicao prtica dos conhecimentos adquiridos ao longo
do curso de Sistemas de Informao, alm de disponibilizar uma ferramenta com
qualidade que supri algumas deficincias dos sistemas similares no mercado.
Palavras-Chaves:
Sistemas
de
Informao,
Desenvolvimento
de
Software,
Captulo 1
Introduo
Neste captulo sero destacados o tema e a motivao para o desenvolvimento
deste projeto, contextualizando-o apresentando seus objetivos gerais e especficos, alm
da forma como o trabalho ser apresentado.
1.1 Objetivos
1.1.1
Objetivo Geral
O objetivo o desenvolvimento de um programa de computadores exercitando
1.1.2
Objetivo Especfico
Como objetivo especfico, o trabalho tem por finalidade por em prtica os
1.2 Motivao
10
11
Captulo 2
Organizao dos Campeonatos de Futebol e
Regras
Introduo
O futebol conhecido como um esporte com regras conservadoras, ou seja, de
poucas mudanas ao longo do tempo. Ao mesmo tempo, para tornar o futebol mais
atraente para o pblico, as frmulas de disputa dos campeonatos de futebol so bastante
diversificadas. O objetivo deste captulo apresentar as principais variaes das
formulas de disputa dos campeonatos, alm de eventuais variaes das aplicaes da
regra do esporte. Por fim, tambm so apresentados os pontos fundamentais de
organizao do campeonato, como a Smula do Jogo e a influncia do Tribunal
Desportivo. Todos os pontos abordados neste captulo devero se concretizar em
solues flexveis dentro do software desenvolvido.
12
2.2 Pontuao
Este outro importante item que pode variar de campeonato para campeonato e
at mesmo, sofrer alteraes ao longo do tempo. Basta citar que at 1994, a equipe
vencedora dos jogos ganhava dois pontos pelo feito.
As regras de pontuao adotadas pela FIFA, organizao que dirige o futebol no
mundo estabelece as seguintes pontuaes: trs pontos ao time vencedor ou, em caso de
empate, um ponto para cada time.
Esta pontuao adota pela maioria dos campeonatos de futebol do mundo.
Porm, at pouco tempo atrs, as regras de pontuao eram diferentes. At a Copa do
Mundo de 1994, a FIFA estabelecia as seguintes pontuaes: dois pontos ao time
vencedor ou, em caso de empate, um ponto para cada time.
Existem ainda algumas variaes adotadas por alguns campeonatos, por
exemplo, o campeonato do EUA, os jogos que acabam empatados, existe uma disputa
de Shut-Out, uma espcie de disputa de pnaltis. Este tipo de regra j foi adotado
recentemente no Campeonato Brasileiro. A regra de pontuao deste tipo de
campeonato a seguinte: trs pontos ao time vencedor ou em caso de empate no tempo
normal de jogo, dois pontos ao time vencedor na prorrogao ou nos pnaltis e um
ponto para o time perdedor na prorrogao e nos pnaltis.
13
alcanadas pelas equipes no campeonato. ela que determina a posio de cada equipe
no campeonato.
A tabela de classificao de um campeonato tambm contempla outras
informaes. Estas informaes, em geral, so os critrios de desempates. Os critrios
de desempate, em geral, so os mesmos em todos os campeonatos. O que muda a
ordem de importncia. Em todos os campeonatos, o primeiro critrio o nmero de
pontos ganhos. O segundo critrio, para o caso de empate o nmero de vitrias para
alguns campeonatos, enquanto que em outros campeonatos, o segundo critrio o saldo
de gols. Tambm so utilizados como critrios de desempate o nmero de gols
marcados.
14
Concluso
A ferramenta proposta neste trabalho deve ter grande flexibilidade para aceitar
que as diferentes competies de futebol possam ser controladas. aceitvel que em
virtude desta flexibilidade, o sistema possa perder qualidade em legibilidade e
usabilidade.
O software tambm tem por objetivo gerar uma grande quantidade de estatstica
do campeonato, das equipes e dos jogadores. Fica evidenciado desta forma, que no
pode simplesmente fazer uma cpia eletrnica da Smula. necessrio obter outras
informaes da partida para gerar tais estatsticas.
15
Captulo 3
Estado da Arte
Introduo
Este captulo apresenta trs ferramentas disponveis na Internet para download
que tem objetivos semelhantes aplicao objeto deste trabalho. O captulo apresenta os
pontos positivos e negativos de cada uma das ferramentas. O aproveitamento das boas
solues e a precauo com as franquezas das ferramentas existentes colaboraram para
o desenvolvimento de um software completo e eficiente. Tambm ter a finalidade de
estabelecer um parmetro de qualificao do resultado deste trabalho.
16
17
18
50,00 e
90,00,
19
20
21
22
23
24
Concluso
Existem ferramentas disponveis no mercado com a finalidade de gerenciar
campeonatos de futebol. Embora algumas delas possuam boas qualidades, no foi
identificada nenhuma ferramenta completa. Os valores para aquisio deste programas
tambm no so baratos. Um software bom deve ter a capacidade de se adaptar as
diferentes frmulas de disputa dos campeonatos. Tambm deve ser capaz de administrar
todas as informaes inerentes a realizao de um jogo, mas deixando a critrio do
usurio fazer uso destas informaes ou no. Gerar boa qualidade de estatsticas
preferencialmente no tratando cada campeonato ou equipe de forma individualizada. E
por fim, ter um custo mais acessvel ao mercado nacional.
25
Captulo 4
Fundamentos Tericos
Introduo
Neste captulo apresentada a fundamentao terica que se utilizar para o
desenvolvimento do programa de Controle de Campeonatos. So descritos os conceitos
e uma seqncia de atividades que resultaro em um sistema orientado a objetos bem
projetado.
26
4.2 UML
Unified Modeling Leaguage Linguagem de Modelagem Unificada ou
somente UML uma linguagem visual para modelar sistemas computacionais
orientados a objetos. Possui um sistema de notao incluindo semntica para suas
notaes dirigida a modelagem de sistemas, usando conceitos orientados a objeto. A
UML uma linguagem para especificar, visualizar e construir os artefatos de sistema de
software.
UML tem o poder de transformar idias em modelos reais. uma linguagem
destina estruturao de projetos. Um dos principais objetivos da UML tornar todo o
processo de desenvolvimento totalmente transparente e organizado [SOA 01].
A UML uma notao grfica usada para expressar a anlise e criao de
projetos de software e para comunic-los a outros. A UML independente de
linguagem, mas destina-se a descrever projetos orientados a linguagem. Como
enfatizam os criadores da UML, ela no uma metodologia em si; pode ser usada como
ferramenta descritiva independente de qual seu processo de projeto [CAN 00].
Para Craig Larman, ...os autores da UML Booch, Jocobson e Rumbaugh prestaram
um grande servio comunidade da tecnologia orientada a objetos ao criar uma
linguagem de modelagem padronizada que elegante, expressiva e flexvel. e
prossegue ... UML recebeu a aprovao de facto pela indstria, uma vez que seus
criadores representam mtodos de anlise e / ou projeto de primeira gerao muito
populares..
Porm, Craig Larman adverte que UML uma linguagem para modelagem; ela
no guia um desenvolvedor em como fazer anlise e projeto orientados a objetos, ou
qual processo de desenvolvimento a ser seguido. Conseqentemente, os metodologistas
continuaro a definir mtodos, modelagem e processos de desenvolvimento para a
criao efetiva de sistemas de software; no entanto, agora, podem faz-lo, usando uma
linguagem comum UML.
27
28
30
31
Concluso
Possuir conhecimentos avanados de uma linguagem de programao orientada
a objetos ou mesmo de UML no garante a produo de bom programa de computador.
So apenas requisitos. Para o desenvolvimento de grandes projetos com sucesso,
necessrio uma metodologia de desenvolvimento de software. A metodologia prope
um processo de desenvolvimento de software iterativo, incremental e guiado por casos
de usos. Este estabelece ciclos de desenvolvimentos dentro de janelas de tempo de
forma a organizar o projeto. Por ser uma metodologia criada para ajudar estudantes e
desenvolvedores a criar melhores projetos orientados a objetos, ser a metodologia
seguida no desenvolvimento deste trabalho.
32
Captulo 5
Proposta do Trabalho
Introduo
Nos captulos 2 foram apresentadas informaes do domnio do problema acerca
do funcionamento de um campeonato de futebol. No captulo 3, foram apresentados trs
softwares que so soluo para administrar a complexidade dos campeonatos de futebol.
Este captulo tem por funo apresentar o que se deseja construir neste software para
gerenciar os campeonato, aproveitando-se dos conhecimentos obtidos no captulo 2 e 3.
Alm disso, neste captulo tambm descrito os resultados obtidos das fases de anlise
e planejamento do sistema, para no prximo capitulo demonstrar o resultado final.
33
34
35
Selecionar um Campeonato
36
Procedimentos:
1. O sistema exibe a lista de Campeonatos Cadastrados.
2. O Usurio seleciona o Campeonato desejado e escolhe a opo de manuteno
(Alterar Dados ou Excluir Campeonato).
Alternativas:
1. No existem Campeonatos cadastrados. O sistema desabilita as funes de
manuteno de Campeonato, no permitindo ao usurio Alterar Dados ou
Excluir Campeonato.
Excluir um Campeonato
Procedimentos:
1. O sistema solicita a confirmao da excluso do Campeonato.
2. Aps a confirmao do usurio o sistema exclui o Campeonato do banco de
dados.
Alternativas:
1. O usurio no confirma a inteno de excluso do Campeonato. O sistema no
procede operao de excluso do Campeonato.
2. O Campeonato j possui uma Temporada cadastrada, sendo referenciado por
outros dados. O sistema alerta o usurio da impossibilidade de excluso do
Campeonato.
37
38
39
Selecionar um Estdio
Procedimentos:
1. O sistema exibe a lista de Estdios cadastrados.
2. O Usurio seleciona o Estdio desejado e escolhe a opo de manuteno
(Alterar Dados ou Excluir Estdio).
Alternativas:
40
Excluir um Estdio
Procedimentos:
1. O sistema solicita a confirmao da excluso do Estdio.
2. Aps a confirmao do usurio o sistema exclui o Estdio do banco de dados.
Alternativas:
1. O usurio no confirma a inteno de excluso do Estdio. O sistema no
procede operao de excluso do Estdio.
2. O Estdio j est vinculado a uma Equipe, sendo referenciado por outros dados.
O sistema alerta o usurio da impossibilidade de excluso do Estdio.
3. O Estdio j est vinculado a um Jogo, sendo referenciado por outros dados. O
sistema alerta o usurio da impossibilidade de excluso do Estdio.
41
42
43
44
45
46
47
Selecionar um Jogador
Procedimentos:
1. O sistema exibe a lista dos jogadores que esto cadastrados para disputa da
temporada pela equipes selecionada.
2. O usurio seleciona o jogador desejado e escolhe a opo de manuteno (alterar
dados ou excluir um jogador).
Alternativas:
2. No existe nenhum jogador cadastrado para a equipe na disputa da temporada. O
sistema desabilita as operaes de alterao de dados ou excluso de jogador.
Excluir um Jogador
Procedimentos:
1. O sistema solicita a confirmao da excluso do jogador.
2. Aps a confirmao do usurio o sistema exclui o jogador do banco de dados.
Alternativas:
1. O usurio no confirma a inteno de excluso do jogador. O sistema no
procede operao de excluso do jogador.
3. O jogador j possui participao em um jogo, sendo referenciado por outros
dados. O sistema alerta o usurio da impossibilidade de excluso do jogador.
49
Selecionar um rbitro
Procedimentos:
50
Excluir um rbitro
Procedimentos:
1. O sistema solicita a confirmao da excluso do rbitro.
2. Aps a confirmao do usurio o sistema exclui o rbitro do banco de dados.
Alternativas:
1. O usurio no confirma a inteno de excluso do rbitro. O sistema no
procede operao de excluso do rbitro.
2. O rbitro j est vinculado a um jogo, sendo referenciado por outros dados. O
sistema alerta o usurio da impossibilidade de excluso do arbitro.
52
53
Selecionar um Grupo
Procedimentos:
1. O sistema exibe a lista dos grupos cadastrados para a fase aberta.
2. O usurio seleciona o grupo desejado e escolhe a opo de manuteno (alterar
dados ou excluir grupo).
3. Quando o usurio seleciona a grupo, realiza o procedimento de abertura do
grupo, mostrando todas as rodadas cadastradas neste grupo.
Alternativas:
1. No existem grupos cadastrados na fase aberta. O sistema desabilita as funes
de manuteno de grupo, no permitindo ao usurio alterar dados, excluir grupo
e criar rodadas.
Excluir um Grupo
Procedimentos:
55
5.3.4.6 Punies
Esta uma rea do sistema responsvel por aplicar no sistema as decises dos
tribunais desportivos com perda de pontos para um time e ganho de pontos por outros.
Est rea possui trs importantes procedimentos: criar uma nova punio, alterar dados
de uma punio e excluir uma punio. A incluso de uma punio no sistema deve
refletir automaticamente na tabela de classificao do campeonato.
56
57
58
59
60
Selecionar um Jogo
Procedimentos:
1. O sistema exibe a lista dos jogos cadastradas na rodada aberta.
2. O usurio seleciona o jogo e escolhe a opo de manuteno (alterar dados de
um jogo, excluir um jogo, definir a escalao das equipes de um jogo, definir os
eventos de um jogo).
Alternativas:
1. No existem jogos cadastrados na rodada selecionada. O sistema desabilita os
procedimentos de manuteno de manuteno de jogo.
61
Excluir um Jogo
Procedimentos:
1. O usurio solicita a excluso do jogo selecionado.
2. O sistema exclui o jogo do banco de dados.
Alternativas:
1. O jogo possui escalao definida e ou eventos, sendo referenciados por estes
dados. O sistema alerta o usurio, e pede a confirmao da inteno de excluir o
jogo.
2. O usurio confirma a inteno de excluir o jogo.
3. O sistema excluir o jogo, a escalao do jogo e todos os eventos do jogo, do
banco de dados.
4. Caso o usurio no confirme a inteno de excluir a partida, o sistema no
procede a excluso dos dados.
63
64
65
Definir Eventos
Procedimentos:
1. O sistema exibe o formulrio para definio de eventos para o time da casa e
para o time visitante.
2. O usurio efetua a ao de incluir um evento ou excluir um evento no jogo
selecionado.
Procedimentos:
1. O jogo no foi realizado. O sistema impossibilita a incluso de qualquer evento.
Alternativas:
1. No existem jogadores cadastrados do time da casa na temporada. O sistema
impossibilita a incluso de um evento.
2. O sistema apresenta a lista de todos os jogadores cadastrados pelo time ou
apenas dos escalados no jogo.
Excluir um evento
Procedimentos:
1. O usurio seleciona um evento e solicita a excluso do evento
2. O sistema exclui o evento da base de dados.
Assim, com a concluso das descries dos casos de uso, o pacote da rea de
administrao de jogos ilustrado na figura 5.18.
67
68
69
70
Aps ter sido completado a construo dos diagramas de interao, que podem
ser visualizados no Anexo 1 deste trabalho, possvel identificar as classes de software,
seus atributos e mtodos. Porm, antes de apresentar o diagrama de classes, necessrio
fazer algumas consideraes para que o diagrama seja facilmente compreendido.
Primeiramente necessrio explicar que o diagrama de classes foi dividido em
duas figuras. Na verdade, as duas figuras representam um nico diagrama de classes.
Esta adaptao foi necessria para que para que pudesse ter uma melhor legibilidade do
diagrama. As figuras foram centradas em dois enfoques. Na primeira, a relao de todas
as classes com a classe Temporada. Na segunda figura, a relao de todas as classes
com a classe Jogo. Desta forma, as classes que possuem relao com ambas, so
apresentadas nas duas figuras de forma repetida, mas no diagrama original, representam
a implementao de uma nica classe no sistema.
Tambm cabe ressaltar que os parmetros dos mtodos e o retorno no so
apresentados nas duas tambm para dar melhor legibilidade ao diagrama. Por fim, os
mtodos de acesso as variveis protegidas das classes, mtodos de construo e
destruio das classes, atributos de acesso ao banco de dados e classes de interfaces
tambm no esto presentes nos diagrama de classes apresentados neste trabalho.
Abaixo apresentado, nas figuras 5.20 e 5.21, o diagrama de classes do projeto.
71
72
Concluso
Este captulo mostrou o resultado do trabalho das fases de projeto e anlise do
sistema. Cabe destacar que o resultado apresentado nos diagramas no foi
imediatamente obtido aps uma nica fase de anlise. Na verdade, este foi o resultado
73
74
Captulo 6
Consideraes do Projeto e Implementao
do Programa
Introduo
Este captulo do trabalho tem por objetivo apresentar como ficou o software
aps o seu desenvolvimento. Sero ilustradas as interfaces e explicadas como procedem
as rotinas e a importncia de cada uma delas para o sistema.
75
6.2 Os Cadastros
O menu cadastro disponibiliza ao usurio as seguintes funes: Cadastro de
Campeonato, Temporada, Equipes e Estdio.
76
77
78
79
80
81
estatsticos gerados pelo sistema referente s arbitragens. Para os usurios que no tem
interesse nesta informao, o cadastro de rbitro dispensvel.
82
83
84
85
86
88
89
90
6.5 As Estatsticas
O menu de estatsticas, disponibiliza o usurio consultar as informaes
referentes a temporada que est trabalhando. Abaixo so mostrados dois relatrios: A
tabela de classificao e a campanha da equipe. Todos os relatrios estatsticos so
gerados automaticamente pelo sistema, desde que o usurio insira as informaes nas
rotinas de manuteno da tabela de jogos.
91
92
Concluso
Com a apresentao final do sistema possvel concluir que todas as atividades
inerentes ao controle de campeonatos de futebol foram desenvolvidas. Conforme ser
93
discutido mais detalhadamente no captulo final deste trabalho, percebe-se que o sistema
necessita de um refinamento dos relatrios estatsticos e uma melhoria no visual das
interfaces para dar ao sistema um melhor entendimento das suas rotinas e torn-lo mais
atraente para o usurio final.
94
Captulo 7
Concluses e Trabalhos Futuros
O presente trabalho apresentou os detalhes que envolvem a disputa de um
campeonato de futebol para servir de base para o desenvolvimento do software. A
concluso deste trabalho destaca dois distintos contedos: o primeiro referente a
metodologia aplicada e o segundo, em relao ao programa propriamente dito.
A metodologia possui bastante contedo e auxilia muito na transio das etapas
do desenvolvimento e os resultados a serem obtidos em cada etapa. A fases de projeto e
anlise foram importantes. Foi til para delimitar com exatido o problema a ser
resolvido. Os casos de uso a serem trabalhados e os requisitos do sistema. J a fase de
anlise diminui a complexidade do problema. O desenvolvimento foi feito em partes. Os
casos de uso so classificados de acordo com a relevncia para o sistema. Primeiro so
atacados os casos de usos fundamentais e em seguida os de menores importncia e
opcionais. Isso deu segurana ao desenvolvimento, pois os resultados vo aparecendo j
nos primeiros ciclos de desenvolvimento e, em momento algum, se cria dvidas quanto
ao andamento do projeto.
Conforme descrito no projeto, a ferramenta de desenvolvimento utilizada foi o
Delphi verso 8. A ferramenta Delphi amplamente conhecida e utilizada no mercado
de desenvolvimento de software, porm, est verso do produto ficou pouco tempo no
mercado, sendo logo substituda pela verso 2005. Isso gerou alguns problemas no
desenvolvimento. Poucos so as referencias na Internet sobre esta verso
especificamente, e o principalmente problema est no fato de no se encontrar
componentes para download compatveis com est verso. Os componentes Delphi
disponveis para download na Internet, em geral, enriquecem as possibilidades de
criao de um software e ao mesmo tempo pode reduzir o tempo de desenvolvimento. A
utilizao de uma verso inferior, como a verso 5, de uso mais consagrado, ou
posterior, como a verso 2005, possivelmente, teria sido mais eficiente.
J a escolha do banco de dados Interbase foi bastante interessante. Permite ao
sistema a utilizao do conceito de transaes, que garante consistncia e aumenta a
segurana dos dados do sistema. O desempenho obtido tambm foi bom. As consultas
so feitas com velocidade. Para fins didticos ele mostrou-se muito apropriada. Porm
95
exige que o usurio final do sistema instale o banco de dados no seu computador. Esta
parece ser uma desvantagem em relao aos sistemas similares apresentados no captulo
3 deste trabalho. Isso porque estes sistemas utilizam o banco de dados Access, que
mais simples que o Interbase, porm, geralmente j instalado pr-instalado nos
computadores, ou at mesmo arquivos de dados. Para tornar o sistema de
Gerenciamento de Campeonatos um produto comercial, de se imaginar a possibilidade
da converso do sistema para o banco de dados Access ou trabalhar com arquivos,
mesmo que a performance do sistema e a segurana dos dados diminuam.
A continuao deste trabalho pode ser realizada, primeiramente, tornando o
produto mais comercial. Para isso, se faz necessrio um aperfeioamento das interfaces
do usurio, deixando-as mais interessantes visualmente alm de auto-explicativas,
permitindo ao usurio uma interao direta, sem maiores auxlios de manuais. Tambm
necessrio se refinar os relatrios estatsticos dos campeonatos gerando informaes
relevantes, objetivo principal de todos os sistemas de informaes. Um interessante
refinamento dos relatrios estatsticos a gerao de prognsticos das partidas baseado
no retrospecto. Outro uma tabela de possibilidades de rebaixamento e classificao. O
sistema, no atual estado de implementao, possivelmente j armazena as informaes
histricas para gerao destes relatrios, restando apenas a definio de um mtodo
estatstico e a implementao.
Para trabalhos futuros, tambm interessante se imaginar uma integrao as
informaes do software e as pginas da Internet, como a criao de um grande portal
de futebol. Para Internet tambm possvel imaginar o compartilhamento das
informaes, ou seja, ao invs de vrios usurios inserirem as informaes de um
campeonato, o que requer grande disponibilidade de tempo, um usurio apenas insere os
dados e compartilha com os demais que fazem a atualizao destes dados.
Outra proposta interessante para futuros trabalhos a generalizao do domnio
do problema para o controle de campeonatos de diferentes esportes. Podemos imaginar
que para o controle de um campeonato de futebol de salo, que possui domnio do
problema semelhante ao do futebol, para adaptar este software, basta que criemos
alguns parmetros e algumas linhas de cdigo e estar pronto. Porm, se imaginarmos
campeonatos de Vlei, Basquete pode no ser to simples a adaptao. E provavelmente
o desenvolvedor se deparar com a seguinte dvida: partir deste software para chegar a
uma soluo para estes tipos de campeonatos ou construir um novo software do zero.
Nestes casos, o mais correto parece ser a construo de um framework genrico para
96
97
Bibliografias Referenciadas
[LAR 00]
[HEU 01]
[CAN 03]
[OLI 00]
[SIL 00]
[SOA 01]
Bibliografias Consultadas
Silva, Ricardo Pereira e. Engenharia de Software Apostila das disciplinas INE5322
e INE 5614. Editora rica. Mar/03.
98
Anexo 1
Banco de Dados: Modelo Lgico Entidade Relacionamento
OBS: Muitos atributos das tabelas foram omitidos nesta representao para que a
visualizao fosse melhor compreendida. A lista completa dos atributos pode ser
visualizada no anexo seguinte.
99
Anexo 2
Banco de Dados: Implementao Fsica
========================================================================================
====
TABELA ARBITRO
========================================================================================
====
CREATE TABLE "ARBITRO"
(
"CODARBITRO" INTEGER NOT NULL,
"CODTEMPORADA"
INTEGER NOT NULL,
"NOMEARBITRO"
VARCHAR(150),
"DATANASCIMENTO"
DATE,
"FOTO"
BLOB SUB_TYPE -1 SEGMENT SIZE 80,
PRIMARY KEY ("CODARBITRO")
);
ALTER TABLE "ARBITRO" ADD FOREIGN KEY ("CODTEMPORADA") REFERENCES "TEMPORADA"
("CODTEMPORADA");
========================================================================================
====
TABELA CAMPEONATO
========================================================================================
====
CREATE TABLE "CAMPEONATO"
(
"CODCAMPEONATO"
INTEGER NOT NULL,
"NOME"
VARCHAR(150) NOT NULL,
"TIPO"
INTEGER NOT NULL,
"PAIS"
VARCHAR(30),
"ESCUDO"
BLOB SUB_TYPE -1 SEGMENT SIZE 80,
PRIMARY KEY ("CODCAMPEONATO")
);
========================================================================================
====
TABELA CLASSIFICAO
========================================================================================
====
CREATE TABLE "CLASSIFICACAO"
(
"CODCLASSIFICACAO" INTEGER NOT NULL,
"CODESTRUTURATEMPORADA"
INTEGER NOT NULL,
"DATAJOGO"
DATE NOT NULL,
"CODEQUIPE" INTEGER NOT NULL,
"PONTOS"
INTEGER default 0,
"VITORIA"
INTEGER default 0,
"EMPATE"
INTEGER default 0,
"DERROTA"
INTEGER default 0,
"VITORIAPRORROGACAO" INTEGER default 0,
"VITORIAPENALTIS"
INTEGER default 0,
"DERROTAPRORROGACAO" INTEGER default 0,
"DERROTAPENALTIS"
INTEGER default 0,
"GOLSPRO"
INTEGER default 0,
"GOLSCONTRA" INTEGER default 0,
"SALDOGOLS"
COMPUTED BY (GolsPro - GolsContra),
"PUBLICO"
INTEGER,
"LOCAL"
VARCHAR(1) NOT NULL,
"REALIZADO" INTEGER NOT NULL,
"JOGOS"
INTEGER,
"EMPATEPRORROGACAO" INTEGER,
PRIMARY KEY ("CODCLASSIFICACAO")
);
ALTER TABLE "CLASSIFICACAO" ADD FOREIGN KEY ("CODESTRUTURATEMPORADA") REFERENCES
"ESTRUTURATEMPORADA" ("CODESTRUTURATEMPORADA");
ALTER TABLE "CLASSIFICACAO" ADD FOREIGN KEY ("CODEQUIPE") REFERENCES "EQUIPE"
("CODEQUIPE");
========================================================================================
====
TABELA EQUIPE
========================================================================================
====
CREATE TABLE "EQUIPE"
100
(
"CODEQUIPE" INTEGER NOT NULL,
"NOMEEQUIPE" VARCHAR(50) NOT NULL,
"NOMECOMPLETOEQUIPE" VARCHAR(200),
"DATAFUNDACAO"
DATE,
"CIDADE"
VARCHAR(30),
"PAIS"
VARCHAR(30),
"TIPOEQUIPE" INTEGER,
"ESCUDO"
BLOB SUB_TYPE -1 SEGMENT SIZE 80,
"CODESTADIO" INTEGER,
PRIMARY KEY ("CODEQUIPE")
);
========================================================================================
====
TABELA EQUIPECOMPETETEMPORADA
========================================================================================
====
CREATE TABLE "EQUIPECOMPETETEMPORADA"
(
"CODEQUIPE" INTEGER NOT NULL,
"CODTEMPORADA"
INTEGER NOT NULL,
PRIMARY KEY ("CODEQUIPE", "CODTEMPORADA")
);
ALTER TABLE "EQUIPECOMPETETEMPORADA" ADD FOREIGN KEY ("CODEQUIPE") REFERENCES "EQUIPE"
("CODEQUIPE");
ALTER TABLE "EQUIPECOMPETETEMPORADA" ADD FOREIGN KEY ("CODTEMPORADA") REFERENCES
"TEMPORADA" ("CODTEMPORADA");
========================================================================================
====
TABELA ESCALACAOJOGO
========================================================================================
====
CREATE TABLE "ESCALACAOJOGO"
(
"CODJOGO"
INTEGER NOT NULL,
"CODEQUIPE" INTEGER NOT NULL,
"CODJOGADOR" INTEGER NOT NULL,
"CODJOGADORENTROU" INTEGER,
"STATUS"
VARCHAR(1),
"SAIU"
VARCHAR(1),
"TEMPOJOGADO"
INTEGER,
"MINUTOSUBSTITUICAO" INTEGER,
PRIMARY KEY ("CODJOGO", "CODEQUIPE", "CODJOGADOR")
);
ALTER TABLE "ESCALACAOJOGO" ADD FOREIGN KEY ("CODJOGO") REFERENCES "JOGO" ("CODJOGO");
ALTER TABLE "ESCALACAOJOGO" ADD FOREIGN KEY ("CODEQUIPE") REFERENCES "EQUIPE"
("CODEQUIPE");
ALTER TABLE "ESCALACAOJOGO" ADD FOREIGN KEY ("CODJOGADOR") REFERENCES "JOGADOR"
("CODJOGADOR");
ALTER TABLE "ESCALACAOJOGO" ADD FOREIGN KEY ("CODJOGADORENTROU") REFERENCES "JOGADOR"
("CODJOGADOR");
========================================================================================
====
TABELA ESTADIO
========================================================================================
====
CREATE TABLE "ESTADIO"
(
"CODESTADIO" INTEGER NOT NULL,
"NOMEESTADIO"
VARCHAR(50) NOT NULL,
"NOMECOMPLETOESTADIO"
VARCHAR(200),
"CAPACIDADEESTADIO" INTEGER,
"CIDADEESTADIO"
VARCHAR(30),
"FOTO"
BLOB SUB_TYPE -1 SEGMENT SIZE 80,
"PAIS"
VARCHAR(30),
PRIMARY KEY ("CODESTADIO")
);
========================================================================================
====
TABELA ESTRUTURATEMPORADA
========================================================================================
====
CREATE TABLE "ESTRUTURATEMPORADA"
(
"CODESTRUTURATEMPORADA"
INTEGER NOT NULL,
"CODTEMPORADA"
INTEGER NOT NULL,
"NOMEESTRUTURATEMPORADA"
VARCHAR(30) NOT NULL,
101
"CODGRUPO"
INTEGER,
"CODFASE"
INTEGER,
PRIMARY KEY ("CODESTRUTURATEMPORADA")
);
ALTER TABLE "ESTRUTURATEMPORADA" ADD FOREIGN KEY ("CODTEMPORADA") REFERENCES "TEMPORADA"
("CODTEMPORADA");
========================================================================================
====
TABELA GERADOR
========================================================================================
====
CREATE TABLE "GERADOR"
(
"OID" INTEGER NOT NULL,
PRIMARY KEY ("OID")
);
========================================================================================
====
TABELA JOGADOR
========================================================================================
====
CREATE TABLE "JOGADOR"
(
"CODJOGADOR" INTEGER NOT NULL,
"CODEQUIPE" INTEGER NOT NULL,
"CODTEMPORADA"
INTEGER NOT NULL,
"APELIDOJOGADOR"
VARCHAR(150) NOT NULL,
"NOMEJOGADOR"
VARCHAR(150),
"NUMEROCAMISA"
INTEGER,
"DATANASCIMENTO"
DATE,
"NACIONALIDADE"
VARCHAR(30),
"POSICAO"
INTEGER,
"STATUS"
VARCHAR(1) default 'A',
"EMAIL"
VARCHAR(100),
"FOTO"
BLOB SUB_TYPE -1 SEGMENT SIZE 80,
PRIMARY KEY ("CODJOGADOR")
);
ALTER TABLE "JOGADOR" ADD FOREIGN KEY ("CODEQUIPE") REFERENCES "EQUIPE" ("CODEQUIPE");
ALTER TABLE "JOGADOR" ADD FOREIGN KEY ("CODTEMPORADA") REFERENCES "TEMPORADA"
("CODTEMPORADA");
========================================================================================
====
TABELA JOGO
========================================================================================
====
CREATE TABLE "JOGO"
(
"CODJOGO"
INTEGER NOT NULL,
"CODESTRUTURATEMPORADA"
INTEGER NOT NULL,
"CODEQUIPECASA"
INTEGER NOT NULL,
"CODEQUIPEFORA"
INTEGER NOT NULL,
"TV" VARCHAR(10),
"NOMEESTADIO"
VARCHAR(30),
"GOLSTIMECASA"
INTEGER,
"GOLSTIMEFORA"
INTEGER,
"GOLSTIMECASAPRITEM" INTEGER,
"GOLSTIMEFORAPRITEM" INTEGER,
"PRORROGACAO"
INTEGER default 0,
"PENALTIS"
INTEGER default 0,
"GOLSTIMECASAPRORROGACAO"
INTEGER,
"GOLSTIMEFORAPRORROGACAO"
INTEGER,
"GOLSTIMECASAPENALTIS"
INTEGER,
"GOLSTIMEFORAPENALTIS"
INTEGER,
"PUBLICO"
INTEGER,
"NOTICIA"
BLOB SUB_TYPE TEXT SEGMENT SIZE 80,
"REALIZADO" INTEGER NOT NULL,
"ESTATCHUTECASA"
INTEGER default 0,
"ESTATCHUTEFORA"
INTEGER default 0,
"ESTATFALTACASA"
INTEGER default 0,
"ESTATFALTAFORA"
INTEGER default 0,
"ESTATESCANTEIOCASA" INTEGER default 0,
"ESTATESCANTEIOFORA" INTEGER default 0,
"ESTATIMPEDIMENTOCASA"
INTEGER default 0,
"ESTATIMPEDIMENTOFORA"
INTEGER default 0,
"DATAHORAJOGO"
TIMESTAMP,
"CODARBITRO" INTEGER,
"CODESTADIO" INTEGER,
102
"FOTO1"
BLOB SUB_TYPE -1 SEGMENT SIZE 80,
"FOTO2"
BLOB SUB_TYPE -1 SEGMENT SIZE 80,
"CODCLASSIFICACAOTIMECASA" INTEGER NOT NULL,
"CODCLASSIFICACAOTIMEFORA" INTEGER NOT NULL,
PRIMARY KEY ("CODJOGO")
);
ALTER TABLE "JOGO" ADD FOREIGN KEY ("CODESTRUTURATEMPORADA") REFERENCES
"ESTRUTURATEMPORADA" ("CODESTRUTURATEMPORADA");
ALTER TABLE "JOGO" ADD FOREIGN KEY ("CODEQUIPECASA") REFERENCES "EQUIPE" ("CODEQUIPE");
ALTER TABLE "JOGO" ADD FOREIGN KEY ("CODEQUIPEFORA") REFERENCES "EQUIPE" ("CODEQUIPE");
========================================================================================
====
TABELA LANCEPARTIDA
========================================================================================
====
CREATE TABLE "LANCEPARTIDA"
(
"CODLANCEPARTIDA"
INTEGER NOT NULL,
"CODJOGO"
INTEGER NOT NULL,
"CODJOGADOR" INTEGER NOT NULL,
"TIPOLANCE" INTEGER NOT NULL,
"MINUTO"
INTEGER,
"CODEQUIPELANCE"
INTEGER NOT NULL,
"CODEQUIPEJOGADOR" INTEGER NOT NULL,
PRIMARY KEY ("CODLANCEPARTIDA")
);
ALTER TABLE "LANCEPARTIDA" ADD FOREIGN KEY ("CODEQUIPELANCE") REFERENCES "EQUIPE"
("CODEQUIPE");
ALTER TABLE "LANCEPARTIDA" ADD FOREIGN KEY ("CODJOGO") REFERENCES "JOGO" ("CODJOGO");
ALTER TABLE "LANCEPARTIDA" ADD FOREIGN KEY ("CODJOGADOR") REFERENCES "JOGADOR"
("CODJOGADOR");
========================================================================================
====
TABELA NARRACAO
========================================================================================
====
CREATE TABLE "NARRACAO"
(
"CODNARRACAO"
INTEGER NOT NULL,
"CODJOGO"
INTEGER NOT NULL,
"MINUTO"
INTEGER,
"NARRACAO"
BLOB SUB_TYPE TEXT SEGMENT SIZE 80,
PRIMARY KEY ("CODNARRACAO")
);
ALTER TABLE "NARRACAO" ADD FOREIGN KEY ("CODJOGO") REFERENCES "JOGO" ("CODJOGO");
========================================================================================
====
TABELA PUNICAO
========================================================================================
====
CREATE TABLE "PUNICAO"
(
"CODPUNICAO" INTEGER NOT NULL,
"CODESTRUTURATEMPORADA"
INTEGER NOT NULL,
"CODEQUIPE" INTEGER NOT NULL,
"PONTOS"
INTEGER NOT NULL,
"MOTIVO"
VARCHAR(100),
"DATA"
DATE,
"CODCLASSIFICACAO" INTEGER NOT NULL,
PRIMARY KEY ("CODPUNICAO")
);
ALTER TABLE "PUNICAO" ADD FOREIGN KEY ("CODESTRUTURATEMPORADA") REFERENCES
"ESTRUTURATEMPORADA" ("CODESTRUTURATEMPORADA");
ALTER TABLE "PUNICAO" ADD FOREIGN KEY ("CODEQUIPE") REFERENCES "EQUIPE" ("CODEQUIPE");
========================================================================================
====
TABELA TEMPORADA
========================================================================================
====
CREATE TABLE "TEMPORADA"
(
"CODTEMPORADA"
INTEGER NOT NULL,
"CODCAMPEONATO"
INTEGER NOT NULL,
"NOMETEMPORADA"
VARCHAR(150) NOT NULL,
"PONTOSVITORIA"
INTEGER default 3,
"PONTOSEMPATE"
INTEGER default 1,
"PONTOSVITORIAPRORROGACAO" INTEGER default 0,
103
"PONTOSVITORIAPENALTIS"
INTEGER default 0,
"PONTOSDERROTAPRORROGACAO" INTEGER default 0,
"PONTOSDERROTAPENALTIS"
INTEGER default 0,
"DESCRICAO" BLOB SUB_TYPE TEXT SEGMENT SIZE 80,
"NUMTIMEREBAIXADO" INTEGER default 0,
"NUMTIMEPROMOVIDO" INTEGER default 0,
"PONTOSEMPATEPRORROGACAO"
INTEGER,
"SQLDESEMPATE"
VARCHAR(100) NOT NULL,
"NUMTIMECOMPET1"
INTEGER NOT NULL,
"NUMTIMECOMPET2"
INTEGER NOT NULL,
"NUMTIMEPOREBAIXAMENTO"
INTEGER NOT NULL,
PRIMARY KEY ("CODTEMPORADA")
);
ALTER TABLE "TEMPORADA" ADD FOREIGN KEY ("CODCAMPEONATO") REFERENCES "CAMPEONATO"
("CODCAMPEONATO");
========================================================================================
====
104
Anexo 3
Cdigo Fonte do Sistema
========================================================================================
====
ARQUIVO: UTemporada.pas
========================================================================================
====
unit UTemporada;
interface
Uses
UDMDados, SysUtils, Borland.Vcl.Classes, UEquipe, UEstadio, UArbitro,
UEstruturaTemporada, UDMClasses, UCampeonato, UPunicao;
type
TTemporada = class
private
protected
BD: TDtMdlClasses;
conBD: TDtMdlDados;
CodTemporada: Integer;
Campeonato: TCampeonato;
NomeTemporada: String;
PontosVitoria: Integer;
PontosEmpate: Integer;
PontosVitoriaProrrogacao: Integer;
PontosVitoriaPenaltis: Integer;
PontosDerrotaProrrogacao: Integer;
PontosDerrotaPenaltis: Integer;
PontosEmpateProrrogacao: Integer;
Descricao: String;
NumTimeRebaixado: Integer;
NumTimeCompet1: Integer;
NumTimeCompet2: Integer;
NumTimePORebaixamento: Integer;
NumTimePromovido: Integer;
SQLDesempate: String;
NumFases: Integer;
public
procedure SetBD (var umaConBD: TDtMdlDados);
procedure Materializar (Cod: Integer);
procedure NovaTemporada(CodCamp, PtsVitTN, PtsEmpTN, PtsVitPro, PtsEmpPro, PtsDerPro,
PtsVitPen, PtsDerPen, NumPro, NumComp1, NumComp2, NumPOReb, NumReb:
Integer;
NomeTemp, Descr, Criterio: String);
procedure AlterarTemporada(CodCamp, PtsVitTN, PtsEmpTN, PtsVitPro, PtsEmpPro,
PtsDerPro,
PtsVitPen, PtsDerPen, NumPro, NumComp1, NumComp2, NumPOReb, NumReb:
Integer;
NomeTemp, Descr, Criterio: String);
function GetCodTemporada: Integer;
function GetPontosVitoria: Integer;
function GetNumTimePromovido: Integer;
function GetNumTimeCompet1: Integer;
function GetNumTimeCompet2: Integer;
function GetNumTimePORebaixamento: Integer;
function GetNumTimeRebaixado: Integer;
function GetNomeTemporada: String;
function GetSQLDesempate: String;
function NovoJogo(CodEstTemp, CodTimeCasa, CodTimeFora: Integer; DataHoraJogo:
TDateTime;
CodArbitro, CodEstadio, Realizado, GolsTimeCasa, GolsTimeFora,
Prorrogacao,
GolsTimeCasaProrrog, GolsTimeForaProrrog, Penaltis, GolsTimeCasaPen,
GolsTimeForaPen, Publico, ChutesTimeCasa, ChutesTimeFora,
ImpedTimeCasa,
ImpedTimeFora, FaltasTimeCasa, FaltasTimeFora, EscanteiosTimeCasa,
EscanteiosTimeFora: Integer; Noticia, TV: String; Foto1,
Foto2: TMemoryStream) : Boolean;
105
106
107
PontosVitoriaPenaltis := PtsVitPen;
PontosDerrotaPenaltis := PtsDerPen;
Descricao := Descr;
NumTimeRebaixado := NumReb;
NumTimeCompet1 := NumComp1;
NumTimeCompet2 := NumComp2;
NumTimePORebaixamento := NumPOReb;
NumTimePromovido := NumPro;
SQLDesempate := Criterio;
SQL := 'Update TEMPORADA set ';
SQL := SQL + 'CODCAMPEONATO=' + IntToStr(Campeonato.GetCodCampeonato) + ', ';
SQL := SQL + 'NOMETEMPORADA=''' + NomeTemporada + ''', ';
SQL := SQL + 'PONTOSVITORIA=' + IntToStr(PontosVitoria) + ', ';
SQL := SQL + 'PONTOSEMPATE=' + IntToStr(PontosEmpate) + ', ';
SQL := SQL + 'PONTOSVITORIAPRORROGACAO=' + IntToStr(PontosVitoriaProrrogacao) + ', ';
SQL := SQL + 'PONTOSEMPATEPRORROGACAO=' + IntToStr(PontosEmpateProrrogacao) + ', ';
SQL := SQL + 'PONTOSDERROTAPRORROGACAO=' + IntToStr(PontosDerrotaProrrogacao) + ', ';
SQL := SQL + 'PONTOSVITORIAPENALTIS=' + IntToStr(PontosVitoriaPenaltis) + ', ';
SQL := SQL + 'PONTOSDERROTAPENALTIS=' + IntToStr(PontosDerrotaPenaltis) + ', ';
SQL := SQL + 'NUMTIMEREBAIXADO=' + IntToStr(NumTimeRebaixado) + ', ';
SQL := SQL + 'NUMTIMEPOREBAIXAMENTO=' + IntToStr(NumTimePORebaixamento) + ', ';
SQL := SQL + 'NUMTIMEPROMOVIDO=' + IntToStr(NumTimePromovido) + ', ';
SQL := SQL + 'NUMTIMECOMPET1=' + IntToStr(NumTimeCompet1) + ', ';
SQL := SQL + 'NUMTIMECOMPET2=' + IntToStr(NumTimeCompet2) + ', ';
SQL := SQL + 'SQLDESEMPATE=''' + SQLDesempate + ''', DESCRICAO=:Desc ';
SQL := SQL + 'Where CodTemporada=' + IntToStr(CodTemporada);
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ParamByName('Desc').asMemo := Descricao;
BD.SQLDtStDados.ExecSQL();
end;
108
Estadio.Destroy;
Foto1.Free; Foto2.Free;
EstruturaTemporada.Destroy;
end;
function TTemporada.AlterarJogo(CodJogo, CodEstTemp, CodTimeCasa, CodTimeFora : Integer;
DataHoraJogo : TDateTime;
CodArbitro, CodEstadio, Realizado, GolsTimeCasa,
GolsTimeFora, Prorrogacao,
GolsTimeCasaProrrog, GolsTimeForaProrrog, Penaltis,
GolsTimeCasaPen,
GolsTimeForaPen, Publico, ChutesTimeCasa, ChutesTimeFora,
ImpedTimeCasa,
ImpedTimeFora, FaltasTimeCasa, FaltasTimeFora,
EscanteiosTimeCasa,
EscanteiosTimeFora: Integer; Noticia, TV: String; Foto1,
Foto2: TMemoryStream) : Boolean;
var
EquipeCasa, EquipeFora : TEquipe;
Arbitro : TArbitro;
Estadio : TEstadio;
EstruturaTemporada : TEstruturaTemporada;
begin
EquipeCasa := TEquipe.Create; EquipeCasa.SetBD(ConBD);
EquipeCasa.Materializar (CodTimeCasa);
EquipeFora :=TEquipe.Create; EquipeFora.SetBD(ConBD);
EquipeFora.Materializar (CodTimeFora);
Arbitro := TArbitro.Create; Arbitro.SetBD(ConBD);
Arbitro.Materializar (CodArbitro);
Estadio := TEstadio.Create; Estadio.SetBD(ConBD);
Estadio.Materializar (CodEstadio);
EstruturaTemporada := TEstruturaTemporada.Create; EstruturaTemporada.SetBD(ConBD);
EstruturaTemporada.Materializar (CodEstTemp);
EstruturaTemporada.AlterarJogo (CodJogo, EquipeCasa, EquipeFora, DataHoraJogo,
Arbitro, Estadio, Realizado,
GolsTimeCasa, GolsTimeFora, Prorrogacao,
GolsTimeCasaProrrog,
GolsTimeForaProrrog, Penaltis, GolsTimeCasaPen,
GolsTimeForaPen, Publico,
ChutesTimeCasa, ChutesTimeFora, ImpedTimeCasa,
ImpedTimeFora,
FaltasTimeCasa, FaltasTimeFora, EscanteiosTimeCasa,
EscanteiosTimeFora,
Noticia, TV, Foto1, Foto2, PontosVitoria, PontosEmpate,
PontosVitoriaProrrogacao, PontosEmpateProrrogacao,
PontosDerrotaProrrogacao,
PontosVitoriaPenaltis, PontosDerrotaPenaltis);
EquipeCasa.Destroy;
EquipeFora.Destroy;
Arbitro.Destroy;
Estadio.Destroy;
Foto1.Free; Foto2.Free;
EstruturaTemporada.Destroy;
end;
procedure TTemporada.AlteraDataRodada (umCodRodada: Integer; umaDataHoraJogo: TDateTime;
SeTodos: String);
var
EstruturaTemporada : TEstruturaTemporada;
begin
EstruturaTemporada := TEstruturaTemporada.Create; EstruturaTemporada.SetBD(ConBD);
EstruturaTemporada.Materializar (umCodRodada);
EstruturaTemporada.AlterarDataRodada (umaDataHoraJogo, SeTodos);
EstruturaTemporada.Destroy;
end;
procedure TTemporada.IncluirArbitro (umNome: String; umaData: TDateTime; Foto:
TMemoryStream);
var
Arbitro: TArbitro;
begin
Arbitro := TArbitro.Create; Arbitro.SetBD(ConBD);
Arbitro.NovoArbitro(CodTemporada, umNome, umaData, Foto);
Arbitro.Destroy;
end;
109
110
111
112
113
Classificacao.NovaClassificacaoPunicao(EstruturaTemporada.GetCodEstruturaTemporada,
DataPunicao, Equipe, Pontos);
BD.SQLDtStDados.CommandText := 'SELECT OID FROM GERADOR';
with BD.ClntDtStDados do begin
Close;
Open;
First;
CodPunicao := FieldByName('OID').asInteger;
end;
BD.SQLDtStDados.CommandText := 'UPDATE GERADOR SET OID = OID + 1;';
BD.SQLDtStDados.ExecSQL();
SQL := 'Insert into PUNICAO (CODPUNICAO, CODESTRUTURATEMPORADA, CODEQUIPE,
CODCLASSIFICACAO, PONTOS, MOTIVO, DATA) values (';
SQL := SQL + IntToStr(CodPunicao) + ', ';
SQL := SQL + IntToStr(EstruturaTemporada.GetCodEstruturaTemporada) + ', ';
SQL := SQL + IntToStr(Equipe.GetCodEquipe) + ', ';
SQL := SQL + IntToStr(Classificacao.GetCodClassificacao) + ', ';
SQL := SQL + IntToStr(Pontos) + ', ';
SQL := SQL + '''' + Motivo + ''', ';
SQL := SQL + '''' + MeusUtils.DataParaBD (DataPunicao) + ''')';
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ExecSQL();
end;
procedure TPunicao.AlterarPunicao(EstTemp: TEstruturaTemporada; umaEquipe: TEquipe;
umaData: TDateTime; osPontos: Integer; umMotivo: String);
var
SQL: String;
begin
EstruturaTemporada := EstTemp;
Equipe := umaEquipe;
DataPunicao := umaData;
Pontos := osPontos;
Motivo := umMotivo;
DataPunicao := umaData;
Classificacao.AlterarClassificacaoPunicao(EstruturaTemporada.GetCodEstruturaTemporada,
DataPunicao, Equipe, Pontos);
SQL := 'Update PUNICAO set ';
SQL := SQL + 'CODESTRUTURATEMPORADA=' +
IntToStr(EstruturaTemporada.GetCodEstruturaTemporada) + ', ';
SQL := SQL + 'CODEQUIPE=' + IntToStr(Equipe.GetCodEquipe) + ', ';
SQL := SQL + 'CODCLASSIFICACAO=' + IntToStr(Classificacao.GetCodClassificacao) + ', ';
SQL := SQL + 'PONTOS=' + IntToStr(Pontos) + ', ';
SQL := SQL + 'MOTIVO=''' + Motivo + ''', ';
SQL := SQL + 'DATA=''' + MeusUtils.DataParaBD(DataPunicao) + ''' ';
SQL := SQL + 'where CODPUNICAO=' + IntToStr(CodPunicao);
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ExecSQL();
end;
procedure TPunicao.ExcluirPunicao;
var
SQL: String;
begin
Classificacao.ExcluirClassificacao;
SQL := 'Delete from PUNICAO where CODPUNICAO=' + IntToStr(CodPunicao);
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ExecSQL();
end;
function TPunicao.GetCodPunicao : Integer;
begin
GetCodPunicao := CodPunicao;
end;
destructor TPunicao.Destroy;
begin
BD.Destroy;
Classificacao.Destroy;
Equipe.Destroy;
EstruturaTemporada.Destroy;
end;
end.
========================================================================================
====
114
ARQUIVO: UMeuUtils.pas
========================================================================================
====
unit UMeuUtils;
interface
Uses
SysUtils, Borland.Vcl.Controls, Borland.Vcl.IniFiles;
type
TMeusUtils = class
private
protected
posicao: Integer;
public
constructor Create; overload;
function GeraPosicao: String;
function DiaDaSemana (aData : TDate) : string;
function DataParaBD (aData : TDateTime) : String;
function DataHoraParaBD (aData : TDateTime) : String;
function CalcAnos(DataOrigem: TDateTime): integer;
procedure GravaIni (NomeArq: String);
end;
implementation
constructor TMeusUtils.Create;
begin
inherited;
Posicao := 0;
end;
function TMeusUtils.GeraPosicao: String;
begin
Posicao := Posicao + 1;
GeraPosicao := IntToStr(Posicao) + '';
end;
function TMeusUtils.DiaDaSemana (aData :TDate) : string;
var
Dia: Integer;
begin
Dia := DayOfWeek (int(aData));
case Dia of
1 : DiaDaSemana := 'DOM';
2 : DiaDaSemana := 'SEG';
3 : DiaDaSemana := 'TER';
4 : DiaDaSemana := 'QUA';
5 : DiaDaSemana := 'QUI';
6 : DiaDaSemana := 'SEX';
7 : DiaDaSemana := 'SAB';
end;
end;
function TMeusUtils.DataParaBD (aData : TDateTime) : String;
var
Dia, Mes, Ano : String;
begin
DateTimeToString(Dia, 'dd', aData);
DateTimeToString(Mes, 'mmm', aData);
DateTimeToString(Ano, 'yyyy', aData);
if Mes = 'fev' then Mes := 'FEB';
if Mes = 'abr' then Mes := 'APR';
if Mes = 'mai' then Mes := 'MAY';
if Mes = 'ago' then Mes := 'AUG';
if Mes = 'set' then Mes := 'SEP';
if Mes = 'out' then Mes := 'OCT';
if Mes = 'dez' then Mes := 'DEC';
DataParaBD := Dia + '-' + Mes + '-' + Ano;
end;
function TMeusUtils.DataHoraParaBD (aData : TDateTime) : String;
var
Dia, Mes, Ano, Hora, Minuto : String;
115
begin
DateTimeToString(Dia, 'dd', aData);
DateTimeToString(Mes, 'mmm', aData);
DateTimeToString(Ano, 'yyyy', aData);
DateTimeToString(Hora, 'hh', aData);
DateTimeToString(Minuto, 'nn', aData);
if Mes = 'fev' then Mes := 'FEB';
if Mes = 'abr' then Mes := 'APR';
if Mes = 'mai' then Mes := 'MAY';
if Mes = 'ago' then Mes := 'AUG';
if Mes = 'set' then Mes := 'SEP';
if Mes = 'out' then Mes := 'OCT';
if Mes = 'dez' then Mes := 'DEC';
DataHoraParaBD := Dia + '-' + Mes + '-' + Ano + ' ' + Hora + ':' + Minuto + ':00';
end;
function TMeusUtils.CalcAnos(DataOrigem: TDateTime): integer;
var
D1, M1, A1,
D2, M2, A2: Word;
begin
DecodeDate(DataOrigem, A1, M1, D1);
DecodeDate(Date, A2, M2, D2);
Result := A2 - A1;
if (M1 > M2) or ((M1 = M2) and (D1 > D2)) then Dec(Result);
end;
procedure TMeusUtils.GravaIni (NomeArq: String);
var
ArqIni : TIniFile;
begin
if not FileExists (NomeArq) then begin
ArqIni := TIniFile.Create(NomeArq);
Try
ArqIni.WriteString('CadJogo', 'Data', DateToStr(Date));
ArqIni.WriteString('CadJogo', 'Hora', TimeToStr(Time));
ArqIni.WriteInteger('Temporada', 'Atual', 0);
Finally
ArqIni.Free;
end;
end;
end;
end.
========================================================================================
====
ARQUIVO: ULanceJogo.pas
========================================================================================
====
unit ULanceJogo;
interface
Uses
UDMDados, SysUtils, Borland.Vcl.Classes, Borland.Vcl.DBXpress, UMeuUtils,
Borland.Vcl.Db, UDMClasses, UJogador, UEquipe;
type
TLanceJogo = class
protected
conBD: TDtMdlDados;
BD: TDtMdlClasses;
MeusUtils : TMeusUtils;
CodLancePartida: Integer;
CodJogo: Integer;
EquipeLance: TEquipe;
EquipeJogador: TEquipe;
Jogador: TJogador;
TipoLance: Integer; // 1:Gol; 2:GolPenalti; 3:GolContra; 4:Amarelo; 5-AmaVer;
5:Vermelho.
Minuto: Integer;
public
constructor Create; Overload;
procedure SetBD (var umaConBD: TDtMdlDados);
procedure Materializar (umCod: Integer);
destructor Destroy; Override;
116
implementation
constructor TLanceJogo.Create;
begin
inherited;
MeusUtils := TMeusUtils.Create;
end;
procedure TLanceJogo.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
BD := TDtMdlClasses.create(nil);
BD.SetConexaoBD (conBD)
end;
procedure TLanceJogo.Materializar (umCod: Integer);
begin
BD.SQLDtStDados.CommandText := 'SELECT * FROM LANCEPARTIDA WHERE CODLANCEPARTIDA=' +
IntToStr(umCod);
with BD.ClntDtStDados do begin
Close;
Open;
First;
CodLancePartida := FieldByName('CodLancePartida').asInteger;
CodJogo := FieldByName('CodJogo').asInteger;
EquipeLance := TEquipe.Create; EquipeLance.SetBD(ConBD);
EquipeLance.Materializar(FieldByName('CodEquipeLance').asInteger);
EquipeJogador := TEquipe.Create; EquipeJogador.SetBD(ConBD);
EquipeJogador.Materializar(FieldByName('CodEquipeJogador').asInteger);
Jogador := EquipeJogador.GetJogador(FieldByName('CodJogador').asInteger);
TipoLance := FieldByName('TipoLance').asInteger;
Minuto := FieldByName('Minuto').asInteger;
end;
end;
procedure TLanceJogo.NovoLancePartida (umCodJogo: Integer; umaEquipeLance,
umaEquipeJogador: TEquipe; CodJogador, umTipoLance, oMinuto: Integer);
var
SQL: String;
begin
BD.SQLDtStDados.CommandText := 'SELECT OID FROM GERADOR';
with BD.ClntDtStDados do begin
Close;
Open;
First;
CodLancePartida := FieldByName('OID').asInteger;
end;
BD.SQLDtStDados.CommandText := 'UPDATE GERADOR SET OID = OID + 1;';
BD.SQLDtStDados.ExecSQL();
CodJogo := umCodJogo;
EquipeLance := umaEquipeLance;
EquipeJogador := umaEquipeJogador;
Jogador := EquipeJogador.GetJogador(CodJogador);
TipoLance := umTipoLance;
Minuto := oMinuto;
SQL := 'Insert into LANCEPARTIDA (CODLANCEPARTIDA, CODJOGO, CODEQUIPELANCE,
CODEQUIPEJOGADOR, CODJOGADOR, TIPOLANCE, MINUTO) VALUES (';
SQL := SQL + IntToStr(CodLancePartida) + ', ';
SQL := SQL + IntToStr(CodJogo) + ', ';
SQL := SQL + IntToStr(EquipeLance.GetCodEquipe) + ', ';
SQL := SQL + IntToStr(EquipeJogador.GetCodEquipe) + ', ';
SQL := SQL + IntToStr(Jogador.GetCodJogador) + ', ';
SQL := SQL + IntToStr(TipoLance) + ', ';
SQL := SQL + IntToStr(Minuto) + ')';
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ExecSQL();
end;
117
procedure TLanceJogo.ExcluirLancePartida;
var
SQL: String;
begin
BD.SQLDtStDados.CommandText := 'Delete from LANCEPARTIDA where CODLANCEPARTIDA=' +
IntToStr(CodLancePartida);
BD.SQLDtStDados.ExecSQL();
end;
function TLanceJogo.GetCodLancePartida : Integer;
begin
GetCodLancePartida := CodLancePartida;
end;
destructor TLanceJogo.Destroy;
begin
BD.Destroy;
MeusUtils.Free;
EquipeLance.Destroy;
EquipeJogador.Destroy;
Jogador.Destroy;
end;
function TLanceJogo.GetTipoLance : Integer;
begin
GetTipoLance := TipoLance;
end;
function TLanceJogo.GetCodEquipeLance : Integer;
begin
GetCodEquipeLance := EquipeLance.GetCodEquipe;
end;
end.
========================================================================================
====
ARQUIVO: UJogo.pas
========================================================================================
====
unit UJogo;
interface
Uses
UDMDados, SysUtils, UEquipe, UArbitro, UEstadio, Borland.Vcl.Classes,
UClassificacao, Borland.Vcl.DBXpress, UMeuUtils, Borland.Vcl.Db,
UDMClasses, UItemEscalacao, ULanceJogo, UJogador;
type
TJogo = class
protected
conBD: TDtMdlDados;
BD: TDtMdlClasses;
MeusUtils : TMeusUtils;
CodJogo: Integer;
CodEstruturaTemporada: Integer;
EquipeCasa: TEquipe;
EquipeFora: TEquipe;
DataHoraJogo: TDateTime;
Arbitro: TArbitro;
TV: String;
Estadio: TEstadio;
NomeEstadio: String;
GolsTimeCasa: Integer;
GolsTimeFora: Integer;
GolsTimeCasaPriTem: Integer;
GolsTimeForaPriTem: Integer;
Realizado: Integer;
Prorrogacao: Integer;
Penaltis: Integer;
GolsTimeCasaProrrogacao: Integer;
GolsTimeForaProrrogacao: Integer;
GolsTimeCasaPenaltis: Integer;
GolsTimeForaPenaltis: Integer;
Publico: Integer;
118
Noticia: String;
EstatChuteCasa: Integer;
EstatChuteFora: Integer;
EstatFaltaCasa: Integer;
EstatFaltaFora: Integer;
EstatEscanteioCasa: Integer;
EstatEscanteioFora: Integer;
EstatImpedimentoCasa: Integer;
EstatImpedimentoFora: Integer;
//Variveis da Classificacao
ClassificacaoTimeCasa: TClassificacao;
ClassificacaoTimeFora: TClassificacao;
// Variveis da Escalacao
NumTitTC, NumTitTF, NumSubstTC, NumSubstTF: Integer;
EscalacaoTC : Array [1..14] of TItemEscalacao;
EscalacaoTF : Array [1..14] of TItemEscalacao;
// Variveis LanceJogo
LancesJogo: Array [1..50] of TLanceJogo;
NumLancesJogo: Integer;
NumLancesGolsTC, NumLancesGolsTF: Integer;
public
constructor Create; Overload;
procedure SetBD (var umaConBD: TDtMdlDados);
procedure Materializar (Cod: Integer);
function NovoJogo (codEstTemp: Integer; var umTimeCasa, umTimeFora: TEquipe;
umaDataHoraJogo: TDateTime;
var umArbitro: TArbitro; var umEstadio: TEstadio; umRealizado,
osGolsTimeCasa, osGolsTimeFora,
umProrrogacao, osGolsTimeCasaProrrog, osGolsTimeForaProrrog,
umPenaltis, osGolsTimeCasaPen,
osGolsTimeForaPen, umPublico, osChutesTimeCasa, osChutesTimeFora,
osImpedTimeCasa,
osImpedTimeFora, osFaltasTimeCasa, osFaltasTimeFora,
osEscanteiosTimeCasa,
osEscanteiosTimeFora: Integer; umaNoticia, umaTV: String; var
Foto1, Foto2: TMemoryStream;
PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog, PtsDerProrrog,
PtsVitPen, PtsDerPen: Integer) : boolean;
function AlterarJogo (codEstTemp: Integer; var umTimeCasa, umTimeFora: TEquipe;
umaDataHoraJogo: TDateTime;
var umArbitro: TArbitro; var umEstadio: TEstadio; umRealizado,
osGolsTimeCasa, osGolsTimeFora,
umProrrogacao, osGolsTimeCasaProrrog, osGolsTimeForaProrrog,
umPenaltis, osGolsTimeCasaPen,
osGolsTimeForaPen, umPublico, osChutesTimeCasa, osChutesTimeFora,
osImpedTimeCasa,
osImpedTimeFora, osFaltasTimeCasa, osFaltasTimeFora,
osEscanteiosTimeCasa,
osEscanteiosTimeFora: Integer; umaNoticia, umaTV: String; var
Foto1, Foto2: TMemoryStream;
PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog, PtsDerProrrog,
PtsVitPen, PtsDerPen: Integer) : boolean;
function ExcluirJogo : Boolean;
function PossuiEventos : Boolean;
procedure CalcularJogo (codEstTemp: Integer; var umTimeCasa, umTimeFora: TEquipe;
umaDataHoraJogo: TDateTime;
var umArbitro: TArbitro; var umEstadio: TEstadio; umRealizado,
osGolsTimeCasa, osGolsTimeFora,
umProrrogacao, osGolsTimeCasaProrrog, osGolsTimeForaProrrog,
umPenaltis, osGolsTimeCasaPen,
osGolsTimeForaPen, umPublico, osChutesTimeCasa, osChutesTimeFora,
osImpedTimeCasa,
osImpedTimeFora, osFaltasTimeCasa, osFaltasTimeFora,
osEscanteiosTimeCasa,
osEscanteiosTimeFora: Integer; umaNoticia, umaTV: String;
PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog, PtsDerProrrog,
PtsVitPen, PtsDerPen: Integer);
// Mtodos de Escalacao
procedure MaterializarEscalacao;
procedure EscalarJogador (umCodEquipe, umCodJogador, TempoJogado: Integer);
procedure RemoverEscalacaoJogador (umCodEquipe, umCodJogador: Integer);
procedure PromoverSubst (umCodEquipe, CodJogadorSaiu, TempoJogadoSaiu,
CodJogadorEntrou, TempoJogadoEntrou, MinutoSubst: Integer);
procedure RemoverSubstituicao (umCodEquipe, CodJogadorSaiu, CodJogadorEntrou,
TempoJogado: Integer);
//Mtodos LancePartida
119
GetNumLancesGolsTC: Integer;
GetGolsTimeCasa: Integer;
GetGolsTimeFora: Integer;
GetNumLancesGolsTF: Integer;
GetGolsTimeCasaProrrogacao: Integer;
GetGolsTimeForaProrrogacao: Integer;
120
end;
Self.MaterializarEscalacao;
Self.MaterializarLancesJogo;
end;
procedure TJogo.MaterializarEscalacao;
var
SQL: String;
umItemEscalacao: TItemEscalacao;
begin
NumTitTC := 0;
NumSubstTC := 0;
BD.SQLDtStDados.CommandText := 'SELECT * FROM ESCALACAOJOGO WHERE CODJOGO=' +
IntToStr(CodJogo) + ' AND CODEQUIPE=' + IntToStr(EquipeCasa.GetCodEquipe);
with BD.ClntDtStDados do begin
Close;
Open;
First;
while not eof do begin
umItemEscalacao := TItemEscalacao.Create; umItemEscalacao.SetBD(ConBD);
umItemEscalacao.Materializar (CodJogo, FieldByName('CodJogador').asInteger,
EquipeCasa.GetCodEquipe);
if FieldByName('Status').asString = 'T' then begin
NumTitTC := NumTitTC + 1;
end else begin
NumSubstTC := NumSubstTC + 1;
end;
EscalacaoTC[NumTitTC+NumSubstTC] := umItemEscalacao;
Next;
end;
end;
NumTitTF := 0;
NumSubstTF := 0;
BD.SQLDtStDados.CommandText := 'SELECT * FROM ESCALACAOJOGO WHERE CODJOGO=' +
IntToStr(CodJogo) + ' AND CODEQUIPE=' + IntToStr(EquipeFora.GetCodEquipe);
with BD.ClntDtStDados do begin
Close;
Open;
First;
while not eof do begin
umItemEscalacao := TItemEscalacao.Create; umItemEscalacao.SetBD(ConBD);
umItemEscalacao.Materializar (CodJogo, FieldByName('CodJogador').asInteger,
EquipeFora.GetCodEquipe);
if FieldByName('Status').asString = 'T' then begin
NumTitTF := NumTitTF + 1;
end else begin
NumSubstTF := NumSubstTF + 1;
end;
EscalacaoTF[NumTitTF+NumSubstTF] := umItemEscalacao;
Next;
end;
end;
end;
procedure TJogo.MaterializarLancesJogo;
var
SQL: String;
umLanceJogo: TLanceJogo;
begin
NumLancesJogo := 0;
NumLancesGolsTC := 0;
NumLancesGolsTF := 0;
SQL := 'Select COUNT(*) from LANCEPARTIDA where ((CODEQUIPELANCE=' +
IntToStr(EquipeCasa.GetCodEquipe) + ') and ';
SQL := SQL + '((TIPOLANCE=1) or (TIPOLANCE=2) or (TIPOLANCE=3))) and CodJogo=' +
IntToStr(CodJogo);
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
NumLancesGolsTC := FieldByName('COUNT').asInteger;
end;
SQL := 'Select COUNT(*) from LANCEPARTIDA where ((CODEQUIPELANCE=' +
IntToStr(EquipeFora.GetCodEquipe) + ') and ';
SQL := SQL + '((TIPOLANCE=1) or (TIPOLANCE=2) or (TIPOLANCE=3))) and CodJogo=' +
IntToStr(CodJogo);;
121
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
NumLancesGolsTF := FieldByName('COUNT').asInteger;
end;
SQL := 'Select * from LANCEPARTIDA where CODJOGO=' + IntToStr(CodJogo);
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
while not eof do begin
umLanceJogo := TLanceJogo.Create; umLanceJogo.SetBD(ConBD);
umLanceJogo.Materializar(FieldByName('CodLancePartida').asInteger);
NumLancesJogo := NumLancesJogo + 1;
LancesJogo[NumLancesJogo] := umLanceJogo;
Next;
end;
end;
end;
function TJogo.NovoJogo (codEstTemp: Integer; var umTimeCasa, umTimeFora: TEquipe;
umaDataHoraJogo: TDateTime;
var umArbitro: TArbitro; var umEstadio: TEstadio; umRealizado,
osGolsTimeCasa, osGolsTimeFora,
umProrrogacao, osGolsTimeCasaProrrog, osGolsTimeForaProrrog,
umPenaltis, osGolsTimeCasaPen,
osGolsTimeForaPen, umPublico, osChutesTimeCasa,
osChutesTimeFora, osImpedTimeCasa,
osImpedTimeFora, osFaltasTimeCasa, osFaltasTimeFora,
osEscanteiosTimeCasa,
osEscanteiosTimeFora: Integer; umaNoticia, umaTV: String; var
Foto1, Foto2: TMemoryStream;
PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog, PtsDerProrrog,
PtsVitPen, PtsDerPen: Integer) : boolean;
var
SQL: String;
begin
Self.CalcularJogo (codEstTemp, umTimeCasa, umTimeFora, umaDataHoraJogo, umArbitro,
umEstadio, umRealizado,
osGolsTimeCasa, osGolsTimeFora, umProrrogacao,
osGolsTimeCasaProrrog,
osGolsTimeForaProrrog, umPenaltis, osGolsTimeCasaPen,
osGolsTimeForaPen, umPublico,
osChutesTimeCasa, osChutesTimeFora, osImpedTimeCasa,
osImpedTimeFora, osFaltasTimeCasa,
osFaltasTimeFora, osEscanteiosTimeCasa, osEscanteiosTimeFora,
umaNoticia, umaTV,
PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog, PtsDerProrrog,
PtsVitPen, PtsDerPen);
BD.SQLDtStDados.CommandText := 'SELECT OID FROM GERADOR';
with BD.ClntDtStDados do begin
Close;
Open;
First;
CodJogo := FieldByName('OID').asInteger;
end;
BD.SQLDtStDados.CommandText := 'UPDATE GERADOR SET OID = OID + 1;';
BD.SQLDtStDados.ExecSQL();
ClassificacaoTimeCasa := TClassificacao.create; ClassificacaoTimeCasa.SetBD(ConBD);
ClassificacaoTimeFora := TClassificacao.create; ClassificacaoTimeFora.SetBD(ConBD);
ClassificacaoTimeCasa.NovaClassificacao (CodEstTemp, umaDataHoraJogo, EquipeCasa,
umRealizado,
osGolsTimeCasa, osGolsTimeFora, umProrrogacao,
osGolsTimeCasaProrrog,
osGolsTimeForaProrrog, umPenaltis, osGolsTimeCasaPen,
osGolsTimeForaPen,
umPublico, 'C', PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog,
PtsDerProrrog,
PtsVitPen, PtsDerPen);
ClassificacaoTimeFora.NovaClassificacao (CodEstTemp, umaDataHoraJogo, EquipeFora,
umRealizado,
osGolsTimeFora, osGolsTimeCasa, umProrrogacao,
osGolsTimeForaProrrog,
122
123
124
125
umItemEscalacao: TItemEscalacao;
Jogador: TJogador;
begin
umItemEscalacao := TItemEscalacao.Create; umItemEscalacao.SetBD(ConBD);
if EquipeCasa.GetCodEquipe = umCodEquipe then begin
Jogador := EquipeCasa.GetJogador(umCodJogador);
umItemEscalacao.Escalacao(CodJogo, EquipeCasa.GetCodEquipe, TempoJogado, Jogador,
'T');
NumTitTC := NumTitTC + 1;
EscalacaoTC[NumTitTC+ NumSubstTC] := umItemEscalacao;
end else begin
Jogador := EquipeFora.GetJogador(umCodJogador);
umItemEscalacao.Escalacao(CodJogo, EquipeFora.GetCodEquipe, TempoJogado, Jogador,
'T');
NumTitTF := NumTitTF + 1;
EscalacaoTF[NumTitTF+ NumSubstTF] := umItemEscalacao;
end;
end;
procedure TJogo.RemoverEscalacaoJogador (umCodEquipe, umCodJogador: Integer);
var
i, k: Integer;
Achou: boolean;
begin
Achou := false;
i := 1;
if EquipeCasa.GetCodEquipe = umCodEquipe then begin
k := NumTitTC + NumSubstTC;
while (i <= k) and not Achou do begin
if EscalacaoTC[i].GetCodJogador = umCodJogador then begin
Achou := True;
EscalacaoTC[i].RemoverEscalacao;
Self.MaterializarEscalacao;
end;
i := i + 1;
end;
end else begin
k := NumTitTF + NumSubstTF;
while (i <= k) and not Achou do begin
if EscalacaoTF[i].GetCodJogador = umCodJogador then begin
Achou := True;
EscalacaoTF[i].RemoverEscalacao;
Self.MaterializarEscalacao;
end;
i := i + 1;
end;
end;
end;
procedure TJogo.PromoverSubst (umCodEquipe, CodJogadorSaiu, TempoJogadoSaiu,
CodJogadorEntrou, TempoJogadoEntrou, MinutoSubst: Integer);
var
umItemEscalacao: TItemEscalacao;
Jogador: TJogador;
i, k: Integer;
achou: boolean;
JogadorEntrou: TJogador;
begin
achou := false;
i := 1;
if EquipeCasa.GetCodEquipe = umCodEquipe then begin
k := NumTitTC + NumSubstTC;
while (i <= k) and not achou do begin
if EscalacaoTC[i].GetCodJogador = CodJogadorSaiu then begin
achou := true;
JogadorEntrou := EquipeCasa.GetJogador(CodJogadorEntrou);
EscalacaoTC[i].Substituicao (TempoJogadoSaiu, MinutoSubst, JogadorEntrou);
umItemEscalacao := TItemEscalacao.Create; umItemEscalacao.SetBD(ConBD);
umItemEscalacao.Escalacao(CodJogo, EquipeCasa.GetCodEquipe, TempoJogadoEntrou,
JogadorEntrou, 'R');
NumSubstTC := NumSubstTC + 1;
EscalacaoTC[NumTitTC+ NumSubstTC] := umItemEscalacao;
end;
i := i + 1;
end;
end else begin
k := NumTitTF + NumSubstTF;
126
127
end
end;
end;
procedure TJogo.IncluirLancePartida (umCodEquipeLance, umCodEquipeJogador, CodJogador,
TipoLance, Minuto: Integer);
var
umLanceJogo: TLanceJogo;
begin
umLanceJogo := TLanceJogo.Create; umLanceJogo.SetBD(ConBD);
if umCodEquipeLance = EquipeCasa.GetCodEquipe then begin
// Se Equipe Casa
if ((TipoLance=1) or (TipoLance=2)) then begin //Se Gol a Favor
if GolsTimeCasa + GolsTimeCasaProrrogacao > NumLancesGolsTC then begin // Se
possui gols
umLanceJogo.NovoLancePartida (CodJogo, EquipeCasa, EquipeCasa, CodJogador,
TipoLance, Minuto);
NumLancesGolsTC := NumLancesGolsTC + 1;
end;
end else begin
if TipoLance=3 then begin
// se gol contra
if GolsTimeFora + GolsTimeForaProrrogacao > NumLancesGolsTF then begin // Se
possui gols
umLanceJogo.NovoLancePartida (CodJogo, EquipeFora, EquipeCasa, CodJogador,
TipoLance, Minuto);
NumLancesGolsTF := NumLancesGolsTF + 1;
end;
end else begin
// Se Carto
umLanceJogo.NovoLancePartida (CodJogo, EquipeCasa, EquipeCasa, CodJogador,
TipoLance, Minuto);
end;
end;
NumLancesJogo := NumLancesJogo + 1;
LancesJogo[NumLancesJogo] := umLanceJogo;
end else begin
if ((TipoLance=1) or (TipoLance=2)) then begin //Se Gol a Favor
if GolsTimeFora + GolsTimeForaProrrogacao > NumLancesGolsTF then begin // Se
possui gols
umLanceJogo.NovoLancePartida (CodJogo, EquipeFora, EquipeFora, CodJogador,
TipoLance, Minuto);
NumLancesGolsTF := NumLancesGolsTF + 1;
end;
end else begin
if TipoLance=3 then begin
// se gol contra
if GolsTimeCasa + GolsTimeCasaProrrogacao > NumLancesGolsTC then begin // Se
possui gols
umLanceJogo.NovoLancePartida (CodJogo, EquipeCasa, EquipeFora, CodJogador,
TipoLance, Minuto);
NumLancesGolsTC := NumLancesGolsTC + 1;
end;
end else begin
// Se Carto
umLanceJogo.NovoLancePartida (CodJogo, EquipeFora, EquipeFora, CodJogador,
TipoLance, Minuto);
end;
end;
NumLancesJogo := NumLancesJogo + 1;
LancesJogo[NumLancesJogo] := umLanceJogo;
end;
end;
procedure TJogo.ExcluirLancePartida (umCodLance: Integer);
var
i, y: Integer;
achou: Boolean;
begin
i := 1;
achou := false;
while ((i <= NumLancesJogo) and (achou = false)) do begin
if LancesJogo[i].GetCodLancePartida = umCodLance then begin
if ((LancesJogo[i].GetTipoLance=1) or (LancesJogo[i].GetTipoLance=2) or
(LancesJogo[i].GetTipoLance=3)) then begin
if LancesJogo[i].GetCodEquipeLance = EquipeCasa.GetCodEquipe then begin
NumLancesGolsTC := NumLancesGolsTC - 1;
end else begin
NumLancesGolsTF := NumLancesGolsTF - 1;
end;
end;
LancesJogo[i].ExcluirLancePartida;
128
achou := true;
for y := i+1 to NumLancesJogo do begin
LancesJogo[y-1] := LancesJogo[y];
end;
NumLancesJogo := NumLancesJogo - 1;
end;
i := i + 1;
end;
end;
function TJogo.GetNumLancesGolsTC : Integer;
begin
GetNumLancesGolsTC := NumLancesGolsTC;
end;
function TJogo.GetNumLancesGolsTF : Integer;
begin
GetNumLancesGolsTF := NumLancesGolsTF;
end;
function TJogo.GetGolsTimeCasa : Integer;
begin
GetGolsTimeCasa := GolsTimeCasa;
end;
function TJogo.GetGolsTimeFora : Integer;
begin
GetGolsTimeFora := GolsTimeFora;
end;
function TJogo.GetGolsTimeCasaProrrogacao: Integer;
begin
GetGolsTimeCasaProrrogacao := GolsTimeCasaProrrogacao;
end;
function TJogo.GetGolsTimeForaProrrogacao: Integer;
begin
GetGolsTimeForaProrrogacao := GolsTimeForaProrrogacao;
end;
end.
========================================================================================
====
ARQUIVO: UJogador.pas
========================================================================================
====
unit UJogador;
interface
Uses
UDMDados, SysUtils, Borland.Vcl.Classes, Borland.Vcl.DBXpress, UMeuUtils,
Borland.Vcl.Db, UDMClasses;
type
TJogador = class
protected
conBD: TDtMdlDados;
BD: TDtMdlClasses;
MeusUtils: TMeusUtils;
CodJogador: Integer;
CodTemporada: Integer;
CodEquipe: Integer;
ApelidoJogador: String;
NomeJogador: String;
NumeroCamisa: Integer;
DataNascimento: TDateTime;
Nacionalidade: String;
Posicao: Integer; //1: Gol/2: Lat/3: Zag/4: MC/5: ATA
Status: String; // 'A': Ativo / 'V': Vendido
EMail: String;
public
constructor Create; Overload;
procedure SetBD (var umaConBD: TDtMdlDados);
procedure Materializar (umCodJogador, umCodEquipe: Integer);
129
130
131
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
NumAtuacoes := FieldByName('COUNT').asInteger;
end;
if NumAtuacoes > 0 then begin
PossuiAtuacoes := True;
end else begin
PossuiAtuacoes := False;
end;
end;
end;
function TJogador.GetCodJogador;
begin
GetCodJogador := CodJogador;
end;
destructor TJogador.Destroy;
begin
inherited;
BD.Destroy;
MeusUtils.Free;
end;
end.
========================================================================================
====
ARQUIVO: UItemEscalacao.pas
========================================================================================
====
unit UItemEscalacao;
interface
Uses
UDMDados, SysUtils, Borland.Vcl.Classes, Borland.Vcl.DBXpress, UMeuUtils,
Borland.Vcl.Db, UDMClasses, UJogador;
type
TItemEscalacao = class
protected
conBD: TDtMdlDados;
BD: TDtMdlClasses;
MeusUtils : TMeusUtils;
CodJogo: Integer;
CodEquipe: Integer;
Jogador: TJogador;
TempoJogado: Integer;
MinutoSubstituicao: Integer;
JogadorEntrou: TJogador;
Status: String; // T: Titular // R: Reserva
Saiu: String; // S: Foi Substituido // N: No foi substituido
public
constructor Create; Overload;
procedure SetBD (var umaConBD: TDtMdlDados);
procedure Materializar (umCodJogo, umCodJogador, umCodEquipe: Integer);
procedure Escalacao (umCodJogo, umCodEquipe, oTempoJogado: Integer; var umJogador:
TJogador; umStatus: String);
procedure Substituicao (oTempoJogado, oMinutoSubst: Integer; var umJogadorEntrou:
TJogador);
procedure DesfazerSubstituicao (oTempoJogado: Integer);
procedure RemoverEscalacao;
function GetCodJogador : Integer;
destructor Destroy; Override;
end;
implementation
constructor TItemEscalacao.Create;
begin
inherited;
MeusUtils := TMeusUtils.Create;
132
end;
procedure TItemEscalacao.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
BD := TDtMdlClasses.create(nil);
BD.SetConexaoBD (conBD)
end;
procedure TItemEscalacao.Materializar (umCodJogo, umCodJogador, umCodEquipe: Integer);
begin
BD.SQLDtStDados.CommandText := 'SELECT * FROM ESCALACAOJOGO WHERE CODJOGO=' +
IntToStr(umCodJogo) + ' AND CODJOGADOR=' + IntToStr(umCodJogador) + ' AND CODEQUIPE=' +
IntToStr(umCodEquipe);
with BD.ClntDtStDados do begin
Close;
Open;
First;
CodJogo := FieldByName('CodJogo').asInteger;
CodEquipe := FieldByName('CodEquipe').asInteger;
Jogador := TJogador.Create; Jogador.SetBD(ConBD);
Jogador.Materializar(FieldByName('CodJogador').asInteger,
FieldByName('CodEquipe').asInteger);
TempoJogado := FieldByName('TempoJogado').asInteger;
Status := FieldByName('Status').asString;
Saiu := FieldByName('Saiu').asString;
if Saiu = 'S' then begin
JogadorEntrou := TJogador.Create; JogadorEntrou.SetBD(ConBD);
JogadorEntrou.Materializar(FieldByName('CodJogadorEntrou').asInteger,
FieldByName('CodEquipe').asInteger);
MinutoSubstituicao := FieldByName('MinutoSubstituicao').asInteger;
end;
end;
end;
procedure TItemEscalacao.Escalacao (umCodJogo, umCodEquipe, oTempoJogado: Integer; var
umJogador: TJogador; umStatus: String);
var
SQL: String;
begin
CodJogo := umCodJogo;
CodEquipe := umCodEquipe;
Jogador := umJogador;
TempoJogado := oTempoJogado;
Status := umStatus;
Saiu := 'N';
SQL := 'INSERT INTO ESCALACAOJOGO (CODJOGO, CODEQUIPE, CODJOGADOR, TEMPOJOGADO,
STATUS, SAIU) VALUES (';
SQL := SQL + IntToStr(CodJogo) + ', ';
SQL := SQL + IntToStr(CodEquipe) + ', ';
SQL := SQL + IntToStr(Jogador.GetCodJogador) + ', ';
SQL := SQL + IntToStr(TempoJogado) + ', ';
SQL := SQL + '''' + Status + ''', ';
SQL := SQL + '''' + Saiu + ''')';
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ExecSQL();
end;
procedure TItemEscalacao.Substituicao (oTempoJogado, oMinutoSubst: Integer; var
umJogadorEntrou: TJogador);
var
SQL: String;
begin
JogadorEntrou := umJogadorEntrou;
TempoJogado := oTempoJogado;
MinutoSubstituicao := oMinutoSubst;
Saiu := 'S';
SQL := 'UPDATE ESCALACAOJOGO SET ';
SQL := SQL + 'CODJOGADORENTROU=' + IntToStr(JogadorEntrou.GetCodJogador) + ', ';
SQL := SQL + 'SAIU=''' + Saiu + ''', ';
SQL := SQL + 'TEMPOJOGADO=' + IntToStr(TempoJogado) + ', ';
SQL := SQL + 'MINUTOSUBSTITUICAO=' + IntToStr(MinutoSubstituicao) + ' ';
SQL := SQL + 'WHERE CODJOGO=' + IntToStr(CodJogo) + ' AND CODJOGADOR=' +
IntToStr(Jogador.GetCodJogador);
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ExecSQL();
end;
133
Type
TItemCombo = class
protected
Nome: String;
Oid, Oid2: Integer;
Imagem: TStream;
public
function GetOid: Integer;
procedure SetOid(Value: Integer);
function GetOid2: Integer;
procedure SetOid2(Value: Integer);
function GetNome: String;
procedure SetNome(Value: String);
134
implementation
{ TItemCombo }
function TItemCombo.GetNome: String;
begin
GetNome := Nome;
end;
function TItemCombo.GetOid: Integer;
begin
GetOid := Oid;
end;
function TItemCombo.GetOid2: Integer;
begin
GetOid2 := Oid2;
end;
procedure TItemCombo.SetNome(Value: String);
begin
Nome := Value;
end;
procedure TItemCombo.SetOid(Value: Integer);
begin
Oid := Value;
end;
procedure TItemCombo.SetOid2(Value: Integer);
begin
Oid2 := Value;
end;
destructor TItemCombo.Destroy;
begin
inherited;
Imagem.Free;
end;
end.
========================================================================================
====
ARQUIVO: UITabClassificacao.pas
========================================================================================
====
unit UITabClassificacao;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FMTBcd, Borland.Vcl.Db, Borland.Vcl.DBClient,
Borland.Vcl.Provider, Borland.Vcl.SqlExpr, System.ComponentModel,
Borland.Vcl.Grids, Borland.Vcl.DBGrids, Borland.Vcl.StdCtrls,
Borland.Vcl.Buttons, Borland.Vcl.ExtCtrls, Borland.Vcl.ComCtrls, UTemporada,
UDMDados, UDMITabClassificacao, UItemCombo;
type
TFrmTabClassificacao = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
StrGrdClass: TStringGrid;
PnlClassificacao: TPanel;
DBGrdGrupos: TDBGrid;
Panel3: TPanel;
Panel4: TPanel;
DBGrdFases: TDBGrid;
BtnFechar: TBitBtn;
DBGrdJogos: TDBGrid;
135
Panel1: TPanel;
CmbBxEquipe: TComboBox;
Panel2: TPanel;
Panel7: TPanel;
ImgTime: TImage;
RdGrpOrdem: TRadioGroup;
ChckBxTodosGrupos: TCheckBox;
ChckBxTodasFases: TCheckBox;
RdGrpResultado: TRadioGroup;
PnlJgsEquipe: TPanel;
StrGrdCampanha: TStringGrid;
BtnTodos: TButton;
BtnCasa: TButton;
BtnFora: TButton;
Button1: TButton;
Button2: TButton;
Button3: TButton;
RdGrpTabelaJgs: TRadioGroup;
TabSheet3: TTabSheet;
StrGrdEstatTemp: TStringGrid;
Panel5: TPanel;
procedure FormCreate(Sender: TObject);
procedure StrGrdClassDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure BtnFecharClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DBGrdFasesCellClick(Column: TColumn);
procedure DBGrdGruposCellClick(Column: TColumn);
procedure BtnTodosClick(Sender: TObject);
procedure BtnCasaClick(Sender: TObject);
procedure BtnForaClick(Sender: TObject);
procedure ChckBxTodosGruposClick(Sender: TObject);
procedure ChckBxTodasFasesClick(Sender: TObject);
procedure RdGrpOrdemClick(Sender: TObject);
procedure CmbBxEquipeChange(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure StrGrdCampanhaDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
{ Private declarations }
Temporada: TTemporada;
BD: TDtMdlITabClassificacao;
TotalClass, Promovido, Compet1, Compet2, PORebaixamento, Rebaixado : Integer;
SQLSelect, SQLWhere, SQLGroupBy, SQLOrderBy: String;
TipoClass, PnlTabJgs, PnlResJgs: String;
public
{ Public declarations }
procedure SetBD (var conBD: TDtMdlDados);
procedure Mostrar (Temp: TTemporada);
procedure AtualizarFases;
procedure AtualizarGrupos;
procedure AtualizarClassificacao;
procedure AtualizarSQLClassificacao;
procedure CarregarComboCampanha;
procedure AtualizarCampanha;
procedure AtualizarEstatTemp;
end;
var
FrmTabClassificacao: TFrmTabClassificacao;
implementation
{$R *.nfm}
procedure TFrmTabClassificacao.SetBD (var conBD: TDtMdlDados);
begin
BD := TDtMdlITabClassificacao.Create(nil);
BD.SetConexaoBD(conBD);
end;
136
Self.AtualizarFases;
Self.ShowModal;
end;
procedure TFrmTabClassificacao.AtualizarCampanha;
var
i: Integer;
begin
SQLSelect := 'select * from Equipe EC, Equipe EF, JOGO J, ESTRUTURATEMPORADA ET ';
SQLWhere := 'WHERE J.CodEquipeCasa=EC.CodEquipe and J.CodEquipeFora=EF.CodEquipe ';
SQLWhere := SQLWhere + 'and J.CODESTRUTURATEMPORADA=ET.CODESTRUTURATEMPORADA ';
if ChckBxTodosGrupos.Checked = False then begin
SQLWhere := SQLWhere + ' AND ET.CODGRUPO=' +
BD.ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsString;
end else begin
if ChckBxTodasFases.Checked = False then begin
SQLWhere := SQLWhere + ' AND ET.CODFASE=' +
BD.ClntDtStFases.FieldByName('CodEstruturaTemporada').AsString;
end else begin
SQLWhere := SQLWhere + ' AND ET.CODTEMPORADA=' +
IntToStr(Temporada.GetCodTemporada);
end;
end;
if TipoClass = 'todos' then begin
case RdGrpResultado.ItemIndex of
0: SQLWhere := SQLWhere + ' AND (J.CODEQUIPECASA=:CodEquipe or
J.CODEQUIPEFORA=:CodEquipe) ';
1: SQLWhere := SQLWhere + ' AND ((J.CODEQUIPECASA=:CodEquipe and
J.GOLSTIMECASA>J.GOLSTIMEFORA) or (J.CODEQUIPEFORA=:CodEquipe AND
J.GOLSTIMEFORA>J.GOLSTIMECASA)) ';
2: SQLWhere := SQLWhere + ' AND ((J.CODEQUIPECASA=:CodEquipe and
J.GOLSTIMECASA=J.GOLSTIMEFORA) or (J.CODEQUIPEFORA=:CodEquipe AND
J.GOLSTIMEFORA=J.GOLSTIMECASA)) ';
3: SQLWhere := SQLWhere + ' AND ((J.CODEQUIPECASA=:CodEquipe and
J.GOLSTIMECASA<J.GOLSTIMEFORA) or (J.CODEQUIPEFORA=:CodEquipe AND
J.GOLSTIMEFORA<J.GOLSTIMECASA)) ';
end;
case RdGrpTabelaJgs.ItemIndex of
1: SQLWhere := SQLWhere + ' and J.REALIZADO=1 ';
2: SQLWhere := SQLWhere + ' and J.REALIZADO=0 ';
end;
end else begin
if TipoClass = 'casa' then begin
case RdGrpResultado.ItemIndex of
0: SQLWhere := SQLWhere + ' AND J.CODEQUIPECASA=:CodEquipe ';
1: SQLWhere := SQLWhere + ' AND J.CODEQUIPECASA=:CodEquipe and
J.GOLSTIMECASA>J.GOLSTIMEFORA ';
2: SQLWhere := SQLWhere + ' AND J.CODEQUIPECASA=:CodEquipe and
J.GOLSTIMECASA=J.GOLSTIMEFORA AND J.REALIZADO=1 ';
3: SQLWhere := SQLWhere + ' AND J.CODEQUIPECASA=:CodEquipe and
J.GOLSTIMECASA<J.GOLSTIMEFORA ';
end;
end else begin
case RdGrpResultado.ItemIndex of
0: SQLWhere := SQLWhere + ' AND J.CODEQUIPEFORA=:CodEquipe ';
1: SQLWhere := SQLWhere + ' AND J.CODEQUIPEFORA=:CodEquipe and
J.GOLSTIMEFORA>J.GOLSTIMECASA ';
2: SQLWhere := SQLWhere + ' AND J.CODEQUIPEFORA=:CodEquipe and
J.GOLSTIMEFORA=J.GOLSTIMECASA AND J.REALIZADO=1 ';
3: SQLWhere := SQLWhere + ' AND J.CODEQUIPEFORA=:CodEquipe and
J.GOLSTIMEFORA<J.GOLSTIMECASA ';
end;
end;
end;
SQLOrderBy := ' order by J.DataHoraJogo';
BD.SQLDtStJogos.CommandText := SQLSelect + SQLWhere + SQLOrderBy;
BD.SQLDtStJogos.ParamByName('CodEquipe').AsInteger :=
TItemCombo(CmbBxEquipe.Items.Objects[CmbBxEquipe.ItemIndex]).GetOid;
BD.ClntDtStJogos.Close;
BD.ClntDtStJogos.Open;
BD.ClntDtStJogos.First;
//STRGRID CAMPANHA
for i:= 1 to 3 do begin
SQLSelect := 'Select SUM(C.PONTOS) PTS, SUM(C.JOGOS) JGS, SUM(C.VITORIA) VIT,
SUM(C.EMPATE) EMP, ';
SQLSelect := SQLSelect + 'SUM(C.DERROTA) DER, SUM(GOLSPRO) GP, SUM(GOLSCONTRA) GC,
';
137
138
StrGrdCampanha.Cells[i,13] := '';
end;
end;
end;
procedure TFrmTabClassificacao.AtualizarEstatTemp;
var
i: Integer;
begin
//STRGRID CAMPANHA
for i:= 1 to 3 do begin
SQLSelect := 'Select SUM(C.PONTOS) PTS, SUM(C.JOGOS) JGS, SUM(C.VITORIA) VIT,
SUM(C.EMPATE) EMP, ';
SQLSelect := SQLSelect + 'SUM(C.DERROTA) DER, SUM(GOLSPRO) GP, SUM(GOLSCONTRA) GC,
';
SQLSelect := SQLSelect + 'SUM(C.SALDOGOLS) SG, E.NOMEEQUIPE from CLASSIFICACAO C,
EQUIPE E, ';
SQLSelect := SQLSelect + 'ESTRUTURATEMPORADA ET ';
SQLWhere := 'where C.REALIZADO=1 AND C.CODEQUIPE=:CODEQUIPE AND
C.CODEQUIPE=E.CODEQUIPE AND ';
SQLWhere := SQLWhere + 'C.CODESTRUTURATEMPORADA=ET.CODESTRUTURATEMPORADA AND ';
if i=1 then SQLWhere := SQLWhere + ' C.LOCAL=''C'' AND ';
if i=2 then SQLWhere := SQLWhere + ' C.LOCAL=''F'' AND ';
if ChckBxTodosGrupos.Checked = False then begin
SQLWhere := SQLWhere + '(ET.CODGRUPO=' +
BD.ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsString;
SQLWhere := SQLWhere + ' or ET.CODESTRUTURATEMPORADA=' +
BD.ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsString + ') ';
end else begin
if ChckBxTodasFases.Checked = False then begin
SQLWhere := SQLWhere + ' ET.CODFASE=' +
BD.ClntDtStFases.FieldByName('CodEstruturaTemporada').AsString;
end else begin
SQLWhere := SQLWhere + ' ET.CODTEMPORADA=' +
IntToStr(Temporada.GetCodTemporada);
end;
end;
SQLGroupBy := 'group by E.NOMEEQUIPE ';
BD.SQLDtStDados.CommandText := SQLSelect + SQLWhere + SQLGroupBy;
BD.SQLDtStDados.ParamByName('CodEquipe').AsInteger :=
TItemCombo(CmbBxEquipe.Items.Objects[CmbBxEquipe.ItemIndex]).GetOid;
BD.ClntDtStDados.Close;
BD.ClntDtStDados.Open;
BD.ClntDtStDados.First;
if not BD.ClntDtStDados.EOF then begin
StrGrdCampanha.Cells[i,1] := BD.ClntDtStDados.FieldByName('PTS').asString;
if BD.ClntDtStDados.FieldByName('JGS').asInteger > 0 then begin
StrGrdCampanha.Cells[i,2] := FormatFloat ('0.0', 100 *
BD.ClntDtStDados.FieldByName('PTS').asInteger /
(BD.ClntDtStDados.FieldByName('JGS').asInteger * Temporada.GetPontosVitoria)) + '%';
StrGrdCampanha.Cells[i,6] := FormatFloat ('0.0', 100 *
BD.ClntDtStDados.FieldByName('VIT').AsInteger /
BD.ClntDtStDados.FieldByName('JGS').asInteger) + '%';
StrGrdCampanha.Cells[i,7] := FormatFloat ('0.0', 100 *
BD.ClntDtStDados.FieldByName('EMP').AsInteger /
BD.ClntDtStDados.FieldByName('JGS').asInteger) + '%';
StrGrdCampanha.Cells[i,8] := FormatFloat ('0.0', 100 *
BD.ClntDtStDados.FieldByName('DER').AsInteger /
BD.ClntDtStDados.FieldByName('JGS').asInteger) + '%';
StrGrdCampanha.Cells[i,11] := FormatFloat ('0.0',
BD.ClntDtStDados.FieldByName('GP').AsInteger /
BD.ClntDtStDados.FieldByName('JGS').asInteger);
StrGrdCampanha.Cells[i,12] := FormatFloat ('0.0',
BD.ClntDtStDados.FieldByName('GC').AsInteger /
BD.ClntDtStDados.FieldByName('JGS').asInteger);
end else begin
StrGrdCampanha.Cells[i,2] := '0,0%';
StrGrdCampanha.Cells[i,6] := '0';
StrGrdCampanha.Cells[i,7] := '0';
StrGrdCampanha.Cells[i,8] := '0';
StrGrdCampanha.Cells[i,11] := '0,0';
StrGrdCampanha.Cells[i,12] := '0,0';
end;
StrGrdCampanha.Cells[i,3] := BD.ClntDtStDados.FieldByName('VIT').asString;
StrGrdCampanha.Cells[i,4] := BD.ClntDtStDados.FieldByName('EMP').asString;
StrGrdCampanha.Cells[i,5] := BD.ClntDtStDados.FieldByName('DER').asString;
StrGrdCampanha.Cells[i,9] := BD.ClntDtStDados.FieldByName('GP').asString;
139
StrGrdCampanha.Cells[i,10] := BD.ClntDtStDados.FieldByName('GC').asString;
StrGrdCampanha.Cells[i,13] := BD.ClntDtStDados.FieldByName('SG').asString;
end else begin
StrGrdCampanha.Cells[i,1] := '';
StrGrdCampanha.Cells[i,2] := '';
StrGrdCampanha.Cells[i,3] := '';
StrGrdCampanha.Cells[i,4] := '';
StrGrdCampanha.Cells[i,5] := '';
StrGrdCampanha.Cells[i,6] := '';
StrGrdCampanha.Cells[i,7] := '';
StrGrdCampanha.Cells[i,8] := '';
StrGrdCampanha.Cells[i,9] := '';
StrGrdCampanha.Cells[i,10] := '';
StrGrdCampanha.Cells[i,11] := '';
StrGrdCampanha.Cells[i,12] := '';
StrGrdCampanha.Cells[i,13] := '';
end;
end;
end;
procedure TFrmTabClassificacao.CarregarComboCampanha;
var
SQL: String;
ItemCombo: TItemCombo;
begin
BD.SQLDtStEquipeDisputaTemp.ParamByName('CodTemp').AsInteger :=
Temporada.GetCodTemporada;
with BD.ClntDtStEquipeDisputaTemp do begin
Close;
Open;
First;
ImgTime.Picture.Bitmap.LoadFromStream(CreateBlobStream(FieldByName('Escudo'),bmRead));
while not eof do begin
ItemCombo := TItemCombo.Create;
ItemCombo.SetOid(FieldByName('CodEquipe').AsInteger);
CmbBxEquipe.Items.AddObject(FieldByName('NomeEquipe').asString, ItemCombo);
ItemCombo.Free;
Next;
end;
CmbBxEquipe.ItemIndex := 0;
end;
end;
procedure TFrmTabClassificacao.AtualizarFases;
begin
BD.SQLDtStFases.ParamByName('codTemp').AsInteger := Temporada.GetCodTemporada;
BD.ClntDtStFases.Close;
BD.ClntDtStFases.Open;
BD.ClntDtStFases.First;
Self.AtualizarGrupos;
end;
procedure TFrmTabClassificacao.AtualizarGrupos;
begin
BD.SQLDtStGrupos.ParamByName('CodFase').AsInteger :=
BD.ClntDtStFases.FieldByName('CodEstruturaTemporada').AsInteger;
BD.ClntDtStGrupos.Close;
BD.ClntDtStGrupos.Open;
BD.ClntDtStGrupos.First;
Self.AtualizarClassificacao;
end;
procedure TFrmTabClassificacao.AtualizarClassificacao;
var
i: Integer;
Aprov: Double;
begin
Self.AtualizarSQLClassificacao;
BD.ClntDtStClassificacao.Close;
BD.ClntDtStClassificacao.Open;
BD.ClntDtStClassificacao.Last;
i := 1;
StrGrdClass.RowCount := 2;
StrGrdClass.Cells[0,1] := '';
StrGrdClass.Cells[1,1] := '';
StrGrdClass.Cells[2,1] := '';
140
StrGrdClass.Cells[3,1] := '';
StrGrdClass.Cells[4,1] := '';
StrGrdClass.Cells[5,1] := '';
StrGrdClass.Cells[6,1] := '';
StrGrdClass.Cells[7,1] := '';
StrGrdClass.Cells[8,1] := '';
StrGrdClass.Cells[9,1] := '';
StrGrdClass.Cells[10,1] := '';
Promovido := Temporada.GetNumTimePromovido;
Compet1 := Temporada.GetNumTimeCompet1;
Compet2 := Temporada.GetNumTimeCompet2;
PORebaixamento := Temporada.GetNumTimePORebaixamento;
Rebaixado := Temporada.GetNumTimeRebaixado;
while not BD.ClntDtStClassificacao.Bof do begin
StrGrdClass.RowCount := i + 1;
StrGrdClass.Cells[0,i] := IntToStr(i) + '';
StrGrdClass.Cells[1,i] :=
BD.ClntDtStClassificacao.FieldByName('NomeEquipe').asString;
StrGrdClass.Cells[2,i] := BD.ClntDtStClassificacao.FieldByName('PTS').asString;
StrGrdClass.Cells[3,i] := BD.ClntDtStClassificacao.FieldByName('JGS').asString;
StrGrdClass.Cells[4,i] := BD.ClntDtStClassificacao.FieldByName('VIT').asString;
StrGrdClass.Cells[5,i] := BD.ClntDtStClassificacao.FieldByName('EMP').asString;
StrGrdClass.Cells[6,i] := BD.ClntDtStClassificacao.FieldByName('DER').asString;
StrGrdClass.Cells[7,i] := BD.ClntDtStClassificacao.FieldByName('GP').asString;
StrGrdClass.Cells[8,i] := BD.ClntDtStClassificacao.FieldByName('GC').asString;
StrGrdClass.Cells[9,i] := BD.ClntDtStClassificacao.FieldByName('SG').asString;
if BD.ClntDtStClassificacao.FieldByName('JGS').asInteger <> 0 then begin
Aprov := (BD.ClntDtStClassificacao.FieldByName('PTS').asInteger /
(BD.ClntDtStClassificacao.FieldByName('JGS').asInteger * Temporada.GetPontosVitoria)) *
100;
Aprov := Trunc(Aprov*10.0)/10.0;
end else begin
Aprov := 0;
end;
StrGrdClass.Cells[10,i] := FormatFloat('0.0', Aprov);
i := i + 1;
BD.ClntDtStClassificacao.Prior;
end;
TotalClass := i;
Self.AtualizarCampanha;
end;
procedure TFrmTabClassificacao.AtualizarSQLClassificacao;
var
i: Integer;
Aprov: Double;
begin
SQLSelect := 'Select SUM(C.PONTOS) PTS, SUM(C.JOGOS) JGS, SUM(C.VITORIA) VIT,
SUM(C.EMPATE) EMP, ';
SQLSelect := SQLSelect + 'SUM(C.DERROTA) DER, SUM(GOLSPRO) GP, SUM(GOLSCONTRA) GC, ';
SQLSelect := SQLSelect + 'SUM(C.SALDOGOLS) SG, E.NOMEEQUIPE from CLASSIFICACAO C,
EQUIPE E, ';
SQLSelect := SQLSelect + 'ESTRUTURATEMPORADA ET ';
SQLWhere := 'where C.CODEQUIPE=E.CODEQUIPE AND
C.CODESTRUTURATEMPORADA=ET.CODESTRUTURATEMPORADA AND ';
if ChckBxTodosGrupos.Checked = False then begin
SQLWhere := SQLWhere + '(ET.CODGRUPO=' +
BD.ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsString;
SQLWhere := SQLWhere + ' or ET.CODESTRUTURATEMPORADA=' +
BD.ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsString + ') ';
end else begin
if ChckBxTodasFases.Checked = False then begin
SQLWhere := SQLWhere + ' ET.CODFASE=' +
BD.ClntDtStFases.FieldByName('CodEstruturaTemporada').AsString;
end else begin
SQLWhere := SQLWhere + ' ET.CODTEMPORADA=' + IntToStr(Temporada.GetCodTemporada);
end;
end;
if TipoClass = 'casa' then begin
SQLWhere := SQLWhere + ' and C.LOCAL=''C'' ';
end;
if TipoClass = 'fora' then begin
SQLWhere := SQLWhere + ' and C.LOCAL=''F'' ';
end;
SQLGroupBy := 'group by E.NOMEEQUIPE ';
case RdGrpOrdem.ItemIndex of
0: SQLOrderBy := 'order by 1 desc, ' + Temporada.GetSQLDesempate;
141
142
StrGrdClass.Canvas.Brush.Color := clRed;
StrGrdClass.Canvas.Font.Color := clWhite;
end;
end;
case RdGrpOrdem.ItemIndex of
0: begin
if (ACol=2) and (ARow > 0) then begin
StrGrdClass.Canvas.Brush.Color := clMoneyGreen;
StrGrdClass.Canvas.Font.Color := clBlack;
end;
end;
1: begin
if (ACol=4) and (ARow > 0) then begin
StrGrdClass.Canvas.Brush.Color := clMoneyGreen;
StrGrdClass.Canvas.Font.Color := clBlack;
end;
end;
2: begin
if (ACol=5) and (ARow > 0) then begin
StrGrdClass.Canvas.Brush.Color := clMoneyGreen;
StrGrdClass.Canvas.Font.Color := clBlack;
end;
end;
3: begin
if (ACol=6) and (ARow > 0) then begin
StrGrdClass.Canvas.Brush.Color := clMoneyGreen;
StrGrdClass.Canvas.Font.Color := clBlack;
end;
end;
4: begin
if (ACol=7) and (ARow > 0) then begin
StrGrdClass.Canvas.Brush.Color := clMoneyGreen;
StrGrdClass.Canvas.Font.Color := clBlack;
end;
end;
5: begin
if (ACol=8) and (ARow > 0) then begin
StrGrdClass.Canvas.Brush.Color := clMoneyGreen;
StrGrdClass.Canvas.Font.Color := clBlack;
end;
end;
6: begin
if (ACol=9) and (ARow > 0) then begin
StrGrdClass.Canvas.Brush.Color := clMoneyGreen;
StrGrdClass.Canvas.Font.Color := clBlack;
end;
end;
end;
StrGrdClass.Canvas.FillRect(Rect);
StrGrdClass.Canvas.TextOut(Rect.Left+2,Rect.Top,StrGrdClass.Cells[acol,arow]);
if (ACol<>1) then begin
Texto := StrGrdClass.Cells[ACol, ARow];
X := Rect.Right - StrGrdClass.Canvas.TextWidth(Texto) - 2;
StrGrdClass.Canvas.TextRect(Rect, X, Rect.Top+2, Texto);
if gdFocused in State then begin
StrGrdClass.Canvas.DrawFocusRect(Rect);
end;
end;
end;
procedure TFrmTabClassificacao.BtnFecharClick(Sender: TObject);
begin
Self.Close;
end;
procedure TFrmTabClassificacao.FormClose(Sender: TObject; var Action: TCloseAction);
var
i: Integer;
begin
BD.Destroy;
for i:=1 to CmbBxEquipe.Items.Count-1 do begin
TItemCombo(CmbBxEquipe.Items.Objects[i]).Destroy;
end;
end;
procedure TFrmTabClassificacao.DBGrdFasesCellClick(Column: TColumn);
begin
143
Self.AtualizarGrupos;
end;
procedure TFrmTabClassificacao.DBGrdGruposCellClick(Column: TColumn);
begin
Self.AtualizarClassificacao;
end;
procedure TFrmTabClassificacao.BtnTodosClick(Sender: TObject);
begin
TipoClass := 'todos';
PnlClassificacao.Caption := 'CLASSIFICAO (TODOS OS JOGOS)';
Self.AtualizarClassificacao;
end;
procedure TFrmTabClassificacao.BtnCasaClick(Sender: TObject);
begin
TipoClass := 'casa';
PnlClassificacao.Caption := 'CLASSIFICAO (SOMENTE JOGOS COMO ANFITRIO)';
Self.AtualizarClassificacao;
end;
procedure TFrmTabClassificacao.BtnForaClick(Sender: TObject);
begin
TipoClass := 'fora';
PnlClassificacao.Caption := 'CLASSIFICAO (SOMENTE JOGOS COMO VISITANTE)';
Self.AtualizarClassificacao;
end;
procedure TFrmTabClassificacao.ChckBxTodosGruposClick(Sender: TObject);
begin
if ChckBxTodosGrupos.Checked = True then begin
DBGrdGrupos.Enabled := False;
ChckBxTodasFases.Enabled := True;
Self.AtualizarClassificacao;
end else begin
DBGrdGrupos.Enabled := True;
ChckBxTodasFases.Checked := False;
ChckBxTodasFases.Enabled := False;
Self.AtualizarClassificacao;
end;
end;
procedure TFrmTabClassificacao.ChckBxTodasFasesClick(Sender: TObject);
begin
if ChckBxTodasFases.Checked = True then begin
DBGrdFases.Enabled := False;
Self.AtualizarClassificacao;
end else begin
DBGrdFases.Enabled := True;
Self.AtualizarClassificacao;
end;
end;
procedure TFrmTabClassificacao.RdGrpOrdemClick(Sender: TObject);
begin
Self.AtualizarClassificacao;
case RdGrpTabelaJgs.ItemIndex of
0: PnlTabJgs := 'TODOS - ';
1: PnlTabJgs := 'REALIZADOS - ';
2: PnlTabJgs := 'A REALIZAR - ';
end;
case RdGrpTabelaJgs.ItemIndex of
0: PnlResJgs := '';
1: PnlResJgs := 'VITRIAS';
2: PnlResJgs := 'EMPATES';
3: PnlResJgs := 'DERROTAS';
end;
PnlJgsEquipe.Caption := 'TABELA DE JOGOS: ' + PnlTabJgs + PnlResJgs;
end;
procedure TFrmTabClassificacao.CmbBxEquipeChange(Sender: TObject);
var
SQL: String;
begin
ImgTime.Picture.Destroy;
144
145
ClntDtStDados: TClientDataSet;
SQLDtStFases: TSQLDataSet;
DtStPrvdrFases: TDataSetProvider;
ClntDtStFases: TClientDataSet;
DtSrcFases: TDataSource;
SQLDtStGrupos: TSQLDataSet;
DtStPrvdrGrupos: TDataSetProvider;
ClntDtStGrupos: TClientDataSet;
DtSrcGrupos: TDataSource;
SQLDtStPunicoes: TSQLDataSet;
DtStPrvdrPunicoes: TDataSetProvider;
ClntDtStPunicoes: TClientDataSet;
DtSrcPunicoes: TDataSource;
ClntDtStPunicoesCODPUNICAO: TIntegerField;
ClntDtStPunicoesCODESTRUTURATEMPORADA: TIntegerField;
ClntDtStPunicoesCODEQUIPE: TIntegerField;
ClntDtStPunicoesCODCLASSIFICACAO: TIntegerField;
ClntDtStPunicoesPONTOS: TIntegerField;
ClntDtStPunicoesMOTIVO: TStringField;
ClntDtStPunicoesDATA: TDateField;
ClntDtStPunicoesCODEQUIPE_1: TIntegerField;
ClntDtStPunicoesNOMEEQUIPE: TStringField;
ClntDtStPunicoesNOMECOMPLETOEQUIPE: TStringField;
ClntDtStPunicoesDATAFUNDACAO: TDateField;
ClntDtStPunicoesCIDADE: TStringField;
ClntDtStPunicoesPAIS: TStringField;
ClntDtStPunicoesTIPOEQUIPE: TIntegerField;
ClntDtStPunicoesESCUDO: TBlobField;
ClntDtStPunicoesCODESTADIO: TIntegerField;
ClntDtStPunicoesCODESTRUTURATEMPORADA_1: TIntegerField;
ClntDtStPunicoesCODTEMPORADA: TIntegerField;
ClntDtStPunicoesNOMEESTRUTURATEMPORADA: TStringField;
ClntDtStPunicoesCODGRUPO: TIntegerField;
ClntDtStPunicoesCODFASE: TIntegerField;
SQLDtStEquipeDisputaTemp: TSQLDataSet;
DtStPrvdrEquipeDisputaTemp: TDataSetProvider;
ClntDtStEquipeDisputaTemp: TClientDataSet;
ClntDtStEquipeDisputaTempCODEQUIPE: TIntegerField;
ClntDtStEquipeDisputaTempCODTEMPORADA: TIntegerField;
ClntDtStEquipeDisputaTempCODEQUIPE_1: TIntegerField;
ClntDtStEquipeDisputaTempNOMEEQUIPE: TStringField;
ClntDtStEquipeDisputaTempNOMECOMPLETOEQUIPE: TStringField;
ClntDtStEquipeDisputaTempDATAFUNDACAO: TDateField;
ClntDtStEquipeDisputaTempCIDADE: TStringField;
ClntDtStEquipeDisputaTempPAIS: TStringField;
ClntDtStEquipeDisputaTempTIPOEQUIPE: TIntegerField;
ClntDtStEquipeDisputaTempESCUDO: TBlobField;
ClntDtStEquipeDisputaTempCODESTADIO: TIntegerField;
DtSrcEquipeDisputaTemp: TDataSource;
ClntDtStGruposCODESTRUTURATEMPORADA: TIntegerField;
ClntDtStGruposCODTEMPORADA: TIntegerField;
ClntDtStGruposNOMEESTRUTURATEMPORADA: TStringField;
ClntDtStGruposCODGRUPO: TIntegerField;
ClntDtStGruposCODFASE: TIntegerField;
BtnIncluirPunicao: TBitBtn;
BtnAlterarPunicao: TBitBtn;
BtnExcluirPunicao: TBitBtn;
procedure BtnFecharClick(Sender: TObject);
procedure EdtPtsKeyPress(Sender: TObject; var Key: Char);
procedure BtnIncluirPunicaoClick(Sender: TObject);
procedure BtnCancelarClick(Sender: TObject);
procedure BtnGravarClick(Sender: TObject);
procedure BtnAlterarPunicaoClick(Sender: TObject);
procedure BtnExcluirPunicaoClick(Sender: TObject);
procedure DBGrdFasesCellClick(Column: TColumn);
private
{ Private declarations }
conBD: TDtMdlDados;
Status: String;
Temporada: TTemporada;
CodPunicao: Integer;
NumEquipes, NumFases, NumGrupos, NumPunicoes: Integer;
procedure AtualizaPunicoes;
procedure AtualizaFases;
procedure AtualizaGrupos;
procedure AtualizaEquipes;
procedure BloqueiaFormulario;
146
procedure AtivaFormulario;
public
{ Public declarations }
procedure SetBD (var umaConBD: TDtMdlDados);
procedure Mostrar (umaTemp: TTemporada);
end;
var
FrmPunicoes: TFrmPunicoes;
implementation
{$R *.nfm}
procedure TFrmPunicoes.BtnFecharClick(Sender: TObject);
begin
Self.Close;
end;
procedure TFrmPunicoes.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
end;
procedure TFrmPunicoes.Mostrar (umaTemp: TTemporada);
begin
Temporada := umaTemp;
Temporada := umaTemp;
Self.AtualizaPunicoes;
Self.AtualizaFases;
if NumFases > 0 then begin
Self.AtualizaGrupos;
if NumGrupos > 0 then begin
Self.AtualizaEquipes;
if NumEquipes > 0 then begin
Self.BloqueiaFormulario;
ShowModal;
end else begin
ShowMessage('No existem Equipes Cadastradas nesta temporada');
end;
end else begin
ShowMessage('Estrutura da Temporada Indefinida');
end;
end else begin
ShowMessage('Estrutura da Temporada Indefinida');
end;
end;
procedure TFrmPunicoes.AtualizaPunicoes;
var
SQL: String;
begin
SQL := 'select COUNT(*) from PUNICAO P, ESTRUTURATEMPORADA ET where ';
SQL := SQL + 'ET.CODTEMPORADA=' + IntToStr(Temporada.GetCodTemporada) + ' and
P.CodEstruturaTemporada=ET.CodEstruturaTemporada';
SQLDtStDados.CommandText := SQL;
ClntDtStDados.Close;
ClntDtStDados.Open;
ClntDtStDados.First;
NumPunicoes := ClntDtStDados.FieldByName('Count').AsInteger;
SQLDtStPunicoes.ParamByName('CodTemp').Asinteger := Temporada.GetCodTemporada;
ClntDtStPunicoes.Close;
ClntDtStPunicoes.Open;
ClntDtStPunicoes.First;
if NumPunicoes > 0 then begin
BtnAlterarPunicao.Enabled := True;
BtnExcluirPunicao.Enabled := True;
end else begin
BtnAlterarPunicao.Enabled := False;
BtnExcluirPunicao.Enabled := False;
end;
end;
procedure TFrmPunicoes.AtualizaFases;
var
SQL: String;
begin
147
148
procedure TFrmPunicoes.AtivaFormulario;
begin
DBGrdFases.Enabled := True;
DBGrdGrupos.Enabled := True;
CmbBxEquipe.Enabled := True;
EdtPts.Text := '';
EdtMotivo.Text := '';
DtData.Enabled := True;
EdtPts.Enabled := True;
EdtMotivo.Enabled := True;
BtnGravar.Enabled := True;
BtnCancelar.Enabled := True;
end;
procedure TFrmPunicoes.EdtPtsKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #8,#0,'-']) then begin
Key := #0;
Beep;
end;
end;
procedure TFrmPunicoes.BtnIncluirPunicaoClick(Sender: TObject);
begin
Status := 'N';
Self.AtivaFormulario;
DBGrdFases.SetFocus;
end;
procedure TFrmPunicoes.BtnCancelarClick(Sender: TObject);
begin
Self.BloqueiaFormulario;
end;
procedure TFrmPunicoes.BtnGravarClick(Sender: TObject);
var
Pts: Integer;
Motivo: String;
DataPunicao: TDateTime;
CodEstTemp, CodEquipe: Integer;
begin
if EdtPts.Text = '' then EdtPts.Text := '0';
try
Pts := StrToInt (EdtPts.Text);
DataPunicao := DtData.DateTime;
Motivo := EdtMotivo.Text;
CodEstTemp := ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsInteger;
CodEquipe := TItemCombo(CmbBxEquipe.Items.Objects[CmbBxEquipe.ItemIndex]).GetOid;
if Status='N' then begin
Temporada.IncluirPunicao(CodEstTemp, CodEquipe, Pts, DataPunicao, Motivo);
end else begin
Temporada.AlterarPunicao(CodPunicao, CodEstTemp, CodEquipe, Pts, DataPunicao,
Motivo);
end;
Self.BloqueiaFormulario;
Self.AtualizaPunicoes;
Except
on E: EConvertError do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
procedure TFrmPunicoes.BtnAlterarPunicaoClick(Sender: TObject);
var
i: Integer;
Achou: Boolean;
begin
Status := 'A';
CodPunicao := ClntDtStPunicoes.FieldByName('CodPunicao').asInteger;
Self.AtivaFormulario;
EdtPts.Text := ClntDtStPunicoes.FieldByName('Pontos').asString;
149
EdtMotivo.Text := ClntDtStPunicoes.FieldByName('Motivo').asString;
DtData.DateTime := ClntDtStPunicoes.FieldByName('Data').asDateTime;
i := 0;
Achou := False;
while ((i <= CmbBxEquipe.Items.Count-1) and (not Achou)) do begin
if ClntDtStPunicoes.FieldByName('CodEquipe').asInteger =
TItemCombo(CmbBxEquipe.Items.Objects[i]).GetOid then begin
Achou := True;
CmbBxEquipe.ItemIndex := i;
end;
i := i + 1;
end;
Achou := False;
with ClntDtStFases do begin
Close;
Open;
First;
while ((not eof) and (not achou)) do begin
if ClntDtStFases.FieldByName('CodEstruturaTemporada').AsInteger =
ClntDtStPunicoes.FieldByName('CodFase').asInteger then begin
Achou := True;
end else begin;
Next;
end;
end;
end;
Self.AtualizaGrupos;
Achou := False;
with ClntDtStGrupos do begin
Close;
Open;
First;
while ((not eof) and (not achou)) do begin
if ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsInteger =
ClntDtStPunicoes.FieldByName('CodEstruturaTemporada').asInteger then begin
Achou := True;
end else begin;
Next;
end;
end;
end;
DBGrdFases.SetFocus;
end;
procedure TFrmPunicoes.BtnExcluirPunicaoClick(Sender: TObject);
begin
Temporada.ExcluirPunicao(ClntDtStPunicoes.FieldByName('CodPunicao').AsInteger);
Self.AtualizaPunicoes;
end;
procedure TFrmPunicoes.DBGrdFasesCellClick(Column: TColumn);
begin
Self.AtualizaGrupos;
end;
end.
========================================================================================
====
ARQUIVO: UInterface.pas
========================================================================================
====
unit UInterface;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Borland.Vcl.StdCtrls, Borland.Vcl.Buttons, Borland.Vcl.Grids,
Borland.Vcl.DBGrids, Borland.Vcl.ExtCtrls, Borland.Vcl.ComCtrls,
Borland.Vcl.Menus, System.ComponentModel, DBXpress, FMTBcd,
Borland.Vcl.Provider, Borland.Vcl.DBClient, Borland.Vcl.Db,
Borland.Vcl.SqlExpr, URodada, UGrupo, UFase, Borland.Vcl.DBCtrls,
Borland.Vcl.DBCGrids, UICadJogos, UTemporada, UMeuUtils, UIEscalacao,
UDMDados, UDMInterface, UILancesJogo, UICadCampeonato, UICadEquipe,
UICadEstadio, UICadArbitro, UItemCombo, UICadTemporada, UICadJogador,
UICadEstruturaTemporada, UICadEquipeCompeteTemporada, UJogo, UIPunicoes,
150
151
152
BD.SQLDtStDados.CommandText := SQL;
i := 0;
Achou := False;
with BD.ClntDtStDados do begin
Close;
Open;
First;
while not eof do begin
ItemCombo := TItemCombo.Create;
ItemCombo.SetOid(FieldByName('CodTemporada').asInteger);
NomeCamp := FieldByName('Nome').asString + ' ' +
FieldByName('NomeTemporada').asString;
ItemCombo.SetNome(NomeCamp);
CmbBxCampeonatos.Items.AddObject(NomeCamp, ItemCombo);
if not Achou then begin
i := i + 1;
if FieldByName('CodTemporada').asInteger = UltCampAberto then begin
Achou := True;
end;
end;
next;
end;
end;
CmbBxCampeonatos.ItemIndex := i - 1;
end;
procedure TFrmListaJogos.AtualizarFases;
begin
BD.SQLDtStFases.ParamByName('codTemp').AsInteger := Temporada.GetCodTemporada;
BD.ClntDtStFases.Close;
BD.ClntDtStFases.Open;
BD.ClntDtStFases.First;
Self.AtualizarGrupos;
end;
procedure TFrmListaJogos.AtualizarGrupos;
begin
BD.SQLDtStGrupos.ParamByName('CodFase').AsInteger :=
BD.ClntDtStFases.FieldByName('CodEstruturaTemporada').AsInteger;
BD.ClntDtStGrupos.Close;
BD.ClntDtStGrupos.Open;
BD.ClntDtStGrupos.First;
Self.AtualizarRodadas;
end;
procedure TFrmListaJogos.AtualizarRodadas;
begin
BD.SQLDtStRodadas.ParamByName('CodGrupo').AsInteger :=
BD.ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsInteger;
BD.ClntDtStRodadas.Close;
BD.ClntDtStRodadas.Open;
BD.ClntDtStRodadas.First;
if not BD.ClntDtStRodadas.eof then begin
Panel1.Caption := 'JOGOS DA FASE: ' +
BD.ClntDtStFases.FieldByName('NomeEstruturaTemporada').AsString + ' GRUPO: ' +
BD.ClntDtStGrupos.FieldByName('NomeEstruturaTemporada').AsString + ' RODADA: ' +
BD.ClntDtStRodadas.FieldByName('NomeEstruturaTemporada').AsString;
BtnIncluir.Enabled := True;
end else begin
BtnIncluir.Enabled := False;
Panel1.Caption := '';
end;
Self.AtualizarJogos;
end;
procedure TFrmListaJogos.AtualizarJogos;
begin
BD.SQLDtStJogos.ParamByName('ET').AsInteger :=
BD.ClntDtStRodadas.FieldByName('CodEstruturaTemporada').AsInteger;
BD.ClntDtStJogos.Close;
BD.ClntDtStJogos.Open;
BD.ClntDtStJogos.First;
if BD.ClntDtStJogos.eof then begin
BtnAlterar.Enabled := False;
BtnExcluir.Enabled := False;
BtnEscalacao.Enabled := False;
BtnLancesJogo.Enabled := False;
153
154
BD.SQLDtStClassificacao.CommandText := SQLText;
BD.SQLDtStClassificacao.ParamByName('CODGRUPO').AsInteger :=
BD.ClntDtStGrupos.FieldByName('CODESTRUTURATEMPORADA').AsInteger;
BD.ClntDtStClassificacao.Close;
BD.ClntDtStClassificacao.Open;
BD.ClntDtStClassificacao.Last;
i := 1;
StrGrdClass.RowCount := 2;
StrGrdClass.Cells[0,1] := '';
StrGrdClass.Cells[1,1] := '';
StrGrdClass.Cells[2,1] := '';
StrGrdClass.Cells[3,1] := '';
Promovido := Temporada.GetNumTimePromovido;
Compet1 := Temporada.GetNumTimeCompet1;
Compet2 := Temporada.GetNumTimeCompet2;
PORebaixamento := Temporada.GetNumTimePORebaixamento;
Rebaixado := Temporada.GetNumTimeRebaixado;
while not BD.ClntDtStClassificacao.Bof do begin
StrGrdClass.RowCount := i + 1;
StrGrdClass.Cells[0,i] := IntToStr(i) + '';
StrGrdClass.Cells[1,i] :=
BD.ClntDtStClassificacao.FieldByName('NomeEquipe').asString;
StrGrdClass.Cells[2,i] := BD.ClntDtStClassificacao.FieldByName('PTS').asString;
StrGrdClass.Cells[3,i] := BD.ClntDtStClassificacao.FieldByName('SG').asString;
i := i + 1;
BD.ClntDtStClassificacao.Prior;
end;
TotalClass := i;
end;
procedure TFrmListaJogos.DBGrdFasesCellClick(Column: TColumn);
begin
self.AtualizarGrupos;
end;
procedure TFrmListaJogos.DBGrdGruposCellClick(Column: TColumn);
begin
self.AtualizarRodadas;
end;
procedure TFrmListaJogos.BtnIncluirClick(Sender: TObject);
begin
FrmCadJogos := TFrmCadJogos.create(nil); FrmCadJogos.SetBD(conBD);
FrmCadJogos.Mostrar (Temporada,
BD.ClntDtStRodadas.FieldByName('CodTemporada').AsInteger,
BD.ClntDtStRodadas.FieldByName('CodFase').AsInteger,
BD.ClntDtStRodadas.FieldByName('CodGrupo').AsInteger,
BD.ClntDtStRodadas.FieldByName('CodEstruturaTemporada').AsInteger, 0, 'N');
FreeAndNil (FrmCadJogos);
Self.AtualizarJogos;
end;
procedure TFrmListaJogos.DBGrdRodadasCellClick(Column: TColumn);
begin
self.AtualizarJogos;
end;
procedure TFrmListaJogos.BtnAlterarClick(Sender: TObject);
begin
FrmCadJogos := TFrmCadJogos.create(nil); FrmCadJogos.SetBD(conBD);
FrmCadJogos.Mostrar (Temporada,
BD.ClntDtStRodadas.FieldByName('CodTemporada').AsInteger,
BD.ClntDtStRodadas.FieldByName('CodFase').AsInteger,
BD.ClntDtStRodadas.FieldByName('CodGrupo').AsInteger,
BD.ClntDtStRodadas.FieldByName('CodEstruturaTemporada').AsInteger,
BD.ClntDtStJogos.FieldByName('CodJogo').AsInteger, 'A');
FrmCadJogos.Destroy;
Self.AtualizarJogos;
end;
procedure TFrmListaJogos.BtnEscalacaoClick(Sender: TObject);
begin
FrmEscalacao := TFrmEscalacao.Create(nil); FrmEscalacao.SetBD(conBD);
FrmEscalacao.DefinirEscalacao (Temporada,
BD.ClntDtStJogos.FieldByName('CodJogo').AsInteger);
FrmEscalacao.Destroy;
end;
155
156
157
end;
end;
if key = 13 then begin
if BtnAlterar.Enabled = True then begin
Self.BtnAlterarClick(Sender);
end;
end;
end;
procedure TFrmListaJogos.Punies1Click(Sender: TObject);
var
FrmPunicoes: TFrmPunicoes;
begin
FrmPunicoes := TFrmPunicoes.Create(nil); FrmPunicoes.SetBD(conBD);
FrmPunicoes.Mostrar(Temporada);
FrmPunicoes.Destroy;
Self.AtualizarClassificacao;
end;
procedure TFrmListaJogos.StrGrdClassDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
Texto: string;
X: Integer;
begin
if TotalClass > 1 then begin
if (ARow <= Promovido) and (ARow > 0) then begin
StrGrdClass.Canvas.Brush.Color := clLime;
end;
if (ARow > Promovido) and (ARow <= Compet1+Promovido) then begin
StrGrdClass.Canvas.Brush.Color := clAqua;
end;
if (ARow > Promovido+Compet1) and (ARow <= Compet1+Promovido+Compet2) then begin
StrGrdClass.Canvas.Brush.Color := clSkyBlue;
end;
if (ARow >= TotalClass-PORebaixamento-Rebaixado) and (ARow < TotalClass-Rebaixado)
then begin
StrGrdClass.Canvas.Brush.Color := clYellow;
end;
if (ARow >= TotalClass-Rebaixado) then begin
StrGrdClass.Canvas.Brush.Color := clRed;
StrGrdClass.Canvas.Font.Color := clWhite;
end;
end;
StrGrdClass.Canvas.FillRect(Rect);
StrGrdClass.Canvas.TextOut(Rect.Left+2,Rect.Top,StrGrdClass.Cells[acol,arow]);
if (ACol<>1) then begin
Texto := StrGrdClass.Cells[ACol, ARow];
X := Rect.Right - StrGrdClass.Canvas.TextWidth(Texto) - 2;
StrGrdClass.Canvas.TextRect(Rect, X, Rect.Top+2, Texto);
if gdFocused in State then begin
StrGrdClass.Canvas.DrawFocusRect(Rect);
end;
end;
end;
procedure TFrmListaJogos.Campeonato1Click(Sender: TObject);
var
FrmTabClassificacao: TFrmTabClassificacao;
begin
FrmTabClassificacao := TFrmTabClassificacao.Create(nil);
FrmTabClassificacao.SetBD(conBD);
FrmTabClassificacao.Mostrar (Temporada);
FrmTabClassificacao.Destroy;
end;
procedure TFrmListaJogos.ImportarTabeladeJogos1Click(Sender: TObject);
var
FrmImporta: TFrmImporta;
begin
FrmImporta := TFrmImporta.Create(nil); FrmImporta.SetBD(conBD);
FrmImporta.Mostrar(Temporada);
FrmImporta.Destroy;
Self.AtualizarRodadas;
end;
procedure TFrmListaJogos.DBGrdJogosMouseDown(Sender: TObject;
158
159
Label5: TLabel;
Label6: TLabel;
DBGrdTitularesCasa: TDBGrid;
CmbBxEventoCasa: TComboBox;
PnlJogadorEventoCasa: TPanel;
CmbBxMinutosCasa: TComboBox;
ChckBxTitularesCasa: TCheckBox;
PnlTimeCasa: TPanel;
Panel6: TPanel;
BtnIncluirEventoTC: TButton;
BtnCadJogadoresTF: TButton;
Button1: TButton;
procedure ChckBxTitularesForaClick(Sender: TObject);
procedure DBGrdTitularesForaCellClick(Column: TColumn);
procedure StrGrdEventosJogoDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
procedure BtnIncluirEventoTFClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure StrGrdEventosJogoMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ExcluirEvento1Click(Sender: TObject);
procedure BtnIncluirEventoTCClick(Sender: TObject);
procedure ChckBxTitularesCasaClick(Sender: TObject);
procedure DBGrdTitularesCasaCellClick(Column: TColumn);
procedure BtnCadJogadoresTFClick(Sender: TObject);
private
{ Private declarations }
ConBD: TDtMdlDados;
BD: TDtMdlLancesJogo;
Jogo: TJogo;
CodJogo: Integer;
Temporada: TTemporada;
codTemporada: Integer;
ImagensLanceJogo: Array [0..49,1..2] of Integer; //(Coluna da imagem , Tipo da
Imagem)
TotEventos: Integer;
CountEventos: Integer;
public
{ Public declarations }
procedure SetBD (var umaConBD:TDtMdlDados);
procedure DefinirLancesJogo (umaTemporada: TTemporada; umCodJogo: Integer);
procedure AtualizarInterfaceTC;
procedure AtualizarInterfaceTF;
procedure AtualizarDadosJogos;
procedure AtualizarLancesJogo;
end;
var
FrmLancesJogo: TFrmLancesJogo;
implementation
{$R *.nfm}
procedure TFrmLancesJogo.SetBD (var umaConBD:TDtMdlDados);
begin
BD := TDtMdlLancesJogo.Create(nil);
BD.SetConexaoBD (umaConBD);
conBD := umaConBD;
end;
procedure TFrmLancesJogo.DefinirLancesJogo (umaTemporada: TTemporada; umCodJogo:
Integer);
var
Minutos, i: Integer;
begin
CodJogo := umCodJogo;
Temporada := UmaTemporada;
CodTemporada := Temporada.GetCodTemporada;
BD.SQLDtStJogo.ParamByName('Cod').asInteger := CodJogo;
BD.ClntDtStJogo.Close;
BD.ClntDtStJogo.Open;
BD.ClntDtStJogo.First;
Jogo := TJogo.Create; Jogo.SetBD (ConBD);
Jogo.Materializar(umCodJogo);
Self.AtualizarInterfaceTC;
Self.AtualizarInterfaceTF;
160
Self.AtualizarDadosJogos;
Self.AtualizarLancesJogo;
TbShtTimeCasa.Caption := BD.ClntDtStJogo.FieldByName('NomeEquipe').AsString;
TbShtTimeFora.Caption := BD.ClntDtStJogo.FieldByName('NomeEquipe_1').AsString;
Minutos := 90;
if BD.ClntDtStJogo.FieldByName('Prorrogacao').AsInteger = 1 then Minutos := 120;
for i:=1 to minutos do begin
CmbBxMinutosCasa.Items.Add(IntToStr(i) + '''');
end;
for i:=1 to minutos do begin
CmbBxMinutosFora.Items.Add(IntToStr(i) + '''');
end;
CmbBxMinutosCasa.ItemIndex := 0;
CmbBxMinutosFora.ItemIndex := 0;
PageControl1.ActivePage := TbShtTimeCasa;
ShowModal;
end;
procedure TFrmLancesJogo.AtualizarInterfaceTC;
var
SQL: String;
begin
PnlTimeCasa.Caption := BD.ClntDtStJogo.FieldByName('NomeEquipe').AsString;
if ChckBxTitularesCasa.Checked = True then begin
SQL := 'Select * from Jogador J, EscalacaoJogo EJ where J.CodJogador = EJ.CodJogador
and EJ.CodJogo=' + IntToStr(CodJogo) + ' and EJ.CodEquipe=' +
IntToStr(BD.ClntDtStJogo.FieldByName('CodEquipeCasa').AsInteger);
end else begin
SQL := 'Select * from Jogador J where J.CodEquipe=' +
BD.ClntDtStJogo.FieldByName('CodEquipeCasa').AsString + ' and J.CodTemporada=' +
IntToStr(CodTemporada);
end;
BD.SQLDtStJogadoresCasa.CommandText := SQL;
with BD.ClntDtStJogadoresCasa do begin
Close;
Open;
First;
end;
PnlJogadorEventoCasa.Caption := ' ' +
BD.ClntDtStJogadoresCasa.FieldByName('ApelidoJogador').asString;
end;
procedure TFrmLancesJogo.AtualizarInterfaceTF;
var
SQL: String;
begin
PnlTimeFora.Caption := BD.ClntDtStJogo.FieldByName('NomeEquipe_1').AsString;
if ChckBxTitularesFora.Checked = True then begin
SQL := 'Select * from Jogador J, EscalacaoJogo EJ where J.CodJogador = EJ.CodJogador
and EJ.CodJogo=' + IntToStr(CodJogo) + ' and EJ.CodEquipe=' +
IntToStr(BD.ClntDtStJogo.FieldByName('CodEquipeFora').AsInteger);
end else begin
SQL := 'Select * from Jogador J where J.CodEquipe=' +
BD.ClntDtStJogo.FieldByName('CodEquipeFora').AsString + ' and J.CodTemporada=' +
IntToStr(CodTemporada);
end;
BD.SQLDtStJogadoresFora.CommandText := SQL;
with BD.ClntDtStJogadoresFora do begin
Close;
Open;
First;
end;
PnlJogadorEventoFora.Caption := ' ' +
BD.ClntDtStJogadoresFora.FieldByName('ApelidoJogador').asString;
end;
procedure TFrmLancesJogo.ChckBxTitularesForaClick(Sender: TObject);
begin
Self.AtualizarInterfaceTF;
end;
procedure TFrmLancesJogo.DBGrdTitularesForaCellClick(Column: TColumn);
begin
PnlJogadorEventoFora.Caption := ' ' +
BD.ClntDtStJogadoresFora.FieldByName('ApelidoJogador').asString;
end;
161
procedure TFrmLancesJogo.AtualizarDadosJogos;
var
SQL: String;
begin
ImgTimeCasa.Picture.Bitmap.FreeImage;
ImgTimeFora.Picture.Bitmap.FreeImage;
PnlNomeTC.Caption := '';
PnlNomeTF.Caption := '';
PnlDadosJogo1.Caption := '';
PnlPlacarJogo.Caption := '';
PnlPlacarProrrogacao.Caption := '';
PnlPlacarPenaltis.Caption := '';
ImgTimeCasa.Picture.Bitmap.LoadFromStream(BD.ClntDtStJogo.CreateBlobStream(BD.ClntDtStJo
go.FieldByName('Escudo'),bmRead));
ImgTimeFora.Picture.Bitmap.LoadFromStream(BD.ClntDtStJogo.CreateBlobStream(BD.ClntDtStJo
go.FieldByName('Escudo_1'),bmRead));
PnlNomeTC.Caption := BD.ClntDtStJogo.FieldByName('NomeEquipe').asString;
PnlNomeTF.Caption := BD.ClntDtStJogo.FieldByName('NomeEquipe_1').asString;
if BD.ClntDtStJogo.FieldByName('CodEstadio').asInteger <> 0 then begin
SQL := 'Select * from Estadio where CodEstadio=' +
BD.ClntDtStJogo.FieldByName('CodEstadio').asString;
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
end;
PnlDadosJogo1.Caption := BD.ClntDtStDados.FieldByName('NomeEstadio').asString + ' ' + BD.ClntDtStDados.FieldByName('CidadeEstadio').asString + ' - ' +
BD.ClntDtStDados.FieldByName('Pais').asString;
end;
if BD.ClntDtStJogo.FieldByName('Realizado').asInteger = 1 then begin
PnlPlacarJogo.Caption := BD.ClntDtStJogo.FieldByName('GolsTimeCasa').asString + ' ' + BD.ClntDtStJogo.FieldByName('GolsTimeFora').asString;
if BD.ClntDtStJogo.FieldByName('Prorrogacao').asInteger = 1 then begin
PnlPlacarProrrogacao.Caption :=
BD.ClntDtStJogo.FieldByName('GolsTimeCasaProrrogacao').asString + ' - Pro - ' +
BD.ClntDtStJogo.FieldByName('GolsTimeForaProrrogacao').asString;
end;
if BD.ClntDtStJogo.FieldByName('Penaltis').asInteger = 1 then begin
PnlPlacarPenaltis.Caption :=
BD.ClntDtStJogo.FieldByName('GolsTimeCasaPenaltis').asString + ' - Pn - ' +
BD.ClntDtStJogo.FieldByName('GolsTimeForaPenaltis').asString;
end;
end;
end;
procedure TFrmLancesJogo.AtualizarLancesJogo;
var
MinutosSubst, MinutosLance: Integer;
Subst, Lance: boolean;
Evento: Integer;
MinutoUltimoLance: Integer;
x,y: integer;
TC, TF: Integer;
ItemCombo: TItemCombo;
begin
// Limpa o String Grid
for x:=0 to StrGrdEventosJogo.ColCount do begin
for y:=0 to StrGrdEventosJogo.RowCount do begin
StrGrdEventosJogo.Cells[x,y]:='';
end;
end;
// Inicia as variaveis
Evento := 0;
MinutoUltimoLance := 0;
Subst := True;
Lance := True;
MinutosSubst := 0;
MinutosSubst := 0;
TC := BD.ClntDtStJogo.FieldByName('CodEquipeCasa').AsInteger;
TF := BD.ClntDtStJogo.FieldByName('CodEquipeFora').AsInteger;
// Busca no BD as Substituicoes
BD.SQLDtStSubst.ParamByName('CodJogo').AsInteger := CodJogo;
BD.SQLDtStSubst.ParamByName('CodEquipeCasa').AsInteger := TC;
162
BD.SQLDtStSubst.ParamByName('CodEquipeFora').AsInteger := TF;
with BD.ClntDtStSubst do begin
Close;
Open;
First;
end;
BD.SQLDtStLancesJogo.ParamByName('CodJogo').AsInteger := CodJogo;
BD.SQLDtStLancesJogo.ParamByName('CodEquipeCasa').AsInteger := TC;
BD.SQLDtStLancesJogo.ParamByName('CodEquipeFora').AsInteger := TF;
with BD.ClntDtStLancesJogo do begin
Close;
Open;
First;
end;
repeat
if BD.ClntDtStSubst.Eof = False then begin
MinutosSubst := BD.ClntDtStSubst.FieldByName('MinutoSubstituicao').asInteger;
end else begin
Subst := False;
end;
if BD.ClntDtStLancesJogo.Eof = False then begin
MinutosLance := BD.ClntDtStLancesJogo.FieldByName('Minuto').asInteger;
end else begin
Lance := False;
end;
if ((Subst=True) and (Lance=True)) then begin
if MinutosSubst < MinutosLance then begin
if BD.ClntDtStSubst.FieldByName('CodEquipe').AsInteger = TC then begin
StrGrdEventosJogo.Cells[0,Evento] := 'In:' +
BD.ClntDtStSubst.FieldByName('ApelidoJogador').asString + ' / Out:' +
BD.ClntDtStSubst.FieldByName('ApelidoJogador_1').asString;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 1;
end else begin
StrGrdEventosJogo.Cells[4,Evento] := 'In:' +
BD.ClntDtStSubst.FieldByName('ApelidoJogador').asString + ' / Out:' +
BD.ClntDtStSubst.FieldByName('ApelidoJogador_1').asString;
ImagensLanceJogo [Evento,1] := 3;
ImagensLanceJogo [Evento,2] := 1;
end;
if MinutosSubst <> MinutoUltimoLance then begin
StrGrdEventosJogo.Cells[2,Evento] := intToStr(MinutosSubst) + '''';
MinutoUltimoLance := MinutosSubst;
end;
BD.ClntDtStSubst.Next;
end else begin
ItemCombo := TItemCombo.Create;
ItemCombo.setOid(BD.ClntDtStLancesJogo.FieldByName('CodLancePartida').asInteger);
case BD.ClntDtStLancesJogo.FieldByName('TipoLance').AsInteger of
1: begin // Gol
if BD.ClntDtStLancesJogo.FieldByName('CodEquipeLance').AsInteger = TC
then begin
StrGrdEventosJogo.Cells[0,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[0,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 2;
end else begin
StrGrdEventosJogo.Cells[4,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[4,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 3; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 2;
end;
end;
2: begin // Gol de Penalti
if BD.ClntDtStLancesJogo.FieldByName('CodEquipeLance').AsInteger = TC
then begin
StrGrdEventosJogo.Cells[0,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[0,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 3;
end else begin
StrGrdEventosJogo.Cells[4,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
163
StrGrdEventosJogo.Objects[4,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 3; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 3;
end;
end;
3: begin // Gol Contra
if BD.ClntDtStLancesJogo.FieldByName('CodEquipeLance').AsInteger = TC
then begin
StrGrdEventosJogo.Cells[0,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[0,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 4;
end else begin
StrGrdEventosJogo.Cells[4,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[4,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 3; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 4;
end;
end;
4: begin // Carto Amarelo
if BD.ClntDtStLancesJogo.FieldByName('CodEquipeLance').AsInteger = TC
then begin
StrGrdEventosJogo.Cells[0,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[0,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 5;
end else begin
StrGrdEventosJogo.Cells[4,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[4,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 3; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 5;
end;
end;
5: begin // Carto Amarelo e Vermelho
if BD.ClntDtStLancesJogo.FieldByName('CodEquipeLance').AsInteger = TC
then begin
StrGrdEventosJogo.Cells[0,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[0,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 6;
end else begin
StrGrdEventosJogo.Cells[4,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[4,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 3; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 6;
end;
end;
6: begin // Carto Vermelho
if BD.ClntDtStLancesJogo.FieldByName('CodEquipeLance').AsInteger = TC
then begin
StrGrdEventosJogo.Cells[0,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[0,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 7;
end else begin
StrGrdEventosJogo.Cells[4,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[4,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 3; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 7;
end;
end;
end;
ItemCombo.Free;
if MinutosLance <> MinutoUltimoLance then begin
StrGrdEventosJogo.Cells[2,Evento] := intToStr(MinutosLance) + '''';
MinutoUltimoLance := MinutosLance;
end;
BD.ClntDtStLancesJogo.Next;
end;
164
Evento := Evento + 1;
end else begin
if (Subst=True) then begin
if BD.ClntDtStSubst.FieldByName('CodEquipe').AsInteger = TC then begin
StrGrdEventosJogo.Cells[0,Evento] := 'In:' +
BD.ClntDtStSubst.FieldByName('ApelidoJogador').asString + ' / Out:' +
BD.ClntDtStSubst.FieldByName('ApelidoJogador_1').asString;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da Imagem)
ImagensLanceJogo [Evento,2] := 1;
end else begin
StrGrdEventosJogo.Cells[4,Evento] := 'In:' +
BD.ClntDtStSubst.FieldByName('ApelidoJogador').asString + ' / Out:' +
BD.ClntDtStSubst.FieldByName('ApelidoJogador_1').asString;
ImagensLanceJogo [Evento,1] := 3;
ImagensLanceJogo [Evento,2] := 1;
end;
if MinutosSubst <> MinutoUltimoLance then begin
StrGrdEventosJogo.Cells[2,Evento] := intToStr(MinutosSubst) + '''';
MinutoUltimoLance := MinutosSubst;
end;
BD.ClntDtStSubst.Next;
end else begin
if (Lance=True) then begin
ItemCombo := TItemCombo.Create;
ItemCombo.setOid(BD.ClntDtStLancesJogo.FieldByName('CodLancePartida').asInteger);
case BD.ClntDtStLancesJogo.FieldByName('TipoLance').AsInteger of
1: begin // Gol
if BD.ClntDtStLancesJogo.FieldByName('CodEquipeLance').AsInteger = TC
then begin
StrGrdEventosJogo.Cells[0,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[0,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da
Imagem)
ImagensLanceJogo [Evento,2] := 2;
end else begin
StrGrdEventosJogo.Cells[4,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[4,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 3; //(Coluna da imagem , Tipo da
Imagem)
ImagensLanceJogo [Evento,2] := 2;
end;
end;
2: begin // Gol de Penalti
if BD.ClntDtStLancesJogo.FieldByName('CodEquipeLance').AsInteger = TC
then begin
StrGrdEventosJogo.Cells[0,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[0,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da
Imagem)
ImagensLanceJogo [Evento,2] := 3;
end else begin
StrGrdEventosJogo.Cells[4,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[4,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 3; //(Coluna da imagem , Tipo da
Imagem)
ImagensLanceJogo [Evento,2] := 3;
end;
end;
3: begin // Gol Contra
if BD.ClntDtStLancesJogo.FieldByName('CodEquipeLance').AsInteger = TC
then begin
StrGrdEventosJogo.Cells[0,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[0,Evento] := ItemCombo;
ImagensLanceJogo [Evento,1] := 1; //(Coluna da imagem , Tipo da
Imagem)
ImagensLanceJogo [Evento,2] := 4;
end else begin
StrGrdEventosJogo.Cells[4,Evento] :=
BD.ClntDtStLancesJogo.FieldByName('ApelidoJogador').asString;
StrGrdEventosJogo.Objects[4,Evento] := ItemCombo;
165
166
167
168
begin
if Jogo.GetNumLancesGolsTC < Jogo.GetGolsTimeCasa +
Jogo.GetGolsTimeCasaProrrogacao then begin
Jogo.IncluirLancePartida (TC, TC,
BD.ClntDtStJogadoresCasa.FieldByName('CodJogador').AsInteger,
CmbBxEventoCasa.ItemIndex+1, Minuto);
end else begin
ShowMessage ('J Foram inclusos todos os eventos de gols deste time');
end;
end;
1:
begin
if Jogo.GetNumLancesGolsTC < Jogo.GetGolsTimeCasa +
Jogo.GetGolsTimeCasaProrrogacao then begin
Jogo.IncluirLancePartida (TC, TC,
BD.ClntDtStJogadoresCasa.FieldByName('CodJogador').AsInteger,
CmbBxEventoCasa.ItemIndex+1, Minuto);
end else begin
ShowMessage ('J Foram inclusos todos os eventos de gols deste time');
end;
end;
2:
begin
if Jogo.GetNumLancesGolsTF < Jogo.GetGolsTimeFora +
Jogo.GetGolsTimeForaProrrogacao then begin
Jogo.IncluirLancePartida (TC, TF,
BD.ClntDtStJogadoresCasa.FieldByName('CodJogador').AsInteger,
CmbBxEventoCasa.ItemIndex+1, Minuto);
end else begin
ShowMessage ('J Foram inclusos todos os eventos de gols deste time');
end;
end
else begin
Jogo.IncluirLancePartida (TC, TC,
BD.ClntDtStJogadoresCasa.FieldByName('CodJogador').AsInteger,
CmbBxEventoCasa.ItemIndex+1, Minuto);
end;
end;
except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
Self.AtualizarLancesJogo;
end;
procedure TFrmLancesJogo.ChckBxTitularesCasaClick(Sender: TObject);
begin
Self.AtualizarInterfaceTC;
end;
procedure TFrmLancesJogo.DBGrdTitularesCasaCellClick(Column: TColumn);
begin
PnlJogadorEventoCasa.Caption := ' ' +
BD.ClntDtStJogadoresCasa.FieldByName('ApelidoJogador').asString;
end;
procedure TFrmLancesJogo.BtnCadJogadoresTFClick(Sender: TObject);
var
FrmCadJogador: TFrmCadJogador;
begin
FrmCadJogador := TFrmCadJogador.Create(nil); FrmCadJogador.SetBD(conBD);
FrmCadJogador.Mostrar(Temporada,
BD.ClntDtStJogo.FieldByName('CodEquipeCasa').AsInteger);
FrmCadJogador.Destroy;
Self.AtualizarInterfaceTC;
end;
end.
========================================================================================
====
ARQUIVO: UImporta.pas
========================================================================================
====
169
unit UIImporta;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Borland.Vcl.Buttons, Borland.Vcl.StdCtrls, System.ComponentModel,
UDMDados, Borland.Vcl.Grids, Borland.Vcl.DBGrids, Borland.Vcl.ExtCtrls,
FMTBcd, Borland.Vcl.Db, Borland.Vcl.DBClient, Borland.Vcl.Provider,
Borland.Vcl.SqlExpr, UTemporada, UIEquipeEquivalente,
Borland.Vcl.ComCtrls;
type
TFrmImporta = class(TForm)
OpenDialog1: TOpenDialog;
SQLDtStFases: TSQLDataSet;
DtStPrvdrFases: TDataSetProvider;
ClntDtStFases: TClientDataSet;
DtSrcFases: TDataSource;
SQLDtStGrupos: TSQLDataSet;
DtStPrvdrGrupos: TDataSetProvider;
ClntDtStGrupos: TClientDataSet;
DtSrcGrupos: TDataSource;
DBGrdRodadas: TDBGrid;
Panel5: TPanel;
SQLDtStRodadas: TSQLDataSet;
DtStPrvdrRodadas: TDataSetProvider;
ClntDtStRodadas: TClientDataSet;
DtSrcRodadas: TDataSource;
LstBxJogos: TListBox;
Panel6: TPanel;
SQLDtStDados: TSQLDataSet;
DtStPrvdrDados: TDataSetProvider;
ClntDtStDados: TClientDataSet;
ImgBranco: TImage;
Panel7: TPanel;
Panel8: TPanel;
Label1: TLabel;
LstBxCampos: TListBox;
LstBxCamposImportados: TListBox;
BtnIncluirCampo: TButton;
BtnExcluirCampo: TButton;
Button1: TButton;
EdtNomeArquivo: TEdit;
Panel3: TPanel;
DBGrdGrupos: TDBGrid;
DBGrdFases: TDBGrid;
Panel4: TPanel;
Panel1: TPanel;
Panel2: TPanel;
PrgrssBrLinhas: TProgressBar;
PnlLinhas: TPanel;
Label2: TLabel;
DtTmPckrDataJogo: TDateTimePicker;
BtnImportar: TBitBtn;
BtnFechar: TBitBtn;
procedure BtnFecharClick(Sender: TObject);
procedure BtnIncluirCampoClick(Sender: TObject);
procedure BtnExcluirCampoClick(Sender: TObject);
procedure LstBxCamposDblClick(Sender: TObject);
procedure LstBxCamposImportadosDblClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BtnImportarClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure DBGrdFasesCellClick(Column: TColumn);
procedure DBGrdGruposCellClick(Column: TColumn);
private
{ Private declarations }
conBD: TDtMdlDados;
Temporada: TTemporada;
NumRodadas: Integer;
FrmEquipeEquivalente: TFrmEquipeEquivalente;
Foto1, Foto2 : TMemoryStream;
public
{ Public declarations }
procedure Mostrar (umaTemp: TTemporada);
170
procedure
procedure
procedure
procedure
procedure
procedure
end;
var
FrmImporta: TFrmImporta;
implementation
{$R *.nfm}
procedure TFrmImporta.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
end;
procedure TFrmImporta.Mostrar(umaTemp: TTemporada);
begin
Temporada := umaTemp;
FrmEquipeEquivalente := TFrmEquipeEquivalente.Create(nil);
FrmEquipeEquivalente.SetBD(conBD); FrmEquipeEquivalente.SetTemporada(Temporada);
Self.AtualizarFases;
Self.ShowModal;
end;
procedure TFrmImporta.BtnFecharClick(Sender: TObject);
begin
Self.Close;
end;
procedure TFrmImporta.BtnIncluirCampoClick(Sender: TObject);
begin
if LstBxCampos.itemindex >= 0 then begin
LstBxCamposImportados.Items.Add(LstBxCampos.items[LstBxCampos.itemindex]);
LstBxCampos.Items.delete(LstBxCampos.itemindex);
end;
end;
procedure TFrmImporta.BtnExcluirCampoClick(Sender: TObject);
begin
if LstBxCamposImportados.itemindex >= 0 then begin
LstBxCampos.Items.Add(LstBxCamposImportados.items[LstBxCamposImportados.itemindex]);
LstBxCamposImportados.Items.delete(LstBxCamposImportados.itemindex);
end;
end;
procedure TFrmImporta.LstBxCamposDblClick(Sender: TObject);
begin
Self.BtnIncluirCampoClick(Sender);
end;
procedure TFrmImporta.LstBxCamposImportadosDblClick(Sender: TObject);
begin
Self.BtnExcluirCampoClick(Sender);
end;
procedure TFrmImporta.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then begin
EdtNomeArquivo.Text := OpenDialog1.FileName;
end;
end;
procedure TFrmImporta.BtnImportarClick(Sender: TObject);
var
Arquivo: TextFile;
Linha, Palavra, Letra, LetraAnterior: String;
TamLinha, i: Integer;
Comecou, NovaRodada: Boolean;
begin
PrgrssBrLinhas.Max := 0;
PrgrssBrLinhas.Min := 0;
PrgrssBrLinhas.Position := 0;
171
172
ClntDtStFases.Open;
ClntDtStFases.First;
Self.AtualizarGrupos;
end;
procedure TFrmImporta.AtualizarGrupos;
begin
SQLDtStGrupos.ParamByName('CodFase').AsInteger :=
ClntDtStFases.FieldByName('CodEstruturaTemporada').AsInteger;
ClntDtStGrupos.Close;
ClntDtStGrupos.Open;
ClntDtStGrupos.First;
Self.AtualizarRodadas;
end;
procedure TFrmImporta.AtualizarRodadas;
var
SQL: String;
begin
SQLDtStRodadas.ParamByName('CodGrupo').AsInteger :=
ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsInteger;
ClntDtStRodadas.Close;
ClntDtStRodadas.Open;
ClntDtStRodadas.First;
SQL := 'Select COUNT(*) from ESTRUTURATEMPORADA where CODGRUPO=' +
ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsString;
SQLDtStDados.CommandText := SQL;
ClntDtStDados.Close;
ClntDtStDados.Open;
ClntDtStDados.First;
NumRodadas := ClntDtStDados.FieldByName('Count').AsInteger;
end;
procedure TFrmImporta.AdicionarRodada;
begin
try
if NumRodadas < 9 then begin
Temporada.IncluirRodada('0'+IntToStr(NumRodadas+1),
ClntDtStFases.FieldByName('codEstruturaTemporada').AsInteger,
ClntDtStGrupos.FieldByName('codEstruturaTemporada').AsInteger);
end else begin
Temporada.IncluirRodada(IntToStr(NumRodadas+1),
ClntDtStFases.FieldByName('codEstruturaTemporada').AsInteger,
ClntDtStGrupos.FieldByName('codEstruturaTemporada').AsInteger);
end;
Self.AtualizarRodadas;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
procedure TFrmImporta.GravaJogo;
var
i, CodEstTemp, CodEquipeCasa, CodEquipeFora, GolsEquipeCasa, GolsEquipeFora, Publico,
Realizado, CodEstadio: Integer;
begin
if LstBxJogos.Items.Count <> LstBxCamposImportados.Items.Count then begin
ShowMessage('Erro na Linha');
end else begin
CodEquipeCasa := 0;
CodEstadio := 0;
CodEquipeFora := 0;
GolsEquipeCasa := 0;
GolsEquipeFora := 0;
Publico := 0;
Realizado := 0;
for i := 0 to LstBxCamposImportados.items.Count-1 do begin
if LstBxCamposImportados.Items[i] = 'Equipe da Casa' then begin
CodEquipeCasa := FrmEquipeEquivalente.RetorneCodigoEquipe(LstBxJogos.Items[i]);
CodEstadio := FrmEquipeEquivalente.GetCodEstadio(CodEquipeCasa);
end;
if LstBxCamposImportados.Items[i] = 'Equipe Visitante' then begin
CodEquipeFora := FrmEquipeEquivalente.RetorneCodigoEquipe(LstBxJogos.Items[i]);
end;
173
174
TbShtTimeFora: TTabSheet;
Panel1: TPanel;
GrpBxSubFora: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
CmbBxReservasFora: TComboBox;
CmbBxTitularesFora: TComboBox;
CmbBxMinutosFora: TComboBox;
BtnSubFora: TButton;
BtnEscalarJF: TButton;
BtnDesEscalarJF: TButton;
PnlTimeFora: TPanel;
BtnFechar: TBitBtn;
BtnCadJogadoresTF: TButton;
DBGrdJogadoresFora: TDBGrid;
DBGrdTitularesFora: TDBGrid;
GrpBxSubFeitasFora: TGroupBox;
BtnRemoverSubst1TF: TButton;
BtnRemoverSubst2TF: TButton;
BtnRemoverSubst3TF: TButton;
SQLDtStJogadorFora: TSQLDataSet;
DtStPrvdrJogadorFora: TDataSetProvider;
ClntDtStJogadorFora: TClientDataSet;
ClntDtStJogadorForaCODJOGADOR: TIntegerField;
ClntDtStJogadorForaCODEQUIPE: TIntegerField;
ClntDtStJogadorForaCODTEMPORADA: TIntegerField;
ClntDtStJogadorForaAPELIDOJOGADOR: TStringField;
ClntDtStJogadorForaNOMEJOGADOR: TStringField;
ClntDtStJogadorForaNUMEROCAMISA: TIntegerField;
ClntDtStJogadorForaDATANASCIMENTO: TDateField;
ClntDtStJogadorForaNACIONALIDADE: TStringField;
ClntDtStJogadorForaPOSICAO: TIntegerField;
ClntDtStJogadorForaSTATUS: TStringField;
ClntDtStJogadorForaEMAIL: TStringField;
ClntDtStJogadorForaFOTO: TBlobField;
DtSrcJogadorFora: TDataSource;
SQLDtStEscJogoFora: TSQLDataSet;
DtStPrvdrEscJogoFora: TDataSetProvider;
ClntDtStEscJogoFora: TClientDataSet;
ClntDtStEscJogoForaCODJOGADOR: TIntegerField;
ClntDtStEscJogoForaCODEQUIPE: TIntegerField;
ClntDtStEscJogoForaCODTEMPORADA: TIntegerField;
ClntDtStEscJogoForaAPELIDOJOGADOR: TStringField;
ClntDtStEscJogoForaNOMEJOGADOR: TStringField;
ClntDtStEscJogoForaNUMEROCAMISA: TIntegerField;
ClntDtStEscJogoForaDATANASCIMENTO: TDateField;
ClntDtStEscJogoForaNACIONALIDADE: TStringField;
ClntDtStEscJogoForaPOSICAO: TIntegerField;
ClntDtStEscJogoForaEMAIL: TStringField;
ClntDtStEscJogoForaFOTO: TBlobField;
ClntDtStEscJogoForaCODJOGO: TIntegerField;
ClntDtStEscJogoForaCODEQUIPE_1: TIntegerField;
ClntDtStEscJogoForaCODJOGADOR_1: TIntegerField;
ClntDtStEscJogoForaSTATUS_1: TStringField;
ClntDtStEscJogoForaCODJOGADORENTROU: TIntegerField;
ClntDtStEscJogoForaPos: TStringField;
ClntDtStEscJogoForaMin: TStringField;
DtSrcEscJogoFora: TDataSource;
Panel2: TPanel;
Panel8: TPanel;
ImgJF: TImage;
LblNomeJF: TLabel;
LblCamisaJF: TLabel;
LblPosicaoJF: TLabel;
LblIdadeJF: TLabel;
LblNacionalidadeJF: TLabel;
ClntDtStEscJogoForaSAIU: TStringField;
ClntDtStEscJogoForaSTATUS: TStringField;
Panel3: TPanel;
GrpBxSubCasa: TGroupBox;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
CmbBxReservasCasa: TComboBox;
CmbBxTitularesCasa: TComboBox;
CmbBxMinutosCasa: TComboBox;
175
BtnSubCasa: TButton;
BtnEscalarJC: TButton;
BtnDesEscalarJC: TButton;
PnlTimeCasa: TPanel;
BtnCadJogadoresTC: TButton;
DBGrdJogadoresCasa: TDBGrid;
DBGrdTitularesCasa: TDBGrid;
GrpBxSubFeitasCasa: TGroupBox;
BtnRemoverSubst1TC: TButton;
BtnRemoverSubst2TC: TButton;
BtnRemoverSubst3TC: TButton;
Panel5: TPanel;
LblNomeJC: TLabel;
LblCamisaJC: TLabel;
LblPosicaoJC: TLabel;
LblIdadeJC: TLabel;
LblNacionalidadeJC: TLabel;
Panel6: TPanel;
ImgJC: TImage;
SQLDtStEscJogoCasa: TSQLDataSet;
DtStPrvdrEscJogoCasa: TDataSetProvider;
ClntDtStEscJogoCasa: TClientDataSet;
DtSrcEscJogoCasa: TDataSource;
SQLDtStJogadorCasa: TSQLDataSet;
DtStPrvdrJogadorCasa: TDataSetProvider;
ClntDtStJogadorCasa: TClientDataSet;
IntegerField11: TIntegerField;
IntegerField12: TIntegerField;
IntegerField13: TIntegerField;
StringField10: TStringField;
StringField11: TStringField;
IntegerField14: TIntegerField;
DateField2: TDateField;
StringField12: TStringField;
IntegerField15: TIntegerField;
StringField13: TStringField;
StringField14: TStringField;
BlobField2: TBlobField;
DtSrcJogadorCasa: TDataSource;
ClntDtStEscJogoCasaCODJOGADOR: TIntegerField;
ClntDtStEscJogoCasaCODEQUIPE: TIntegerField;
ClntDtStEscJogoCasaCODTEMPORADA: TIntegerField;
ClntDtStEscJogoCasaAPELIDOJOGADOR: TStringField;
ClntDtStEscJogoCasaNOMEJOGADOR: TStringField;
ClntDtStEscJogoCasaNUMEROCAMISA: TIntegerField;
ClntDtStEscJogoCasaDATANASCIMENTO: TDateField;
ClntDtStEscJogoCasaNACIONALIDADE: TStringField;
ClntDtStEscJogoCasaPOSICAO: TIntegerField;
ClntDtStEscJogoCasaSTATUS: TStringField;
ClntDtStEscJogoCasaEMAIL: TStringField;
ClntDtStEscJogoCasaFOTO: TBlobField;
ClntDtStEscJogoCasaCODJOGO: TIntegerField;
ClntDtStEscJogoCasaCODEQUIPE_1: TIntegerField;
ClntDtStEscJogoCasaCODJOGADOR_1: TIntegerField;
ClntDtStEscJogoCasaCODJOGADORENTROU: TIntegerField;
ClntDtStEscJogoCasaSTATUS_1: TStringField;
ClntDtStEscJogoCasaSAIU: TStringField;
ClntDtStEscJogoCasaPos: TStringField;
ClntDtStEscJogoCasaMin: TStringField;
ClntDtStEscJogoCasaTEMPOJOGADO: TIntegerField;
ClntDtStEscJogoCasaMINUTOSUBSTITUICAO: TIntegerField;
ClntDtStEscJogoForaTEMPOJOGADO: TIntegerField;
ClntDtStEscJogoForaMINUTOSUBSTITUICAO: TIntegerField;
procedure BtnFecharClick(Sender: TObject);
procedure ClntDtStEscJogoForaCalcFields(DataSet: TDataSet);
procedure DBGrdTitularesForaCellClick(Column: TColumn);
procedure BtnEscalarJFClick(Sender: TObject);
procedure BtnDesEscalarJFClick(Sender: TObject);
procedure DBGrdJogadoresForaDblClick(Sender: TObject);
procedure BtnSubForaClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ClntDtStEscJogoCasaCalcFields(DataSet: TDataSet);
procedure BtnEscalarJCClick(Sender: TObject);
procedure BtnDesEscalarJCClick(Sender: TObject);
procedure BtnSubCasaClick(Sender: TObject);
procedure BtnRemoverSubst1TCClick(Sender: TObject);
procedure BtnRemoverSubst2TCClick(Sender: TObject);
176
177
TItemCombo(CmbBxReservasFora.Items.Objects[i]).Destroy;
i := i + 1;
end;
i := 1;
while (i < CmbBxTitularesFora.Items.Count) do begin
TItemCombo(CmbBxTitularesFora.Items.Objects[i]).Destroy;
i := i + 1;
end;
// Verifica quantos jogadores j foram escalados como titulares na Equipe Fora
SQL := 'select Count(*) from EscalacaoJogo EJ where EJ.CodJogo = ' +
IntToStr(CodJogo);
SQL := SQL + ' and EJ.CodEquipe = ' +
BD.ClntDtStJogo.FieldByName('CodEquipeFora').AsString + ' and STATUS=''T''';
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
NumJogadoresEscaladosTF := FieldByName('Count').asInteger;
end;
// Verifica quantos Jogadores a equipe tem inscrita no campeonato e que ainda no fora
escaladas
SQL := 'select Count(*) from Jogador J where J.CodEquipe=' +
BD.ClntDtStJogo.FieldByName('CodEquipeFora').AsString;
SQL := SQL + ' AND J.CodTemporada=' + IntToStr(CodTemporada) + ' AND J.CodJogador not
in (select CodJogador from EscalacaoJogo where CodJogo=';
SQL := SQL + IntToStr(CodJogo) + ' AND CodEquipe=' +
BD.ClntDtStJogo.FieldByName('CodEquipeFora').AsString + ')';
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
NumJogInscTF := FieldByName('Count').asInteger;
end;
// Habilita boto de remover Escalao se existe pelo menos 1 jogador escalado e
desabilita boto de escalacao se j tem 11 jogadores escalados
if NumJogInscTF > 0 then begin
BtnEscalarJF.Enabled := True;
end else begin
BtnEscalarJF.Enabled := False;
end;
if NumJogadoresEscaladosTF > 0 then begin
BtnDesEscalarJF.Enabled := True;
if NumJogadoresEscaladosTF >= 11 then begin
BtnEscalarJF.Enabled := False;
end;
end else begin
BtnDesEscalarJF.Enabled := False;
end;
SQLDtStJogadorFora.ParamByName('CodEquipe').asInteger :=
BD.ClntDtStJogo.FieldByName('CodEquipeFora').AsInteger;
SQLDtStJogadorFora.ParamByName('CodTemp').asInteger := CodTemporada;
SQLDtStJogadorFora.ParamByName('CodJogo').asInteger := CodJogo;
ClntDtStJogadorFora.Close;
ClntDtStJogadorFora.Open;
SQLDtStEscJogoFora.ParamByName('CodEquipe').asInteger :=
BD.ClntDtStJogo.FieldByName('CodEquipeFora').AsInteger;
SQLDtStEscJogoFora.ParamByName('CodJogo').asInteger := CodJogo;
// Atualiza Combo dos Minutos da Substituio
minutos := 90;
CmbBxMinutosFora.Items.Clear;
if BD.ClntDtStJogo.FieldByName('Realizado').AsInteger = 1 then begin
// Verifica quantos jogadores j foram Substituidos na Equipe Fora
SQL := 'select * from Jogador JT, Jogador JR, EscalacaoJogo EJ where EJ.CodJogo = '
+ IntToStr(CodJogo) + ' and EJ.CodEquipe = ' +
BD.ClntDtStJogo.FieldByName('CodEquipeFora').AsString + ' and JT.CodJogador =
EJ.CodJogador and JR.CodJogador = EJ.CodJogadorEntrou and EJ.Saiu = ''S''';
BD.SQLDtStDados.CommandText := SQL;
NumSubstEfetuadasTF := 0;
BtnRemoverSubst1TF.Enabled := False;
BtnRemoverSubst2TF.Enabled := False;
BtnRemoverSubst3TF.Enabled := False;
with BD.ClntDtStDados do begin
Close;
Open;
First;
178
179
ItemCombo.SetOid(FieldByName('CodJogador').asInteger);
ItemCombo.SetNome(FieldByName('ApelidoJogador').asString);
CmbBxTitularesFora.Items.AddObject(FieldByName('ApelidoJogador').asString,
ItemCombo);
end;
Next;
end;
CmbBxTitularesFora.ItemIndex := 0;
First;
end;
// Mostra dados Completos do jogador selecionado
if NumJogadoresEscaladosTF > 0 then begin
LblNomeJF.Caption := ClntDtStEscJogoFora.FieldByName('NomeJogador').asString;
LblCamisaJF.Caption := 'Camisa N: ' +
ClntDtStEscJogoFora.FieldByName('NumeroCamisa').asString;
case ClntDtStEscJogoFora.FieldByName('Posicao').asInteger of
1 : LblPosicaoJF.Caption := 'GOLEIRO';
2 : LblPosicaoJF.Caption := 'LATERAL';
3 : LblPosicaoJF.Caption := 'ZAGUEIRO';
4 : LblPosicaoJF.Caption := 'MEIO-CAMPO';
5 : LblPosicaoJF.Caption := 'ATACANTE';
end;
LblIdadeJF.Caption := 'Idade: ' + FormatDateTime('yy', (Date ClntDtStEscJogoFora.FieldByName('DataNascimento').asDateTime)) + ' Anos';
LblNacionalidadeJF.Caption :=
ClntDtStEscJogoFora.FieldByName('Nacionalidade').asString;
ImgJF.Picture.Bitmap.LoadFromStream(ClntDtStEscJogoFora.CreateBlobStream(ClntDtStEscJogo
Fora.FieldByName('Foto'),bmRead));
end else begin
LblNomeJF.Caption := '';
LblCamisaJF.Caption := '';
LblPosicaoJF.Caption := '';
LblIdadeJF.Caption := '';
LblNacionalidadeJF.Caption := '';
ImgJF.Picture.Bitmap.FreeImage;
end;
end;
procedure TFrmEscalacao.AtualizarInterfaceTC;
var
ItemCombo: TItemCombo;
i: Integer;
SQL: String;
begin
// Destroi os objetos dentro dos ComboBox se houverem.
i := 1;
while (i < CmbBxReservasCasa.Items.Count) do begin
TItemCombo(CmbBxReservasCasa.Items.Objects[i]).Destroy;
i := i + 1;
end;
i := 1;
while (i < CmbBxTitularesCasa.Items.Count) do begin
TItemCombo(CmbBxTitularesCasa.Items.Objects[i]).Destroy;
i := i + 1;
end;
// Verifica quantos jogadores j foram escalados como titulares na Equipe Fora
SQL := 'select Count(*) from EscalacaoJogo EJ where EJ.CodJogo = ' +
IntToStr(CodJogo);
SQL := SQL + ' and EJ.CodEquipe = ' +
BD.ClntDtStJogo.FieldByName('CodEquipeCasa').AsString + ' and STATUS=''T''';
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
NumJogadoresEscaladosTC := FieldByName('Count').asInteger;
end;
// Verifica quantos Jogadores a equipe tem inscrita no campeonato e que ainda no fora
escaladas
SQL := 'select Count(*) from Jogador J where J.CodEquipe=' +
BD.ClntDtStJogo.FieldByName('CodEquipeCasa').AsString;
SQL := SQL + ' AND J.CodTemporada=' + IntToStr(CodTemporada) + ' AND J.CodJogador not
in (select CodJogador from EscalacaoJogo where CodJogo=';
SQL := SQL + IntToStr(CodJogo) + ' AND CodEquipe=' +
BD.ClntDtStJogo.FieldByName('CodEquipeCasa').AsString + ')';
BD.SQLDtStDados.CommandText := SQL;
180
181
SubstituicoesTC[3,1] :=
BD.ClntDtStDados.FieldByName('CodJogador_2').AsInteger;
SubstituicoesTC[3,2] :=
BD.ClntDtStDados.FieldByName('CodJogador_1').AsInteger;
end;
end;
Next;
end;
end;
GrpBxSubCasa.Caption := 'Substituio ' + IntToStr(NumSubstEfetuadasTC + 1);
if ((NumSubstEfetuadasTC < 3) and (NumJogInscTC > 0) and (NumJogadoresEscaladosTC >
0)) then begin
BtnSubCasa.Enabled := True;
end else begin
BtnSubCasa.Enabled := False;
end;
if BD.ClntDtStJogo.FieldByName('Prorrogacao').AsInteger = 1 then minutos := 120;
end;
for i:=1 to minutos do begin
CmbBxMinutosCasa.Items.Add(IntToStr(i) + '''');
end;
CmbBxMinutosCasa.ItemIndex := 0;
// Atualiza Combo dos Jogadores Reservas que podem entrar no jogo
CmbBxReservasCasa.Items.Clear;
with ClntDtStJogadorCasa do begin
Close;
Open;
First;
while not eof do begin
ItemCombo := TItemCombo.Create;
ItemCombo.SetOid(FieldByName('CodJogador').asInteger);
ItemCombo.SetNome(FieldByName('ApelidoJogador').asString);
CmbBxReservasCasa.Items.AddObject(FieldByName('ApelidoJogador').asString,
ItemCombo);
Next;
end;
CmbBxReservasCasa.ItemIndex := 0;
First;
end;
// Atualiza Combo dos Jogadores Titulares que podem ser substituidos no jogo
CmbBxTitularesCasa.Items.Clear;
with ClntDtStEscJogoCasa do begin
Close;
Open;
First;
while not eof do begin
if FieldByName('Saiu').asString <> 'S' then begin // Se j substituido no aparece
ItemCombo := TItemCombo.Create;
ItemCombo.SetOid(FieldByName('CodJogador').asInteger);
ItemCombo.SetNome(FieldByName('ApelidoJogador').asString);
CmbBxTitularesCasa.Items.AddObject(FieldByName('ApelidoJogador').asString,
ItemCombo);
end;
Next;
end;
CmbBxTitularesCasa.ItemIndex := 0;
First;
end;
// Mostra dados Completos do jogador selecionado
if NumJogadoresEscaladosTC > 0 then begin
LblNomeJC.Caption := ClntDtStEscJogoCasa.FieldByName('NomeJogador').asString;
LblCamisaJC.Caption := 'Camisa N: ' +
ClntDtStEscJogoCasa.FieldByName('NumeroCamisa').asString;
case ClntDtStEscJogoCasa.FieldByName('Posicao').asInteger of
1 : LblPosicaoJC.Caption := 'GOLEIRO';
2 : LblPosicaoJC.Caption := 'LATERAL';
3 : LblPosicaoJC.Caption := 'ZAGUEIRO';
4 : LblPosicaoJC.Caption := 'MEIO-CAMPO';
5 : LblPosicaoJC.Caption := 'ATACANTE';
end;
LblIdadeJC.Caption := 'Idade: ' + FormatDateTime('yy', (Date ClntDtStEscJogoCasa.FieldByName('DataNascimento').asDateTime)) + ' Anos';
LblNacionalidadeJC.Caption :=
ClntDtStEscJogoCasa.FieldByName('Nacionalidade').asString;
ImgJC.Picture.Bitmap.LoadFromStream(ClntDtStEscJogoCasa.CreateBlobStream(ClntDtStEscJogo
Casa.FieldByName('Foto'),bmRead));
182
:= 'GOL';
:= 'LAT';
:= 'ZAG';
:= 'MC';
:= 'ATA';
'''';
183
except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
Self.AtualizarInterfaceTF;
end else begin
ShowMessage ('Operao Invlida');
end;
end;
procedure TFrmEscalacao.DBGrdJogadoresForaDblClick(Sender: TObject);
begin
if NumJogadoresEscaladosTF < 11 then begin
self.BtnEscalarJFClick (Sender);
end else begin
ShowMessage ('Erro: J foram escalados 11 Jogadores Titulares');
end;
end;
procedure TFrmEscalacao.BtnSubForaClick(Sender: TObject);
var
CodJogadorEntrou, CodJogadorSaiu: Integer;
MinutosJogadosEntrou, MinutosJogadosSaiu: Integer;
TempoJogo: String;
SQL: String;
begin
CodJogadorEntrou :=
TItemCombo(CmbBxReservasFora.Items.Objects[CmbBxReservasFora.ItemIndex]).GetOid;
CodJogadorSaiu :=
TItemCombo(CmbBxTitularesFora.Items.Objects[CmbBxTitularesFora.ItemIndex]).GetOid;
TempoJogo := CmbBxMinutosFora.Text;
SetLength(TempoJogo, Length(TempoJogo) - 1);
MinutosJogadosEntrou := Minutos - StrToInt(TempoJogo);
SQL := 'Select TempoJogado from EscalacaoJogo where CodJogo=' + IntToStr(CodJogo) + '
And CodJogador=' + IntToStr(CodJogadorSaiu);
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
MinutosJogadosSaiu := FieldByName('TempoJogado').asInteger - MinutosJogadosEntrou;
end;
try
Jogo.PromoverSubst (BD.ClntDtStJogo.FieldByName('CodEquipeFora').asInteger,
CodJogadorSaiu, MinutosJogadosSaiu, CodJogadorEntrou, MinutosJogadosEntrou,
StrToInt(TempoJogo));
except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
Self.AtualizarInterfaceTF;
end;
procedure TFrmEscalacao.RemoverSubstituicaoTF (i: Integer);
var
MinutosJogadosEntrou, MinutosJogadosSaiu: Integer;
SQL: String;
begin
SQL := 'Select TempoJogado from EscalacaoJogo where CodJogo=' + IntToStr(CodJogo) + '
And CodJogador=' + IntToStr(SubstituicoesTF[i,1]);
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
MinutosJogadosSaiu := FieldByName('TempoJogado').asInteger;
end;
SQL := 'Select TempoJogado from EscalacaoJogo where CodJogo=' + IntToStr(CodJogo) + '
And CodJogador=' + IntToStr(SubstituicoesTF[i,2]);
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
184
First;
MinutosJogadosEntrou := FieldByName('TempoJogado').asInteger;
end;
try
Jogo.RemoverSubstituicao (BD.ClntDtStJogo.FieldByName('CodEquipeFora').asInteger,
SubstituicoesTF[i,1], SubstituicoesTF[i,2], (MinutosJogadosSaiu +
MinutosJogadosEntrou));
except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
Self.AtualizarInterfaceTF;
end;
procedure TFrmEscalacao.FormDestroy(Sender: TObject);
var
i: Integer;
begin
i := 1;
while (i < CmbBxReservasFora.Items.Count) do begin
TItemCombo(CmbBxReservasFora.Items.Objects[i]).Destroy;
i := i + 1;
end;
i := 1;
while (i < CmbBxTitularesFora.Items.Count) do begin
TItemCombo(CmbBxTitularesFora.Items.Objects[i]).Destroy;
i := i + 1;
end;
BD.Destroy;
Jogo.Destroy;
Temporada.Destroy;
end;
procedure TFrmEscalacao.ClntDtStEscJogoCasaCalcFields(DataSet: TDataSet);
begin
if ClntDtStEscJogoCasaPosicao.Value = 1 then ClntDtStEscJogoCasaPos.Value
if ClntDtStEscJogoCasaPosicao.Value = 2 then ClntDtStEscJogoCasaPos.Value
if ClntDtStEscJogoCasaPosicao.Value = 3 then ClntDtStEscJogoCasaPos.Value
if ClntDtStEscJogoCasaPosicao.Value = 4 then ClntDtStEscJogoCasaPos.Value
if ClntDtStEscJogoCasaPosicao.Value = 5 then ClntDtStEscJogoCasaPos.Value
ClntDtStEscJogoCasaMin.Value := ClntDtStEscJogoCasaTempoJogado.asString +
end;
:= 'GOL';
:= 'LAT';
:= 'ZAG';
:= 'MC';
:= 'ATA';
'''';
185
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
Self.AtualizarInterfaceTC;
end else begin
ShowMessage ('Operao Invlida');
end;
end;
procedure TFrmEscalacao.RemoverSubstituicaoTC (i: Integer);
var
MinutosJogadosEntrou, MinutosJogadosSaiu: Integer;
SQL: String;
begin
SQL := 'Select TempoJogado from EscalacaoJogo where CodJogo=' + IntToStr(CodJogo) + '
And CodJogador=' + IntToStr(SubstituicoesTC[i,1]);
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
MinutosJogadosSaiu := FieldByName('TempoJogado').asInteger;
end;
SQL := 'Select TempoJogado from EscalacaoJogo where CodJogo=' + IntToStr(CodJogo) + '
And CodJogador=' + IntToStr(SubstituicoesTC[i,2]);
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
MinutosJogadosEntrou := FieldByName('TempoJogado').asInteger;
end;
try
Jogo.RemoverSubstituicao (BD.ClntDtStJogo.FieldByName('CodEquipeCasa').asInteger,
SubstituicoesTC[i,1], SubstituicoesTC[i,2], (MinutosJogadosSaiu +
MinutosJogadosEntrou));
except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
Self.AtualizarInterfaceTC;
end;
procedure TFrmEscalacao.BtnSubCasaClick(Sender: TObject);
var
CodJogadorEntrou, CodJogadorSaiu: Integer;
MinutosJogadosEntrou, MinutosJogadosSaiu: Integer;
TempoJogo: String;
SQL: String;
begin
CodJogadorEntrou :=
TItemCombo(CmbBxReservasCasa.Items.Objects[CmbBxReservasCasa.ItemIndex]).GetOid;
CodJogadorSaiu :=
TItemCombo(CmbBxTitularesCasa.Items.Objects[CmbBxTitularesCasa.ItemIndex]).GetOid;
TempoJogo := CmbBxMinutosCasa.Text;
SetLength(TempoJogo, Length(TempoJogo) - 1);
MinutosJogadosEntrou := Minutos - StrToInt(TempoJogo);
SQL := 'Select TempoJogado from EscalacaoJogo where CodJogo=' + IntToStr(CodJogo) + '
And CodJogador=' + IntToStr(CodJogadorSaiu);
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
MinutosJogadosSaiu := FieldByName('TempoJogado').asInteger - MinutosJogadosEntrou;
end;
try
Jogo.PromoverSubst (BD.ClntDtStJogo.FieldByName('CodEquipeCasa').asInteger,
CodJogadorSaiu, MinutosJogadosSaiu, CodJogadorEntrou, MinutosJogadosEntrou,
StrToInt(TempoJogo));
except
on E: Exception do begin
186
187
188
CodEquipe: Integer;
Equipes: Array [1..50] of ColecaoEquipes;
TotEquipes: Integer;
Nome: String;
CodEstadio: Integer;
public
{ Public declarations }
procedure SetBD (var umaConBD: TDtMdlDados);
procedure SetTemporada (umaTemp: TTemporada);
procedure Mostrar;
procedure AtualizaInterface;
function GetCodEquipe: Integer;
function RetorneCodigoEquipe(umNome: String): Integer;
function GetCodEstadio (umCodEquipe: Integer): Integer;
end;
var
FrmEquipeEquivalente: TFrmEquipeEquivalente;
implementation
{$R *.nfm}
function TFrmEquipeEquivalente.RetorneCodigoEquipe(umNome: String): Integer;
var
i: Integer;
Achou: Boolean;
begin
Achou := False;
i := 1;
Nome := umNome;
while ((Achou=False) and (i <= TotEquipes)) do begin
if Equipes[i].Nome = Nome then begin
CodEquipe := Equipes[i].Codigo;
Achou := True;
end;
Inc(i);
end;
if (Achou = False) then begin
Self.Mostrar;
CodEquipe := ClntDtStEquipeDisputaTemp.FieldByName('CodEquipe').AsInteger;
CodEstadio := ClntDtStEquipeDisputaTemp.FieldByName('CodEstadio').AsInteger;
Equipes[TotEquipes + 1].Nome := Nome;
Equipes[TotEquipes + 1].Codigo := CodEquipe;
Equipes[TotEquipes + 1].CodEstadio := CodEstadio;
inc(TotEquipes);
end;
RetorneCodigoEquipe := CodEquipe;
end;
procedure TFrmEquipeEquivalente.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
end;
procedure TFrmEquipeEquivalente.SetTemporada (umaTemp: TTemporada);
begin
Temporada := umaTemp;
TotEquipes := 0;
end;
procedure TFrmEquipeEquivalente.Mostrar;
begin
PnlEquipe.Text := Nome;
Self.AtualizaInterface;
ShowModal;
end;
procedure TFrmEquipeEquivalente.AtualizaInterface;
var
SQL: String;
i: Integer;
Achou: Boolean;
begin
if ChckBxTodasEquipes.Checked = False then begin
SQL := 'Select * FROM EQUIPECOMPETETEMPORADA ECT, EQUIPE E where
CODTEMPORADA=:CodTemp and ';
189
190
Achou := False;
while ((achou=false) and (i<=TotEquipes)) do begin
if Equipes[i].Codigo = umCodEquipe then begin
GetCodEstadio := Equipes[i].CodEstadio;
Achou := True;
end;
Inc(i);
end;
end;
end.
========================================================================================
====
ARQUIVO: UICadTemporada.pas
========================================================================================
====
unit UICadTemporada;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Borland.Vcl.StdCtrls, Borland.Vcl.Buttons,
System.ComponentModel, Borland.Vcl.ExtCtrls, Borland.Vcl.Grids,
Borland.Vcl.DBGrids, FMTBcd, Borland.Vcl.Provider, Borland.Vcl.SqlExpr,
Borland.Vcl.Db, Borland.Vcl.DBClient, UDMDados, UItemCombo, UICadCampeonato,
UTemporada;
type
TFrmCadTemporada = class(TForm)
PnlDados: TPanel;
Label5: TLabel;
EdtNomeTemporada: TEdit;
GrpBxTN: TGroupBox;
Label9: TLabel;
Label10: TLabel;
EdtPtsVitTN: TEdit;
EdtPtsEmpTN: TEdit;
GrpBxPro: TGroupBox;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
EdtPtsVitPro: TEdit;
EdtPtsEmpPro: TEdit;
EdtPtsDerPro: TEdit;
GrpBxPen: TGroupBox;
Label11: TLabel;
Label12: TLabel;
EdtPtsVitPen: TEdit;
EdtPtsDerPen: TEdit;
MmDescricao: TMemo;
Label2: TLabel;
GrpBxClas: TGroupBox;
Label3: TLabel;
EdtNumPro: TEdit;
LstBxCriterioDesempate: TListBox;
Label1: TLabel;
BtnSubir: TBitBtn;
BtnDescer: TBitBtn;
Label14: TLabel;
EdtNumComp1: TEdit;
Label4: TLabel;
EdtNumComp2: TEdit;
EdtNumPOReb: TEdit;
Label13: TLabel;
EdtNumReb: TEdit;
Label15: TLabel;
CmbBxCampeonato: TComboBox;
DBGrdEquipe: TDBGrid;
Panel3: TPanel;
PnlBtns: TPanel;
BtnGravar: TBitBtn;
BtnCancelar: TBitBtn;
Label16: TLabel;
ClntDtStCampeonato: TClientDataSet;
DtSrcCampeonato: TDataSource;
191
SQLDtStCampeonato: TSQLDataSet;
DtStPrvdrCampeonato: TDataSetProvider;
ClntDtStCampeonatoCODTEMPORADA: TIntegerField;
ClntDtStCampeonatoCODCAMPEONATO: TIntegerField;
ClntDtStCampeonatoNOMETEMPORADA: TStringField;
ClntDtStCampeonatoPONTOSVITORIA: TIntegerField;
ClntDtStCampeonatoPONTOSEMPATE: TIntegerField;
ClntDtStCampeonatoPONTOSVITORIAPRORROGACAO: TIntegerField;
ClntDtStCampeonatoPONTOSVITORIAPENALTIS: TIntegerField;
ClntDtStCampeonatoPONTOSDERROTAPRORROGACAO: TIntegerField;
ClntDtStCampeonatoPONTOSDERROTAPENALTIS: TIntegerField;
ClntDtStCampeonatoDESCRICAO: TMemoField;
ClntDtStCampeonatoNUMTIMEREBAIXADO: TIntegerField;
ClntDtStCampeonatoNUMTIMEPROMOVIDO: TIntegerField;
ClntDtStCampeonatoPONTOSEMPATEPRORROGACAO: TIntegerField;
ClntDtStCampeonatoCODCAMPEONATO_1: TIntegerField;
ClntDtStCampeonatoNOME: TStringField;
ClntDtStCampeonatoTIPO: TIntegerField;
ClntDtStCampeonatoPAIS: TStringField;
ClntDtStCampeonatoESCUDO: TBlobField;
ClntDtStCampeonatoNomeCampeoTemp: TStringField;
SQLDtStDados: TSQLDataSet;
DtStPrvdrDados: TDataSetProvider;
ClntDtStDados: TClientDataSet;
ClntDtStCampeonatoSQLDESEMPATE: TStringField;
ClntDtStCampeonatoNUMTIMECOMPET1: TIntegerField;
ClntDtStCampeonatoNUMTIMECOMPET2: TIntegerField;
ClntDtStCampeonatoNUMTIMEPOREBAIXAMENTO: TIntegerField;
BtnIncluirCampeonato: TButton;
BtnFechar: TBitBtn;
BtnIncluirTemporada: TBitBtn;
BtnAlterarTemporada: TBitBtn;
BtnExcluirTemporada: TBitBtn;
procedure BtnFecharClick(Sender: TObject);
procedure ClntDtStCampeonatoCalcFields(DataSet: TDataSet);
procedure BtnCancelarClick(Sender: TObject);
procedure EdtPtsVitTNKeyPress(Sender: TObject; var Key: Char);
procedure FormDestroy(Sender: TObject);
procedure BtnIncluirTemporadaClick(Sender: TObject);
procedure BtnIncluirCampeonatoClick(Sender: TObject);
procedure BtnAlterarTemporadaClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure DBGrdEquipeDblClick(Sender: TObject);
procedure BtnGravarClick(Sender: TObject);
procedure BtnSubirClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BtnDescerClick(Sender: TObject);
private
{ Private declarations }
conBD: TDtMdlDados;
Status: String;
CodTemporada: Integer;
NumTempCadastradas: Integer;
procedure CarregarCmbBxCampeonato;
procedure LimparCmbBxEstadioEquipe;
procedure AtivaFormulario;
procedure BloqueiaFormulario;
function GetCriterioDesempate: String;
function validaCadastro: Boolean;
procedure AtualizaLstBxCriterioDesempate (Texto: String);
public
{ Public declarations }
procedure SetBD(var umaConBD: TDtMdlDados);
procedure Mostrar;
end;
var
FrmCadTemporada: TFrmCadTemporada;
implementation
{$R *.nfm}
procedure TFrmCadTemporada.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
end;
192
193
MmDescricao.Lines.Clear;
EdtPtsVitTN.Text := '3';
EdtPtsEmpTN.Text := '1';
EdtPtsVitPro.Text := '0';
EdtPtsEmpPro.Text := '0';
EdtPtsDerPro.Text := '0';
EdtPtsVitPen.Text := '0';
EdtPtsDerPen.Text := '0';
EdtNumPro.Text := '0';
EdtNumComp1.Text := '0';
EdtNumComp2.Text := '0';
EdtNumPOReb.Text := '0';
EdtNumReb.Text := '0';
end;
procedure TFrmCadTemporada.AtivaFormulario;
begin
Self.CarregarCmbBxCampeonato;
CmbBxCampeonato.Enabled := True;
EdtNomeTemporada.Enabled := True;
MmDescricao.Enabled := True;
EdtPtsVitTN.Enabled := True;
EdtPtsEmpTN.Enabled := True;
EdtPtsVitPro.Enabled := True;
EdtPtsEmpPro.Enabled := True;
EdtPtsDerPro.Enabled := True;
EdtPtsVitPen.Enabled := True;
EdtPtsDerPen.Enabled := True;
EdtNumPro.Enabled := True;
EdtNumComp1.Enabled := True;
EdtNumComp2.Enabled := True;
EdtNumPOReb.Enabled := True;
EdtNumReb.Enabled := True;
BtnSubir.Enabled := True;
BtnDescer.Enabled := True;
BtnIncluirCampeonato.Enabled := True;
LstBxCriterioDesempate.Enabled := True;
BtnGravar.Enabled := True;
BtnCancelar.Enabled := True;
CmbBxCampeonato.SetFocus;
end;
procedure TFrmCadTemporada.BloqueiaFormulario;
begin
EdtNomeTemporada.Text := '';
MmDescricao.Lines.Clear;
EdtPtsVitTN.Text := '';
EdtPtsEmpTN.Text := '';
EdtPtsVitPro.Text := '';
EdtPtsEmpPro.Text := '';
EdtPtsDerPro.Text := '';
EdtPtsVitPen.Text := '';
EdtPtsDerPen.Text := '';
EdtNumPro.Text := '';
EdtNumComp1.Text := '';
EdtNumComp2.Text := '';
EdtNumPOReb.Text := '';
EdtNumReb.Text := '';
Self.LimparCmbBxEstadioEquipe;
CmbBxCampeonato.Enabled := False;
EdtNomeTemporada.Enabled := False;
MmDescricao.Enabled := False;
EdtPtsVitTN.Enabled := False;
EdtPtsEmpTN.Enabled := False;
EdtPtsVitPro.Enabled := False;
EdtPtsEmpPro.Enabled := False;
EdtPtsDerPro.Enabled := False;
EdtPtsVitPen.Enabled := False;
EdtPtsDerPen.Enabled := False;
EdtNumPro.Enabled := False;
EdtNumComp1.Enabled := False;
EdtNumComp2.Enabled := False;
EdtNumPOReb.Enabled := False;
EdtNumReb.Enabled := False;
BtnSubir.Enabled := False;
BtnDescer.Enabled := False;
LstBxCriterioDesempate.Enabled := False;
194
BtnGravar.Enabled := False;
BtnCancelar.Enabled := False;
BtnIncluirCampeonato.Enabled := False;
SQLDtStDados.CommandText := 'Select Count(*) from Temporada';
ClntDtStDados.Close;
ClntDtStDados.Open;
NumTempCadastradas := ClntDtStDados.FieldByName('Count').AsInteger;
if NumTempCadastradas = 0 then begin
BtnAlterarTemporada.Enabled := False;
end else begin
BtnAlterarTemporada.Enabled := True;
end;
end;
procedure TFrmCadTemporada.BtnIncluirCampeonatoClick(Sender: TObject);
var
FrmCadCampeonato: TFrmCadCampeonato;
begin
FrmCadCampeonato := TFrmCadCampeonato.Create(nil); FrmCadCampeonato.SetBD(ConBD);
FrmCadCampeonato.Mostrar;
FrmCadCampeonato.Destroy;
Self.CarregarCmbBxCampeonato;
end;
procedure TFrmCadTemporada.BtnAlterarTemporadaClick(Sender: TObject);
var
i: Integer;
achou: Boolean;
begin
Status := 'A';
CodTemporada := ClntDtStCampeonato.FieldByName('CodTemporada').asInteger;
Self.BloqueiaFormulario;
Self.AtivaFormulario;
EdtNomeTemporada.Text := ClntDtStCampeonato.FieldByName('NomeTemporada').asString;
MmDescricao.Lines.Add (ClntDtStCampeonato.FieldByName('Descricao').asString);
EdtPtsVitTN.Text := ClntDtStCampeonato.FieldByName('PontosVitoria').asString;
EdtPtsEmpTN.Text := ClntDtStCampeonato.FieldByName('PontosEmpate').asString;
EdtPtsVitPro.Text :=
ClntDtStCampeonato.FieldByName('PontosVitoriaProrrogacao').asString;
EdtPtsEmpPro.Text :=
ClntDtStCampeonato.FieldByName('PontosEmpateProrrogacao').asString;
EdtPtsDerPro.Text :=
ClntDtStCampeonato.FieldByName('PontosDerrotaProrrogacao').asString;
EdtPtsVitPen.Text := ClntDtStCampeonato.FieldByName('PontosVitoriaPenaltis').asString;
EdtPtsDerPen.Text := ClntDtStCampeonato.FieldByName('PontosDerrotaPenaltis').asString;
EdtNumPro.Text := ClntDtStCampeonato.FieldByName('NumTimePromovido').asString;
EdtNumComp1.Text := ClntDtStCampeonato.FieldByName('NumTimeCompet1').asString;
EdtNumComp2.Text := ClntDtStCampeonato.FieldByName('NumTimeCompet2').asString;
EdtNumPOReb.Text := ClntDtStCampeonato.FieldByName('NumTimePORebaixamento').asString;
EdtNumReb.Text := ClntDtStCampeonato.FieldByName('NumTimeRebaixado').asString;
while ((i < CmbBxCampeonato.Items.Count) and (not achou)) do begin
if TItemCombo(CmbBxCampeonato.Items.Objects[i]).GetOid =
ClntDtStCampeonato.FieldByName('CodCampeonato').AsInteger then begin
CmbBxCampeonato.ItemIndex := i;
achou := true;
end;
i := i + 1;
end;
LstBxCriterioDesempate.Items.Clear;
Self.AtualizaLstBxCriterioDesempate(ClntDtStCampeonato.FieldByName('SQLDesempate').asStr
ing);
end;
procedure TFrmCadTemporada.FormShow(Sender: TObject);
begin
Self.BloqueiaFormulario;
end;
procedure TFrmCadTemporada.DBGrdEquipeDblClick(Sender: TObject);
begin
if NumTempCadastradas > 0 then begin
Self.BtnAlterarTemporadaClick(Sender);
end;
end;
procedure TFrmCadTemporada.BtnGravarClick(Sender: TObject);
195
var
Temporada: TTemporada;
CodCampeonato, PtsVit, PtsEmp, PtsVitPro, PtsEmpPro, PtsDerPro, PtsVitPen, PtsDerPen:
Integer;
NumPro, NumComp1, NumComp2, NumPOReb, NumReb: Integer;
NomeTemporada, Descricao, Criterio: String;
begin
if Self.ValidaCadastro then begin
CodCampeonato :=
TItemCombo(CmbBxCampeonato.Items.Objects[CmbBxCampeonato.ItemIndex]).GetOid;
NomeTemporada := EdtNomeTemporada.Text;
Descricao := MmDescricao.Text;
Criterio := Self.GetCriterioDesempate;
PtsVit := StrToInt(EdtPtsVitTN.Text);
PtsEmp := StrToInt(EdtPtsEmpTN.Text);
PtsVitPro := StrToInt(EdtPtsVitPro.Text);
PtsEmpPro := StrToInt(EdtPtsEmpPro.Text);
PtsDerPro := StrToInt(EdtPtsDerpro.Text);
PtsVitPen := StrToInt(EdtPtsVitPen.Text);
PtsDerPen := StrToInt(EdtPtsDerPen.Text);
NumPro := StrToInt(EdtNumPro.Text);
NumComp1 := StrToInt(EdtNumComp1.Text);
NumComp2 := StrToInt(EdtNumComp2.Text);
NumPOReb := StrToInt(EdtNumPOReb.Text);
NumReb := StrToInt(EdtNumReb.Text);
try
Temporada := TTemporada.Create; Temporada.SetBD(ConBD);
if Status = 'N' then begin
Temporada.NovaTemporada(CodCampeonato, PtsVit, PtsEmp, PtsVitPro, PtsEmpPro,
PtsDerPro, PtsVitPen,
PtsDerPen, NumPro, NumComp1, NumComp2, NumPOReb, NumReb, NomeTemporada,
Descricao, Criterio);
end else begin
Temporada.Materializar (CodTemporada);
Temporada.AlterarTemporada(CodCampeonato, PtsVit, PtsEmp, PtsVitPro, PtsEmpPro,
PtsDerPro,
PtsVitPen, PtsDerPen, NumPro, NumComp1, NumComp2, NumPOReb, NumReb,
NomeTemporada, Descricao, Criterio);
end;
Self.BloqueiaFormulario;
ClntDtStCampeonato.Close;
ClntDtStCampeonato.Open;
Temporada.Destroy;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
end;
function TFrmCadTemporada.validaCadastro: Boolean;
begin
if CmbBxCampeonato.ItemIndex < 0 then begin
ShowMessage('Voc deve incluir um Campeonato antes de Incluir a Temporada');
BtnIncluirCampeonato.SetFocus;
end else begin
if EdtNomeTemporada.Text = '' then begin
ShowMessage('Nome da Temporada Invlido');
EdtNomeTemporada.SetFocus;
end else begin
ValidaCadastro := True;
if EdtPtsVitTN.Text = '' then EdtPtsVitTN.Text := '3';
if EdtPtsEmpTN.Text = '' then EdtPtsEmpTN.Text := '1';
if EdtPtsVitPro.Text = '' then EdtPtsVitPro.Text := '0';
if EdtPtsEmpPro.Text = '' then EdtPtsEmpPro.Text := '0';
if EdtPtsDerPro.Text = '' then EdtPtsEmpPro.Text := '0';
if EdtPtsVitPen.Text = '' then EdtPtsVitPen.Text := '0';
if EdtPtsDerPen.Text = '' then EdtPtsDerPen.Text := '0';
if EdtNumPro.Text = '' then EdtNumPro.Text := '0';
if EdtNumComp1.Text = '' then EdtNumComp1.Text := '0';
if EdtNumComp2.Text = '' then EdtNumComp2.Text := '0';
if EdtNumPOReb.Text = '' then EdtNumPOReb.Text := '0';
if EdtNumReb.Text = '' then EdtNumReb.Text := '0';
end;
end;
196
end;
function TFrmCadTemporada.GetCriterioDesempate: String;
var
SQL: String;
i: integer;
begin
// Saldo de Gols:1; Vitorias: 2; GolsPro: 3; Gols Fora: 4
SQL := '';
for i:= 0 to 3 do begin
if LstBxCriterioDesempate.Items[i] = 'Saldo de Gols' then begin
SQL := SQL + '1';
end else begin
if LstBxCriterioDesempate.Items[i] = 'Numero de Vitorias' then begin
SQL := SQL + '2';
end else begin
if LstBxCriterioDesempate.Items[i] = 'Gols Pro' then begin
SQL := SQL + '3';
end else begin
SQL := SQL + '4'; // Gols Fora de Casa
end;
end;
end;
end;
GetCriterioDesempate := SQL;
end;
procedure TFrmCadTemporada.FormCreate(Sender: TObject);
begin
LstBxCriterioDesempate.ItemIndex := 0;
end;
procedure TFrmCadTemporada.AtualizaLstBxCriterioDesempate (Texto: String);
var
i: Integer;
begin
for i:=1 to Length(Texto) do begin
if Texto[i] = '1' then begin
LstBxCriterioDesempate.Items.Add('Saldo de Gols');
end else begin
if Texto[i] = '2' then begin
LstBxCriterioDesempate.Items.Add('Numero de Vitorias');
end else begin
if Texto[i] = '3' then begin
LstBxCriterioDesempate.Items.Add('Gols Pro');
end else begin
if Texto[i] = '4' then begin
LstBxCriterioDesempate.Items.Add('Gols Fora de Casa');
end;
end;
end;
end;
end;
end;
procedure TFrmCadTemporada.BtnSubirClick(Sender: TObject);
var
Texto: String;
begin
if LstBxCriterioDesempate.ItemIndex <> 0 then begin
Texto := LstBxCriterioDesempate.Items[LstBxCriterioDesempate.ItemIndex-1];
LstBxCriterioDesempate.Items[LstBxCriterioDesempate.ItemIndex-1] :=
LstBxCriterioDesempate.Items[LstBxCriterioDesempate.ItemIndex];
LstBxCriterioDesempate.Items[LstBxCriterioDesempate.ItemIndex] := Texto;
LstBxCriterioDesempate.ItemIndex := LstBxCriterioDesempate.ItemIndex - 1;
end;
end;
procedure TFrmCadTemporada.BtnDescerClick(Sender: TObject);
var
Texto: String;
begin
if LstBxCriterioDesempate.ItemIndex <> 3 then begin
Texto := LstBxCriterioDesempate.Items[LstBxCriterioDesempate.ItemIndex+1];
LstBxCriterioDesempate.Items[LstBxCriterioDesempate.ItemIndex+1] :=
LstBxCriterioDesempate.Items[LstBxCriterioDesempate.ItemIndex];
LstBxCriterioDesempate.Items[LstBxCriterioDesempate.ItemIndex] := Texto;
197
LstBxCriterioDesempate.ItemIndex := LstBxCriterioDesempate.ItemIndex + 1;
end;
end;
end.
========================================================================================
====
ARQUIVO: UICadJogos.pas
========================================================================================
====
unit UICadJogos;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Borland.Vcl.StdCtrls, Borland.Vcl.DBCtrls, Borland.Vcl.ComCtrls,
Borland.Vcl.ExtCtrls, Borland.Vcl.Mask, System.ComponentModel, DBXpress,
FMTBcd, Borland.Vcl.Provider, Borland.Vcl.DBClient, Borland.Vcl.Db,
Borland.Vcl.SqlExpr, Borland.Vcl.Buttons, UTemporada, UItemCombo, UMeuUtils,
UDMDados, Borland.Vcl.ExtDlgs, UDMICadJogos, UICadEstadio, UICadArbitro,
Borland.Vcl.IniFiles;
type
TFrmCadJogos = class(TForm)
Panel1: TPanel;
PgCntrlDados: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
PnlTmpNormal: TPanel;
PnlProrrog: TPanel;
PnlPen: TPanel;
ChckBxTempoNormal: TCheckBox;
ChckBxProrrogacao: TCheckBox;
ChckBxPenaltis: TCheckBox;
Label1: TLabel;
DtTmPckrDataJogo: TDateTimePicker;
Label2: TLabel;
Label5: TLabel;
BtnIncluirArbitro: TButton;
Label4: TLabel;
CmbBxEstadio: TComboBox;
BtnIncluirEstadio: TButton;
Label3: TLabel;
BtnGravar: TBitBtn;
BtnCancelar: TBitBtn;
Panel5: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Label7: TLabel;
EdtTV: TEdit;
Panel8: TPanel;
Panel9: TPanel;
Panel10: TPanel;
Panel11: TPanel;
TabSheet3: TTabSheet;
MmComentarios: TMemo;
Label6: TLabel;
PnlDiaSemana: TPanel;
CmbBxEquipeCasa: TComboBox;
CmbBxEquipeFora: TComboBox;
EdtGolsCasa: TEdit;
EdtGolsCasaProrrog: TEdit;
EdtGolsCasaPen: TEdit;
EdtGolsFora: TEdit;
EdtGolsForaProrrog: TEdit;
EdtGolsForaPen: TEdit;
EdtPublico: TEdit;
EdtHoraJogo: TMaskEdit;
CmbBxArbitro: TComboBox;
PnlEquipeCasa: TPanel;
Panel13: TPanel;
PnlEquipeFora: TPanel;
EdtChutesCasa: TEdit;
EdtFaltasCasa: TEdit;
EdtEscanteiosCasa: TEdit;
198
EdtImpedimentosCasa: TEdit;
EdtChutesFora: TEdit;
EdtFaltasFora: TEdit;
EdtImpedimentosFora: TEdit;
EdtEscanteiosFora: TEdit;
Panel12: TPanel;
ImgEquipeFora: TImage;
Panel14: TPanel;
ImgEquipeCasa: TImage;
Panel15: TPanel;
ImgEstadio: TImage;
TabSheet4: TTabSheet;
BtnFoto1: TButton;
Panel17: TPanel;
BtnFoto2: TButton;
OpenPictureDialog1: TOpenPictureDialog;
ImgJogo2: TImage;
Panel16: TPanel;
ImgJogo1: TImage;
ImgBranco: TImage;
procedure BtnGravarClick(Sender: TObject);
procedure ChckBxTempoNormalClick(Sender: TObject);
procedure ChckBxProrrogacaoClick(Sender: TObject);
procedure ChckBxPenaltisClick(Sender: TObject);
procedure DtTmPckrDataJogoChange(Sender: TObject);
procedure EdtGolsForaKeyPress(Sender: TObject; var Key: Char);
procedure CmbBxEquipeCasaChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure CmbBxEquipeForaChange(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure CmbBxEstadioChange(Sender: TObject);
procedure BtnFoto1Click(Sender: TObject);
procedure BtnFoto2Click(Sender: TObject);
procedure BtnCancelarClick(Sender: TObject);
procedure BtnIncluirEstadioClick(Sender: TObject);
procedure BtnIncluirArbitroClick(Sender: TObject);
procedure AtualizaCmbBxEstadio;
procedure AtualizaCmbBxArbitro;
procedure EdtHoraJogoChange(Sender: TObject);
private
{ Private declarations }
CodTemporada, CodFase, CodGrupo, CodRodada, CodJogo : integer;
Temporada: TTemporada;
MeusUtils: TMeusUtils;
conBD: TDtMdlDados;
BD: TDtMdlICadJogos;
Status: String; //A: Alterar Jogo; N: NovoJogo;
public
{ Public declarations }
procedure Mostrar (umaTemporada : TTemporada; umCodTemp, umaFase, umGrupo,
umaRodada, umCodJogo : integer; umStatus: String);
procedure SetBD (var conBD: TDtMdlDados);
procedure CarregarDadosJogo;
procedure AtualizarDadosJogo;
procedure SetEstadio;
function ValidaJogo : boolean;
function TestaHorario : boolean;
end;
var
FrmCadJogos: TFrmCadJogos;
implementation
{$R *.nfm}
procedure TFrmCadJogos.Mostrar (umaTemporada : TTemporada; umCodTemp, umaFase, umGrupo,
umaRodada, umCodJogo : integer; umStatus: String);
var
SQL: String;
NumTimesCadastrados: Integer;
umaData, umaHora: String;
ArqIni: TIniFile;
begin
Temporada := umaTemporada;
CodTemporada := umCodTemp;
CodFase := umaFase;
CodGrupo := umGrupo;
199
CodRodada := umaRodada;
CodJogo := umCodJogo;
Status := umStatus;
ArqIni := TIniFile.Create(ChangeFileExt(Application.Exename, '..INI'));
umaData := ArqIni.ReadString('CadJogo', 'Data', umaData);
umaHora := ArqIni.ReadString('CadJogo', 'Hora', umaHora);
DtTmPckrDataJogo.DateTime := StrToDateTime(umaData);
EdtHoraJogo.Text := umaHora;
ArqIni.Free;
SQL := 'Select COUNT(*) from EQUIPECOMPETETEMPORADA where CODTEMPORADA=' +
IntToStr(Temporada.GetCodTemporada);
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
NumTimesCadastrados := FieldByName('Count').asInteger;
end;
if NumTimesCadastrados > 1 then begin
Self.AtualizarDadosJogo;
if Status = 'A' then begin
Self.CarregarDadosJogo;
end;
PnlDiaSemana.Caption := MeusUtils.DiaDaSemana(DtTmPckrDataJogo.Date);
showModal;
end else begin
ShowMessage('Esta Temporada no possui equipes para incluir o jogo');
end;
end;
procedure TFrmCadJogos.CarregarDadosJogo;
var
codEst, i : integer;
achou : boolean;
Hora, Minuto: String;
begin
BD.SQLDtStJogo.ParamByName('Cod').AsInteger := codJogo;
with BD.ClntDtStJogo do begin
Close;
Open;
First;
// ------ Atualiza o Time da Casa
achou := false;
i:= 0;
while (achou=false) and (i < CmbBxEquipeCasa.Items.Count) do begin
if TItemCombo(CmbBxEquipeCasa.Items.Objects[i]).GetOid =
FieldByName('CodEquipeCasa').asInteger then begin
Achou := true;
CmbBxEquipeCasa.ItemIndex := i;
end;
i := i + 1;
end;
PnlEquipeCasa.caption := CmbBxEquipeCasa.Items.Strings[CmbBxEquipeCasa.ItemIndex];
Self.CmbBxEquipeCasaChange(nil);
// ------ Atualiza o Time da Fora
achou := false;
i:= 0;
while (achou=false) and (i < CmbBxEquipeFora.Items.Count) do begin
if TItemCombo(CmbBxEquipeFora.Items.Objects[i]).GetOid =
FieldByName('CodEquipeFora').asInteger then begin
Achou := true;
CmbBxEquipeFora.ItemIndex := i;
end;
i := i + 1;
end;
PnlEquipeFora.caption := CmbBxEquipeFora.Items.Strings[CmbBxEquipeFora.ItemIndex];
Self.CmbBxEquipeForaChange(nil);
// ------ Atualiza o Estadio do Jogo
achou := false;
i:= 0;
while (achou=false) and (i < CmbBxEstadio.Items.Count) do begin
if TItemCombo(CmbBxEstadio.Items.Objects[i]).GetOid =
FieldByName('CodEstadio').asInteger then begin
Achou := true;
CmbBxEstadio.ItemIndex := i;
end;
i := i + 1;
200
end;
Self.CmbBxEstadioChange(nil);
// ------ Atualiza o Arbitro do Jogo
achou := false;
i:= 0;
while (achou=false) and (i < CmbBxArbitro.Items.Count) do begin
if TItemCombo(CmbBxArbitro.Items.Objects[i]).GetOid =
FieldByName('CodArbitro').asInteger then begin
Achou := true;
CmbBxArbitro.ItemIndex := i;
end;
i := i + 1;
end;
// ------ Atualiza Demais campos
if FieldByName('Realizado').asInteger = 1 then begin
CmbBxEquipeCasa.Enabled := False;
CmbBxEquipeFora.Enabled := False;
ChckBxTempoNormal.Checked := True;
ChckBxTempoNormal.Enabled := True;
EdtGolsCasa.Enabled := True;
EdtGolsCasa.Text := FieldByName('GolsTimeCasa').asString;
EdtGolsFora.Enabled := True;
EdtGolsFora.Text := FieldByName('GolsTimeFora').asString;
EdtFaltasCasa.Enabled := True;
EdtFaltasCasa.Text := FieldByName('EstatFaltaCasa').asString;
EdtFaltasFora.Enabled := True;
EdtFaltasFora.Text := FieldByName('EstatFaltaFora').asString;
EdtEscanteiosCasa.Enabled := True;
EdtEscanteiosCasa.Text := FieldByName('EstatEscanteioCasa').asString;
EdtEscanteiosFora.Enabled := True;
EdtEscanteiosFora.Text := FieldByName('EstatEscanteioFora').asString;
EdtImpedimentosCasa.Enabled := True;
EdtImpedimentosCasa.Text := FieldByName('EstatImpedimentoCasa').asString;
EdtImpedimentosFora.Enabled := True;
EdtImpedimentosFora.Text := FieldByName('EstatImpedimentoFora').asString;
EdtChutesCasa.Enabled := True;
EdtChutesCasa.Text := FieldByName('EstatChuteCasa').asString;
EdtChutesFora.Enabled := True;
EdtChutesFora.Text := FieldByName('EstatChuteFora').asString;
EdtPublico.Text := FieldByName('Publico').asString;
if FieldByName('Prorrogacao').asInteger = 1 then begin
ChckBxProrrogacao.Checked := True;
ChckBxProrrogacao.Enabled := True;
EdtGolsCasaProrrog.Text := FieldByName('GolsTimeCasaProrrogacao').asString;
EdtGolsForaProrrog.Text := FieldByName('GolsTimeForaProrrogacao').asString;
if FieldByName('Penaltis').asInteger = 1 then begin
ChckBxPenaltis.Checked := True;
ChckBxPenaltis.Enabled := True;
EdtGolsCasaPen.Text := FieldByName('GolsTimeCasaPenaltis').asString;
EdtGolsForaPen.Text := FieldByName('GolsTimeForaPenaltis').asString;
end;
end;
end;
EdtTV.Text := FieldByName('TV').asString;
DtTmPckrDataJogo.DateTime := FieldByName('DataHoraJogo').asDateTime;
Hora := TimeToStr(FieldByName('DataHoraJogo').asDateTime).Substring(0,2);
Minuto := TimeToStr(FieldByName('DataHoraJogo').asDateTime).Substring(3,2);
EdtHoraJogo.Text := Hora + ':' + Minuto;
MmComentarios.Lines.Add (FieldByName('Noticia').asString);
ImgJogo1.Picture.BitMap.LoadFromStream(CreateBlobStream(FieldByName('Foto1'),bmRead));
ImgJogo2.Picture.BitMap.LoadFromStream(CreateBlobStream(FieldByName('Foto2'),bmRead));
end;
end;
procedure TFrmCadJogos.SetBD (var conBD: TDtMdlDados);
begin
BD := TDtMdlICadJogos.Create(nil);
BD.SetConexaoBD(conBD);
end;
procedure TFrmCadJogos.AtualizarDadosJogo;
var
ItemCombo : TItemCombo;
Imagem: TStream;
umaData: String;
201
begin
// ------ Atualiza os ComboBox dos Times da Casa e dos Times de Fora ----------BD.SQLDtStEquipe.ParamByName('codTemp').AsInteger := codTemporada;
with BD.ClntDtStEquipe do begin
Close;
Open;
First;
while not eof do begin
ItemCombo := TItemCombo.Create;
ItemCombo.setOid(FieldByName('CodEquipe').asInteger);
ItemCombo.SetNome(FieldByName('NomeEquipe').asString);
ItemCombo.setOid2(FieldByName('CodEstadio').asInteger);
CmbBxEquipeCasa.Items.AddObject(FieldByName('NomeEquipe').asString, ItemCombo);
CmbBxEquipeFora.Items.AddObject(FieldByName('NomeEquipe').asString, ItemCombo);
Next;
end;
end;
CmbBxEquipeCasa.ItemIndex := 0;
CmbBxEquipeFora.ItemIndex := 1;
PnlEquipeCasa.caption := CmbBxEquipeCasa.Items.Strings[CmbBxEquipeCasa.ItemIndex];
PnlEquipeFora.caption := CmbBxEquipeFora.Items.Strings[CmbBxEquipeFora.ItemIndex];
// ------ Atualiza os ComboBox do Juiz ----------Self.AtualizaCmbBxArbitro;
// ------ Atualiza os ComboBox do Estdio ----------Self.AtualizaCmbBxEstadio;
Self.CmbBxEquipeCasaChange(nil);
Self.CmbBxEquipeForaChange(nil);
end;
procedure TFrmCadJogos.AtualizaCmbBxArbitro;
var
ItemCombo: TItemCombo;
i: Integer;
begin
for i:=0 to CmbBxArbitro.Items.Count-1 do begin
TItemCombo(CmbBxArbitro.Items.Objects[i]).Destroy;
end;
CmbBxArbitro.Items.Clear;
ItemCombo := TItemCombo.Create;
ItemCombo.setOid(0);
CmbBxArbitro.Items.AddObject('', ItemCombo);
BD.SQLDtStArbitro.ParamByName('codTemp').AsInteger := codTemporada;
with BD.ClntDtStArbitro do begin
Close;
Open;
First;
while not eof do begin
ItemCombo := TItemCombo.Create;
ItemCombo.setOid(FieldByName('CodArbitro').asInteger);
ItemCombo.SetNome(FieldByName('NomeArbitro').asString);
CmbBxArbitro.Items.AddObject(FieldByName('NomeArbitro').asString, ItemCombo);
Next;
end;
end;
CmbBxArbitro.ItemIndex := 0;
end;
procedure TFrmCadJogos.AtualizaCmbBxEstadio;
var
ItemCombo: TItemCombo;
Imagem: TStream;
i: Integer;
begin
for i:=0 to CmbBxEstadio.Items.Count-1 do begin
TItemCombo(CmbBxEstadio.Items.Objects[i]).Destroy;
end;
CmbBxEstadio.Items.Clear;
ItemCombo := TItemCombo.Create;
ItemCombo.setOid(0);
CmbBxEstadio.Items.AddObject('', ItemCombo);
with BD.ClntDtStEstadio do begin
Close;
Open;
First;
while not eof do begin
ItemCombo := TItemCombo.Create;
ItemCombo.setOid(FieldByName('CodEstadio').asInteger);
202
ItemCombo.SetNome(FieldByName('NomeEstadio').asString);
CmbBxEstadio.Items.AddObject(FieldByName('NomeEstadio').asString + ', ' +
FieldByName('CidadeEstadio').asString, ItemCombo);
Next;
end;
end;
Self.SetEstadio;
Self.CmbBxEstadioChange(nil);
end;
procedure TFrmCadJogos.BtnGravarClick(Sender: TObject);
var
Retorno : String;
CodEstTemp, CodEquipeCasa, CodEquipeFora, CodArbitro, CodEstadio, Realizado,
Prorrogacao, Penaltis: Integer;
GolsTimeCasa, GolsTimeFora, GolsTimeCasaProrrog, GolsTimeForaProrrog, GolsTimeCasaPen,
GolsTimeForaPen : Integer;
Publico, ChutesTimeCasa, ChutesTimeFora, ImpedTimeCasa, ImpedTimeFora,
EscanteiosTimeCasa, EscanteiosTimeFora, FaltasTimeCasa, FaltasTimeFora : Integer;
DataHoraJogo: TDateTime;
Noticia : String;
Tv : String;
Foto1, Foto2 : TMemoryStream;
begin
if ValidaJogo then begin
CodEstTemp := CodRodada;
CodEquipeCasa :=
TItemCombo(CmbBxEquipeCasa.Items.Objects[CmbBxEquipeCasa.ItemIndex]).GetOid;
CodEquipeFora :=
TItemCombo(CmbBxEquipeFora.Items.Objects[CmbBxEquipeFora.ItemIndex]).GetOid;
CodArbitro := TItemCombo(CmbBxArbitro.Items.Objects[CmbBxArbitro.ItemIndex]).GetOid;
CodEstadio := TItemCombo(CmbBxEstadio.Items.Objects[CmbBxEstadio.ItemIndex]).GetOid;
TV := EdtTV.Text;
Noticia := MmComentarios.Lines.Text;
if ChckBxTempoNormal.Checked = True then Realizado := 1 else Realizado := 0;
GolsTimeCasa := StrToInt(EdtGolsCasa.Text);
GolsTimeFora := StrToInt(EdtGolsFora.Text);
ChutesTimeCasa := StrToInt(EdtChutesCasa.Text);
ChutesTimeFora := StrToInt(EdtChutesFora.Text);
ImpedTimeCasa := StrToInt(EdtImpedimentosCasa.Text);
ImpedTimeFora := StrToInt(EdtImpedimentosFora.Text);
EscanteiosTimeCasa := StrToInt(EdtEscanteiosCasa.Text);
EscanteiosTimeFora := StrToInt(EdtEscanteiosFora.Text);
FaltasTimeCasa := StrToInt(EdtFaltasCasa.Text);
FaltasTimeFora := StrToInt(EdtFaltasFora.Text);
Publico := StrToInt(EdtPublico.Text);
if ChckBxProrrogacao.Checked = True then Prorrogacao := 1 else Prorrogacao := 0;
GolsTimeCasaProrrog := StrToInt(EdtGolsCasaProrrog.Text);
GolsTimeForaProrrog := StrToInt(EdtGolsForaProrrog.Text);
if ChckBxPenaltis.Checked = True then Penaltis := 1 else Penaltis := 0;
GolsTimeCasaPen := StrToInt(EdtGolsCasaPen.Text);
GolsTimeForaPen := StrToInt(EdtGolsForaPen.Text);
DataHoraJogo := Int(DtTmPckrDataJogo.date) + Frac(StrToTime(EdtHoraJogo.Text));
Foto1 := TMemoryStream.Create;
Foto2 := TMemoryStream.Create;
ImgJogo1.Picture.Graphic.SaveToStream(Foto1);
ImgJogo2.Picture.Graphic.SaveToStream(Foto2);
if status = 'N' then begin
try
Temporada.NovoJogo(CodEstTemp, CodEquipeCasa, CodEquipeFora, DataHoraJogo,
CodArbitro, CodEstadio,
Realizado, GolsTimeCasa, GolsTimeFora, Prorrogacao,
GolsTimeCasaProrrog,
GolsTimeForaProrrog, Penaltis, GolsTimeCasaPen, GolsTimeForaPen,
Publico,
ChutesTimeCasa, ChutesTimeFora, ImpedTimeCasa, ImpedTimeFora,
FaltasTimeCasa,
FaltasTimeFora, EscanteiosTimeCasa, EscanteiosTimeFora, Noticia,
TV, Foto1, Foto2);
except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Contacte o Suporte');
end;
end;
end else begin
try
203
204
205
EdtGolsCasaProrrog.Enabled
EdtGolsForaProrrog.Enabled
end else begin
EdtGolsCasaProrrog.Enabled
EdtGolsForaProrrog.Enabled
end;
end;
:= True;
:= True;
:= False;
:= False;
206
ImgEquipeCasa.Picture.Bitmap.LoadFromStream(BD.ClntDtStDados.CreateBlobStream(BD.ClntDtS
tDados.FieldByName('Escudo'),bmRead));
end;
ImgEquipeCasa.Picture.Bitmap.Destroy;
end;
procedure TFrmCadJogos.FormCreate(Sender: TObject);
begin
PgCntrlDados.ActivePage := TabSheet1;
MeusUtils := TMeusUtils.Create;
end;
procedure TFrmCadJogos.CmbBxEquipeForaChange(Sender: TObject);
var
SQL: String;
begin
PnlEquipeFora.caption := CmbBxEquipeFora.Items.Strings[CmbBxEquipeFora.ItemIndex];
SQL := 'select ESCUDO from EQUIPE where CODEQUIPE=' +
IntToStr(TItemCombo(CmbBxEquipeFora.Items.Objects[CmbBxEquipeFora.ItemIndex]).GetOid);
BD.SQLDtStDados.CommandText := SQL;
with BD.ClntDtStDados do begin
Close;
Open;
First;
ImgEquipeFora.Picture.Bitmap.LoadFromStream(BD.ClntDtStDados.CreateBlobStream(BD.ClntDtS
tDados.FieldByName('Escudo'),bmRead));
end;
ImgEquipeFora.Picture.Bitmap.Destroy;
end;
function TFrmCadJogos.TestaHorario : boolean;
var
Hora : TDateTime;
begin
if edtHoraJogo.Text <> ' : ' then begin
try
Hora := StrToTime (edtHoraJogo.Text);
TestaHorario := true;
except
on e: EConvertError do begin
TestaHorario := false;
end;
end;
end else begin
TestaHorario := true;
end;
end;
procedure TFrmCadJogos.FormDestroy(Sender: TObject);
var
i: Integer;
begin
for i:=0 to CmbBxEquipeCasa.Items.Count-1 do begin
TItemCombo(CmbBxEquipeCasa.Items.Objects[i]).Destroy;
end;
for i:=0 to CmbBxEquipeFora.Items.Count-1 do begin
TItemCombo(CmbBxEquipeFora.Items.Objects[i]).Destroy;
end;
for i:=0 to CmbBxEstadio.Items.Count-1 do begin
TItemCombo(CmbBxEstadio.Items.Objects[i]).Destroy;
end;
for i:=0 to CmbBxArbitro.Items.Count-1 do begin
TItemCombo(CmbBxArbitro.Items.Objects[i]).Destroy;
end;
BD.Destroy;
MeusUtils.Free;
Temporada.Destroy;
end;
procedure TFrmCadJogos.CmbBxEstadioChange(Sender: TObject);
var
SQL: String;
begin
if CmbBxEstadio.ItemIndex <> 0 then begin
207
208
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FMTBcd, Borland.Vcl.Provider, Borland.Vcl.SqlExpr,
Borland.Vcl.Db, Borland.Vcl.DBClient, Borland.Vcl.ExtDlgs,
Borland.Vcl.Grids, Borland.Vcl.DBGrids, Borland.Vcl.Buttons,
Borland.Vcl.ComCtrls, Borland.Vcl.StdCtrls, Borland.Vcl.ExtCtrls,
System.ComponentModel, UDMDados, UTemporada, UMeuUtils, UItemCombo, UEquipe;
type
TFrmCadJogador = class(TForm)
ImgBranco: TImage;
PnlDadosCamp: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
EdtNomeJogador: TEdit;
EdtNacionalidade: TEdit;
CmbBxPosicao: TComboBox;
Panel7: TPanel;
ImgJogador: TImage;
BtnCarregarImg: TButton;
EdtApelidoJogador: TEdit;
DtDataNascimento: TDateTimePicker;
EdtNumCamisa: TEdit;
PnlIdade: TPanel;
PnlBtns: TPanel;
BtnGravar: TBitBtn;
BtnCancelar: TBitBtn;
DBGrdJogadores: TDBGrid;
Panel3: TPanel;
OpenPictureDialog1: TOpenPictureDialog;
Panel1: TPanel;
CmbBxEquipe: TComboBox;
EdtEmail: TEdit;
SQLDtStEquipeDisputaTemp: TSQLDataSet;
DtStPrvdrEquipeDisputaTemp: TDataSetProvider;
ClntDtStEquipeDisputaTemp: TClientDataSet;
ClntDtStEquipeDisputaTempCODEQUIPE: TIntegerField;
ClntDtStEquipeDisputaTempCODTEMPORADA: TIntegerField;
ClntDtStEquipeDisputaTempCODEQUIPE_1: TIntegerField;
ClntDtStEquipeDisputaTempNOMEEQUIPE: TStringField;
ClntDtStEquipeDisputaTempNOMECOMPLETOEQUIPE: TStringField;
ClntDtStEquipeDisputaTempDATAFUNDACAO: TDateField;
ClntDtStEquipeDisputaTempCIDADE: TStringField;
ClntDtStEquipeDisputaTempPAIS: TStringField;
ClntDtStEquipeDisputaTempTIPOEQUIPE: TIntegerField;
ClntDtStEquipeDisputaTempESCUDO: TBlobField;
ClntDtStEquipeDisputaTempCODESTADIO: TIntegerField;
DtSrcEquipeDisputaTemp: TDataSource;
SQLDtStJogador: TSQLDataSet;
DtStPrvdrJogador: TDataSetProvider;
ClntDtStJogador: TClientDataSet;
IntegerField11: TIntegerField;
IntegerField12: TIntegerField;
IntegerField13: TIntegerField;
StringField10: TStringField;
StringField11: TStringField;
IntegerField14: TIntegerField;
DateField2: TDateField;
StringField12: TStringField;
IntegerField15: TIntegerField;
StringField13: TStringField;
StringField14: TStringField;
BlobField2: TBlobField;
DtSrcJogador: TDataSource;
SQLDtStDados: TSQLDataSet;
DtStPrvdrDados: TDataSetProvider;
ClntDtStDados: TClientDataSet;
BtnFechar: TBitBtn;
BtnIncluirJogador: TBitBtn;
209
BtnAlterarJogador: TBitBtn;
BtnExcluirJogador: TBitBtn;
procedure BtnFecharClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure CmbBxEquipeChange(Sender: TObject);
procedure BtnCancelarClick(Sender: TObject);
procedure BtnCarregarImgClick(Sender: TObject);
procedure EdtNumCamisaKeyPress(Sender: TObject; var Key: Char);
procedure BtnIncluirJogadorClick(Sender: TObject);
procedure DtDataNascimentoChange(Sender: TObject);
procedure BtnAlterarJogadorClick(Sender: TObject);
procedure BtnGravarClick(Sender: TObject);
function ValidaFormulario : Boolean;
procedure DBGrdJogadoresDblClick(Sender: TObject);
procedure BtnExcluirJogadorClick(Sender: TObject);
private
{ Private declarations }
conBD: TDtMdlDados;
MeusUtils: TMeusUtils;
Status: String;
CodJogador: Integer;
CodEquipe: Integer;
Temporada: TTemporada;
NumTimes: Integer;
procedure AtualizaInterface;
procedure BloqueiaFormulario;
procedure LiberaFormulario;
public
{ Public declarations }
procedure SetBD (var umaConBD: TDtMdlDados);
procedure Mostrar (umaTemp: TTemporada; umCodEquipe: Integer);
end;
var
FrmCadJogador: TFrmCadJogador;
implementation
{$R *.nfm}
procedure TFrmCadJogador.BtnFecharClick(Sender: TObject);
begin
Self.Close;
end;
procedure TFrmCadJogador.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
MeusUtils := TMeusUtils.Create;
end;
procedure TFrmCadJogador.Mostrar (umaTemp: TTemporada; umCodEquipe: Integer);
var
SQL: String;
ItemCombo: TItemCombo;
Achou: Boolean;
i: Integer;
begin
Temporada := umaTemp;
SQL := 'Select Count(*) from EQUIPECOMPETETEMPORADA where CODTEMPORADA=' + IntToStr
(Temporada.GetCodTemporada);
SQLDtStDados.CommandText := SQL;
ClntDtStDados.Close;
ClntDtStDados.Open;
ClntDtStDados.First;
NumTimes := ClntDtStDados.FieldByName('Count').AsInteger;
if NumTimes > 0 then begin
Achou := False;
SQLDtStEquipeDisputaTemp.ParamByName('CodTemp').AsInteger :=
Temporada.GetCodTemporada;
with ClntDtStEquipeDisputaTemp do begin
Close;
Open;
First;
i := 0;
while not eof do begin
ItemCombo := TItemCombo.Create;
210
ItemCombo.SetOid(FieldByName('CodEquipe').AsInteger);
CmbBxEquipe.Items.AddObject(FieldByName('NomeEquipe').asString, ItemCombo);
if ((not Achou) and (umCodEquipe >0)) then begin
i := i + 1;
if FieldByName('CodEquipe').AsInteger = umCodEquipe then begin
Achou := True;
i := i - 1;
end;
end;
Next;
end;
CmbBxEquipe.ItemIndex := i;
end;
ItemCombo.Free;
Self.AtualizaInterface;
end;
ShowModal;
end;
procedure TFrmCadJogador.AtualizaInterface;
var
NumJogadores: Integer;
SQL: String;
begin
SQL := 'Select Count(*) from JOGADOR where CODTEMPORADA=' + IntToStr
(Temporada.GetCodTemporada);
SQL := SQL + ' and CODEQUIPE=' + IntToStr
(TItemCombo(CmbBxEquipe.Items.Objects[CmbBxEquipe.ItemIndex]).GetOid);
SQLDtStDados.CommandText := SQL;
ClntDtStDados.Close;
ClntDtStDados.Open;
ClntDtStDados.First;
NumJogadores := ClntDtStDados.FieldByName('Count').AsInteger;
SQLDtStJogador.ParamByName('CodTemp').AsInteger := Temporada.GetCodTemporada;
SQLDtStJogador.ParamByName('CodEquipe').AsInteger :=
TItemCombo(CmbBxEquipe.Items.Objects[CmbBxEquipe.ItemIndex]).GetOid;
ClntDtStJogador.Close;
ClntDtStJogador.Open;
ClntDtStJogador.First;
BtnIncluirJogador.Enabled := True;
if NumJogadores > 0 then begin
BtnAlterarJogador.Enabled := True;
BtnExcluirJogador.Enabled := True;
end else begin
BtnAlterarJogador.Enabled := False;
BtnExcluirJogador.Enabled := False;
end;
end;
procedure TFrmCadJogador.FormDestroy(Sender: TObject);
var
i: Integer;
begin
for i:=1 to CmbBxEquipe.Items.Count-1 do begin
TItemCombo(CmbBxEquipe.Items.Objects[i]).Destroy;
end;
MeusUtils.Free;
Temporada.Destroy;
end;
procedure TFrmCadJogador.BloqueiaFormulario;
begin
EdtApelidoJogador.Text := '';
EdtNomeJogador.Text := '';
EdtNumCamisa.Text := '';
CmbBxPosicao.ItemIndex := 0;
EdtNacionalidade.Text := '';
EdtEmail.Text := '';
PnlIdade.Caption := '';
ImgJogador.Picture := ImgBranco.Picture;
EdtApelidoJogador.Enabled := False;
EdtNomeJogador.Enabled := False;
EdtNumCamisa.Enabled := False;
CmbBxPosicao.Enabled := False;
EdtNacionalidade.Enabled := False;
DtDataNascimento.Enabled := False;
EdtEmail.Enabled := False;
211
BtnCarregarImg.Enabled := False;
BtnGravar.Enabled := False;
BtnCancelar.Enabled := False;
BtnIncluirJogador.SetFocus;
end;
procedure TFrmCadJogador.LiberaFormulario;
begin
ImgJogador.Picture := ImgJogador.Picture;
EdtApelidoJogador.Enabled := True;
EdtNomeJogador.Enabled := True;
EdtNumCamisa.Enabled := True;
CmbBxPosicao.Enabled := True;
EdtNacionalidade.Enabled := True;
DtDataNascimento.Enabled := True;
EdtEmail.Enabled := True;
BtnCarregarImg.Enabled := True;
BtnGravar.Enabled := True;
BtnCancelar.Enabled := True;
PnlIdade.Caption := IntToStr(MeusUtils.CalcAnos (DtDataNascimento.DateTime)) + '
ANOS';
EdtApelidoJogador.SetFocus;
end;
procedure TFrmCadJogador.CmbBxEquipeChange(Sender: TObject);
begin
Self.BloqueiaFormulario;
Self.AtualizaInterface;
end;
procedure TFrmCadJogador.BtnCancelarClick(Sender: TObject);
begin
Self.BloqueiaFormulario;
end;
procedure TFrmCadJogador.BtnCarregarImgClick(Sender: TObject);
var
FileName : String;
begin
if OpenPictureDialog1.Execute then begin
FileName := OpenPictureDialog1.FileName;
ImgJogador.Picture.LoadFromFile(FileName);
end;
end;
procedure TFrmCadJogador.EdtNumCamisaKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #8,#0]) then begin
Key := #0;
Beep;
end;
end;
procedure TFrmCadJogador.BtnIncluirJogadorClick(Sender: TObject);
begin
Status := 'N';
CodEquipe := TItemCombo(CmbBxEquipe.Items.Objects[CmbBxEquipe.ItemIndex]).GetOid;
Self.BloqueiaFormulario;
Self.LiberaFormulario;
end;
procedure TFrmCadJogador.DtDataNascimentoChange(Sender: TObject);
begin
PnlIdade.Caption := IntToStr(MeusUtils.CalcAnos (DtDataNascimento.DateTime)) + '
ANOS';
end;
procedure TFrmCadJogador.BtnAlterarJogadorClick(Sender: TObject);
begin
Status := 'A';
CodJogador := ClntDtStJogador.FieldByName('CodJogador').AsInteger;
CodEquipe := TItemCombo(CmbBxEquipe.Items.Objects[CmbBxEquipe.ItemIndex]).GetOid;
Self.BloqueiaFormulario;
Self.LiberaFormulario;
EdtApelidoJogador.Text := ClntDtStJogador.FieldByName('ApelidoJogador').AsString;
EdtNomeJogador.Text := ClntDtStJogador.FieldByName('NomeJogador').AsString;
EdtNumCamisa.Text := ClntDtStJogador.FieldByName('NumeroCamisa').AsString;
212
Case ClntDtStJogador.FieldByName('Posicao').AsInteger of
1: CmbBxPosicao.ItemIndex := 0;
2: CmbBxPosicao.ItemIndex := 1;
3: CmbBxPosicao.ItemIndex := 2;
4: CmbBxPosicao.ItemIndex := 3;
5: CmbBxPosicao.ItemIndex := 4;
end;
EdtNacionalidade.Text := ClntDtStJogador.FieldByName('Nacionalidade').AsString;
EdtEmail.Text := ClntDtStJogador.FieldByName('EMail').AsString;
DtDataNascimento.DateTime := ClntDtStJogador.FieldByName('DataNascimento').AsDateTime;
PnlIdade.Caption := IntToStr(MeusUtils.CalcAnos (DtDataNascimento.DateTime)) + '
ANOS';
ImgJogador.Picture.Bitmap.LoadFromStream(ClntDtStJogador.CreateBlobStream(ClntDtStJogado
r.FieldByName('Foto'),bmRead));
end;
procedure TFrmCadJogador.BtnGravarClick(Sender: TObject);
var
Apelido, Nome, Nacionalidade, Email: String;
Camisa, Posicao: Integer;
DataNasc: TDateTime;
Foto: TMemoryStream;
Equipe: TEquipe;
begin
if Self.ValidaFormulario = True then begin
try
Apelido := EdtApelidoJogador.Text;
Nome := EdtNomeJogador.Text;
Nacionalidade := EdtNacionalidade.Text;
Email := EdtEmail.Text;
Camisa := StrToInt(EdtNumCamisa.Text);
Case CmbBxPosicao.ItemIndex of
0: Posicao := 1;
1: Posicao := 2;
2: Posicao := 3;
3: Posicao := 4;
4: Posicao := 5;
end;
DataNasc := DtDataNascimento.DateTime;
Foto := TMemoryStream.Create;
ImgJogador.Picture.Graphic.SaveToStream(Foto);
Equipe := TEquipe.Create; Equipe.SetBD(ConBD);
Equipe.Materializar(CodEquipe);
if Status='N' then begin
Equipe.IncluirJogador (Temporada.GetCodTemporada, Apelido, Nome, Camisa,
Posicao, Nacionalidade, DataNasc, Email, Foto);
end else begin
Equipe.AlterarJogador (CodJogador, Apelido, Nome, Camisa, Posicao,
Nacionalidade, DataNasc, Email, Foto);
end;
Foto.Free;
Equipe.Destroy;
Self.BloqueiaFormulario;
Self.AtualizaInterface;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
end;
function TFrmCadJogador.ValidaFormulario : Boolean;
begin
if EdtApelidoJogador.Text = '' then begin
EdtApelidoJogador.SetFocus;
ShowMessage('Nome do Jogador Invlido');
ValidaFormulario := False;
end else begin
if EdtNomeJogador.Text = '' then begin
EdtNomeJogador.Text := EdtApelidoJogador.Text;
end;
if EdtNumCamisa.Text = '' then begin
EdtNumCamisa.Text := '0';
end;
213
ValidaFormulario := True;
end;
end;
procedure TFrmCadJogador.DBGrdJogadoresDblClick(Sender: TObject);
begin
if BtnAlterarJogador.Enabled = True then begin
Self.BtnAlterarJogadorClick(Sender);
end;
end;
procedure TFrmCadJogador.BtnExcluirJogadorClick(Sender: TObject);
var
Equipe: TEquipe;
Excluiu: Boolean;
begin
try
Equipe := TEquipe.Create; Equipe.SetBD(ConBD);
Equipe.Materializar(TItemCombo(CmbBxEquipe.Items.Objects[CmbBxEquipe.ItemIndex]).GetOid)
;
Excluiu :=
Equipe.ExcluirJogador(ClntDtStJogador.FieldByName('CodJogador').AsInteger);
If Excluiu = False then begin
ShowMessage('O Jogador no pode ser excluido. Ele j atuou nesta temporada');
end else begin
Self.AtualizaInterface;
end;
Equipe.Destroy;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
end.
========================================================================================
====
ARQUIVO: UICadEstruturaTemporada.pas
========================================================================================
====
unit UICadEstruturaTemporada;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Borland.Vcl.StdCtrls, Borland.Vcl.Buttons, Borland.Vcl.ExtCtrls,
Borland.Vcl.Grids, Borland.Vcl.DBGrids, System.ComponentModel, FMTBcd,
Borland.Vcl.Db, Borland.Vcl.DBClient, Borland.Vcl.Provider,
Borland.Vcl.SqlExpr, UDMDados, UTemporada;
type
TFrmCadEstruturaTemporada = class(TForm)
BtnIncluirFase: TButton;
BtnAlterarFase: TButton;
BtnExcluirFase: TButton;
BtnIncluirGrupo: TButton;
BtnAlterarGrupo: TButton;
BtnExcluirGrupo: TButton;
DBGrdGrupos: TDBGrid;
Panel3: TPanel;
Panel4: TPanel;
DBGrdFases: TDBGrid;
Panel5: TPanel;
PnlBtnsFases: TPanel;
BtnGravarFase: TBitBtn;
BtnCancelarFase: TBitBtn;
PnlDadosFases: TPanel;
Label1: TLabel;
EdtNomeFase: TEdit;
PnlDadosGrupos: TPanel;
Label2: TLabel;
EdtNomeGrupo: TEdit;
214
PnlBtnsGrupos: TPanel;
BtnGravarGrupo: TBitBtn;
BtnCancelarGrupo: TBitBtn;
BtnFechar: TBitBtn;
SQLDtStFases: TSQLDataSet;
DtStPrvdrFases: TDataSetProvider;
ClntDtStFases: TClientDataSet;
DtSrcFases: TDataSource;
SQLDtStGrupos: TSQLDataSet;
DtStPrvdrGrupos: TDataSetProvider;
ClntDtStGrupos: TClientDataSet;
DtSrcGrupos: TDataSource;
SQLDtStRodadas: TSQLDataSet;
DtStPrvdrRodadas: TDataSetProvider;
ClntDtStRodadas: TClientDataSet;
DtSrcRodadas: TDataSource;
SQLDtStDados: TSQLDataSet;
DtStPrvdrDados: TDataSetProvider;
ClntDtStDados: TClientDataSet;
BtnAdicionarRodadas: TButton;
BtnDiminuirRodadas: TButton;
DBGrdRodadas: TDBGrid;
procedure BtnFecharClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure BtnCancelarFaseClick(Sender: TObject);
procedure BtnCancelarGrupoClick(Sender: TObject);
procedure BtnIncluirFaseClick(Sender: TObject);
procedure BtnIncluirGrupoClick(Sender: TObject);
procedure BtnAlterarFaseClick(Sender: TObject);
procedure BtnAlterarGrupoClick(Sender: TObject);
procedure DBGrdFasesCellClick(Column: TColumn);
procedure DBGrdGruposCellClick(Column: TColumn);
procedure DBGrdFasesDblClick(Sender: TObject);
procedure DBGrdGruposDblClick(Sender: TObject);
procedure BtnAdicionarRodadasClick(Sender: TObject);
procedure BtnDiminuirRodadasClick(Sender: TObject);
procedure BtnGravarGrupoClick(Sender: TObject);
procedure BtnExcluirGrupoClick(Sender: TObject);
procedure BtnGravarFaseClick(Sender: TObject);
procedure BtnExcluirFaseClick(Sender: TObject);
private
{ Private declarations }
conBD: TDtMdlDados;
Status: String;
CodEstruturaTemporada: Integer;
Temporada: TTemporada;
NumFases, NumGrupos, NumRodadas: Integer;
procedure AtualizarFases;
procedure AtualizarGrupos;
procedure AtualizarRodadas;
procedure BloqueiaFormularioFases;
procedure BloqueiaFormularioGrupos;
procedure AtivaFormularioFases;
procedure AtivaFormularioGrupos;
public
{ Public declarations }
procedure SetBD(var umaConBD: TDtMdlDados);
procedure Mostrar(umaTemp: TTemporada);
function GetCodEstruturaTemporada : Integer;
end;
var
FrmCadEstruturaTemporada: TFrmCadEstruturaTemporada;
implementation
{$R *.nfm}
procedure TFrmCadEstruturaTemporada.BtnFecharClick(Sender: TObject);
begin
Self.Close;
end;
procedure TFrmCadEstruturaTemporada.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
end;
215
216
217
Status := 'N';
CodEstruturaTemporada :=
ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsInteger;
Self.BloqueiaFormularioFases;
Self.BloqueiaFormularioGrupos;
Self.AtivaFormularioGrupos;
end;
procedure TFrmCadEstruturaTemporada.BtnAlterarFaseClick(Sender: TObject);
begin
Status := 'A';
CodEstruturaTemporada := ClntDtStFases.FieldByName('CodEstruturaTemporada').AsInteger;
Self.BloqueiaFormularioFases;
Self.BloqueiaFormularioGrupos;
Self.AtivaFormularioFases;
EdtNomeFase.Text := ClntDtStFases.FieldByName('NomeEstruturaTemporada').AsString;
end;
procedure TFrmCadEstruturaTemporada.BtnAlterarGrupoClick(Sender: TObject);
var
SQL: String;
begin
Status := 'A';
CodEstruturaTemporada :=
ClntDtStGrupos.FieldByName('CodEstruturaTemporada').AsInteger;
Self.BloqueiaFormularioFases;
Self.BloqueiaFormularioGrupos;
Self.AtivaFormularioGrupos;
EdtNomeGrupo.Text := ClntDtStGrupos.FieldByName('NomeEstruturaTemporada').AsString;
end;
procedure TFrmCadEstruturaTemporada.DBGrdFasesCellClick(Column: TColumn);
begin
if NumFases > 0 then Self.AtualizarGrupos;
end;
procedure TFrmCadEstruturaTemporada.DBGrdGruposCellClick(Column: TColumn);
begin
if NumGrupos > 0 then Self.AtualizarRodadas;
end;
procedure TFrmCadEstruturaTemporada.DBGrdFasesDblClick(Sender: TObject);
begin
if NumFases > 0 then Self.BtnAlterarFaseClick(Sender);
end;
procedure TFrmCadEstruturaTemporada.DBGrdGruposDblClick(Sender: TObject);
begin
if NumGrupos > 0 then Self.BtnAlterarGrupoClick(Sender);
end;
procedure TFrmCadEstruturaTemporada.BtnAdicionarRodadasClick(Sender: TObject);
begin
try
if NumRodadas < 9 then begin
Temporada.IncluirRodada('0'+IntToStr(NumRodadas+1),
ClntDtStFases.FieldByName('codEstruturaTemporada').AsInteger,
ClntDtStGrupos.FieldByName('codEstruturaTemporada').AsInteger);
end else begin
Temporada.IncluirRodada(IntToStr(NumRodadas+1),
ClntDtStFases.FieldByName('codEstruturaTemporada').AsInteger,
ClntDtStGrupos.FieldByName('codEstruturaTemporada').AsInteger);
end;
Self.AtualizarRodadas;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
procedure TFrmCadEstruturaTemporada.BtnDiminuirRodadasClick(
Sender: TObject);
begin
while not ClntDtStRodadas.eof do begin
ClntDtStRodadas.Next;
218
end;
try
Temporada.ExcluirEstruturaTemporada(ClntDtStRodadas.FieldByName('CodEstruturaTemporada')
.AsInteger);
Self.AtualizarRodadas;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
procedure TFrmCadEstruturaTemporada.BtnGravarGrupoClick(Sender: TObject);
begin
if EdtNomeGrupo.Text = '' then begin
ShowMessage ('Nome do Grupo Invlido');
end else begin
try
if Status='N' then begin
Temporada.IncluirGrupo(EdtNomeGrupo.Text,
ClntDtStFases.FieldByName('codEstruturaTemporada').AsInteger);
end else begin
Temporada.AlterarGrupo(codEstruturaTemporada, EdtNomeGrupo.Text);
end;
Self.BloqueiaFormularioGrupos;
Self.AtualizarGrupos;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
end;
procedure TFrmCadEstruturaTemporada.BtnExcluirGrupoClick(Sender: TObject);
var
Excluiu: Boolean;
begin
try
Excluiu :=
Temporada.ExcluirEstruturaTemporada(ClntDtStGrupos.FieldByName('codEstruturaTemporada').
AsInteger);
if Excluiu = False then begin
ShowMessage('ERRO: Existem Rodadas Cadastradas Neste Grupo');
end else begin
Self.BloqueiaFormularioGrupos;
Self.AtualizarGrupos;
end;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
procedure TFrmCadEstruturaTemporada.BtnGravarFaseClick(Sender: TObject);
begin
if EdtNomeFase.Text = '' then begin
ShowMessage ('Nome da Fase Invlido');
end else begin
try
if Status='N' then begin
Temporada.IncluirFase(EdtNomeFase.Text);
end else begin
Temporada.AlterarFase(CodEstruturaTemporada, EdtNomeFase.Text);
end;
Self.BloqueiaFormularioFases;
Self.AtualizarFases;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
219
end;
end;
end;
procedure TFrmCadEstruturaTemporada.BtnExcluirFaseClick(Sender: TObject);
var
Excluiu: Boolean;
begin
try
Excluiu :=
Temporada.ExcluirEstruturaTemporada(ClntDtStFases.FieldByName('codEstruturaTemporada').A
sInteger);
if Excluiu = False then begin
ShowMessage('ERRO: Existem Grupos Cadastrados nesta Fase');
end else begin
Self.BloqueiaFormularioFases;
Self.AtualizarFases;
end;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
function TFrmCadEstruturaTemporada.GetCodEstruturaTemporada : Integer;
begin
GetCodEstruturaTemporada := CodEstruturaTemporada;
end;
end.
========================================================================================
====
ARQUIVO: UICadEstadio.pas
========================================================================================
====
unit UICadEstadio;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FMTBcd, Borland.Vcl.Provider, Borland.Vcl.SqlExpr,
Borland.Vcl.Db, Borland.Vcl.DBClient, Borland.Vcl.ExtDlgs,
Borland.Vcl.Grids, Borland.Vcl.DBGrids, Borland.Vcl.Buttons,
Borland.Vcl.StdCtrls, Borland.Vcl.ExtCtrls, System.ComponentModel, UDMDados,
UEstadio;
type
TFrmCadEstadio = class(TForm)
ImgBranco: TImage;
PnlDadosCamp: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
EdtNomeEstadio: TEdit;
EdtCidadeEstadio: TEdit;
BtnCarregarImg: TButton;
PnlBtns: TPanel;
BtnGravar: TBitBtn;
BtnCancelar: TBitBtn;
DBGrdEstadios: TDBGrid;
Panel3: TPanel;
OpenPictureDialog1: TOpenPictureDialog;
ClntDtStEstadio: TClientDataSet;
DtSrcEstadio: TDataSource;
SQLDtStEstadio: TSQLDataSet;
DtStPrvdrEstadio: TDataSetProvider;
EdtNomeOficialEstadio: TEdit;
Label5: TLabel;
EdtPaisEstadio: TEdit;
Label6: TLabel;
EdtCapacidadeEstadio: TEdit;
Panel15: TPanel;
220
ImgEstadio: TImage;
ClntDtStEstadioCODESTADIO: TIntegerField;
ClntDtStEstadioNOMEESTADIO: TStringField;
ClntDtStEstadioNOMECOMPLETOESTADIO: TStringField;
ClntDtStEstadioCAPACIDADEESTADIO: TIntegerField;
ClntDtStEstadioCIDADEESTADIO: TStringField;
ClntDtStEstadioFOTO: TBlobField;
ClntDtStEstadioPAIS: TStringField;
BtnFechar: TBitBtn;
BtnIncluirEstadio: TBitBtn;
BtnAlterarEstadio: TBitBtn;
BtnExcluirEstadio: TBitBtn;
procedure BtnCarregarImgClick(Sender: TObject);
procedure BtnFecharClick(Sender: TObject);
procedure EdtCapacidadeEstadioKeyPress(Sender: TObject; var Key: Char);
procedure BtnIncluirEstadioClick(Sender: TObject);
procedure BtnAlterarEstadioClick(Sender: TObject);
procedure DBGrdEstadiosDblClick(Sender: TObject);
procedure BtnCancelarClick(Sender: TObject);
procedure BtnGravarClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
conBD: TDtMdlDados;
Status: String;
CodEstadio: Integer;
public
{ Public declarations }
procedure Mostrar;
procedure SetBD(var umaConBD: TDtMdlDados);
end;
var
FrmCadEstadio: TFrmCadEstadio;
implementation
{$R *.nfm}
procedure TFrmCadEstadio.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
end;
procedure TFrmCadEstadio.Mostrar;
begin
ClntDtStEstadio.Close;
ClntDtStEstadio.Open;
Self.ShowModal;
end;
procedure TFrmCadEstadio.BtnCarregarImgClick(Sender: TObject);
var
FileName : String;
begin
if OpenPictureDialog1.Execute then begin
FileName := OpenPictureDialog1.FileName;
ImgEstadio.Picture.LoadFromFile(FileName);
end;
end;
procedure TFrmCadEstadio.BtnFecharClick(Sender: TObject);
begin
Self.Close;
end;
procedure TFrmCadEstadio.EdtCapacidadeEstadioKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #8,#0]) then begin
Key := #0;
Beep;
end;
end;
procedure TFrmCadEstadio.BtnIncluirEstadioClick(Sender: TObject);
begin
Self.BtnCancelarClick(Sender);
Status := 'N';
221
EdtNomeEstadio.Enabled := True;
EdtNomeOficialEstadio.Enabled := True;
EdtCidadeEstadio.Enabled := True;
EdtPaisEstadio.Enabled := True;
EdtCapacidadeEstadio.Enabled := True;
BtnCarregarImg.Enabled := True;
BtnGravar.Enabled := True;
BtnCancelar.Enabled := True;
EdtNomeEstadio.SetFocus;
end;
procedure TFrmCadEstadio.BtnAlterarEstadioClick(Sender: TObject);
begin
Status := 'A';
CodEstadio := ClntDtStEstadio.FieldByName('CodEstadio').AsInteger;
EdtNomeEstadio.Enabled := True;
EdtNomeOficialEstadio.Enabled := True;
EdtCidadeEstadio.Enabled := True;
EdtPaisEstadio.Enabled := True;
EdtCapacidadeEstadio.Enabled := True;
BtnCarregarImg.Enabled := True;
BtnGravar.Enabled := True;
BtnCancelar.Enabled := True;
EdtNomeEstadio.Text := ClntDtStEstadio.FieldByName('NomeEstadio').AsString;
EdtNomeOficialEstadio.Text :=
ClntDtStEstadio.FieldByName('NomeCompletoEstadio').AsString;
EdtCidadeEstadio.Text := ClntDtStEstadio.FieldByName('CidadeEstadio').AsString;
EdtPaisEstadio.Text := ClntDtStEstadio.FieldByName('Pais').AsString;
EdtCapacidadeEstadio.Text :=
ClntDtStEstadio.FieldByName('CapacidadeEstadio').AsString;
ImgEstadio.Picture.Bitmap.LoadFromStream(ClntDtStEstadio.CreateBlobStream(ClntDtStEstadi
o.FieldByName('Foto'),bmRead));
EdtNomeEstadio.SetFocus;
end;
procedure TFrmCadEstadio.DBGrdEstadiosDblClick(Sender: TObject);
begin
Self.BtnAlterarEstadioClick(Sender);
end;
procedure TFrmCadEstadio.BtnCancelarClick(Sender: TObject);
begin
EdtNomeEstadio.Text := '';
EdtNomeOficialEstadio.Text := '';
EdtCidadeEstadio.Text := '';
EdtPaisEstadio.Text := '';
EdtCapacidadeEstadio.Text := '';
ImgEstadio.Picture := ImgBranco.Picture;
EdtNomeEstadio.Enabled := False;
EdtNomeOficialEstadio.Enabled := False;
EdtCidadeEstadio.Enabled := False;
EdtPaisEstadio.Enabled := False;
EdtCapacidadeEstadio.Enabled := False;
BtnCarregarImg.Enabled := False;
BtnGravar.Enabled := False;
BtnCancelar.Enabled := False;
end;
procedure TFrmCadEstadio.BtnGravarClick(Sender: TObject);
var
Estadio: TEstadio;
NomeEstadio, NomeCompletoEstadio, CidadeEstadio, PaisEstadio: String;
CapacidadeEstadio: Integer;
Imagem : TMemoryStream;
begin
Estadio := TEstadio.Create; Estadio.SetBD(ConBD);
NomeEstadio := EdtNomeEstadio.Text;
NomeCompletoEstadio := EdtNomeOficialEstadio.Text;
if NomeCompletoEstadio = '' then begin
NomeCompletoEstadio := NomeEstadio;
end;
CidadeEstadio := EdtCidadeEstadio.Text;
PaisEstadio := EdtPaisEstadio.Text;
if EdtCapacidadeEstadio.Text = '' then begin
CapacidadeEstadio := 0;
end else begin
222
CapacidadeEstadio := StrToInt(EdtCapacidadeEstadio.Text);
end;
Imagem := TMemoryStream.Create;
ImgEstadio.Picture.Graphic.SaveToStream(Imagem);
if (NomeEstadio = '') then begin
ShowMessage ('ERRO: Nome do Estdio Invlido');
end else begin
try
if Status = 'N' then begin
Estadio.NovoEstadio(NomeEstadio, NomeCompletoEstadio, CidadeEstadio,
PaisEstadio, CapacidadeEstadio, Imagem);
end else begin
Estadio.Materializar (CodEstadio);
Estadio.AlterarEstadio(NomeEstadio, NomeCompletoEstadio, CidadeEstadio,
PaisEstadio, CapacidadeEstadio, Imagem);
end;
Self.BtnCancelarClick(Sender);
ClntDtStEstadio.Close;
ClntDtStEstadio.Open;
Estadio.Destroy;
Imagem.Free;
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
end;
procedure TFrmCadEstadio.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ImgEstadio.Destroy;
end;
end.
========================================================================================
====
ARQUIVO: UICadEquipeCompeteTemporada.pas
========================================================================================
====
unit UICadEquipeCompeteTemporada;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FMTBcd, Borland.Vcl.StdCtrls, Borland.Vcl.Provider,
Borland.Vcl.SqlExpr, Borland.Vcl.Db, Borland.Vcl.DBClient,
Borland.Vcl.Buttons, Borland.Vcl.ExtCtrls, System.ComponentModel,
Borland.Vcl.Grids, Borland.Vcl.DBGrids, UDMDados, UTemporada, UEquipe,
UICadEquipe;
type
TFrmCadEquipeCompeteTemporada = class(TForm)
DBGrdEquipe: TDBGrid;
Panel3: TPanel;
DBGrid1: TDBGrid;
Panel1: TPanel;
BtnIncluirNaDisputa: TButton;
BtnExcluirDaDisputa: TButton;
PnlNomeTemporada: TPanel;
BtnFechar: TBitBtn;
ClntDtStEquipe: TClientDataSet;
ClntDtStEquipeCODEQUIPE: TIntegerField;
ClntDtStEquipeNOMEEQUIPE: TStringField;
ClntDtStEquipeNOMECOMPLETOEQUIPE: TStringField;
ClntDtStEquipeDATAFUNDACAO: TDateField;
ClntDtStEquipeCIDADE: TStringField;
ClntDtStEquipePAIS: TStringField;
ClntDtStEquipeTIPOEQUIPE: TIntegerField;
ClntDtStEquipeCODESTADIO: TIntegerField;
ClntDtStEquipeESCUDO: TBlobField;
DtSrcEquipe: TDataSource;
SQLDtStEquipe: TSQLDataSet;
DtStPrvdrEquipe: TDataSetProvider;
223
BtnCadEquipe: TButton;
PnlDadosCamp: TPanel;
Label5: TLabel;
PnlNumEquipes: TPanel;
ClntDtStEquipeDisputaTemp: TClientDataSet;
DtSrcEquipeDisputaTemp: TDataSource;
SQLDtStEquipeDisputaTemp: TSQLDataSet;
DtStPrvdrEquipeDisputaTemp: TDataSetProvider;
ClntDtStEquipeDisputaTempCODEQUIPE: TIntegerField;
ClntDtStEquipeDisputaTempCODTEMPORADA: TIntegerField;
ClntDtStEquipeDisputaTempCODEQUIPE_1: TIntegerField;
ClntDtStEquipeDisputaTempNOMEEQUIPE: TStringField;
ClntDtStEquipeDisputaTempNOMECOMPLETOEQUIPE: TStringField;
ClntDtStEquipeDisputaTempDATAFUNDACAO: TDateField;
ClntDtStEquipeDisputaTempCIDADE: TStringField;
ClntDtStEquipeDisputaTempPAIS: TStringField;
ClntDtStEquipeDisputaTempTIPOEQUIPE: TIntegerField;
ClntDtStEquipeDisputaTempESCUDO: TBlobField;
ClntDtStEquipeDisputaTempCODESTADIO: TIntegerField;
SQLDtStDados: TSQLDataSet;
DtStPrvdrDados: TDataSetProvider;
ClntDtStDados: TClientDataSet;
BtnBuscar: TBitBtn;
EdtBusca: TEdit;
Label9: TLabel;
procedure FormDestroy(Sender: TObject);
procedure BtnFecharClick(Sender: TObject);
procedure BtnIncluirNaDisputaClick(Sender: TObject);
procedure DBGrdEquipeDblClick(Sender: TObject);
procedure BtnExcluirDaDisputaClick(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
procedure BtnCadEquipeClick(Sender: TObject);
procedure BtnBuscarClick(Sender: TObject);
procedure EdtBuscaKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
conBD: TDtMdlDados;
Temporada: TTemporada;
public
{ Public declarations }
procedure SetBD (var umaConBD: TDtMdlDados);
procedure Mostrar (umaTemp: TTemporada);
procedure AtualizaInterface;
end;
var
FrmCadEquipeCompeteTemporada: TFrmCadEquipeCompeteTemporada;
implementation
{$R *.nfm}
procedure TFrmCadEquipeCompeteTemporada.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
end;
procedure TFrmCadEquipeCompeteTemporada.Mostrar (umaTemp: TTemporada);
begin
Temporada := umaTemp;
PnlNomeTemporada.Caption := Temporada.GetNomeTemporada;
Self.AtualizaInterface;
ShowModal;
end;
procedure TFrmCadEquipeCompeteTemporada.AtualizaInterface;
var
SQL: String;
begin
SQLDtStEquipe.ParamByName('CodTemp').asInteger := Temporada.GetCodTemporada;
ClntDtStEquipe.Close;
ClntDtStEquipe.Open;
SQLDtStEquipeDisputaTemp.ParamByName('CodTemp').asInteger :=
Temporada.GetCodTemporada;
ClntDtStEquipeDisputaTemp.Close;
ClntDtStEquipeDisputaTemp.Open;
224
225
Except
on E: Exception do begin
ShowMessage ('ERRO: ' + E.Message + #10 + 'Anote a mensagem e contacte o
Suporte');
end;
end;
end;
procedure TFrmCadEquipeCompeteTemporada.DBGrid1DblClick(Sender: TObject);
begin
if BtnExcluirDaDisputa.Enabled = True then begin
Self.BtnExcluirDaDisputaClick(Sender);
end;
end;
procedure TFrmCadEquipeCompeteTemporada.BtnCadEquipeClick(Sender: TObject);
var
FrmCadEquipe: TFrmCadEquipe;
begin
FrmCadEquipe := TFrmCadEquipe.Create(nil); FrmCadEquipe.SetBD(ConBD);
FrmCadEquipe.Mostrar;
FrmCadEquipe.Destroy;
Self.AtualizaInterface;
end;
procedure TFrmCadEquipeCompeteTemporada.BtnBuscarClick(Sender: TObject);
var
SQL: String;
begin
SQL := 'Select * from EQUIPE where CodEquipe not in (Select Codequipe FROM
EQUIPECOMPETETEMPORADA where CODTEMPORADA=:CodTemp) ';
if ((EdtBusca.Text = '') or (EdtBusca.Text = '*')) then begin
SQL := SQL + 'Order by NOMEEQUIPE';
end else begin
SQL := SQL + 'and Upper(nomeEquipe) like ''%' + Uppercase(EdtBusca.Text) + '%'' ';
SQL := SQL + 'or Upper(Pais) like ''%' + Uppercase(EdtBusca.Text) + '%'' ';
SQL := SQL + 'Order by NOMEEQUIPE';
end;
SQLDtStEquipe.CommandText := SQL;
SQLDtStEquipe.ParamByName('CodTemp').asInteger := Temporada.GetCodTemporada;
with ClntDtStEquipe do begin
Close;
Open;
First;
end;
end;
procedure TFrmCadEquipeCompeteTemporada.EdtBuscaKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 13 then begin
Self.BtnBuscarClick(Sender);
end;
end;
end.
========================================================================================
====
ARQUIVO: UICadEquipe.pas
========================================================================================
====
unit UICadEquipe;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, System.ComponentModel, Borland.Vcl.Grids, Borland.Vcl.DBGrids,
FMTBcd, Borland.Vcl.ComCtrls, Borland.Vcl.Provider, Borland.Vcl.SqlExpr,
Borland.Vcl.Db, Borland.Vcl.DBClient, Borland.Vcl.ExtDlgs,
Borland.Vcl.Buttons, Borland.Vcl.StdCtrls, Borland.Vcl.ExtCtrls, UItemCombo,
UDMDados, UEquipe, UICadEstadio, UMeuUtils;
type
TFrmCadEquipe = class(TForm)
ImgBranco: TImage;
226
PnlDadosCamp: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
EdtNomeCompletoEquipe: TEdit;
EdtPaisEquipe: TEdit;
CmbBxTipoEquipe: TComboBox;
Panel7: TPanel;
ImgEquipe: TImage;
BtnCarregarImg: TButton;
PnlBtns: TPanel;
BtnGravar: TBitBtn;
BtnCancelar: TBitBtn;
DBGrdEquipe: TDBGrid;
Panel3: TPanel;
OpenPictureDialog1: TOpenPictureDialog;
ClntDtStEquipe: TClientDataSet;
DtSrcEquipe: TDataSource;
SQLDtStEquipe: TSQLDataSet;
DtStPrvdrEquipe: TDataSetProvider;
Label5: TLabel;
EdtNomeEquipe: TEdit;
DtDataFundacao: TDateTimePicker;
Label6: TLabel;
Label7: TLabel;
EdtCidadeEquipe: TEdit;
Label8: TLabel;
CmbBxEstadioEquipe: TComboBox;
BtnIncluirEstadio: TButton;
ClntDtStEstadio: TClientDataSet;
DtSrcEstadio: TDataSource;
SQLDtStEstadio: TSQLDataSet;
DtStPrvdrEstadio: TDataSetProvider;
ClntDtStEquipeCODEQUIPE: TIntegerField;
ClntDtStEquipeNOMEEQUIPE: TStringField;
ClntDtStEquipeNOMECOMPLETOEQUIPE: TStringField;
ClntDtStEquipeDATAFUNDACAO: TDateField;
ClntDtStEquipeCIDADE: TStringField;
ClntDtStEquipePAIS: TStringField;
ClntDtStEquipeTIPOEQUIPE: TIntegerField;
ClntDtStEquipeCODESTADIO: TIntegerField;
ClntDtStEquipeESCUDO: TBlobField;
ClntDtStEstadioCODESTADIO: TIntegerField;
ClntDtStEstadioNOMEESTADIO: TStringField;
ClntDtStEstadioNOMECOMPLETOESTADIO: TStringField;
ClntDtStEstadioCAPACIDADEESTADIO: TIntegerField;
ClntDtStEstadioCIDADEESTADIO: TStringField;
ClntDtStEstadioFOTO: TBlobField;
ClntDtStEstadioPAIS: TStringField;
PnlIdade: TPanel;
BtnFechar: TBitBtn;
EdtBusca: TEdit;
BtnBuscar: TBitBtn;
Label9: TLabel;
BtnIncluirEquipe: TBitBtn;
BtnAlterarEquipe: TBitBtn;
BtnExcluirEquipe: TBitBtn;
procedure BtnFecharClick(Sender: TObject);
procedure BtnIncluirEquipeClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure BtnIncluirEstadioClick(Sender: TObject);
procedure BtnAlterarEquipeClick(Sender: TObject);
procedure BtnCancelarClick(Sender: TObject);
procedure BtnCarregarImgClick(Sender: TObject);
procedure BtnGravarClick(Sender: TObject);
procedure DBGrdEquipeDblClick(Sender: TObject);
procedure DtDataFundacaoChange(Sender: TObject);
procedure BtnBuscarClick(Sender: TObject);
procedure EdtBuscaKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
conBD: TDtMdlDados;
MeusUtils: TMeusUtils;
Status: String;
CodEquipe: Integer;
227
public
{ Public declarations }
procedure Mostrar;
procedure SetBD(var umaConBD: TDtMdlDados);
procedure CarregarCmbBxEstadioEquipe;
procedure LimparCmbBxEstadioEquipe;
end;
var
FrmCadEquipe: TFrmCadEquipe;
implementation
{$R *.nfm}
procedure TFrmCadEquipe.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
MeusUtils := TMeusUtils.Create;
end;
procedure TFrmCadEquipe.BtnFecharClick(Sender: TObject);
begin
Self.Close;
end;
procedure TFrmCadEquipe.LimparCmbBxEstadioEquipe;
var
i: Integer;
begin
for i:=1 to CmbBxEstadioEquipe.Items.Count-1 do begin
TItemCombo(CmbBxEstadioEquipe.Items.Objects[i]).Destroy;
end;
CmbBxEstadioEquipe.Clear;
end;
procedure TFrmCadEquipe.CarregarCmbBxEstadioEquipe;
var
ItemCombo: TItemCombo;
begin
ItemCombo := TItemCombo.Create;
ItemCombo.setOid(0);
CmbBxEstadioEquipe.Items.AddObject('', ItemCombo);
with ClntDtStEstadio do begin
Close;
Open;
First;
while not eof do begin
ItemCombo := TItemCombo.Create;
ItemCombo.SetOid(FieldByName('CodEstadio').AsInteger);
CmbBxEstadioEquipe.Items.AddObject(FieldByName('NomeEstadio').asString + ', ' +
FieldByName('CidadeEstadio').asString, ItemCombo);
Next;
end;
CmbBxEstadioEquipe.ItemIndex := 0;
end;
ItemCombo.Free;
end;
procedure TFrmCadEquipe.BtnIncluirEquipeClick(Sender: TObject);
var
ItemCombo: TItemCombo;
begin
Self.BtnCancelarClick(Sender);
Status := 'N';
EdtNomeEquipe.Enabled := True;
EdtNomeCompletoEquipe.Enabled := True;
DtDataFundacao.Enabled := True;
Self.DtDataFundacaoChange(nil);
EdtCidadeEquipe.Enabled := True;
EdtPaisEquipe.Enabled := True;
CmbBxTipoEquipe.Enabled := True;
Self.LimparCmbBxEstadioEquipe;
Self.CarregarCmbBxEstadioEquipe;
CmbBxEstadioEquipe.Enabled := True;
BtnIncluirEstadio.Enabled := True;
BtnCarregarImg.Enabled := True;
228
BtnGravar.Enabled := True;
BtnCancelar.Enabled := True;
EdtNomeEquipe.SetFocus;
end;
procedure TFrmCadEquipe.Mostrar;
begin
ClntDtStEquipe.Close;
ClntDtStEquipe.Open;
ShowModal;
end;
procedure TFrmCadEquipe.FormDestroy(Sender: TObject);
begin
Self.LimparCmbBxEstadioEquipe;
MeusUtils.Free;
ImgEquipe.Destroy;
end;
procedure TFrmCadEquipe.BtnIncluirEstadioClick(Sender: TObject);
var
i: Integer;
achou: boolean;
FrmCadEstadio: TFrmCadEstadio;
begin
FrmCadEstadio := TFrmCadEstadio.Create(nil); FrmCadEstadio.SetBD(conBD);
FrmCadEstadio.Mostrar;
FrmCadEstadio.Destroy;
Self.LimparCmbBxEstadioEquipe;
Self.CarregarCmbBxEstadioEquipe;
achou := false;
while ((i < CmbBxEstadioEquipe.Items.Count) and (not achou)) do begin
if TItemCombo(CmbBxEstadioEquipe.Items.Objects[i]).GetOid =
ClntDtStEquipe.FieldByName('CodEstadio').AsInteger then begin
CmbBxEstadioEquipe.ItemIndex := i;
achou := true;
end;
i := i + 1;
end;
end;
procedure TFrmCadEquipe.BtnAlterarEquipeClick(Sender: TObject);
var
i: Integer;
achou: boolean;
begin
Status := 'A';
CodEquipe := ClntDtStEquipe.FieldByName('CodEquipe').AsInteger;
EdtNomeEquipe.Enabled := True;
EdtNomeCompletoEquipe.Enabled := True;
DtDataFundacao.Enabled := True;
EdtCidadeEquipe.Enabled := True;
EdtPaisEquipe.Enabled := True;
CmbBxTipoEquipe.Enabled := True;
Self.LimparCmbBxEstadioEquipe;
Self.CarregarCmbBxEstadioEquipe;
CmbBxEstadioEquipe.Enabled := True;
BtnIncluirEstadio.Enabled := True;
ImgEquipe.Picture := ImgBranco.Picture;
BtnCarregarImg.Enabled := True;
BtnGravar.Enabled := True;
BtnCancelar.Enabled := True;
EdtNomeEquipe.Text := ClntDtStEquipe.FieldByName('NomeEquipe').AsString;
EdtNomeCompletoEquipe.Text :=
ClntDtStEquipe.FieldByName('NomeCompletoEquipe').AsString;
DtDataFundacao.DateTime := ClntDtStEquipe.FieldByName('DataFundacao').AsDateTime;
Self.DtDataFundacaoChange(nil);
EdtCidadeEquipe.Text := ClntDtStEquipe.FieldByName('Cidade').AsString;
EdtPaisEquipe.Text := ClntDtStEquipe.FieldByName('Pais').AsString;
Self.LimparCmbBxEstadioEquipe;
Self.CarregarCmbBxEstadioEquipe;
achou := false;
while ((i < CmbBxEstadioEquipe.Items.Count) and (not achou)) do begin
if TItemCombo(CmbBxEstadioEquipe.Items.Objects[i]).GetOid =
ClntDtStEquipe.FieldByName('CodEstadio').AsInteger then begin
CmbBxEstadioEquipe.ItemIndex := i;
achou := true;
229
end;
i := i + 1;
end;
case ClntDtStEquipe.FieldByName('TipoEquipe').AsInteger of
1: CmbBxTipoEquipe.ItemIndex := 0;
2: CmbBxTipoEquipe.ItemIndex := 1;
end;
ImgEquipe.Picture.Bitmap.LoadFromStream(ClntDtStEquipe.CreateBlobStream(ClntDtStEquipe.F
ieldByName('Escudo'),bmRead));
EdtNomeEquipe.SetFocus;
end;
procedure TFrmCadEquipe.BtnCancelarClick(Sender: TObject);
begin
EdtNomeEquipe.Text := '';
EdtNomeCompletoEquipe.Text := '';
EdtCidadeEquipe.Text := '';
EdtPaisEquipe.Text := '';
PnlIdade.Caption := '';
Self.LimparCmbBxEstadioEquipe;
ImgEquipe.Picture := ImgBranco.Picture;
EdtNomeEquipe.Enabled := False;
EdtNomeCompletoEquipe.Enabled := False;
DtDataFundacao.Enabled := False;
EdtCidadeEquipe.Enabled := False;
EdtPaisEquipe.Enabled := False;
CmbBxTipoEquipe.Enabled := False;
CmbBxEstadioEquipe.Enabled := False;
BtnIncluirEstadio.Enabled := False;
BtnCarregarImg.Enabled := False;
BtnGravar.Enabled := False;
BtnCancelar.Enabled := False;
end;
procedure TFrmCadEquipe.BtnCarregarImgClick(Sender: TObject);
var
FileName: String;
begin
if OpenPictureDialog1.Execute then begin
FileName := OpenPictureDialog1.FileName;
ImgEquipe.Picture.LoadFromFile(FileName);
end;
end;
procedure TFrmCadEquipe.BtnGravarClick(Sender: TObject);
var
Equipe: TEquipe;
Nome, NomeCompleto, Cidade, Pais: String;
Tipo, CodEstadio: Integer;
DataFundacao: TDateTime;
Imagem : TMemoryStream;
begin
Equipe := TEquipe.Create; Equipe.SetBD(ConBD);
Nome := EdtNomeEquipe.Text;
NomeCompleto := EdtNomeCompletoEquipe.Text;
if NomeCompleto = '' then begin
NomeCompleto := Nome;
end;
Cidade := EdtCidadeEquipe.Text;
Pais := EdtPaisEquipe.Text;
Tipo := CmbBxTipoEquipe.ItemIndex + 1;
DataFundacao := DtDataFundacao.DateTime;
CodEstadio :=
TItemCombo(CmbBxEstadioEquipe.Items.Objects[CmbBxEstadioEquipe.ItemIndex]).GetOid;
Imagem := TMemoryStream.Create;
ImgEquipe.Picture.Graphic.SaveToStream(Imagem);
if ((Nome = '') or (Pais='')) then begin
ShowMessage ('ERRO: Nome da Equipe ou Pas Invlido');
end else begin
try
if Status = 'N' then begin
Equipe.NovaEquipe(Nome, NomeCompleto, Cidade,Pais, DataFundacao, Tipo,
CodEstadio, Imagem);
end else begin
Equipe.Materializar (CodEquipe);
230
231
CodEstruturaTemporada: Integer;
DataJogo: TDateTime;
Equipe: TEquipe;
Pontos: Integer;
Jogos: Integer;
Vitoria: Integer;
Empate: Integer;
Derrota: Integer;
VitoriaProrrogacao: Integer;
VitoriaPenaltis: Integer;
DerrotaProrrogacao: Integer;
DerrotaPenaltis: Integer;
EmpateProrrogacao: Integer;
GolsPro: Integer;
GolsContra: Integer;
Publico: Integer;
Local: String; // C-Casa; F-Fora; T-Tribunal
Realizado: Integer; // 0-Falso; 1-Verdade
public
constructor Create; overload;
procedure SetBD (var umaConBD: TDtMdlDados);
procedure Materializar (Cod: Integer);
function GetCodClassificacao: Integer;
procedure NovaClassificacao (CodEstTemp: Integer; umaDataHoraJogo: TDateTime;
var umaEquipe : TEquipe; umRealizado, osGolsPro, osGolsContra,
umProrrogacao, osGolsProProrrog, osGolsContraProrrog, umPenaltis,
osGolsProPen, osGolsContraPen, umPublico: Integer; umLocal:
String;
PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog, PtsDerProrrog,
PtsVitPen, PtsDerPen: Integer);
procedure AlterarClassificacao (CodEstTemp: Integer; umaDataHoraJogo: TDateTime;
var umaEquipe : TEquipe; umRealizado, osGolsPro, osGolsContra,
umProrrogacao, osGolsProProrrog, osGolsContraProrrog, umPenaltis,
osGolsProPen, osGolsContraPen, umPublico: Integer; umLocal:
String;
PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog, PtsDerProrrog,
PtsVitPen, PtsDerPen: Integer);
procedure ExcluirClassificacao;
procedure CalcularClassificacao (CodEstTemp: Integer; umaDataHoraJogo: TDateTime;
var umaEquipe : TEquipe; umRealizado, osGolsPro, osGolsContra,
umProrrogacao, osGolsProProrrog, osGolsContraProrrog, umPenaltis,
osGolsProPen, osGolsContraPen, umPublico: Integer; umLocal:
String;
PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog, PtsDerProrrog,
PtsVitPen,
PtsDerPen: Integer);
procedure NovaClassificacaoPunicao(CodEstTemp: Integer; umaData: TDateTime; var
umaEquipe : TEquipe; osPontos: Integer);
procedure AlterarClassificacaoPunicao(CodEstTemp: Integer; umaData: TDateTime; var
umaEquipe : TEquipe; osPontos: Integer);
destructor Destroy; Override;
end;
implementation
constructor TClassificacao.Create;
begin
inherited;
MeusUtils := TMeusUtils.Create;
end;
procedure TClassificacao.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
BD := TDtMdlClasses.create(nil);
BD.SetConexaoBD (conBD)
end;
procedure TClassificacao.Materializar (Cod: Integer);
begin
BD.SQLDtStDados.CommandText := 'SELECT * FROM CLASSIFICACAO WHERE CODCLASSIFICACAO = '
+ IntToStr(Cod);
with BD.ClntDtStDados do begin
Close;
Open;
First;
CodClassificacao := FieldByname('CodClassificacao').asInteger;
232
CodEstruturaTemporada := FieldByname('CodEstruturaTemporada').asInteger;
DataJogo := FieldByname('DataJogo').asDateTime;
Equipe := TEquipe.Create; Equipe.SetBD(conBD);
Equipe.Materializar (FieldByname('CodEquipe').asInteger);
Pontos := FieldByname('Pontos').asInteger;
Jogos := FieldByname('Jogos').asInteger;
Vitoria := FieldByname('Vitoria').asInteger;
Empate := FieldByname('Empate').asInteger;
Derrota := FieldByname('Derrota').asInteger;
VitoriaProrrogacao := FieldByname('VitoriaProrrogacao').asInteger;
VitoriaPenaltis := FieldByname('VitoriaPenaltis').asInteger;
DerrotaProrrogacao := FieldByname('DerrotaProrrogacao').asInteger;
DerrotaPenaltis := FieldByname('DerrotaPenaltis').asInteger;
EmpateProrrogacao := FieldByname('EmpateProrrogacao').asInteger;
GolsPro := FieldByname('GolsPro').asInteger;
GolsContra := FieldByname('GolsContra').asInteger;
Publico := FieldByname('Publico').asInteger;
Local := FieldByname('Local').asString;
Realizado := FieldByname('Realizado').asInteger;
end;
end;
function TClassificacao.GetCodClassificacao: Integer;
begin
GetCodClassificacao := CodClassificacao;
end;
procedure TClassificacao.NovaClassificacao (CodEstTemp: Integer; umaDataHoraJogo:
TDateTime;
var umaEquipe : TEquipe; umRealizado, osGolsPro, osGolsContra,
umProrrogacao, osGolsProProrrog, osGolsContraProrrog, umPenaltis,
osGolsProPen, osGolsContraPen, umPublico: Integer; umLocal:
String;
PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog, PtsDerProrrog,
PtsVitPen,
PtsDerPen: Integer);
var
SQL: String;
begin
BD.SQLDtStDados.CommandText := 'SELECT OID FROM GERADOR';
with BD.ClntDtStDados do begin
Close;
Open;
First;
CodClassificacao := FieldByName('OID').asInteger;
end;
BD.SQLDtStDados.CommandText := 'UPDATE GERADOR SET OID = OID + 1;';
BD.SQLDtStDados.ExecSQL();
Self.CalcularClassificacao (CodEstTemp, umaDataHoraJogo, umaEquipe, umRealizado,
osGolsPro, osGolsContra,
umProrrogacao, osGolsProProrrog, osGolsContraProrrog, umPenaltis,
osGolsProPen,
osGolsContraPen, umPublico, umLocal, PtsVit, PtsEmp,
PtsVitProrrog, PtsEmpProrrog,
PtsDerProrrog, PtsVitPen, PtsDerPen);
SQL := 'INSERT INTO CLASSIFICACAO (CodClassificacao, CodEstruturaTemporada, DataJogo,
CodEquipe, ';
SQL := SQL + 'Pontos, Jogos, Vitoria, Empate, Derrota, VitoriaProrrogacao,
VitoriaPenaltis, DerrotaProrrogacao, ';
SQL := SQL + 'DerrotaPenaltis, EmpateProrrogacao, GolsPro, GolsContra, Publico, Local,
Realizado) VALUES (';
SQL := SQL + IntToStr(CodClassificacao) + ', ';
SQL := SQL + IntToStr(CodEstruturaTemporada) + ', ';
SQL := SQL + '''' + MeusUtils.DataParaBD (DataJogo) + ''', ';
SQL := SQL + IntToStr(Equipe.GetCodEquipe) + ', ';
SQL := SQL + IntToStr(Pontos) + ', ';
SQL := SQL + IntToStr(Jogos) + ', ';
SQL := SQL + IntToStr(Vitoria) + ', ';
SQL := SQL + IntToStr(Empate) + ', ';
SQL := SQL + IntToStr(Derrota) + ', ';
SQL := SQL + IntToStr(VitoriaProrrogacao) + ', ';
SQL := SQL + IntToStr(VitoriaPenaltis) + ', ';
SQL := SQL + IntToStr(DerrotaProrrogacao) + ', ';
SQL := SQL + IntToStr(DerrotaPenaltis) + ', ';
SQL := SQL + IntToStr(EmpateProrrogacao) + ', ';
SQL := SQL + IntToStr(GolsPro) + ', ';
SQL := SQL + IntToStr(GolsContra) + ', ';
233
234
var
SQL: String;
begin
Self.CalcularClassificacao (CodEstTemp, umaDataHoraJogo, umaEquipe, umRealizado,
osGolsPro, osGolsContra,
umProrrogacao, osGolsProProrrog, osGolsContraProrrog, umPenaltis,
osGolsProPen,
osGolsContraPen, umPublico, umLocal, PtsVit, PtsEmp,
PtsVitProrrog, PtsEmpProrrog,
PtsDerProrrog, PtsVitPen, PtsDerPen);
SQL := 'UPDATE CLASSIFICACAO SET ';
SQL := SQL + 'CodEstruturaTemporada = ' + IntToStr(CodEstruturaTemporada) + ', ';
SQL := SQL + 'DataJogo = ''' + MeusUtils.DataParaBD (DataJogo) + ''', ';
SQL := SQL + 'CodEquipe = ' + IntToStr(Equipe.GetCodEquipe) + ', ';
SQL := SQL + 'Pontos = ' + IntToStr(Pontos) + ', ';
SQL := SQL + 'Jogos = ' + IntToStr(Jogos) + ', ';
SQL := SQL + 'Vitoria = ' + IntToStr(Vitoria) + ', ';
SQL := SQL + 'Empate = ' + IntToStr(Empate) + ', ';
SQL := SQL + 'Derrota = ' + IntToStr(Derrota) + ', ';
SQL := SQL + 'VitoriaProrrogacao = ' + IntToStr(VitoriaProrrogacao) + ', ';
SQL := SQL + 'VitoriaPenaltis = ' + IntToStr(VitoriaPenaltis) + ', ';
SQL := SQL + 'DerrotaProrrogacao = ' + IntToStr(DerrotaProrrogacao) + ', ';
SQL := SQL + 'DerrotaPenaltis = ' + IntToStr(DerrotaPenaltis) + ', ';
SQL := SQL + 'EmpateProrrogacao = ' + IntToStr(EmpateProrrogacao) + ', ';
SQL := SQL + 'GolsPro = ' + IntToStr(GolsPro) + ', ';
SQL := SQL + 'GolsContra = ' + IntToStr(GolsContra) + ', ';
SQL := SQL + 'Publico = ' + IntToStr(Publico) + ', ';
SQL := SQL + 'Local = ''' + Local + ''', ';
SQL := SQL + 'Realizado = ' + IntToStr(Realizado) + ' ';
SQL := SQL + 'WHERE CODCLASSIFICACAO = ' + IntToStr(CodClassificacao);
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ExecSQL();
end;
procedure TClassificacao.AlterarClassificacaoPunicao(CodEstTemp: Integer; umaData:
TDateTime; var umaEquipe : TEquipe; osPontos: Integer);
var
SQL: String;
begin
CodEstruturaTemporada := CodEstTemp;
DataJogo := umaData;
Equipe := umaEquipe;
Pontos := osPontos;
SQL := 'UPDATE CLASSIFICACAO SET ';
SQL := SQL + 'CodEstruturaTemporada = ' + IntToStr(CodEstruturaTemporada) + ', ';
SQL := SQL + 'DataJogo = ''' + MeusUtils.DataParaBD (DataJogo) + ''', ';
SQL := SQL + 'CodEquipe = ' + IntToStr(Equipe.GetCodEquipe) + ', ';
SQL := SQL + 'Pontos = ' + IntToStr(Pontos) + ' ';
SQL := SQL + 'WHERE CODCLASSIFICACAO = ' + IntToStr(CodClassificacao);
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ExecSQL();
end;
procedure TClassificacao.ExcluirClassificacao;
var
SQL: String;
begin
SQL := 'Delete from CLASSIFICACAO where CODCLASSIFICACAO=' +
IntToStr(CodClassificacao);
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ExecSQL();
end;
procedure TClassificacao.CalcularClassificacao (CodEstTemp: Integer; umaDataHoraJogo:
TDateTime;
var umaEquipe : TEquipe; umRealizado, osGolsPro, osGolsContra,
umProrrogacao, osGolsProProrrog, osGolsContraProrrog, umPenaltis,
osGolsProPen, osGolsContraPen, umPublico: Integer; umLocal:
String;
PtsVit, PtsEmp, PtsVitProrrog, PtsEmpProrrog, PtsDerProrrog,
PtsVitPen,
PtsDerPen: Integer);
begin
CodEstruturaTemporada := CodEstTemp;
DataJogo := umaDataHoraJogo;
Equipe := umaEquipe;
GolsPro := osGolsPro;
235
GolsContra := osGolsContra;
Publico := umPublico;
Local := umLocal;
Realizado := umRealizado;
Pontos := 0;
Jogos := 0;
Vitoria := 0;
Empate := 0;
Derrota := 0;
VitoriaProrrogacao := 0;
VitoriaPenaltis := 0;
DerrotaProrrogacao := 0;
DerrotaPenaltis := 0;
EmpateProrrogacao := 0;
if Realizado = 1 then begin // Se o jogo foi realizado
Jogos := 1;
if umProrrogacao = 1 then begin
if umPenaltis = 1 then begin
if osGolsProPen > osGolsContraPen then begin // Se ganhou nos penaltis
Pontos := PtsVitPen;
VitoriaPenaltis := 1;
end else begin
// Se perdeu nos penaltis
Pontos := PtsDerPen;
DerrotaPenaltis := 1;
end;
end else begin
// Se jogo foi pra prorrogacao e no
aos penaltis
if osGolsProProrrog > osGolsContraProrrog then begin // Se ganhou na prorrogacao
Pontos := PtsVitProrrog;
VitoriaProrrogacao := 1;
end else begin
if osGolsProProrrog = osGolsContraProrrog then begin // Se empatou na
prorrogacao
Pontos := PtsEmpProrrog;
EmpateProrrogacao := 1;
end else begin
// Se perdeu na prorrogacao
Pontos := PtsDerProrrog;
DerrotaProrrogacao := 1;
end;
end;
end;
end else begin
if osGolsPro > osGolsContra then begin
Pontos := PtsVit;
Vitoria := 1;
end else begin
if osGolsPro = osGolsContra then begin
Pontos := PtsEmp;
Empate := 1;
end else begin
Pontos := 0;
Derrota := 1;
end;
end;
end;
end;
end;
destructor TClassificacao.Destroy;
begin
BD.Destroy;
MeusUtils.Free;
Equipe.Destroy;
end;
end.
========================================================================================
====
ARQUIVO: UCampeonato.pas
========================================================================================
====
unit UCampeonato;
interface
Uses
236
237
238
end;
implementation
constructor TArbitro.Create;
begin
inherited;
MeusUtils := TMeusUtils.Create;
end;
procedure TArbitro.SetBD (var umaConBD: TDtMdlDados);
begin
conBD := umaConBD;
BD := TDtMdlClasses.create(nil);
BD.SetConexaoBD (conBD)
end;
procedure TArbitro.Materializar (Cod: Integer);
begin
BD.SQLDtStDados.CommandText := 'SELECT * FROM ARBITRO WHERE CODARBITRO = ' +
IntToStr(Cod);
with BD.ClntDtStDados do begin
Close;
Open;
First;
CodArbitro := FieldByName('CodArbitro').asInteger;
CodTemporada := FieldByName('CodTemporada').asInteger;
NomeArbitro := FieldByName('NomeArbitro').asString;
DataNascimento := FieldByName('DataNascimento').asDateTime;
end;
end;
procedure TArbitro.NovoArbitro(umaTemp: Integer; umNome: String; umaData: TDateTime;
Foto: TMemoryStream);
var
SQL: String;
begin
CodTemporada := umaTemp;
NomeArbitro := umNome;
DataNascimento := umaData;
BD.SQLDtStDados.CommandText := 'SELECT OID FROM GERADOR';
with BD.ClntDtStDados do begin
Close;
Open;
First;
CodArbitro := FieldByName('OID').asInteger;
end;
BD.SQLDtStDados.CommandText := 'UPDATE GERADOR SET OID = OID + 1;';
BD.SQLDtStDados.ExecSQL();
SQL := 'Insert into ARBITRO (CODARBITRO, CODTEMPORADA, NOMEARBITRO, DATANASCIMENTO,
FOTO) values (';
SQL := SQL + IntToStr(CodArbitro) + ', ';
SQL := SQL + IntToStr(CodTemporada) + ', ';
SQL := SQL + '''' + NomeArbitro + ''', ';
SQL := SQL + '''' + MeusUtils.DataParaBD (DataNascimento) + ''', ';
SQL := SQL + ':Foto)';
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ParamByName('Foto').LoadFromStream(Foto,ftBlob);
BD.SQLDtStDados.ExecSQL();
end;
procedure TArbitro.AlterarArbitro(umNome: String; umaData: TDateTime; Foto:
TMemoryStream);
var
SQL: String;
begin
NomeArbitro := umNome;
DataNascimento := umaData;
SQL := 'Update ARBITRO set ';
SQL := SQL + 'NOMEARBITRO=''' + NomeArbitro + ''', ';
SQL := SQL + 'DATANASCIMENTO=''' + MeusUtils.DataParaBD (DataNascimento) + ''', ';
SQL := SQL + 'FOTO=:Foto where CODARBITRO=' + IntToStr(CodArbitro);
BD.SQLDtStDados.CommandText := SQL;
BD.SQLDtStDados.ParamByName('Foto').LoadFromStream(Foto,ftBlob);
BD.SQLDtStDados.ExecSQL();
end;
239
240
Anexo 4
Artigo
DESENVOLVIMENTO DE UM SOFTWARE DE
GERENCIAMENTO DE CAMPEONATOS DE FUTEBOL
Fernando Peron
peron@inf.ufsc.br
Resumo
Este
artigo
apresenta
o
desenvolvimento de um sistema de
informao para campeonatos de
futebol.
O artigo faz uma breve
contextualizao ao leitor para o
entendimento do problema e apresenta,
uma
abordagem
para
o
desenvolvimento de software orientado
a objetos.
O artigo visa destacar a
aplicao prtica do curso de Sistemas
de Informao.
1. Introduo
2. Organizao dos
Campeonatos e as Regras
241
3. Estado da Arte
Trs ferramentas com objetivos
semelhantes aplicao objeto deste
trabalho foram pesquisadas. Foram
feitas observaes dos pontos positivos
e negativos de cada uma das
ferramentas. O aproveitamento das boas
solues e a precauo com as
franquezas das ferramentas existentes
colaboraram para o desenvolvimento de
um software completo e eficiente. Este
estudo tambm tem a finalidade de
estabelecer
um
parmetro
de
qualificao do resultado deste trabalho.
O software LeaguePad um
software
extremamente
flexvel.
Atravs dele possvel gerenciar
qualquer tipo de competio de futebol.
O software tambm se adapta as
necessidades do usurio. Para os
usurios que querem obter grandes
quantidades de informaes, o software
atende a quase tudo que se possa
imaginar. Por outro lado, caso o usurio
queira apenas ter a tabela de jogos, os
resultados e a classificao atualizada
automaticamente, este software se
adapta perfeitamente.
O ponto fraco deste software o
fato de ele tratar cada temporada de um
campeonato de forma independente.
4. Fundamentos Tericos
242
A Programao Orientada a
Objetos uma extenso natural da
programao estruturada. Sua essncia
a reutilizao de cdigo. Uma vez que
voc cria um objeto para uma aplicao,
este objeto poder (e dever) ser
utilizado em novas aplicaes [SIL 00].
O objetivo especfico de
construir
um
programa
para
computadores utilizando os conceitos
de programao orientada a objetos.
Porm, a construo de um bom
programa orientado a objetos vai alm
de saber o dominar uma linguagem
orientada a objetos, como por exemplo,
Java ou Delphi. Este apenas o
primeiro passo para construo.
fundamental para obteno do sucesso
do trabalho uma boa anlise e um bom
projeto.
A metodologia de anlise e
projeto utilizada neste trabalho
proposta pelo livro de Craig Larman:
Utilizando UML e Padres. Este livro
apresenta um exemplo de processo de
desenvolvimento, o qual descreve uma
possvel ordem de atividades e um ciclo
de vida de desenvolvimento. Contudo,
ele no prescreve um processo ou
metodologia definitiva; ele fornece um
exemplo de passos comuns.
UML tem o poder de
transformar idias em modelos reais.
uma linguagem destina estruturao de
projetos. Um dos principais objetivos da
UML tornar todo o processo de
desenvolvimento
totalmente
transparente e organizado [SOA 01].
Em um nvel alto, os principais
passos at a entregar uma aplicao
incluem os seguintes:
1. Planejar e Elaborar Planejamento,
definio de requisitos, construo de
prottipos e assim por diante.
2. Construir A construo do sistema.
3. Instalar A implantao do sistema
para uso.
Um
processo
de
desenvolvimento de software um
mtodo para organizar as atividades
5. O Sistema de
Gerenciamento de
Campeonatos de Futebol
A proposta deste trabalho a
criao de um programa de computador
para fazer o controle de campeonatos de
futebol.
Um bom sistema de controle de
campeonatos deve ser capaz de
gerenciar vrios campeonatos de
futebol. Dentro de cada campeonato,
deve ser possvel incluir as equipes que
disputam a competio e os jogadores
inscritos por estas equipes. Tambm
fazem parte de um campeonato, os
rbitros que apitam um jogo e o sistema
tambm deve abranger este fato.
Um sistema robusto para
controle
de
campeonatos,
deve
principalmente ser capaz de aceitar o
gerenciamento dos mais diferentes tipos
de competies de futebol. Cada tipo de
competio tem suas frmulas de
disputa. Uma Copa do Mundo,
exemplo, numa primeira fase as equipes
so divididas em grupos. As equipes
melhores colocadas avanam para fase
seguinte, onde novamente se organizam
em grupos e assim sucessivamente at
chegar a grande final. J num
campeonato nacional disputado em um
pas da Europa, como por exemplo, o
Campeonato Ingls de Futebol, possui
uma frmula de disputa diferente da
frmula de disputa da Copa do Mundo.
No Campeonato Ingls, as equipes
jogam todas entre si em uma nica fase
em um nico grupo. A que somar mais
pontos a grande campe.
Tambm a de se esperar de um
bom software de Controle de
Campeonatos a possibilidade de
gerenciar os jogos dentro
da
competio, incluindo a escalao das
243
7. Referncias
Bibliogrficas
[LAR 00] Larman, Craig. Utilizando
UML e Padres Uma Introduo
Anlise e ao Projeto Orientado a
Objetos. Editora Bookman. 2000.
[SOA 01] Soares, Walace. Crie um
Site B2C com PHP 4 e MySQL.
Editora rica. 2001.
[SIL 00] Silva, Ivan Jos de Mecenas
Silva. Delphi 5 Objetos e Herana.
Book Express. 2000.
6. Concluses
O presente trabalho apresentou
os detalhes que envolvem a disputa de
um campeonato de futebol para servir
de base para o desenvolvimento do
software.
A metodologia auxilia o
desenvolvedor na transio das etapas
do desenvolvimento e os resultados a
serem obtidos em cada etapa. Foi til
para delimitar com exatido o problema
a ser resolvido. A fase de anlise
244