victorialais

Untitled

Dec 13th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7.  
  8. class Voo
  9. {
  10. private:
  11.   unsigned numero;
  12.   string aero_orig, aero_dest;
  13.   unsigned hora_part, hora_cheg;
  14. public:
  15.   inline Voo(): numero(0), aero_orig(""), aero_dest(""), hora_part(0), hora_cheg(0) {}
  16.   inline string getOrigem() const {return aero_orig;}
  17.   friend ostream &operator<<(ostream &O, const Voo &P);
  18.   friend istream &operator>>(istream &I, Voo &P);
  19. };
  20.  
  21.  
  22. ostream &operator<<(ostream &O, const Voo &V)
  23. {
  24.  O << "Voo " << V.numero
  25.   << ": " << V.aero_orig
  26.   << '(' << setfill('0') << setw(4) << V.hora_part << setfill(' ') << setw(0) << ')'
  27. << "->" << V.aero_dest
  28. << '(' << setfill('0') << setw(4) << V.hora_cheg << setfill(' ') << setw(0) << ')';
  29.   return O;
  30. }
  31.  
  32. // Funcao auxiliar para ler, testar e retornar um codigo valido de aeroporto (3 letras)
  33. string ler_codigo_aeroporto()
  34. {
  35.   string codigo;
  36.   bool codigo_valido;
  37.   do  {
  38.     cout << "Digite o codigo (3 letras): ";
  39.     cin >> codigo;
  40.     codigo_valido = (codigo.size()==3);
  41.     for (unsigned i=0; codigo_valido && i<3; i++)
  42.     {
  43.       codigo[i] = toupper(codigo[i]);
  44.       codigo_valido = (codigo[i]>='A' && codigo[i]<='Z');
  45.     }
  46.   } while (!codigo_valido);
  47.   return codigo;
  48. }
  49.  
  50.  
  51. unsigned ler_horario()
  52. {  unsigned horario;
  53.   bool horario_valido;
  54.   do  {
  55.     cout << "Horario (0000 a 2359): ";
  56.     cin >> horario;
  57.     unsigned hora = horario/100;
  58.     unsigned minuto = horario%100;
  59.     horario_valido = (hora>=0 && hora<=23 && minuto>=0 && minuto<=59);
  60.   } while (!horario_valido);
  61.   return horario;}
  62.  
  63. istream &operator>>(istream &I, Voo &V)
  64. {  do{
  65.     cout << "Digite o numero do voo (de 1000 a 9999: ";
  66.     cin >> V.numero;
  67.   } while (V.numero<1000 || V.numero>9999);
  68.   bool codigo_valido;
  69.   cout << "Qual o aeroporto de origem?";
  70.   V.aero_orig = ler_codigo_aeroporto();
  71.   cout << "Partida: ";
  72.   V.hora_part = ler_horario();
  73.   cout << "Aeroporto de destino: ";
  74.   V.aero_dest = ler_codigo_aeroporto();
  75.   cout << "Chegada: ";
  76.   V.hora_cheg = ler_horario();
  77.   return I;
  78. }
  79.  
  80.  
  81. class ListaVoos
  82. {
  83. private:
  84.   unsigned N;
  85.   Voo *x;
  86.   void criar(unsigned numV);
  87.   void copiar(const ListaVoos &L);
  88.   void limpar();
  89. public:
  90.   inline ListaVoos(): N(0), x(NULL) {}
  91.   inline ListaVoos(const ListaVoos &L) {copiar(L);}
  92.   inline ~ListaVoos(void) {limpar();}
  93.   inline void operator=(const ListaVoos &L) {if (this!=&L) {limpar(); copiar(L);}}
  94.   void inserir(const Voo &V);
  95.   void imprimir() const;
  96.   void imprimir(const string &C) const;
  97. };
  98.  
  99. void ListaVoos::criar(unsigned numV)
  100. {
  101.   N = numV;
  102.   if (N>0) x = new Voo[N];
  103.   else x = NULL;
  104. }
  105.  
  106. void ListaVoos::copiar(const ListaVoos &L)
  107. {
  108.   criar(L.N);
  109.  
  110.   for (unsigned i=0; i<N; i++) x[i]=L.x[i];
  111. }
  112.  
  113. void ListaVoos::limpar()
  114. {
  115.   if (x!=NULL) delete[] x;
  116.   N = 0;
  117.   x = NULL;
  118. }
  119.  
  120. void ListaVoos::inserir(const Voo &V)
  121. {
  122.   Voo *prov = new Voo[N+1];
  123.  
  124.   for (unsigned i=0; i<N; i++) prov[i]=x[i];
  125.   prov[N] = V;
  126.   if (x!=NULL) delete[] x;
  127.   N++;
  128.   x = prov;
  129. }
  130.  
  131. void ListaVoos::imprimir() const
  132. {
  133.   for (unsigned i=0; i<N; i++) cout << x[i] << endl;
  134. }
  135.  
  136. void ListaVoos::imprimir(const string &C) const
  137. {
  138.   for (unsigned i=0; i<N; i++)
  139.   {
  140.     if (x[i].getOrigem()==C) cout << x[i] << endl;
  141.   }
  142. }
  143.  
  144. int main(void)
  145. {
  146.   ListaVoos LV;
  147.   Voo V;
  148.   string codigo;
  149.   int opcao;
  150.  
  151.   cout << "LISTA DE VOOS\n";
  152.   do
  153.   {
  154.     do
  155.     {
  156.       cout << "1 - Inserir um novo voo na lista\n";
  157.       cout << "2 - Imprimir todos os voos da lista\n";
  158.       cout << "3 - Procurar um voo a partir da origem\n";
  159.       cout << "0 - Terminar o programa\n";
  160.       cin >> opcao;
  161.     } while (opcao<0 || opcao>3);
  162.     switch (opcao)
  163.     {
  164.     case 1:
  165.       cout << "Voo a ser inserido: ";
  166.       cin >> V;
  167.       LV.inserir(V);
  168.       break;
  169.     case 2:
  170.       LV.imprimir();
  171.       break;
  172.     case 3:
  173.       cout << "Aeroporto de origem a pesquisar: ";
  174.       codigo = ler_codigo_aeroporto();
  175.       LV.imprimir(codigo);
  176.       break;
  177.     default:
  178.       break;
  179.     }
  180.   } while (opcao!=0);
  181.   return 0;
  182. }
Advertisement
Add Comment
Please, Sign In to add comment