ms_learn_csharp/019_branching_and_looping_structures/019_csharp.md

417 lines
15 KiB
Markdown
Raw Normal View History

2024-07-25 23:28:48 -04:00
# Challenge project
## Develop branching and looping structures in C#
Demonstrate your ability to develop a console app that implements selection and
iteration statements to achieve app specifications.
### Learning objectives
In this module, you'll demonstrate your ability to:
2024-07-26 21:17:57 -04:00
- 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.
2024-07-25 23:28:48 -04:00
- 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
Applications often use a combination of selection and iteration statements to
establish code execution paths. In addition, user input and calculations
influence the flow through an application. Creating a user interface that
implements a design specification can be challenging.
Suppose you're a developer working on the Contoso Pets application, an
application that's used to find homes for stray or abandoned pets. Some of the
development work has already been completed. For example, the application's
main menu and the code used to store new pet information have been developed.
However, certain information isn't always available when a pet is entered in
your system. You need to develop the features that ensure a complete dataset
exists for each animal in your care.
In this module, you'll develop the following features of the Contoso Pets
application:
- A feature that ensures animal ages and physical descriptions are complete.
- A feature that ensures animal nickname and personality descriptions are
complete.
By the end of this module, your Contoso Pets application will ensure that every
element in the ourAnimals array is complete.
> Note
> This is a challenge project module where youll complete an end-to-end
project from a specification. This module is intended to be a test of your
skills; theres little guidance and no step-by-step instructions.
### Learning Objectives
In this module, you'll demonstrate your ability 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 challenge project, you'll develop portions of a C# console application.
You'll 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 specification
The Starter code project for this module includes a Program.cs file with 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 that includes the following information
for each animal in the array:
- Pet ID #.
- Pet species (cat or dog).
- Pet age (years).
- A description of the pet's physical appearance.
- A description of the pet's personality.
- The pet's nickname.
- The code uses a for loop around a `switch-case` construct to populate elements
of the `ourAnimals` array.
- The code includes a loop around a main menu that terminates when the user
enters "exit". The main menu includes:
```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 animals age.
6. Edit an animals 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 uses a switch statement to
branch the code for each menu item number.
- The code includes implementation for menu options 1 and 2.
- The code displays an "under construction" message for menu options 3-8.
Your goal in this challenge is to create the app features aligned with menu
options 3 and 4.
> Note
> New animals must be added to the ourAnimals array when they arrive. However,
an animal's age and some physical characteristics for a pet may be unknown
until after a veterinarian's examination. In addition, an animal's nickname and
personality may be unknown when a pet first arrives. The new features that
you're developing will ensure that a complete dataset exists for each animal in
the ourAnimals array.
To ensure that animal ages and physical descriptions are complete, your code
must:
- Assign a valid numeric value to petAge for any animal that has been assigned
data in the ourAnimals array but has not been assigned an age.
- Assign a valid string to petPhysicalDescription for any animal that has been
assigned data in the ourAnimals array but has not been assigned a physical
description.
- Verify that physical descriptions have an assigned value. Assigned values
cannot have zero characters. Any further requirement is up to you.
- To ensure that animal nicknames and personality descriptions are complete,
your code must:
- Assign a valid string to petNickname for any animal that has been assigned
data in the ourAnimals array but has not been assigned a nickname.
- Assign a valid string to petPersonalityDescription for any animal that has
been assigned data in the ourAnimals array but has not been assigned a
personality description.
- Verify that nicknames and personality descriptions have an assigned value.
Assigned values cannot have zero characters. Any further requirement is up to
you.
### Setup
Use the following steps to prepare for the Challenge project exercises:
To download a zip file containing the Starter project code, select the
following link:
[Lab Files](https://github.com/MicrosoftLearning/Challenge-project-branching-looping-CSharp/archive/refs/heads/main.zip).
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 Challenge project exercises. Good luck!
---
## Exercise
### Ensure that petAge and petPhysicalDescription contain valid information
The Contoso Pets application is used to help find new homes for abandoned pets.
Your goal in this challenge is to develop the application features used to
ensure that you have a completed dataset for each animal in the ourAnimals array.
### Specification
In this challenge exercise, you need to develop a feature that ensures animal
ages and physical descriptions are complete.
This feature must:
- Be enabled inside the appropriate application branch (must not overwrite the
code in the code branch for menu option 2).
- Skip over any animal in the ourAnimals array when the value of pet ID is set
to the default value.
- Display the pet ID value and prompt the user for an updated data value if
ourAnimals array data is missing or incomplete.
- Ensure that a valid numeric value is assigned to animalAge for all animals in
the ourAnimals array that have assigned data.
- Ensure that a valid string is assigned to animalPhysicalDescription for all
animals in the ourAnimals array that have assigned data.
- Enforce the following validation rules for animalAge.
- It must be possible to convert the value entered to numeric data type.
- Enforce the following validation rules for animalPhysicalDescription:
- Values cannot be null.
- Values cannot have zero characters.
- Any further restriction is up to the developer.
- Inform the application user when all data requirements are met, pausing the
application to ensure the message can be seen and responded to.
### Check your work
To validate that your code satisfies the specified requirements
> Note
> You can exit the verification test before completing all of the verification
steps if see a result that does not satisfy the specification requirements. To
force an exit from the running program, in the Terminal panel, press Ctrl-C.
After exiting the running app, complete the edits that you believe will address
the issue you are working on, save your updates to the Program.cs file, and
then re-build and run your code.
At the Terminal command prompt, enter 3
Verify that the Terminal panel updates with a message similar to the following:
```txt
Enter an age for ID #: c4
```
At the Terminal command prompt, enter one
Verify that your code repeats the prompt requesting a value for the age of the
pet.
The Terminal panel should update to show the repeated prompt. The display
should be similar to the following:
```txt
Enter an age for ID #: c4
one
Enter an age for ID #: c4
```
At the Terminal command prompt, enter 1
Verify that your code accepts 1 as a valid numeric entry and that the Terminal
panel displays a message similar to the following:
```txt
Enter a physical description for ID #: c4 (size, color, breed, gender, weight, housebroken)
```
At the Terminal command prompt, press the Enter key (without typing any characters).
Verify that your code repeats the prompt requesting a value for the physical
description of the pet.
The Terminal panel should update to show the repeated prompt. The display
should be similar to the following:
```txt
Enter a physical description for ID #: c4 (size, color, gender, weight, housebroken)
Enter a physical description for ID #: c4 (size, color, gender, weight, housebroken)
```
At the Terminal command prompt, enter small white Siamese cat weighing about 8
pounds. litter box trained.
Verify that your code accepts small white Siamese cat weighing about 8 pounds.
litter box trained. as a valid entry and that the Terminal panel displays a
message similar to the following:
```txt
Age and physical description fields are complete for all of our friends.
Press the Enter key to continue
```
If you specified further restrictions for valid entries, run the appropriate
test cases to verify your work.
> Note
> If your code meets the requirements you should be able to complete each step
in order and see the expected results in a single test pass. If you added
additional restrictions, you may need to exit the application and then run a
separate test pass to complete your verification.
Once you've validated the results for this exercise, proceed to the next
exercise in this challenge.
## Exercise
### Ensure that pet nicknames and personality descriptions are complete
The Contoso Pets app is used to help find new homes for abandoned pets. Your
goal in this challenge is to develop the app features used to ensure that we
have a completed dataset for each animal in the ourAnimals array.
### Specification
You need to develop a feature that ensures animal nicknames and personality
descriptions are complete.
This feature must:
- Be enabled inside the appropriate application branch (must not overwrite the
code in the code branch for menu option 2).
- Skip over any animal in the ourAnimals array when the value of pet ID is set
to the value default value.
- Display the pet ID value and prompt the user for an updated data value if
ourAnimals array data is missing or incomplete.
- Ensure that a valid string is assigned to animalNickname for all animals in
the ourAnimals array that have assigned data.
- Ensure that a valid string is assigned to animalPersonalityDescription for
all animals in the ourAnimals array that have assigned data.
- Enforce the following validation rules for petNickname and
petPersonalityDescription:
- Values cannot be null.
- Values cannot have zero characters.
- Any further restriction is up to the developer.
Inform the application user when all data requirements are met, pausing the
application to ensure the message can be seen and responded to.
### Check your work
To validate that your code satisfies the specified requirements, complete the
following steps:
Build and run your app.
At the Terminal command prompt, enter 4
Verify that the Terminal panel updates with a message similar to the following:
```txt
Enter a nickname for ID #: c4
```
At the Terminal command prompt, press the Enter key (without typing any
characters).
Verify that your code repeats the prompt requesting a value for the nickname of
the pet.
The Terminal panel should update to display something similar to the following:
```txt
Enter a nickname for ID #: c4
Enter a nickname for ID #: c4
```
At the Terminal command prompt, enter snowflake
Verify that your code accepts snowflake as a valid entry and that the Terminal
panel displays a message similar to the following:
```txt
Enter a personality description for ID #: c4 (likes or dislikes, tricks, energy level)
```
At the Terminal command prompt, press the Enter key (without typing any
characters).
Verify that your code repeats the prompt requesting a value for the personality
description of the pet.
The Terminal panel should update to display something similar to the following:
```txt
Enter a personality description for ID #: c4 (likes or dislikes, tricks, energy level)
Enter a personality description for ID #: c4 (likes or dislikes, tricks, energy level)
```
At the Terminal command prompt, enter loves to curl up in a warm spot
Verify that your code accepts loves to curl up in a warm spot as a valid entry
and that the Terminal panel displays a message similar to the following:
```txt
Nickname and personality description fields are complete for all of our friends.
Press the Enter key to continue
```
If you specified further restrictions for valid entries, run the appropriate
test cases to verify your work.
Congratulations if you succeeded in this challenge!
---
## Summary
Your goal was to demonstrate the ability to develop features of an application
that achieve a design specification. You needed to choose and implement the
appropriate iteration and selection statement types to meet the stated
requirements.
By creating nested combinations of iteration and selection statements, you
built a user interface that enables the application user to enter valid pet
data that filled gaps in the ourAnimals array.
Your ability to implement features of the Contoso Pets application based on a
design specification demonstrates your understanding of the iteration and
selection statements.
2024-07-27 14:08:24 -04:00
---
Project Files
- [Final](./ChallengeProject/Final/Program.cs)
- [Own](./ChallengeProject/Own/Program.cs)