Exercício – Adicionar os dados de doação sugeridos

Concluído

Nesta etapa do processo de desenvolvimento, você atualiza o código fornecido na pasta do projeto inicial, adicionando recursos para "sugestão de doação" ao aplicativo. O arquivo inicial project.cs deve estar aberto no Visual Studio Code. Retorne à unidade de preparação anterior se precisar de instruções para começar.

Criar recursos de "Sugestão de Doação"

Os recursos de doação adicionados exigem que você crie uma variável suggestedDonation e expanda a matriz ourAnimals para acomodar os novos dados de doação. Além disso, você precisa adicionar os valores de doação sugeridos para cada animal e implementar um valor padrão quando houver informações de sugestão de doação ausentes.

Adicionar suporte para dados de doação sugeridos

Você precisa criar uma variável para armazenar as sugestões de doação e expandir a matriz ourAnimals para armazenar os novos dados.

  1. Observe o código sob o comentário nº 1, que declara variáveis usadas para preencher a matriz ourAnimals para cada animal.

    Você precisa declarar outro string para os dados de sugestão de doação.

    // #1 the ourAnimals array will store the following: 
    string animalSpecies = "";
    string animalID = "";
    string animalAge = "";
    string animalPhysicalDescription = "";
    string animalPersonalityDescription = "";
    string animalNickname = "";
    
  2. Crie a variável suggestedDonation abaixo da declaração para animalNickname.

    A declaração para suggestedDonation é adicionada com o seguinte código:

    string suggestedDonation = "";
    
  3. Localize o código para criar a matriz ourAnimals após o comentário nº 3.

    A seguinte linha de código cria a matriz:

    string[,] ourAnimals = new string[maxPets, 6];

    Os tamanhos que definem as duas dimensões da matriz são o número máximo de animais de estimação maxPets e o número 6 das seis cadeias de caracteres originalmente definidas, mas sem espaço para os novos dados suggestedDonation.

  4. Atualize a matriz ourAnimals para conter "colunas" 7 de dados para cada animal em vez de 6.

    A seguinte linha mostra o código atualizado:

    string[,] ourAnimals = new string[maxPets, 7];

    Você expandiu a ourAnimals matriz para dar suporte aos dados adicionados suggestedDonation .

Adicionar valores suggestedDonation aos dados de exemplo

  1. Reserve um minuto para examinar case 0: dentro da instrução switch após o comentário nº 4.

    O código a seguir define os dados de exemplo do primeiro animal de estimação, antes da criação dos dados suggestedDonation. Caberia bem abaixo de animalNickname.

        case 0:
            animalSpecies = "dog";
            animalID = "d1";
            animalAge = "2";
            animalPhysicalDescription = "medium sized cream colored female golden retriever weighing about 45 pounds. housebroken.";
            animalPersonalityDescription = "loves to have her belly rubbed and likes to chase her tail. gives lots of kisses.";
            animalNickname = "lola";
            break;
    
  2. Insira um valor suggestedDonation acima da instrução break para case 0; por meio de default: com os seguintes valores:

    • Caso 0: suggestedDonation = "85.00";
    • Caso 1: suggestedDonation = "49.99";
    • Caso 2: suggestedDonation = "40.00";
    • Caso 3: suggestedDonation = "";
    • padrão: suggestedDonation = "";

    O seguinte código mostra o código case 0: com a adição de "suggestedDonation":

        case 0:
            animalSpecies = "dog";
            animalID = "d1";
            animalAge = "2";
            animalPhysicalDescription = "medium sized cream colored female golden retriever weighing about 45 pounds. housebroken.";
            animalPersonalityDescription = "loves to have her belly rubbed and likes to chase her tail. gives lots of kisses.";
            animalNickname = "lola";
            suggestedDonation = "85.00";
            break;
    
  3. No arquivo project.cs, localize a seguinte matriz preenchida com os dados de animais de estimação das instruções case (logo antes do comentário nº 5):

        ourAnimals[i, 0] = "ID #: " + animalID;
        ourAnimals[i, 1] = "Species: " + animalSpecies;
        ourAnimals[i, 2] = "Age: " + animalAge;
        ourAnimals[i, 3] = "Nickname: " + animalNickname;
        ourAnimals[i, 4] = "Physical description: " + animalPhysicalDescription;
        ourAnimals[i, 5] = "Personality: " + animalPersonalityDescription;
    
  4. Observe que os dados suggestedDonation não estão incluídos como parte do código inicial dos dados de exemplo para preencher a matriz.

    Faz sentido preencher a matriz com uma instrução como:

    ourAnimals[i, 6] = "Suggested Donation: "  + suggestedDonation;
    

    Mas você não adiciona esse código. Na próxima seção, você usará outra abordagem.

