Exercício – Adicionar os dados de doação sugeridos
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.
Observe o código sob o comentário nº 1, que declara variáveis usadas para preencher a matriz
ourAnimalspara cada animal.Você precisa declarar outro
stringpara 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 = "";Crie a variável
suggestedDonationabaixo da declaração paraanimalNickname.A declaração para
suggestedDonationé adicionada com o seguinte código:string suggestedDonation = "";Localize o código para criar a matriz
ourAnimalsapó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
maxPetse o número6das seis cadeias de caracteres originalmente definidas, mas sem espaço para os novos dadossuggestedDonation.Atualize a matriz
ourAnimalspara conter "colunas"7de dados para cada animal em vez de6.A seguinte linha mostra o código atualizado:
string[,] ourAnimals = new string[maxPets,7];Você expandiu a
ourAnimalsmatriz para dar suporte aos dados adicionadossuggestedDonation.
Adicionar valores suggestedDonation aos dados de exemplo
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 deanimalNickname.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;Insira um valor
suggestedDonationacima da instruçãobreakparacase 0;por meio dedefault: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;- Caso 0:
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;Observe que os dados
suggestedDonationnã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");.
Antes do comentário nº 5, dentro do final do bloco de código, adicione o código para validar que
suggestedDonationpode 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
suggestedDonationvariável não puder ser convertida como umdecimal, o código atribuirá um valordecimalDonation = 45.00m;padrão. Se a conversão for bem-sucedida, entãoTryParseserá preenchido comdecimalDonation. De qualquer forma,decimalDonationrepresenta um decimal adequado.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 optionsObserve que a validação ainda não funciona. Você não pode esquecer da necessidade de declarar
decimalDonationpara usá-lo no código.Após o comentário nº 2, declare
decimalDonationdepois destring menuSelection = "";:decimal decimalDonation = 0.00m;Por fim, você está pronto para preencher os dados de
suggestedDonationpara cada animal de estimação.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
decimalDonationdos 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.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
ourAnimalsno contexto doTryParse():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 optionsObserve que, ao usar o código
{decimalDonation:C2}, a doação sugerida dedecimalDonationé 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.
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 dadossuggestedDonationadicionados.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:
O código está em conformidade e livre de erros.
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.
No menu Arquivo do Visual Studio Code, selecione Salvar.
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.
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 buildedotnet run. O comandodotnet buildcompila 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 buildoudotnet runa partir de uma pasta que não contém os arquivos, os comandos gerarão mensagens de erro.No prompt de comando TERMINAL, para compilar o código do projeto, insira o seguinte comando:
dotnet buildDepois 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 buildedotnet runsempre que precisar testar seu código nos exercícios a seguir neste módulo.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; expectedsugere que você esqueceu de incluir um;no final de uma instrução. A parteProgram.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 buildcomando novamente. Continue até que você tenha0 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.
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.00Se 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.
- Insira "
Digite
exit, no menu do aplicativo, para encerrar o programa e feche o painel “Terminal”.