1
I’m doing an exercise for school and I can’t get the program to rent and return cars. Whenever I try to do this the program breaks (crash) and I don’t understand why.
Follows code:
Program cargest;
uses crt;
Type frota=Record
Marca:string[19];
Modelo:string[15];
Combustivel:string[13];
AC:string[1];
Ano:integer;
Matricula:string[8];
Custo:real;
estado:boolean;
flag:boolean;
end;
var lista,tmp: file of frota;
var veiculos:frota;
op,n,c:integer;
op1:char;
Function existeficheiro: boolean;
begin
assign(lista, 'C:\Users\Andr?\Desktop\cargest.dat')
{$I-};
reset(lista);close(lista);
{$I+};
existeficheiro:= (Ioresult=0);
end;
Procedure introduzir;
var op1:char;
begin
clrscr;
writeln('INTRODUCAO DE NOVO VEICULO');
op1:='s';
while (op1 <> 'n') and (op1 <> 'N') do begin
if existeficheiro then
reset (lista)
else
rewrite(lista);
writeln;
{write('Numero de Novos Veiculos: ');readln(n);
for c:=1 to n do}
begin
writeln;
writeln('Registo numero: ',filesize(lista));
write('Marca: ');readln(veiculos.marca);
write('Modelo: ');readln(veiculos.modelo);
write('Combustivel: ');readln(veiculos.combustivel);
write('Ar Condicionado (s/n): ');readln(veiculos.ac);
write('Ano: ');readln(veiculos.ano);
write('Matricula: ');readln(veiculos.matricula);
write('Custo de aluguer diario: ');readln(veiculos.custo);
veiculos.flag:=true;
veiculos.estado:=true;
seek(lista,filesize(lista));
write(lista,veiculos);
writeln;
end;
write('Deseja continuar? (s/n) ');
read(op1);
readln;
close(lista);
end;
end;
Procedure listagem_disp;
begin
clrscr;
if not existeficheiro then
begin
writeln('Nao ha veiculos na frota');
writeln('Tecle Enter para Menu');
repeat until ReadKey=#13
end
else
begin
reset(lista);
writeln('FROTA DISPONIVEL');
writeln;
writeln('Existem ',filesize(lista), ' veiculos na garagem');
writeln;
while not eof(lista) do
begin
read(lista,veiculos);
if veiculos.estado=true then
begin
writeln();
writeln('Registo numero ',Filepos(lista));
writeln('Marca:',veiculos.marca);
writeln('Modelo:',veiculos.modelo);
writeln('Combustivel: ',veiculos.combustivel);
writeln('Ar Condicionado (s/n):',veiculos.ac);
writeln('Ano:',veiculos.ano);
writeln('Matricula:',veiculos.matricula);
writeln('Custo:',veiculos.custo);
writeln();
end;
end;
close(lista);
writeln;
writeln('Tecle Enter para Menu');
repeat until ReadKey=#13
end;
end;
Procedure Listagem_alug;
begin
clrscr;
if not existeficheiro then
begin
writeln('Ficheiro inexistente');
writeln('Tecle Enter para Menu');
repeat until ReadKey=#13
end
else
begin
reset(lista);
writeln('FROTA ALUGADA');
writeln;
writeln('Existem ',filesize(lista), ' veiculos alugados');
writeln;
while not eof(lista) do
begin
read(lista,veiculos);
if veiculos.estado=false then
begin
writeln();
writeln('Registo numero ',Filepos(lista));
writeln('Marca:',veiculos.marca);
writeln('Modelo:',veiculos.modelo);
writeln('Combustivel: ',veiculos.combustivel);
writeln('Ar Condicionado (s/n):',veiculos.ac);
writeln('Ano:',veiculos.ano);
writeln('Matricula:',veiculos.matricula);
writeln('Custo:',veiculos.custo);
writeln();
end;
end;
close(lista);
writeln;
writeln('Tecle Enter para Menu');
repeat until ReadKey=#13
end;
end;
Procedure Listagem_geral;
begin
clrscr;
if not existeficheiro then
begin
writeln('Ficheiro inexistente');
writeln('Tecle Enter para Menu');
repeat until ReadKey=#13
end
else
begin
reset(lista);
writeln('FROTA COMPLETA');
writeln;
writeln('Existem ',filesize(lista), ' veiculos na frota.');
writeln;
while not eof(lista) do
begin
read(lista,veiculos);
begin
writeln();
writeln('Registo numero ',Filepos(lista));
writeln('Marca:',veiculos.marca);
writeln('Modelo:',veiculos.modelo);
writeln('Combustivel: ',veiculos.combustivel);
writeln('Ar Condicionado (s/n):',veiculos.ac);
writeln('Ano:',veiculos.ano);
writeln('Matricula:',veiculos.matricula);
writeln('Custo:',veiculos.custo);
writeln();
end;
end;
close(lista);
writeln;
writeln('Tecle Enter para Menu');
repeat until ReadKey=#13
end;
end;
Procedure eliminacao;
begin
clrscr;
if not existeficheiro then
begin
writeln('ficheiro inexistente');
writeln('tecle entre para menu');
repeat until readkey=#13
end
else
begin
reset(lista);
writeln('Existem ',filesize(lista),' veiculos na frota!');
op1 := 's';
while op1 = 's' do
begin
writeln;
write('introduza o numero do registo que quer eliminar: ');
readln(n);
seek ( lista,(n-1));
read (lista, veiculos);
writeln('Info do Veiculo Selecionado');
writeln(veiculos.marca,' ',veiculos.modelo,' de ',veiculos.ano);
writeln('Clique enter para cofirmar operacao.');
readln;
writeln;
writeln('Veiculo elimando da frota com sucesso!');
veiculos.flag:=false;
seek(lista,(n-1));
write(lista,veiculos);
writeln;
write('Digite <s> para eliminar outro veiculo ou ENTER para voltar ao Menu');
readln(op1);
end;
end;
close(lista);
assign(TMP,'C:\Users\Andr?\Desktop\temporario.dat');
rewrite(TMP);
reset(lista);
seek(TMP,0);
while not eof(lista) do
begin
read(lista,veiculos);
if veiculos.flag = true then
write(TMP,veiculos);
end;
close(lista);
close(tmp);
erase(lista);
rename(TMP,'C:\Users\Andr?\Desktop\cargest.dat');
writeln;
{writeln('tecle enter para menu');
repeat until readkey=#13}
end;
Procedure aluga;
begin
clrscr;
If Not ExisteFicheiro Then
Begin
Writeln('Ficheiro inexistente');
Write ('Tecle Enter para Menu');
Repeat Until ReadKey=#13
End;
begin
Writeln;
Write (' Introduza o numero do veiculo a alugar: ');
read (n);
Seek (lista, (n));
Read (lista, veiculos);
if veiculos.estado = false then
begin
gotoxy (20,13);
writeln ('Veiculo Indisponivel, Tente Novamente.');
readln;
clrscr;
end
else
begin
writeln (veiculos.marca,' ', veiculos.modelo,' de ', veiculos.ano) ;
writeln('Clique enter para confirmar a opera??o');
readln;
writeln;
veiculos.estado := false;
Seek (lista, (n));
Write (lista, veiculos);
writeln;
writeln ('Veiculo Alugado com sucesso!');
close(lista);
end;
end;
close(lista);
writeln;
Writeln ('Tecle Enter para Menu');
Repeat Until ReadKey=#13;
end;
Procedure devolve;
begin
clrscr;
If Not ExisteFicheiro Then
Begin
Writeln('Ficheiro inexistente');
Write ('Tecle Enter para Menu');
Repeat Until ReadKey=#13
End;
begin
Writeln;
Writeln ('Introduza o numero do veiculo a devolver: ');
readln (n);
Seek (lista, (n));
Read (lista, veiculos);
writeln (veiculos.marca,' ', veiculos.modelo,' de ', veiculos.ano);
Writeln('Efectue o pagamento do custo do aluguer');
writeln('A pagar: ',veiculos.custo);
writeln;
veiculos.estado := true;
Seek (lista, (n));
Write (lista, veiculos);
writeln;
writeln ('Veiculo Devolvido com sucesso!');
end;
Close(lista);
writeln;
Writeln ('Tecle Enter para Menu');
Repeat Until ReadKey=#13
end;
begin
clrscr;
textbackground(blue);
clrscr;
gotoxy(20,3);
write('CarGest v5.0');
op:=1;
while op <> 0 do
begin
clrscr;
gotoxy(20,6);
write('CARGEST v6.0');
gotoxy(15,8);
write('1 - Introduzir Veiculo na Frota');
gotoxy(15,9);
write('2 - Alugar um veiculo');
gotoxy(15,10);
write('3 - Devolver veiculo');
gotoxy(15,11);
write('4 - Visualizar Frota');
gotoxy(15,12);
write('5 - Visualizar Veiculos Alugados');
gotoxy(15,13);
write('6 - Visualizar Veiculos Disponiveis');
gotoxy(15,14);
write('7 - Eliminar Veiculos');
gotoxy(15,15);
write('0 - SAIR');
gotoxy(15,18);
write('SELECIONE A OPCAO: ');
readln(op);
case op of
1 : introduzir;
2 : aluga;
3 : devolve;
4 : Listagem_geral;
5 : Listagem_alug;
6 : Listagem_disp;
7 : Eliminacao;
else
begin
gotoxy(15,18);
clrscr;
textbackground(red);
textcolor(White);
clrscr;
gotoxy(23,15);
write(' OPCAO INVALIDA');
gotoxy(23,17);
write('Prima enter para continuar');
textbackground(blue);
readln;
end;
end;
end;
end.
.dat
It is not a specific format, it does not inform the type of data, I will assume that it is a format that you "invented". A doubt, which "compiler" are you using? There is a "debugger" in the tool you are using?– Guilherme Nascimento
Yes, a format invented so to speak. I am using Dev-Pascal and the compilation does not point out errors. It works everything but the "return" procedure and the "rent" procedure. By the way, Thank you so much for editing!
– A.Barbosa
So A.Barbosa, I have no knowledge of pascal (I believe the compiler is freepascal), although I have a vague knowledge of Object-pascal, so at the moment I cannot point out the problem, but as soon as possible I will analyze. I personally think the problem is in
reset(lista);
, he is trying to reset a variable without data (although there is avar
nothing was attributed to him).– Guilherme Nascimento
The error is in Seek(list).
– h1k3r