Cadastro de Passagens Aéreas

Publicado por Ivan Rocha 01/12/2006

[ Hits: 8.988 ]

Homepage: http://homes.dcc.ufba.br/~ivan062/bahia

Download passagensaereas




Pequeno programa que faz uma simulação de um sistema de passagens no aeroporto.

  



Esconder código-fonte

program passagensaereas;
uses crt;
type dados= record
                  num_avi {numero do aviao}: integer;
                  nome: string[30];
               end;
var avi: array[1..4] of integer;
   lug: array[1..4] of integer;
   reservas: array[1..60] of dados;
   i, pos_livre, op {operacao}, achou, numero, posi: integer;
   pessoa: string[30];
begin {Iniciando as variaveis com 0...}
   for i:=1 to 4 do
      avi[i]:=0;
      lug[i]:=0;
   for i:=1 to 60 do
      begin
         reservas[i].num_avi:=0;
         pos_livre:=1 {como ninguem comprou passagem ainda, sobra uma posicao vaga}
      end;
   repeat
      writeln('Menu de opcoes:');
      writeln('1- Cadastrar os numeros dos avioes.');
      writeln('2- Cadastrar os lugares disponiveis em cada aviao.');
      writeln('3- Reservar passagem.');
      writeln('4- Consultar pelo numero do aviao.');
      writeln('5- Consultar pelo nome do passageiro.');
      writeln('6- Finalizar.');
      read(op);
      if op=1 then
         begin
            for i:=1 to 4 do {numerando cada aviao}
               begin
                  write('Digite o numero do ',i,'o aviao: ');
                  read(avi[i]);
               end
         end;               
      if op=2 then
         begin
            for i:=1 to 4 do {informando o numero de lugares em cada aviao}
               begin
                  write('Digite o numero de lugares disponiveis no ',i,'o aviao: ');
                  read(lug[i]);
               end
         end;                        
      if op=3 then
         begin
            write('Digite o numero do aviao no qual deseja efetuar a reserva: ');
            readln(numero);
            if pos_livre>60 then {quando o numero de reservas chegar a 60, nao terao mais reservas disponiveis. vide linha 75.}
               begin
                  write('Reservas em todos os avioes esgotadas.');
               end
            else
               begin
                  achou:=0;
                  for i:=1 to 4 do
                           begin
                              if avi[i]= numero then {executa o loop ate o numero digitado corresponder ao aviao.}
                                 begin
                                    achou:=1;
                                    posi:=i {como i vai de 1 a 4, ele carrega 4 posicoes.}
                                 end
                           end;
                  if achou=0 then {se o numero digitado antes nao for entre um e 4, ele alega que nao existe o aviao requerido}
                     begin
                        write('Nao existe esse aviao.');
                     end
                  else
                     if lug[posi]=0 then {vide linha 76.}
                        write('Aviao lotado!')
                     else
                        begin
                           write('Digite o nome do passageiro: ');
                           readln(pessoa);
                           reservas[pos_livre].num_avi:=numero; {cadastra o nome do passageiro e o numero do aviao}
                           reservas[pos_livre].nome:=pessoa;
                           write('Reserva efetuada com sucesso!');
                           pos_livre:=pos_livre+1; {pos_livre vai aumentando ate chegar em 60, quando acabarao as reservas.}
                           lug[posi]:= lug[posi]-1; {conforme o loop, cada cadastro feito, diminui o numero de vagas}
                        end                        
               end
         end;                        
      if op=4 then
         begin
            write('Digite o numero do aviao do qual deseja consultar as reservas: ');
            read(numero);
            achou:=0;
            for i:=1 to 4 do {executa o loop de 1 a 4 ate ser igual ao numero digitado}
               begin
                  if avi[i]=numero then
                     achou:=1;
               end;
            if achou=0 then
               write('Nao existe esse aviao!')
            else
               begin
                  achou:=0; {reinicializa variavel achou como 0}
                  for i:=1 to (pos_livre-1) do {executa o loop ate o numero que ficou gravado no passo 3, dependendo do numero de cadastros que foi feito la.}
                     begin
                        if reservas[i].num_avi=numero then {lista os passageiros do aviao correspondente ao numero digitado(linha 98)}
                           begin
                              writeln(reservas[i].nome);
                              achou:=1
                           end;
                     end;
                  if achou=0 then                     
                        write('Nenhuma reserva esta cadastrada para ese aviao.');                     
               end;
         end;                        
      if op=5 then
         begin
            write('Aperte uma tecla para ativar e depois digite o nome do passageiro do qual deseja consultar as reservas: ');
            readln(pessoa);
            readkey;
            read(pessoa);
            achou:=0;
            begin
               for i:=1 to (pos_livre-1) do
                     begin
                        if reservas[i].nome=pessoa then {quando nome digitado for igual ao nome na memoria, ele informa o aviao no qual esta feita a reserva pela pessoa.}
                           begin
                              writeln('Aviao ',reservas[i].num_avi,'.');
                              achou:=1
                           end
                     end;
                   if achou=0 then {se o nome digitado nao tiver na memoria, ele nao fora cadastrado, e ai aparecera a mensagem abaixo.}
                  write('Nenhuma reserva esta cadastrada para esse nome.');
            end;
         end;
   until op=6;
