Esercizio - Aggiungere dati di donazione suggeriti

Completato

In questo passaggio del processo di sviluppo si aggiorna il codice fornito nella cartella del progetto iniziale, aggiungendo all'applicazione funzionalità per suggerire una donazione. Il file project.cs iniziale dovrebbe essere aperto in Visual Studio Code. Se sono necessarie istruzioni per iniziare, tornare all'unità di preparazione precedente.

Creare le funzionalità per suggerire una donazione

Le funzionalità di donazione aggiunte richiedono la creazione della variabile suggestedDonation e l'espansione della matrice ourAnimals per supportare i nuovi dati di donazione. È anche necessario aggiungere gli importi delle donazioni suggerite per ogni animale e implementare un importo predefinito quando mancano le informazioni di donazione suggerite.

Aggiungere il supporto per i dati sulla donazione suggerita

È necessario creare una nuova variabile per contenere le donazioni suggerite ed espandere la matrice ourAnimals per contenere i nuovi dati.

  1. Si noti il codice sotto commento #1 che dichiara le variabili usate per popolare la matrice ourAnimals per ogni animale.

    È necessario dichiarare un'altra variabile string per i dati sulla donazione suggerita.

    // #1 the ourAnimals array will store the following: 
    string animalSpecies = "";
    string animalID = "";
    string animalAge = "";
    string animalPhysicalDescription = "";
    string animalPersonalityDescription = "";
    string animalNickname = "";
    
  2. Creare la variabile suggestedDonation sotto la dichiarazione per animalNickname.

    La dichiarazione per suggestedDonation viene aggiunta con il codice seguente:

    string suggestedDonation = "";
    
  3. Individuare il codice per creare la matrice ourAnimals dopo il commento #3.

    La riga di codice seguente crea la matrice:

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

    Le due dimensioni della matrice sono definite dal numero massimo di animali maxPets e dal numero 6 per le sei stringhe definite originariamente, ma senza spazio per i nuovi dati suggestedDonation.

  4. Aggiornare la matrice ourAnimals in modo che contenga 7 colonne di dati per ogni animale anziché 6.

    La riga seguente mostra il codice aggiornato:

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

    Hai espanso la matrice ourAnimals per supportare i dati suggestedDonation aggiunti.

Aggiungere gli importi suggestedDonation ai dati di esempio

  1. Soffermarsi qualche istante a esaminare case 0: all'interno dell'istruzione switch dopo il commento #4.

    Il codice seguente definisce i dati di esempio per il primo animale prima della creazione dei dati suggestedDonation. Starebbe bene sotto il nome dell'animale, 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. Inserire un valore suggestedDonation sopra l'istruzione break per case 0; e i successivi fino a default: con i valori seguenti:

    • Caso 0: suggestedDonation = "85.00";
    • Caso 1: suggestedDonation = "49.99";
    • Caso 2: suggestedDonation = "40.00";
    • Caso 3: suggestedDonation = "";
    • predefinito: suggestedDonation = "";

    Il codice seguente mostra il codice case 0: con l'aggiunta di '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. Nel file project.cs individuare la matrice seguente popolata con i dati degli animali domestici dalle istruzioni case (è appena prima del commento 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. Si noti che i dati suggestedDonation non sono inclusi nel codice di avvio dei dati di esempio per popolare la matrice.

    Avrebbe senso popolare la matrice con un'istruzione simile alla seguente:

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

    Ma non si aggiunge tale codice. Nella sezione successiva si userà un altro approccio.

Convalida dei dati con TryParse()

La variabile suggestedDonation deve essere un valore numerico, ma viene raccolta e archiviata come valore string. Si considerino i casi futuri in cui è necessario convalidare che suggestedDonation rappresenta un decimale e che è possibile convertirlo in un decimale in modo che sia disponibile per l'uso per i calcoli di fatturazione. Per evitare errori quando gli utenti immettono numeri in formato testo, ad esempio twenty, è necessario usare TryParse la convalida.

Nota

Gli esempi di codice di questo esercizio sono progettati in base all'impostazione culturale "en-US", ovvero inglese statunitense, in cui viene usato il punto (.) come separatore decimale. La compilazione e l'esecuzione del codice con un'impostazione culturale che utilizza un separatore decimale diverso, ad esempio una virgola ,, restituisce spesso risultati o errori imprevisti. Per risolvere questo problema, sostituire, negli esempi di codice, i separatori decimali sotto forma di punto, con il separatore decimale locale, ad esempio ,. In alternativa, per eseguire un programma usando l'impostazione culturale en-US, aggiungi: using System.Globalization; all'inizio del tuo programma. E dopo qualsiasi altra using istruzione, aggiungere CultureInfo.CurrentCulture = new CultureInfo("en-US");.

  1. Prima del commento #5, nella parte finale del blocco di codice, aggiungere il codice per convalidare che sia possibile eseguire il cast di suggestedDonation come decimale.

    Aggiungere il codice seguente:

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

    Se non è possibile eseguire il cast della suggestedDonation variabile come decimal, il codice assegna un valore decimalDonation = 45.00m;predefinito. Se il cast ha esito positivo, TryParse popola decimalDonation. In entrambi i casi, decimalDonation rappresenta un decimale corretto.

  2. Assicurarsi che il codice di convalida sia nella posizione giusta.

    Le due righe aggiunte dovrebbero comparire nel codice come le prime due righe del codice seguente:

        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
    

    Si noti che la convalida non funziona ancora. Non dimenticare che è necessario dichiarare decimalDonation per usarlo nel codice.

  3. Dopo il commento #2, dichiarare decimalDonation dopo string menuSelection = "";:

    decimal decimalDonation = 0.00m;
    

    È il momento di popolare i dati suggestedDonation per ogni animale domestico.

  4. Subito prima del commento n. 5, subito dopo la TryParse parentesi chiusa } completata, aggiungere il codice seguente:

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

    Si è usata la versione decimalDonation dei dati sulla donazione suggerita. Si sono anche usate l'interpolazione di stringhe e la formattazione della valuta nell'output.

  5. Esaminare il modo in cui i dati sulla donazione suggerita vengono infine integrati nella matrice ourAnimals.

    Il codice seguente popola la matrice ourAnimals nel contesto di 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
    

    Si noti che usando il codice {decimalDonation:C2} la donazione suggerita, da decimalDonation, viene visualizzata con il simbolo di valuta locale e due posti decimali, come indicato dalla formattazione della valuta :C2.

Esaminare e aggiornare la posizione in cui usare la matrice ourAnimals

L'aggiunta dei dati suggestedDonation creati richiede ulteriori aggiornamenti. L'opzione di menu "1. List all of our current pet information" non contiene i dati aggiunti.

  1. Si noti il codice sotto commento #5 per il ciclo di menu all'interno di case 1.

    Il ciclo interno "for (int j = 0; j < 6; j++)" che stampa gli attributi dell'animale domestico deve tenere conto dei dati suggestedDonation aggiunti.

  2. Aggiornare la condizione di uscita del codice del ciclo interno. Ho incrementato la condizione di uscita di "1", per cui diventa j <7. Verificare che il codice corrisponda al codice seguente:

    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]);
            }
        }
    }
    

Panoramica dei test

Dopo aver apportato diverse aggiunte al codice, è necessario verificare che funzioni come previsto. Occorre testare principalmente che:

  1. Il codice venga compilato senza errori.

  2. Selezionando l'opzione di menu 1 vengano visualizzate tutte le informazioni sugli animali domestici:

    • L'output deve includere tutte le informazioni sugli animali di esempio, tra cui ID, specie, età, nome, descrizione fisica e descrizione della personalità.
    • Per ogni animale, la donazione suggerita deve essere visualizzata con un simbolo di valuta e una precisione di due cifre decimali.

Eseguire il test di quanto fatto finora

Compilare ed eseguire per testare il codice. Seguire questi passaggi ogni volta che è necessario testare il codice.

  1. Nel menu File di Visual Studio Code selezionare Salva.

  2. Nella visualizzazione ESPLORA RISORSE fare clic con il pulsante destro del mouse su Starter e quindi scegliere Apri nel terminale integrato.

    Sotto l'area dell'editor di codice si dovrebbe aprire un pannello TERMINALE.

    Esistono diversi modi per aprire il terminale integrato di Visual Studio Code. Ad esempio, il menu in alto consente di accedere al pannello TERMINALE dal menu Visualizza e dal menu Terminale. Inoltre, i tasti di scelta rapida che aprono il pannello TERMINALE sono un'opzione utile per aumentare l'efficienza del codice. Ogni metodo è accettabile.

  3. Si noti che il pannello TERMINALE include un prompt della riga di comando, che mostra il percorso della cartella corrente. Ad esempio:

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

    È possibile usare il pannello TERMINALE per eseguire i comandi dell'interfaccia della riga di comando, ad esempio dotnet build e dotnet run. Il comando dotnet build compila il codice e visualizza i messaggi di errore e di avviso correlati alla sintassi del codice.

    Importante

    È necessario assicurarsi che il prompt dei comandi del terminale sia aperto alla radice dell'area di lavoro del progetto. In questo caso, la radice dell'area di lavoro del progetto è la cartella Starter, in cui si trovano i file Starter.csproj e Program.cs. Quando si eseguono comandi nel terminale, i comandi tentano di eseguire azioni usando il percorso corrente della cartella. Se si tenta di eseguire i dotnet build comandi o dotnet run da un percorso di cartella che non contiene i file, i comandi generano messaggi di errore.

  4. Al prompt dei comandi del TERMINALE immettere il comando seguente per compilare il codice del progetto: dotnet build

    Dopo un paio di secondi, verrà visualizzato un messaggio che informa che la compilazione è riuscita e che si dispone di 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\net10.0\Starter.dll
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    

    Nota

    Usare i passaggi precedenti dotnet build e dotnet run ogni volta che è necessario testare il codice negli esercizi che seguono in questo modulo.

  5. Se vengono visualizzati messaggi di errore o di avviso, è necessario correggerli prima di continuare.

    I messaggi di errore e avviso indicano la riga di codice in cui è presente il problema. Di seguito è riportato un esempio di messaggio di errore Build FAILED:

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

    Questo messaggio indica il tipo di errore rilevato e dove trovarlo. In questo caso, il messaggio indica che il file Program.cs contiene un errore, error CS1002: ; expected. ; expected suggerisce che non è stato incluso ; alla fine di un'istruzione. La parte Program.cs(53,18) del messaggio indica dove si trova l'errore, in questo caso nella riga di codice 53, in una posizione a 18 caratteri di distanza da sinistra.

    Un errore di sintassi come questo impedisce la corretta esecuzione della compilazione (Compilazione NON RIUSCITA). Alcuni messaggi di compilazione forniscono un messaggio di avviso anziché un "Errore", ovvero c'è qualcosa da preoccuparsi, ma è possibile provare comunque a eseguire il programma (compilazione riuscita).

    Dopo aver risolto i problemi e salvato gli aggiornamenti, è possibile eseguire di nuovo il dotnet build comando. Continuare fino a quando non si ha 0 Warning(s) and 0 Error(s).

    Se si riscontrano difficoltà a risolvere un problema autonomamente, esaminare il codice Program.cs nella cartella Finale inclusa nel download completato durante l'installazione. Il codice Program.cs nella cartella Finale rappresenta la conclusione di tutti gli esercizi in questo modulo, quindi include codice che non è ancora stato creato.

    Il codice della soluzione è spesso diverso dal codice Program.cs sviluppato fino a questo punto nel progetto guidato. Tuttavia, è possibile esaminare il codice Program.cs in Final per isolare e risolvere un problema nel codice.

    Evitare di basarsi sul codice della soluzione durante lo sviluppo di una soluzione personalizzata. Tenere presente che si impara dai propri errori e che ogni sviluppatore dedica tempo a trovare e correggere gli errori.

  6. Testare l'app console aggiornata. Al prompt dei comandi del TERMINALE compilare ed eseguire il codice del progetto con un comando immettendo dotnet run. Quando il codice viene eseguito, vengono visualizzate due voci di menu.

    • Immettere "1" per testare l'output del comando per visualizzare tutti gli animali domestici
    • Immettere "2" per testare il messaggio segnaposto ""under construction"

    L'output per la voce di menu #1 dovrebbe corrispondere strettamente all'esempio seguente:

    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 tutto ha funzionato come previsto, congratulazioni! In caso contrario, cercare l'errore controllando i passaggi di istruzioni del codice coinvolti. Se necessario, ricominciare con un nuovo file Project.cs iniziale e, se si verificano ancora problemi, controllare il codice nella cartella della soluzione per questo esercizio.

  7. Digitare exit nel menu dell'app per terminare il programma e quindi chiudere il pannello del terminale.