Milestone 2 Requirements

Web Only

This textbook was authored for the CIS 400 - Object-Oriented Design, Implementation, and Testing course at Kansas State University. This section describes assignments specific to the Spring 2023 offering of that course. Prior semester offerings can be found here. If you are not enrolled in the course, please disregard this section.

For this milestone, you will be creating classes to represent the offerings of The Flying Saucer - a fast-food breakfast franchise. These will be created within the Data project of the solution you accepted from GitHub classroom.

General requirements:

  • You need to follow the style laid out in the C# Coding Conventions

  • You need to document your code using XML-style comments, with a minimum of <summary> tags, plus <param>, <returns>, and <exception> as appropriate.

Assignment requirements:

You will need to create

  • Enums (2) representing:

    • Serving sizes available for certain menu items
    • The various egg preparations available
  • Classes (1+) representing entrees:

    • Outer Omelette
    • Refactoring the Flying Saucer
  • Classes (6) representing sides:

    • Crop Circle
    • Glowing Haystack
    • Taken Bacon
    • Missing Links
    • Eviscerated Eggs
    • You’re Toast

Purpose:

This milestone serves as a review of how to create classes and sets the stage for the rest of the semester. Everything included in this assignment you should have been exposed to before in CIS200 and CIS300. This assignment should be relatively straightforward, though it will take some time to complete. If you have any confusion after you have read the entire assignment please do not hesitate to reach out to a Professor Bean, the TAs, or your classmates over Discord.

Recommendations:

  • Get in the habit of reading the entire assignment before you start to code. Make sure you understand what is being asked of you. Please do not get ahead of yourself and have to redo work because you did not read the entire assignment.

  • Accuracy is important. Your class, property, enumeration and other names, along with the descriptions must match the specification given here. Otherwise, your code is not correct. While typos may be a small issue in writing intended for human consumption, in computer code it is a big problem!

  • Remember that you must document your classes. This was covered in prior courses and also discussed in chapter 3 of your textbook.

  • The KSU.CS.CodeAnalyzers NuGet package installed in your project will automatically flag issues with for naming and commenting conventions in your code with warnings. Be sure to address these!

  • Create a new feature branch for your milestone and commit your changes to it, and only merge it back into the master branch when you’ve completed the assignment.

Tip

You may be wondering why we ask you to create a feature branch rather than working in main, especially as it seems extra work. There are two reasons:

  1. It is good practice for the future when you are working on a team. Each team member typically has their own branch. That way, as you add incomplete code to your branch, your changes don’t impact the other team member’s work. You only merge your new features to main when they are complete, tested, and working.
  2. If the UTA asks you to correct a mistake in a former milestone and re-commit, you can switch back to that branch, fix the mistake, create a new release and turn it in. All without being impacted by your half-done work on the new milestone branch. Then, you can merge the update to main into your current milestone branch so that you have them moving forward.

Enum Classes

Each enumeration should be placed in a file named according to the enum, i.e. ServingSize should be defined in ServingSize.cs.

The needed enumerations are:

  • EggStyle - The various ways an egg can be prepared

    • SoftBoiled
    • HardBoiled
    • Scrambled
    • Poached
    • SunnySideUp
    • OverEasy
  • ServingSize - The size of the menu item

    • Small
    • Medium
    • Large

To get you started, here’s the ServingSize enum defined:

/// <summary>
/// The size of a menu item
/// </summary>
public enum ServingSize 
{
  Small,
  Medium,
  Large
}

Entree Menu Item Classes

You will need to create one new class OuterOmelette, and refactor another, FlyingSaucer to represent specific entrees offered at The Flying Saucer.

Flying Saucer

The FlyingSaucer class provided in the starter project has an issue - the Price is constant at $8.50, regardless of the number of pancakes in the stack. You’ll need to refactor the Price property so that when additional pancake is added, the price of the entree increases by $0.50, and when a pancake is removed, it is decreased by $0.50.

