Commit 5ac6c5ab authored by Juan Manuel Cortez's avatar Juan Manuel Cortez

Commit inicial

parents
Program VuelosSemanaQueViene;
Uses typinfo, crt;
Type
tPlaza = (A,B,C,D,E,F,G,H,I);
Const
filasPrimeraClase = 10;
filasEconomica = 30;
plazasPorFila = ord(high(tPlaza))+1;
totalPlazas = (filasEconomica*plazasPorFila + filasPrimeraClase*plazasPorFila)
*7;
Type
tDestinos = (Miami, Madrid, Roma);
tVuelos = (Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo);
tMenu = (carne, pasta);
tClase = (Primera, Economica);
tPasaje = Record
destino: tDestinos;
vuelo: tVuelos;
fila: 1..(filasPrimeraClase + filasEconomica);
plaza: tPlaza;
nombre: string;
apellido: String;
pasaporte: LongInt;
menu: tMenu;
End;
tReservas = array[1..totalPlazas] Of tPasaje;
Var
pasajes: tReservas;
opcion: integer;
totalReservas: integer = 0;
Function plazasDisponibles(destino: tDestinos; vuelo: tVuelos; clase:
tClase): integer;
Var
i: integer = 1;
contadorPlazas: integer = 0;
Begin
While (pasajes[i].pasaporte <> 0) And (i <= totalPlazas) Do
Begin
If (pasajes[i].destino = destino) And (pasajes[i].vuelo = vuelo) And ((
clase = Primera) And (pasajes[i].fila <= filasPrimeraClase) Or (
clase = Economica) And (pasajes[i].fila > filasPrimeraClase)) Then
contadorPlazas := contadorPlazas + 1;
i := i+1;
End;
If clase = Primera Then
plazasDisponibles := filasPrimeraClase*plazasPorFila - contadorPlazas
Else
plazasDisponibles := filasEconomica*plazasPorFila - contadorPlazas;
End;
Function plazasOcupadasPorFila(destino: tDestinos; vuelo: tVuelos; fila: integer
): integer;
Var
i: integer = 1;
contadorPlazas: integer = 0;
Begin
While (pasajes[i].pasaporte <> 0) And (i <= totalPlazas) Do
Begin
If (pasajes[i].destino = destino) And (pasajes[i].vuelo = vuelo) And (
pasajes[i].fila = fila) Then
contadorPlazas := contadorPlazas + 1;
i := i+1;
End;
plazasOcupadasPorFila := contadorPlazas;
End;
Procedure confirmaReservaPasaje(reserva: tReservas);
Begin
End;
Procedure confirmaReservaPasaje(elDestino: tDestinos; elVuelo: tVuelos; laClase:
tClase; elMenu: tMenu);
Var
i: integer = 1;
filaInicial: integer;
plazasOcupadas: integer;
Begin
While (pasajes[i].pasaporte <> 0) And (i < totalPlazas) Do
i := i + 1;
If i > totalPlazas Then
WriteLn('No hay plazas disponibles en este momento.')
Else
Begin
With pasajes[i] Do
Begin
ReadLn();
WriteLn('Ingrese nombre: ');
ReadLn(nombre);
WriteLn('Ingrese apellido: ');
ReadLn(apellido);
WriteLn('Ingrese pasaporte: ');
ReadLn(pasaporte);
destino := elDestino;
vuelo := elVuelo;
menu := elMenu;
If laClase = Primera Then
filaInicial := 1
Else
filaInicial := filasPrimeraClase+1;
plazasOcupadas := plazasOcupadasPorFila(destino, vuelo,
filaInicial);
While plazasOcupadas = plazasPorFila Do
Begin
filaInicial := filaInicial + 1;
plazasOcupadas := plazasOcupadasPorFila(destino, vuelo,
filaInicial);
End;
fila := filaInicial;
plaza := tPlaza(plazasOcupadas);
totalReservas := totalReservas + 1;
End;
End;
End;
Procedure reservarPasaje(destino: tDestinos; vuelo: tVuelos; clase: tClase);
Var
opcion: integer;
Begin
WriteLn('Seleccione el menu para el destino '+
GetEnumName(TypeInfo(tDestinos), Ord(destino))+
', vuelo del dia ' +
GetEnumName(TypeInfo(tVuelos), Ord(vuelo)),
', en ',
clase,
': ');
WriteLn('1. Carne. ',
sLineBreak,
'2. Pasta.');
writeln('9. Volver.');
read(opcion);
If opcion <> 9 Then
confirmaReservaPasaje(destino, vuelo, clase, tMenu(opcion-1));
End;
Procedure reservarPasaje(destino: tDestinos; vuelo: tVuelos);
Var
opcion: integer;
plazasPrimeraDisponibles, plazasEconomicaDisponibles: integer;
Begin
plazasPrimeraDisponibles := plazasDisponibles(destino, vuelo, Primera);
plazasEconomicaDisponibles := plazasDisponibles(destino, vuelo, Economica);
WriteLn('Seleccione la clase para el destino '+
GetEnumName(TypeInfo(tDestinos), Ord(destino))+
', vuelo del dia ' +
GetEnumName(TypeInfo(tVuelos), Ord(vuelo))+
': ');
WriteLn('1. Primera clase: ', plazasPrimeraDisponibles,
' plazas disponibles.',
sLineBreak,
'2. Clase economica: ', plazasEconomicaDisponibles,
' plazas disponibles.');
writeln('9. Volver.');
read(opcion);
If (tClase(opcion-1) = Primera) And (plazasPrimeraDisponibles = 0) Then
WriteLn('No hay plazas disponibles en Primera.')
Else If (tClase(opcion-1) = Economica) And (plazasEconomicaDisponibles = 0)
Then
WriteLn('No hay plazas disponibles en Ecnomica.')
Else If (opcion <> 9) Then
reservarPasaje(destino, vuelo, tClase(opcion-1));
End;
Procedure reservarPasaje(destino: tDestinos);
Var
opcion: integer;
Begin
WriteLn('Seleccione el vuelo para el destino '+GetEnumName(TypeInfo(tDestinos)
, Ord(destino))+': ');
Case destino Of
Miami: WriteLn('1. Lunes.'
+sLineBreak+
'2. Martes.');
Madrid: WriteLn('2. Martes.'
+sLineBreak+
'4. Jueves.');
Roma: WriteLn('3. Miercoles.'
+sLineBreak+
'4. Jueves.'
+sLineBreak+
'7. Domingo.');
End;
writeln('9. Volver.');
read(opcion);
reservarPasaje(destino, tVuelos(opcion-1));
End;
Procedure reservarPasaje();
Var
opcion: integer;
Begin
WriteLn('Seleccione el destino: '
+sLineBreak+
'1. Miami.'
+sLineBreak+
'2. Madrid.'
+sLineBreak+
'3. Roma.'
+sLineBreak+
'9. Volver.'
);
read(opcion);
reservarPasaje(tDestinos(opcion-1));
End;
Function buscarReservasPorDestinoYVuelo(destino: tDestinos; vuelo: tVuelos): tReservas;
Var
reservas: tReservas;
i: integer = 1;
j: integer = 1;
Begin
While (pasajes[i].pasaporte <> 0) And (i <= totalPlazas) Do
Begin
If (pasajes[i].destino = destino) And (pasajes[i].vuelo = vuelo) Then
Begin
reservas[j] := pasajes[i];
j := j +1;
End;
i := i + 1;
End;
buscarReservasPorDestinoYVuelo := reservas;
End;
Procedure mostrarReservas(reservas: tReservas);
Var
i, j: integer;
reservaAuxiliar: tPasaje;
totalReservasFiltradas: integer = 0;
Begin
while(reservas[totalReservasFiltradas+1].pasaporte <> 0) do
totalReservasFiltradas := totalReservasFiltradas + 1;
for i:= 1 to totalReservasFiltradas Do
Begin
for j:= 1 to totalReservasFiltradas - i Do
Begin
If reservas[j].pasaporte > reservas[j+1].pasaporte Then
Begin
reservaAuxiliar := reservas[j];
reservas[j] := reservas[j+1];
reservas[j+1] := reservaAuxiliar;
End;
End;
End;
for i:= 1 to totalReservasFiltradas Do
Begin
With reservas[i] Do
Begin
WriteLn('------------------');
WriteLn('Nombre: ', nombre);
WriteLn('Apellido: ', apellido);
WriteLn('Pasaporte: ', pasaporte);
WriteLn('Destino: ', destino);
WriteLn('Vuelo: ', vuelo); ;
WriteLn('Fila: ', fila);
WriteLn('Plaza: ', plaza);
WriteLn('Menu: ', menu);
End;
End;
readkey();
End;
Procedure mostrarReservas(destino: tDestinos; vuelo: tVuelos);
Var
opcion: integer;
reservas: tReservas;
Begin
reservas := buscarReservasPorDestinoYVuelo(destino, vuelo);
mostrarReservas(reservas);
End;
Procedure mostrarReservas(destino: tDestinos);
Var
opcion: integer;
Begin
WriteLn('Seleccione el vuelo para el destino '+GetEnumName(TypeInfo(tDestinos)
, Ord(destino))+': ');
Case destino Of
Miami: WriteLn('1. Lunes.'
+sLineBreak+
'2. Martes.');
Madrid: WriteLn('2. Martes.'
+sLineBreak+
'4. Jueves.');
Roma: WriteLn('3. Miercoles.'
+sLineBreak+
'4. Jueves.'
+sLineBreak+
'7. Domingo.');
End;
writeln('9. Volver.');
read(opcion);
mostrarReservas(destino, tVuelos(opcion-1));
End;
Procedure mostrarReservas();
Var
opcion: integer;
Begin
WriteLn('Seleccione el destino: '
+sLineBreak+
'1. Miami.'
+sLineBreak+
'2. Madrid.'
+sLineBreak+
'3. Roma.'
+sLineBreak+
'9. Volver.'
);
read(opcion);
mostrarReservas(tDestinos(opcion-1));
End;
Function cargarReservas(): tReservas;
Var
archivo: file Of tReservas;
i: integer = 0;
Begin
assign(archivo, 'reservas');
{$I-}
reset (archivo);
{$I+}
If IoResult = 0 Then
Begin
read(archivo, cargarReservas);
while cargarReservas[i+1].pasaporte <> 0 do
i := i + 1;
totalReservas := i;
close(archivo);
End;
End;
Procedure guardarReservas(reservas: tReservas);
Var
archivo: file Of tReservas;
Begin
assign(archivo, 'reservas');
rewrite(archivo);
write(archivo, reservas);
close(archivo);
End;
Begin
pasajes := cargarReservas();
While opcion <> 9 Do
Begin
clrscr;
WriteLn('Para operar ingrese una opcion: '
+sLineBreak+
'1. Reservar pasaje.'
+sLineBreak+
'2. Mostrar reservas.'
+sLineBreak+
'9. Salir.'
);
read(opcion);
Case opcion Of
1: reservarPasaje();
2: mostrarReservas();
End;
End;
guardarReservas(pasajes);
End.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment