Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

daniel_silva

[Resolvido] Não pesquisa as vendas

Mensagens Recomendadas

daniel_silva    0
daniel_silva

Boa tarde pessoal.

Começo por dizer que o meu código é grande e parece confuso! Eu vou escrever aqui o código todo e depois escrevo o código onde tenho a dúvida, ok?

Código inteiro:

Program Pzim ;
uses crt;
{caminhos dos registos}
const caminho_cliente = ('C:\stand\registos\cliente.dat');
        caminho_fornecedor = ('C:\stand\registos\fornedor.dat');
        caminho_entrada = ('C:\stand\registos\entrada.dat');
        caminho_saida   = ('C:\stand\registos\saida.dat');
{caminhos da reciclagem}
     caminho_cliente_rec = ('C:\stand\recicl\cliente.dat');
        caminho_fornecedor_rec = ('C:\stand\recicl\fornedor.dat');
caminho_entrada_rec = ('C:\stand\recicl\entrada.dat');
caminho_saida_rec        = ('C:\stand\recicl\saida.dat');
{ao registrar clientes, fornecedores, entradas, saidas antes de a introduzir
no ficheiro perguntar se tem a certeza que quer registrar esse cliente, etc..}

type dados_cliente = Record
        nomeC:string;
        num_biC:string;
        data_nasC:string;
        ruaC:string;
        loteC:string;
        cod_postalC:string;
        localidadeC:string;
        telemovelC:string;
        enderecoC:string;

ativo_cliente,certeza:boolean;
        end;

dados_fornecedor = Record
        num_biF:string;
        nomeF:string;
        ruaF:string;
        loteF:string;
        cod_postalF:string;
        localidadeF:string;
        telefoneF:string;
        enderecoF:string;

ativo_fornecedor,certeza:boolean;
        end;

entrada_viatura = Record
        matricula:string;
        marca:string;
        modelo:string;
        cor:string;
        ano:string;
        combustivel:string;
        descricao:string;
        preco_entrada:string;

ativo_entrada,certeza:boolean;
        end;

saida_viatura = Record

cliente:dados_cliente;

matricula:entrada_viatura;

data_venda:string;
        modo_pag:string;
        preco_saida:string;
ativo_saida:boolean; {esconder o registo}
        end;


total_dados = Record
        cliente:dados_cliente;
        fornecedor:dados_fornecedor;
        entrada:entrada_viatura;
        saida:saida_viatura;
        end; 

{registos}
ficheiro_cliente = file of total_dados;
ficheiro_fornecedor = file of total_dados;
ficheiro_entrada = file of total_dados;
ficheiro_saida = file of total_dados;

{reciclagem}
ficheiro_cliente_reciclagem = file of total_dados;
ficheiro_fornecedor_reciclagem = file of total_dados;
ficheiro_entrada_reciclagem = file of total_dados;
ficheiro_saida_reciclagem = file of total_dados;

var d:total_dados;

{registos}
        f_cliente:ficheiro_cliente;
        f_fornecedor:ficheiro_fornecedor;
        f_entrada:ficheiro_entrada;
        f_saida:ficheiro_saida;

{reciclagem}
f_cliente_rec:ficheiro_cliente_reciclagem;
f_fornecedor_rec:ficheiro_fornecedor_reciclagem;
f_entrada_rec:ficheiro_entrada_reciclagem;
f_saida_rec:ficheiro_saida_reciclagem;

op_formatar, opcao,fecho_principal,opcao_admistrador,opcao_eliminar,fecho_admin,op_reciclagem:char;

nome,passe:string;
Function exist_fich_cliente:boolean;
begin
assign(f_cliente,caminho_cliente);
{$I-}
reset(f_cliente);
close(f_cliente);
{$I+}
exist_fich_cliente:=(ioresult=0);
end;

Function exist_fich_cliente_reciclagem:boolean;{ficheiro da reciclagem para os clientes}
begin
assign(f_cliente_rec,caminho_cliente_rec);
{$I-}
reset(f_cliente_rec);
close(f_cliente_rec);
{$I+}
exist_fich_cliente_reciclagem:=(ioresult=0);
end;

Function exist_fich_fornecedor:boolean;
begin
assign(f_fornecedor,caminho_fornecedor);
{$I-}
reset(f_fornecedor);
close(f_fornecedor);
{$I+}
exist_fich_fornecedor:=(ioresult=0);
end;

Function exist_fich_fornecedor_reciclagem:boolean;{ficheiro da reciclagem para os fornecedores}
begin
assign(f_fornecedor_rec,caminho_fornecedor_rec);
{$I-}
reset(f_fornecedor_rec);
close(f_fornecedor_rec);
{$I+}
exist_fich_fornecedor_reciclagem:=(ioresult=0);
end;

Function exist_fich_entrada:boolean;
begin
assign(f_entrada,caminho_entrada);
{$I-}
reset(f_entrada);
close(f_entrada);
{$I+}
exist_fich_entrada:=(ioresult=0);
end;

Function exist_fich_entrada_reciclagem:boolean;{ficheiro da reciclagem para as entradas}
begin
assign(f_entrada_rec,caminho_entrada_rec);
{$I-}
reset(f_entrada_rec);
close(f_entrada_rec);
{$I+}
exist_fich_entrada_reciclagem:=(ioresult=0);
end;

Function exist_fich_saida:boolean;
begin
assign(f_saida,caminho_saida);
{$I-}
reset(f_saida);
close(f_saida);
{$I+}
exist_fich_saida:=(ioresult=0);
end;

Function exist_fich_saida_reciclagem:boolean;{ficheiro da reciclagem para as saidas}
begin
assign(f_saida_rec,caminho_saida_rec);
{$I-}
reset(f_saida_rec);
close(f_saida_rec);
{$I+}
exist_fich_saida_reciclagem:=(ioresult=0);
end;
{------------------------------------------------ MENU PRINCIPAL ------------------------------------------------}

Procedure menu_princial(var op:char);                                                                                                           
begin
clrscr;
writeln (' --------------------------');
writeln ('|      MENU PRINCIPAL  |');
writeln (' --------------------------');
writeln;
writeln (' Q: Entrar como admistrador');
writeln;
writeln (' 1: Registrar um cliente');
writeln (' 2: Registrar um fornecedor');
writeln (' 3: Registrar uma compra');
writeln (' 4: Registrar uma venda');
writeln;
writeln (' A: Pesquisar clientes registrados');
writeln (' B: Pesquisar fornecedores registrados');
writeln (' C: Pesquisar viaturas em stock');
writeln (' D: Pesquisar viaturas vendidas');
writeln;
writeln (' E: Eliminar registos');
writeln;
writeln (' L: Listar vendas'); {teste}
writeln;
writeln (' 0 > Sair');
writeln;
readln (op);
end;

{------------------------------------------------ CLIENTES ------------------------------------------------}
Procedure ler_cliente(var lc:total_dados);
var num_biC:string; fc:ficheiro_cliente; sinal:boolean; certeza:char;
begin
assign(fc,caminho_cliente);
reset(fc);
seek(fc,0);

sinal:=false;

clrscr;
writeln (' ----------------------------');
writeln ('| REGISTRAR UM CLIENTE |');
writeln (' ----------------------------');
writeln;

write ('> Numero de contribuinte: ');                                                                                                           
readln (num_biC);
while not(eof(fc)) do
begin
        read(fc,lc);
        if (lc.cliente.num_biC = num_biC) and (lc.cliente.ativo_cliente = false) then
        sinal:=true;
end;

if sinal = true then
begin
lc.cliente.ativo_cliente := true;
        writeln;
        writeln ('-- [ERRO] O numero de contribuinte ',num_bic,' ja existe. --');
end;

if sinal = false then
begin
        with lc do
        begin
        cliente.num_biC := num_biC;