Outer Omelette

You will need to create a class to represent the Outer Omelette entree named OuterOmelette. The structure of this class is detailed in the UML below (you may add additional private members as needed).

OuterOmelette UML diagram OuterOmelette UML diagram

The specific values for the OuterOmelette properties are described in the table below

PropertyAccessorsTypeValue
Nameget onlystring"Outer Omelette"
Descriptionget onlystring"A fully loaded Omelette."
CheddarCheeseget and setboolDefaults to true
Peppersget and setboolDefaults to true
Mushroomsget and setboolDefaults to true
Tomatoesget and setboolDefaults to true
Onionsget and setboolDefaults to true
Priceget onlydecimal$7.45
Caloriesget onlyuint94 for the eggs in the omelette, plus 113 calories for cheddar cheese, 24 calories for peppers, 4 calories for mushrooms, 22 calories for tomatoes, and 22 calories for onions
SpecialInstructionsget onlyIEnumerable⟨string⟩For any ingredient not used, should include "Hold [ingredient]" where [ingredient] is the name of the ingredient, i.e. if the CheddarCheese property is false, it should include "Hold Cheddar Cheese"

Side Menu Item Classes

You will need to create classes to represent the six sides Crop Circle, Glowing Haystack, Taken Bacon, Missing Links, Eviscerated Eggs, and You’re Toast.

Crop Circle

The structure for the CropCircle class appears in the UML diagram below:

Crop Circle UML Diagram Crop Circle UML Diagram

The specific values for the CropCircle properties are described in the table below

PropertyAccessorsTypeValue
Nameget onlystring"Crop Circle"
Descriptionget onlystring"Oatmeal topped with mixed berries."
Berriesget and setboolDefaults to true
Priceget onlydecimal$2.00
Caloriesget onlyuint158 calories, plus 89 calories if berries are included
SpecialInstructionsget onlyIEnumerable⟨string⟩Includes "Hold Berries" if the Berries property is false.

Glowing Haystack

The structure for the GlowingHaystack class appears in the UML diagram below:

Glowing Haystack UML Diagram Glowing Haystack UML Diagram The specific values for the GlowingHaystack properties are described in the table below

PropertyAccessorsTypeValue
Nameget onlystring"Glowing Haystack"
Descriptionget onlystring"Hash browns smothered in green chile sauce, sour cream, and topped with tomatoes."
Green Chile Sauceget and setboolDefaults to true
Sour Creamget and setboolDefaults to true
Tomatoesget and setboolDefaults to true
Priceget onlydecimal$2.00
Caloriesget onlyuint470 calories, plus 15 calories for green chile sauce, 23 calories for sour cream, and 22 calories for tomatoes
SpecialInstructionsget onlyIEnumerable⟨string⟩For any ingredient not used, should include "Hold [ingredient]" where [ingredient] is the name of the ingredient, i.e. if the GreenChileSauce property is false, it should include "Hold Green Chile Sauce"

Taken Bacon

The structure for the TakenBacon class appears in the UML diagram below:

Taken Bacon UML Diagram Taken Bacon UML Diagram

The specific values for the TakenBacon properties are described in the table below

PropertyAccessorsTypeValue
Nameget onlystring"Taken Bacon"
Descriptionget onlystring"Crispy strips of bacon."
Countget and setuintDefaults to 2 strips of bacon
Priceget onlydecimal$1.00 per strip of bacon
Caloriesget onlyuint43 calories per strip of bacon
SpecialInstructionsget onlyIEnumerable⟨string⟩For any number of strips but two, should include "[n] strips" where [n] is the count.

The structure for the MissingLinks class appears in the UML diagram below:

MissingLinks UML Diagram MissingLinks UML Diagram

The specific values for the MissingLinks properties are described in the table below

