Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Oi, não encontro o jeito certo para chamar a minha função da classe

Program
using Produto_Estoque;

Console.WriteLine("------------------------");
Console.WriteLine("Bem vindo ao teu Estoque");
Console.WriteLine("------------------------");

ExibirMenu();

void ExibirMenu()
{
Console.WriteLine("\nQue deseja fazer?");
Console.WriteLine("1 - Adicionar Produto");
Console.WriteLine("2 - Remover Produto");
Console.WriteLine("3 - Exibir Produtos no Estoque");
Console.WriteLine("4 - Sair do aplicativo");
Console.Write("Digite Sua escolha");

string opcao = Console.ReadLine()!;
int opcaoNumerica = int.Parse(opcao);

switch (opcaoNumerica)
{
    case 1:
        Console.Clear();
        Console.WriteLine("Digite o produto");
        string nome = Console.ReadLine()!;

        Console.WriteLine("Digite o preço");
        int preco = int.Parse(Console.ReadLine()!);

        Console.WriteLine("Digite a quantidade");
        int quantidade = int.Parse(Console.ReadLine()!);

        Produto produto = new (nome, preco, quantidade);
        produto.AdicionarProduto(produto);

        Console.WriteLine($"O produto {produto.Nome} foi colocado no estoque");
        ExibirMenu();
        Console.Clear();
        break;

    case 2:

        Console.Clear();
        break;

    case 3:
        Console.Clear();
        //Aqui da erro
        Produto produto = new ("Exemplo", 0, 0);
        produto.ExibirProdutos();
        Console.WriteLine("\nPressione qualquer tecla para voltar ao menu");
        Console.ReadKey();
        Console.Clear();
        ExibirMenu();
        break;

}

}

Class Produto

namespace Produto_Estoque;
class Produto
{
public List listaProdutos = new();
public Produto(string nome, decimal preco, int quantidadeEmEstoque)
{
Nome = nome;
Preco = preco;
QuantidadeEmEstoque = quantidadeEmEstoque;
}

public string Nome { get; set; }
public decimal Preco { get; set; }
public int QuantidadeEmEstoque { get; set; }

public void AdicionarProduto(Produto produto) 
{
    listaProdutos.Add(produto);
}

public void RemoverProduto() 
{

}

public void ExibirProdutos()
{
    Console.WriteLine("Os seguintes Produtos, se encontram em nosso estoque:\n");
    foreach (var produto in listaProdutos)
    {
        Console.WriteLine($"Nome: {produto.Nome}");
        Console.WriteLine($"Preço: {produto.Preco}");
        Console.WriteLine($"Quantidade no Estoque: {produto.QuantidadeEmEstoque}");

    }
}

}

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
4 respostas

Olá Gerardo.
Não sei se entendi muito bem o que precisa mas vou tentar ajudar.
O erro aparece nesta parte:

case 3:
    Console.Clear();
    Produto produto = new ("Exemplo", 0, 0);
    produto.ExibirProdutos();

Aqui você está criando um novo objeto Produto vazio, e então chamando ExibirProdutos() nesse novo objeto que, obviamente, tem uma lista vazia (listaProdutos), porque essa lista é criada dentro de cada instância (new Produto(...)) da classe.
Então, cada vez que você cria um novo Produto, ele tem sua própria lista vazia.
Por isso não aparecem produtos (ou pode até dar erro dependendo da forma como a lista foi declarada).
Tenta esta solução:

class Estoque
{
    private List<Produto> listaProdutos = new();

    public void AdicionarProduto(Produto produto)
    {
        listaProdutos.Add(produto);
    }

    public void ExibirProdutos()
    {
        Console.WriteLine("Produtos no estoque:\n");
        foreach (var produto in listaProdutos)
        {
            Console.WriteLine($"Nome: {produto.Nome}");
            Console.WriteLine($"Preço: {produto.Preco}");
            Console.WriteLine($"Quantidade: {produto.QuantidadeEmEstoque}");
            Console.WriteLine("--------------------------");
        }
    }
}

E o Program.cs fica assim:

    using Produto_Estoque;

Estoque estoque = new();

Console.WriteLine("------------------------");
Console.WriteLine("Bem vindo ao teu Estoque");
Console.WriteLine("------------------------");

ExibirMenu();

void ExibirMenu()
{
    Console.WriteLine("\nQue deseja fazer?");
    Console.WriteLine("1 - Adicionar Produto");
    Console.WriteLine("2 - Remover Produto");
    Console.WriteLine("3 - Exibir Produtos no Estoque");
    Console.WriteLine("4 - Sair do aplicativo");
    Console.Write("Digite sua escolha: ");

    string opcao = Console.ReadLine()!;
    int opcaoNumerica = int.Parse(opcao);

    switch (opcaoNumerica)
    {
        case 1:
            Console.Clear();
            Console.WriteLine("Digite o nome do produto:");
            string nome = Console.ReadLine()!;

            Console.WriteLine("Digite o preço:");
            decimal preco = decimal.Parse(Console.ReadLine()!);

            Console.WriteLine("Digite a quantidade:");
            int quantidade = int.Parse(Console.ReadLine()!);

            Produto produto = new(nome, preco, quantidade);
            estoque.AdicionarProduto(produto);

            Console.WriteLine($"O produto {produto.Nome} foi adicionado!");
            Console.Clear();
            ExibirMenu();
            break;

        case 3:
            Console.Clear();
            estoque.ExibirProdutos();
            Console.WriteLine("\nPressione qualquer tecla para voltar ao menu");
            Console.ReadKey();
            Console.Clear();
            ExibirMenu();
            break;
    }
}

