intro-to-dotnet-web-dev/2-csharp/lesson-3-projects/challenge-project/Final/Program.cs

431 lines
17 KiB
C#
Raw Normal View History

using System;
using System.IO;
// 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 = "";
int petCount = 0;
string anotherPet = "y";
bool validEntry = false;
int petAge = 0;
// 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;
}
// display the top-level menu options
do
{
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 animals age");
Console.WriteLine(" 6. Edit an animals 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].ToString());
}
}
}
Console.WriteLine("\n\rPress the Enter key to continue");
readResult = Console.ReadLine();
break;
case "2":
// Add a new animal friend to the ourAnimals array
//
// The ourAnimals array contains
// 1. the species (cat or dog). a required field
// 2. the ID number - for example C17
// 3. the pet's age. can be blank at initial entry.
// 4. the pet's nickname. can be blank.
// 5. a description of the pet's physical appearance. can be blank.
// 6. a description of the pet's personality. can be blank.
anotherPet = "y";
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)
{
// 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
{
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);
}
}
} while (validEntry == false);
// get a description of the pet's physical appearance - 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 (validEntry == false);
// 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 (validEntry == false);
// 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 (validEntry == false);
// 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");
}
//NOTE: The value of anotherPet (either "y" or "n") is evaluated in the while statement expression - at the top of the while loop
}
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
//
// ourAnimals[i, 2] = "Age: " + animalAge;
// ourAnimals[i, 4] = "Physical description: " + animalPhysicalDescription;
for (int i = 0; i < maxPets; i++)
{
if (ourAnimals[i, 2] == "Age: ?" && ourAnimals[i, 0] != "ID #: ")
{
do
{
Console.WriteLine($"Enter an age for {ourAnimals[i, 0]}");
readResult = Console.ReadLine();
if (readResult != null)
{
animalAge = readResult;
validEntry = int.TryParse(animalAge, out petAge);
}
} while (validEntry == false);
ourAnimals[i, 2] = "Age: " + animalAge.ToString();
}
if (ourAnimals[i, 4] == "Physical description: " && ourAnimals[i, 0] != "ID #: ")
{
do
{
Console.WriteLine($"Enter a physical description for {ourAnimals[i, 0]} (size, color, gender, weight, housebroken)");
readResult = Console.ReadLine();
if (readResult != null)
{
animalPhysicalDescription = readResult.ToLower();
if (animalPhysicalDescription == "")
{
validEntry = false;
}
else
{
validEntry = true;
}
}
} while (validEntry == false);
ourAnimals[i, 4] = "Physical description: " + animalPhysicalDescription;
}
}
Console.WriteLine("\n\rAge and physical description fields are complete for all of our friends. \n\rPress the Enter key to continue");
readResult = Console.ReadLine();
break;
case "4":
// Ensure animal nickname and personality descriptions are complete
//
// ourAnimals[i, 3] = "Nickname: " + animalNickname;
// ourAnimals[i, 5] = "Personality: " + animalPersonalityDescription;
for (int i = 0; i < maxPets; i++)
{
if (ourAnimals[i, 3] == "Nickname: " && ourAnimals[i, 0] != "ID #: ")
{
do
{
Console.WriteLine($"Enter a nickname for {ourAnimals[i, 0]}");
readResult = Console.ReadLine();
if (readResult != null)
{
animalNickname = readResult;
if (animalNickname == "")
{
validEntry = false;
}
else
{
validEntry = true;
}
}
} while (validEntry == false);
ourAnimals[i, 3] = "Nickname: " + animalNickname;
}
if (ourAnimals[i, 5] == "Personality: " && ourAnimals[i, 0] != "ID #: ")
{
do
{
//"Enter a description of the pet's personality (likes or dislikes, tricks, energy level"
Console.WriteLine($"Enter a personality description for {ourAnimals[i, 0]} (likes or dislikes, tricks, energy level)");
readResult = Console.ReadLine();
if (readResult != null)
{
animalPersonalityDescription = readResult.ToLower();
if (animalPersonalityDescription == "")
{
validEntry = false;
}
else
{
validEntry = true;
}
}
} while (validEntry == false);
ourAnimals[i, 5] = "Personality: " + animalPersonalityDescription;
}
}
Console.WriteLine("\n\rAge and physical description fields are complete for all of our friends. \n\rPress the Enter key to continue");
readResult = Console.ReadLine();
break;
case "5":
// Edit an animals 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 animals 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");