Skip to content

Commit 68b886a

Browse files
hnchornhnchorn
authored andcommitted
Completed Website Milestone ksu-cis#2.
1 parent f125593 commit 68b886a

File tree

6 files changed

+775
-173
lines changed

6 files changed

+775
-173
lines changed

Data/Menu.cs

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
using BleakwindBuffet.Data.Sides;
1313
using BleakwindBuffet.Data.Drinks;
1414
using BleakwindBuffet.Data.Enums;
15+
using System.IO;
16+
using System.Linq;
1517

1618
namespace BleakwindBuffet.Data
1719
{
@@ -147,5 +149,169 @@ public static IEnumerable<IOrderItem> FullMenu()
147149
list.AddRange(Drinks());
148150
return list;
149151
}
152+
153+
/// <summary>
154+
/// Filters all the items on the menu depending on the category chosen.
155+
/// </summary>
156+
/// <param name="menu">Menu of all items to filter.</param>
157+
/// <param name="type">The category to filter items into.</param>
158+
/// <returns>List of all items on the menu that fit into the specified category.</returns>
159+
public static IEnumerable<IOrderItem> FilterByCategory(IEnumerable<IOrderItem> menu, IEnumerable<string> type)
160+
{
161+
if (type == null || type.Count() == 0) return menu;
162+
163+
var results = new List<IOrderItem>();
164+
foreach(IOrderItem item in menu)
165+
{
166+
if(type.Contains("entree"))
167+
{
168+
if(item is Entree)
169+
{
170+
results.Add(item);
171+
}
172+
}
173+
if (type.Contains("side"))
174+
{
175+
if (item is Side)
176+
{
177+
results.Add(item);
178+
}
179+
}
180+
if (type.Contains("drink"))
181+
{
182+
if (item is Drink)
183+
{
184+
results.Add(item);
185+
}
186+
}
187+
}
188+
return results;
189+
}
190+
191+
/// <summary>
192+
/// Filters all the items on the menu depending on a user search.
193+
/// </summary>
194+
/// <param name="menu">Menu of all items to filter.</param>
195+
/// <param name="name">String typed in by user.</param>
196+
/// <returns>List of all items that fall within the search term(s)</returns>
197+
public static IEnumerable<IOrderItem> Search(IEnumerable<IOrderItem> menu, string name)
198+
{
199+
var results = new List<IOrderItem>();
200+
201+
if (name == null) return menu;
202+
203+
foreach(IOrderItem item in menu)
204+
{
205+
string itemString = item.ToString().ToLower();
206+
if (itemString.Contains(name.ToLower()))
207+
{
208+
results.Add(item);
209+
}
210+
}
211+
212+
return results;
213+
}
214+
215+
/// <summary>
216+
/// Filters all of the items on the menu based on calorie count.
217+
/// </summary>
218+
/// <param name="menu">Menu of all items to filter.</param>
219+
/// <param name="min">Minimum calorie search.</param>
220+
/// <param name="max">Maximum calorie search.</param>
221+
/// <returns>A list of all menu items that fall into the calorie range.</returns>
222+
public static IEnumerable<IOrderItem> FilterByCalories(IEnumerable<IOrderItem> menu, int? min, int? max)
223+
{
224+
//if both are empty
225+
if (min == null && max == null) return menu;
226+
227+
var results = new List<IOrderItem>();
228+
229+
//only a maximum specified
230+
if(min == null)
231+
{
232+
foreach(IOrderItem item in menu)
233+
{
234+
if(item.Calories <= max)
235+
{
236+
results.Add(item);
237+
}
238+
}
239+
return results;
240+
}
241+
242+
//only a minimum specified
243+
if(max == null)
244+
{
245+
foreach(IOrderItem item in menu)
246+
{
247+
if(item.Calories >= min)
248+
{
249+
results.Add(item);
250+
}
251+
}
252+
return results;
253+
}
254+
255+
//both minimum and maximum specified
256+
foreach(IOrderItem item in menu)
257+
{
258+
if(item.Calories >= min && item.Calories <= max)
259+
{
260+
results.Add(item);
261+
}
262+
}
263+
return results;
264+
}
265+
266+
/// <summary>
267+
/// Filters all of the items on the menu based on price.
268+
/// </summary>
269+
/// <param name="menu">Menu of all items to filter.</param>
270+
/// <param name="min">Minimum price search.</param>
271+
/// <param name="max">Maximum price search.</param>
272+
/// <returns>A list of all menu items that fall into the price range.</returns>
273+
public static IEnumerable<IOrderItem> FilterByPrice(IEnumerable<IOrderItem> menu, double? min, double? max)
274+
{
275+
//if both are empty
276+
if (min == null && max == null) return menu;
277+
278+
var results = new List<IOrderItem>();
279+
280+
//only a maximum specified
281+
if (min == null)
282+
{
283+
foreach (IOrderItem item in menu)
284+
{
285+
if (item.Price <= max)
286+
{
287+
results.Add(item);
288+
}
289+
}
290+
return results;
291+
}
292+
293+
//only a minimum specified
294+
if (max == null)
295+
{
296+
foreach (IOrderItem item in menu)
297+
{
298+
if (item.Price >= min)
299+
{
300+
results.Add(item);
301+
}
302+
}
303+
return results;
304+
}
305+
306+
//both minimum and maximum specified
307+
foreach (IOrderItem item in menu)
308+
{
309+
if (item.Price >= min && item.Price <= max)
310+
{
311+
results.Add(item);
312+
}
313+
}
314+
return results;
315+
}
150316
}
151317
}

0 commit comments

Comments
 (0)