cliente.ativo_cliente := false;
        write ('> Nome..................: ');
        readln (cliente.nomeC);
        write ('> Data de nascimento....: ');
        readln (cliente.data_nasC);                            
        write ('> Rua...................: ');                          
        readln (cliente.ruaC);
        write ('> Lote..................: ');
        readln (cliente.loteC);
        write ('> Codigo postal.........: ');
        readln (cliente.cod_postalC);
        write ('> Localidade............: ');
        readln (cliente.localidadeC);
        write ('> Telemovel.............: ');
        readln (cliente.telemovelC);
        write ('> E-mail................: ');
        readln (cliente.enderecoC);
writeln;
write (' Tem a certeza que deseja registrar o cliente? S/N ');
readln (certeza);
        if (certeza = 's') and (sinal = false) then
        begin
clrscr;
cliente.certeza := true;
                writeln (' ----------------------------');
writeln ('| REGISTRAR UM CLIENTE |');
                writeln (' ----------------------------');
                writeln;
writeln ('>> O cliente ',cliente.nomeC,' foi registado com sucesso <<');
                end;
end;
        close(fc);
if (certeza = 'n') or (certeza = 'N') then
begin
        clrscr;
        lc.cliente.certeza := false;
writeln (' ----------------------------');
writeln ('| REGISTRAR UM CLIENTE |');
writeln (' ----------------------------');
        writeln;
writeln ('>> O cliente ',lc.cliente.nomeC,' nao foi registado. << ');
end;
end;
end;

Procedure escrever_cliente(ec:total_dados);
begin
with ec do
begin
writeln ('> Numero de contribuinte: ',cliente.num_biC);
writeln ('> Nome..................: ',cliente.nomeC);
writeln ('> Data de nascimento....: ',cliente.data_nasc);
writeln ('> Rua...................: ',cliente.ruaC);
writeln ('> Lote..................: ',cliente.loteC);
writeln ('> Codigo postal.........: ',cliente.cod_postalC);
writeln ('> Localidade............: ',cliente.localidadeC);
writeln ('> Telemovel.............: ',cliente.telemovelC);
writeln ('> E-mail................: ',cliente.enderecoC);
end;
end;

Procedure esc_reg_fich_cliente(var fc:ficheiro_cliente);
var efc:total_dados; fecho:char;
begin
assign(fc,caminho_cliente);
reset(fc);
seek(fc,filesize(fc));
Repeat
ler_cliente(efc);
        if efc.cliente.certeza = true then
begin
write(fc,efc);
end;
        Repeat
        writeln;
        write (' Deseja continuar a registrar clientes? S/N ');
        readln (fecho);
        Until (fecho='n') or (fecho='s') or (fecho='N') or (fecho='S');
Until (fecho='N') or (fecho='n');                                                                                       
close(fc);
end;

Procedure pesquisar_clientes(var fc:ficheiro_cliente);
var pc:total_dados; sinal:boolean; pesqcliente,num_biC:string; oputi:char;
begin
clrscr;
assign(fc,caminho_cliente);
reset(fc);

sinal:=false;
writeln (' ------------------------------ ');
writeln ('|      Pesquisar clientes      |');
writeln (' ------------------------------ ');
writeln;
write ('> Introduza o numero de contribuente do cliente: ');
readln (pesqcliente);
while not(eof(fc)) do
begin
        read(fc,pc);
        if (pc.cliente.num_biC = pesqcliente) and (pc.cliente.ativo_cliente = false) then
        begin
        writeln;
        escrever_cliente(pc);
        sinal:=true;
        end;
end;
if (sinal=false) then
        begin
        writeln;
        writeln ('--- [ERRO] Nao existe nenhum cliente com esse nome na base de dados. ---');
        end;
close(fc);
end;

Procedure eliminar_cliente(var fc:ficheiro_cliente; var fc_rec:ficheiro_cliente_reciclagem);
var ee:total_dados; var eliminar:char; num_biC:string; sinal:boolean;
begin
clrscr;
sinal:=false;
assign(fc,caminho_cliente);
reset(fc);

assign(fc_rec,caminho_cliente_rec);
reset(fc_rec);

writeln (' ----------------------------');
writeln ('| ELIMINAR UM CLIENTE |');
writeln (' ----------------------------');
writeln;
write ('> Introduza o numero de contribuinte do cliente: ');
readln (num_biC);

while not(eof(fc)) do {PESQUISAR CLIENTES PARA OS ELIMINAR}
begin
read (fc,ee);
if (ee.cliente.num_biC = num_biC) and (ee.cliente.ativo_cliente = false) then
        begin
        writeln;
        escrever_cliente(ee);
sinal:=true;
writeln;
write ('- Carregue na tecla [E] para eliminar e tecla [L] para cancelar: ');
readln (eliminar);

if (eliminar = 'e') or (eliminar = 'E') then
begin
        seek(fc,filepos(fc)-1);
ee.cliente.ativo_cliente := true;
write(fc,ee);
write(fc_rec,ee);
writeln;
clrscr;
writeln (' ----------------------------');
writeln ('| ELIMINAR UM CLIENTE |');
writeln (' ----------------------------');
writeln;
writeln ('>>> O cliente com o NIF ',num_biC,' foi eliminado com sucesso. <<<');
end;
        end;
end;
close(fc);
if sinal = false then
begin
clrscr;
writeln (' ----------------------------');
writeln ('| ELIMINAR UM CLIENTE |');
writeln (' ----------------------------');
writeln;
writeln ('> O cliente ',num_biC,' nao existe, nao foi possivel ser eliminado.');
end;
end;

Procedure reciclagem_clientes(var fc_rec:ficheiro_cliente_reciclagem );
var ee:total_dados;
begin
assign(fc_rec,caminho_cliente_rec);
reset(fc_rec);
clrscr;
writeln (' -------------------------------');
writeln ('| RECICLAGEM DOS CLIENTES |');
writeln (' -------------------------------');
writeln;
while not(eof(fc_rec)) do
begin
read(fc_rec,ee);
escrever_cliente(ee);
end;
close(fc_rec);
end;

Procedure formatar_cliente(var fc:ficheiro_cliente);
var clique:char; cont:integer;
begin
assign(fc,caminho_cliente);
clrscr;
writeln (' ---------------------------------------');
writeln ('|      FORMATAR REGISTO DE CLIENTES    | ');
writeln (' ---------------------------------------');
writeln;
writeln (' Ao formatares a base de dados vais perder os registos de clientes.');
writeln;
writeln ('> Clica na tecla [F] para formatar a base de dados, ou clica [Z] para cancelar.');
readln (clique);
if (clique='F') or (clique='f') then
begin
        for cont:=1 to 10050 do
        begin
        write ('qwertyuiopasdfghjklçzxcvbnm1234567890');
        rewrite(fc);
        end;
        clrscr;
        writeln (' ---------------------------------------');
        writeln ('|     FORMATAR REGISTO DE CLIENTES    | ');
        writeln (' ---------------------------------------');
        writeln;
        writeln ('>> FORMATACAO CONCLUIDA COM SUCESSO <<');
close(fc);
end;
if (clique = 'Z') or (clique = 'z') then
begin
clrscr;
writeln (' ---------------------------------------------');
writeln ('|      FORMATACAO DE REGISTO DE CLIENTES       |');
writeln (' ---------------------------------------------');
writeln;
writeln (' A formatacao dos registos de clientes foi cancelada.');
writeln (' Prima tecla [N] para voltar ao menu de admistrador.');
end;
end;

