public bool TryLeaveParkingWithTicket(int ticketNumber, out ParkingSession session) { session = openSessions.FirstOrDefault(s => s.TicketNumber == ticketNumber); var parkingTime = DateTime.Now - session.EntryDt; var iParkingTime = parkingTime.Days * 24 * 60 + parkingTime.Hours * 60 + parkingTime.Minutes; if (freeParkingTime < iParkingTime) { session = null; return(false); } else { session.ExitDt = DateTime.Now; openSessions.Remove(session); closedSessions.Add(session); return(true); } /* * Check that the car leaves parking within the free leave period * from the PaymentDt (or if there was no payment made, from the EntryDt) * 1. If yes: * 1.1 Complete the parking session by setting the ExitDt property * 1.2 Move the session from the list of active sessions to the list of past sessions * * 1.3 return true and the completed parking session object in the out parameter * * 2. Otherwise, return false, session = null */ }
private List <ParkingSession> GetSessions(string informationFile, string sessionType) { var fileReader = File.ReadAllText("../../../" + informationFile); var listfileReader = fileReader.Split(new char[] { '\n' }); List <ParkingSession> tmpParkingSession = new List <ParkingSession>(); foreach (var s in listfileReader) { var tmpString = s.Split(new char[] { ',' }); if (tmpString[0] == sessionType) { var newActiveSession = new ParkingSession(); newActiveSession.CarPlateNumber = tmpString[1]; newActiveSession.EntryDt = Convert.ToDateTime(tmpString[2]); if (tmpString[3] != "") { newActiveSession.ExitDt = Convert.ToDateTime(tmpString[3]); } if (tmpString[4] != "") { newActiveSession.PaymentDt = Convert.ToDateTime(tmpString[4]); } newActiveSession.TicketNumber = Convert.ToInt32(tmpString[5]); if (tmpString[6] != "") { newActiveSession.TotalPayment = Convert.ToDecimal(tmpString[6]); } tmpParkingSession.Add(newActiveSession); } } return(tmpParkingSession); }
public bool TryLeaveParkingWithTicket(int ticketNumber, out ParkingSession session) { session = FindSession(ticketNumber); if (GetRemainingCost(ticketNumber) == 0) { session.ExitDt = DateTime.Now; activeSessions.Remove(session); passiveSessions.Add(session); WriteSessionData(); return(true); } else { session = null; return(false); } /* * Check that the car leaves parking within the free leave period * from the PaymentDt (or if there was no payment made, from the EntryDt) * 1. If yes: * 1.1 Complete the parking session by setting the ExitDt property * 1.2 Move the session from the list of active sessions to the list of past sessions * * 1.3 return true and the completed parking session object in the out parameter * * 2. Otherwise, return false, session = null */ }
/* ADDITIONAL TASK 2 */ public bool TryLeaveParkingByCarPlateNumber(string carPlateNumber, out ParkingSession session) { /* There are 3 scenarios for this method: * * 1. The user has not made any payments but leaves the parking within the free leave period * from EntryDt: * 1.1 Complete the parking session by setting the ExitDt property * 1.2 Move the session from the list of active sessions to the list of past sessions * * 1.3 return true and the completed parking session object in the out parameter * * 2. The user has already paid for the parking session (session.PaymentDt != null): * Check that the current time is within the free leave period from session.PaymentDt * 2.1. If yes, complete the session in the same way as in the previous scenario * 2.2. If no, return false, session = null * * 3. The user has not paid for the parking session: * 3a) If the session has a connected user (see advanced task from the EnterParking method): * ExitDt = PaymentDt = current date time; * TotalPayment according to the tariff table: * * IMPORTANT: before calculating the parking charge, subtract FreeLeavePeriod * from the total number of minutes passed since entry * i.e. if the registered visitor enters the parking at 10:05 * and attempts to leave at 10:25, no charge should be made, otherwise it would be unfair * to loyal customers, because an ordinary printed ticket could be inserted in the payment * kiosk at 10:15 (no charge) and another 15 free minutes would be given (up to 10:30) * * return the completed session in the out parameter and true in the main return value * * 3b) If there is no connected user, set session = null, return false (the visitor * has to insert the parking ticket and pay at the kiosk) */ throw new NotImplementedException(); }
/* BASIC PART */ public ParkingSession EnterParking(string carPlateNumber) { // Check that there is a free parking place (by comparing the parking capacity // with the number of active parking sessions). If there are no free places, return null if (activeSessions.Count == ParkingCapacity) { return(null); } // Also check that there are no existing active sessions with the same car plate number, // if such session exists, also return null foreach (ParkingSession session in activeSessions) { if (session.CarPlateNumber == carPlateNumber) { return(null); } } // Otherwise: // Create a new Parking session, fill the following properties: // EntryDt = current date time // CarPlateNumber = carPlateNumber (from parameter) // TicketNumber = unused parking ticket number = generate this programmatically ParkingSession newSession = new ParkingSession(CurrentTime, carPlateNumber, ParkingSession.GenerateTicketNumber()); // Add the newly created session to the list of active sessions activeSessions.Add(newSession); // Advanced task: // Link the new parking session to an existing user by car plate number (if such user exists) return(newSession); }
public ParkingSession EnterParking(string carPlateNumber) { if (activeSessions.Count < capacity) { var check = activeSessions.Exists(e => e.CarPlateNumber == carPlateNumber); if (check == true) { return(null); } else { var newSession = new ParkingSession(); newSession.EntryDt = DateTime.Now; newSession.CarPlateNumber = carPlateNumber; if (activeSessions.Count != 0) { newSession.TicketNumber = activeSessions[activeSessions.Count - 1].TicketNumber + 1; } newSession.TicketNumber = 1; var checkuser = users.Exists(e => e.CarPlateNumber == carPlateNumber); if (checkuser == true) { newSession.ParkingUser = users.Find(e => e.CarPlateNumber == carPlateNumber); } activeSessions.Add(newSession); SessionFileRewriter(activeSessions, "/dataActiveSession.txt"); return(newSession); } } else { return(null); } }
public bool TryLeaveParkingWithTicket(int ticketNumber, out ParkingSession session) { int sessionIndex = GetActiveParkingSessionIndex(ticketNumber); if (sessionIndex == -1) { session = null; return(false); } // Check that the car leaves parking within the free leave period // from the PaymentDt (or if there was no payment made, from the EntryDt) int diff = GetTotalMinutesSinceLastPayment(sessionIndex); if (diff < FreeLeavePeriod) { // Complete the parking session by setting the ExitDt property activeSessions[sessionIndex].ExitDt = CurrentTime; // Move the session from the list of active sessions to the list of past sessions completedSessions.Add(activeSessions[sessionIndex]); activeSessions.RemoveAt(sessionIndex); // Return true and the completed parking session object in the out parameter session = completedSessions[completedSessions.Count - 1]; return(true); } session = null; return(false); }
public ParkingSession EnterParking(string carPlateNumber) { if (freeParkingPlaces > activeSessions.Count) { bool nummerCheck = true; foreach (var s in activeSessions) { if (s.CarPlateNumber == carPlateNumber) { nummerCheck = false; } } if (nummerCheck == true) { var newElement = new ParkingSession(); newElement.EntryDt = DateTime.Now; newElement.CarPlateNumber = carPlateNumber; if (activeSessions.Count != 0) { newElement.TicketNumber = activeSessions[activeSessions.Count - 1].TicketNumber + 1; } else { newElement.TicketNumber = 0; } activeSessions.Add(newElement); WriteSessionData(); return(newElement); } else { return(null); } } else { return(null); } /* Check that there is a free parking place (by comparing the parking capacity * with the number of active parking sessions). If there are no free places, return null * * Also check that there are no existing active sessions with the same car plate number, * if such session exists, also return null * * Otherwise: * Create a new Parking session, fill the following properties: * EntryDt = current date time * CarPlateNumber = carPlateNumber (from parameter) * TicketNumber = unused parking ticket number = generate this programmatically * * Add the newly created session to the list of active sessions * * Advanced task: * Link the new parking session to an existing user by car plate number (if such user exists) */ }
public bool TryLeaveParkingByCarPlateNumber(string carPlateNumber, out ParkingSession session) { session = activeSessions.Find(e => e.CarPlateNumber == carPlateNumber); var remainingCost = GetRemainingCost(session.TicketNumber); if (session.PaymentDt == null & remainingCost == 0) { session.ExitDt = DateTime.Now; activeSessions.Remove(session); SessionFileRewriter(activeSessions, "/dataActiveSession.txt"); endedSessions.Add(session); SessionFileRewriter(endedSessions, "/dataEndedSession.txt"); return(true); } else { if (session.PaymentDt != null) { if (remainingCost == 0) { session.ExitDt = DateTime.Now; activeSessions.Remove(session); SessionFileRewriter(activeSessions, "/dataActiveSession.txt"); endedSessions.Add(session); SessionFileRewriter(endedSessions, "/dataEndedSession.txt"); return(true); } else { session = null; return(false); } } else { if (session.ParkingUser != null) { session.ExitDt = DateTime.Now; session.PaymentDt = session.ExitDt; session.EntryDt.AddMinutes(15); var userRemainingCost = GetRemainingCost(session.TicketNumber); session.TotalPayment = remainingCost; activeSessions.Remove(session); endedSessions.Add(session); return(true); } else { session = null; return(false); } } } }
public ParkingSession EnterParking(string carPlateNumber) { int cur_sessinon_length = this.ActiveSessions.Count; object cur_ses_exist = Get_cur_session(carPlateNumber); DateTime Cur_date_entr = DateTime.Now; User Current_user = Get_cur_user(carPlateNumber); /* Check that there is a free parking place (by comparing the parking capacity * with the number of active parking sessions). If there are no free places, return null */ if (cur_sessinon_length >= ParkingManager.Capacity) { return(null); } /* Also check that there are no existing active sessions with the same car plate number, * if such session exists, also return null */ if (cur_ses_exist != null) { return(null); } /* Otherwise: * Create a new Parking session, fill the following properties: * EntryDt = current date time * CarPlateNumber = carPlateNumber (from parameter) * TicketNumber = unused parking ticket number = generate this programmatically */ ParkingSession New_session = new ParkingSession(); New_session.EntryDt = Cur_date_entr; New_session.CarPlateNumber = carPlateNumber; New_session.TicketNumber = this.Get_new_ticket(); New_session.User = Current_user; /* Add the newly created session to the list of active sessions */ this.ActiveSessions.Add(New_session); /* Advanced task: * Link the new parking session to an existing user by car plate number (if such user exists) */ Files.Save_file(this); return(New_session); throw new NotImplementedException(); }
/* BASIC PART */ public ParkingSession EnterParking(string carPlateNumber) { if (parkingCapacity > openSessions.Count) { var i = 0; while (i < openSessions.Count) { if (openSessions[i].CarPlateNumber == carPlateNumber) { return(null); } i++; } ParkingSession newSession = new ParkingSession(); newSession.EntryDt = DateTime.Now; newSession.CarPlateNumber = carPlateNumber; if (openSessions != null) { newSession.TicketNumber = openSessions[openSessions.Count - 1].TicketNumber + 1; } else { newSession.TicketNumber = 1; } openSessions.Add(newSession); return(newSession); } else { return(null); } /* Check that there is a free parking place (by comparing the parking capacity * with the number of active parking sessions). If there are no free places, return null * * Also check that there are no existing active sessions with the same car plate number, * if such session exists, also return null * * Otherwise: * Create a new Parking session, fill the following properties: * EntryDt = current date time * CarPlateNumber = carPlateNumber (from parameter) * TicketNumber = unused parking ticket number = generate this programmatically * * Add the newly created session to the list of active sessions * * Advanced task: * Link the new parking session to an existing user by car plate number (if such user exists) */ }
private ParkingSession FindSession(int ticketNumber) { var session = new ParkingSession(); foreach (var k in activeSessions) { if (k.TicketNumber == ticketNumber) { session = k; } } return(session); }
private int?FindParkingTime(ParkingSession session) { int?time = 0; if (session.PaymentDt != null) { time = Convert.ToInt32((DateTime.Now - session.PaymentDt)?.TotalMinutes); } else { time = Convert.ToInt32((DateTime.Now - session.EntryDt).TotalMinutes); } return(time); }
private void EmulateUserActivity() { ParkingManager parkingManager = new ParkingManager(); for (int i = 0; i < parkingManager.Users.Count; i++) { parkingManager.EnterParking(parkingManager.Users[i].CarPlateNumber); ParkingSession session = new ParkingSession(); parkingManager.TryLeaveParkingByCarPlateNumber(parkingManager.Users[i].CarPlateNumber, out session); } for (int i = 0; i < parkingManager.Users.Count / 2; i++) { parkingManager.EnterParking(parkingManager.Users[i].CarPlateNumber); ParkingSession session = new ParkingSession(); } }
public bool TryLeaveParkingWithTicket(int ticketNumber, out ParkingSession session) { session = activeSessions.Find(e => e.TicketNumber == ticketNumber); if (GetRemainingCost(session.TicketNumber) == 0) { session.ExitDt = DateTime.Now; activeSessions.Remove(session); SessionFileRewriter(activeSessions, "/dataActiveSession.txt"); endedSessions.Add(session); SessionFileRewriter(endedSessions, "/dataEndedSession.txt"); return(true); } else { session = null; return(false); } }
public bool TryLeaveParkingWithTicket(int ticketNumber, out ParkingSession session) { /* * Check that the car leaves parking within the free leave period * from the PaymentDt (or if there was no payment made, from the EntryDt) * 1. If yes: * 1.1 Complete the parking session by setting the ExitDt property * 1.2 Move the session from the list of active sessions to the list of past sessions * * 1.3 return true and the completed parking session object in the out parameter * * 2. Otherwise, return false, session = null */ session = Get_session_by_ticket(ticketNumber); DateTime startTimer; if (session is null) { return(false); } startTimer = session.PaymentDt == null ? session.EntryDt : (DateTime)session.PaymentDt; if (startTimer.AddMinutes(this.FreePeriod) < (DateTime.Now)) { session = null; return(false); } DateTime Exit_time = DateTime.Now; session.ExitDt = Exit_time; this.CompleteSession(session); Files.Save_file(this); return(true); throw new NotImplementedException(); }
public void PayForParking(int ticketNumber, decimal amount) { /* * Save the payment details in the corresponding parking session * Set PaymentDt to current date and time * * For simplicity we won't make any additional validation here and always * assume that the parking charge is paid in full */ ParkingSession session = Get_session_by_ticket(ticketNumber); session.PaymentDt = DateTime.Now; session.TotalPayment = session.TotalPayment == null ? 0 : session.TotalPayment; session.TotalPayment += amount; Files.Save_file(this); }
public decimal GetRemainingCost(int ticketNumber) { /* Return the amount to be paid for the parking * If a payment had already been made but additional charge was then given * because of a late exit, this method should return the amount * that is yet to be paid (not the total charge) */ ParkingSession session = Get_session_by_ticket(ticketNumber); DateTime Timer_start; Timer_start = session.PaymentDt == null ? session.EntryDt : (DateTime)session.PaymentDt; double Time_park = DateTime.Now.Subtract(Timer_start).TotalMinutes; return(this.Get_price(Time_park)); throw new NotImplementedException(); }
private List <ParkingSession> SessionParser(string fullText) { List <ParkingSession> parkingSessions = new List <ParkingSession>(); if (fullText != "") { var tmpData = fullText.Split(new char[] { ';' }); foreach (var s in tmpData) { if (s != "") { var data = s.Split(new char[] { ',' }); var newSession = new ParkingSession(); if (data[0] != "") { newSession.EntryDt = DateTime.Parse(data[0]); } if (data[1] != "") { newSession.PaymentDt = DateTime.Parse(data[1]); } if (data[2] != "") { newSession.ExitDt = DateTime.Parse(data[2]); } if (data[3] != "") { newSession.TotalPayment = Convert.ToDecimal(data[3]); } newSession.CarPlateNumber = data[4]; newSession.TicketNumber = Convert.ToInt32(data[5]); parkingSessions.Add(newSession); } } } return(parkingSessions); }
private void CompleteSession(ParkingSession session) { this.ActiveSessions.Remove(session); this.CompletedSessions.Add(session); }
public ParkingSession Get_session_by_ticket(int ticketNumber) { ParkingSession exist_cur_session = this.ActiveSessions.Find(cur_ses => cur_ses.TicketNumber == ticketNumber); return(exist_cur_session); }
public ParkingSession Get_session_by_Plate_number(string Number) { ParkingSession Req_session = this.ActiveSessions.Find(s => s.CarPlateNumber == Number); return(Req_session); }
static void Main(string[] args) { ParkingManager Current_session = null; if (Files.Is_saved() == true) { Console.WriteLine(@"Previous session is stored, do you want to continue? Enter 'y' if yes"); string continue_asnwer = Console.ReadLine(); Current_session = continue_asnwer == "y" ? (ParkingManager)Files.Reload_session() : Current_session; } Current_session = Current_session == null ? new ParkingManager() : Current_session; Current_session = Current_session == null ? new ParkingManager() : Current_session; string Main_menu = (@"1 - Choose test scenario 2 - Exit"); while (true) { Console.WriteLine(Main_menu); string User_input = Console.ReadLine(); switch (User_input) { case "1": string Scenario_menu = (@"Scenarios: 1 - Scenario 1 from task 2 - Scenario 2 from task 3 - Scenario 3 from task 4 - User leaves parking within 15 minutes 5 - No free places 6 - Same Plate Number"); string[] Cars = { "car1", "car2", "car3", "car4", "car5", "car6", "car7", "car8", "car9", "car10", "car11", "car12" }; int[] Add_hours = { -2, 0, -1, 0 }; int[] Add_mnutes = { 0, -10, -30, -5 }; while (true) { Console.WriteLine(Scenario_menu); string Scenario_choice = Console.ReadLine(); switch (Scenario_choice) { case "1": ParkingSession session_1 = Current_session.EnterParking(Cars[0]); session_1.EntryDt = session_1.EntryDt.AddHours(Add_hours[0]); Console.WriteLine("Scenario 1"); Console.WriteLine($"Remaining cost : {Current_session.GetRemainingCost(session_1.TicketNumber)}"); Current_session.PayForParking(session_1.TicketNumber, Current_session.GetRemainingCost(session_1.TicketNumber)); Console.WriteLine($"Exiting: {Current_session.TryLeaveParkingWithTicket(session_1.TicketNumber, out session_1)}"); Console.WriteLine("---End of the scenario 1---"); break; case "2": ParkingSession session_2 = Current_session.EnterParking(Cars[1]); session_2.EntryDt = session_2.EntryDt.AddMinutes(Add_mnutes[1]); Console.WriteLine("Scenario 2"); Console.WriteLine($"Remaining cost: { Current_session.GetRemainingCost(session_2.TicketNumber)}"); Console.WriteLine($"Exiting: {Current_session.TryLeaveParkingWithTicket(session_2.TicketNumber, out session_2)}"); Console.WriteLine("---End of the scenario 2---"); break; case "3": ParkingSession session_3 = Current_session.EnterParking(Cars[2]); session_3.EntryDt = session_3.EntryDt.AddHours(Add_hours[2]); Console.WriteLine("Scenario 3"); Console.WriteLine($"Remaining cost: {Current_session.GetRemainingCost(session_3.TicketNumber)}"); Current_session.PayForParking(session_3.TicketNumber, Current_session.GetRemainingCost(session_3.TicketNumber)); DateTime newPaymentDt = (DateTime)session_3.PaymentDt; session_3.PaymentDt = newPaymentDt.AddMinutes(Add_mnutes[2]); Console.WriteLine($"Exiting: {Current_session.TryLeaveParkingWithTicket(session_3.TicketNumber, out session_3)}"); Console.WriteLine($"Remaining cost: {Current_session.GetRemainingCost(session_3.TicketNumber)}"); Current_session.PayForParking(session_3.TicketNumber, Current_session.GetRemainingCost(session_3.TicketNumber)); Console.WriteLine($"Exiting: {Current_session.TryLeaveParkingWithTicket(session_3.TicketNumber, out session_3)}"); Console.WriteLine("---End of the scenario 3---"); break; case "4": ParkingSession session_4 = Current_session.EnterParking(Cars[3]); session_4.EntryDt = session_4.EntryDt.AddMinutes(Add_mnutes[3]); Console.WriteLine("Scenario 4"); Console.WriteLine($"Exiting: {Current_session.TryLeaveParkingByCarPlateNumber(Cars[5], out session_4)}"); Console.WriteLine("---End of the scenario 4---"); break; case "5": Console.WriteLine("Scenario 5"); ParkingManager newParking = new ParkingManager(); for (int i = 0; i < ParkingManager.Capacity; i++) { ParkingSession session = newParking.EnterParking(Cars[4] + i); if (session == null) { Console.WriteLine($"Parking cannot accommodate {ParkingManager.Capacity} car"); } } string result_5 = (newParking.EnterParking(Cars[4]) == null ? "null" : "not null"); Console.WriteLine($"{ParkingManager.Capacity + 1} car entering the parking: {result_5}"); Console.WriteLine("---End of the scenario 5---"); break; case "6": Console.WriteLine("Scenario 6"); Current_session.EnterParking(Cars[5]); string result_6 = Current_session.EnterParking(Cars[5]) == null ? "null" : "not null"; Console.WriteLine($"Car with the same plate number can't access parking: {result_6}"); Console.WriteLine(); break; default: Console.WriteLine("There is no such an option, try one more times"); break; } } break; case "2": Environment.Exit(0); break; default: Console.WriteLine("There is no such an option, try one more time"); break; } } }