end.

Scripts recomendados

somatório de uma matriz 7x5

Registro

maior elemento de uma matriz

Extenso em dll, com parâmetros adicionais

Calculadora de notas (Pascal)


  

Comentários
[1] Comentário enviado por lsanges em 28/03/2013 - 14:04h

Boa tarde, Ivan! O programa é perfeito, exatamente o que estava procurando. Porém, por conta de uma necessidade de aula (aprendizado de alguns comandos dados pelo professor), gostaria de colocar cada opção em "PROCEDURE". Ou seja, exibiria um menu principal e, para cada necessidade, em vez que seguir uma estrutura linear (como vc fez) ele "voltaria" aos procedimentos cadastrados anteriormente. Eu tentei fazer, mas não estava dando certo. Você poderia me ajudar? Estou enviando o que fiz para vc poder dar uma olhada! Tem uns procedimentos para dar uma "floreada" tb, mas vc pode ignorar.... :)
Desde já, agradeço!

program passagensaereas;
uses
crt;
type
dados= record
num_avi {numero do aviao}: integer;
nome: string[30];
end;
var
avi: array[1..4] of integer;
lug: array[1..4] of integer;
reservas: array[1..40] of dados;
I, pos_livre, achou, numero, posi: integer;
op:char;
pessoa: string[30];

(* ROTINAS DE VISUALIZAÇÃO *)

PROCEDURE LINHA;