Procedure formatar_reciclagem_cliente(var fc_rec:ficheiro_cliente_reciclagem);
var clique:char; cont:integer;
begin
assign(fc_rec,caminho_cliente_rec);
clrscr;
writeln (' ------------------------------------------');
writeln ('|      FORMATAR RECICLAGEM DE CLIENTES         | ');
writeln (' ------------------------------------------');
writeln;
writeln (' Ao formatares a base de dados vais perder a reciclagem de clientes.');
writeln;
writeln ('> Clica na tecla [F] para formatar a base de dados, ou clica [Z] para cancelar.');
readln (clique);
if (clique='F') or (clique='f') then
begin
        for cont:=1 to 10050 do
        begin
        write ('qwertyuiopasdfghjklçzxcvbnm1234567890');
        rewrite(fc_rec);
        end;
        clrscr;
        writeln (' ------------------------------------------');
writeln ('|      FORMATAR RECICLAGEM DE CLIENTES         | ');
writeln (' ------------------------------------------');
writeln;
        writeln ('>> FORMATACAO CONCLUIDA COM SUCESSO <<');
close(fc_rec);
end;
if (clique = 'Z') or (clique = 'z') then
begin
clrscr;
        writeln (' ------------------------------------------------');
        writeln ('|     FORMATACAO DA RECICLAGEM DE CLIENTES    | ');
        writeln (' ------------------------------------------------');
        writeln;
        writeln;
writeln (' A formatacao da reciclagem de clientes foi cancelada.');
writeln (' Prima tecla [N] para voltar ao menu de admistrador.')
end;
end; 

{------------------------------------------------ FORNECEDOR ------------------------------------------------}

Procedure ler_fornecedor(var lf:total_dados);
var ff:ficheiro_fornecedor; num_biF:string; sinal:boolean; certeza:char;
begin
assign(ff,caminho_fornecedor);
reset(ff);
seek(ff,0);
sinal:=false;
clrscr;
writeln (' ---------------------------------');
writeln ('|      REGISTRAR UM FORNECEDOR | ');
writeln (' ---------------------------------');
writeln;
write ('> Numero de contribuinte: ');
readln (num_biF);
while not(eof(ff)) do
begin
read(ff,lf);
if (lf.fornecedor.num_biF = num_biF) and (lf.fornecedor.ativo_fornecedor = false) then
sinal:=true;
end;

if sinal = true then
begin
lf.fornecedor.ativo_fornecedor := true;
writeln;
writeln ('--- [ERRO] O numero de contribuinte ',num_biF,' ja existe. --');
end;

if sinal = false then
begin
with lf do
        begin
        fornecedor.num_biF := num_biF;
fornecedor.ativo_fornecedor := false;
        write ('> Nome de fornecedor....: ');
        readln (fornecedor.nomeF);
        write ('> Rua...................: ');
        readln (fornecedor.ruaF);
        write ('> Lote..................: ');
        readln (fornecedor.loteF);
        write ('> Codigo postal.........: ');
        readln (fornecedor.cod_postalF);
        write ('> Localidade............: ');
        readln (fornecedor.localidadeF);
        write ('> Telefone..............: ');
        readln (fornecedor.telefoneF);
        write ('> E-mail................: ');
        readln (fornecedor.enderecoF);
writeln;
write (' Tem a certeza que deseja registrar o fornecedor? S/N ');
readln (certeza);
        if (certeza = 's') and (sinal = false) then
begin
clrscr;
fornecedor.certeza := true;
writeln (' ---------------------------------');
writeln ('|      REGISTRAR UM FORNECEDOR | ');
writeln (' ---------------------------------');
writeln;
writeln ('>> O fornecedor ',fornecedor.num_biF,' foi registado com sucesso <<');
end;
end;
close(ff);
if (certeza = 'n') or (certeza = 'N') then
begin
clrscr;
lf.fornecedor.certeza := false;
writeln (' ---------------------------------');
writeln ('|      REGISTRAR UM FORNECEDOR | ');
writeln (' ---------------------------------');
writeln;
writeln ('>> O fornecedor ',lf.fornecedor.num_biF,' nao foi registado. <<');
end;
end;
end;


Procedure escrever_fornecedor(ef:total_dados);
begin
with ef do
begin
writeln ('> Numero de contribuinte: ',fornecedor.num_biF);
writeln ('> Nome de fornecedor....: ',fornecedor.nomeF);
writeln ('> Rua...................: ',fornecedor.ruaF);
writeln ('> Lote..................: ',fornecedor.loteF);
writeln ('> Codigo postal.........: ',fornecedor.cod_postalF);
writeln ('> Localidade............: ',fornecedor.localidadeF);
writeln ('> Telefone..............: ',fornecedor.telefoneF);
writeln ('> E-mail................: ',fornecedor.enderecoF);
end;
end;

Procedure esc_reg_fich_fornecedor(var ff:ficheiro_fornecedor);
var eff:total_dados; var fecho:char;
begin
assign(ff,caminho_fornecedor);
reset(ff);
seek(ff,filesize(ff));
Repeat
ler_fornecedor(eff);
        if eff.fornecedor.certeza = true then
        begin
        write(ff,eff);
        end;
writeln;
        Repeat
     write (' Deseja continuar a registrar fornecedores? S/N ');
        readln (fecho);
        Until (fecho='n') or (fecho='s') or (fecho='N') or (fecho='S');
Until (fecho='n') or (fecho='N');
close(ff);
end;

Procedure pesquisar_fornecedor(var ff:ficheiro_fornecedor);
var pf:total_dados; sinal:boolean; pesforn:string;
begin
clrscr;
writeln (' --------------------------------');
writeln ('|      Pesquisar fornecedor    | ');
writeln (' --------------------------------');
assign(ff,caminho_fornecedor);
reset(ff);

sinal:=false;
writeln;
write ('> Introduza o numero de contribuente do fornecedor: ');
readln (pesforn);
while not(eof(ff)) do
begin
        read(ff,pf);
        if (pf.fornecedor.num_biF = pesforn) and (pf.fornecedor.ativo_fornecedor = false) then
        begin
        writeln;
        escrever_fornecedor(pf);
        sinal:=true;
        end;
end;
        if (sinal=false) then
        begin
        writeln;
        writeln ('[ERRO] Nao existe nenhum fornecedor com esse nome na base de dados.');
        end;
close(ff);
end;

Procedure eliminar_fornecedor(var ff:ficheiro_fornecedor; var ff_rec:ficheiro_fornecedor_reciclagem);
var ee:total_dados; var eliminar:char; num_biF:string; sinal:boolean;
begin
clrscr;
sinal:=false;
assign(ff,caminho_fornecedor);
reset(ff);

assign(ff_rec,caminho_fornecedor_rec);
reset(ff_rec);

writeln (' ------------------------------');
writeln ('| ELIMINAR UM FORNECEDOR |');
writeln (' -----------------------------');
writeln;
write ('> Introduza o numero de contribuinte do fornecedor: ');
readln (num_biF);

while not(eof(ff)) do {PESQUISAR CLIENTES PARA OS ELIMINAR}
begin
read (ff,ee);
if (ee.fornecedor.num_biF = num_biF) and (ee.fornecedor.ativo_fornecedor = false) then
        begin
        writeln;
        escrever_fornecedor(ee);
sinal:=true;
writeln;
write ('- Carregue na tecla [E] para eliminar e tecla [L] para cancelar: ');
readln (eliminar);

if (eliminar = 'e') or (eliminar = 'E') then
begin
        seek(ff,filepos(ff)-1);
ee.fornecedor.ativo_fornecedor :=true;
write(ff,ee);
write(ff_rec,ee);
writeln;
clrscr;
writeln (' ------------------------------');
writeln ('| ELIMINAR UM FORNECEDOR |');
writeln (' ------------------------------');
writeln;
writeln ('>>> O fornecedor com o NIF ',num_biF,' foi eliminado com sucesso. <<<');
end;
        end;
end;
close(ff);
if sinal = false then
begin
clrscr;
writeln (' ------------------------------');
writeln ('| ELIMINAR UM FORNECEDOR |');
writeln (' ------------------------------');
writeln;
writeln ('> O fornecedor ',num_biF,' nao existe, nao foi possivel ser eliminado.');
end;
end;

