Ir ao conteúdo

Posts recomendados

Postado


Basicamente preciso chamar o primeiro da fila (sendo que é uma fila Pac e uma Sedex), mas quando chamo la no menu ele chama todos de uma fila só. 
 

 

#include <iostream>
#include <queue>

using namespace std;

struct pessoa{
	string nome, rua, cidade, cep;
	int  numero;
  int frente;
};

void imprimir(queue<pessoa> fila){
	if(fila.empty()){
		cout << "Fila vazia\n";
		return;
	}		
	while(!fila.empty()){
		cout << "PAC - " << fila.front().nome << " - " << fila.front().cep << " - " << fila.front().rua << " - " << fila.front().numero << " - " << fila.front().cidade << endl;
		fila.pop();
	}
	cout << endl;
}

void imprimir1(queue<pessoa> fila){
	if(fila.empty()){
		cout << "Fila vazia\n";
		return;
	}		
	while(!fila.empty()){
		cout << "Sedex - " << fila.front().nome << " - " << fila.front().cep << " - " << fila.front().rua << " - " << fila.front().numero << " - " << fila.front().cidade << endl;
		fila.pop();
	}
	cout << endl;
}


void chamarProximo(queue<pessoa> filaPac){
  int pri = 0;
  
  if(filaPac.empty()){
		cout << "Fila vazia\n";
    
		return;
	}		
	
	while(!filaPac.empty()  ){
    
    
      cout << "Fila PAC ->"  << filaPac.front().nome << " - " << filaPac.front().rua <<  " - " << filaPac.front().numero << " - " << filaPac.front().cep << " - " << filaPac.front().cidade;
      //filaPac.pop();
    
        
	}

	cout << endl;
}

void chamarProximo1(queue<pessoa> filaSedex){
	
	while(!filaSedex.empty() ){
		cout << "Fila Sedex ->"  << filaSedex.front().nome << " - " << filaSedex.front().rua <<  " - " << filaSedex.front().numero << " - " << filaSedex.front().cep << " - " << filaSedex.front().cidade;
        filaSedex.pop();
	}
	cout << endl;
}





void inserir(queue<pessoa> &fila, string nome, string cep,int numero , string rua, string cidade){
	pessoa p1;
	p1.nome = nome;
	p1.cep = cep;
	p1.numero = numero;
  p1.rua = rua;
  p1.cidade = cidade;
  
	fila.push(p1);
  
  
}

int main() {
  queue<pessoa> filaPac;
  queue<pessoa> filaSedex;
  queue<pessoa> fila;
	int op;
  int op2;

  do{
cout << "\n1- Adicionar pessoas na fila. \n";
    cout << "2- Chamar próximo da fila, informando a fila correspondente. \n";
    cout << "3- Mostrar as filas. \n";
    cout << "4- Sair.";
    cout << "\nOpção: \n";
    cin >> op2;

    switch(op2){

      case 1:
      {
        

       cout << "\nESCOLHA O TIPO DE SERVIÇO PARA ENVIO\n";
     cout << "\n1- PAC. \n ";
     cout << "2- Sedex. \n";
     cout << "Opção: \n";
     cin >> op;

     switch(op){


       case 1:
      {
        string nome, cidade, rua, cep;
        int numero;
        cout << "\nDigite o nome: \n";
        cin >> nome;

        cout << "\nDigite a rua: \n";
        cin >> rua;

        cout << "\nDigite o numero: \n";
        cin >> numero;

        cout << "\nDigite o cep: \n";
        cin >> cep;

        cout << "\nDigite a cidade: \n";
        cin >> cidade;
         inserir(filaPac, nome, cep, numero, rua, cidade);
        cout << endl;
        

      }
        
      break;

      case 2:
      {
      string sedex, nome, cidade, rua, cep;
        int numero;
         
        cout << "\n Digite o nome: \n";
        cin >> nome;

        cout << "\nDigite a rua: \n";
        cin >> rua;

        cout << "\nDigite o numero: \n";
        cin >> numero;

        cout << "\nDigite o cep: \n";
        cin >> cep;

        cout << "\nDigite a cidade: \n";
        cin >> cidade;
         inserir(filaSedex, nome, cep, numero, rua, cidade);
        cout << endl;
        

      }

      break;

      
      
      
      

     } //case1op2

     break;

    case 2:
    
    {
     //chamaroproximodafila
      
               
                 

      
      
        
      
      

    }
    break;
}//switchop
    case 3:
    {
      imprimir(filaPac);
      imprimir1(filaSedex);
    }
    break;

    case 4:
    {
      cout << "saindo...";
    }


    } //switchop2
      
      

    

  }while(op2 != 0);
    
}
  

  



  
	

	



  

  

  
    

    
 

  • Curtir 1
