public static void Start(string menuFile) { try { if (menuFile != null) { menuFile.MenuFileExists(); } else { menuFile = CookBookFileSystem.DEFAULT_STORAGE_FILE_NAME; } ICookBook cookbook = new CookBookFileSystem(); ICollection<string> validMenus = new LinkedList<string>(); Console.WriteLine("COUNTER PROGRAM"); using (StreamReader reader = new StreamReader(menuFile)) { string currentLine; while ((currentLine = reader.ReadLine()) != null) { var dishes = currentLine.Split(',').Select(dish => dish.Trim()).ToArray<string>(); bool isValidMenu = true; for (int dishPosition = 0; dishPosition < 5 && isValidMenu; dishPosition++) { try { var dish = dishes[dishPosition].ToLower(); int dishCorrectPosition; string cookbookPosition = cookbook.Get(dish); if (cookbookPosition == null) { dishCorrectPosition = RequestUserKnowledge(dish); if (dishCorrectPosition == -1) //exit program throw new EndProgramException(); cookbook.Set(dish, dishCorrectPosition.ToString()); } else if (!int.TryParse(cookbookPosition, out dishCorrectPosition)) { isValidMenu = false; // something wrong in the cookbook break; } if (dishCorrectPosition != dishPosition) { isValidMenu = false; break; } } catch (IndexOutOfRangeException iOOREx) { } } if (isValidMenu) { validMenus.Add(currentLine); } } } var menus = "- " + string.Join("\n- ", validMenus); Console.WriteLine(menus); Console.WriteLine("\nTotal valid menus: {0}", validMenus.Count); Console.WriteLine("---"); } catch (EndProgramException ePEx) { Console.WriteLine("---"); } }
public static void Start() { Console.WriteLine("COMMAND LINE COOKBOOK MANAGER\n\n"); ICookBook cookbook = new CookBookFileSystem(); string userInput = null; string[] commands = { "GET\t(requires dish:string)", "GETBT\t(requires dishType:int)", "LIKE\t(requires dish:string)", "SET\t(requires dish:string dishType:int)", "DEL\t(requires dish:string)", "CLEAR\t(clear all the cookbook)", "SAVE\t(save the cookbook in the storage)", "PRINT\t(print all the dishes in the cookbook)", "HELP\t(display this message)", "QUIT\t(exit the program)" }; commands.DisplayHelp(); Console.WriteLine("\n"); do { Console.Write("Operation:\t"); userInput = Console.ReadLine().ToUpper(); Console.WriteLine("Result:"); try { string[] inputTokens = userInput.Split(' '); string operation = inputTokens[0]; string value; switch (operation) { case "GET": if (operation.Length < 2) { WrongArguments(); break; } value = cookbook.Get(inputTokens[1]); Console.WriteLine("\t\t" + inputTokens[1] + ", " + value); break; case "GETBT": if (operation.Length < 2) { WrongArguments(); break; } var dishType = inputTokens[1]; var dishes = cookbook.Where(dish => dish.Value == dishType) .OrderBy(dishPair => dishPair.Key) .Select(dishPair => dishPair.Key) .ToList<string>(); Console.WriteLine("\tFound {0} dishes:\n", dishes.Count); Console.WriteLine("\t" + string.Join(",\n\t", dishes)); break; case "LIKE": if (operation.Length < 2) { WrongArguments(); break; } var partialValue = inputTokens[1]; var dishesContaining = cookbook.Where(dish => dish.Key.ToUpper().Contains(partialValue)) .OrderBy(dishPair => dishPair.Key) .ThenBy(dishPair => dishPair.Value) .Select(dishPair => String.Format("{0} - {1}", dishPair.Key, dishPair.Value)) .ToList<string>(); Console.WriteLine("\tFound {0} dishes matching \"{1}\":\n", dishesContaining.Count, partialValue); Console.WriteLine("\t" + string.Join(",\n\t", dishesContaining)); break; case "SET": if (operation.Length < 3) { WrongArguments(); break; } cookbook.Set(inputTokens[1], inputTokens[2]); value = cookbook.Get(inputTokens[1]); Console.WriteLine("\t\tInserted pair: " + inputTokens[1] + ", " + inputTokens[2]); break; case "DEL": if (operation.Length < 2) { WrongArguments(); break; } value = cookbook.Get(inputTokens[1]); cookbook.Remove(inputTokens[1]); Console.WriteLine("\t\tDeleted pair: " + inputTokens[1] + ", " + value); break; case "CLEAR": cookbook.Clear(); Console.WriteLine("\t\tCookbook cleared"); break; case "SAVE": Console.WriteLine("\t\tBegin saving cookbook in storage: " + ((CookBookFileSystem)cookbook).STORAGE_PATH); Console.WriteLine("\t\tPlease wait..."); cookbook.CleanAndSaveCookBook(); Console.WriteLine("\t\tCleaning and saving completed"); break; case "PRINT": cookbook.PrintAll(); break; case "?": case "HELP": commands.DisplayHelp(); break; case "QUIT": Console.WriteLine("\tbye!"); break; default: Console.WriteLine("No command found: insert HELP to see all the available commands"); break; } Console.WriteLine("---"); } catch (Exception ex) { Console.Error.WriteLine("error: " + ex.Message); } } while (!userInput.Equals("QUIT")); }