PropertyAccessorsTypeValue
Nameget onlystring"Missing Links"
Descriptionget onlystringSizzling pork sausage links."
Countget and setuintDefaults to 2 sausage links
Priceget onlydecimal$1.00 per sausage link
Caloriesget onlyuint391 calories per link of sausage
SpecialInstructionsget onlyIEnumerable⟨string⟩For any number of links but two, should include "[n] links" where [n] is the count.

Eviscerated Eggs

The structure for the EvisceratedEggs class appears in the UML diagram below:

Eviscerated Eggs UML Diagram Eviscerated Eggs UML Diagram

The specific values for the EvisceratedEggs properties are described in the table below

PropertyAccessorsTypeValue
Nameget onlystring"Eviscerated Eggs"
Descriptionget onlystring"Eggs prepared the way you like."
Styleget and setEggStyleDefaults to over easy
Countget and setuintDefaults to 2 eggs
Priceget onlydecimal$1.00 per egg
Caloriesget onlyuint78 calories per egg
SpecialInstructionsget onlyIEnumerable⟨string⟩Should always contain a string corresponding to the Style property, i.e. if the Style property is EggStyle.OverEasy it should contain the string "Over Easy". If any number of eggs other than 2 is chosen, it should also contain "[n] eggs" where [n] is the number of eggs.

You’re Toast

The structure for the YouAreToast class appears in the UML diagram below:

You’re Toast UML Diagram You’re Toast UML Diagram

The specific values for the YouAreToast properties are described in the table below

PropertyAccessorsTypeValue
Nameget onlystring"You're Toast"
Descriptionget onlystring"Texas toast."
Countget and setuintDefaults to 2 slices of toast
Priceget onlydecimal$1.00 per slice of toast
Caloriesget onlyuint100 calories per slice of toast
SpecialInstructionsget onlyIEnumerable⟨string⟩For any number of slices but two, should include "[n] slices" where [n] is the count.

Submitting the Assignment

Once your project is complete, merge your feature branch back into the main branch and create a release tagged v0.2.0 with name "Milestone 2". Copy the URL for the release page and submit it to the Canvas assignment.

Grading Rubric

The grading rubric for this assignment will be:

25% Structure Did you implement the structure as laid out in the specification? Are the correct names used for classes, enums, properties, methods, events, etc? Do classes inherit from expected base classes?

25% Documentation Does every class, method, property, and field use the correct XML-style documentation? Does every XML comment tag contain explanatory text?

25% Design Are you appropriately using C# to create reasonably efficient, secure, and usable software? Does your code contain bugs that will cause issues at runtime?

25% Functionality Does the program do what the assignment asks? Do properties return the expected values? Do methods perform the expected actions?

Warning

Projects that do not compile will receive an automatic grade of 0.

Subsections of Milestone 2 Requirements

Subsections of Previous Versions

Milestone 2 Requirements

Web Only

This textbook was authored for the CIS 400 - Object-Oriented Design, Implementation, and Testing course at Kansas State University. This section describes assignments specific to the Fall 2022 offering of that course.

For this milestone, you will be creating classes to represent the offerings of the ā€œDino Dinerā€ - a prehistoric-themed fast-food franchise. These will be created within the Data project of the solution you accepted from GitHub classroom.

General requirements:

  • You need to follow the style laid out in the C# Coding Conventions

  • You need to document your code using XML-style comments, with a minimum of <summary> tags, plus <param>, <returns>, and <exception> as appropriate.

Assignment requirements:

You will need to create

  • Enums (4) representing:

    • The serving sizes available
    • The wings sauces available
  • Classes (4) representing entrees:

    • Brontowurst (Bratwurst with peppers and onions in a bun)
    • DinoNuggets (Six crispy fried breaded chicken nuggets)
    • Pterodactyl Wings (Chicken wings glazed with a signature hot sauce)
    • Veloci-Wrap (A chicken cesar wrap)
  • Classes (4) representing sides:

    • Fryceritops
    • Meteor Mac & Cheese
    • Mezzorealla Sticks
    • Triceritots

