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 you’ll complete an end-to-end
|
|
|
|
|
project from a specification. This module is intended to be a test of your
|
|
|
|
|
skills; there’s 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 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 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.
|