Firewall Posted March 22, 2012 at 02:42 PM Report #445154 Posted March 22, 2012 at 02:42 PM 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...
pwseo Posted March 22, 2012 at 03:21 PM Report #445162 Posted March 22, 2012 at 03:21 PM 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.
Firewall Posted March 22, 2012 at 03:39 PM Author Report #445168 Posted March 22, 2012 at 03:39 PM @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 🙂
pwseo Posted March 22, 2012 at 03:44 PM Report #445170 Posted March 22, 2012 at 03:44 PM 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.
Firewall Posted March 22, 2012 at 03:58 PM Author Report #445172 Posted March 22, 2012 at 03:58 PM 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;
nunopicado Posted March 22, 2012 at 09:12 PM Report #445226 Posted March 22, 2012 at 09:12 PM 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.
Firewall Posted March 22, 2012 at 10:34 PM Author Report #445239 Posted March 22, 2012 at 10:34 PM @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 😉
nunopicado Posted March 22, 2012 at 11:17 PM Report #445244 Posted March 22, 2012 at 11:17 PM 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.
Firewall Posted March 23, 2012 at 01:33 AM Author Report #445276 Posted March 23, 2012 at 01:33 AM 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á?
nunopicado Posted March 23, 2012 at 01:51 AM Report #445277 Posted March 23, 2012 at 01:51 AM 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.
Firewall Posted March 23, 2012 at 02:18 AM Author Report #445282 Posted March 23, 2012 at 02:18 AM 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;
nunopicado Posted March 23, 2012 at 08:45 AM Report #445292 Posted March 23, 2012 at 08:45 AM 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.
Firewall Posted March 23, 2012 at 12:30 PM Author Report #445313 Posted March 23, 2012 at 12:30 PM 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
nunopicado Posted March 23, 2012 at 01:31 PM Report #445319 Posted March 23, 2012 at 01:31 PM 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.
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