Purpose:

This milestone serves as a review of how to create classes and sets the stage for the rest of the semester. Everything included in this assignment you should have been exposed to before in CIS200 and CIS300. This assignment should be relatively straightforward, though it will take some time to complete. If you have any confusion after you have read the entire assignment please do not hesitate to reach out to a Professor Bean, the TAs, or your classmates over Discord.

Recommendations:

  • Get in the habit of reading the entire assignment before you start to code. Make sure you understand what is being asked of you. Please do not get ahead of yourself and have to redo work because you did not read the entire assignment.

  • Accuracy is important. Your class, property, enumeration and other names, along with the descriptions must match the specification given here. Otherwise, your code is not correct. While typos may be a small issue in writing intended for human consumption, in computer code it is a big problem!

  • Remember that you must document your classes. This was covered in prior courses and also discussed in chapter 3 of your textbook.

  • The KSU.CS.CodeAnalyzers NuGet package installed in your project will automatically flag issues with for naming and commenting conventions in your code with warnings. Be sure to address these!

Enum Classes

All enums should reside in the DinoDiner.Data.Enums namespace and be placed in an Enums folder within the Data project in your solution. Each should be placed in a file named according to the enum, i.e. ServingSize should be defined in ServingSize.cs.

The needed enumerations are:

  • WingSauce - Sauces available for wings

    • Buffalo
    • Teriyaki
    • Honey Glaze
  • ServingSize - The size of the menu item

    • Small
    • Medium
    • Large

To get you started, here’s the ServingSize enum defined:

/// <summary>
/// The size of a menu item
/// </summary>
public enum ServingSize 
{
  Small,
  Medium,
  Large
}

Entree Menu Item Classes

All Entree menu item classes should reside in the DinoDiner.Data.Entrees namespace and be placed in the Entrees folder within the Data project in your solution. One entree, Prehistoric PB&J, has been provided for you as an example.

The needed classes are:

Brontowurst

You will need to define a class to represent a Brontowurst (a brautwurst with fried peppers and onions served in a bun), which can be customized after creation. You should name this class Brontowurst and declare it in the file Brontowurst.cs. It should have the following properties:

Name: A string that is always ā€œBrontowurstā€.

Price: A getter-only property (i.e. it has only a get and no set) of type decimal with a value of $5.86.

Calories: A getter-only property of type uint with a value of 512.

Onions: A boolean property indicating if the Brontowurst is served with onions defaulting to true.

Peppers: A boolean property indicating if the Brontowurst is served with peppers defaulting to true.

Dino Nuggets

You will need to define a class to represent a serving of Dino Nuggets (chicken nuggets), which can be customized after creation. You should name this class DinoNuggets and declare it in the file DinoNuggets.cs. It should have the following properties:

Name: A string that is ā€œ[count] Dino Nuggetsā€, where [count] is the number of nuggets.

Count: A uint property indicating the number of dino nuggets (defaults to 6).

Price: A getter-only property (i.e. it has only a get and no set) of type decimal with a value of $0.25 per nugget.

Calories: A getter-only property with type uint and a value of 61 per nugget.

Pterodactyl Wings

You will need to define a class to represent a serving of Pterodactyl Wings (Chicken Wings), which can be customized after creation. You should name this class PterodactylWings and declare it in the file PterodactylWings.cs. It should have the following properties:

Name: A string that is ā€œ[wing sauce] Pterodactyl Wingsā€, where [wing sauce] is one of ā€œBuffaloā€, ā€œTeriyakiā€, or ā€œHoney Glazeā€, corresponding to the Sauce property value.

Sauce: A property with the Sauce enum type, indicating the sauce to use on the wings (default WingSauce.Buffalo).

Price: A getter-only property (i.e. it has only a get and no set) of type decimal with a value of $8.95.

Calories: A getter-only property with type uint and a value of 360 for Buffalo wings, 342 for Teriyaki wings, or 359 for Honey Glaze wings.

Veloci-Wraptor

You will need to define a class to represent a Veloci-Wraptor (a Caesar chicken wrap), which can be customized after creation. You should name this class VelociWraptor and declare it in the file VelociWraptor.cs. It should have the following properties:

Name: A string that is always ā€œVeloci-Wraptorā€.

Price: A getter-only property (i.e. it has only a get and no set) of type decimal with a value of $6.25.

Calories: A getter-only property with type uint and a value of 732. If served without dressing, this is reduced by 94 calories. If served without cheese, this is reduced by 22 calories.

Dressing: A boolean property indicating if the wrap is served with Caesar dressing (defaults to true).

Cheese: A boolean property indicating if the wrap is served with parmesan cheese (defaults to true).

Side Menu Item Classes

All side menu item classes should reside in the DinoDiner.Data.Sides namespace and be placed in the Sides folder within the Data project in your solution. Side menu items all come in three sizes - small, medium, or large, and the price and calories vary based on the size.

The needed classes are:

Fryceritops

You will need to define a class to represent Fryceritops (French fries), which can be customized after creation. You should name this class Fryceritops and declare it in the file Fryceritops.cs. It should have the following properties:

Name: A string that is ā€œ[Size] Fryceritopsā€ where [Size] is the serving size of the item, i.e. ā€œSmall Fryceritopsā€ for when the Size property is small.

Salt: A boolean property indicating that the fries should be served with salt, defaults to true.

Sauce: A boolean property indicating that the fries should be served with fry sauce, defaults to false.

Size: A property of type ServingSize.

Price: A getter-only property (i.e. it has only a get and no set) of type decimal with a value of $3.50 for small, $4.00 for medium, and $5.00 for large.

Calories: A readonly property of type uint with a value of 365 for small, 465 for medium, or 510 for large, plus an additional 80 calories if Sauce is true.

Meteor Mac & Cheese

You will need to define a class to represent Meteor Mac & Cheese (Mac and Cheese with sausage bites), which can be customized after creation. You should name this class MeteorMacAndCheese and declare it in the file MeteorMacAndCheese.cs. It should have the following properties:

Name: A string that is ā€œ[Size] Meteor Mac & Cheeseā€ where [Size] is the serving size of the item, i.e. ā€œSmall Meteor Mac & Cheeseā€ for when the Size property is small.

Size: A property of type ServingSize.

Price: A getter-only property (i.e. it has only a get and no set) of type decimal with a value of $3.50 for small, $4.00 for medium, and $5.25 for large.

Calories: A readonly property of type uint with a value of 425 for small, 510 for medium, or 700 for large.

Mezzorealla Sticks

You will need to define a class to represent Mezzorella Sticks (breaded and deep-fried mozzarella cheese sticks), which can be customized after creation. You should name this class MezzorellaSticks and declare it in the file MezzorellaSticks.cs. It should have the following properties:

Name: A string that is ā€œ[Size] Mezzorella Sticksā€ where [Size] is the serving size of the item, i.e. ā€œSmall Mezzorella Sticksā€ for when the Size property is small.

Size: A property of type ServingSize.

Price: A readonly property (i.e. it has only a get and no set) of type decimal with a value of $3.50 for small, $4.00 for medium, and $5.25 for large.

Calories: A readonly property of type uint with a value of 530 for small, 620 for medium, or 730 for large.

Triceritots

You will need to define a class to represent Triceritots (tater tots), which can be customized after creation. You should name this class Triceritots and define it in a file named Triceritots.cs. It should have the following properties:

Name: A string that is ā€œ[Size] Triceritotsā€ where [Size] is the serving size of the item, i.e. ā€œSmall Triceritotsā€ for when the Size property is small.

Size: A property of type ServingSize.