Validação de dados com TryParse()

A variável suggestedDonation deveria ser um valor numérico, mas é coletada e armazenada como uma string. Considere os casos futuros em que você precisa validar que suggestedDonation representa um decimal e que você pode convertê-lo em uma decimal para que ele esteja disponível para uso para cálculos de cobrança. Para evitar erros quando os usuários inserem números no formato de texto, por exemplo twenty, você precisa usar TryParse a validação.

Observação

Os exemplos de código neste exercício são projetados com base nas configurações de cultura dos EUA e usam um ponto (.) como separador decimal. Criar e executar o código com uma configuração de cultura que usa um separador decimal diferente (como uma vírgula ,) frequentemente fornece resultados ou erros inesperados. Para corrigir esse problema, substitua os separadores decimais de ponto nos exemplos de código pelo separador decimal local (como ,). Como alternativa, para executar um programa usando a configuração de cultura en-US, adicione: using System.Globalization;à parte superior do programa. Em seguida, após qualquer outra instrução using, adicione CultureInfo.CurrentCulture = new CultureInfo("en-US");.

  1. Antes do comentário nº 5, dentro do final do bloco de código, adicione o código para validar que suggestedDonation pode ser convertido em decimal.

    Adicione o código a seguir:

    if (!decimal.TryParse(suggestedDonation, out decimalDonation)){
        decimalDonation = 45.00m; // if suggestedDonation NOT a number, default to 45.00
    }
    

    Se a suggestedDonation variável não puder ser convertida como um decimal, o código atribuirá um valor decimalDonation = 45.00m;padrão. Se a conversão for bem-sucedida, então TryParse será preenchido com decimalDonation. De qualquer forma, decimalDonation representa um decimal adequado.

  2. Verifique se o código de validação está no lugar certo.

    As duas linhas adicionadas devem aparecer no código como as duas linhas superiores do código a seguir:

        if (!decimal.TryParse(suggestedDonation, out decimalDonation)){
            decimalDonation = 45.00m; // if suggestedDonation NOT a number, default to 45.00
        }
    }
    
    // #5 display the top-level menu options
    

    Observe que a validação ainda não funciona. Você não pode esquecer da necessidade de declarar decimalDonation para usá-lo no código.

  3. Após o comentário nº 2, declare decimalDonation depois de string menuSelection = "";:

    decimal decimalDonation = 0.00m;
    

    Por fim, você está pronto para preencher os dados de suggestedDonation para cada animal de estimação.

  4. Logo antes do comentário nº 5, imediatamente após o colchete de fechamento do TryParse} que você concluiu, adicione o seguinte código:

    ourAnimals[i, 6] = $"Suggested Donation: {decimalDonation:C2}";
    

    Você usou a versão decimalDonation dos dados de sugestão de doação. Você também usou a interpolação de cadeia de caracteres e a formatação de moeda na saída.

  5. Reserve um minuto para examinar como os dados de sugestão de doação finalmente entram na matriz ourAnimals.

    O código a seguir preenche a matriz ourAnimals no contexto do TryParse():

    if (!decimal.TryParse(suggestedDonation, out decimalDonation)){
        decimalDonation = 45.00m; // if suggestedDonation NOT a number, default to 45.00
        }
    ourAnimals[i, 6] = $"Suggested Donation: {decimalDonation:C2}";
    }
    
    // #5 display the top-level menu options
    

    Observe que, ao usar o código {decimalDonation:C2}, a doação sugerida de decimalDonation é exibida com o símbolo de moeda local e duas casas decimais, conforme indicado pela formatação de moeda :C2.