Procedure reciclagem_fornecedores(var ff_rec:ficheiro_fornecedor_reciclagem );
var ee:total_dados;
begin
assign(ff_rec,caminho_fornecedor_rec);
reset(ff_rec);
clrscr;
writeln (' -----------------------------------');
writeln ('| RECICLAGEM DOS FORNECEDORES |');
writeln (' -----------------------------------');
writeln;
while not(eof(ff_rec)) do
begin
read(ff_rec,ee);
escrever_fornecedor(ee);
end;
close(ff_rec);
end;

Procedure formatar_fornecedor(var ff:ficheiro_fornecedor);
var clique:char; cont:integer;
begin
assign(ff,caminho_fornecedor);
clrscr;
writeln (' -------------------------------------------');
writeln ('|      FORMATAR REGISTO DE FORNECEDORES        | ');
writeln (' -------------------------------------------');
writeln;
writeln (' Ao formatares a base de dados vais perder os registos de forncedores.');
writeln;
writeln ('> Clica na tecla [F] para formatar a base de dados, ou clica [Z] para cancelar.');
readln (clique);
if (clique='F') or (clique='f') then
begin
        for cont:=1 to 10050 do
        begin
        write ('qwertyuiopasdfghjklçzxcvbnm1234567890');
        rewrite(ff);
        end;
        clrscr;
        writeln (' --------------------------------------------');
        writeln ('|     FORMATAR REGISTO DE FORNECEDORES        | ');
        writeln (' --------------------------------------------');
        writeln;
        writeln ('>> FORMATACAO CONCLUIDA COM SUCESSO <<');
close(ff);
end;
if (clique = 'Z') or (clique = 'z') then
begin
clrscr;
        writeln (' -------------------------------------------------');
        writeln ('|     FORMATACAO DE REGISTO DE FORNECEDORES   | ');
        writeln (' -------------------------------------------------');
        writeln;
writeln (' A formatacao dos registos dos fornecedores foi cancelada.');
writeln (' Prima tecla [N] para voltar ao menu de admistrador.')
end;
end;

Procedure formatar_reciclagem_fornecedor(var ff_rec:ficheiro_fornecedor_reciclagem);
var clique:char; cont:integer;
begin
assign(ff_rec,caminho_fornecedor_rec);
clrscr;
writeln (' ----------------------------------------------');
writeln ('|      FORMATAR RECICLAGEM DE FORNECEDORES     | ');
writeln (' ----------------------------------------------');
writeln;
writeln (' Ao formatares a base de dados vais perder a reciclagem de forncedores.');
writeln;
writeln ('> Clica na tecla [F] para formatar a base de dados, ou clica [Z] para cancelar.');
readln (clique);
if (clique='F') or (clique='f') then
begin
        for cont:=1 to 10050 do
        begin
        write ('qwertyuiopasdfghjklçzxcvbnm1234567890');
        rewrite(ff_rec);
        end;
        clrscr;
        writeln (' ----------------------------------------------');
writeln ('|      FORMATAR RECICLAGEM DE FORNECEDORES     | ');
writeln (' ----------------------------------------------');
writeln;
        writeln ('>> FORMATACAO CONCLUIDA COM SUCESSO <<');
close(ff_rec);
end;
if (clique = 'Z') or (clique = 'z') then
begin
clrscr;
        writeln (' ---------------------------------------------------');
        writeln ('|     FORMATACAO DA RECICLAGEM DE FORNECEDORES        |');
        writeln (' ----------------------------------------------------');
        writeln;
writeln (' A formatacao da reciclagem dos fornecedores foi cancelada.');
writeln (' Prima tecla [N] para voltar ao menu de admistrador.')
end;
end;

{------------------------------------------------ ENTRADA ------------------------------------------------}

Procedure ler_entrada(var le:total_dados);
var fe:ficheiro_entrada; sinal:boolean; matriculaentrada:string; certeza:char;
begin
assign(fe,caminho_entrada);
reset(fe);
seek(fe,0);
sinal:=false;
clrscr;

writeln (' ---------------------------------');
writeln ('|      REGISTRAR UMA ENTRADA   | ');
writeln (' ---------------------------------');
writeln;
write ('> Matricula...........: ');
readln (matriculaentrada);
while not(eof(fe)) do
begin
read(fe,le);
if (le.entrada.matricula = matriculaentrada) and (le.entrada.ativo_entrada = false) then
sinal:=true;
end;

if sinal = true then
begin
le.entrada.ativo_entrada := true;
writeln;
writeln ('-- [ERRO] A matricula ',matriculaentrada,' ja existe. --');
end;

if sinal = false then
begin
with le do
        begin
        entrada.matricula := matriculaentrada;
entrada.ativo_entrada := false;
        write ('> Marca...............: ');
        readln (entrada.marca);
        write ('> Modelo..............: ');
        readln (entrada.modelo);
        write ('> Cor.................: ');
        readln (entrada.cor);
        write ('> Ano.................: ');
        readln (entrada.ano);
        write ('> Combustivel.........: ');                                                    
        readln (entrada.combustivel);  
        write ('> Descricao...........: ');
        readln (entrada.descricao);
        write ('> Preco de entrada....: ');
        readln (entrada.preco_entrada);
writeln;
write (' Tem a certeza que deseja registar a entrada da viatura? S/N ');
readln (certeza);
        if (certeza = 's') and (sinal = false) then
begin
clrscr;
entrada.certeza := true;
writeln (' ---------------------------------');
writeln ('|      REGISTRAR UMA ENTRADA   | ');
writeln (' ---------------------------------');
writeln;
writeln ('>> A viatura ',entrada.matricula,' foi registada com sucesso <<');
end;
end;

end;
close(fe);
if (certeza = 'n') or (certeza = 'N') then
begin
clrscr;
le.entrada.certeza := false;
writeln (' ---------------------------------');
writeln ('|      REGISTRAR UMA ENTRADA   | ');
writeln (' ---------------------------------');
writeln;
writeln ('>> A viatura ',le.entrada.matricula,' nao foi registada <<');
end;
end; 

Procedure escrever_entrada(ee:total_dados);
begin                                                   
with ee do
begin
writeln ('> Matricula...........: ',entrada.matricula);
writeln ('> Marca...............: ',entrada.marca);
writeln ('> Modelo..............: ',entrada.modelo);
writeln ('> Cor.................: ',entrada.cor);
writeln ('> Ano.................: ',entrada.ano);
writeln ('> Combustivel.........: ',entrada.combustivel);
writeln ('> Descricao...........: ',entrada.descricao);
writeln ('> Preco de entrada....: ',entrada.preco_entrada);
end;
end;

Procedure esc_reg_fich_entrada (var fe:ficheiro_entrada);
var ff:ficheiro_fornecedor; var ee:total_dados; sinal:boolean; num_biF:string; fecho:char;
begin

ee.fornecedor.num_biF := num_biF;
sinal:=false;

assign(ff,caminho_fornecedor);
reset(ff);

clrscr;
writeln (' ------------------------------------------');
writeln ('|      Fazer uma compra ao fornecedor  | ');
writeln (' ------------------------------------------');
writeln;
write ('> Introduza o numero de contribuinte do fornecedor: ');
readln (num_biF);

while not(eof(ff)) do {ver ao registo do fornecedor}
begin
read(ff,ee);
if (ee.fornecedor.num_biF = num_biF ) then
sinal:=true;
end;

if sinal = true then
begin
assign(fe,caminho_entrada);
reset(fe);
seek(fe,filesize(fe));
Repeat
ler_entrada(ee);
        if ee.entrada.certeza = true then
begin
write (fe,ee);
end;
Repeat
                writeln;
        writeln (' Deseja continuar a registrar entradas? S/N ');
        readln (fecho);