Price: A getter-only property (i.e. it has only a get and no set) of type decimal with a value of $3.50 for small, $4.00 for medium, and $5.25 for large.

Calories: A readonly property of type uint with a value of 351 for small, 409 for medium, or 583 for large.

Submitting the Assignment

Once your project is complete, merge your feature branch back into the main branch and create a release tagged v0.2.0 with name "Milestone 2". Copy the URL for the release page and submit it to the Canvas assignment.

Grading Rubric

The grading rubric for this assignment will be:

25% Structure Did you implement the structure as laid out in the specification? Are the correct names used for classes, enums, properties, methods, events, etc? Do classes inherit from expected base classes?

25% Documentation Does every class, method, property, and field use the correct XML-style documentation? Does every XML comment tag contain explanatory text?

25% Design Are you appropriately using C# to create reasonably efficient, secure, and usable software? Does your code contain bugs that will cause issues at runtime?

25% Functionality Does the program do what the assignment asks? Do properties return the expected values? Do methods perform the expected actions?

Warning

Projects that do not compile will receive an automatic grade of 0.

Milestone 2 Requirements (Spring 2022)

Web Only

This textbook was authored for the CIS 400 - Object-Oriented Design, Implementation, and Testing course at Kansas State University. This section describes assignments specific to the Fall 2022 offering of that course. If you are not enrolled in the course, please disregard this section.

For this milestone, you will be creating classes to represent the offerings of the ā€œFried Piperā€ - a fast-food franchise focused on fried desserts. These will be created within the Data project of the solution you accepted from GitHub classroom.

General requirements:

  • You need to follow the style laid out in the C# Coding Conventions

  • You need to document your code using XML-style comments, with a minimum of <summary> tags, plus <param>, <returns>, and <exception> as appropriate.

Assignment requirements:

You will need to create

  • Enums (4) representing:

    • The various pie fillings available
    • The various ice cream flavors available
    • The various candy bars available
    • The serving sizes available
  • Classes (4) representing regular menu items:

    • Fried Pies
    • Fried Ice Cream
    • Fried Candy Bars
    • Fried Twinkies
  • Classes (4) representing poppers - bite-sized fried treats

    • Fried Cheesecake
    • Fried Oreos
    • Fried Bananas
    • Apple Fritters

Purpose:

This milestone serves as a review of how to create classes and sets the stage for the rest of the semester. Everything included in this assignment you should have been exposed to before in CIS200 and CIS300. This assignment should be relatively straightforward, though it will take some time to complete. If you have any confusion after you have read the entire assignment please do not hesitate to reach out to a Professor Bean, the TAs, or your classmates over Discord.

Recommendations:

  • Get in the habit of reading the entire assignment before you start to code. Make sure you understand what is being asked of you. Please do not get ahead of yourself and have to redo work because you did not read the entire assignment.

  • Accuracy is important. Your class, property, enumeration and other names, along with the descriptions must match the specification given here. Otherwise, your code is not correct. While typos may be a small issue in writing intended for human consumption, in computer code it is a big problem!

  • Remember that you must document your classes. This was covered in prior courses and also discussed in chapter 3 of your textbook.

  • The KSU.CS.CodeAnalyzers NuGet package installed in your project will automatically flag issues with for naming and commenting conventions in your code with warnings. Be sure to address these!

Enum Classes

All enums should reside in the FriedPiper.Data.Enums namespace and be placed in an Enums folder within the Data project in your solution. Each should be placed in a file named according to the enum, i.e. PieFilling should be defined in PieFilling.cs.

The needed enumerations are:

  • PieFilling - The various fillings for fried pies at Fried Piper

    • Cherry
    • Peach
    • Apricot
    • Pineapple
    • Blueberry
    • Apple
    • Pecan
  • IceCreamFlavor - The ice cream flavors available at Fried Piper

    • Vanilla
    • Chocolate
    • Strawberry
  • CandyBar - The candy bars available at Fried Piper

    • Snickers
    • MilkyWay
    • Twix
    • ThreeMusketeers
    • ButterFingers
  • ServingSize - The size of the popper menu item

    • Small
    • Medium
    • Large