Analisa ai,faça os testes e me envia os resultados.
Qualquer duvida comente ai.
Bons estudos.

então no caso foi criada uma nova classe de estoques para assim conseguir guardar os produtos dentro da classe de estoques? me explica por favor obrigadooo!

solução!

Olá Gerardo.
Vou tentar lhe explicar o que foi feito.
No código original, você estava tentando exibir a lista de produtos no estoque dentro da classe Produto.
Porém, dentro de cada instância da classe Produto, você tinha uma lista chamada listaProdutos, que é onde os produtos são armazenados.
A questão é que, quando você cria um objeto Produto dentro do seu método ExibirMenu(), ele está criando apenas um produto e não acessando a lista de produtos que você já adicionou no estoque. Cada objeto Produto tem sua própria lista vazia, por isso não era possível exibir os produtos corretamente.
A solução foi criar uma nova classe chamada Estoque, que vai ser responsável por armazenar e gerenciar a lista de produtos.
Isso permite que você tenha um único lugar onde todos os produtos do estoque sejam armazenados, e, a partir daí, você pode adicionar produtos ao estoque e também exibi-los.

O que foi feito:

  1. Classe Estoque: A nova classe foi criada para gerenciar a lista de produtos. Ela possui uma lista de objetos Produto (List<Produto> listaProdutos), onde os produtos serão armazenados. Além disso, ela tem métodos para:

    • Adicionar produtos ao estoque (AdicionarProduto(Produto produto)).
    • Exibir os produtos que estão no estoque (ExibirProdutos()).
    class Estoque
    {
        private List<Produto> listaProdutos = new();  // Armazena todos os produtos do estoque
    
        public void AdicionarProduto(Produto produto)
        {
            listaProdutos.Add(produto);  // Adiciona o produto à lista
        }
    
        public void ExibirProdutos()
        {
            Console.WriteLine("Produtos no estoque:\n");
            foreach (var produto in listaProdutos)
            {
                Console.WriteLine($"Nome: {produto.Nome}");
                Console.WriteLine($"Preço: {produto.Preco}");
                Console.WriteLine($"Quantidade: {produto.QuantidadeEmEstoque}");
                Console.WriteLine("--------------------------");
            }
        }
    }
    
  2. Uso da classe Estoque no Program.cs: Agora, em vez de tentar acessar a lista de produtos diretamente da classe Produto, você cria uma instância da classe Estoque (no caso, Estoque estoque = new();). A partir dessa instância de Estoque, você pode:

    • Adicionar produtos ao estoque usando o método AdicionarProduto().
    • Exibir todos os produtos no estoque usando o método ExibirProdutos().
    Estoque estoque = new();  // Instância da classe Estoque
    
    // No caso de adicionar produto:
    Produto produto = new(nome, preco, quantidade);
    estoque.AdicionarProduto(produto);
    
    // No caso de exibir os produtos:
    estoque.ExibirProdutos();
    
  3. Mudanças no ExibirMenu():

    • Quando você escolhe a opção 1 (Adicionar Produto), o código cria um novo produto e adiciona ele ao estoque.
    • Quando você escolhe a opção 3 (Exibir Produtos no Estoque), o código chama o método ExibirProdutos() da classe Estoque, que vai listar todos os produtos que foram adicionados até aquele momento.

Por que foi feita essa mudança?

  • Organização e separação de responsabilidades: Antes, a classe Produto estava sendo usada tanto para representar os produtos em si quanto para armazenar e gerenciar todos os produtos do estoque. No entanto, a responsabilidade de gerenciar o estoque não é bem atribuída à classe Produto. A classe Produto deve representar um produto individual, e não ser responsável pela lista de produtos. A classe Estoque foi criada para separar essas responsabilidades e melhorar a organização do código.
  • Reuso e escalabilidade: Agora que a lógica de gerenciamento do estoque está centralizada na classe Estoque, é mais fácil adicionar novos produtos ao estoque ou exibir a lista de produtos. Além disso, essa estrutura facilita a manutenção e expansão do código, caso você queira adicionar mais funcionalidades (como remover produtos, editar preços, etc.).

A ideia foi criar a classe Estoque para gerenciar a lista de produtos.
Isso resolve o problema de tentar acessar a lista de produtos dentro de cada instância de Produto e centraliza o gerenciamento dos produtos em uma única classe responsável, a classe Estoque.
Assim, você consegue adicionar e exibir os produtos no estoque de forma organizada e eficiente.
Faça os testes ai, analisa o código novamente e avise qualquer duvida.
Bons estudos.

Muito obrigado mano