Order queue in c#

Asked

Viewed 1,509 times

0

Since I already have this code:

Queue<string> Fila = new Queue<string>(); //Declaração da Fila

string opcao = "1"; //Define opção como 1

while (opcao == "1") //Enquanto ele quiser inserir pedidos
{
    Console.WriteLine("Cliente:"); //escreve na tela a opção que está pedindo
    string cliente = Console.ReadLine(); //insere o que foi digitado pelo usuario na variavel correspondente

    Console.WriteLine("Produto:");
    string Produto = Console.ReadLine();

    Console.WriteLine("Quantidade:");
    int Quantidade = int.Parse(Console.ReadLine());

    string Pedido = cliente + Produto + Quantidade; //pedido um é igual a tudo o que o usuário digitou


   int ItensFila = Fila.Count;
   if (ItensFila == -1)
   {
       Fila.Enqueue("Pedido");
   }
   else
   {
       Fila.Enqueue("Pedido" + ItensFila + 1);
   }
     //Adiciona o item à lista
    Console.WriteLine("Deseja inserir outro pedido? 1-SIM | 2-NÃO"); //escreve na tela as opçoes
    opcao = Console.ReadLine();
}
//Ordena a lista


//Imprime número de itens da lista
Console.WriteLine("Fila Atual" + Environment.NewLine);
Console.WriteLine(Fila.Count + " pedidos");

        //exibe os pedidos
string casos = Console.ReadLine();
switch (casos)
{
    //caso1
    case "Pedido1":
        Console.WriteLine(Fila.Peek());
        break;
    //caso2
    case "Pedido2":
        Console.WriteLine(Fila.ElementAt(2));
        break;
}



while (true) { };

How can I:

  1. Store values in variable Pedido 1;
  2. Create a new variable;
  3. Collect the values typed by the user again but now store in a variable pedido 2;
  4. If the user continues, store in a Pedido 3, onward.
  • What is the purpose of this code?

  • this was my attempt to do this, but I’m stuck.

  • I’m trying to make an order recorder, which asks for Customer, Product and quantity. The first time the user typed, I would record this information in the Request variable 1, in the second Request 2 onwards until the maximum capacity of 5. At the end, I would just like to have the option to display the number of requests to the user: "there are x requests". And if the user typed: Request 3 for example, display the corresponding request, that is, the contents of the variable he typed.

  • I don’t think a queue is the right structure for what you want. I would use a dictionary with an indexed collection instead. It has to be a queue?

  • No. How to proceed in the way you’re telling me?

2 answers

3


It is inappropriate to use queue for what you want. In your place, would use a dictionary or a KeyedCollection.

First you need to correctly define a data structure for the request. In your code, it practically does not exist. Create a new class in your project with the following:

public class Pedido 
{
    public String Cliente { get; set; }
    public String Produto { get; set; }
    public int Quantidade { get; set; }
}

Trade the queue for a dictionary of orders:

var dicionario = new Dictionary<String, Pedido>();

Create an order object and set the variables as you were already doing:

var pedido = new Pedido();

Console.WriteLine("Cliente:"); //escreve na tela a opção que está pedindo
pedido.Cliente = Console.ReadLine(); //insere o que foi digitado pelo usuario na variavel correspondente

Console.WriteLine("Produto:");
pedido.Produto = Console.ReadLine();

Console.WriteLine("Quantidade:");
pedido.Quantidade = int.Parse(Console.ReadLine());

Enter the request in the dictionary. Set an index (a name for the request). I will invent an index pattern, for example: "Requested", "Requested 1", "Requested 2"...

dicionario.Add("Pedido" + dicionario.Length.ToString(), pedido);

Now access is simple. Examples:

//Imprime número de itens da lista
Console.WriteLine(dicionario.Count + " pedidos");

foreach (var chaveValor in dicionario) 
{
    Console.WriteLine("Pedido: " + chaveValor.Key);
    Console.WriteLine("Cliente: " + chaveValor.Value.Cliente);
    Console.WriteLine("Produto: " + chaveValor.Value.Produto);
    Console.WriteLine("Quantidade: " + chaveValor.Key.Quantidade.ToString());
}

To directly access an order:

var umPedidoQualquer = dicionario["Pedido0"];
  • It didn’t work, I don’t know if I put something in the wrong place, but there were a lot of mistakes here, I’m using Visual Studio, thanks for the help.

  • @Harison Open another question with errors.

3

Hello! Since you said it doesn’t necessarily have to be a queue, I did it with a list, see if it fits you.

        List<string> Fila = new List<string>(); //Declaração da Fila

        string opcao = "1"; //Define opção como 1

        while (opcao == "1") //Enquanto ele quiser inserir pedidos
        {
            Console.WriteLine("Cliente:"); //escreve na tela a opção que está pedindo
            string cliente = Console.ReadLine() + " "; //insere o que foi digitado pelo usuario na variavel correspondente

            Console.WriteLine("Produto:");
            string Produto = Console.ReadLine() + " ";

            Console.WriteLine("Quantidade:");
            int Quantidade = int.Parse(Console.ReadLine());

            string Pedido = cliente + Produto + Quantidade; //pedido um é igual a tudo o que o usuário digitou



            //Adiciona o item à lista
            Fila.Add(Pedido);
            Console.WriteLine("Deseja inserir outro pedido? 1-SIM | 2-NÃO"); //escreve na tela as opçoes
            opcao = Console.ReadLine();
        }
        //Ordena a lista

        Console.WriteLine(Fila.Count + " pedidos");


        //exibe os pedidos
        int a = 1;
        foreach (string pedido in Fila)
        {

            Console.WriteLine("Pedido nº: "+ a +" "+ pedido);
            a++;
        }


        while (true) { };

    }
}

}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.