To get you started, here’s the last enum defined:

/// <summary>
/// The size of a menu item
/// </summary>
public enum ServingSize 
{
  Small,
  Medium,
  Large
}

Regular Menu Item Classes

All menu item classes should reside in the FriedPiper.Data.MenuItems namespace and be placed in the MenuItems folder within the Data project in your solution.

The needed classes are:

Fried Pie

You will need to define a class to represent a fried pie (a deep-fried pastry containing a fruit filling), which can be customized after creation. You should name this class FriedPie and declare it in the file FriedPie.cs. It should have the following properties:

Name: A string that is ā€œFried [Filling] Pieā€, where [Filling] is the kind of filling used, i.e. ā€œFried Cherry Pieā€ for a fried cherry pie.

Flavor: A property with the PieFilling enum type, indicating the filling of the pie.

Price: A readonly property (i.e. it has only a get and no set) of type decimal with a value of $3.50.

Calories: A readonly property with a value of 287 for cherry, 304 for peach, 314 for apricot, 302 for pineapple, 314 for blueberry, 289 for apple, or 314 for pecan.

Fried Ice Cream

You will need to define a class to represent a serving of fried ice cream (frozen ice cream dipped in breading and deep-fried), which can be customized after creation. You should name this class FriedIceCream and declare it in the file FriedIceCream.cs. It should have the following properties:

Name: A string that is ā€œFried [Flavor] Ice Creamā€, where [Flavor] is the kind of ice cream, i.e. ā€œFried Strawberry Ice Creamā€ for strawberry ice cream.

Flavor: A property with the IceCreamFlavor enum type, indicating the flavor of the ice cream.

Price: A readonly property (i.e. it has only a get and no set) of type decimal with a value of $3.50.

Calories: A readonly property with type uint and a value of 355 for vanilla, 353 for chocolate, or 321 for strawberry.

Fried Candy Bar

You will need to define a class to represent a serving of fried candy bar (a candy bar dipped in breading and deep-fried), which can be customized after creation. You should name this class FriedCandyBar and declare it in the file FriedCandyBar.cs. It should have the following properties:

Name: A string that is ā€œFried [Candy Bar]ā€, where [Candy Bar] is the kind of fried candy bar, i.e. ā€œFried Three Musketeersā€ for a Three Musketeers candy bar.

CandyBar: A property with the CandyBar enum type, indicating the candy bar to fry.

Price: A readonly property (i.e. it has only a get and no set) of type decimal with a value of $2.50.

Calories: A readonly property with type uint and a value of 325 for Snickers, 213 for MilkyWay, 396 for Twix, 350 for ThreeMusketeers, or 385 for ButterFingers.

Fried Twinkie

You will need to define a class to represent a serving of fried twinkie (a twinkie dipped in breading and deep-fried), which can be customized after creation. You should name this class FriedTwinkie and declare it in the file FriedTwinkie.cs. It should have the following properties:

Name: A string that is always ā€œFried Twinkieā€.

Price: A readonly property (i.e. it has only a get and no set) of type decimal with a value of $2.25.

Calories: A readonly property with type uint and a value of 420.

Popper Menu Item Classes

All popper menu item classes should reside in the FriedPiper.Data.MenuItems namespace and be placed in the MenuItems folder within the Data project in your solution. Popper menu items all come in three sizes - small, medium, or large, and the price and calories vary based on the size. The all can also be glazed with frosting, which adds additional calories.

The needed classes are:

Fried Cheesecake

You will need to define a class to represent fried cheesecake (bite-size cheesecake squares dipped in batter and deep-fried), which can be customized after creation. You should name this class FriedCheesecake and declare it in the file FriedCheesecake.cs. It should have the following properties:

Name: A string that is ā€œ[Size] Fried Cheesecakeā€ where [Size] is the serving size of the item, i.e. ā€œSmall Fried Cheesecakeā€ for when the Size property is small.

Glazed: A boolean property indicating that the cheesecake should be glazed with frosting, defaults to true.

Size: A property of type ServingSize.

Price: A readonly property (i.e. it has only a get and no set) of type decimal with a value of $3.75 for small, $4.50 for medium, and $5.25 for large.

Calories: A readonly property of type uint with a value of 310 for small, 425 for medium, or 620 for large, plus an additional 130 calories if Glazed is true.

Fried Oreos

You will need to define a class to represent fried Oreos (Oreo cookies dipped in batter and deep-fried), which can be customized after creation. You should name this class FriedOreos and declare it in the file FriedOreos.cs. It should have the following properties:

Name: A string that is ā€œ[Size] Fried Oreosā€ where [Size] is the serving size of the item, i.e. ā€œSmall Fried Oreosā€ for when the Size property is small.

Glazed: A boolean property indicating that the fried Oreos should be glazed with frosting, defaults to true.

Size: A property of type ServingSize.

Price: A readonly property (i.e. it has only a get and no set) of type decimal with a value of $3.75 for small, $4.50 for medium, and $5.25 for large.

Calories: A readonly property of type uint with a value of 500 for small, 750 for medium, or 1000 for large, plus an additional 130 calories if Glazed is true.

Fried Bananas

You will need to define a class to represent fried bananas (Banana slices dipped in batter and deep-fried), which can be customized after creation. You should name this class FriedBananas and declare it in the file FriedBananas.cs. It should have the following properties:

Name: A string that is ā€œ[Size] Fried Bananasā€ where [Size] is the serving size of the item, i.e. ā€œSmall Fried Bananasā€ for when the Size property is small.

Size: A property of type ServingSize.

Glazed: A boolean property indicating that the fried bananas should be glazed with frosting, defaults to true.

Price: A readonly property (i.e. it has only a get and no set) of type decimal with a value of $3.75 for small, $4.50 for medium, and $5.25 for large.

Calories: A readonly property of type uint with a value of 160 for small, 240 for medium, or 320 for large, plus an additional 130 calories if Glazed is true.

Apple Fritters

You will need to refactor (change) the existing AppleFritters class to representing apple fritters (Apple slices dipped in batter and deep-fried), which can be customized after creation. It should have the following properties:

Name: A string that is ā€œ[Size] Apple Frittersā€ where [Size] is the serving size of the item, i.e. ā€œSmall Apple Frittersā€ for when the Size property is small.

Size: A property of type ServingSize.

Glazed: A boolean property indicating that the fritters should be glazed with frosting, defaults to true.

Price: A readonly property (i.e. it has only a get and no set) of type decimal with a value of $3.00 for small, $4.00 for medium, and $5.00 for large.

Calories: A readonly property of type uint with a value of 240 for small, 360 for medium, or 480 for large, plus an additional 130 calories if Glazed is true.

Submitting the Assignment

Once your project is complete, merge your feature branch back into the main branch and create a release tagged v0.2.0 with name "Milestone 2". Copy the URL for the release page and submit it to the Canvas assignment.

Grading Rubric

The grading rubric for this assignment will be:

25% Structure Did you implement the structure as laid out in the specification? Are the correct names used for classes, enums, properties, methods, events, etc? Do classes inherit from expected base classes?

25% Documentation Does every class, method, property, and field use the correct XML-style documentation? Does every XML comment tag contain explanatory text?

25% Design Are you appropriately using C# to create reasonably efficient, secure, and usable software? Does your code contain bugs that will cause issues at runtime?

25% Functionality Does the program do what the assignment asks? Do properties return the expected values? Do methods perform the expected actions?

Warning

Projects that do not compile will receive an automatic grade of 0.