Examinar e atualizar onde a matriz ourAnimals deve ser usada

A adição dos dados suggestedDonation criados precisa de atualizações adicionais. A opção de menu "1. List all of our current pet information" não tem os dados adicionados.

  1. Observe o código sob o comentário nº 5, para o loop de menu dentro de case 1.

    O loop interno "for (int j = 0; j < 6; j++)" que imprime os atributos do animal de estimação precisa levar em conta os dados suggestedDonation adicionados.

  2. Atualize a condição de saída do código do loop interno. Aumentou a condição de saída em "1", portanto, torna-se j <7. Verifique se o código corresponde ao código a seguir:

    case "1":
    // list all pet info
    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine();
            for (int j = 0; j < 7; j++) // increased exit condition
            {
                Console.WriteLine(ourAnimals[i, j]);
            }
        }
    }
    

Visão geral do teste

Após efetuar várias adições ao código, você precisa confirmar se ele funciona conforme o esperado. As duas áreas de teste significativas são:

  1. O código está em conformidade e livre de erros.

  2. Ao selecionar a opção de menu 1, todas as informações de animais de estimação são exibidas:

    • A saída inclui todas as informações de animais de estimação de exemplo, incluindo: ID, espécie, idade, apelido, descrição física e descrição da personalidade.
    • Para cada animal de estimação, a sugestão de doação é exibida com o símbolo de moeda e precisão de duas casas decimais.

Verifique seu trabalho

