using System.Collections.Generic;
public static void Main()
CiaAerea teste = new CiaAerea();
static int numAssentos = 10;
static int tamFilaEspera = 5;
static bool assentoReservado = true;
protected Dictionary<int, bool> assentos;
protected Dictionary<int,string> reservas;
protected Queue<string> filaEspera;
inicializaAssentosEFilas();
inicializaAssentosEFilas();
private void inicializaAssentosEFilas(){
assentos = new Dictionary<int, bool> ();
filaEspera = new Queue<string>();
reservas = new Dictionary<int,string>();
for(int i= 1; i <= numAssentos; i++)
assentos.Add(i, !assentoReservado);
public List<int> obterAssentosDisponiveis(){
List<int> assentosDisponiveis = new List<int>();
foreach(KeyValuePair<int,bool> parAssento in assentos){
int assento = parAssento.Key;
bool disponivel = parAssento.Value;
if(disponivel != assentoReservado){
assentosDisponiveis.Add(assento);
return assentosDisponiveis;
public void imprimirAssentosDispiniveis(){
List<int> asDispo = this.obterAssentosDisponiveis();
Console.Write(" ASSENTOS DISPONIVEIS :");
foreach(int a in asDispo){
Console.Write(" {0},", a);
public void imprimeDadosVoo(){
Console.WriteLine("........Dados do voo: codigo {0}", codigo);
Console.WriteLine("........Número de reservas {0}:", reservas.Count);
Console.WriteLine("........Número de pessoas em fila de espera {0}:", filaEspera.Count);
Console.WriteLine("..............Situação dos Assentos..........");
foreach(KeyValuePair<int, bool> v in assentos){
bool disponivel = v.Value;
if(disponivel != assentoReservado){
Console.WriteLine("Assento {0}: DISPONIVEL ", chave.ToString().PadLeft(2,'0'));
string cpf_cliente = reservas[chave].ToString();
Console.WriteLine("Assento {0}: RESERVADO PARA: {1} ", chave.ToString().PadLeft(2,'0'), cpf_cliente);
Console.WriteLine("..............Fila de Espera.........");
Array vEspera = filaEspera.ToArray();
foreach(string vCpf in vEspera){
Console.WriteLine("{0}", vCpf);
Console.WriteLine("..............FIM DOS DADOS DO VOO {0}.........", codigo);
private bool possuiAcentosDisponiveis(){
List<int> vAcentosDisponiveis = obterAssentosDisponiveis();
return vAcentosDisponiveis.Count > 0;
private bool assentoEstaDisponivel(int pAssento){
return assentos[pAssento] != assentoReservado;
private bool passageiroEstaNoVoo(string pCpf){
foreach (KeyValuePair<int, string> vPassageiros in reservas){
string vCpf = vPassageiros.Value;
private int obterAssentoPassageiro(string pCpf){
foreach (KeyValuePair<int, string> vPassageiros in reservas){
string vCpf = vPassageiros.Value;
private bool passageiroEstaNaFilaEspera(string pCpf){
return filaEspera.Contains(pCpf);
private bool vooEstaCheio(){
return reservas.Count == numAssentos;
private bool listaEsperaEstaCheia(){
return filaEspera.Count == tamFilaEspera;
private bool possuiFilaDeEspera(){
return filaEspera.Count > 0;
public bool insereReserva(string pCpf, int pAssento){
if(passageiroEstaNoVoo(pCpf)){
Console.WriteLine("ERRO: Reserva não realizada: o passageiro {0} já possui reserva neste voo. ", pCpf);
if(listaEsperaEstaCheia()){
Console.WriteLine("ERRO: Reserva não realizada: o voo está cheio e a fila de espera também está lotada ");
if(passageiroEstaNaFilaEspera(pCpf)){
Console.WriteLine("ERRO: Reserva não realizada: o Passageiro {0} já está em fila de espera ", pCpf);
filaEspera.Enqueue(pCpf);
Console.WriteLine("ATENÇÃO: Reserva não realizada: o voo está cheio, Passageiro {0} inserido em fila de espera ", pCpf);
if(!assentoEstaDisponivel(pAssento)){
if(possuiAcentosDisponiveis()){
v_Acento = obterAssentosDisponiveis().ToArray()[0];
reservas.Add(v_Acento, pCpf);
assentos[v_Acento] = assentoReservado;
Console.WriteLine("ATENÇÃO: Assento já ocupado, reserva confirmada para passageiro {0} no assento {1}. ", pCpf, v_Acento);
if(assentoEstaDisponivel(pAssento)){
if(passageiroEstaNoVoo(pCpf)){
Console.WriteLine("ERRO: Reserva não realizada: o passageiro {0} já possui reserva neste voo. ", pCpf);
reservas.Add(pAssento, pCpf);
assentos[pAssento] = assentoReservado;
Console.WriteLine("SUCESSO: Reserva confirmada: passageiro {0} no assento {1}. ", pCpf, pAssento);
public bool excluirReserva(string pCpf){
if(passageiroEstaNoVoo(pCpf)){
int vAssento = obterAssentoPassageiro(pCpf);
if(possuiFilaDeEspera()){
string vCpf = filaEspera.Dequeue();
reservas[vAssento] = vCpf;
Console.WriteLine("SUCESSO: Reserva de {0} no voo {1} EXCLUIDA com SUCESSO!",pCpf, codigo);
Console.WriteLine("SUCESSO: Reserva de {0} removido de fila de espera e concretizada no acento {1} do voo {2} com SUCESSO!",vCpf,vAssento, codigo);
reservas.Remove(vAssento);
assentos[vAssento] = false;
Console.WriteLine("SUCESSO: Reserva de {0} no voo {1} EXCLUIDA com SUCESSO!", pCpf, codigo);
Console.WriteLine("ERRO: Passageiro {0} não possui reserva no voo {1}!", pCpf, codigo);
protected Dictionary<int, Voo> voos;
voos = new Dictionary<int,Voo>();
public void inicializarVoos(){
for(int i = 1; i<= 5; i++){
for (int j = 1; j <= 10; j++){
codigo = String.Format("{0}{1}",i.ToString().PadRight(2,'0'), j.ToString().PadLeft(2,'0'));
vooObj = new Voo(Convert.ToInt32(codigo));
voos.Add(Convert.ToInt32(codigo), vooObj);
nVoo.insereReserva("12368388664", 3);
nVoo.insereReserva("12368388664", 3);
nVoo.insereReserva("987654321", 3);
nVoo.insereReserva("458987875", 8);
nVoo.insereReserva("2358798240", 3);
nVoo.insereReserva("7898875425", 8);
nVoo.insereReserva("2358798240", 3);
nVoo.insereReserva("7898255425", 8);
nVoo.insereReserva("1258798240", 3);
nVoo.insereReserva("2398875425", 8);
nVoo.insereReserva("1235234132", 3);
nVoo.insereReserva("7878787878", 8);
nVoo.insereReserva("0303030303", 3);
nVoo.insereReserva("0303030030", 8);
nVoo.insereReserva("111111111", 3);
nVoo.insereReserva("222222222", 8);
nVoo.insereReserva("111161111", 3);
nVoo.insereReserva("111111111", 8);
nVoo.excluirReserva("123458");
nVoo.excluirReserva("12368388664");