Firewall Posted March 22, 2012 Report Share Posted March 22, 2012 olá,já estou praticamente enchendo aqui de tópicos 😕 mas, agora o @nunopicado, me acendeu a ideia de utilizar ficheiros,e começei a estudar. mas após ter declarado tudo normalmente ele, compila,mas não cria o ficheiro 😉 vou acabar passando tudo, pra ser mais façil entendimento. Program empresa; Uses crt, dos,sysutils; label MenuProg, RefazPorcentagem, MenuPrincipal, DesejaComprarCarro; type TTempo=record // Define-se um tipo de dados para a data e relogio chamado TTempo. data:record ano,mes,dia,dia_semana:word; end; relogio:record hora,minuto,segundo,centesimo_segundo:word end; end; tipo_reg = record modeloCar : string; anoCar : real; estoqueCar : real; precoCar : real; porcentagemCar : real; precoTotal : real; // valor Total do Carro , juntamente com a Porcentagem Tempo:TTempo; // Esta tem de ficar aqui, para ligar os dados da data e relogio ao registo de cada carro. end; //===========================[~Inicio Variaveis e Inicio Array de Registro~] var registro : array [1..250] of tipo_reg; // quantidade de carros que pode ser adicionados ( m ximo 250) i : integer; //==============================[~Cases Registro~]======================== refazerRegistro : char; // Para refazer o Cadastrou ou Novo Carro addCarSN : char; // quebrar ou nao quebra o ciclo for Q : real; //===========================[~Banner~]======================== BannerText:Array [0..5] of String; idx, ii: Integer; //====================================[~Refazer Porcentagem (CASE)~]========= refazerPorcentagem : char; //===============================[ Menus~]================================= nome : string; menuaddcarr : char; opcaoll : char; opcaol : char; opcaolll : char; opcaolllll : char; caseCompCar : char; //=============== ifs cases de edi‡Æo de dados dos automoveis============= confirEditModelo : char; repetirNome : char; //==================================+= confirEditanoCar : char; repetiranoCar : char; //==================================+= confirEditestoqueCar : char; repetirestoqueCar : char; //==================================+= confirEditprecoCar : char; repetirprecoCar : char; //==================================+= confirEditporcentagemCar : char; repetirporcentagemCar : char; //================================[~CONTADORES~]======================== j : integer; UltimoRegistroEfectuado : word; fich : text; //==================================[uSUARIO]================== dinheiro : real; //=============================[COMPRAR CARROS]================ caseeCompCar : char; quantAutoComp : real; verificaCompraCar: char; //===========================[Abre e Fecha case]=============== porta : real; //==================[~Cores em Procedure~] procedure corRed; begin textcolor(red); end; //=========================[cor preta]=========== procedure corPreto; begin textcolor(16); end; //===============================[[~.~Contantes~.~]]=================== Const MaxBanners=6; nome_fich = 'registro.txt'; //=================================================================== begin // corpo do programa i := 0; UltimoRegistroEfectuado := 1; MenuPrincipal: textbackground(15); textcolor(19); BannerText[0]:='VO€Ò SABIA? Que ao colocar numeros Negativos, o programa reinicia a ultima opera‡Æo?'; BannerText[1]:='!INFORMA€ÇO! Errou? NÆo se preocupe, h sempre op‡äes de restaura‡Æo ao seu alcan‡e'; BannerText[2]:='VO€Ò SABIA? Que poder diminuir manualmente, se necess rio o tanto de veiculos em seu estoque?'; BannerText[3]:='!INFORMA€ÇO! Ao comprar seu veiculo verifice se h dinheiro suficiente em sua Conta, para ser um processo r pido e pr tico em suas compras'; BannerText[4]:='!INFORMA€ÇO! HÆ NÆo! Esqueceu os veiculos que possui para venda? basta olhar na se‡Æo REVENDEDORA > VER CARROS ADICIONADOS!'; BannerText[5]:='!VO€Ò SABIA! Que poder testar a porcentagem ao seu gosto quantas vezes quiser e na hora que quiser? '; textcolor(16); Clrscr; repeat Randomize; idx:=Random(MaxBanners); // Gera um numero randomico de 0 a 5 clrscr; textcolor(16); writeln; writeln; writeln; writeln; WriteLN(' *********[ Seja Bem-Vindo(a) ]******* '); writeln(' *****[ Selecione a Op‡Æo Desejada! ]*****'); WriteLN; writeln('----------------------------------'); WriteLN(' !!!=> [1] Revendedora'); writeln('----------------------------------'); WriteLN(' !!!=> [2] Cliente'); writeln('----------------------------------'); WriteLN(' !!!=> [3] Sair do Programa'); writeln('----------------------------------'); WriteLN; Write (' =>'); writeln; writeln; writeln; writeln; textcolor(red); Writeln(BannerText[idx]); // Mostra o banner textcolor(16); gotoxy(4,16); ReadLN(opcaol); opcaol := upcase(opcaol); case opcaol of '1' :begin clrscr; textcolor(16); WriteLN(' ****************************************'); writeln(' ****** Selecione a Op‡Æo Desejada! *****'); writeln(' ****************************************'); WriteLN; writeln('-----------------------------------------------'); WriteLN(' !!!=> [4] Adicionar Um Novo Carro '); writeln('-----------------------------------------------'); WriteLN(' !!!=> [5] Ver Carros Adicionados! '); writeln('-----------------------------------------------'); WriteLN(' !!!=> [6] Diminuir Carros do Estoque! '); writeln('-----------------------------------------------'); writeLN; Write('=> '); opcaolllll := upcase(opcaolllll); Readln(opcaolllll); case opcaolllll of '4' :begin clrscr; //abre ficheiros assign(fich, nome_fich); rewrite(fich); reset(fich); //termina inicializa~]ao de ifchietos writeln; write('Atualmente, estÆo cadastrado '); corRed; write(i); corPreto; write(' Carros em seu Banco de Dados '); corRed; writeln; writeln; writeln; writeln('Deseja Realmente Cadastrar Novos Veiculos?'); corPreto; writeln('Digite [s] - Para Adicionar Novos Automoveis'); writeln('Digite [N] - Para Cancelar, e voltar para o Menu Principal'); menuaddcarr := upcase(menuaddcarr); readln(menuaddcarr); if (menuaddcarr = 's') then begin textbackground(15); for i:=UltimoRegistroEfectuado to 250 do begin repeat clrscr; corRed; writeln('REALIZANDO REGISTRO DE NUMERO ',i); corPreto; writeln; writeln('Nome do Automovel'); readln(registro[i].modeloCar); repeat if (registro[i].anoCar <= -1 ) then begin writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Ano do Automovel'); readln(registro[i].anoCar); until (registro[i].anoCar >= 0 ); // s¢ vai repetir se o anoCar For Menor que 0 ( ex: -1, -250) repeat if (registro[i].estoqueCar <= -1 ) then begin writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Informe a Quantidade de Carros Que Possui no Estoque'); readln(registro[i].estoqueCar); until (registro[i].estoqueCar >= 0); // s¢ vai repetir se o estoqueCar for menor que 0; repeat if (registro[i].precoCar <= -1 ) then begin writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Informe o Pre‡o unico destes Automoveis'); readln(registro[i].precoCar); until (registro[i].precoCar >= 0 ); // s¢ vai repetir se precoCar for menor que 0 repeat RefazPorcentagem: if (registro[i].porcentagemCar <= -1 ) then begin writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Informe a Porcentagem que Deseja Aumentar: '); readln(registro[i].porcentagemCar); until (registro[i].porcentagemCar >= 0); // s¢ vai repetir quando o porcentagemCar for menor que 0 registro[i].precoTotal := (registro[i].precoCar * (100 + registro[i].porcentagemCar) /100); //porcentagem clrscr; //limpa a tela writeln('-------------------------------------------------------------'); write('Pre‡o do automovel: '); corRed; write(registro[i].precoCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Porcentagem Informada: '); corRed; write(registro[i].porcentagemCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Valor Total do Carro(com Porcentagem): '); corRed; write(registro[i].precoTotal:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); writeln; writeln('Deseja Refazer a porcentagem?'); corRed; writeln('Digite [s] - Para Refazer o a Porcentagem'); writeln('Digite [N] - Para Continuar o Registro do Automovel'); corPreto; readln(refazerPorcentagem); refazerPorcentagem := upcase(refazerPorcentagem); if (refazerPorcentagem = 'S') then begin goto RefazPorcentagem; end; clrscr; //limpa tela writeln('-------------------------------------------------------------'); write('Nome do Automovel: '); corRed; write(registro[i].modeloCar); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Ano do Automovel: '); corRed; write(registro[i].anoCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Quantidade no Estoque: '); corRed; write(registro[i].estoqueCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Pre‡o do automovel: '); corRed; write(registro[i].precoCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Porcentagem Informada: '); corRed; write(registro[i].porcentagemCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Valor Total do Carro(com Porcentagem): '); corRed; write(registro[i].precoTotal:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); writeln; writeln('Deseja Refazer todos estes da dados?'); corRed; writeln('Digite [s] - Para Refazer Todos os Dados'); writeln('Digite [N] - Para Continuar Processo'); corPreto; readln(refazerRegistro); refazerRegistro := upcase(refazerRegistro); until (refazerRegistro = 'N'); begin with registro[i] do begin writeln(fich,'REGISTRO NUMERO'); writeln(fich,'Nome do Automovel: ',registro[i].modeloCar); writeln(fich,'Ano do Automovel: ',registro[i].anoCar); writeln(fich,'QTD No estoque: ',registro[i].estoqueCar); writeln(fich,'Pre‡o do Automovel: ',registro[i].precoCar); writeln(fich,'Porcentagem Informada: ',registro[i].porcentagemCar); end; end; clrscr; j := j+1; // contador faz com que acumule a quantidade de registros que foram efetuados com sucesso UltimoRegistroEfectuado := i + 1; // o ciclo ter depois de come‡ar no seguinte (i+1) e nÆo exatamente no ¡ndice onde parou with registro[i].Tempo.data,registro[i].Tempo.relogio DO begin gettime(hora,minuto,segundo,centesimo_segundo); // atribui os valores de relogio getdate(ano,mes,dia,dia_semana); // atribui os valores de data end; writeln('Deseja Adicionar um Novo automovel?'); corRed; writeln('Digite [s] - Para Adicionar um Novo Carro'); writeln('Digite [N] - Para Voltar ao Menu Principal'); corPreto; readln(addCarSN); addCarSN := upcase(addCarSN); if ( addCarSN = 'S') then begin end else begin break; //QUEBRA o ciclo FOR,e volta para o menu principal end; end; end; end; '5' :begin clrscr; for i:=1 to j do begin writeln; corRed; writeln('REGISTRO NUMERO: ',i); corPreto; writeln; write('Nome Automovel: '); corRed; write(registro[i].modeloCar); corPreto; writeln; write('Ano do Automovel: '); corRed; write(registro[i].anoCar:1:0); corPreto; writeln; write('Quantidade no estoque: '); corRed; write(registro[i].estoqueCar:1:0); corPreto; writeln; write('Pre‡o Automovel: '); corRed; write(registro[i].precoCar:1:0); corPreto; writeln; write('Porcentagem Informada: '); corRed; write(registro[i].porcentagemCar:1:0); corPreto; writeln; write('Valor Total do Automovel: '); corRed; write(registro[i].precoTotal:1:0); corPreto; writeln; write('Data/Hora:'); corRed; with registro[i].Tempo.data,registro[i].Tempo.relogio do write(ano,'-',mes,'-',dia,' - ',hora,':',minuto,':',segundo,'.',centesimo_segundo); corPreto; writeln; writeln; readln; end; end; '6' :begin repeat clrscr; if ( i <= -1 ) then begin writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Informe o "NUMERO DE REGISTRO do Automovel Que Deseja Editar!'); readln(i); until (i > 0); clrscr; corRed; writeln('REGISTRO NUMERO: ',i); corPreto; writeln('Nome Automovel: ',registro[i].modeloCar); writeln('Ano do Automovel: ',registro[i].anoCar:1:0); writeln('Quantidade no estoque: ',registro[i].estoqueCar:1:0); writeln('Pre‡o Automovel: ',registro[i].precoCar:1:0); writeln('Porcentagem Informada: ',registro[i].porcentagemCar:1:0); writeln('Valor Total do Automovel: ',registro[i].precoTotal:1:0); writeln; writeln; writeln; corPreto; WriteLN(' ****************************************'); writeln(' ****** Selecione a Op‡Æo Desejada! *****'); writeln(' ****************************************'); writeln('--------------------------------------------------------'); Writeln(' !!!=> [1] Editar Nome do Automovel'); writeln('--------------------------------------------------------'); Writeln(' !!!=> [2] Editar Ano do Automovel'); writeln('--------------------------------------------------------'); WriteLN(' !!!=> [3] Editar Estoque do Automovel'); writeln('--------------------------------------------------------'); WriteLN(' !!!=> [4] Editar Pre‡o & Porcentagem do Automovel'); writeln('--------------------------------------------------------'); write (' =>'); readLN(opcaolll); opcaolll := upcase(opcaolll); case opcaolll of '1' :begin clrscr; writeln; corPreto; write('Nome Atual do Automovel: '); corRed; write(registro[i].modeloCar); corPreto; writeln; writeln; corRed; writeln('Certeza que Deseja Editar o Nome Deste automovel?'); corPreto; writeln('Digite [s] - Para Editar o Nome do automovel'); writeln('Digite [N] - Para Cancelar a Opera‡Æo'); readln(confirEditModelo); confirEditModelo := upcase(confirEditModelo); if (confirEditModelo = 'S') then begin repeat clrscr; writeln('Informe o Novo Nome do Automovel'); readln(registro[i].modeloCar); clrscr; writeln; corPreto; write('Novo nome do Automovel: '); corRed; write(registro[i].modeloCar); corPreto; writeln; writeln; corRed; writeln('Deseja Refazer o Nome do Automovel?'); corPreto; writeln('Digite [s] - Para Refazer o Nome'); writeln('Digite [N] - Para Confirmar o Novo Nome do Automovel'); readln(repetirNome); repetirNome := upcase(repetirNome); until ( repetirNome = 'N'); end else begin goto MenuPrincipal; // D um Pulo para o Menu Principal end; end; '2' :begin clrscr; writeln; corPreto; write('Ano Atual do Automovel: '); corRed; write(registro[i].anoCar:1:0); corPreto; writeln; writeln; corRed; writeln('Certeza que Deseja Editar o Ano Deste automovel?'); corPreto; writeln('Digite [s] - Para Editar o Ano do automovel'); writeln('Digite [N] - Para Cancelar a Opera‡Æo'); readln(confirEditanoCar); confirEditanoCar := upcase(confirEditanoCar); if (confirEditanoCar = 'S') then begin repeat clrscr; writeln('Informe o Novo Ano do Automovel'); readln(registro[i].anoCar); clrscr; writeln; corPreto; write('Novo Ano do Automovel: '); corRed; write(registro[i].anoCar:1:0); corPreto; writeln; writeln; corRed; writeln('Deseja Refazer o Ano do Automovel?'); corPreto; writeln('Digite [s] - Para Refazer o Ano'); writeln('Digite [N] - Para Confirmar o Novo Ano do Automovel'); readln(repetiranoCar); repetiranoCar := upcase(repetiranoCar); until ( repetiranoCar = 'N'); end else begin goto MenuPrincipal; // D um Pulo para o Menu Principal end; end; '3' :begin clrscr; writeln; corPreto; write('Estoque Atual do Automovel: '); corRed; write(registro[i].estoqueCar:1:0); corPreto; writeln; writeln; corRed; writeln('Certeza que Deseja Editar o Estoque Deste automovel?'); corPreto; writeln('Digite [s] - Para Editar o Estoque do automovel'); writeln('Digite [N] - Para Cancelar a Opera‡Æo'); readln(confirEditestoqueCar); confirEditestoqueCar := upcase(confirEditestoqueCar); if (confirEditestoqueCar = 'S') then begin repeat clrscr; writeln('Informe o Novo Estoque do Automovel'); readln(registro[i].estoqueCar); clrscr; writeln; corPreto; write('Novo Estoque do Automovel: '); corRed; write(registro[i].estoqueCar:1:0); corPreto; writeln; writeln; corRed; writeln('Deseja Refazer o Estoque do Automovel?'); corPreto; writeln('Digite [s] - Para Refazer o Estoque'); writeln('Digite [N] - Para Confirmar o Novo Estoque do Automovel'); readln(repetirestoqueCar); repetirestoqueCar := upcase(repetirestoqueCar); until ( repetirestoqueCar = 'N'); end else begin goto MenuPrincipal; // D um Pulo para o Menu Principal end; end; '4' :begin clrscr; writeln; corPreto; write('Pre‡o Atual do Automovel: '); corRed; write(registro[i].precoCar:1:0); corPreto; writeln; corPreto; write('Porcentagem Atual do Automovel: '); corRed; write(registro[i].porcentagemCar:1:0); corPreto; writeln; writeln; corRed; writeln('Certeza que Deseja Editar o Pre‡o e Porcentagem Deste Automovel?'); corPreto; writeln('Digite [s] - Para Editar o Pre‡o e Porcentagem do automovel'); writeln('Digite [N] - Para Cancelar a Opera‡Æo'); readln(confirEditporcentagemCar); confirEditporcentagemCar := upcase(confirEditporcentagemCar); clrscr; if (confirEditporcentagemCar = 'S') then begin repeat repeat if (registro[i].precoCar <= -1 ) then begin clrscr; writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Informe o Pre‡o deste Automoveis'); readln(registro[i].precoCar); until (registro[i].precoCar >= 0 ); // s¢ vai repetir se precoCar for menor que 0 repeat if (registro[i].porcentagemCar <= -1 ) then begin writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Informe a Porcentagem que Deseja Aumentar: '); readln(registro[i].porcentagemCar); until (registro[i].porcentagemCar >= 0); // s¢ vai repetir quando o porcentagemCar for menor que 0 registro[i].precoTotal := (registro[i].precoCar * (100 + registro[i].porcentagemCar) /100); //porcentagem clrscr; writeln; corPreto; write('Pre‡o Atual do Automovel: '); corRed; write(registro[i].precoCar:1:0); corPreto; writeln; corPreto; write('Porcentagem Atual do Automovel: '); corRed; write(registro[i].porcentagemCar:1:0); corPreto; writeln; writeln; writeln; corRed; writeln('Deseja Refazer o Pre‡o e a Porcentagem do Automovel?'); corPreto; writeln('Digite [s] - Para Refazer o Pre‡o e a Porcentagem'); writeln('Digite [N] - Para Confirmar o Novo Pre‡o e a Porcentagem do Automovel'); readln(repetirprecoCar); repetirprecoCar := upcase(repetirprecoCar); until ( repetirprecoCar = 'N'); end else begin goto MenuPrincipal; // D um Pulo para o Menu Principal end; end; end; {'5' :begin clrscr; writeln; corPreto; write('Porcentagem Atual do Automovel: '); corRed; write(registro[i].porcentagemCar:1:0); corPreto; writeln; writeln; corRed; writeln('Certeza que Deseja Editar a Porcentagem Deste Automovel?'); corPreto; writeln('Digite [s] - Para Editar a Porcentagem do automovel'); writeln('Digite [N] - Para Cancelar a Opera‡Æo'); readln(confirEditporcentagemCar); confirEditporcentagemCar := upcase(confirEditporcentagemCar); if (confirEditporcentagemCar = 'S') then begin repeat clrscr; writeln('Informe a Nova Porcentagem do Automovel'); readln(registro[i].porcentagemCar); registro[i].precoTotal := (registro[i].precoCar * (100 + registro[i].porcentagemCar) /100); //porcentagem clrscr; writeln; corPreto; write('Nova Porcentagem do Automovel: '); corRed; write(registro[i].porcentagemCar:1:0); corPreto; writeln; writeln; corRed; writeln('Deseja Refazer a Porcentagem do Automovel?'); corPreto; writeln('Digite [s] - Para Refazer a Porcentagem'); writeln('Digite [N] - Para Confirmar a Nova Porcentagem do Automovel'); readln(repetirporcentagemCar); repetirporcentagemCar := upcase(repetirporcentagemCar); until ( repetirporcentagemCar = 'N'); end else begin goto MenuPrincipal; // D um Pulo para o Menu Principal end; end; } end; end; end; end; '2' :begin clrscr; textcolor(16); WriteLN(' ****************************************'); writeln(' ****** Selecione a Op‡Æo Desejada! *****'); writeln(' ****************************************'); WriteLN; writeln('-----------------------------------------------'); WriteLN(' !!!=> [7] Ver Tabelas dos Carros! '); writeln('-----------------------------------------------'); WriteLN(' !!!=> [8] Efetuar Compra de um Automovel! '); writeln('-----------------------------------------------'); WriteLN(' !!!=> [9] Adicionar Dinheiro a Sua Conta! '); writeln('-----------------------------------------------'); WriteLN; Write (' =>'); writeln; writeln; write('Atualmente vo‡ˆ Possui: '); //write(dinheiro:1:0); write(' Reais, em Sua Conta'); gotoxy(4,13); ReadLN(opcaoll); opcaoll := upcase(opcaoll); writeln; writeln; case opcaoll of '7' :begin clrscr; for i:=1 to j do begin writeln; corRed; writeln('REGISTRO NUMERO: ',i); corPreto; writeln; write('Nome Automovel: '); corRed; write(registro[i].modeloCar); corPreto; writeln; write('Ano do Automovel: '); corRed; write(registro[i].anoCar:1:0); corPreto; writeln; write('Quantidade no estoque: '); corRed; write(registro[i].estoqueCar:1:0); corPreto; writeln; write('Pre‡o Automovel: '); corRed; write(registro[i].precoCar:1:0); corPreto; writeln; write('Porcentagem Informada: '); corRed; write(registro[i].porcentagemCar:1:0); corPreto; writeln; write('Valor Total do Automovel: '); corRed; write(registro[i].precoTotal:1:0); corPreto; writeln; write('Data/Hora:'); corRed; with registro[i].Tempo.data,registro[i].Tempo.relogio do write(ano,'-',mes,'-',dia,' - ',hora,':',minuto,':',segundo,'.',centesimo_segundo); corPreto; writeln; writeln; readln; end; end; '8' :begin DesejaComprarCarro: clrscr; corRed; writeln('Informe o "NUMERO DE REGISTRO do Automovel Que Deseja Comprar!'); readln(i); clrscr; corRed; writeln('REGISTRO NUMERO: ',i); corPreto; writeln('Nome Automovel: ',registro[i].modeloCar); writeln('Ano do Automovel: ',registro[i].anoCar:1:0); writeln('Quantidade no estoque: ',registro[i].estoqueCar:1:0); writeln('Pre‡o Automovel: ',registro[i].precoCar:1:0); writeln('Porcentagem Informada: ',registro[i].porcentagemCar:1:0); writeln('Valor Total do Automovel: ',registro[i].precoTotal:1:0); writeln; writeln; writeln; writeln('Deseja Comprar Quantos Veiculos?'); readln(quantAutoComp); if (quantAutoComp <= registro[i].estoqueCar) then begin //COMANDO ( nÆo h necessidade, nÆo economizei begin , caso eventualmente seja necess rio modifica‡äes end else begin clrscr; corRed; writeln('Desculpe-nos, mas o Valor Informado ‚ Maior doque a Empresa Possui no Estoque'); corPreto; writeln; writeln; corRed; writeln('Deseja Editar o Tanto de Carros Que ir para Compra?'); corPreto; writeln('Digite [s] - Para Editar a Quantidade de Carros que ir Comprar'); writeln('Digite [N] - Para Cancelar a Compra & Voltar Para o Menu Principal'); readln(verificaCompraCar); verificaCompraCar := upcase(verificaCompraCar); if (verificaCompraCar = 'S') then begin goto DesejaComprarCarro; end else begin goto MenuPrincipal; end; end; clrscr; corRed; writeln('Deseja Realmente Comprar Este Veiculo?'); corPreto; writeln('Digite [s] - Para Comprar Este Veiculo'); writeln('Digite [N] - Para Cancelar a Compra & Voltar Para o Menu Principal'); readln(caseeCompCar); caseeCompCar := upcase(caseeCompCar); clrscr; // limpa a tela para conomizar 2 clrscr nos 2 begins if (caseeCompCar = 'S') then begin writeln('Verificando se h Dinheiro Suficiente em Sua Conta Bancaria...'); delay(3000); if (dinheiro >= registro[i].precoTotal) then begin writeln('A Compra do Carro foi Efetuada com Sucesso'); registro[i].estoqueCar := (registro[i].estoqueCar - 1); end else begin corRed; writeln('Desculpe-nos, Mas nÆo h Dinheiro Suficiente em sua Conta Bancaria'); corPreto; delay(2800); goto MenuPrincipal; end; end else begin goto MenuPrincipal; end; end; '9' :begin //COMANDO end; end; end; '3' :begin clrscr; textcolor(16); close(fich); WriteLN('Encerrando Sistema...!'); delay(3000); end; end; {fim case} writeln; textcolor(16); Write (' ...Pressione qualquer tecla para continuar... '); ReadLN; Until opcaol= '3'; end. e estava querendo que salva-se no ficheiro assim: writeln('REGISTRO NUMERO: ',i); corPreto; writeln; write('Nome Automovel: '); corRed; write(registro[i].modeloCar); corPreto; writeln; write('Ano do Automovel: '); corRed; write(registro[i].anoCar:1:0); corPreto; writeln; write('Quantidade no estoque: '); corRed; write(registro[i].estoqueCar:1:0); corPreto; writeln; write('Pre‡o Automovel: '); corRed; write(registro[i].precoCar:1:0); corPreto; writeln; write('Porcentagem Informada: '); corRed; write(registro[i].porcentagemCar:1:0); corPreto; writeln; write('Valor Total do Automovel: '); corRed; write(registro[i].precoTotal:1:0); corPreto; writeln; write('Data/Hora:'); corRed; with registro[i].Tempo.data,registro[i].Tempo.relogio do write(ano,'-',mes,'-',dia,' - ',hora,':',minuto,':',segundo,'.',centesimo_segundo); corPreto; writeln; que mostra-se o nome,o ano,quantidade no estoque e assim vai... como podem ver já fiz o with...mas não sei se ele é funcional(pelo menos ,não acusou erros) begin with registro[i] do begin writeln(fich,'REGISTRO NUMERO'); writeln(fich,'Nome do Automovel: ',registro[i].modeloCar); writeln(fich,'Ano do Automovel: ',registro[i].anoCar); writeln(fich,'QTD No estoque: ',registro[i].estoqueCar); writeln(fich,'Pre‡o do Automovel: ',registro[i].precoCar); writeln(fich,'Porcentagem Informada: ',registro[i].porcentagemCar); end; end; isso foi a base aind afçata a data,hora,preço total, etc... Link to comment Share on other sites More sharing options...
pwseo Posted March 22, 2012 Report Share Posted March 22, 2012 Firewall, O teu problema de escrita para o ficheiro é o seguinte: rewrite(fich); // abrir em modo de escrita (limpando tudo o que o ficheiro tivesse) reset(fich); // voltar a abrir em modo de leitura, obviamente sem poder escrever nada no ficheiro (ou seja, retira a linha que faz reset(fich)) Quanto à tua utilização do with, lembra-te que a sua utilização é para te dispensar a escrita do mesmo identificador várias vezes... Assim: // "Errado" with registro[i] do begin writeln(fich,'REGISTRO NUMERO'); writeln(fich,'Nome do Automovel: ',registro[i].modeloCar); writeln(fich,'Ano do Automovel: ',registro[i].anoCar); // ... end; // Correcto with registro[i] do begin writeln(fich,'REGISTRO NUMERO'); writeln(fich,'Nome do Automovel: ', modeloCar); writeln(fich,'Ano do Automovel: ', anoCar); // ... end; Adenda: Seria bonito separar este programa em diversas funções/procedimentos diferentes, uma vez que tal como está é uma grande massa monolítica de código que se torna difícil de compreender. Link to comment Share on other sites More sharing options...
Firewall Posted March 22, 2012 Author Report Share Posted March 22, 2012 @pedro-kun poxa, eu já havia feito isto e mesmo assim, não funcionou,e refiz denovo, conforme você, informou, e ainda,não é criado o ficheiro; ou seja, não acho ele, na pasta. e ainda, o programa, depois de ter fechado e abrido, os registros que foram efectuados, não estão salvos 😉 Adenda: Seria bonito separar este programa em diversas funções/procedimentos diferentes, uma vez que tal como está é uma grande massa monolítica de código que se torna difícil de compreender. Odeio, mecher com procedures, enquanto faço o código, é muito façil eu entrar em um ciclo infinito, por isto faço no final 🙂 Link to comment Share on other sites More sharing options...
pwseo Posted March 22, 2012 Report Share Posted March 22, 2012 Firewall, Eu guardei o código tal como o escreveste e retirei apenas a linha que dizia "reset(fich);" e tentei adicionar um carro. No final, lá estava um ficheiro "registro.txt" com os dados que introduzi. Uma chamada de atenção, no entanto, sempre que se dá a instrução "rewrite(fich);" o ficheiro é reescrito (ou seja, perde tudo o que continha antes), sendo portanto natural que fique no ficheiro apenas o último registo. Ou então não estou a perceber bem a dúvida. Link to comment Share on other sites More sharing options...
Firewall Posted March 22, 2012 Author Report Share Posted March 22, 2012 o meu windows 7, não deixava criar o arquivo, porque eu estava crianod dentro da pasta C;/ kkk 😁 mas agora, quando eu vou criar 1 segundo carro, aparentemente dá um bug, fica piscando o cursor em um monte de locais. e não sai disto; Link to comment Share on other sites More sharing options...
nunopicado Posted March 22, 2012 Report Share Posted March 22, 2012 Ora então vamos lá ver estas duvidas! 😁 Antes de começar, Firewall, só um aparte: Procura perceber melhor o funcionamento dos procedimentos e funções. Assim que o faças, não terá segredo nenhum o seu uso, e muito pelo contrário, vai-te facilitar imenso a vida. Vamos aos ficheiros. O teu problema é, para começar, o uso dos comandos de ficheiros. Vejamos: Rewrite - Cria um novo ficheiro e deixa-o aberto para escrita Reset - Abre um ficheiro existente e deixa-o aberto para leitura/escrita Write - Guarda dados no ficheiro (temporário, não os grava realmente, enquanto o ficheiro não for fechado) Read - Le dados de um ficheiro Close - Fecha o ficheiro, guardando as alterações que foram feitas pelo write Ora, o que tu estás a fazer é: - Cria o ficheiro - Abre para leitura/escrita - Escreve dados (memoria temporaria) - Fecha e guarda Em teoria isto estaria certo, mas como tens o close dentro de uma estrutura de controle (case), há risco de nunca chegar a ser feito. De qualquer maneira, mesmo que o seja, não tens garantias de que o ficheiro esteja correctamente aberto, pois não fazes nenhum controle na abertura. Outra coisa que estás a fazer, que não estando mal, é uma autentica dor de cabeça se depois quiseres ler os dados para o registo outra vez, é trabalhar com ficheiros de texto. Se não tivesses nenhuma outra estrutura, lá teria de ser, mas tu estás a trabalhar com uma estrutura unificada, que te mantém os dados todos organizados: O Record Mais uma: Até agora tens trabalhado com um array para poderes guardar mais do que um carro. Ora, a partir do momento que uses ficheiros, não precisas disso, porque os dados são guardados directamente no disco. Seguem portanto algumas dicas para converteres o teu programa para ficheiros correctamente: Utilização de ficheiros: A primeira coisa que tens de fazer é, claro, definir a variável de ficheiro, e o seu tipo. /===========================[~Inicio Variaveis e Inicio Array de Registro~] var registro : tipo_reg; // esta deixou de ser um array, pois a memorização dos dados será nos ficheiros. Deixas de estar limitado a 250 Fich: File of tipo_reg; // O teu ficheiro será do mesmo tipo da variável registo i : integer; //==============================[~Cases Registro~]======================== refazerRegistro : char; // Para refazer o Cadastrou ou Novo Carro addCarSN : char; // quebrar ou nao quebra o ciclo for Q : real; . . . De seguida, logo no inicio do programa, antes de qualquer outro procedimento, deverás certificar-te que tens o ficheiro disponivel: . . begin Assign(fich,ExtractFilePath(ParamStr(0))+'\'+nome_fich); // com isto, o ficheiro ficará localizado no mesmo caminho do teu programa {$i-} // Desactiva o controle de erros do Pascal, para que possas fazer o teu proprio controle Reset(fich); // Tenta abrir o ficheiro para leitura/escrita - Caso o ficheiro já exista, não queres apaga-lo ao iniciar o programa {$i+} // Já se pode reactivar o controle de erros do Pascal if IOResult<>0 then ReWrite(fich); // Se não conseguiu abrir é que deve criar um novo (Se IOResult for 0, não houve erro) Close(fich); // O ficheiro está preparado, podemos fecha-lo por agora. . . . Este primeiro bloco vai certificar que o ficheiro está pronto. Ele tenta abrir o ficheiro, porque caso já exista, vais querer ler o que lá está sem o apagar. Se não conseguir é que cria um novo. No fim fecha. Regra de ouro, nunca deixar o ficheiro aberto por muito tempo. 🙂 A partir daqui, a regra que podes usar é: - De cada vez que inicias um bloco onde vás usar o ficheiro, fazes um Reset (fich); e de cada vez que o termines, fazes um Close(fich); Se trabalhares com procedimentos podes colocar o reset no inicio do procedimento e o close no final. Se não os usares, podes meter o reset antes do primeiro write ou read que uses, e o close logo a seguir ao ultimo. Arrumada esta parte, como é a gravação e leitura dos dados. Como o ficheiro agora é do tipo da tua variável, nada mais simples: . . write(fich,registo); // Isto grava no ficheiro todo o registo do carro. Todos os dados que tiveres colocado na variavel registo serão guardados. . . read(fich,registo); // E isto irá ler todos os dados de um carro para a variável registo. Sempre certinho, sem misturar informações . . Com isto, já só te falta saber como definir a localização do ficheiro. Imagina isto: | 0 | 1 | 2 | 3 | 4 | 5 | Temos aqui um ficheiro com 6 posições. As posições dos ficheiros começam sempre em 0. Em cada uma destas posições é gravado todo o teu registo. Ou seja, neste ficheiro, terias toda a informação de 6 carros. Funciona um pouco como o array, em que escolhendo a posição, tinhas o registo completo. Nos ficheiros, para escolheres a posição, usas o comando Seek. seek(fich,3); // isto irá posicionar o ficheiro na 4ª posição (lembro que começa em 0) read(fich,registo); // Irá preencher a variável registo com os dados do 4º carro. Isto serve-te para ler. Para criares um novo, basta posicionar o ficheiro na posição seguinte à ultima: seek(fich,Filesize(fich)); // Filesize retorna quantas posições tem um ficheiro. Neste caso restornaria 6, que é também o nº da nova posição write(fich,registo); // Irá gravar os dados da variável registo no ficheiro, numa nova posição. Claro que também podias reescrever um carro (para o alterar por exemplo), posicionando o ficheiro no sitio certo: seek(fich,2); // Posiciona o ficheiro na 3ª posição write(fich,registo); // Irá gravar os dados da variável registo no ficheiro, na 3ª posição Por fim, para te movimentares pelo ficheiro todo, por exemplo para o ler, podes usar a mesma função que se usa para posicionar na nova posição: for i:=0 to filesize(fich)-1 do // tem de ser -1 porque começa em 0 (6 posições = 0 a 5 begin seek(fich,i); read(fich,registo); . . end; Dúvidas? 🙂 😉 "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
Firewall Posted March 22, 2012 Author Report Share Posted March 22, 2012 @nunopicado acabei de chegar da escola,agora voltando para o programa. Poxa, vi que tu gastares uma boa parte de seu tempo fazendo isto. ahahah, agora eu aprendo ou aprendo. 😉 Gostei bastante de suas colocações, mas não entendi umas coisas. A primeira coisa que tens de fazer é, claro, definir a variável de ficheiro, e o seu tipo.: seria +/- assim? type TTempo=record // Define-se um tipo de dados para a data e relogio chamado TTempo. data:record ano,mes,dia,dia_semana:word; end; relogio:record hora,minuto,segundo,centesimo_segundo:word end; end; tipo_reg = record modeloCar : string; anoCar : real; estoqueCar : real; precoCar : real; porcentagemCar : real; precoTotal : real; // valor Total do Carro , juntamente com a Porcentagem Tempo:TTempo; // Esta tem de ficar aqui, para ligar os dados da data e relogio ao registo de cada carro. end; //===========================[~Inicio Variaveis e Inicio Array de Registro~] var registro : tipo_reg; // esta deixou de ser um array, pois a memorização dos dados será nos ficheiros. Deixas de estar limitado a 250 Fich: File of tipo_reg; // O teu ficheiro será do mesmo tipo da variável registo i : integer; //==============================[~Cases Registro~]======================== refazerRegistro : char; // Para refazer o Cadastrou ou Novo Carro addCarSN : char; // quebrar ou nao quebra o ciclo for Q : real; //===========================[~Banner~]======================== BannerText:Array [0..5] of String; idx, ii: Integer; //====================================[~Refazer Porcentagem (CASE)~]========= refazerPorcentagem : char; //===============================[ Menus~]================================= nome : string; menuaddcarr : char; opcaoll : char; opcaol : char; opcaolll : char; opcaolllll : char; caseCompCar : char; //=============== ifs cases de edi‡Æo de dados dos automoveis============= confirEditModelo : char; repetirNome : char; //==================================+= confirEditanoCar : char; repetiranoCar : char; //==================================+= confirEditestoqueCar : char; repetirestoqueCar : char; //==================================+= confirEditprecoCar : char; repetirprecoCar : char; //==================================+= confirEditporcentagemCar : char; repetirporcentagemCar : char; //================================[~CONTADORES~]======================== j : integer; UltimoRegistroEfectuado : word; fich : text; //==================================[uSUARIO]================== dinheiro : real; . . . begin // corpo do programa . . . Bem, não entendi como irei registrar um carro, poderias fazer um modelo de exemplo,achei meio confuso. por enquanto só,vamos resolver parte por parte 😉 Link to comment Share on other sites More sharing options...
nunopicado Posted March 22, 2012 Report Share Posted March 22, 2012 Sim, é assim mesmo que defines a variável. Para gravares um carro, seria algo assim: (esta é a tua opção 4 do case, com as alterações necessárias) '4' :begin clrscr; // Sai daqui a inicialização do ficheiro - essa deve ficar no inicio do programa writeln; write('Atualmente, estÆo cadastrado '); corRed; write(i); corPreto; write(' Carros em seu Banco de Dados '); corRed; writeln; writeln; writeln; writeln('Deseja Realmente Cadastrar Novos Veiculos?'); corPreto; writeln('Digite [s] - Para Adicionar Novos Automoveis'); writeln('Digite [N] - Para Cancelar, e voltar para o Menu Principal'); menuaddcarr := upcase(menuaddcarr); readln(menuaddcarr); if (menuaddcarr = 's') then begin textbackground(15); reset(fich); // Abre o ficheiro repeat // este repeat substitui o teu antigo FOR repeat clrscr; corRed; writeln('REALIZANDO REGISTRO DE NUMERO ',i); corPreto; writeln; writeln('Nome do Automovel'); readln(registro.modeloCar); repeat if (registro.anoCar <= -1 ) then begin writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Ano do Automovel'); readln(registro.anoCar); until (registro.anoCar >= 0 ); // s¢ vai repetir se o anoCar For Menor que 0 ( ex: -1, -250) repeat if (registro.estoqueCar <= -1 ) then begin writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Informe a Quantidade de Carros Que Possui no Estoque'); readln(registro.estoqueCar); until (registro.estoqueCar >= 0); // s¢ vai repetir se o estoqueCar for menor que 0; repeat if (registro.precoCar <= -1 ) then begin writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Informe o Pre‡o unico destes Automoveis'); readln(registro.precoCar); until (registro.precoCar >= 0 ); // s¢ vai repetir se precoCar for menor que 0 repeat RefazPorcentagem: if (registro.porcentagemCar <= -1 ) then begin writeln; corRed; writeln('PorFavor, Informe Apenas Numeros Positivos'); corPreto; end; writeln('Informe a Porcentagem que Deseja Aumentar: '); readln(registro.porcentagemCar); until (registro.porcentagemCar >= 0); // s¢ vai repetir quando o porcentagemCar for menor que 0 registro.precoTotal := (registro.precoCar * (100 + registro.porcentagemCar) /100); //porcentagem clrscr; //limpa a tela writeln('-------------------------------------------------------------'); write('Pre‡o do automovel: '); corRed; write(registro.precoCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Porcentagem Informada: '); corRed; write(registro.porcentagemCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Valor Total do Carro(com Porcentagem): '); corRed; write(registro.precoTotal:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); writeln; writeln('Deseja Refazer a porcentagem?'); corRed; writeln('Digite [s] - Para Refazer o a Porcentagem'); writeln('Digite [N] - Para Continuar o Registro do Automovel'); corPreto; readln(refazerPorcentagem); refazerPorcentagem := upcase(refazerPorcentagem); if (refazerPorcentagem = 'S') then begin goto RefazPorcentagem; end; clrscr; //limpa tela writeln('-------------------------------------------------------------'); write('Nome do Automovel: '); corRed; write(registro.modeloCar); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Ano do Automovel: '); corRed; write(registro.anoCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Quantidade no Estoque: '); corRed; write(registro.estoqueCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Pre‡o do automovel: '); corRed; write(registro.precoCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Porcentagem Informada: '); corRed; write(registro.porcentagemCar:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); write('Valor Total do Carro(com Porcentagem): '); corRed; write(registro.precoTotal:1:0); corPreto; writeln; writeln('-------------------------------------------------------------'); writeln; writeln('Deseja Refazer todos estes da dados?'); corRed; writeln('Digite [s] - Para Refazer Todos os Dados'); writeln('Digite [N] - Para Continuar Processo'); corPreto; readln(refazerRegistro); refazerRegistro := upcase(refazerRegistro); until (refazerRegistro = 'N'); clrscr; // Daqui saiem os contadores de registos, já não fazem falta with registro.Tempo.data,registro.Tempo.relogio DO begin gettime(hora,minuto,segundo,centesimo_segundo); // atribui os valores de relogio getdate(ano,mes,dia,dia_semana); // atribui os valores de data end; seek(fich,filesize(fich)); // Posiciona o ficheiro a seguir à ultima posição write(fich,registro); // grava os dados na memoria temporaria do ficheiro writeln('Deseja Adicionar um Novo automovel?'); corRed; writeln('Digite [s] - Para Adicionar um Novo Carro'); writeln('Digite [N] - Para Voltar ao Menu Principal'); corPreto; readln(addCarSN); addCarSN := upcase(addCarSN); until addCarSN = 'N'; // vai repetir o processo até se dizer que não quer inserir mais nenhum close(fich); // Grava os dados temporarios para o ficheiro e fecha-o end; end; Se tiveres duvida, avisa... "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
Firewall Posted March 23, 2012 Author Report Share Posted March 23, 2012 Por fim, para te movimentares pelo ficheiro todo, por exemplo para o ler, podes usar a mesma função que se usa para posicionar na nova posição: for i:=0 to filesize(fich)-1 do // tem de ser -1 porque começa em 0 (6 posições = 0 a 5 begin seek(fich,i); read(fich,registo); . . end; aqui no Free Pascal, acusa erro na hora de visualizar os carros adicionados =/ porque será? Link to comment Share on other sites More sharing options...
nunopicado Posted March 23, 2012 Report Share Posted March 23, 2012 Puseste o Reset antes de ler e o close depois? "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
Firewall Posted March 23, 2012 Author Report Share Posted March 23, 2012 Sim; for i:=0 to filesize(fich)-1 do // tem de ser -1 porque começa em 0 (6 posições = 0 a 5 begin reset(fich); seek(fich,i); read(fich,registo); close(fich); end; Link to comment Share on other sites More sharing options...
nunopicado Posted March 23, 2012 Report Share Posted March 23, 2012 Está aí o problema... O reset tem de ser metido antes da primeira função que use o ficheiro (neste caso é o filesize) e o close no fim de todas as operações do ficheiro. Ou seja, não podem nunca estar dentro do ciclo. reset(fich); for i:=0 to filesize(fich)-1 do // tem de ser -1 porque começa em 0 (6 posições = 0 a 5 begin seek(fich,i); read(fich,registo); // não te esqueças de fazer aqui o que quiseres com os teus dados. Por exemplo: with registro do begin Writeln('Modelo: ',ModeloCar); Writeln('Ano: ',Ano); ... Writeln('Preço: ',precoCar:4:2); // Este bloco faz uma pausa Write('Qualquer tecla para ver o próximo carro...'); readkey; clrscr; end; close(fich); Assim, o processo será: - Abre o ficheiro, - Entre num ciclo que percorre todos os registos - Posiciona-se no primeiro registo - Le o registo do ficheiro - Mostra os dados do registo no ecrã - Faz uma pausa à espera que o utilizador carregue uma tecla - Posiciona-se no segundo registo - Le o registo... . . . . Até chegar ao fim do ficheiro... "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
Firewall Posted March 23, 2012 Author Report Share Posted March 23, 2012 Opa, sim agora deu certo mas não estou conseguindo fazer algumas coisinhas. exemplo: quando eu vou ver os automóveis, só aparece o Registro 0, e quando adiciono mais algum, continua só mostrando o registro de numero 0. e como eu iria fazer para só registrar, o carro aonde parou, exemplo: agora eu registrei o carro de numero 200, e quando eu volta-se denovo, registra-se de numero 201 obs: -não dá para utilizar o vetor i, se não iremos acabar fazendo loop, - se usar outra variavel, teria que fazer ela receber os dados de i Link to comment Share on other sites More sharing options...
nunopicado Posted March 23, 2012 Report Share Posted March 23, 2012 Como estás a trabalhar com ficheiros, não precisas de te preocupar com essa variável. Para criar um novo, basta-te usar o tamanho do ficheiro para saberes qual vai ser o próximo nº . . reset(fich); // lembra-te que o reset tem de ficar sempre antes da primeira instrução que uses de ficheiros writeln('Vai adicionar o carro nº ',filesize(fich)+1); // se o ficheiro tiver 6 carros, vais querer adicionar o 7º. Filesize(fich)+1 irá dar o nº do proximo carro . . E para ler, mostras a mesma variável que estás a usar no comando seek, com o +1 à frente: reset(fich); for i:=0 to filesize(fich)-1 do // tem de ser -1 porque começa em 0 (6 posições = 0 a 5 begin seek(fich,i); read(fich,registo); // não te esqueças de fazer aqui o que quiseres com os teus dados. Por exemplo: with registro do begin Writeln('Carro nº ',i+1); // Na posição 0 do ficheiro está o carro 1, na 1 está o carro 2, etc. Por isso, o +1 Writeln('Modelo: ',ModeloCar); Writeln('Ano: ',Ano); ... Writeln('Preço: ',precoCar:4:2); // Este bloco faz uma pausa Write('Qualquer tecla para ver o próximo carro...'); readkey; clrscr; end; close(fich); Deste modo tens sempre o nº disponível, sem precisares usar nenhuma variável própria para isso... "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now