Registros
são conjuntos de informações logicamente relacionadas.
As informações de um registro são denominadas campos
e podem ser de diferentes tipos. Podemos citar como exemplos de registros:
informações pessoais sobre um cliente de um banco, dados
sobre produtos comercializados em uma loja, informações sobre
veículos produzidos em uma montadora, dados sobre inscritos em um
concurso, informações sobre motoristas de uma empresa de
ônibus e outros.
Para declararmos um registro é necessário definir um tipo
de registro e depois a variável de registro, conforme a sintaxe
e exemplos a seguir.
TYPE identificador de tipo de registro = RECORD
{campos do registro}
END;
VAR identificador de variável de registro: identificador de tipo de registro;
Ex1: Informações pessoais sobre um cliente de um banco:
número da conta, tipo da conta, nome do cliente, endereço,
telefone, número do RG, número do CPF, empresa em que trabalha,
rendimento mensal, qualificação do cliente conforme condições
financeiras.
Program ex1;
Type dados_do_cliente
=RECORD
nconta: string[8];
tipo: char;
nome: string[30];
endereco: record
rua:string[30];
cidade:string[15];
cep:string[5];
end;
fone: string[12];
rg: string[10];
cpf: string[12];
empresa: string[25];
rendmensal: real;
qualifica: byte;
END;
VAR cliente: dados_do_cliente;
.........
Faça um trecho de programa para declarar um registro tendo como
base o exemplo 1.
a) Dados sobre produtos comercializados em uma loja: código
do produto, descrição do produto, tipo do produto, preço
do produto;
b) Informações sobre veículos produzidos em uma
montadora: modelo, potência do motor, ano, cor, número de
série, número do chassis.
Para
fazermos referência, no programa, a um campo de um registro, é
necessário identificar o registro e o campo, com a sintaxe:
identificador de variável de registro.identificador do campo;
Para o exemplo 1 o trecho de entrada das informações pode
ser:
.........
gotoxy(...,...); readln(cliente.nconta);
gotoxy(...,...); readln(cliente.tipo);
gotoxy(...,...); readln(cliente.nome);
gotoxy(...,...); readln(cliente.endereco.rua);
gotoxy(...,...); readln(cliente.endereco.cidade);
gotoxy(...,...); readln(cliente.endereco.cep);
gotoxy(...,...); readln(cliente.fone);
gotoxy(...,...); readln(cliente.rg);
gotoxy(...,...); readln(cliente.cpf);
gotoxy(...,...); readln(cliente.empresa);
gotoxy(...,...); readln(cliente.rendmensal);
gotoxy(...,...); readln(cliente.qualifica);
.........
O
trecho de entrada de informações, ou qualquer outro onde
seja necessário relacionar as variáveis de campo com o registro,
pode ser simplificado com a utilização do comando abaixo
que associa o nome do registro aos campos do referido registro:
WITH identificador de variável de registro DO comando;
.........
with cliente, cliente.endereco do
begin
gotoxy(...,...); readln(nconta);
gotoxy(...,...); readln(tipo);
gotoxy(...,...); readln(nome);
gotoxy(...,...); readln(rua);
gotoxy(...,...); readln(cidade);
gotoxy(...,...); readln(cep);
gotoxy(...,...); readln(fone);
gotoxy(...,...); readln(rg);
gotoxy(...,...); readln(cpf);
gotoxy(...,...); readln(empresa);
gotoxy(...,...); readln(rendmensal);
gotoxy(...,...); readln(qualifica);
end;
.........
Pode-se
declarar e utilizar a estrutura de registros em vetores:
lista de identificadores: ARRAY[1..k] of identificador de registro;
ou em arquivos.
Um arquivo pode ser descrito como um conjunto de registros e pode ser
armazenado (gravado) em disco rígido ou disquete. É possível
manipular um arquivo inserindo, alterando, excluindo ou simplesmente consultando
seus registros. Os registros são gravados sequencialmente. Para
declararmos um arquivo é necessário declarar o registro com
seus campos e depois o arquivo.
TYPE identificador de tipo de arquivo = FILE OF identificador
de tipo de registro;
VAR identificador de variável de arquivo: identificador
de tipo de arquivo;
Para o exemplo 1 temos:
Program ex1;
Type dados_do_cliente = RECORD
nconta: string[8];
.........
qualifica: byte;
END;
cadastro_dos_clientes
= FILE of dados_do_cliente;
VAR cliente: dados_do_cliente;
cadastro: cadastro_dos_clientes;
.........
{cliente é o nome da variável do registro e cadastro
é o nome da variável do arquivo}
PROCEDIMENTOS E FUNÇÕES PARA MANIPULAÇÃO DE ARQUIVOS
ASSIGN(nomedoarquivo, ‘nomeexterno’);
Associa o nomedoarquivo declarado no programa ao nomeexterno (arquivo
físico) localizado no ambiente do sistema operacional. O nomeexterno
do arquivo deve seguir as regras do MSDOS, ou seja até 12 caracteres,
sendo 8 para o nome, seguido do ponto e mais 3 para extensão, que
é opcional. Este procedimento deve anteceder qualquer outro procedimento
de manipulação de arquivo.
RESET(nomedoarquivo);
Abre arquivo existente, com registros gravados. Os registros que foram
gravados anteriormente serão preservados. Posiciona o ponteiro no
1º registro.
REWRITE(nomedoarquivo);
Cria e abre um novo arquivo, caso o arquivo já exista os registros
gravados anteriormente serão eliminados. O arquivo será aberto
sempre vazio.
CLOSE(nomedoarquivo);
Fecha um arquivo aberto, atualizando as informações do
arquivo.
ERASE(nomedoarquivo);
Elimina o arquivo do diretório.
RENAME(nomedoarquivo,’nomeexterno’);
Altera o nome interno do arquivo para outro nome externo.
READ(nomedoarquivo,nomedoregistro);
Lê um registro e avança o ponteiro para o próximo
registro.
WRITE(nomedoarquivo,nomedoregistro);
Grava um registro e avança o ponteiro para o próximo
registro.
EOF(nomedoarquivo);
Retorna true se o fim do arquivo foi atingido.
FILEPOS(nomedoarquivo);
Retorna o número do registro ativo, onde se encontra o ponteiro.
Posição física do registro.
SEEK(nomedoarquivo,posição);
Posiciona o ponteiro no registro de número posição.
FILESIZE(nomedoarquivo);
Retorna o tamanho do arquivo, ou a quantidade de registros gravados.
Exemplo:- O programa abaixo permite a inclusão, alteração, consulta e exclusão de registros em uma arquivo.
program exemplo_registro_arquivo;
uses crt, printer;
type dados_amigo = RECORD
codi : string[4];
nome : string[25];
fone : string[15];
END;
cadastro_amigos = FILE OF dados_amigo;
var REG: dados_amigo;
ARQ: cadastro_amigos;
procedure introducao;
begin
textbackground(1);
clrscr;
gotoxy(30,5); write('REGISTRO E ARQUIVO');
gotoxy(10,8);
write('Este programa contem exemplos de procedimentos para manipulacao
de');
gotoxy(10,10);
write('arquivos. O objetivo e mostrar de maneira simples diferentes
modos');
gotoxy(10,12);
write('de manipulacao de arquivos, seja na inclusao, consulta,
alteracao,');
gotoxy(10,14);
write('exclusao ou emissao de relatorios.');
gotoxy(10,16);
write('Procure desenvolver o seu programa, com criatividade
...');
gotoxy(50,20); write('Tecle algo.');
readkey;
end;
procedure tela_cabecalho;
var k: byte;
begin
window(1,1,80,25);
textcolor(12);
textbackground(1);
clrscr;
for k:=1 to 80 do
begin
gotoxy(k,1); write(chr(223));
gotoxy(k,4); write(chr(223));
end;
gotoxy(20,2); write('T E L E F O N E - A M I G O S');
end;
procedure tela_num_reg;
begin
textcolor(10);
gotoxy(26,10); write('Nº Registro :');
end;
procedure tela_campos;
begin
textcolor(12);
gotoxy(20,12); write('C o d i g o . . . :');
gotoxy(20,14); write('N o m e . . . . . :');
gotoxy(20,16); write('F o n e . . . . . :');
end;
procedure tela_campos_numerados;
begin
textcolor(12);
gotoxy(16,12); write(' C o d i g o .
. . :');
gotoxy(16,14); write('(1) N o m e . . . . . :');
gotoxy(16,16); write('(2) F o n e . . . . . :');
gotoxy(16,18); write('(0) F i m');
end;
procedure abre_janela;
begin
window(40,10,78,22);
textcolor(15);
end;
procedure tela_opcao(opcao:byte);
begin
tela_cabecalho;
case opcao of
1: begin tela_campos; gotoxy(56,3); write('INCLUSAO');
abre_janela; end;
2: begin tela_campos; gotoxy(56,3); write('INCLUSAO');
abre_janela;
end;
3: begin tela_num_reg; tela_campos; gotoxy(56,3);
write('CONSULTA - REGISTRO'); abre_janela; end;
4: begin tela_campos; gotoxy(56,3); write('CONSULTA -
CODIGO');
abre_janela; end;
5: begin tela_num_reg; tela_campos_numerados; gotoxy(56,3);
write('ALTERACAO'); abre_janela; end;
6: begin tela_num_reg; tela_campos; gotoxy(56,3);
write('ALTERACAO'); abre_janela; end;
7: begin tela_campos; gotoxy(56,3); write('EXCLUSAO');
abre_janela; end;
8: begin gotoxy(56,3); write('RELATORIO'); end;
9: begin gotoxy(56,3); write('REORGANIZA'); end;
end;
end;
procedure abre_arquivo;
begin
assign(ARQ,'a:AMIGO.DAT');
{$I-} reset(ARQ); {$I+};
if ioresult<>0 then rewrite(ARQ);
end;
procedure inclue;
begin
if filesize(ARQ)>0 then seek(ARQ,filesize(ARQ));
with REG do
repeat
gotoxy(1,3); readln(codi);
if codi<>'' then
begin
gotoxy(1,5); readln(nome);
gotoxy(1,7); readln(fone);
write(ARQ,REG);
gotoxy(10,11); write('Tecle <enter>...');
repeat until readkey=#13;
clrscr;
end;
until codi='';
end;
procedure consulta_registro;
var numreg:integer;
op: char;
begin
repeat
clrscr;
repeat
gotoxy(1,1); clreol; readln(numreg);
if (numreg<0) or (numreg>=filesize(ARQ))
then
begin
gotoxy(10,11); write('Registro nao existente.');
repeat until readkey<>#0;
clrscr;
end;
until (numreg>=0) and (numreg < filesize(ARQ));
seek(ARQ,numreg);
read(ARQ,REG);
with REG do
begin
gotoxy(1,3); write(codi);
gotoxy(1,5); write(nome);
gotoxy(1,7); write(fone);
end;
gotoxy(1,9); write('Continua (S/N)?');
repeat
gotoxy(17,9); clreol; readln(op); op:=upcase(op);
until (op='S') or (op='N');
until op='N';
end;
procedure consulta_codigo;
var codigo_consulta: string[25];
begin
repeat
clrscr;
gotoxy(1,3); readln(codigo_consulta);
with REG do
if codigo_consulta<>'' then
begin
seek(ARQ,0);
repeat
read(ARQ,REG);
if codi = codigo_consulta then
begin
gotoxy(1,5); write(nome);
gotoxy(1,7); write(fone);
end;
until (eof(ARQ)) or (codi=codigo_consulta);
if codi<>codigo_consulta
then
begin gotoxy(10,9); write('Codigo nao encontrado.'); end;
gotoxy(10,11); write('Tecle
<enter>...');
repeat until readkey=#13;
end;
until codigo_consulta='';
end;
procedure altera;
var numreg:integer;
op: char;
numcampo:byte;
begin
repeat
clrscr;
repeat
gotoxy(1,1); clreol; readln(numreg);
until (numreg>=0) and (numreg < filesize(ARQ));
seek(ARQ,numreg);
read(ARQ,REG);
with REG do
begin
gotoxy(1,3); write(codi);
gotoxy(1,5); write(nome);
gotoxy(1,7); write(fone);
end;
gotoxy(1,11); clreol; write('Nº do campo p/ alterar:');
repeat
repeat
gotoxy(25,11); clreol; readln(numcampo);
until numcampo in [0..2];
if numcampo<>0 then
case numcampo of
1: begin gotoxy(1,5); clreol;
readln(REG.nome); end;
2: begin gotoxy(1,7); clreol;
readln(REG.fone); end;
end;
until numcampo=0;
seek(ARQ,numreg);
write(ARQ,REG);
gotoxy(1,11); write('Continua alteracao (S/N)?');
repeat
gotoxy(27,11); clreol; readln(op); op:=upcase(op);
until (op='S') or (op='N');
until op='N';
end;
procedure exclue;
var codi_exclue: string[4];
op: char;
arqaux: cadastro_amigos;
begin
repeat
clrscr;
gotoxy(1,3); readln(codi_exclue);
if codi_exclue<>'' then
with REG do
begin
seek(ARQ,0);
repeat
read(ARQ,REG);
if codi = codi_exclue
then
begin
gotoxy(1,5); write(nome);
gotoxy(1,7); write(fone);
end;
until (eof(ARQ)) or (codi=codi_exclue);
if codi<>codi_exclue
then
begin gotoxy(5,11); write('Codigo nao encontrado.');
delay(1000); end
else
begin
gotoxy(5,11); write('Confirma exclusao (S/N)? ');
repeat
gotoxy(42,17); clreol; readln(op); op:=upcase(op);
until (op='S') or (op='N');
if op='S' then
begin
REG.codi:='***';
seek(ARQ,filepos(ARQ)-1);
write(ARQ,REG);
end;
end;
end;
until codi_exclue='';
gotoxy(1,11); write('Reorganiza arquivo (S/N)? ');
repeat
gotoxy(42,17); clreol; readln(op); op:=upcase(op);
until (op='S') or (op='N');
if op='S' then
begin
tela_opcao(9);
gotoxy(20,15); write('Reorganizando
arquivo.');
assign(arqaux,'a:AUXILIAR');
rewrite(arqaux);
seek(ARQ,0);
repeat
read(ARQ,REG);
if REG.codi<>'***'
then write(arqaux,REG);
until eof(ARQ);
close(ARQ);
close(arqaux);
erase(ARQ);
rename(arqaux,'a:AMIGO.DAT');
abre_arquivo;
end;
end;
procedure cabecalho;
const tit= 'A G E N D A - A M I G O S';
var traco: string[80];
k: byte;
begin
traco:='';
for k:=1 to 80 do traco:=traco+'-';
writeln(lst,traco,#10);
k:= (80 - length(tit)) div 2;
writeln(lst,'':k,tit,#10);
writeln(lst,traco,#10);
writeln(lst,'':4,'Codigo Nome','':36,'Fone',#10);
end;
procedure imprime;
var lin, espaco: byte;
begin
gotoxy(20,15); write('Prepare a impressora e tecle enter.');
repeat until readkey=chr(13);
cabecalho;
lin:=9;
seek(ARQ,0);
while not(eof(ARQ)) do
with REG do
begin
read(ARQ,REG);
espaco:=40-length(nome);
writeln(lst,'':5,codi:4,' ',nome,'':espaco,fone);
lin:=lin+2;
if lin>=60 then
begin
writeln(lst,#12);
cabecalho;
lin:=9;
end;
end;
writeln(lst,#12);
end;
procedure inclue_sem_repeticao;
var codi_inclue: string[25];
begin
repeat
clrscr;
gotoxy(1,3); readln(codi_inclue);
with REG do
if codi_inclue<>'' then
begin
if filesize(ARQ)>0
then
begin
seek(ARQ,0);
repeat
read(ARQ,REG);
if codi = codi_inclue then
begin
gotoxy(1,5); write(nome);
gotoxy(1,7); write(fone);
gotoxy(8,9); write('Codigo cadastrado anteriormente.');
gotoxy(10,11); write('Tecle <enter>...');
repeat until readkey=#13;
end;
until (eof(ARQ)) or (codi=codi_inclue);
end;
if codi<>codi_inclue
then
begin
codi:=codi_inclue;
gotoxy(1,5); readln(nome);
gotoxy(1,7); readln(fone);
write(ARQ,REG);
gotoxy(10,11); write('Tecle <enter>...');
repeat until readkey=#13;
clrscr;
end;
end;
until codi_inclue='';
end;
procedure altera_sem_numerar_campo;
var numreg:integer;
op: char;
campo: string[25];
begin
repeat
clrscr;
repeat
gotoxy(1,1); clreol; readln(numreg);
until (numreg>=0) and (numreg < filesize(ARQ));
seek(ARQ,numreg);
read(ARQ,REG);
with REG do
begin
gotoxy(1,3); write(codi);
gotoxy(1,5); write(nome);
gotoxy(1,7); write(fone);
gotoxy(1,5); readln(campo);
if campo<>'' then
begin gotoxy(length(campo)+1,5);
clreol; nome:=campo; end;
gotoxy(1,7); readln(campo);
if campo<>'' then
begin gotoxy(length(campo)+1,7);
clreol; fone:=copy(campo,1,6); end;
seek(ARQ,filepos(ARQ)-1);
write(ARQ,REG);
gotoxy(1,11); write('Continua
alteracao (S/N)?');
repeat
gotoxy(27,11);
clreol; readln(op); op:=upcase(op);
until (op='S') or (op='N');
end;
until op='N';
end;
procedure menu;
var opcao: byte;
begin
repeat
tela_cabecalho;
gotoxy(30,5); write('1. INCLUIR');
gotoxy(30,7); write('2. INCLUIR SEM
REPETICAO');
gotoxy(30,9); write('3. CONSULTAR PELO
N§ DO REGISTRO');
gotoxy(30,11); write('4. CONSULTAR PELO
CAMPO CODIGO');
gotoxy(30,13); write('5. ALTERAR');
gotoxy(30,15); write('6. ALTERAR SEM
NUMERAR CAMPO');
gotoxy(30,17); write('7. EXCLUIR');
gotoxy(30,19); write('8. IMPRIMIR RELATORIO');
gotoxy(30,21); write('9. FIM');
gotoxy(30,23); write('Digite sua opcao:');
repeat
gotoxy(48,23); clreol;
readln(opcao);
until opcao in [0..9];
tela_opcao(opcao);
case opcao of
1: INCLUE;
2: INCLUE_SEM_REPETICAO;
3: CONSULTA_REGISTRO;
4: CONSULTA_CODIGO;
5: ALTERA;
6: ALTERA_SEM_NUMERAR_CAMPO;
7: EXCLUE;
8: IMPRIME;
end;
until opcao=9;
end;
begin
introducao;
abre_arquivo;
menu;
close(ARQ);
end.
![]() |
![]() |
![]() |
|