Escolar Documentos
Profissional Documentos
Cultura Documentos
Sumrio
Introduo
01
02
04
05
Adicionando Componentes
07
Formulrios
09
Rtulos
17
Caixa de Texto
20
Boto de Comando
23
Botes de opo
26
Caixa de verificao
26
Caixa de Lista
27
Caixa Combinada
30
Barra de rolagem
34
Barra de menu
38
PopupMenu
41
Imagem
43
Formas
47
49
Temporizador
53
57
Painel
59
Itens Fundamentais
63
Operadores
68
Estruturas Condicionais
73
Estruturas de Repetio
79
Funes
84
Matrizes
86
Estruturas
93
Arquivos
97
Bibliografia
102
103
Puc - Campinas
Introduo
Introduo
O C++ Builder da Borland um ambiente visual, orientado a objetos que tem por
finalidade desenvolver aplicaes rapidamente para o Windows 95/98/NT. Estas
aplicaes podem ser de propsitos gerais ou cliente/servidor. Usando o C++ Builder,
voc pode criar eficientes aplicaes Windows com o mnimo de codificao manual.
O Borland C++ Builder disponibiliza uma extensa biblioteca de componentes
reutilizveis e um ambiente de ferramentas RAD (Desenvolvimento de Aplicaes
Rpida).
Quando voc inicia o Borland C++ Builder, voc imediatamente colocado com o
ambiente de programao visual. com este ambiente que o Borland C++ Builder
disponibiliza todas as ferramentas que voc necessita para criar, desenvolver, testar,
e debugar suas aplicaes.
Menu
Principal
Barra de
Ferramentas
Paleta de
Componentes
Object
Inspector
Formulrio
Editor de
Cdigo
Puc - Campinas
Acessando comandos
rapidamente
Salvar
Unit
Abrir
Projeto
Salvar
Tudo
Adicionar Arquivo
para Projeto
Novo
Projeto
Remover Arquivo
do Projeto
Ajuda
Ver Unit
Ver
Formulrio
Alterar
entre Unit e
Formulrio
Novo
Formulrio
Rodar
Pausa
Puc - Campinas
Uma janela em branco, conhecida como formulrio, na qual voc criar a interface
do usurio
Formulrio
Componentes
Objeto Inspector
Editor de Cdigos
Voc pode usar o Borland C++ Builder para criar aplicaes de 32-bits de qualquer
tipo. Desde aplicaes de propsitos gerais, at sofisticados programas de acesso a
banco de dados.
Puc - Campinas
Adicionando Componentes
Adicionando Componentes
Componentes so elementos que voc usa para construir suas aplicaes Borland
C++ Builder. Eles incluem todas as partes visveis de sua aplicao tais como, box de
dialogo e botes; bem como as partes no visveis enquanto a aplicao estiver
rodando, como os Timers.
Componentes e suas pginas associadas
Puc - Campinas
Formulrios
biHelp
biMaximize
biSystemMenu
Puc - Campinas
11
Enable Ativar e Desativar formulrio. Quando esta desativado, ele fica visvel, mas
no responde a eventos at ser ativado.
true ativa o formulrio
false desativa o formulrio
Puc - Campinas
Width
536
Heigth
218
13
Editor de Imagens Ferramenta que desenha imagens e icones para o C++ Builder.
Funciona como um editor de imagens do Windows e salva como arquivo *.ico
1 Passo Criar um novo arquivo de cones.
Left
Puc - Campinas
ser utilizado pelo programa para a definio do nome do programa executvel a ser
criado.
poScreenCente
r
Name
poDesigned
true
false
15
wsMaximized
wsMinimized
wsNormal
Puc - Campinas
Rtulo
Rtulos (Label) so objetos no qual voc pode apresentar uma informao textual.
A grande parte das propriedades para o objeto rtulo comum as propriedades
explicadas no objeto form.
Segue uma lista das principais propriedades de um rtulo.
Propriedades Caractersticas de um componente
Alignment Alinhamento de um texto
17
Font Define caractersticas de padro de letra do texto que ser escrito na tela.
ShowHint Ativa um texto que aparecer quando o mouse for colocado sobre o
componente.
true aparecera o texto
false no aparecera o texto
Puc - Campinas
Hint Texto que aparecer quando o mouse for colocado sobre o componente.
19
Caixa de Texto
Caixa de Texto (Edit) so objetos no qual voc pode introduzir informao textual.
Podemos compar-lo a um comando de entrada.
A grande parte das propriedades para o objeto caixa de texto comum as
propriedades explicadas anteriormente.
Segue uma lista das principais propriedades de um caixa de texto.
Propriedades Caractersticas de um componente
BorderStyle Define o estilo da borda da caixa de texto
bsSingle Borda simples
bsNone Sem Borda
bsSingle
bsNon
ecLowerCas
ecNormal
ecUpperCas
Puc - Campinas
true
false
21
Puc - Campinas
Botes de Comando
Default Permite que a tecla ENTER tenha a mesma funo do clique do mouse
true - a tecla ENTER ter o mesmo efeito de um clique do mouse
false desativa a funo da tecla ENTER para o boto
ENTER ou
Clicar
23
Puc - Campinas
Converses de tipo
Classe AnsiString
String para Int
StrToInt
Monetrio para String
CurrToStr
Float para String
FloatToStr
Inteiro para representao hexadecimal
IntToHex
25
Botes de Opo e
Caixas de verificao
false
true
false
true
Puc - Campinas
Caixas de listas
Columns = 3
27
Permite
uma
seleo
Permite
vrias
selees
Permite
uma
selees
Permite vrias
selees c/ CTRL
e SHIFT
false
true
Puc - Campinas
29
Caixa Combinada
csDropDownList
csOwnerDrawFixed
csOwnerDrawVariable
csSimple
Puc - Campinas
Text Ir conter o texto digitado pelo usurio. Depende do Style escolhido pelo
usurio.
csDropDown
csSimple
31
Puc - Campinas
Remove Usurios
------------------*/
int num;
//Verifica o valor corrente da Caixa de Lista
num=LstUsuarios->ItemIndex;
//Remove o Usurio se existir
if (num!=1)
LstUsuarios->Items->Delete (num);
}
//-------------------------------------------------------------------void __fastcall TFrmUsuarios::EdtUsuariosChange(TObject *Sender)
{
if(EdtUsuarios->Text!="")
BtnAdicionar->Enabled=true;
else
BtnAdicionar->Enabled=false;
}
//--------------------------------------------------------------------
33
Barra de rolagem
sbHorizontal
sbVertical
Puc - Campinas
10
Clicar sobre o
curso
Valor mnimo
Posio atual 0
35
Programa Temperatura
Puc - Campinas
//-------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "UnitControleTemp.h"
//-------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
int num;
num=275-ScrollBar1->Position;
Edit1->Text= IntToStr(num)+" C";
ProgressBar1->Position=num;
if(num==-25)
{
LblMinimo->Visible=true;
}
else
{
LblMinimo->Visible=false;
}
if(num==300)
{
LblMaximo->Visible=true;
}
else
{
LblMaximo->Visible=false;
}
}
//--------------------------------------------------------------------
37
Barra de menu
Ao clicar sobre o boto de reticncias na propriedade items ser aberta uma janela de
construo de menus.
Para inserir uma opo no menu digite um texto no local selecionado na janela de
construo de menus. As setas de movimentaes ajudaro na escolha do local a ser
criada a opo do menu.
Para se criar um submenu apertar a tecla CTRL mais a seta para a direita ou utilizar o
popupmenu da janela de construo de menus (Creat Submenu).
Puc - Campinas
Propriedade
Caption
Name
Name
Menu Arquivo
Item
Propriedade
Arquivo
Caption
Name
Novo
Caption
Name
Abri
Caption
Name
Separador
Caption
Name
Salvar
Caption
Name
Salvar Como Caption
Name
Separador
Caption
Name
Impressora
Caption
Name
Configurar
Caption
Name
Imprimir
Caption
Name
Separador
Caption
Name
Sair
Caption
Name
Valor
Aplicativo Menu
FrmAplicativo
MnuAplicativo
Valor
&Arquivo
MnuArq
&Novo
MnuArqNovo
&Abrir
MnuArqAbrir
MnuArqSep1
&Salvar
MnuArqSalvar
Salvar &Como
MnuArqSalvarComo
MnuArqSep2
&Impressora
MnuArqImp
&Configurar
MnuArqImpCfg
&Imprimir
MnuArqImpPrn
MnuArqSep3
Sa&ir
MnuArqSair
39
Submenu
Menu Editar
Item
Editar
Copiar
Colar
Separador
Selecionar
Menu Ajuda
Item
Ajuda
Contedo
Separador
Sobre
Propriedade
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Valor
&Editar
MnuEdt
&Copiar
MnuEdtCopiar
C&olar
MnuEdtColar
MnuEdtSep1
&Selecionar
MnuEdtSelecionar
Propriedade
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Valor
A&juda
MnuAju
&Contedo e Indice
MnuAjuConteudo
MnuAjuSep1
&Sobre o aplicativo
MnuAjuSobre
Puc - Campinas
PopupMenu
41
Puc - Campinas
Imagem
43
Puc - Campinas
Clicar no boto OK
45
Puc - Campinas
Formas
47
Puc - Campinas
Lista de Arquivos,
Drivers e Diretrios
49
tcLowerCase
tcUpperCase
Puc - Campinas
arquivo.
false
true
51
//-------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmTemp *FrmTemp;
//-------------------------------------------------------------------__fastcall TFrmTemp::TFrmTemp(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------void __fastcall TFrmTemp::FileListBox1Click(TObject *Sender)
{
//Nome do Arquivo
AnsiString nome;
//Mostra nome
nome=FileListBox1->FileName;
//Carrega o Arquivo
ImgMostrar->Picture->LoadFromFile(nome);
}
//-------------------------------------------------------------------void __fastcall TFrmTemp::DirectoryListBox1Change(TObject *Sender)
{
//Atualiza a Lista de Arquivos
FileListBox1->Directory=DirectoryListBox1->Directory;
}
//--------------------------------------------------------------------
Puc - Campinas
Temporizador
Programa Animao
53
Puc - Campinas
//-------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "UnitAnimacao.h"
//-------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
// Declarao de varivel
int seta=1;
char sentido='H';
//-------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TFor(Owner)
{
}
//-------------------------------------------------------------------void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (sentido=='H')
{
switch(seta)
{
case 1 : Image1->Visible=true;
Image2->Visible=false;
Image3->Visible=false;
Image4->Visible=false;
Image5->Visible=false;
Image6->Visible=false;
break;
case 2 : Image1->Visible=false;
Image2->Visible=true;
Image3->Visible=false;
Image4->Visible=false;
Image5->Visible=false;
Image6->Visible=false;
break;
case 3 : Image1->Visible=false;
Image2->Visible=false;
Image3->Visible=true;
Image4->Visible=false;
Image5->Visible=false;
Image6->Visible=false;
break;
}
seta++;
if (seta >3)
seta=1;
}
else
{
switch(seta)
{
case 1 : Image1->Visible=false;
Image2->Visible=false;
Image3->Visible=false;
Image4->Visible=true;
Image5->Visible=false;
Image6->Visible=false;
break;
case 2 : Image1->Visible=false;
55
Image2->Visible=false;
Image3->Visible=false;
Image4->Visible=false;
Image5->Visible=true;
Image6->Visible=false;
break;
case 3 : Image1->Visible=false;
Image2->Visible=false;
Image3->Visible=false;
Image4->Visible=false;
Image5->Visible=false;
Image6->Visible=true;
break;
} // fim switch case
seta++;
if (seta>3)
seta=1;
}
}
//-------------------------------------------------------------------void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender,
TScrollCode ScrollCode, int &ScrollPos)
{
Timer1->Interval=1001-ScrollBar1->Position;
ProgressBar1->Position=ScrollBar1->Position;
}
//-------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
sentido='H';
seta=1;
}
//-------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
sentido='A';
seta=4;
}
//-------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender)
{
Timer1->Interval=0;
ScrollBar1->Position=0;
ProgressBar1->Position=0;
}
//-------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender)
{
Close();
}
//--------------------------------------------------------------------
Puc - Campinas
Substituir
Localizar
Configurar Impressora
Imprimir
Cores
Fontes
Salvar Imagem
Abrir Imagem
Salvar como...
Abrir
57
//-------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "UnitFontesCores.h"
//-------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmFonCor *FrmFonCor;
//-------------------------------------------------------------------__fastcall TFrmFonCor::TFrmFonCor(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------void __fastcall TFrmFonCor::BtnFonteClick(TObject *Sender)
{
//Carrega a caixa de dilogo fonte
if(DlgFonte->Execute())
{
LblMens->Font=DlgFonte->Font;
}
}
//-------------------------------------------------------------------void __fastcall TFrmFonCor::BtnCorClick(TObject *Sender)
{
//Carrega a caixa de dilogo cor
if(DlgCor->Execute())
{
LblMens->Color=DlgCor->Color;
}
}
//-------------------------------------------------------------------void __fastcall TFrmFonCor::BtnSairClick(TObject *Sender)
{
if(MessageDlg("Deseja mesmo terminar?",mtConfirmation,
TMsgDlgButtons()<<mbYes << mbNo, 0)==mrYes)
Close();
// termina o programa
}
//--------------------------------------------------------------------
Puc - Campinas
Painel
59
Puc - Campinas
//-------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "UnitOrdena.h"
//-------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmNum *FrmNum;
//-------------------------------------------------------------------__fastcall TFrmNum::TFrmNum(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------void __fastcall TFrmNum::BtnCresClick(TObject *Sender)
{
//Declarao de matriz 5x1
int matnum[5];
int matcres[5];
int i,j,posmat;
//Leitura dos nmeros
matnum[0]=StrToInt(EdtNum1->Text);
matnum[1]=StrToInt(EdtNum2->Text);
matnum[2]=StrToInt(EdtNum3->Text);
matnum[3]=StrToInt(EdtNum4->Text);
matnum[4]=StrToInt(EdtNum5->Text);
//Coloca em ordem crescente
for (i=0;i<5;i++)
{
//inicializa o contador de posies
posmat=0;
for(j=0;j<5;j++)
{
/*Compara todos os elemento
e calcula a posio na matriz resultado*/
if(matnum[i]>matnum[j])
posmat++;
}
//Armazena o elemento corrente na nova posio
calculada
matcres[posmat]=matnum[i];
}
//Mostra o resultado
PnlNum1->Caption = matcres[0];
PnlNum2->Caption = matcres[1];
PnlNum3->Caption = matcres[2];
PnlNum4->Caption = matcres[3];
PnlNum5->Caption = matcres[4];
}
61
int matdec[5];
int i,j,posmat;
//Leitura dos nmeros
matnum[0]=StrToInt(EdtNum1->Text);
matnum[1]=StrToInt(EdtNum2->Text);
matnum[2]=StrToInt(EdtNum3->Text);
matnum[3]=StrToInt(EdtNum4->Text);
matnum[4]=StrToInt(EdtNum5->Text);
//Coloca em ordem crescente
for (i=0;i<5;i++)
{
//inicializa o contador de posies
posmat=0;
for(j=0;j<5;j++)
{
/*Compara todos os elemento
e calcula a posio na matriz resultado*/
if(matnum[i]<matnum[j])
posmat++;
}
//Armazena o elemento corrente na nova posio
calculada
matdec[posmat]=matnum[i];
}
//Mostra o resultado
PnlNum1->Caption = matdec[0];
PnlNum2->Caption = matdec[1];
PnlNum3->Caption = matdec[2];
PnlNum4->Caption = matdec[3];
PnlNum5->Caption = matdec[4];
}
//-------------------------------------------------------------------void __fastcall TFrmNum::BtnSairClick(TObject *Sender)
{
if(Application->MessageBox("Tem certeza que deseja finalizar o
aplicativo?","Aplicativo Nmeros",MB_OKCANCEL)==IDOK)
Close();
}
//-------------------------------------------------------------------void __fastcall TFrmNum::FormShow(TObject *Sender)
{
EdtNum1->SetFocus();
}
//--------------------------------------------------------------------
Puc - Campinas
Itens Fundamentais
Tipos de Dados
O ambiente de programao C++ Builder trabalha com vrios tipos de dados que
podem ser manipulados pelo programa.
Os tipos de dados que podemos trabalhar estaro listados a seguir:
Tipos de Dados Inteiros:
Os tipos de dados inteiros so nmeros, positivos ou negativos, excluindo qualquer
nmero fracionrio.
TIPO
FAIXA
int
-32768 .. 32767
long int
-2147483648 a 2147483647
unsigned int
0 a 65535
0 a 4294967295
FAIXA
float
-3.4x1038 a 3.4x1038
double
-3.4x10308 a 3.4x10308
FAIXA
AnsiString
WideString
63
O nome das variveis em C++ podem ter at 32 caracteres, sendo que as letras
maisculas e minsculas so diferentes.
Comentrios
Os comentrios so utilizados para documentar o programa fonte, mas no fazem
parte do mesmo na compilao, pois sero substitudo por espaos em branco.
Os comentrios podero ser feitos em qualquer parte do programa.
Puc - Campinas
Ex:
/* Programa elaborado por Professional Computer */
// linha de comentrio
65
Puc - Campinas
67
Operadores
Operador de atribuio =
O operador de atribuio representado pelo sinal de igual utilizado para atribuir um
valor a uma varivel.
Ex:
int x;
x = 3;
ou
int x = 3;
Ex:
A +B *4
17 % 3 (Retorna 2, pois o resto da diviso de 17 por 3 2)
A * B * (C + (A + 5))
Puc - Campinas
i = i + 2;
i -= 2;
equivale
i = i - 2;
i *= 2;
equivale
i = i * 2;
i /= 2;
equivale
i = i / 2;
i %= 2; equivale
i = i % 2;
69
Operadores Relacionais
OPERADOR
RESULTADO
==
igual a
!=
diferente de
<=
menor ou igual a
<
menor que
>
maior que
>=
maior ou igual a
Ex.:
A != B
C>B
A <= C
Operadores Lgicos
RESULTADO
&&
conjuno
||
disjuno
negao
Puc - Campinas
Tabelas:
&&
||
Ex.:
P && Q
A || B
!C
71
Operador
Tipos
++
Incremento
--
Decremento
No Lgico
Multiplicao
Diviso
Mdulo
Adio
Subtrao
<
Menor que
<=
Menor ou igual a
>
Maior
>=
Maior ou igual a
==
Igual a
!=
Diferente de
&&
E lgico
||
Ou lgico
?:
Condicional
Atribuio
*=
/=
%=
+=
-=
Puc - Campinas
Estruturas Condicionais
Estruturas Condicionais
A estrutura condicional faz com que uns grupos de aes sejam realizados quando
uma determinada condio satisfeita.
As estruturas condicionais podem ser divididas em trs partes:
Comando seletivo
Estrutura Condicional Simples
Executa uma seqncia de comandos se a condio for verdadeira.
A estrutura condicional simples representada por:
if (Expresso teste)
Instruo;
ou
if
(Expresso teste)
{
Instruo;
:
Instruo N;
}
73
Exemplo:
Puc - Campinas
if
(Expresso teste)
Instruo;
else
Instruo;
ou
if
(Expresso teste)
{
Instruo;
:
Instruo N;
}
else
{
Instruo;
:
Instruo N;
}
Exemplo:
75
Comandos Seletivos
Puc - Campinas
:
Instruo N;
break;
case constante3:
Instruo;
:
Instruo N;
break;
default:
Instruo;
:
Instruo N;
}
Exemplo:
77
case 5
case 6
case 7
case 8
case 9
case 10
case 11
case 12
default
:
:
:
:
:
:
:
:
:
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
=
=
=
=
=
=
=
=
=
"Maio";
"Junho";
"Julho";
"Agosto";
"Setembro";
"Outubro";
"Novembro";
"Dezembro";
"Ms invlido";
break;
break;
break;
break;
break;
break;
break;
break;
break;
}
Edit1->SetFocus();
}
//-------------------------------------------------------------------- ------
Puc - Campinas
Estruturas de Repetio
Estrutura de Repetio
A estrutura de repetio permite que uma seqncia de comandos seja executada
repetidamente, at que, uma determinada condio de interrupo seja satisfeita.
Existem trs formas de interrupo que so:
1. Interrupo automtica
2. Interrupo no incio
3. Interrupo no final
Estrutura de Repetio com Interrupo Automtica
Executa um nmero determinado de vezes a seqncia de comandos estabelecida na repetio.
representado por:
for( i = 0
; i < 20
Inicializao
; i++)
Incremento
Enquanto
79
Exemplo:
Puc - Campinas
81
: TForm(Owner)
{
}
//-------------------------------------------------------------------- -----void __fastcall TForm1::Button1Click(TObject *Sender)
{
int N, I, R;
AnsiString N1, I1, R1;
ListBox1->Items->Clear();
N = StrToInt(Edit1->Text);
I = 1;
while (I <= 10)
{
R = N * I;
N1 = IntToStr(N);
I1 = IntToStr(I);
R1 = IntToStr(R);
ListBox1->Items->Add(N1 + " X " + I1 + " = " + R1);
I++;
}
Edit1->SetFocus();
}
//-------------------------------------------------------------------- ------
do
{
Instruo;
:
Instruo N;
} while (teste);
Puc - Campinas
Exemplo:
83
Funes
A funo um conjunto de tarefas que desejamos realizar.
Devem-se escrever funes para tarefas que repitam vrias vezes no programa.
nome ( tipo )
{
instruo_1;
instruo_2;
:
instruo_N
}
onde:
tipo
instruo
Puc - Campinas
Exemplo de Funes
A estrutura bsica das funes em C++ so apresentadas abaixo:
85
------
------
------
------
Matrizes
Matrizes correspondem a conjuntos de elementos de um mesmo tipo, onde todos so
igualmente acessveis, isto quer dizer que o tempo e tipo de procedimento para
acessar qualquer um dos elementos identificado pelo nome da matriz seguido de
um ou mais ndices que define sua posio na matriz. Podem ser dos tipos
unidimensional ou multidimensional.
Podemos montar uma matriz de caracteres para armazenarmos uma frase.
Matriz Unidimensional
A criao de variveis compostas unidimensionais feita atravs da seguinte
declarao:
int notas [5];
char letras [6];
Para entendermos melhor a definio de matrizes , podemos imaginar a seguinte
situao: temos que armazenar dados de uma empresa por meses, e para isto
poderamos ter 12 variveis diferentes que poderiam por sua vez, estar em locais
diferentes de memria.
Int
meses [12];
Puc - Campinas
87
float MD[8];
float SOMA = 0, MEDIA;
int I;
AnsiString FORMATO;
MD[0] = StrToFloat(Edit1->Text);
MD[1] = StrToFloat(Edit2->Text);
MD[2] = StrToFloat(Edit3->Text);
MD[3] = StrToFloat(Edit4->Text);
MD[4] = StrToFloat(Edit5->Text);
MD[5] = StrToFloat(Edit6->Text);
MD[6] = StrToFloat(Edit7->Text);
MD[7] = StrToFloat(Edit8->Text);
for (I = 0; I <= 7; I++)
SOMA = SOMA + MD[I];
MEDIA = SOMA / 8;
FORMATO = FormatFloat("0.00", MEDIA);
Label3->Caption = FORMATO;
Edit1->SetFocus();
}
//-------------------------------------------------------------------- ------
Matriz Multidimensional
So as variveis que utilizam mais que um ndice para a definio da posio de seus
elementos.
A dimenso da matriz em computao conceituada diferente da matemtica.
Um vetor em matemtica pode possuir n dimenses, enquanto em computao ele
possui apenas uma dimenso.
A declarao da matriz multidimensional feita:
int notas [5][4]; // [5] => nmero do aluno, [4] => nmero da classe.
Puc - Campinas
89
Form1->Edit23->Text = "";
Form1->Edit24->Text = "";
Form1->Edit25->Text = "";
Form1->Edit26->Text = "";
Form1->Edit27->Text = "";
Form1->Edit28->Text = "";
Form1->Edit29->Text = "";
Form1->Edit30->Text = "";
Form1->Edit31->Text = "";
Form1->Edit32->Text = "";
Form1->Edit33->Text = "";
Form1->Edit34->Text = "";
Form1->Edit35->Text = "";
Form1->Edit36->Text = "";
Form1->Edit37->Text = "";
Form1->Edit38->Text = "";
Form1->Edit39->Text = "";
Form1->Edit40->Text = "";
Form1->Edit1->SetFocus();
return;
}
//-------------------------------------------------------------------- -----void Entrada()
{
A[0][0] = StrToInt(Form1->Edit1->Text);
A[0][1] = StrToInt(Form1->Edit2->Text);
A[0][2] = StrToInt(Form1->Edit3->Text);
A[0][3] = StrToInt(Form1->Edit4->Text);
A[0][4] = StrToInt(Form1->Edit5->Text);
A[1][0] = StrToInt(Form1->Edit6->Text);
A[1][1] = StrToInt(Form1->Edit7->Text);
A[1][2] = StrToInt(Form1->Edit8->Text);
A[1][3] = StrToInt(Form1->Edit9->Text);
A[1][4] = StrToInt(Form1->Edit10->Text);
A[2][0] = StrToInt(Form1->Edit11->Text);
A[2][1] = StrToInt(Form1->Edit12->Text);
A[2][2] = StrToInt(Form1->Edit13->Text);
A[2][3] = StrToInt(Form1->Edit14->Text);
A[2][4] = StrToInt(Form1->Edit15->Text);
A[3][0] = StrToInt(Form1->Edit16->Text);
A[3][1] = StrToInt(Form1->Edit17->Text);
A[3][2] = StrToInt(Form1->Edit18->Text);
A[3][3] = StrToInt(Form1->Edit19->Text);
A[3][4] = StrToInt(Form1->Edit20->Text);
}
//-------------------------------------------------------------------- -----void Saida()
{
Form1->Edit21->Text
Form1->Edit22->Text
Form1->Edit23->Text
Form1->Edit24->Text
Form1->Edit25->Text
Form1->Edit26->Text
Form1->Edit27->Text
Form1->Edit28->Text
Form1->Edit29->Text
Form1->Edit30->Text
Form1->Edit31->Text
Form1->Edit32->Text
Form1->Edit33->Text
Form1->Edit34->Text
Form1->Edit35->Text
Form1->Edit36->Text
Form1->Edit37->Text
Form1->Edit38->Text
Form1->Edit39->Text
Form1->Edit40->Text
}
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
IntToStr(B[0][0]);
IntToStr(B[0][1]);
IntToStr(B[0][2]);
IntToStr(B[0][3]);
IntToStr(B[0][4]);
IntToStr(B[1][0]);
IntToStr(B[1][1]);
IntToStr(B[1][2]);
IntToStr(B[1][3]);
IntToStr(B[1][4]);
IntToStr(B[2][0]);
IntToStr(B[2][1]);
IntToStr(B[2][2]);
IntToStr(B[2][3]);
IntToStr(B[2][4]);
IntToStr(B[3][0]);
IntToStr(B[3][1]);
IntToStr(B[3][2]);
IntToStr(B[3][3]);
IntToStr(B[3][4]);
Puc - Campinas
91
------
------
------
------
------
------
Puc - Campinas
Estruturas
Estrutura um grupo de informaes relativas a uma mesma entidade. Estas
informaes podem ter caractersticas diferentes, como em cadastro onde temos o
nome, endereo, telefone, etc.
struct
A declarao de uma struct permite-nos a definir um estrutura.
struct
registro
{
int num;
char nome[40];
char end[30];
char fone [15];
};
Aps a declarao da estrutura deve-se declarar variveis que contero esta
estrutura.
registro clientes;
registro alunos[30];
Ex:
93
Puc - Campinas
return(0);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int CONTA;
float SOMA;
if (I <= 7 && ALUNO[I].NOME == "")
{
ALUNO[I].NOME = Edit1->Text;
ALUNO[I].NOTA[0] = StrToFloat(Edit2->Text);
ALUNO[I].NOTA[1] = StrToFloat(Edit3->Text);
ALUNO[I].NOTA[2] = StrToFloat(Edit4->Text);
ALUNO[I].NOTA[3] = StrToFloat(Edit5->Text);
SOMA = 0;
for (CONTA = 0; CONTA <= 3; CONTA++)
SOMA =+ ALUNO[I].NOTA[CONTA];
ALUNO[I].MEDIA = SOMA/4;
Label7->Caption = FormatFloat("#0.00", ALUNO[I].MEDIA);
I++; /* Conta registro */
LimpaTela();
}
else
{
LimpaTela();
if (I > 7)
ShowMessage("Memria cheia");
else
ShowMessage("Posio ocupada");
}
}
//-------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender)
{
int J;
ALUNO[I].NOME = "";
for (J = 0; J <= 3; J++)
ALUNO[I].NOTA[J] = 0;
ALUNO[I].MEDIA = 0;
LimpaTela();
}
//-------------------------------------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (I < 7)
{
I++;
ExibeRegistro(I);
}
else
{
ShowMessage("Chegou no fim");
Edit1->SetFocus();
}
}
//-------------------------------------------------------------------void __fastcall TForm1::Button4Click(TObject *Sender)
{
if (I > 0)
{
I--;
ExibeRegistro(I);
}
else
{
ShowMessage("Chegou no comeo");
Edit1->SetFocus();
}
}
//-------------------------------------------------------------------void __fastcall TForm1::Button5Click(TObject *Sender)
95
------
------
------
------
{
Limpar();
}
//-------------------------------------------------------------------- ------
Puc - Campinas
Arquivos
Para armazenar informaes em disco e recupera-las em seguida necessrio a
utilizao das funes de arquivo.
Estas funes encontram-se na biblioteca stdio.h. As funes mais comuns de
arquivo sero apresentadas na tabela seguinte:
Nome
Funo
fopen()
Abre um arquivo
fclose()
Fecha um arquivo
putc()
fputc()
getc()
L um caractere de um arquivo
fgetc()
L um caractere de um arquivo
fseek()
fprintf()
fscanf()
feof()
ferror()
rewind()
remove()
Apaga um arquivo
fflush()
Descarrega um arquivo
Tipos de Arquivos
Os Arquivos possuem dois tipos:
Arquivos de texto armazenam uma seqncia de caracteres.
Arquivos binrios armazenam uma seqncia de bytes, no ocorre nenhuma traduo de caracteres.
Ponteiro de Arquivo
Todo Arquivo dever possuir um ponteiro para direcionar as operaes a serem realizadas.
Para escrever ou ler uma informao de um Arquivo, seu programa precisa usar o
ponteiro de arquivo:
Para utilizar uma varivel ponteiro necessrio declara-la, como exemplo abaixo:
97
Exemplo:
FILE *fp;
Abrindo um Arquivo
A funo fopen associa o nome de um Arquivo em disco com o ponteiro de arquivo.
A funo fopen retorna um ponteiro de arquivo, o seu programa nunca poder alterar este valor. Se
ocorrer um erro ao abrir o arquivo ser retornado um valor nulo para o ponteiro.
Um arquivo pode ser aberto de vrias maneiras, conforme mostra a tabela a seguir:
Modo
Significado
Anexa a um arquivo-texto
rb
wb
ab
Anexa a um arquivo-binrio
r+
w+
a+
r+b
w+b
a+b
FILE *fp;
fp = fopen(c:\\arquivo.dat,w);
Exemplo 2:
Puc - Campinas
FILE *fp;
if ((fp = fopen(c:\\arquivo.dat,w))==NULL)
{
ShowMessage(O arquivo no pode ser aberto);
Close();
}
Fechando um arquivo
Todo arquivo aberto dever ser fechado no final do programa, ou assim que a sua
utilizao no se faa mais necessria.
Se o arquivo no for fechado poder ocorrer perdas de dados, arquivos destrudos ou
problemas intermitentes na execuo do programa.
A funo fclose fecha um arquivo aberto, conforme exemplo abaixo:
fclose(fp);
Arquivo do Tipo Texto
O arquivo de texto grava somente caracteres no formato texto.
Arquivo Binrio
Arquivos binrios armazena uma seqncia de bytes, no ocorre nenhuma traduo de caracteres.
Exemplo de escrita em arquivo binrio:
struct registro
{
int num;
char nome[30];
}aluno;
aluno.num=5;
aluno.nome=Joo da Silva;
FILE *arquivo;
arquivo = fopen(a:\\dados.dat,wb);
fwrite(&aluno, sizeof(aluno), 1, arquivo);
:
99
fclose (arquivo);
#include <vcl.h>
#include <stdio.h> //biblioteca para trabalhar com arquivo
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------------------------- -----#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
struct CadAluno
{
char NOME[50];
float NOTA[4];
float MEDIA;
};
FILE *arquivo; //ponteiro de arquivo
CadAluno ALUNO;
//-------------------------------------------------------------------- -----__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- -----void LimpaTela()
{
Form1->Edit1->Text = ""; Form1->Edit2->Text = "";
Form1->Edit3->Text = ""; Form1->Edit4->Text = "";
Form1->Edit5->Text = ""; Form1->ListBox1->Items->Clear();
Form1->Edit1->SetFocus();
}
//-------------------------------------------------------------------- -----void __fastcall TForm1::Button1Click(TObject *Sender)
{
//se no conseguir abrir arquivo de aluno para adicionar valores
if ((arquivo=fopen("C:\\TEMP\\ALUNO.DAT","ab"))==NULL)
{
ShowMessage("No posso abrir arquivo de alunos");
}
else //seno
{
Puc - Campinas
101
Bibliografia
1
JAMSA, Kris. Salvo pelo... C++. Rio de Janeiro. Livros Tcnicos e Cientficos
Ltda.
10
BERGSMAN, Paul. Controlling the world with your PC. Eagle Rock,
Virginia. LLH Technology Publishing.
11
Puc - Campinas
Banco de Dados
Introduo
O C++ Builder oferece uma srie de ferramentas e recursos que possibilitam a
criao de aplicaes de bancos de dados de forma rpida e fcil. Sero introduzidos,
a diante, os conceitos bsicos de manipulao de bancos de dados em C++ Builder,
oferecendo uma viso geral dos componentes de acesso a dados mais
corriqueiramente utilizados.
A base das aplicaes de bancos de dados do C++ Builder est no Borland
Database Engine (BDE), uma camada de software que realiza o acesso a bancos de
dados baseados em arquivos como Paradox e dBase ou a servidores de bancos de
dados locais ou remotos como InterBase, Informix, Oracle, SyBase, etc. Os
componentes de bancos de dados do C++ Builder oferecem uma forma simplificada,
que utiliza programao visual baseada em PME (Propriedades, Mtodos e Eventos),
para acessar a API do BDE.
H duas grandes classes de componentes: os componentes de acesso a
dados (data-access) e os componentes de controle, visualizao e manipulao dos
dados (data-controls), sendo que os componentes de visualizao e manipulao de
dados so tambm denominados de componentes data-aware (componentes
capazes de mostrar e atualizar os dados armazenados em uma tabela associada).
Estes dois grupos de componentes esto localizados, respectivamente, nas pginas
Data Access e Data Controls da paleta de componentes do C++ Builder.
Os principais componentes do tipo data-access utilizados na criao de
aplicaes com bancos de dados em C++ Builder so os componentes derivados da
classe abstrata TDataSet, que so: Table da classe TTable, Query da classe TQuery
e StoredProc da classe TStoredProc. Qualquer um dos componentes derivados da
classe TDataSet podem ser referenciados como datasets. Os componentes Query e
StoredProc so mais utilizados em aplicaes cliente-servidor. O componente Table
oferece a forma mais simples de se acessar informaes em uma tabela de banco de
dados.
Um dataset possui um conjunto de estados onde pode se encontrar. Os
estados possveis so:
103
Puc - Campinas
Exerccios
105
8) Execute e teste a aplicao. Observe que os dados podero ser alterados, mas
recomendamos que no se faam alteraes, uma vez que estes dados so
utilizados por aplicaes exemplo do C++ Builder.
Puc - Campinas
107
21) Compile e teste a aplicao. A busca realizada pelo cdigo, ndice principal da
tabela. Digite o valor 10 na caixa de edio. Clique sobre o boto btPreparaBusca.
QUESTO No 4: Qual o novo estado do dataset? Que transio no diagrama da
Figura 1 est associada a essa mudana?
22) Clique sobre o boto btBusca. O registro foi localizado? Digite o valor 11 na caixa
de edio. Pressione os botes btPreparaBusca e btBusca. E agora o registro foi
localizado? Encerre a aplicao.
23) Altere o evento OnClick do boto btBusca para:
tbEmpregados->GotoNearest();
24) Recompile e teste a aplicao. Faa uma busca usando o valor 10.
QUESTO No 5: Qual registro foi localizado? Qual a diferena entre os mtodos
GotoKey e GotoNearest?
Puc - Campinas
"
27) Compile e teste a aplicao. Digite um nome na caixa de edio comeando com
r. O que acontece?
QUESTO No 6: Por que a busca agora foi realizada pelo nome? Qual a funo do
mtodo FindNearest? Ele condensa a funo de quais outros mtodos?
28) Digite o valor 146 na caixa de edio. Pressione o boto btPreparaBusca. O que
acontece?
QUESTO No 7: Qual a razo do erro? Por que no foi possvel atribuir o valor 146
ao
campo EmpNo com o dataset no modo SetKey? Que campos podem ter valores
atribudos no modo SetKey?
#
#$%&'
34) Crie um novo formulrio. Altere sua propriedade Name para J_Empregados, sua
propriedade Caption para Empregados e a propriedade BordeStyle para bsDialog.
Salve o projeto, dando o nome EMPREG.CPP (lembrar de voltar o diretrio atual
para o diretrio da Prtica 1) para a Unit associada ao novo formulrio criado.
35) Ajuste o formulrio J_Empregados para ser o formulrio principal da aplicao.
Menu Project | Options.
109
Puc - Campinas
49) Compile e teste a aplicao. Para carregar uma nova figura no campo DBImage
basta dar um duplo-click sobre a mesma.
Obs: Uma outra forma de carregar valores sobre um campo DBImage usando o
ClipBoard (Sequncias de teclas Ctrl+V para inserir e Ctrl+C para copiar).
,
-&
111
"*
O componente DBNavigator pode ser configurado para apresentar apenas alguns dos
botes de navegao. Alm disso as mensagens apresentadas no Hint podem ser
personalizadas.
57) Selecione o componente DBNavigator1 do formulrio J_Empregados. Selecione a
sua propriedade VisibleButtons e d um duplo clique para visualizar os seus itens.
Altere os itens nbEdit e nbRefresh para False.
58) Selecione a propriedade Hints do componente DBNavigator1. D um clique sobre
o boto para ativar o editor de lista de strings. Digite os seguintes itens: Primeiro,
Anterior, Prximo, ltimo, Adicionar, Eliminar, Editar, Gravar Alteraes, Cancelar
Alteraes, Atualizar Informaes.
Obs: Veja que mesmo os botes Edit e Refresh no estando visveis no navegador,
as mensagens de Hint devem ser obrigatoriamente especificadas para os mesmos,
na ordem em que os botes apareceriam.
59) Compile e teste a aplicao. Chame a janela de edio dos registros (Janela
Empregados) e posicione o mouse sobre os botes do navegador. As mensagens
programadas iro aparecer.
Aplicao de BDE
O Borland Database Engine (BDE, apresentado anteriormente) oferece um
utilitrio de configurao chamado BDE Administrator (BDEAdmin.EXE) que permite
configurar os aliases utilizados e alterar o ambiente do Engine como: drivers
instalados, configurao interna do sistema e formato de apresentao de data e hora
e valores numricos. Essas informaes so gravadas em um arquivo de
configurao, normalmente chamado IDAPI32.CFG.
Puc - Campinas
Exerccios
)
do cone
para verificar
4) Escolha no menu Object a opo New. Ser apresentada a caixa de dilogo New
Database Alias. Mantenha o Database Driver Name como STANDARD (tabelas
locais Paradox e dBase) que j o valor default e pressione o boto OK.
113
0 /
7) Com o alias criado, vamos realizar agora a criao das novas tabelas a serem
utilizadas na nossa aplicao.
8) Chame o DataBase Desktop (Menu Iniciar | Programas | Borland C++Builder 5 |
DataBase Desktop, cone
Puc - Campinas
10) Em seguida escolha o menu File | New | Table para criar uma nova tabela ou
alternativamente clique com o boto da direita sobre o cone
da SpeedBar e
escolher a opo New. O tipo da tabela deve ser Paradox 7.0, que j o default.
Preencha ento os campos de acordo com a figura a seguir.
Obs: Para especificar a chave primria da tabela (indicada por um asterisco na coluna
Key dos campos que a compem) basta pressionar qualquer tecla com o cursor na
coluna Key do campo.
11) Definidos os campos, vamos criar os ndices secundrios a serem utilizados como
alternativas para a ordem de visualizao e consulta, que no aquela estabelecida
pela chave primria Cod_Emp. Escolha no combobox Table properties a opo
Secondary Indexes e em seguida clique sobre o boto
. Ser aberta a
caixa de dilogo para definio de ndices secundrios. Preencha-a de acordo com a
figura abaixo e clique no boto Ok. D o nome idxNome para o ndice.
Obs: Os ndices compostos por um nico campo e que sejam do tipo Case Sensitive
no
requisitam
nome
e
assumem o
prprio
nome
do
campo.
115
(
13) Repita os passos 10 a 12 para criar a tabela de Departamentos.
14) Insira os campos apresentados na tabela abaixo:
Field Name
Cod_Dep
Descricao
Gerente
Fone
Type Size
N
A
N
A
Key
*
25
20
Puc - Campinas
Clique sobre o boto OK para validar os dados, aparecer uma caixa de dilogo
pedindo o nome para a regra de integridade referencial. Fornea o nome rGerente e
clique em OK.
18) Clique no boto
19) Abra a tabela Emp.db e crie uma regra de integridade referencial para a chave
estrangeira Cod_Dep relacionando-a com a tabela Depto.db. Atribua o nome rDepto
para esta regra. A caixa de dilogo de criao de regras de integridade referencial
deve ser preenchida da seguinte forma:
117
21) Abra o Database Explorer (no C++ Builder Client/Server se chama SQL Explorer)
atravs do menu Database | Explore .
22) A interface do Explorer semelhante do BDE Administrator. Navegue no banco
de dados Prat2 e verifique as tabelas que acabaram de ser criadas no Database
Desktop.
23) Repare que, no lado direito da janela, alm de visualizar a definio das tabelas
(guia Definition) pode-se manipular os seus dados, atravs da guia Data.
24) Abra o banco de dados DBDEMOS e consulte os dados da tabela ANIMALS.DBF.
Repare que o navegador acima dos dados fica habilitado.
OBS.: O Database Explorer permite inserir, excluir e alterar dados em tabelas locais
(Paradox e dBase), mas no permite criar novas tabelas ! No entanto, em bancos de
dados SQL possvel criar tabelas e tambm outros meta-dados.
Puc - Campinas
2 (
25) Crie uma aplicao usando o C++Builder, semelhante a Prtica 1, para acessar
as tabelas Emp.db e Depto.DB criadas nesta prtica.
119