Jump to content

Dúvidas Ficheiros


Firewall
 Share

Recommended Posts

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

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

@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

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

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

@nunopicado  :wallbash:

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

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

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

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.