Until (fecho='n') or (fecho='s') or (fecho='N') or (fecho='S');
Until (fecho='n') or (fecho='N');
        close(fe);
end;
if sinal = false then
begin
clrscr;
        writeln (' -----------------------');
writeln ('|              Aviso           |');
writeln (' -----------------------');
writeln;
        writeln ('[AVISO] Nao existe nenhum fornecedor com esse numero de contribuinte');
        writeln;
        writeln ('[DICA 1] Para registrares um fornecedor vais ao menu principal.');
        writeln ('[DICA 2] Carregas na tecla (2) para registrar o fornecedor.');
        writeln ('[DICA 3] Quando concluires as dicas a cima, ja podes registrar a compra.');
        writeln;
        writeln ('> Carrega na tecla [ENTER] para sair.');
        readln;
end;
end;

Procedure pesquisar_stock(var fe:ficheiro_entrada);
var pe:total_dados; sinal:boolean; pesq:string;
begin
assign(fe,caminho_entrada);
reset(fe);
sinal:=false;
clrscr;
writeln (' ---------------------------------------');
writeln ('|      Pesquisar viaturas em stock     | ');
writeln (' ---------------------------------------');

writeln;
write ('> Introduza a matricula: ');
readln (pesq);
while not(eof(fe)) do
begin
        read(fe,pe);
        if (pe.entrada.matricula=pesq) and (pe.entrada.ativo_entrada = false) then
        begin
        writeln;
        escrever_entrada(pe);
        sinal:=true;
        end;
end;

if (sinal=false) then
        begin
        writeln;
        writeln ('[ERRO] Nao existe nenhuma viatura com essa matrícula na base de dados.');
        end;
close(fe);
end;

Procedure eliminar_entrada(var fe:ficheiro_entrada; var fe_rec:ficheiro_entrada_reciclagem);
var ee:total_dados; var eliminar:char; matricula:string; sinal:boolean;
begin
clrscr;
sinal:=false;
assign(fe,caminho_entrada);
reset(fe);

assign(fe_rec,caminho_entrada_rec);
reset(fe_rec);

writeln (' ----------------------------');
writeln ('| ELIMINAR UMA ENTRADA |');
writeln (' ----------------------------');
writeln;
write ('> Introduza a matricula: ');
readln (matricula);

while not(eof(fe)) do {PESQUISAR CLIENTES PARA OS ELIMINAR}
begin
read (fe,ee);
if (ee.entrada.matricula = matricula) and (ee.entrada.ativo_entrada = false) then
        begin
        writeln;
        escrever_entrada(ee);
sinal:=true;
writeln;
write ('- Carregue na tecla [E] para eliminar e tecla [L] para cancelar: ');
readln (eliminar);

if (eliminar = 'e') or (eliminar = 'E') then
begin
        seek(fe,filepos(fe)-1);
ee.entrada.ativo_entrada :=true;
write(fe,ee);
write(fe_rec,ee);
writeln;
clrscr;
writeln (' ----------------------------');
writeln ('| ELIMINAR UMA ENTRADA |');
writeln (' ----------------------------');
writeln;
writeln ('>>> A matricula ',matricula,' foi eliminada com sucesso. <<<');
end;
        end;
close(fe);
end;
if sinal = false then
begin
clrscr;
writeln (' ----------------------------');
writeln ('| ELIMINAR UMA ENTRADA |');
writeln (' ----------------------------');
writeln;
writeln ('> A matricula ',matricula,' nao existe, nao foi possivel ser eliminada.');
end;
end;

Procedure reciclagem_entradas(var fe_rec:ficheiro_entrada_reciclagem );
var ee:total_dados;
begin
assign(fe_rec,caminho_entrada_rec);
reset(fe_rec);
clrscr;
writeln (' -------------------------------');
writeln ('| RECICLAGEM DAS ENTRADAS |');
writeln (' -------------------------------');
writeln;
while not(eof(fe_rec)) do
begin
read(fe_rec,ee);
escrever_entrada(ee);
end;
close(fe_rec);
end;
Procedure formatar_entrada(var fe:ficheiro_entrada);
var clique:char; cont:integer;
begin
assign(fe,caminho_entrada);
clrscr;
writeln (' ----------------------------------------');
writeln ('|      FORMATAR REGISTO DE ENTRADAS    | ');
writeln (' ----------------------------------------');
writeln;
writeln (' Ao formatares a base de dados vais perder os registos de entradas.');
writeln;
writeln ('> Clica na tecla [F] para formatar a base de dados, ou clica [Z] para cancelar.');
readln (clique);
if (clique='F') or (clique='f') then
begin
        for cont:=1 to 10050 do
        begin
        write ('qwertyuiopasdfghjklçzxcvbnm1234567890');
        rewrite(fe);
        end;
        clrscr;
        writeln (' ----------------------------------------');
        writeln ('|     FORMATAR REGISTO DE ENTRADAS    | ');
        writeln (' ----------------------------------------');
        writeln;
        writeln ('>> FORMATACAO CONCLUIDA COM SUCESSO <<');
close(fe);
end;
if (clique = 'Z') or (clique = 'z') then
begin
clrscr;
        writeln (' -----------------------------------------------');
        writeln ('|     FORMATACAO DOS REGISTOS DE ENTRADAS     | ');
        writeln (' -----------------------------------------------');
        writeln;
writeln (' A formatacao dos registos de entradas foi cancelada.');
writeln (' Prima tecla [N] para voltar ao menu de admistrador.')
end;
end;

Procedure formatar_reciclagem_entrada(var fe_rec:ficheiro_entrada_reciclagem);
var clique:char; cont:integer;
begin
assign(fe_rec,caminho_entrada_rec);
clrscr;
writeln (' -------------------------------------------');
writeln ('|      FORMATAR RECICLAGEM DE ENTRADAS         | ');
writeln (' -------------------------------------------');
writeln;
writeln (' Ao formatares a base de dados vais perder a reciclagem de entradas.');
writeln;
writeln ('> Clica na tecla [F] para formatar a base de dados, ou clica [Z] para cancelar.');
readln (clique);
if (clique='F') or (clique='f') then
begin
        for cont:=1 to 10050 do
        begin
        write ('qwertyuiopasdfghjklçzxcvbnm1234567890');
        rewrite(fe_rec);
        end;
        clrscr;
        writeln (' -------------------------------------------');
        writeln ('|     FORMATAR RECICLAGEM DE ENTRADAS         | ');
        writeln (' -------------------------------------------');
        writeln;
        writeln ('>> FORMATACAO CONCLUIDA COM SUCESSO <<');
close(fe_rec);
end;
if (clique = 'Z') or (clique = 'z') then
begin
clrscr;
        writeln (' ------------------------------------------------');
        writeln ('|     FORMATACAO DA RECICLAGEM DE ENTRADAS    | ');
        writeln (' ------------------------------------------------');
        writeln;
writeln (' A formatacao da reciclagem das entradas foi cancelada.');
writeln (' Prima tecla [N] para voltar ao menu de admistrador.')
end;

end;

{------------------------------------------------ SAÍDAS ------------------------------------------------}
Procedure ler_saida(var ee:total_dados);
begin
write ('- Data de venda....: ');
readln (ee.saida.data_venda);
write ('- Modo de pagamento: ');
readln (ee.saida.modo_pag);
write ('- Preco de saida...: ');
readln (ee.saida.preco_saida);
end;

