Previous Versions
Previous Versions of this page:
Previous Versions of this page:
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.
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.
You will need to create
Enums (4) representing:
Classes (4) representing entrees:
Classes (4) representing sides:
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.
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!
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
ServingSize
- The size of the menu item
To get you started, here’s the ServingSize
enum defined:
/// <summary>
/// The size of a menu item
/// </summary>
public enum ServingSize
{
Small,
Medium,
Large
}
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:
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
.
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.
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.
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
).
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:
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.
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.
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.
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.
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.
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?
Projects that do not compile will receive an automatic grade of 0.
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.
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.
You will need to create
Enums (4) representing:
Classes (4) representing regular menu items:
Classes (4) representing poppers - bite-sized fried treats
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.
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!
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
IceCreamFlavor
- The ice cream flavors available at Fried Piper
CandyBar
- The candy bars available at Fried Piper
ServingSize
- The size of the popper menu item
To get you started, here’s the last enum defined:
/// <summary>
/// The size of a menu item
/// </summary>
public enum ServingSize
{
Small,
Medium,
Large
}
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:
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.
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.
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.
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.
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:
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.
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.
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.
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.
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.
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?
Projects that do not compile will receive an automatic grade of 0.