program locadora_veiculos;
uses crt;
type cli = record
nome, telefone: string;
codigo: integer;
end;
vei = record
modelo: string;
marca: string;
diaria: real;
situacao: string;
cliente: integer;
diarias: integer;
end;
var veiculos: array [1..10] of vei;
clientes: array [1..50] of cli;
i, opcao, icliente: integer;
function procura_carro(modelo: string; v: array of vei; i: integer): integer; {procura a posicao onde esta localizado o carro com modelo X, modelo: modelo do carro, v: vetor dos carros, i: posicao do proximo carro a ser cadastrado}
var j: integer; {j eh um contador}
begin
procura_carro:=-1;
for j:=0 to i-2 do
if (lowercase(v[j].modelo) = lowercase(modelo)) then
procura_carro:=j;
end;
function procura_cliente(codigo:integer; c: array of cli; i: integer): integer; {procura a posicao onde esta localizado o cliente com codigo X, codigo: codigo do cliente, c: vetor dos carros, i: posicao do proximo cliente a ser cadastrado}
var j: integer; {j eh um contador}
begin
procura_cliente:=-1;
for j:=0 to i-2 do
if (c[j].codigo = codigo) then
procura_cliente:=j;
end;
procedure mostra_carros(v: array of vei; i: integer); {procedimento que mostra todos os carros da locadora, estejam eles disponiveis para alugar ou nao, v: vetor de carros, i: posicao do proximo carro a ser cadastrado}
var j, contacarros:integer; {j eh um contador, contacarros eh um contador pra mostrar uma mensagem de erro caso nao haja nenhum carro cadastrado}
begin
contacarros:=0;
for j:=0 to i-2 do
begin
writeln(j+1, '-', v[j].marca, ', ', v[j].modelo, ', R$', v[j].diaria:0:2,' a diaria. Situacao: ', v[j].situacao);
contacarros:=contacarros+1;
end;
if (contacarros = 0) then
writeln('Nao temos nenhum carro cadastrado');
readkey;
end;
function mostra_carros_disponiveis(v: array of vei; i: integer): integer; {procedimento que mostra todos os carros disponiveis da locadora, v: vetor de carros, i: posicao do proximo carro a ser cadastrado}
var j: integer; {j eh um contador}
begin
mostra_carros_disponiveis:=0;
for j:=0 to i-2 do
if (v[j].situacao = 'Disponivel') then
begin
mostra_carros_disponiveis:=mostra_carros_disponiveis+1;
writeln(mostra_carros_disponiveis, '-', v[j].marca, ', ', v[j].modelo, ', R$', v[j].diaria:0:2,' a diaria.');
end;
if (mostra_carros_disponiveis = 0) then
begin
writeln('Desculpe, todos nossos veiculos estao alugados');
readkey;
end;
end;
procedure cadastro_veiculo(var v: array of vei; var i: integer); {procedimento para cadastrar o veiculo, v: vetor de carros, i: posicao do proximo carro a ser cadastrado}
var modelo: integer; {modelo eh uma variavel temporaria pra dizer se o carro ja foi cadastrado ou nao}
begin
if (i > 10) then
begin
writeln('Nossa locadora nao suporta mais veiculos');
readkey;
end
else
begin
repeat
write('Escreva a marca do veiculo: ');
readln(v[i-1].marca);
write('Escreva o modelo do veiculo: ');
readln(v[i-1].modelo);
modelo:=procura_carro(v[i-1].modelo, v, i);
if (modelo = -1) then
begin
write('Escreva o valor da diaria: ');
readln(v[i-1].diaria);
end
else
writeln('Carro ja cadastrado, tente outro carro');
until (modelo = -1);
v[i].situacao:='Disponivel';
v[i].marca:='';
v[i].modelo:='';
v[i].diaria:=0;
v[i].diarias:=0;
v[i].cliente:=0;
i:=i+1;
end;
end;
procedure aluga_carro(var v: array of vei; i: integer; var cl: array of cli; var icliente: integer); {}
var modelo: string; {modelo: modelo do carro a ser alugado}
posicaocarro, posicaocliente, codigocliente: integer; {posicaocarro: indica a posicao onde esta localizado o carro no vetor de carros, posicaocliente: indica a posicao do cliente caso ele ja esteja cadastrado no sistema, codigocliente: variavel para ler o codigo do cliente}
begin
if (i = 1) then
begin
writeln('Nao temos carros cadastrados ainda');
readkey;
end
else
begin
writeln('Nossos carros:');
if (mostra_carros_disponiveis(v, i) <> 0) then
repeat
write('Escreva o modelo do carro: ');
readln(modelo);
posicaocarro:=procura_carro(modelo, v, i);
if (posicaocarro = -1) then
begin
writeln('Desculpe, nao temos esse modelo.');
readkey;
end
else if (v[posicaocarro].situacao = 'Alugado') then
begin
writeln('Esse carro ja esta alugado!');
readkey;
end
else
begin
write('Escreva o codigo do cliente: ');
readln(codigocliente);
posicaocliente:=procura_cliente(codigocliente, cl, icliente);
if (posicaocliente = -1) then
begin
cl[icliente-1].codigo:=codigocliente;
write('Escreva o nome do cliente: ');
readln(cl[icliente-1].nome);
write('Escreva o telefone do cliente: ');
readln(cl[icliente-1].telefone);
end;
repeat
write('Quantos dias de aluguel? ');
readln(v[posicaocarro].diarias);
if ((v[posicaocarro].diarias < 1) or (v[posicaocarro].diarias > 30)) then
begin
writeln('Voce deve alugar o carro por no minimo 1 e no maximo 30 dias');
readkey;
end;
until ((v[posicaocarro].diarias >= 1) and (v[posicaocarro].diarias <= 30));
v[posicaocarro].situacao:='Alugado';
v[posicaocarro].cliente:=codigocliente;
if (posicaocliente = -1) then
begin
icliente:=icliente+1;
cl[icliente].nome:='';
cl[icliente].codigo:=0;
cl[icliente].telefone:='';
end;
end;
until (posicaocarro <> -1);
end;
end;
procedure devolve_carro(var v: array of vei; i: integer; cl: array of cli; icliente: integer); {procedimento pra devolver um carro, v: vetor de carros, cl vetor de clientes, i numero de carros cadastrados ate o momento, icliente numero de clientes cadastrados ate o momento}
var j, contacarros: integer; {j eh um contador, contacarros eh usado pra mostrar uma mensagem de erro caso nao haja nenhum carro alugado}
begin
contacarros:=0;
writeln('Carros alugados:');
for j:=0 to i-2 do
begin
if (v[j].situacao = 'Alugado') then
begin
contacarros:=contacarros+1;
writeln(j+1, ', ', v[j].marca, ', ', v[j].modelo, ', Cliente: ', cl[procura_cliente(v[j].cliente, cl, icliente)].nome, ', Total a pagar: R$', v[j].diaria*v[j].diarias:0:2);
end;
end;
if (contacarros > 0) then
begin
write('Escolha o carro a devolver pelo codigo: ');
readln(j);
if ((j <= i-1) and (j >= 1) and (v[j-1].situacao = 'Alugado')) then
begin
v[j-1].situacao:='Disponivel';
v[j-1].diarias:=0;
v[j-1].cliente:=0;
end
else
begin
writeln('Esse carro nao existe ou nao esta alugado');
readkey;
end;
end
else
begin
writeln('Nenhum carro esta alugado.');
readkey;
end;
end;
begin
i:=1;
veiculos[i].situacao:='Disponivel';
veiculos[i].marca:='';
veiculos[i].modelo:='';
veiculos[i].diaria:=0;
veiculos[i].diarias:=0;
veiculos[i].cliente:=0;
icliente:=1;
clientes[icliente].nome:='';
clientes[icliente].codigo:=0;
clientes[icliente].telefone:='';
repeat
writeln('1- Cadastro de veiculos');
writeln('2- Saida de veiculos');
writeln('3- Devolucao de veiculos');
writeln('4- Exibir veiculos da locadora');
writeln('0- Fechar programa');
write('Escolha uma opcao: ');
readln(opcao);
if (opcao = 1) then
cadastro_veiculo(veiculos, i)
else if (opcao = 2) then
aluga_carro(veiculos, i, clientes, icliente)
else if (opcao = 3) then
devolve_carro(veiculos, i, clientes, icliente)
else if (opcao = 4) then
mostra_carros(veiculos, i)
else if (opcao <> 0) then
begin
writeln('Opcao invalida');
readkey;
end;
clrscr;
until (opcao = 0);
end.