Procedure escrever_saida(ee:total_dados);
begin
with ee do
begin
writeln ('- Dados do cliente:');
writeln;
writeln ('> Numero de contribuinte: ',cliente.num_biC);
writeln ('> Nome..................: ',cliente.nomeC);
writeln ('> Telemovel.............: ',cliente.telemovelC);
writeln;
writeln ('- Dados da matricula:');
writeln;
writeln ('> Matricula.............: ',entrada.matricula);
writeln ('> Marca.................: ',entrada.marca);
writeln ('> Modelo................: ',entrada.modelo);
writeln ('> Preco de entrada......: ',entrada.preco_entrada);
writeln;
writeln ('- Dados da venda:');
writeln;
writeln ('> Data de venda.........: ',saida.data_venda);
writeln ('> Modo de pagamento.....: ',saida.modo_pag);
writeln ('> Preco de saida........: ',saida.preco_saida);
end;
end;
Procedure esc_reg_fich_saida(var fs:ficheiro_saida);
var num_biC,matricula:string; var sinalcliente,sinalmatricula:boolean; var certeza,fecho:char;
var fc:ficheiro_cliente; var fe:ficheiro_entrada; var ee:total_dados;
begin
sinalcliente := false;
sinalmatricula := false; 
clrscr;
writeln (' --------------------------------------');
writeln ('|      FAZER UMA VENDA AO CLIENTE      | ');
writeln (' --------------------------------------');
writeln;

write ('- Introduza o numero de contribuente do cliente: ');
readln (num_biC);

assign(fc,caminho_cliente);
reset(fc);

assign(fe,caminho_entrada);
reset(fe);

assign(fs,caminho_saida);
reset(fs);
seek(fs,filesize(fs)) ;

while not(eof(fc)) do
begin
read(fc,ee);
if (ee.cliente.num_biC = num_biC) and (ee.cliente.ativo_cliente = false) then
        begin
writeln;
writeln ('> Numero de contribuinte: ',ee.cliente.num_biC);       {Aparece sempre que foi registrado no mesmo cliente}
writeln ('> Nome..................: ',ee.cliente.nomeC);
writeln ('> Telemovel.............: ',ee.cliente.telemovelC);
writeln ('> E-mail................: ',ee.cliente.enderecoC);
writeln;
sinalcliente := true;
end;
end;

if (sinalcliente = false) then
begin
writeln;
writeln (' O cliente com o NIF ',num_biC,' nao existe no banco de dados.');
writeln (' Nao e possivel seguir com a venda.');
writeln;
end;

matricula := ee.entrada.matricula;
write ('- Introduza a matricula da viatura.............: ');
readln (matricula);

while not(eof(fe)) do
begin
read(fe,ee);
if (ee.entrada.matricula = matricula) and (ee.entrada.ativo_entrada = false) then
begin
        writeln;
        writeln ('> Matricula...........: ',ee.entrada.matricula);
        writeln ('> Marca...............: ',ee.entrada.marca);
writeln ('> Modelo..............: ',ee.entrada.modelo);
writeln ('> Preco de entrada....: ',ee.entrada.preco_entrada);
sinalmatricula := true;
end;
end;

if (sinalmatricula = false) then
begin
writeln;
writeln (' A matricula ',matricula,' nao existe no banco de dados.');
writeln (' Nao e possivel seguir com a venda.');
end;

if (sinalcliente = true) and (sinalmatricula = true) then
begin
writeln;
write ('Tem a certeza que deseja prosseguir a venda? S/N ');
readln (certeza);

        if (certeza = 's') or (certeza = 'S') then
begin
        ee.entrada.ativo_entrada := true;
        writeln;
        ler_saida(ee);
        write(fs,ee);
clrscr;
writeln (' --------------------------------');
writeln ('|              VENDA CONCLUIDA         |');
writeln (' --------------------------------');
writeln;
writeln ('>>> A matricula ',matricula,' foi vendida com sucesso ao cliente ',num_biC,' <<<');
end;

end;
close(fs);
end;
{Não pesquisa, mas lista}
Procedure pesquisar_saida(var fs:ficheiro_saida);
var sinal:boolean; var pesq:string; var ee:total_dados;
begin
assign(fs,caminho_saida);
reset(fs);
sinal := false;
clrscr;
writeln (' ----------------------------');
writeln ('|      PESQUISAR VENDAS        |');
writeln (' ----------------------------');
writeln;

write ('> Introduza matricula que vendeu: ');
readln (pesq);

while not(eof(fs)) do
begin
read(fs,ee);
if (ee.entrada.matricula = pesq) and (ee.entrada.ativo_entrada = false) then
begin
writeln;
escrever_saida(ee);
sinal := true;
end;
end;

if sinal = false then
begin
writeln;
writeln('[ERRO] Nao existe nenhuma venda com essa matricula na base de dados.');
end;
close(fs);
end;

{Procedure listar_saidas(var fs:ficheiro_saida );
var ee:total_dados;
begin
assign(fs,caminho_saida);
reset(fs);
clrscr;
writeln;
while not(eof(fs)) do
begin
read(fs,ee);
writeln;
escrever_saida(ee);
end;
close(fs);
end;}
Procedure formatar_saida(var fs:ficheiro_saida);
var clique:char; cont:integer;
begin
assign(fs,caminho_saida);
clrscr;
writeln (' --------------------------------------');
writeln ('|      FORMATAR REGISTO DE SAIDAS      |');
writeln (' --------------------------------------');
writeln;
writeln (' Ao formatares a base de dados vais perder os registos de saidas.');
writeln;
writeln ('> Clica na tecla [F] para formatar a base de dados, ou clica [Z] para cancelar.');
readln (clique);
if (clique='F') or (clique='f') then
begin
        for cont:=1 to 10050 do
        begin
        write ('qwertyuiopasdfghjklçzxcvbnm1234567890');
        rewrite(fs);
        end;
        clrscr;
        writeln (' --------------------------------------');
        writeln ('|     FORMATAR REGISTO DE SAIDAS      |');
        writeln (' --------------------------------------');
        writeln;
        writeln ('>> FORMATACAO CONCLUIDA COM SUCESSO <<');
close(fs);
end;
if (clique = 'Z') or (clique = 'z') then
begin
clrscr;
        writeln (' ---------------------------------------------');
        writeln ('|     FORMATACAO DOS REGISTOS DE SAIDAS       | ');
        writeln (' --------------------------------------------');
        writeln;
writeln (' A formatacao dos registos das saidas foi cancelada.');
writeln (' Prima tecla [N] para voltar ao menu de admistrador.')
end;
end;

Procedure formatar_reciclagem_saida(var fs_rec:ficheiro_saida_reciclagem);
var clique:char; cont:integer;
begin
assign(fs_rec,caminho_saida_rec);
clrscr;
writeln (' -----------------------------------------');
writeln ('|      FORMATAR RECICLAGEM DE SAIDAS   |');
writeln (' -----------------------------------------');
writeln;
writeln (' Ao formatares a base de dados vais perder a reciclagem de saidas.');
writeln;
writeln ('> Clica na tecla [F] para formatar a base de dados, ou clica [Z] para cancelar.');
readln (clique);
if (clique='F') or (clique='f') then
begin
        for cont:=1 to 10050 do
        begin
        write ('qwertyuiopasdfghjklçzxcvbnm1234567890');
        rewrite(fs_rec);
        end;
        clrscr;
        writeln (' -----------------------------------------');
        writeln ('|     FORMATAR RECICLAGEM DE SAIDAS   |');
        writeln (' -----------------------------------------');
        writeln;
        writeln ('>> FORMATACAO CONCLUIDA COM SUCESSO <<');
close(fs_rec);
end;
if (clique = 'Z') or (clique = 'z') then
begin
clrscr;
        writeln (' ----------------------------------------------');
        writeln ('|     FORMATACAO DA RECICLAGEM DE SAIDAS      |');
        writeln (' ----------------------------------------------');
        writeln;
writeln (' A formatacao da reciclagem das saidas foi cancelada.');
writeln (' Prima tecla [N] para voltar ao menu de admistrador.')
end;
end;


