From 2344912a1aacdb5a61eae466681deedc562c7435 Mon Sep 17 00:00:00 2001 From: ipvg Date: Tue, 23 Jul 2024 00:58:55 -0400 Subject: [PATCH] avnc 018 --- .editorconfig | 25 +- .../018_csharp.md | 185 +++++++++++++ .../GuidedProject/Final/Final.csproj | 10 + .../GuidedProject/Final/Program.cs | 255 ++++++++++++++++++ .../GuidedProject/Own/Own.csproj | 10 + .../GuidedProject/Own/Program.cs | 76 ++++++ .../GuidedProject/Starter/Program.cs | 90 +++++++ .../GuidedProject/Starter/Starter.csproj | 10 + 8 files changed, 656 insertions(+), 5 deletions(-) create mode 100644 018_Conditional_branching_and_looping/018_csharp.md create mode 100644 018_Conditional_branching_and_looping/GuidedProject/Final/Final.csproj create mode 100644 018_Conditional_branching_and_looping/GuidedProject/Final/Program.cs create mode 100644 018_Conditional_branching_and_looping/GuidedProject/Own/Own.csproj create mode 100644 018_Conditional_branching_and_looping/GuidedProject/Own/Program.cs create mode 100644 018_Conditional_branching_and_looping/GuidedProject/Starter/Program.cs create mode 100644 018_Conditional_branching_and_looping/GuidedProject/Starter/Starter.csproj diff --git a/.editorconfig b/.editorconfig index a30363b..b50b301 100644 --- a/.editorconfig +++ b/.editorconfig @@ -15,13 +15,28 @@ csharp_new_line_before_finally = false # csharp_new_line_before_members_in_anonymous_types = false # csharp_new_line_between_query_expression_clauses = false -#IDE1006 -dotnet_naming_style.camel_case.capitalization = camel_case +# IDE1006 +# dotnet_naming_style.camel_case.capitalization = camel_case # symbols -dotnet_naming_symbols.private_symbols.applicable_accessibilities = private -dotnet_naming_symbols.public_symbols.applicable_accessibilities = public, protected -dotnet_naming_symbols.interface_types.applicable_kinds = interface +# dotnet_naming_symbols.private_symbols.applicable_accessibilities = private +# dotnet_naming_symbols.public_symbols.applicable_accessibilities = public, protected +# dotnet_naming_symbols.interface_types.applicable_kinds = interface # rules dotnet_naming_rule.camel_case_for_private.severity = warning dotnet_naming_rule.camel_case_for_private.symbols = private_symbols dotnet_naming_rule.camel_case_for_private.style = camel_case + +dotnet_naming_style.variable_style.capitalization = camel_case +dotnet_naming_style.variable_style.required_prefix = _ +dotnet_naming_style.variable_style.required_suffix = + +# Enforce custom snake_case-like naming for variable names +# dotnet_naming_rule.snake_case_like.variables.severity = error +# dotnet_naming_rule.snake_case_like.variables.symbols = variable +# dotnet_naming_rule.snake_case_like.variables.style = custom_snake_case_like +# +# dotnet_naming_symbols.variable.applicable_kinds = field, local, parameter + +#dotnet_naming_style.custom_snake_case_like.capitalization = camel_case +#dotnet_naming_style.custom_snake_case_like.required_prefix = _ +#dotnet_naming_style.custom_snake_case_like.required_suffix = diff --git a/018_Conditional_branching_and_looping/018_csharp.md b/018_Conditional_branching_and_looping/018_csharp.md new file mode 100644 index 0000000..f3698be --- /dev/null +++ b/018_Conditional_branching_and_looping/018_csharp.md @@ -0,0 +1,185 @@ +# Guided project - Develop conditional branching and looping structures in C# + +Gain experience developing a console app that implements selection and +iteration statements to achieve app specifications. + +### Learning objectives + +In this module, you'll practice how to: + +- Use Visual Studio Code to develop a C# console application that uses a +combination of selection and iteration statements to implement logical +workflows in accordance with supplied application data and user interactions. +- Evaluate the underlying conditions and make an informed decision when choosing +between `if-elseif-else` and `switch` statements, and between `foreach`, +`for`, `while`, and `do` iteration statements. +- Scope variables at an appropriate level within an application. + +## Introduction + +It's common for developers to begin a project by developing the features that +import or generate application data. Once your application has access to the +data it depends on, you can begin developing the features that process data and +generate reports. + +Suppose you're a developer who likes to support the local community. You and +some of your friends started a business that helps find new homes for stray or +abandoned cats and dogs. Your business started off small, with just a couple of +strays, but it's starting to grow. You want to create an application that will +help you match the animals in your care with people looking for a pet. You've +found that it's important to have a detailed description of the animals to +share with potential owners. In addition, being able to describe the +personality of the dog or cat makes them more appealing to potential owners. +You decide to create an application that helps you manage information about the +dogs and cats you're caring for. + +This module guides you through the process of developing the data-centric +features of the Contoso Pets application. You'll use selection and iteration +statements to create sample data, list the animals in your care, and add new +animals to your business. Throughout the application, you'll use variables and +expressions to control the execution of code branches. You will also ensure +that variables are scoped appropriately. + +The application you develop will: + +- Add predefined sample data to the pets array. +- Iterate a "menu options and user selection" code block to establish the outer +loop of your application. +- Implement code branches corresponding to the user's menu selections. +- Display all the information contained in the array used to store pet data +(based on user's menu selection). +- Iterate an "add new animal information" code block that enables the user to +add one or more new animals to the pets array (based on user's menu selection). + +By the end of this module, you will be able to develop code that combines +selection and iteration statements to achieve your application design goals. + +> Note +> This is a guided project module where you’ll complete an end-to-end project +by following step-by-step instructions. + +### Learning Objectives + +In this module, you'll practice how to: + +- Develop a C# console application that uses a combination of selection and +iteration statements to implement logical workflows. +- Evaluate the underlying conditions in your application and make an informed +decision between selection statement options. +- Scope variables at an appropriate level within an application. + +--- + +## Prepare + +In this guided project, you'll develop the initial version of a C# application. +Your application will use boolean expressions, selection statements, and +iteration statements to implement the features of a design specification. As you develop the application, you'll need to scope variables at the appropriate level. + +### Project overview + +You're working on the Contoso Pets application, an application that helps place +pets in new homes. The specifications for your application are: + +- Create a C# console application. + +- Store application data in a multidimensional string array named +`ourAnimals`. + +- The `ourAnimals` array includes the following "pet characteristics" for each +animal: + + - Pet ID #. + - Pet species (cat or dog). + - Pet age (years). + - A description of the pet's physical condition/characteristics. + - A description of the pet's personality. + - The pet's nickname. + +- Implement a sample dataset that represents dogs and cats currently in your +care. + +- Display menu options to access the main features of the application. + +- The main features enable the following tasks: + + - List the pet information for all animals in the ourAnimals array. + + - Add new animals to the ourAnimals array. The following conditions apply: + + - The pet species (dog or cat) must be entered when a new animal is added to the ourAnimals array. + - A pet ID must be programmatically generated when a new animal is added to the ourAnimals array. + - Some physical characteristics for a pet may be unknown until a veterinarian's examination. For example: age, breed, and neutered/spayed status. + - An animal's nickname and personality may be unknown when a pet first arrives. + +- Ensure animal ages and physical descriptions are complete. This may be required after a veterinarian's examination. + +- Ensure animal nicknames and personality descriptions are complete (this action can occur after the team gets to know a pet). + +- Edit an animal’s age (if a pet's birth date is known and the pet has a birthday while in our care). + +- Edit an animal’s personality description (a pet may behave differently after spending more time in our care). + +- Display all cats that meet user specified physical characteristics. + +- Display all dogs that meet user specified physical characteristics. + +An initial version of the application has already been completed. The Starter +code project for this Guided project module includes a Program.cs file that +provides the following code features: + +- The code declares variables used to collect and process pet data and menu +item selections. + +- The code declares the `ourAnimals` array. + +- The code uses a for loop around an `if-elseif-else` construct to populate the +`ourAnimals` array with a sample dataset. + +- The code displays the following main menu options for user selection: + ```txt + 1. List all of our current pet information. + 2. Assign values to the ourAnimals array fields. + 3. Ensure animal ages and physical descriptions are complete. + 4. Ensure animal nicknames and personality descriptions are complete. + 5. Edit an animal’s age. + 6. Edit an animal’s personality description. + 7. Display all cats with a specified characteristic. + 8. Display all dogs with a specified characteristic. + + Enter menu item selection or type "Exit" to exit the program + ``` + +- The code reads the user's menu item selection and displays a message echoing +their selection. + +Your goal is to develop the features that implement the first two menu options. +To achieve this goal, you'll complete the following tasks: + +- Update the code that's used to create the sample data for the app. +- Construct a loop around the main menu and create a selection statement that +establishes a code branch for each menu option. +- Write the code to display all ourAnimals array data (menu option 1). +- Build a loop for entering new ourAnimals array data (menu option 2 - part 1). +- Write code to read and save new ourAnimals array data (menu option 2 - part 2). + +You'll test your application at each stage of the development process. + +## Setup + +Use the following steps to prepare for the Guided project exercises. + +To download a zip file containing the Starter project code, select the +following link: +[Lab Files](https://github.com/MicrosoftLearning/Guided-project-branching-looping-CSharp/archive/refs/heads/main.zip). + +Unzip the download files. + +Unzip the files in your development environment. Consider using your PC as your +development environment so that you have access to your code after completing +this module. If you aren't using your PC as your development environment, you +can unzip the files in a sandbox or hosted environment. + +You're now ready to begin the Guided project exercises. Good luck! + +--- diff --git a/018_Conditional_branching_and_looping/GuidedProject/Final/Final.csproj b/018_Conditional_branching_and_looping/GuidedProject/Final/Final.csproj new file mode 100644 index 0000000..91b464a --- /dev/null +++ b/018_Conditional_branching_and_looping/GuidedProject/Final/Final.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/018_Conditional_branching_and_looping/GuidedProject/Final/Program.cs b/018_Conditional_branching_and_looping/GuidedProject/Final/Program.cs new file mode 100644 index 0000000..79e9c91 --- /dev/null +++ b/018_Conditional_branching_and_looping/GuidedProject/Final/Program.cs @@ -0,0 +1,255 @@ +// the ourAnimals array will store the following: +string animalSpecies = ""; +string animalID = ""; +string animalAge = ""; +string animalPhysicalDescription = ""; +string animalPersonalityDescription = ""; +string animalNickname = ""; + +// variables that support data entry +int maxPets = 8; +string? readResult; +string menuSelection = ""; + +// array used to store runtime data, there is no persisted data +string[,] ourAnimals = new string[maxPets, 6]; + +// create some initial ourAnimals array entries +for (int i = 0; i < maxPets; i++) { + switch (i) { + case 0: + animalSpecies = "dog"; + animalID = "d1"; + animalAge = "2"; + animalPhysicalDescription = "medium sized cream colored female golden retriever weighing about 65 pounds. housebroken."; + animalPersonalityDescription = "loves to have her belly rubbed and likes to chase her tail. gives lots of kisses."; + animalNickname = "lola"; + break; + case 1: + animalSpecies = "dog"; + animalID = "d2"; + animalAge = "9"; + animalPhysicalDescription = "large reddish-brown male golden retriever weighing about 85 pounds. housebroken."; + animalPersonalityDescription = "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."; + animalNickname = "loki"; + break; + case 2: + animalSpecies = "cat"; + animalID = "c3"; + animalAge = "1"; + animalPhysicalDescription = "small white female weighing about 8 pounds. litter box trained."; + animalPersonalityDescription = "friendly"; + animalNickname = "Puss"; + break; + case 3: + animalSpecies = "cat"; + animalID = "c4"; + animalAge = "?"; + animalPhysicalDescription = ""; + animalPersonalityDescription = ""; + animalNickname = ""; + break; + default: + animalSpecies = ""; + animalID = ""; + animalAge = ""; + animalPhysicalDescription = ""; + animalPersonalityDescription = ""; + animalNickname = ""; + break; + } + + 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; +} + +do { + // display the top-level menu options + + Console.Clear(); + Console.WriteLine("Welcome to the Contoso PetFriends app. Your main menu options are:"); + Console.WriteLine(" 1. List all of our current pet information"); + Console.WriteLine(" 2. Add a new animal friend to the ourAnimals array"); + Console.WriteLine(" 3. Ensure animal ages and physical descriptions are complete"); + Console.WriteLine(" 4. Ensure animal nicknames and personality descriptions are complete"); + Console.WriteLine(" 5. Edit an animal’s age"); + Console.WriteLine(" 6. Edit an animal’s personality description"); + Console.WriteLine(" 7. Display all cats with a specified characteristic"); + Console.WriteLine(" 8. Display all dogs with a specified characteristic"); + Console.WriteLine(); + Console.WriteLine("Enter your selection number (or type Exit to exit the program)"); + + readResult = Console.ReadLine(); + if (readResult != null) { + menuSelection = readResult.ToLower(); + // NOTE: We could put a do statement around the menuSelection entry to + // ensure a valid entry, but we use a conditional statement below that + // only processes the valid entry values, so the do statement is not + // required here. + } + + // use switch-case to process the selected menu option + switch (menuSelection) { + case "1": + // List all of our current pet information + for (int i = 0; i < maxPets; i++) { + if (ourAnimals[i, 0] != "ID #: ") { + Console.WriteLine(); + for (int j = 0; j < 6; j++) { + Console.WriteLine(ourAnimals[i, j]); + } + } + } + Console.WriteLine("\n\rPress the Enter key to continue"); + readResult = Console.ReadLine(); + break; + case "2": + // Add a new animal friend to the ourAnimals array + string anotherPet = "y"; + int petCount = 0; + for (int i = 0; i < maxPets; i++) { + if (ourAnimals[i, 0] != "ID #: ") { + petCount += 1; + } + } + if (petCount < maxPets) { + Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more."); + } + while (anotherPet == "y" && petCount < maxPets) { + bool validEntry = false; + // get species (cat or dog) - string animalSpecies is a required field + do { + Console.WriteLine("\n\rEnter 'dog' or 'cat' to begin a new entry"); + readResult = Console.ReadLine(); + if (readResult != null) { + animalSpecies = readResult.ToLower(); + if (animalSpecies != "dog" && animalSpecies != "cat") { + //Console.WriteLine($"You entered: {animalSpecies}."); + validEntry = false; + } else { + validEntry = true; + } + } + } while (validEntry == false); + // build the animal the ID number - for example C1, C2, D3 (for Cat 1, Cat 2, Dog 3) + animalID = animalSpecies.Substring(0, 1) + (petCount + 1).ToString(); + // get the pet's age. can be ? at initial entry. + do { + int petAge; + Console.WriteLine("Enter the pet's age or enter ? if unknown"); + readResult = Console.ReadLine(); + if (readResult != null) { + animalAge = readResult; + if (animalAge != "?") { + validEntry = int.TryParse(animalAge, out petAge); + } else { + validEntry = true; + } + } + } while (validEntry == false); + // get a description of the pet's physical appearance/condition - animalPhysicalDescription can be blank. + do { + Console.WriteLine("Enter a physical description of the pet (size, color, gender, weight, housebroken)"); + readResult = Console.ReadLine(); + if (readResult != null) { + animalPhysicalDescription = readResult.ToLower(); + if (animalPhysicalDescription == "") { + animalPhysicalDescription = "tbd"; + } + } + } while (animalPhysicalDescription == ""); + // get a description of the pet's personality - animalPersonalityDescription can be blank. + do { + Console.WriteLine("Enter a description of the pet's personality (likes or dislikes, tricks, energy level)"); + readResult = Console.ReadLine(); + if (readResult != null) { + animalPersonalityDescription = readResult.ToLower(); + if (animalPersonalityDescription == "") { + animalPersonalityDescription = "tbd"; + } + } + } while (animalPersonalityDescription == ""); + // get the pet's nickname. animalNickname can be blank. + do { + Console.WriteLine("Enter a nickname for the pet"); + readResult = Console.ReadLine(); + if (readResult != null) { + animalNickname = readResult.ToLower(); + if (animalNickname == "") { + animalNickname = "tbd"; + } + } + } while (animalNickname == ""); + // store the pet information in the ourAnimals array (zero based) + ourAnimals[petCount, 0] = "ID #: " + animalID; + ourAnimals[petCount, 1] = "Species: " + animalSpecies; + ourAnimals[petCount, 2] = "Age: " + animalAge; + ourAnimals[petCount, 3] = "Nickname: " + animalNickname; + ourAnimals[petCount, 4] = "Physical description: " + animalPhysicalDescription; + ourAnimals[petCount, 5] = "Personality: " + animalPersonalityDescription; + // increment petCount (the array is zero-based, so we increment the counter after adding to the array) + petCount = petCount + 1; + // check maxPet limit + if (petCount < maxPets) { + // another pet? + Console.WriteLine("Do you want to enter info for another pet (y/n)"); + do { + readResult = Console.ReadLine(); + if (readResult != null) { + anotherPet = readResult.ToLower(); + } + + } while (anotherPet != "y" && anotherPet != "n"); + } + } + if (petCount >= maxPets) { + Console.WriteLine("We have reached our limit on the number of pets that we can manage."); + Console.WriteLine("Press the Enter key to continue."); + readResult = Console.ReadLine(); + } + break; + case "3": + // Ensure animal ages and physical descriptions are complete + Console.WriteLine("Challenge Project - please check back soon to see progress."); + Console.WriteLine("Press the Enter key to continue."); + readResult = Console.ReadLine(); + break; + case "4": + // Ensure animal nicknames and personality descriptions are complete + Console.WriteLine("Challenge Project - please check back soon to see progress."); + Console.WriteLine("Press the Enter key to continue."); + readResult = Console.ReadLine(); + break; + case "5": + // Edit an animal’s age"); + Console.WriteLine("UNDER CONSTRUCTION - please check back next month to see progress."); + Console.WriteLine("Press the Enter key to continue."); + readResult = Console.ReadLine(); + break; + case "6": + // Edit an animal’s personality description"); + Console.WriteLine("UNDER CONSTRUCTION - please check back next month to see progress."); + Console.WriteLine("Press the Enter key to continue."); + readResult = Console.ReadLine(); + break; + case "7": + // Display all cats with a specified characteristic + Console.WriteLine("UNDER CONSTRUCTION - please check back next month to see progress."); + Console.WriteLine("Press the Enter key to continue."); + readResult = Console.ReadLine(); + break; + case "8": + // Display all dogs with a specified characteristic + Console.WriteLine("UNDER CONSTRUCTION - please check back next month to see progress."); + Console.WriteLine("Press the Enter key to continue."); + readResult = Console.ReadLine(); + break; + default: + break; + } + +} while (menuSelection != "exit"); diff --git a/018_Conditional_branching_and_looping/GuidedProject/Own/Own.csproj b/018_Conditional_branching_and_looping/GuidedProject/Own/Own.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/018_Conditional_branching_and_looping/GuidedProject/Own/Own.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/018_Conditional_branching_and_looping/GuidedProject/Own/Program.cs b/018_Conditional_branching_and_looping/GuidedProject/Own/Program.cs new file mode 100644 index 0000000..c40d31d --- /dev/null +++ b/018_Conditional_branching_and_looping/GuidedProject/Own/Program.cs @@ -0,0 +1,76 @@ +int max_pets = 8; +//string? read_input; +//string menu_selection = ""; +string[] description = { + "medium sized cream colored female golden retriever weighing about 65" + + "pounds. housebroken.", + "large reddish-brown male golden retriever weighing about 85 pounds. " + + "housebroken.", + "small white female weighing about 8 pounds. litter box trained.", + "translucid at sun.", +}; +string[] personality = { + "friendly", + "loves to have his ears rubbed at any time! loves to lean-in.", + "loves to have her belly rubbed. gives lots of kisses.", + "sauvage and lovelly.", +}; +string[] nickname = { "lola", "loki", "fuzz", "boby", "gogo", "besti" }; +string[] species = { "cat", "dog", "bee", "pig" }; +string[] abcd = { "a", "b", "c", "d" }; +int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8 }; +Random rand = new Random(); + +// array used to store runtime data, there is no persisted data +string[,] our_animals = new string[max_pets, 6]; + +string rand_str(string[] choices) { + int indx = rand.Next(choices.Length); + return choices[indx]; +} + +int rand_int(int[] choices) { + int indx = rand.Next(choices.Length); + return choices[indx]; +} + +for (int i = 0; i < max_pets - 4; i++) { + bool uniq_id = false; + our_animals[i, 0] = rand_str(species); + while (!uniq_id) { + bool check = true; + string id = $"{rand_str(abcd)}{rand_int(nums)}"; + for (int j = 0; j < max_pets - 4; j++) { + if (!string.IsNullOrEmpty(our_animals[j, 1]) && our_animals[j, 1] == id) { + uniq_id = false; + check = false; + break; + } + } + if (check) { + our_animals[i, 1] = id; + uniq_id = true; + } + } + our_animals[i, 2] = rand_str(description); + our_animals[i, 3] = $"{rand_int(nums)}"; + our_animals[i, 4] = rand_str(personality); + our_animals[i, 5] = rand_str(nickname); +} + +void print_pets() { + for (int j = 0; j < max_pets; j++) { + if (!string.IsNullOrEmpty(our_animals[j, 1])) { + Console.Write(our_animals[j, 1] + ": "); + Console.Write(our_animals[j, 0] + " - "); + Console.Write(our_animals[j, 5] + " - "); + int age = Int32.Parse(our_animals[j,3].ToString()); + string year_word = age > 1 ? "years" : "year"; + Console.WriteLine(our_animals[j, 3] + $" {year_word}"); + Console.WriteLine(our_animals[j, 2]); + Console.WriteLine(our_animals[j, 4]+"\n"); + } + } +} + +print_pets(); diff --git a/018_Conditional_branching_and_looping/GuidedProject/Starter/Program.cs b/018_Conditional_branching_and_looping/GuidedProject/Starter/Program.cs new file mode 100644 index 0000000..43da229 --- /dev/null +++ b/018_Conditional_branching_and_looping/GuidedProject/Starter/Program.cs @@ -0,0 +1,90 @@ +// the ourAnimals array will store the following: +string animalSpecies = ""; +string animalID = ""; +string animalAge = ""; +string animalPhysicalDescription = ""; +string animalPersonalityDescription = ""; +string animalNickname = ""; + +// variables that support data entry +int maxPets = 8; +string? readResult; +string menuSelection = ""; + +// array used to store runtime data, there is no persisted data +string[,] ourAnimals = new string[maxPets, 6]; + +// TODO: Convert the if-elseif-else construct to a switch statement + +// create some initial ourAnimals array entries +for (int i = 0; i < maxPets; i++) { + if (i == 0) { + animalSpecies = "dog"; + animalID = "d1"; + animalAge = "2"; + animalPhysicalDescription = "medium sized cream colored female golden retriever weighing about 65 pounds. housebroken."; + animalPersonalityDescription = "loves to have her belly rubbed and likes to chase her tail. gives lots of kisses."; + animalNickname = "lola"; + } else if (i == 1) { + animalSpecies = "dog"; + animalID = "d2"; + animalAge = "9"; + animalPhysicalDescription = "large reddish-brown male golden retriever weighing about 85 pounds. housebroken."; + animalPersonalityDescription = "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."; + animalNickname = "loki"; + } else if (i == 2) { + animalSpecies = "cat"; + animalID = "c3"; + animalAge = "1"; + animalPhysicalDescription = "small white female weighing about 8 pounds. litter box trained."; + animalPersonalityDescription = "friendly"; + animalNickname = "Puss"; + } else if (i == 3) { + animalSpecies = "cat"; + animalID = "c4"; + animalAge = "?"; + animalPhysicalDescription = ""; + animalPersonalityDescription = ""; + animalNickname = ""; + } else { + animalSpecies = ""; + animalID = ""; + animalAge = ""; + animalPhysicalDescription = ""; + animalPersonalityDescription = ""; + animalNickname = ""; + } + 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; +} + +// display the top-level menu options + +Console.Clear(); + +Console.WriteLine("Welcome to the Contoso PetFriends app. Your main menu options are:"); +Console.WriteLine(" 1. List all of our current pet information"); +Console.WriteLine(" 2. Add a new animal friend to the ourAnimals array"); +Console.WriteLine(" 3. Ensure animal ages and physical descriptions are complete"); +Console.WriteLine(" 4. Ensure animal nicknames and personality descriptions are complete"); +Console.WriteLine(" 5. Edit an animal’s age"); +Console.WriteLine(" 6. Edit an animal’s personality description"); +Console.WriteLine(" 7. Display all cats with a specified characteristic"); +Console.WriteLine(" 8. Display all dogs with a specified characteristic"); +Console.WriteLine(); +Console.WriteLine("Enter your selection number (or type Exit to exit the program)"); + +readResult = Console.ReadLine(); +if (readResult != null) { + menuSelection = readResult.ToLower(); +} + +Console.WriteLine($"You selected menu option {menuSelection}."); +Console.WriteLine("Press the Enter key to continue"); + +// pause code execution +readResult = Console.ReadLine(); diff --git a/018_Conditional_branching_and_looping/GuidedProject/Starter/Starter.csproj b/018_Conditional_branching_and_looping/GuidedProject/Starter/Starter.csproj new file mode 100644 index 0000000..91b464a --- /dev/null +++ b/018_Conditional_branching_and_looping/GuidedProject/Starter/Starter.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + +