コード例 #1
0
        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"));
        }