{------------------------------------------------ MENU ELIMINAR OS REGISTOS --------------------------------------------}
Procedure menu_eliminar(var op_elim:char);
var fc:ficheiro_cliente; var ff:ficheiro_fornecedor;
var fe:ficheiro_entrada; var fs:ficheiro_saida;
var fc_rec:ficheiro_cliente_reciclagem;
var ff_rec:ficheiro_fornecedor_reciclagem;
var fe_rec:ficheiro_entrada_reciclagem;
begin
clrscr;
writeln (' ----------------------------------');
writeln ('|      MENU ELIMINAR REGISTOS  |');
writeln (' ----------------------------------');
writeln;
writeln (' C: Clientes');
writeln (' F: Fornecedores');
writeln (' E: Entradas');
writeln (' S: Saidas');
writeln;
writeln (' > Prima qualquer tecla para sair.');
writeln;
readln(op_elim);

case op_elim of
'c','C':eliminar_cliente(fc,fc_rec);
'f','F':eliminar_fornecedor(ff,ff_rec);
'e','E':eliminar_entrada(fe,fe_rec);

end;
end;

{------------------------------------------------ CONTA DE ADMISTRADOR ------------------------------------------------}

Procedure formatar_basedados;
var fc:ficheiro_cliente; var fe:ficheiro_entrada;
var ff:ficheiro_fornecedor; var fs:ficheiro_saida; var fc_rec:ficheiro_cliente_reciclagem;
var ff_rec:ficheiro_fornecedor_reciclagem; var fe_rec:ficheiro_entrada_reciclagem;
var fs_rec:ficheiro_saida_reciclagem;
var clique:char; cont:integer;
begin
assign(fc,caminho_cliente);
assign(ff,caminho_fornecedor);
assign(fe,caminho_entrada);
assign(fs,caminho_saida);
assign(fc_rec,caminho_cliente_rec);
assign(ff_rec,caminho_fornecedor_rec);
assign(fe_rec,caminho_entrada_rec);
assign(fs_rec,caminho_saida_rec);
clrscr;
writeln (' ---------------------------------------');
writeln ('|      FORMATACAO DA BASE DE DADOS     | ');
writeln (' ---------------------------------------');
writeln;
writeln (' Ao formatares a base de dados vais perder todos os teus registos.');
writeln (' Ao formatares a base de dados vais perder todas as tuas reciclagens.');
writeln;
writeln ('> Clica na tecla [F] para formatar a base de dados, ou clica [Z] para cancelar.');
readln (clique);
if (clique='F') or (clique='f') then
begin
        for cont:=1 to 10050 do
        begin
        write ('qwertyuiopasdfghjklçzxcvbnm1234567890');
        rewrite(fc);
        rewrite(fe);
        rewrite(ff);
        rewrite(fs);
rewrite(fc_rec);
        rewrite(fe_rec);
        rewrite(ff_rec);
        rewrite(fs_rec);       
        end;
        clrscr;
writeln (' ---------------------------------------');
        writeln ('|     FORMATACAO DA BASE DE DADOS     | ');
        writeln (' ---------------------------------------');
        writeln;
        writeln ('>> FORMATACAO CONCLUIDA COM SUCESSO <<');
close(fc);
close(ff);
close(fe);
close(fs);
close(fc_rec);
close(fe_rec);
close(ff_rec);
close(fs_rec);
end;
if (clique = 'Z') or (clique = 'z') then
begin
clrscr;
        writeln (' ---------------------------------------');
        writeln ('|     FORMATACAO DA BASE DE DADOS     | ');
        writeln (' ---------------------------------------');
        writeln;
writeln (' A formatacao da base de dados foi cancelada.');
writeln (' Prima tecla [N] para voltar ao menu de admistrador.');
end;
end;


Procedure menu_reciclagem(var op_rec:char);
var fc_reciclagem:ficheiro_cliente_reciclagem;
var ff_reciclagem:ficheiro_fornecedor_reciclagem;
var fe_reciclagem:ficheiro_entrada_reciclagem;
begin
clrscr;
writeln (' ---------------------------');
writeln ('|      MENU RECICLAGEM         |');
writeln (' ---------------------------');
writeln;
writeln (' C: Clientes');
writeln (' F: Fornecedores');
writeln (' E: Entradas');
writeln (' S: Saidas');
writeln;
writeln (' > Prima qualquer tecla para sair.');
writeln;
readln (op_rec);

case op_rec of
'c','C':reciclagem_clientes(fc_reciclagem);
'f','F':reciclagem_fornecedores(ff_reciclagem);
'e','E':reciclagem_entradas(fe_reciclagem);
end;
end;

Procedure menu_formatar(var op_formatar:char);
var fc:ficheiro_cliente; var ff:ficheiro_fornecedor;
var fe:ficheiro_entrada; var fs:ficheiro_saida;
var fc_rec:ficheiro_cliente_reciclagem; var ff_rec:ficheiro_fornecedor_reciclagem;
var fe_rec:ficheiro_entrada_reciclagem; var fs_rec:ficheiro_saida_reciclagem;
begin
clrscr;
writeln (' ---------------------------------------');
writeln ('|      FORMATACAO DA BASE DE DADOS     | ');
writeln (' ---------------------------------------');
writeln;
writeln (' 0: Formatar base dados inteira');
writeln;
writeln (' 1: Registo de clientes');
writeln (' 2: Registo de fornecedores');
writeln (' 3: Registo de entradas');
writeln (' 4: Registo de saidas');
writeln;
writeln (' A: Reciclagem de clientes');
writeln (' B: Reciclagem de fornecedores');
writeln (' C: Reciclagem de entradas');
writeln (' D: Reciclagem de saidas');
writeln;
writeln (' > Prima qualquer tecla para sair.');
writeln;
readln (op_formatar);

case op_formatar of
'0':formatar_basedados;
'1':formatar_cliente(fc);
'2':formatar_fornecedor(ff);
'3':formatar_entrada(fe);
'4':formatar_saida(fs);
'A','a':formatar_reciclagem_cliente(fc_rec);
'B','b':formatar_reciclagem_fornecedor(ff_rec);
'C','c':formatar_reciclagem_entrada(fe_rec);
'D','d':formatar_reciclagem_saida(fs_rec);
end;
end;






Procedure menu_admistrador(var op_admin:char; op_rec:char; op_formatar:char);
var fecho_admin:char;
begin
Repeat
clrscr;
writeln (' ----------------------------');
writeln ('|      MENU ADMISTRADOR        |');
writeln (' ----------------------------');
writeln;
writeln (' L: Listar registos eliminados'); {fazer esta opção}
writeln;
writeln (' V: Verificar sistema de estoque');
writeln;
writeln (' F: Formatar base de dados');
writeln;
writeln (' > Prima qualquer tecla para sair.');
writeln;
readln (op_admin);
case op_admin of
'f','F':menu_formatar(op_formatar);
'l','L':menu_reciclagem(op_rec);
end;
writeln;
Repeat
writeln ('- Deseja sair da conta de admistrador? S/N');
readln (fecho_admin);
Until (fecho_admin='n') or (fecho_admin='s') or (fecho_admin='N') or (fecho_admin='S');
Until (fecho_admin = 's') or (fecho_admin = 'S');
end;

Procedure admistrador(var name,passe:string; op_admin:char; op_rec:char; op_formatar:char);
var sinal:boolean;
begin
sinal:=false;
clrscr;
writeln (' -----------------------------------');
writeln ('|      Entrar como admistrador         | ');
writeln (' -----------------------------------');
writeln;
write ('> Nome de admistrador: ');
readln (name);
writeln;
write ('> Palavra Passe......: ');
readln (passe);

if (name = 'danielsilva') and (passe = 'viladerei99') then
begin
writeln;
menu_admistrador(op_admin,op_rec,op_formatar);
        sinal:=true;
end;