Postado

Seu programa pode melhorar em muitas partes :(

 

É praticamente um programa em C. C++ é uma linguagem muito mais expressiva. Aproveite a linguagem, ou use C.

 

De volta ao seu programa

 

  • Use nomes mais expressivos, e evite void
    void chamarProximo(queue<pessoa> filaPac)
    void chamarProximo1(queue<pessoa> filaSedex)

 

??? porque não 
 

    void chamarPAC(queue<pessoa> filaPac)
    void chamarSEDEX(queue<pessoa> filaSedex)

 

Ou o simples
 

    int chamar(queue<pessoa> fila);

 

Já que as filas são da mesma coisa?

 

  • sobre chamarProximoxxx
void chamarProximo1(queue<pessoa> filaSedex)
{
    while (!filaSedex.empty())
    {
        cout << "Fila Sedex ->" << filaSedex.front().nome << " - "
             << filaSedex.front().rua << " - "
             << filaSedex.front().numero << " - "
             << filaSedex.front().cep << " - "
             << filaSedex.front().cidade;
        filaSedex.pop();
    }
    cout << endl;
}

 

o próximo é o próximo. UM próximo cliente se a fila não estiver vazia. Que pretende com o loop? É claro que vai esvaziar a fila.

 

  • nunca escreva um programa interativo. Só vai perder tempo. Não misture as coisas. Suas filas são de Pessoa. Escreva as funções em torno dos dados e não em torno de cin / cout ou vai levar dias pra fazer um programa de 15 minutos.

Exemplo: inserir alguém na fila. Está usando C++. Devia usar uma classe com as filas. De todo modo pense nessa função
 

	int inserir( Pessoa& p, Fila& f);

 

que retorna 0 se deu certo ou um código indicando um possível erro. E insere uma Pessoa numa Fila, que é o que quer fazer. E Fila seria o que? uma queue<Pessoa>...E compare com isso
 

void inserir(
    queue<pessoa> &fila, string nome, string cep, int numero,
    string rua, string cidade)

 

Como você escreveu tem que escrever MUITO mais, é mais difícil de ler. E se mudar um campo na classe (struct) tem que alterar o programa todo... Nunca escreva assim. Isso é encapsulamento. Usa a estrutura como parâmetro e os campos vão dentro. É mais esperto.,

 

  • main() deve ser a primeira função de seu programa. Se possível em um arquivo separado.

 

    do {
        cout << "\n1- Adicionar pessoas na fila. \n";
        cout << "2- Chamar próximo da fila, informando a fila "
                "correspondente. \n";
        cout << "3- Mostrar as filas. \n";
        cout << "4- Sair.";
        cout << "\nOpção: \n";
        cin >> op2;

 

  • Não escreva programas com menu. Escreva e teste seu programa. Depois coloque isso em minutos.
  • E se vai usar um menu escreva uma função que retorna a opção....
  • e entenda que 5 cout de 1 linha é muito menos claro que um cout de 5 linhas...

    Não escreva assim:
     
            cout << "\n1- Adicionar pessoas na fila. \n";
            cout << "2- Chamar próximo da fila, informando a fila "
                    "correspondente. \n";
            cout << "3- Mostrar as filas. \n";
            cout << "4- Sair.";
            cout << "\nOpção: \n";

          Prefira:
 

        cout << "\n\
1- Adicionar pessoas na fila.\n\
2- Chamar próximo da fila, informando a fila\n\
   correspondente.\n\
3- Mostrar as filas.\n\
4- Sair.\n\
\n\
   Opção: ";

 

  • Não há razão para um espaço em branco antes de mudar de linha :)
  • Não mude de linha depois de "Opção: ". Sempre se espera o prompt na MESMA linha da leitura da resposta
  • é claro que um cout é melhor que 5. Alguém vai pagar a conta
  • use uma função e retorne um char com a opção
  • provavelmente não precisa de um ponto ao final de cada linha: as opções são pré-fixadas por um número
  • é muito mais fácil editar e alinhar o texto do modo como mostrei
  • tem muito menos chance de erro

 

 

Lembro também que imprimir() é algo enjoado para uma estrutura dessas. Em geral filas, pilhas, conjuntos, mapas e listas NÃO tem essa função. E só se usa em testes. Usando <queue>  por exemplo você acessa pela ordem. Pode ver o primeiro ou o último elemento. Não é pra ver os do meio. Não é para isso a fila. Essa estrutura reforça exatamente a disciplina de tirar e por os caras em ordem, FIFO ou LIFO, fila ou pilha.

 

Para mostrar o conteúdo E usar essa estrutura o mais simples é usar size() e colocar os caras de volta ao final da fila depois de mostrar. Ou usar  vector ao invés de queue

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!