public GarageManager(IUI ui, IGarageHandler handler, IVehicle vehicle, IUtil util) { this.ui = ui; this.handler = handler; this.vehicle = vehicle; this.util = util; Vehicle.Check = RegNoExists; Vehicle.Callback = Run; }
/// <summary> /// Metoden skapar och parkerar fordon /// Simulerar också att garaget är fullt /// </summary> private void Simulering() { // Hämta vald garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { var(strId, strName, bIsFull, iCapacity, iNumberOfParkedVehicle) = garageHandler.GetGarageInfo(); Simulering((iCapacity - iNumberOfParkedVehicle) + 2); } }
/// <summary> /// Metod för att söka fordon med en speciell färg /// </summary> /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns> private MenuInputResult SearchForVehicleWithColor() { MenuInputResult result = MenuInputResult.NA; this.Ui.Clear(); this.Ui.WriteLine(this.MenuFactory.GetMenu(MenuType.SEARCH_VEHICLE_WITH_COLOR)); // Inläsning av sökt färg från användaren string strInput = this.Ui.ReadLine(); if (!String.IsNullOrWhiteSpace(strInput)) { strInput = strInput.Trim(); if (strInput.Length == 1 && strInput.StartsWith('0')) {// Användaren har valt att avsluta programmet. Återgå till menyn result = MenuInputResult.TO_GARAGE_MENU; return(result); } else { strInput = strInput.ToUpper(); // Hämta vald garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { var lsVehicles = garageHandler.Garage.Where(v => ((IVehicle)v).Color.CompareTo(strInput) == 0).ToList(); if (lsVehicles?.Count > 0) { foreach (var vehicle in lsVehicles) { Ui.WriteLine(vehicle.ToString()); } } else { Ui.WriteLine($"Hittade inga fordon med färgen {strInput.ToLower().FirstToUpper()}"); } Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); } } } else { result = MenuInputResult.WRONG_INPUT; } return(result); }
/// <summary> /// Metod för att låta användaren söka efter fordon på registreringsnumret /// </summary> /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns> private MenuInputResult SearchForVehicleWithRegistrationsNumber() { MenuInputResult result = MenuInputResult.NA; int iCount = 0; this.Ui.Clear(); this.Ui.WriteLine(this.MenuFactory.GetMenu(MenuType.SEARCH_VEHICLE_WITH_REGISTRATIONNUMBER)); // Inläsning av sökt registreringsnummer från användaren string strInput = this.Ui.ReadLine(); if (!String.IsNullOrWhiteSpace(strInput)) { strInput = strInput.Trim(); if (strInput.Length == 1 && strInput.StartsWith('0')) {// Användaren har valt att avsluta programmet. Återgå till menyn result = MenuInputResult.TO_GARAGE_MENU; return(result); } else { strInput = strInput.ToUpper(); // Hämta vald garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { // Det skall bara finnas ett fordon med registreringsnummer var vehicle = garageHandler.Garage.FirstOrDefault(v => ((IVehicle)v).RegistrationNumber.CompareTo(strInput) == 0); if (vehicle != null) { Ui.WriteLine(vehicle.ToString()); } else { Ui.WriteLine("Hittade inga fordon med sökt registreringsnummer"); } Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); } } } else { result = MenuInputResult.WRONG_INPUT; } return(result); }
/// <summary> /// Metoden listar information om alla parkerade bilar /// </summary> private void ListAllVehicle() { Car car = null; Bus bus = null; MotorCycle motorCycle = null; WheeledVehicle wheeledVehicle = null; IVehicle tmpVehicle = null; int iNumberOfSeatedPassengers = 0; // Hämta vald garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { if (garageHandler.Garage.Count() > 0) { foreach (ICanBeParkedInGarage vehicle in garageHandler.Garage) { tmpVehicle = vehicle as IVehicle; wheeledVehicle = vehicle as WheeledVehicle; car = vehicle as Car; bus = vehicle as Bus; motorCycle = vehicle as MotorCycle; if (car != null) { iNumberOfSeatedPassengers = car.NumberOfSeatedPassengers; } else if (bus != null) { iNumberOfSeatedPassengers = bus.NumberOfSeatedPassengers; } else if (motorCycle != null) { iNumberOfSeatedPassengers = motorCycle.NumberOfSeatedPassengers; } Ui.WriteLine($"{tmpVehicle.Color?.ToLower()?.FirstToUpper()} {vehicle.GetType().Name} med registreringsnummer {tmpVehicle?.RegistrationNumber ?? "?"}. Har {wheeledVehicle?.NumberOfWheels ?? '?'} hjul och {iNumberOfSeatedPassengers} sittplatser"); } } else { Ui.WriteLine("Det finns inga fordon i garaget"); } Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); } }
/// <summary> /// Metoden parkerar fordonet i garaget /// </summary> /// <param name="vehicle">Vehicle som vi skall parkera i garaget</param> /// <returns>true om det gick parkera fordonet. Annars returneras false</returns> /// <exception cref="System.ArgumentNullException">Kastas om referensen till Vehicle är null</exception> private bool ParkVehicleInGarage(ICanBeParkedInGarage vehicle) { if (vehicle == null) { throw new ArgumentNullException("Exception. CreateAndParkVehicleMenu.ParkVehicleInGarage(). Referensen till vehicle är null"); } bool bParkedVehicle = false; // Hämta garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { if (garageHandler.ParkVehicle(vehicle)) {// Vi har parkerat fordonet i garaget bParkedVehicle = true; } } return(bParkedVehicle); }
/// <summary> /// Metoden visar menyer där användaren kan välja vad hen vill göra med ett garage /// </summary> /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns> public MenuInputResult Show() { MenuInputResult result = MenuInputResult.NA; do { this.Ui.Clear(); if (result == MenuInputResult.WRONG_INPUT) { this.Ui.WriteLine("Felaktig inmatning"); } result = MenuInputResult.NA; // Hämta vald garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { var(strId, strName, bIsFull, iCapacity, iNumberOfParkedVehicle) = garageHandler.GetGarageInfo(); // Skapa en lämplig utskrift för menyn string strIsFull = bIsFull ? "Nej" : "Ja"; this.Ui.WriteLine($"{strName}. Har lediga platser {strIsFull}. Antal bilar i garaget {iNumberOfParkedVehicle}"); } // Visa menyn this.Ui.WriteLine(this.MenuFactory.GetMenu(MenuType.GARAGE_MENU)); // Hantera inmatning från användaren result = HandleInput(); }while (result != MenuInputResult.TO_MAIN_MENU); return(result); }
/// <summary> /// Metoden skapar och parkerar önskat antal fordon /// </summary> /// <param name="iNumberOfVehicle">Antal fordon som skall skapas</param> private void Simulering(int iNumberOfVehicle) { // Hämta vald garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { Ui.WriteLine("Simulerar att fordon parkeras i garaget"); // Börja skapa lite fordon som parkeras i garaget IVehicleFactory vehicleFactory = new VehicleFactory(this.RegistrationNumberRegister); ICanBeParkedInGarage vehicle = null; IVehicle tmpVehicle = null; for (int i = 0; i < iNumberOfVehicle; i++) { vehicle = vehicleFactory.CreateRandomVehicleForGarage(); if (garageHandler.ParkVehicle(vehicle)) {// Det gick parkera fordonet. Registrerar att registreringsnumret är upptaget tmpVehicle = vehicle as IVehicle; if (tmpVehicle != null) { this.RegistrationNumberRegister.AddRegistrationNumber(tmpVehicle.RegistrationNumber); } } } this.RegistrationNumberRegister.PrintRegister(this.Ui); garageHandler.PrintInformationAboutGarage(); Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); // Nu vill jag simulera att fordon lämnar garaget // Hämta info om garaget var(strId, strName, bIsFull, iCapacity, iNumberOfParkedVehicle) = garageHandler.GetGarageInfo(); if (iNumberOfParkedVehicle > 1) {// Vi har minst ett parkerat fordon. Radera det första i arrayen try { vehicle = garageHandler.Garage[0]; if (vehicle != null) { Ui.WriteLine("Simulerar att ett fordon lämnar garaget"); tmpVehicle = vehicle as IVehicle; string strRegistrationNumber = String.Empty; if (tmpVehicle != null) { strRegistrationNumber = tmpVehicle.RegistrationNumber; } if (garageHandler.RemoveVehicle(0)) { this.RegistrationNumberRegister.RemoveRegistrationNumber(strRegistrationNumber); } this.RegistrationNumberRegister.PrintRegister(this.Ui); garageHandler.PrintInformationAboutGarage(); Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); } } catch (ArgumentOutOfRangeException) { } } } }
/// <summary> /// Metoden simulerar skapandet av ett garage. /// Skapande av bilar som parkerar och lämnar garaget /// Visar även vad som händer om garaget är full och någon vill parkera /// </summary> private void SimulateGarage() { // GetMainMenu Ui.WriteLine("Simulering av att skapa ett garage. Parkera fordon och fordon lämnar garaget"); // Skapa en factory där jag kan skapa garage GarageFactory garageFactory = new GarageFactory(); Guid guid = Guid.NewGuid(); // Skapa ett garage var garage = garageFactory.CreateGarage(guid, "Första garaget", 5); // Skapa en GarageHandler som hantera allt om ett garage this.GarageHandlers.Add(new GarageHandler.GarageHandler(garage, this.Ui)); Ui.WriteLine($"Har skapat ett nytt garage. " + garage); // Vid simuleringen har jag bara en garagehandler och ett garage. Hämta den handlern var garageHandlers = this.GarageHandlers; IGarageHandler garageHandler = garageHandlers[0]; // Börja skapa lite fordon som parkeras i garaget IVehicleFactory vehicleFactory = new VehicleFactory(this.RegistrationNumberRegister); ICanBeParkedInGarage vehicle = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle); ICanBeParkedInGarage vehicle1 = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle1); ICanBeParkedInGarage vehicle2 = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle2); ICanBeParkedInGarage vehicle3 = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle3); ICanBeParkedInGarage vehicle4 = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle4); // Garaget är fullt, men vi försöker parkera ett fordon till ICanBeParkedInGarage vehicle5 = vehicleFactory.CreateRandomVehicleForGarage(); garageHandler.ParkVehicle(vehicle5); garageHandler.PrintInformationAboutGarage(); // Ett fordon lämnar garaget garageHandler.RemoveVehicle(vehicle1); garageHandler.PrintInformationAboutGarage(); // Ett fordon som inte finns i garaget lämnar garageHandler.RemoveVehicle(vehicle5); garageHandler.PrintInformationAboutGarage(); Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); }
/// <summary> /// Metoden hantera input från användaren /// </summary> /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns> private MenuInputResult HandleInput() { IVehicle tmpVehicle = null; MenuInputResult result = MenuInputResult.TO_GARAGE_MENU; // Hämta vald garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { // Inläsning av information från användaren string strInput = this.Ui.ReadLine(); if (!String.IsNullOrWhiteSpace(strInput)) { strInput = strInput.Trim(); if (strInput.StartsWith('0')) {// Användaren har valt att avsluta programmet. Återgå till menyn result = MenuInputResult.TO_GARAGE_MENU; return(result); } else if (strInput.StartsWith('1')) {// Skapa en bil var(menuInputResult, newVehicle) = CreateVehicle(Vehicle_Type.CAR); result = menuInputResult; if (result == MenuInputResult.TO_GARAGE_MENU) { return(result); } if (newVehicle != null) { // Parkera fordonet if (ParkVehicleInGarage(newVehicle) == true) {// Det gick parkera fordonet. Nu skall vi registrerar att registreringsnumret är upptaget tmpVehicle = newVehicle as IVehicle; if (tmpVehicle != null) { // Nu behöver jag lägga till registreringsnumret till de upptagna registreringsnumren this.RegistrationNumberRegister.AddRegistrationNumber(tmpVehicle.RegistrationNumber); } } } else { if (menuInputResult == MenuInputResult.CREATE_VEHICLE_FAILED) { Ui.WriteLine("Det gick inte att skapa ett fordon"); } } Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); } else if (strInput.StartsWith('2')) {// Skapa en buss var(menuInputResult, newVehicle) = CreateVehicle(Vehicle_Type.BUS); result = menuInputResult; if (result == MenuInputResult.TO_GARAGE_MENU) { return(result); } if (newVehicle != null) { // Parkera fordonet if (ParkVehicleInGarage(newVehicle) == true) {// Det gick parkera fordonet. Nu skall vi registrerar att registreringsnumret är upptaget tmpVehicle = newVehicle as IVehicle; if (tmpVehicle != null) { // Nu behöver jag lägga till registreringsnumret till de upptagna registreringsnumren this.RegistrationNumberRegister.AddRegistrationNumber(tmpVehicle.RegistrationNumber); } } } else { if (menuInputResult == MenuInputResult.CREATE_VEHICLE_FAILED) { Ui.WriteLine("Det gick inte att skapa ett fordon"); } } Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); } else if (strInput.StartsWith('3')) {// Skapa en motorcykel var(menuInputResult, newVehicle) = CreateVehicle(Vehicle_Type.MOTORCYCLE); result = menuInputResult; if (result == MenuInputResult.TO_GARAGE_MENU) { return(result); } if (newVehicle != null) { // Parkera fordonet if (ParkVehicleInGarage(newVehicle) == true) {// Det gick parkera fordonet. Nu skall vi registrerar att registreringsnumret är upptaget tmpVehicle = newVehicle as IVehicle; if (tmpVehicle != null) { // Nu behöver jag lägga till registreringsnumret till de upptagna registreringsnumren this.RegistrationNumberRegister.AddRegistrationNumber(tmpVehicle.RegistrationNumber); } } } else { if (menuInputResult == MenuInputResult.CREATE_VEHICLE_FAILED) { Ui.WriteLine("Det gick inte att skapa ett fordon"); } } Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); } else { result = MenuInputResult.WRONG_INPUT; } } else { result = MenuInputResult.TO_GARAGE_MENU; } } return(result); }
/// <summary> /// Metoden hantera input från användaren /// </summary> /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns> private MenuInputResult HandleInput() { int iRemovedNumberOfVehicle = 0; MenuInputResult result = MenuInputResult.TO_GARAGE_MENU; // Hämta vald garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { if (garageHandler.Garage.Count() > 0) {// Det finns fordon i Garaget // Inläsning av vald siffra eller registreringsnummer string strInput = this.Ui.ReadLine(); if (!String.IsNullOrWhiteSpace(strInput)) { strInput = strInput.Trim(); if (strInput.Length == 1 && strInput.StartsWith('0')) {// Användaren har valt att avsluta programmet. Återgå till huvudmenyn result = MenuInputResult.TO_GARAGE_MENU; } else { strInput = strInput.ToUpper(); IVehicle tmpVehicle = null; // Leta upp sökt fordon i garaget. Radera det. Om det gick radera skall vi även radera registreringsnumret från registret med upptagna registreringsnummer foreach (ICanBeParkedInGarage vehicle in garageHandler.Garage) { tmpVehicle = vehicle as IVehicle; if (tmpVehicle != null) { if (tmpVehicle.RegistrationNumber.CompareTo(strInput) == 0) { // Vi har hittat sökt fordon. Radera från garaget if (garageHandler.RemoveVehicle(vehicle)) { // Vi har raderat fordonet från garaget // Radera registreringsnumret från registret av använda registreringsnummer this.RegistrationNumberRegister.RemoveRegistrationNumber(tmpVehicle.RegistrationNumber); iRemovedNumberOfVehicle++; } Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); result = MenuInputResult.TO_GARAGE_MENU; break; } } } if (iRemovedNumberOfVehicle == 0) { Ui.WriteLine("Bilen ni sökte finns inte i garaget"); Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); result = MenuInputResult.TO_GARAGE_MENU; } } } else { result = MenuInputResult.TO_GARAGE_MENU; } } else { Ui.WriteLine("Det finns inga fordon i garaget"); Ui.WriteLine("Return för att återgå till menyn"); Ui.ReadLine(); result = MenuInputResult.TO_GARAGE_MENU; } } return(result); }
/// <summary> /// Metoden söker efter vehicle med en sök text. /// Gör sökningen på ett antal properties och sammanställer resultatet /// </summary> /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns> private MenuInputResult SearchForVehicleWithText() { // Listor med sök ord som har matchat något i sökningarna efter vehicle List <string> lsMatchedRegistrationnumbers = new List <string>(); List <string> lsMatchedColors = new List <string>(); List <string> lsMatchedTypes = new List <string>(); List <int> lsMatchedNumberOfWheels = new List <int>(); List <int> lsMatchedNumberOfSeatedPassengers = new List <int>(); // Sammanställd lista med resultat av sökningen List <ICanBeParkedInGarage> lsVehicle = new List <ICanBeParkedInGarage>(); MenuInputResult result = MenuInputResult.NA; this.Ui.Clear(); // Skriv ut menyn this.Ui.WriteLine(this.MenuFactory.GetMenu(MenuType.SEARCH_VEHICLE_WITH_TEXT)); // Läs in data från användaren string strInput = this.Ui.ReadLine(); if (!String.IsNullOrWhiteSpace(strInput)) { strInput = strInput.Trim(); if (strInput.Length == 1 && strInput.StartsWith('0')) {// Användaren har valt att avsluta programmet. Återgå till menyn result = MenuInputResult.TO_GARAGE_MENU; return(result); } else { strInput = strInput.ToLower(); string[] strArray = strInput.Split(' ', StringSplitOptions.RemoveEmptyEntries); int iNumber = 0; if (strArray.Length > 0) { // Hämta vald garagehandler IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid)); if (garageHandler != null) { foreach (string str in strArray) { if (!String.IsNullOrWhiteSpace(str)) {// Vi har tecken. Gör en sökning // Sök på registreringsnummer var tmpVehiclesRegistrationNumber = garageHandler.Garage.Where(v => ((IVehicle)v).RegistrationNumber.Equals(str, StringComparison.OrdinalIgnoreCase)).ToList(); if (tmpVehiclesRegistrationNumber?.Count > 0) { lsVehicle.AddRange(tmpVehiclesRegistrationNumber); lsMatchedRegistrationnumbers.Add(str); } // Sök på färg var tmpVehiclesColor = garageHandler.Garage.Where(v => ((IVehicle)v).Color.Equals(str, StringComparison.OrdinalIgnoreCase)).ToList(); if (tmpVehiclesColor?.Count > 0) { lsVehicle.AddRange(tmpVehiclesColor); lsMatchedColors.Add(str); } // Sök på fordonstyp var tmpVehiclesType = garageHandler.Garage.Where(v => v.GetType().Name.Equals(str, StringComparison.OrdinalIgnoreCase)).ToList(); if (tmpVehiclesType?.Count > 0) { lsVehicle.AddRange(tmpVehiclesType); lsMatchedTypes.Add(str); } if (Int32.TryParse(str, out iNumber)) { // Sök på antalet hjul var tmpVehiclesNumberOfWheels = garageHandler.Garage.Where(v => ((WheeledVehicle)v).NumberOfWheels == iNumber).ToList(); if (tmpVehiclesNumberOfWheels?.Count > 0) { lsVehicle.AddRange(tmpVehiclesNumberOfWheels); lsMatchedNumberOfWheels.Add(iNumber); } // Sök på antalet sittande passagerare var tmpVehiclesNumberOfSeatedPassengers = garageHandler.Garage.Where(v => ((WheeledVehicle)v).NumberOfSeatedPassengers == iNumber).ToList(); if (tmpVehiclesNumberOfSeatedPassengers?.Count > 0) { lsVehicle.AddRange(tmpVehiclesNumberOfSeatedPassengers); lsMatchedNumberOfSeatedPassengers.Add(iNumber); } } } }// End of foreach strArray // Nu skall vi filtrera listan med fordon som har matchat något i sökningen if (lsVehicle?.Count > 0) { // Nu vill jag filtrera resultatet med de ord i texten som vi har fått matchningar lsVehicle = FilterSearchResult(lsVehicle, lsMatchedRegistrationnumbers, lsMatchedColors, lsMatchedTypes, lsMatchedNumberOfWheels, lsMatchedNumberOfSeatedPassengers); // Se till att alla dubbletter försvinner lsVehicle = lsVehicle.Distinct().ToList(); if (lsVehicle?.Count > 0) { // Skriv ut de fordon som sökningen matchar foreach (IVehicle vehicle in lsVehicle) { Ui.WriteLine(vehicle.ToString()); } } else { Ui.WriteLine($"Hittade inga fordon med sökningen {strInput}"); } } else { Ui.WriteLine($"Hittade inga fordon med sökningen {strInput}"); } Ui.WriteLine("Return för att fortsätta"); Ui.ReadLine(); } } else { result = MenuInputResult.WRONG_INPUT; } } } else { result = MenuInputResult.WRONG_INPUT; } return(result); }
public GarageManager(IUI ui, IGarageHandler handler) { this.ui = ui; this.handler = handler; menyOptions = GetMenyOptions(); }