if sinal = false then
begin
clrscr;
writeln (' -------------------------------');
writeln ('| ENTRAR COMO ADMISTRADOR |');
writeln (' ------------------------------');
writeln;
writeln ('>> O nome de admistrador ou a palavra passe estao erradas. <<');
writeln;
writeln ('... Tente novamente!');
writeln;
end;
end;

{------------------------------------------------ PROGRAMA PRINCIPAL ------------------------------------------------}

Begin
if (exist_fich_cliente) then
reset(f_cliente)
else
rewrite(f_cliente);
close(f_cliente); 
if (exist_fich_cliente_reciclagem) then
reset(f_cliente_rec)
else
rewrite(f_cliente_rec);
close(f_cliente_rec);
if (exist_fich_fornecedor) then
reset(f_fornecedor)
else
rewrite(f_fornecedor);
close(f_fornecedor); 
if (exist_fich_fornecedor_reciclagem) then
reset(f_fornecedor_rec)
else
rewrite(f_fornecedor_rec);
close(f_fornecedor_rec); 
if (exist_fich_entrada) then
reset(f_entrada)
else
rewrite(f_entrada);
close(f_entrada);
if (exist_fich_entrada_reciclagem) then
reset(f_entrada_rec)
else
rewrite(f_entrada_rec);
close(f_entrada_rec);

if (exist_fich_saida) then
reset(f_saida)
else
rewrite(f_saida);
close(f_saida);
if (exist_fich_saida_reciclagem) then
reset(f_saida_rec)
else
rewrite(f_saida_rec);
close(f_saida_rec); 
Repeat
menu_princial(opcao);
case opcao of
'1':esc_reg_fich_cliente(f_cliente);
'2':esc_reg_fich_fornecedor(f_fornecedor);
'3':esc_reg_fich_entrada(f_entrada);
'4': esc_reg_fich_saida(f_saida);

'a','A':pesquisar_clientes(f_cliente);
'b','B':pesquisar_fornecedor(f_fornecedor);
'c','C':pesquisar_stock(f_entrada);
'd','D':pesquisar_saida(f_saida);


'e','E':menu_eliminar(opcao_eliminar);

'q','Q':admistrador(nome,passe,opcao_admistrador,op_reciclagem,op_formatar);


end;

writeln;
Repeat
writeln ('- Deseja sair do programa? S/N ');
readln (fecho_principal);
clrscr;
Until (fecho_principal='n') or (fecho_principal='s') or (fecho_principal='N') or (fecho_principal='S');
Until (fecho_principal='S') or (fecho_principal='s');

End.

Os procedimentos onde tenho a dúvida:

Procedure ler_saida(var ee:total_dados);
begin
write ('- Data de venda....: ');
readln (ee.saida.data_venda);
write ('- Modo de pagamento: ');
readln (ee.saida.modo_pag);
write ('- Preco de saida...: ');
readln (ee.saida.preco_saida);
end;

Procedure escrever_saida(ee:total_dados);
begin
with ee do
begin
writeln ('- Dados do cliente:');
writeln;
writeln ('> Numero de contribuinte: ',cliente.num_biC);
writeln ('> Nome..................: ',cliente.nomeC);
writeln ('> Telemovel.............: ',cliente.telemovelC);
writeln;
writeln ('- Dados da matricula:');
writeln;
writeln ('> Matricula.............: ',entrada.matricula);
writeln ('> Marca.................: ',entrada.marca);
writeln ('> Modelo................: ',entrada.modelo);
writeln ('> Preco de entrada......: ',entrada.preco_entrada);
writeln;
writeln ('- Dados da venda:');
writeln;
writeln ('> Data de venda.........: ',saida.data_venda);
writeln ('> Modo de pagamento.....: ',saida.modo_pag);
writeln ('> Preco de saida........: ',saida.preco_saida);
end;
end;
Procedure esc_reg_fich_saida(var fs:ficheiro_saida);
var num_biC,matricula:string; var sinalcliente,sinalmatricula:boolean; var certeza,fecho:char;
var fc:ficheiro_cliente; var fe:ficheiro_entrada; var ee:total_dados;
begin
sinalcliente := false;
sinalmatricula := false; 
clrscr;
writeln (' --------------------------------------');
writeln ('|     FAZER UMA VENDA AO CLIENTE     | ');
writeln (' --------------------------------------');
writeln;

write ('- Introduza o numero de contribuente do cliente: ');
readln (num_biC);

assign(fc,caminho_cliente);
reset(fc);

assign(fe,caminho_entrada);
reset(fe);

assign(fs,caminho_saida);
reset(fs);
seek(fs,filesize(fs)) ;

while not(eof(fc)) do
begin
read(fc,ee);
if (ee.cliente.num_biC = num_biC) and (ee.cliente.ativo_cliente = false) then
    begin
writeln;
writeln ('> Numero de contribuinte: ',ee.cliente.num_biC);     {Aparece sempre que foi registrado no mesmo cliente}
writeln ('> Nome..................: ',ee.cliente.nomeC);
writeln ('> Telemovel.............: ',ee.cliente.telemovelC);
writeln ('> E-mail................: ',ee.cliente.enderecoC);
writeln;
sinalcliente := true;
end;
end;

if (sinalcliente = false) then
begin
writeln;
writeln (' O cliente com o NIF ',num_biC,' nao existe no banco de dados.');
writeln (' Nao e possivel seguir com a venda.');
writeln;
end;

matricula := ee.entrada.matricula;
write ('- Introduza a matricula da viatura.............: ');
readln (matricula);

while not(eof(fe)) do
begin
read(fe,ee);
if (ee.entrada.matricula = matricula) and (ee.entrada.ativo_entrada = false) then
begin
    writeln;
    writeln ('> Matricula...........: ',ee.entrada.matricula);
    writeln ('> Marca...............: ',ee.entrada.marca);
writeln ('> Modelo..............: ',ee.entrada.modelo);
writeln ('> Preco de entrada....: ',ee.entrada.preco_entrada);
sinalmatricula := true;
end;
end;

if (sinalmatricula = false) then
begin
writeln;
writeln (' A matricula ',matricula,' nao existe no banco de dados.');
writeln (' Nao e possivel seguir com a venda.');
end;

if (sinalcliente = true) and (sinalmatricula = true) then
begin
writeln;
write ('Tem a certeza que deseja prosseguir a venda? S/N ');
readln (certeza);

    if (certeza = 's') or (certeza = 'S') then
begin
    ee.entrada.ativo_entrada := true;
    writeln;
    ler_saida(ee);
    write(fs,ee);
clrscr;
writeln (' --------------------------------');
writeln ('|         VENDA CONCLUIDA     |');
writeln (' --------------------------------');
writeln;
writeln ('>>> A matricula ',matricula,' foi vendida com sucesso ao cliente ',num_biC,' <<<');
end;

end;
close(fs);
end;
Procedure pesquisar_saida(var fs:ficheiro_saida);
var sinal:boolean; var pesq:string; var ee:total_dados;
begin
assign(fs,caminho_saida);
reset(fs);
sinal := false;
clrscr;
writeln (' ----------------------------');
writeln ('|     PESQUISAR VENDAS     |');
writeln (' ----------------------------');
writeln;

write ('> Introduza matricula que vendeu: ');
readln (pesq);

while not(eof(fs)) do
begin
read(fs,ee);
if (ee.entrada.matricula = pesq) and (ee.entrada.ativo_entrada = false) then
begin
writeln;
escrever_saida(ee);
sinal := true;
end;
end;

if sinal = false then
begin
writeln;
writeln('[ERRO] Nao existe nenhuma venda com essa matricula na base de dados.');
end;
close(fs);
end;

O que acontece é o seguinte:

  • Pesquiso a venda a partir da matrícula.
  • Não aparece a pesquisa, mas regista!

Espero que me ajudem pessoal!

Obrigado.

Editado por pwseo
Removido bbcode ([u] e [/u]) do código; syntax highlight.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.