Ejemplo n.º 1
0
        /// <summary>
        /// Tar en sökfras och söker efter parkerade fordon. Fordonen läggstill i en resultat lista som sedan skrivs ut.
        /// </summary>
        /// <param name="sq"></param>
        static void ShowSearchResult(string sq)
        {
            int OriginalLeft = Console.CursorLeft;          //Spara markörens
            int OriginalTop  = Console.CursorTop;           //position
            int l            = gh.GetParkingspots().Length; //Antal parkeringar
            int left         = Console.WindowWidth - 40;    //Variabel för att sedan flytta markören 40 karaktärer från högra kanten
            int top          = 5;                           //Variabel för att flytta markören till rad 5

            //Rensa resultatlistan inför ny sökning
            searchResult.Clear();
            int vehicleAmount = 0;

            //Kollar om sökfrasen inte är tom
            if (sq.Length > 0)
            {
                if (sq == "Car")
                {
                    //Sök och lägg till fordon som vars namn börjar med sökfrasen
                    IEnumerable <Vehicle> vQC = gh.GetParkedVehicles().Where(q => q.type == "Car");
                    foreach (Vehicle v in vQC)
                    {
                        vehicleAmount += 1;
                        if (!searchResult.Contains(v))
                        {
                            searchResult.Add(v);
                        }
                    }
                }
                else if (sq == "Bike")
                {
                    //Sök och lägg till fordon som vars namn börjar med sökfrasen
                    IEnumerable <Vehicle> vQB = gh.GetParkedVehicles().Where(q => q.type == "Bike");
                    foreach (Vehicle v in vQB)
                    {
                        vehicleAmount += 1;
                        if (!searchResult.Contains(v))
                        {
                            searchResult.Add(v);
                        }
                    }
                }
                else if (sq == "Quad")
                {
                    //Sök och lägg till fordon som vars namn börjar med sökfrasen
                    IEnumerable <Vehicle> vQQ = gh.GetParkedVehicles().Where(q => q.type == "Quad");
                    foreach (Vehicle v in vQQ)
                    {
                        vehicleAmount += 1;
                        if (!searchResult.Contains(v))
                        {
                            searchResult.Add(v);
                        }
                    }
                }
                else if (sq == "Lawnmower")
                {
                    //Sök och lägg till fordon som vars namn börjar med sökfrasen
                    IEnumerable <Vehicle> vQL = gh.GetParkedVehicles().Where(q => q.type == "Lawnmower");
                    foreach (Vehicle v in vQL)
                    {
                        vehicleAmount += 1;
                        if (!searchResult.Contains(v))
                        {
                            searchResult.Add(v);
                        }
                    }
                }
                else
                {
                    //Sök och lägg till fordon som vars namn börjar med sökfrasen
                    IEnumerable <Vehicle> vQ = gh.GetParkedVehicles().Where(q => q.Name.StartsWith(sq)).Select(q => q).OrderBy(q => q.type);
                    foreach (Vehicle v in vQ)
                    {
                        if (!searchResult.Contains(v))
                        {
                            searchResult.Add(v);
                        }
                    }
                    //Sök och lägg till fordon som vars namn innehåller sökfrasen
                    IEnumerable <Vehicle> vQ2 = gh.GetParkedVehicles().Where(q => q.Name.ToLower().Contains(sq.ToLower())).Select(q => q).OrderBy(q => q.type);
                    foreach (Vehicle v in vQ2)
                    {
                        if (!searchResult.Contains(v))
                        {
                            searchResult.Add(v);
                        }
                    }
                }
            }
            //Skriv ut tomma rader för att ta bort tidigare text
            for (int q = 0; q < 30; q++)
            {
                Console.SetCursorPosition(left, top + q);
                Console.WriteLine("                                         ");
            }

            //Förhindrar att antal sökresultat blir mer än fyra
            int limit = searchResult.Count();

            if (limit > 4)
            {
                limit = 4;
            }

            //Flytta markören och skriv tomma rader
            Console.SetCursorPosition(left, top - 2);
            Console.WriteLine("                                             ");
            Console.SetCursorPosition(left, top - 1);
            Console.WriteLine("                                             ");
            Console.SetCursorPosition(left, top - 2);

            //Om sökfrasen innehåller karaktärer skrivs Search och sökfrasen ut
            if (sq.Length > 0 && vehicleAmount == 0)
            {
                Console.WriteLine("Search: " + sq);
            }
            else if (sq.Length > 0 && vehicleAmount != 0)
            {
                Console.WriteLine("Search: " + sq + " Amount: " + vehicleAmount);
            }

            //Loopa och skriv ut alla eller 4 resultat
            for (int i = 0; i < limit; i += 1)
            {
                //Är resultatet en parkering?
                if (searchResult[i] != null)
                {
                    //Spara fordonet i lokal variabel
                    Vehicle v = searchResult[i];
                    //Spara fordonets parking som sträng för att kunna byta ut talet till en text
                    var spot = v.spot.ToString();
                    //Om fordonets parkering är 0 innebär det att vi kör fordonet. Dvs fordonet är "In use"
                    if (v.spot == 0)
                    {
                        spot = "In use";
                    }
                    Console.SetCursorPosition(left, top - 1);

                    //Skriv ut rad mellan resultaten
                    for (int z = 0; z < 30; z++)
                    {
                        Console.Write("-");
                    }

                    //Skriv ut resultat
                    Console.SetCursorPosition(left, top);
                    Console.WriteLine("{0, -18}{1}", "Parkingspot:", spot);
                    Console.SetCursorPosition(left, top + 1);
                    Console.WriteLine("{0, -18}{1}", "Name of Vehicle:", v.Name);
                    Console.SetCursorPosition(left, top + 2);
                    Console.WriteLine("{0, -18}{1}", "Vehicle:", v.type);
                    Console.SetCursorPosition(left, top + 3);
                    Console.WriteLine("{0, -18}{1}", "Color:", v.Color);
                    Console.SetCursorPosition(left, top + 4);
                    Console.WriteLine("{0, -18}{1}", "Value:", v.Value);
                    Console.SetCursorPosition(left, top + 5);
                    Console.WriteLine("{0, -18}{1}", "Nr of wheels:", v.NrOfWheels);
                    Console.SetCursorPosition(left, top);

                    //Om vi har utrymme för fler resultat flyttar vi markören längre ned
                    if (top < Console.BufferHeight - 8)
                    {
                        top += 8;
                    }
                }
            }
            //Flytta markören till sin orginalposition
            Console.SetCursorPosition(OriginalLeft, OriginalTop);
        }