Var
J:integer;
Begin
for J:=1 to 80 do
write(#205); {escreve uma "linha dupla horizontal" (=) ao longo da tela}
End;

PROCEDURE CENTER(MSG:STRING);

Var
TAM:integer;
Begin
TAM:=40+ LENGTH(MSG) DIV 2; {conta até a quadragésima coluna, divide o número de caracteres da mensagem por dois e a centraliza}
writeln(MSG:TAM);
End;

PROCEDURE WRITEXY (X,Y:INTEGER; MSG:STRING);

Begin
GOTOXY(X,Y); {posiciona o curso na coluna e linha desejadas (X e Y, respectivamente) e escreve a mensagem à partir deste ponto}
WRITE(MSG);
End;

(*.....................PROCEDIMENTOS PARA CADASTRO..........................*)

PROCEDURE CADASTRO_AVIAO;

Begin
clrscr;
LINHA;
CENTER('CADASTRO DE AVIÕES');
LINHA;
for I:=1 to 4 do {numerando cada aviao}
Begin
write('Digite o número do ',I,'o aviao: ');
read(avi[I]);
End
End;

PROCEDURE CADASTRO_ASSENTO;

Begin
clrscr;
LINHA;
CENTER('CADASTRO DE ASSENTOS');
LINHA;
for I:=1 to 4 do {informando o numero de lugares em cada aviao}
Begin
write('Digite o número de lugares disponíveis no ',I,'o aviao: ');
read(lug[I]);
End;
End;

PROCEDURE RESERVA;

Begin
clrscr;
LINHA;
CENTER('RESERVAS');
LINHA;
write('Digite o número do avião desejado para reserva: ');
readln(numero);
if pos_livre>40 then {quando o numero de reservas chegar a 40, nao terao mais reservas disponiveis. vide linha 75.}
Begin
write('Reservas em todos os aviões esgotadas.');
End
else
Begin
achou:=0;
for I:=1 to 4 do
Begin
if avi[I]= numero then {executa o loop até o numero digitado corresponder ao aviao.}
Begin
achou:=1;
posi:=I {como I vai de 1 a 4, ele carrega 4 posicoes.}
End;
End;
if achou=0 then {se o numero digitado antes nao for entre um e 4, ele alega que nao existe o aviao requerido}
Begin
write('Nao existe esse aviao.');
End
else
if lug[posi]=0 then {vide linha 76.}
write('Aviao lotado!')
else
Begin
write('Digite o nome do passageiro: ');
readln(pessoa);
reservas[pos_livre].num_avi:=numero; {cadastra o nome do passageiro e o numero do aviao}
reservas[pos_livre].nome:=pessoa;
write('Reserva efetuada com sucesso!');
pos_livre:=pos_livre+1; {pos_livre vai aumentando ate chegar em 60, quando acabarao as reservas.}
lug[posi]:= lug[posi]-1; {conforme o loop, cada cadastro feito, diminui o numero de vagas}
End;
End;
End;

(*.....................PROCEDIMENTOS PARA CONSULTA........................*)

PROCEDURE CONSULTA_AVIAO;

Begin
write('Digite o numero do aviao do qual deseja consultar as reservas: ');
read(numero);
achou:=0;
for I:=1 to 4 do {executa o loop de 1 a 4 ate ser igual ao numero digitado}
Begin
if avi[I]=numero then
achou:=1;
End;
if achou=0 then
write('Nao existe esse aviao!')
else
Begin
achou:=0; {reinicializa variavel achou como 0}
for I:=1 to (pos_livre-1) do {executa o loop até o número que ficou gravado no passo 3, dependendo do número de cadastros que foi feito la.}
Begin
if reservas[I].num_avi=numero then {lista os passageiros do aviao correspondente ao numero digitado}
Begin
writeln(reservas[I].nome);
achou:=1
End;
End;
if achou=0 then
write('Nenhuma reserva foi cadastrada para ests aviao.');
End;
End;

PROCEDURE CONSULTA_PASS;

Begin
write('Aperte uma tecla para ativar e depois digite o nome do passageiro do qual deseja consultar as reservas: ');
readln(pessoa);
readkey;
read(pessoa);
achou:=0;
Begin
for I:=1 to (pos_livre-1) do
Begin
if reservas[I].nome=pessoa then {quando nome digitado for igual ao nome registrado, ele informa o aviao onde a reserva foi feita}
Begin
writeln('Aviao ',reservas[I].num_avi,'.');
achou:=1
End;
End;
if achou=0 then {se o nome digitado nao estiver na memória, aparecera a mensagem abaixo.}
write('Nenhuma reserva esta cadastrada para esse nome.');
End;
End;

(*......................PROGRAMA PRINCIPAL..........................*)

Begin {Iniciando as variaveis com 0...}
op:='0';
while (op<>'6') do
Begin
for I:=1 to 4 do
Begin
avi[I]:=0;
lug[I]:=0;
End;
for I:=1 to 40 do
Begin
reservas[I].num_avi:=0;
pos_livre:=1 {como ninguem comprou passagem ainda, sobra uma posicao vaga}
End;
clrscr;
LINHA;
CENTER('MENU PRINCIPAL');
LINHA;
GOTOXY(24,6);WRITE('1........Cadastrar os numeros dos avioes');
GOTOXY(24,8);WRITE('2........Cadastrar os lugares disponiveis em cada aviao');
GOTOXY(24,10);WRITE('3........Reservar passagem');
GOTOXY(24,12);WRITE('4........Consultar pelo numero do aviao');
GOTOXY(24,14);WRITE('5........Consultar pelo nome do passageiro');
GOTOXY(24,16);WRITE('6........Finalizar');
GOTOXY(24,18);WRITE('Opção do Menu desejada: ');
readln(op);
if op<>'6' then
case op of
'1':CADASTRO_AVIAO;
'2':CADASTRO_ASSENTO;
'3':RESERVA;
'4':CONSULTA_AVIAO;
'5':CONSULTA_PASS;
else
Begin
GOTOXY(27,24);WRITELN('OPÇÃO INVÁLIDA - TECLE QUALQUER LETRA');
op:=READKEY;
End;
End;
End;
End.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts