Esercizio - Aggiungere dati di donazione suggeriti
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.
Si noti il codice sotto commento #1 che dichiara le variabili usate per popolare la matrice
ourAnimalsper ogni animale.È necessario dichiarare un'altra variabile
stringper 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 = "";Creare la variabile
suggestedDonationsotto la dichiarazione peranimalNickname.La dichiarazione per
suggestedDonationviene aggiunta con il codice seguente:string suggestedDonation = "";Individuare il codice per creare la matrice
ourAnimalsdopo 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
maxPetse dal numero6per le sei stringhe definite originariamente, ma senza spazio per i nuovi datisuggestedDonation.Aggiornare la matrice
ourAnimalsin modo che contenga7colonne di dati per ogni animale anziché6.La riga seguente mostra il codice aggiornato:
string[,] ourAnimals = new string[maxPets,7];Hai espanso la matrice
ourAnimalsper supportare i datisuggestedDonationaggiunti.
Aggiungere gli importi suggestedDonation ai dati di esempio
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;Inserire un valore
suggestedDonationsopra l'istruzionebreakpercase 0;e i successivi fino adefault: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;- Caso 0:
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;Si noti che i dati
suggestedDonationnon 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");.
Prima del commento #5, nella parte finale del blocco di codice, aggiungere il codice per convalidare che sia possibile eseguire il cast di
suggestedDonationcome 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
suggestedDonationvariabile comedecimal, il codice assegna un valoredecimalDonation = 45.00m;predefinito. Se il cast ha esito positivo,TryParsepopoladecimalDonation. In entrambi i casi,decimalDonationrappresenta un decimale corretto.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 optionsSi noti che la convalida non funziona ancora. Non dimenticare che è necessario dichiarare
decimalDonationper usarlo nel codice.Dopo il commento #2, dichiarare
decimalDonationdopostring menuSelection = "";:decimal decimalDonation = 0.00m;È il momento di popolare i dati
suggestedDonationper ogni animale domestico.Subito prima del commento n. 5, subito dopo la
TryParseparentesi chiusa}completata, aggiungere il codice seguente:ourAnimals[i, 6] = $"Suggested Donation: {decimalDonation:C2}";Si è usata la versione
decimalDonationdei dati sulla donazione suggerita. Si sono anche usate l'interpolazione di stringhe e la formattazione della valuta nell'output.Esaminare il modo in cui i dati sulla donazione suggerita vengono infine integrati nella matrice
ourAnimals.Il codice seguente popola la matrice
ourAnimalsnel contesto diTryParse():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 optionsSi noti che usando il codice
{decimalDonation:C2}la donazione suggerita, dadecimalDonation, 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.
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 datisuggestedDonationaggiunti.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:
Il codice venga compilato senza errori.
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.
Nel menu File di Visual Studio Code selezionare Salva.
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.
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 buildedotnet run. Il comandodotnet buildcompila 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 buildcomandi odotnet runda un percorso di cartella che non contiene i file, i comandi generano messaggi di errore.Al prompt dei comandi del TERMINALE immettere il comando seguente per compilare il codice del progetto:
dotnet buildDopo 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 buildedotnet runogni volta che è necessario testare il codice negli esercizi che seguono in questo modulo.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.; expectedsuggerisce che non è stato incluso;alla fine di un'istruzione. La parteProgram.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 buildcomando. Continuare fino a quando non si ha0 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.
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.00Se 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.
- Immettere "
Digitare
exitnel menu dell'app per terminare il programma e quindi chiudere il pannello del terminale.