コード例 #1
0
 public static void SetGarage(Garage <Vehicle> g)
 {
     garage = g;
 }
コード例 #2
0
        static bool HandleInput(string input)
        {
            if (input == "")
            {
                Console.SetCursorPosition(Console.CursorLeft, Console.CursorTop - 1);
                return(false);
            }

            char c = input.ToLower()[0];

            switch (currentPage)
            {
            case Page.Empty:
                break;

            case Page.Main:
                switch (c)
                {
                // New garage
                case 'n':
                    if (garage != null)
                    {
                        GenericMessage("Varning: det existerande garaget kommer att ersättas!", ConsoleColor.Red);
                    }

                    if (GetConfirmation("Är du säker på att du vill skapa ett nytt garage? (J/N)", color: ConsoleColor.Yellow))
                    {
                        Console.ResetColor();
                        Console.Write("Ange antal platser i garaget: ");

                        long limit    = -1;
                        int  maxlimit = int.MaxValue;

                        try
                        {
                            limit = long.Parse(Console.ReadLine());
                        }
                        catch
                        {
                            Console.ForegroundColor = ConsoleColor.Yellow;
                            Console.WriteLine("Felaktig inmatning!\n");
                            return(true);
                        }

                        Console.ForegroundColor = ConsoleColor.Yellow;


                        if (limit < 1)
                        {
                            Console.WriteLine("Ett garage måste ha minst en plats!\n");
                            return(true);
                        }
                        else if (limit > maxlimit)
                        {
                            Console.WriteLine("Garaget kan maximalt ha {0} platser!\n", maxlimit);
                            return(true);
                        }

                        try
                        {
                            garage = new Garage <Vehicle>((int)limit);
                        }
                        catch (OutOfMemoryException)
                        {
                            Console.WriteLine("Garaget är för stort för att rymmas i minnet!");
                            return(true);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                            return(true);
                        }

                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("\nEtt nytt garage har skapats.\n");
                    }
                    else
                    {
                        AbortedMessage();
                    }
                    break;

                // Overview
                case 'ö':
                    if (garage != null)
                    {
                        Console.WriteLine("\nÖversikt\n");
                        foreach (var what in Vehicle.GetValidTypes())
                        {
                            var types = garage.Where(t => (string)t.GetType().GetProperty("Type").GetValue(t, null) == what);
                            int count = types.Count();
                            if (count > 0)
                            {
                                Console.ForegroundColor = ConsoleColor.Gray;
                            }
                            else
                            {
                                Console.ForegroundColor = ConsoleColor.DarkGray;
                            }
                            Console.WriteLine("{0}x {1}", count, what);
                        }
                        Console.WriteLine();
                        int taken = garage.Count();
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine("Lediga platser: {0}", garage.Limit() - taken);
                        Console.WriteLine("Upptagna platser: {0}", taken);
                        Console.WriteLine("Totalt antal platser: {0}", garage.Limit());
                        Console.WriteLine();
                    }
                    else
                    {
                        NullGarageError();
                    }
                    break;

                // Show vehicles
                case 'v':
                    if (garage != null)
                    {
                        Console.WriteLine("Fordon:\n");
                        DisplayVehicleInfo(garage.ToList(), true);
                    }
                    else
                    {
                        NullGarageError();
                    }
                    break;

                // Search for vehicles
                case 's':
                    if (garage != null)
                    {
                        if (garage.Count() == 0)
                        {
                            GenericMessage("Garaget är tomt!", ConsoleColor.Yellow);
                        }
                        else
                        {
                            SearchVehicles();
                        }
                    }
                    else
                    {
                        NullGarageError();
                    }
                    break;

                // Add vehicle
                case 'l':
                    if (garage != null)
                    {
                        if (garage.Count() == garage.Limit())
                        {
                            GenericMessage("Garaget är fullt!", ConsoleColor.Yellow);
                        }
                        else
                        {
                            Console.WriteLine("\nVälj typ av fordon att lägga till:");
                            int count = DisplayNumberedList(Vehicle.GetValidTypes());
                            AbortOptionMessage();
                            int sel = GetNumber(0, count);
                            if (sel > 0)
                            {
                                Type vehtype = HelperMethods.GetDerivedConcreteClasses(typeof(Vehicle)).ElementAt(sel - 1);
                                //Console.WriteLine(vehtype);
                                var obj = (Vehicle)vehtype.InvokeMember("Create", BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.Public, null, null, null);
                                //Console.WriteLine(obj);
                                if (GetValidFields(obj))
                                {
                                    GenericMessage("\nFordonet lades till!\n", ConsoleColor.White);
                                    garage.Add(obj);
                                }
                            }
                            else
                            {
                                AbortedMessage();
                            }
                        }
                    }
                    else
                    {
                        NullGarageError();
                    }
                    break;

                // Remove vehicle
                case 't':
                    if (garage != null)
                    {
                        if (garage.Count() == 0)
                        {
                            GenericMessage("Garaget är tomt!", ConsoleColor.Yellow);
                        }
                        else
                        {
                            Console.WriteLine("\nVälj ett fordon att ta bort:");
                            int count = DisplayNumberedList(MakeVehicleList());
                            AbortOptionMessage();
                            int sel = GetNumber(0, count);
                            if (sel > 0)
                            {
                                var veh = garage.ElementAt(sel - 1);
                                if (GetConfirmation(string.Format("Vill du ta bort {0} med reg. nr. {1}? (J/N)", veh.Type, veh.Registration)))
                                {
                                    GenericMessage("Fordonet togs bort!\n", ConsoleColor.White);
                                    garage.Remove(veh);
                                }
                                else
                                {
                                    AbortedMessage();
                                }
                            }
                        }
                    }
                    else
                    {
                        NullGarageError();
                    }
                    break;

                // Quit
                case 'x':
                    if (GetConfirmation("Är du säker på att du vill avsluta? (J/N)"))
                    {
                        Environment.Exit(0);
                    }
                    break;

                default:
                    InvalidSelectionError();
                    break;
                }
                break;

            default:
                throw new NotImplementedException();
            }

            return(true);
        }