Compile e execute para testar o código. Use estas etapas sempre que precisar testar seu código.

  1. No menu Arquivo do Visual Studio Code, selecione Salvar.

  2. No modo de exibição EXPLORER, clique com o botão direito do mouse em Starter e selecione Abrir no Terminal Integrado.

    Um painel “TERMINAL” será aberto abaixo da área do editor de código.

    Há diversas maneiras de abrir o terminal integrado do Visual Studio Code. Por exemplo, o menu superior fornece acesso ao painel TERMINAL no menu Exibir e no menu Terminal . Além disso, os atalhos de teclado que abrem o painel TERMINAL são uma opção valiosa para aumentar a eficiência de codificação. Todos esses métodos são aceitos.

  3. Observe que o painel “TERMINAL” inclui um prompt de linha de comando que mostra o caminho da pasta atual. Por exemplo:

    C:\Users\someuser\Desktop\GuidedProject\Starter>
    

    É possível usar o painel “TERMINAL” para executar comandos da CLI (interface de linha de comando), como dotnet build e dotnet run. O comando dotnet build compila o código e exibe mensagens de erro e de aviso relacionadas à sintaxe do código.

    Importante

    É necessário garantir que o prompt de comando do terminal esteja aberto na raiz do workspace do projeto. Nesse caso, a raiz do workspace do projeto é a pasta Starter, onde estão localizados os arquivos Starter.csproj e Program.cs. Quando você executa comandos no terminal, os comandos tentam executar ações usando o local da pasta atual. Se você tentar executar os comandos dotnet build ou dotnet run a partir de uma pasta que não contém os arquivos, os comandos gerarão mensagens de erro.

  4. No prompt de comando TERMINAL, para compilar o código do projeto, insira o seguinte comando: dotnet build

    Depois de alguns segundos, você deverá ver uma mensagem informando que seu build foi bem-sucedido e que você tem 0 Warnings and 0 Errors.

    Determining projects to restore...
    All projects are up-to-date for restore.
    Starter -> C:\Users\someuser\Desktop\GuidedProject\Starter\bin\Debug\net6.0\Starter.dll
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    

    Observação

    Use as etapas anteriores dotnet build e dotnet run sempre que precisar testar seu código nos exercícios a seguir neste módulo.

  5. Se você vir mensagens de erro ou aviso, corrija-as antes de continuar.

    As mensagens de erro e de aviso informam a linha do código em que o problema foi encontrado. A seguinte mensagem é um exemplo de mensagem de erro Build FAILED:

    C:\Users\someuser\Desktop\GuidedProject\Starter\Program.cs(53,18): error CS1002: ; expected [C:\Users\someuser\Desktop\GuidedProject\Starter\Starter.csproj]

    Essa mensagem informa o tipo de erro detectado e onde localizá-lo. Nesse caso, a mensagem informa que o arquivo Program.cs contém um erro – error CS1002: ; expected. O ; expected sugere que você esqueceu de incluir um ; no final de uma instrução. A parte Program.cs(53,18) da mensagem informa que o erro está na linha 53 do código, na posição 18 caracteres à esquerda.

    Um erro de sintaxe como esse impede que a Compilação seja bem-sucedida (FALHA na compilação). Algumas mensagens de compilação fornecem um "Aviso" ao invés de um "Erro", o que significa que há algo com o que se preocupar, mas você pode tentar executar o programa de qualquer maneira (Compilação bem-sucedida).

    Depois de corrigir os problemas e salvar as atualizações, você poderá executar o dotnet build comando novamente. Continue até que você tenha 0 Warning(s) and 0 Error(s).

    Se você tiver dificuldade para resolver um problema por conta própria, examine o código Program.cs na pasta Final incluída no download concluído durante a Instalação. O código Program.cs na pasta Final representa a conclusão de todos os exercícios neste módulo, portanto, ele inclui o código que você ainda não criou.

    O código da solução geralmente parece diferente do código Program.cs que você desenvolveu para este ponto no projeto guiado. No entanto, você pode examinar o código Program.cs no Final para ajudá-lo a isolar e corrigir um problema em seu código.

    Evite confiar no código da solução ao desenvolver sua própria solução. Lembre-se de que você aprende com seus erros e que todo desenvolvedor dedica algum tempo encontrando e corrigindo erros.

  6. Teste o aplicativo de console atualizado, no build do prompt de comando TERMINAL e execute o código do projeto com um comando inserindo: dotnet run. Quando o código é executado, dois itens de menu são exibidos.

    • Insira "1" para testar a saída "exibir todos os animais de estimação"
    • Insira "2" para testar a mensagem de espaço reservado "em construção"

    A saída do item de menu nº 1 deve corresponder de perto ao seguinte exemplo:

    ID #: d1
    Species: dog
    Age: 2
    Nickname: lola
    Physical description: medium sized cream colored female golden retriever weighing about 45 pounds. housebroken.
    Personality: loves to have her belly rubbed and likes to chase her tail. gives lots of kisses.
    Suggested Donation: $85.00
    
    ID #: d2
    Species: dog
    Age: 9
    Nickname: gus
    Physical description: large reddish-brown male golden retriever weighing about 85 pounds. housebroken.
    Personality: loves to have his ears rubbed when he greets you at the door, or at any time! loves to lean-in and give doggy hugs.
    Suggested Donation: $49.99
    
    ID #: c3
    Species: cat
    Age: 1
    Nickname: snow
    Physical description: small white female weighing about 8 pounds. litter box trained.
    Personality: friendly
    Suggested Donation: $40.00
    
    ID #: c4
    Species: cat
    Age:
    Nickname: lion
    Physical description:
    Personality:
    Suggested Donation: $45.00
    

    Se tudo funcionou conforme o esperado, parabéns! Caso contrário, procure o erro verificando as etapas da instrução de código correspondentes. Se necessário, comece novamente com um novo arquivo inicial de Project.cs e se ainda tiver problemas, confira o código da pasta da solução final deste exercício.

  7. Digite exit, no menu do aplicativo, para encerrar o programa e feche o painel “Terminal”.