private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //Author: Paolo Jaldon MessageBox.Show(String.Format("See you next time!")); crm.SaveToFile(); fleet.SaveToFile(); }
static void Main(string[] args) { CRM crm = new CRM(); Fleet fleet = new Fleet(); Console.WriteLine("\n### Mates-Rates Rent-a-Car Operation Menu ###\n"); Console.WriteLine("You may press the ESC key at any menu to exit. Press the BACKSPACE key to return to the previous menu."); while (true) { ConsoleKeyInfo mainInput; Console.WriteLine("\nPlease enter a character from the options below:\n"); Console.WriteLine("a) Customer Management"); Console.WriteLine("b) Fleet Management"); Console.WriteLine("c) Rental Management"); Console.WriteLine(); Console.Write(">"); mainInput = Console.ReadKey(); Console.WriteLine(); if (mainInput.Key == ConsoleKey.A) { while (true) { ConsoleKeyInfo customerInput; Console.WriteLine("\nPlease enter a character from the options below:\n"); Console.WriteLine("a) Display Customers"); Console.WriteLine("b) New Customer"); Console.WriteLine("c) Modify Customer"); Console.WriteLine("d) Delete Customer"); Console.WriteLine(); Console.Write(">"); customerInput = Console.ReadKey(); Console.WriteLine(); if (customerInput.Key == ConsoleKey.A) { Console.WriteLine(); List <Customer> customers = crm.GetCustomers(); DataTable customersTable = new DataTable(); DataRow customersRow = null; customersTable.TableName = "Customers"; customersTable.Columns.Add("ID", typeof(int)).AllowDBNull = false; customersTable.Columns.Add("Title", typeof(string)); customersTable.Columns.Add("First Name", typeof(string)); customersTable.Columns.Add("Last Name", typeof(string)); customersTable.Columns.Add("Gender", typeof(string)); customersTable.Columns.Add("DOB", typeof(string)); for (int i = 0; i < customers.Count; i++) { customersRow = customersTable.NewRow(); // have new row on each iteration customersRow["ID"] = customers[i].CustomerID; customersRow["Title"] = customers[i].Title; customersRow["First Name"] = customers[i].FirstNames; customersRow["Last Name"] = customers[i].LastNames; if (customers[i].Gen == Gender.Male) { customersRow["Gender"] = "Male"; } else { customersRow["Gender"] = "Female"; } customersRow["DOB"] = customers[i].DateOfBirth; customersTable.Rows.Add(customersRow); } customersTable.Print(); } else if (customerInput.Key == ConsoleKey.B) { while (true) { Customer customer; int ID; string title, firstName, lastName, gender, DOB; string[] format = new string[] { "dd/MM/yyyy" }; DateTime dateTime; Console.WriteLine("\nPlease fill the following fields (fields marked with * are required):\n"); Console.Write("Title*: "); title = Console.ReadLine(); while (!Regex.IsMatch(title, @"^[a-zA-Z]+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("Title*: "); title = Console.ReadLine(); } Console.Write("First Name*: "); firstName = Console.ReadLine(); while (!Regex.IsMatch(firstName, @"^[a-zA-Z]+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("First Name*: "); firstName = Console.ReadLine(); } Console.Write("Last Name*: "); lastName = Console.ReadLine(); while (!Regex.IsMatch(lastName, @"^[a-zA-Z]+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("Last Name*: "); lastName = Console.ReadLine(); } Console.Write("Gender*: "); gender = Console.ReadLine(); gender = gender.ToLower(); while (gender != "male" && gender != "female") { Console.WriteLine("\nInvalid Input!\n"); Console.Write("Gender*: "); gender = Console.ReadLine(); gender = gender.ToLower(); } Console.Write("DOB*: "); DOB = Console.ReadLine(); while (!(DateTime.TryParseExact(DOB, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.NoCurrentDateDefault, out dateTime))) { Console.WriteLine("\nIncorrect Format!\n"); Console.Write("DOB*: "); DOB = Console.ReadLine(); } Console.WriteLine(); ID = crm.GenerateID(); if (gender == "male") { customer = new Customer(ID, title, firstName, lastName, Gender.Male, DOB); } else { customer = new Customer(ID, title, firstName, lastName, Gender.Female, DOB); } crm.AddCustomer(customer); crm.SaveToFile(); Console.WriteLine("Successfully created new customer '" + ID + " - " + title + " " + firstName + " " + lastName + "' and added to customer list."); break; } } else if (customerInput.Key == ConsoleKey.C) { string ID; Console.WriteLine("\nPlease enter an ID to modify record:\n"); Console.Write("ID: "); ID = Console.ReadLine(); while (!Regex.IsMatch(ID, @"^\d+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("ID: "); ID = Console.ReadLine(); } if (crm.FindCustomer(Convert.ToInt32(ID))) { while (true) { ConsoleKeyInfo modifyCustomerInput; Console.WriteLine("\nPlease enter a character from the options below to modify trait:\n"); Console.WriteLine("a) Title"); Console.WriteLine("b) First Name"); Console.WriteLine("c) Last Name"); Console.WriteLine("d) Gender"); Console.WriteLine("e) DOB"); Console.WriteLine(); Console.Write(">"); modifyCustomerInput = Console.ReadKey(); Console.WriteLine(); if (modifyCustomerInput.Key == ConsoleKey.A) { string title; Console.Write("\nTitle: "); title = Console.ReadLine(); while (!Regex.IsMatch(title, @"^[a-zA-Z]+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("Title: "); title = Console.ReadLine(); } crm.ModifyCustomer(Convert.ToInt32(ID), 1, title); crm.SaveToFile(); Console.WriteLine("\nID " + ID + " is successfully modified."); break; } else if (modifyCustomerInput.Key == ConsoleKey.B) { string firstName; Console.Write("\nFirst Name: "); firstName = Console.ReadLine(); while (!Regex.IsMatch(firstName, @"^[a-zA-Z]+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("First Name: "); firstName = Console.ReadLine(); } crm.ModifyCustomer(Convert.ToInt32(ID), 2, firstName); crm.SaveToFile(); Console.WriteLine("\nID " + ID + " is successfully modified."); break; } else if (modifyCustomerInput.Key == ConsoleKey.C) { string lastName; Console.Write("\nLast Name: "); lastName = Console.ReadLine(); while (!Regex.IsMatch(lastName, @"^[a-zA-Z]+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("Last Name: "); lastName = Console.ReadLine(); } crm.ModifyCustomer(Convert.ToInt32(ID), 3, lastName); crm.SaveToFile(); Console.WriteLine("\nID " + ID + " is successfully modified."); break; } else if (modifyCustomerInput.Key == ConsoleKey.D) { string gender; Console.Write("\nGender: "); gender = Console.ReadLine(); gender = gender.ToLower(); while (gender != "male" && gender != "female") { Console.WriteLine("\nInvalid Input!\n"); Console.Write("Gender: "); gender = Console.ReadLine(); gender = gender.ToLower(); } crm.ModifyCustomer(Convert.ToInt32(ID), 4, gender); Console.WriteLine("\nID " + ID + " is successfully modified."); break; } else if (modifyCustomerInput.Key == ConsoleKey.E) { string DOB; string[] format = new string[] { "dd/MM/yyyy" }; DateTime dateTime; Console.Write("\nDOB: "); DOB = Console.ReadLine(); while (!(DateTime.TryParseExact(DOB, format, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.NoCurrentDateDefault, out dateTime))) { Console.WriteLine("\nIncorrect Format!\n"); Console.Write("DOB: "); DOB = Console.ReadLine(); } crm.ModifyCustomer(Convert.ToInt32(ID), 5, DOB); crm.SaveToFile(); Console.WriteLine("\nID " + ID + " is successfully modified."); break; } else if (modifyCustomerInput.Key == ConsoleKey.Escape) { crm.SaveToFile(); fleet.SaveToFile(); Environment.Exit(0); } else if (modifyCustomerInput.Key == ConsoleKey.Backspace) { break; } else { Console.WriteLine("\nInvalid Input!"); } } } else { Console.WriteLine("\nID " + ID + " is not found."); } } else if (customerInput.Key == ConsoleKey.D) { string ID; Console.WriteLine("\nPlease enter an ID to delete record:\n"); Console.Write("ID: "); ID = Console.ReadLine(); while (!Regex.IsMatch(ID, @"^\d+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("ID: "); ID = Console.ReadLine(); } if (crm.RemoveCustomer(Convert.ToInt32(ID), fleet)) { Console.WriteLine("\nSuccessfully deleted customer " + ID + "."); } else { Console.WriteLine("\nCustomer " + ID + " is renting and thus cannot be deleted."); } } else if (customerInput.Key == ConsoleKey.Backspace) { break; } else if (customerInput.Key == ConsoleKey.Escape) { crm.SaveToFile(); fleet.SaveToFile(); Environment.Exit(0); } else { Console.WriteLine("\nInvalid Input!"); } } } else if (mainInput.Key == ConsoleKey.B) { while (true) { Console.WriteLine("\nPlease enter a number from the option below:\n"); Console.WriteLine("a) Display Fleet"); Console.WriteLine("b) New Vehicle"); Console.WriteLine("c) Modify Vehicle"); Console.WriteLine("d) Delete Vehicle\n"); Console.Write(">"); ConsoleKeyInfo fleetInput; fleetInput = Console.ReadKey(); if (fleetInput.Key == ConsoleKey.A) { Console.WriteLine(); List <Vehicle> vehicles = fleet.GetFleets(); var fleetTable = new DataTable(); DataRow fleetRow = null; fleetTable.TableName = "Fleet"; fleetTable.Columns.Add("Registration", typeof(string)); fleetTable.Columns.Add("Grade", typeof(string)); fleetTable.Columns.Add("Make", typeof(string)); fleetTable.Columns.Add("Model", typeof(string)); fleetTable.Columns.Add("Year", typeof(int)).AllowDBNull = false; fleetTable.Columns.Add("NumSeats", typeof(int)).AllowDBNull = false; fleetTable.Columns.Add("Transmission", typeof(string)); fleetTable.Columns.Add("Fuel", typeof(string)); fleetTable.Columns.Add("GPS", typeof(string)); fleetTable.Columns.Add("SunRoof", typeof(string)); fleetTable.Columns.Add("DailyRate", typeof(string)); fleetTable.Columns.Add("Colour", typeof(string)); for (int i = 0; i < vehicles.Count; i++) { fleetRow = fleetTable.NewRow(); // have new row on each iteration fleetRow["Registration"] = vehicles[i].Registration; fleetRow["Grade"] = vehicles[i].Grade; fleetRow["Make"] = vehicles[i].Make; fleetRow["Model"] = vehicles[i].Model; fleetRow["Year"] = vehicles[i].Year; fleetRow["NumSeats"] = vehicles[i].NumSeats; fleetRow["Transmission"] = vehicles[i].Transmission; fleetRow["Fuel"] = vehicles[i].Fuel; fleetRow["GPS"] = vehicles[i].GPS; fleetRow["SunRoof"] = vehicles[i].SunRoof; fleetRow["DailyRate"] = vehicles[i].DailyRate; fleetRow["Colour"] = vehicles[i].Colour; fleetTable.Rows.Add(fleetRow); } fleetTable.Print(); } else if (fleetInput.Key == ConsoleKey.B) { while (true) { //declare Identifier Vehicle vehicle; string Registration, Grade, Make, Model, Transmission, Fuel, Colour; int Year, NumSeats; bool GPS, SunRoof; float DailyRate; Console.Write("\nEnter Registration No : "); Registration = Console.ReadLine(); //check is registration already exist or not while (true) { if (fleet.CheckRegistration(Registration)) { Console.WriteLine("\nRegistration No Already Exist! Please Enter A Unique Registration No : "); Console.Write("\nEnter Registration No : "); Registration = Console.ReadLine(); } else if (Registration.Length != 6) { Console.WriteLine("\nRegistration Number Must Contains 6 Character"); Console.Write("Enter Registration No : "); Registration = Console.ReadLine(); } else { break; } } Console.Write("Enter Grade : "); Grade = Console.ReadLine(); //validate Grade while (!Regex.IsMatch(Grade, @"^[a-zA-Z]+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("Enter Grade : "); Grade = Console.ReadLine(); } Console.Write("Enter Make : "); Make = Console.ReadLine(); //validate Make while (!Regex.IsMatch(Grade, @"^[a-zA-Z]+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("Enter Make : "); Make = Console.ReadLine(); } Console.Write("Enter Model : "); Model = Console.ReadLine(); Console.Write("Enter Year : "); //validate Year while (!int.TryParse(Console.ReadLine(), out Year)) { Console.WriteLine("\nEnter Valid Year"); Console.Write("Enter Year : "); } Console.Write("Enter Number Of Seats : "); //validate NumSeats while (!int.TryParse(Console.ReadLine(), out NumSeats)) { Console.WriteLine("\nEnter Valid Number Of Seats"); Console.Write("Enter Number Of Seats : "); } Console.Write("Enter Transmission Type(Automatic/Manual) :"); Transmission = Console.ReadLine(); Transmission.Trim(); //validate trasmission while (Transmission.ToUpper() != "AUTOMATIC" && Transmission.ToUpper() != "MANUAL") { Console.WriteLine("\nPlease Enter Valid Transmission Type(Automatic/Manual)"); Console.Write("Enter Transmission Type(Automatic/Manual) :"); Transmission = Console.ReadLine(); Transmission.Trim(); } Console.Write("Enter Fuel Type (Petrol/Disel) : "); Fuel = Console.ReadLine(); Fuel.Trim(); //validate trasmission while (Fuel.ToUpper() != "PETROL" && Fuel.ToUpper() != "DISEL") { Console.WriteLine("\nPlease Enter Valid Fuel Type (Petrol/Disel)"); Console.Write("Enter Fuel Type (Petrol/Disel) : "); Fuel = Console.ReadLine(); Fuel.Trim(); } Console.Write("GPS (T/F) :"); string temp = Console.ReadLine(); while (temp.ToUpper() != "T" && temp.ToUpper() != "F") { Console.WriteLine("\nPlease Enter T or F for GPS"); Console.Write("GPS (T/F) :"); temp = Console.ReadLine(); } //assign value to GPS bool variable if (temp.ToUpper() == "T") { GPS = true; } else { GPS = false; } //Sunroof Console.Write("Sun Roof (T/F): "); temp = Console.ReadLine(); while (temp.ToUpper() != "T" && temp.ToUpper() != "F") { Console.WriteLine("\nPlease Enter T or F for Sun Roof"); Console.Write("Sun Roof (T/F): "); temp = Console.ReadLine(); } //assign value to GPS bool variable if (temp.ToUpper() == "T") { SunRoof = true; } else { SunRoof = false; } //Daily Rate Validation Console.Write("Please Enter Daily Rate : "); while (!float.TryParse(Console.ReadLine(), out DailyRate)) { Console.WriteLine("\nEnter Valid Daily Rate"); Console.Write("Please Enter Daily Rate : "); } Console.Write("Enter Color : "); Colour = Console.ReadLine(); vehicle = new Vehicle(Registration, Grade, Make, Model, Year, NumSeats, Transmission, Fuel, GPS, SunRoof, DailyRate, Colour); fleet.AddVehicle(vehicle); Console.WriteLine("Record Saved Successfully"); break; } } else if (fleetInput.Key == ConsoleKey.C) { while (true) { string Registration, Grade, Make, Model, Transmission, Fuel, Colour; int Year, NumSeats; bool GPS, SunRoof; float DailyRate; Console.Write("\nEnter Registration No : "); Registration = Console.ReadLine(); //check is registration already exist or not while (true) { if (fleet.CheckRegistration(Registration)) { Console.WriteLine("Registration No Already Exist! Please Enter A Unique Registration No : "); Console.Write("\nEnter Registration No : "); Registration = Console.ReadLine(); } else if (Registration.Length != 6) { Console.WriteLine("Registration Number Must Contains 6 Character"); Console.Write("\nEnter Registration No : "); Registration = Console.ReadLine(); } else { break; } } Console.Write("Enter Grade : "); Grade = Console.ReadLine(); //validate Grade while (!Regex.IsMatch(Grade, @"^[a-zA-Z]+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("Enter Grade : "); Grade = Console.ReadLine(); } Console.Write("Enter Make : "); Make = Console.ReadLine(); //validate Make while (!Regex.IsMatch(Grade, @"^[a-zA-Z]+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("Enter Make : "); Make = Console.ReadLine(); } Console.Write("Enter Model : "); Model = Console.ReadLine(); Console.Write("Enter Year : "); //validate Year while (!int.TryParse(Console.ReadLine(), out Year)) { Console.WriteLine("\nEnter Valid Year"); Console.Write("Enter Year : "); } Console.Write("Enter Number Of Seats : "); //validate NumSeats while (!int.TryParse(Console.ReadLine(), out NumSeats)) { Console.WriteLine("\nEnter Valid Number Of Seats"); Console.Write("Enter Number Of Seats : "); } Console.Write("Enter Transmission Type(Automatic/Manual) :"); Transmission = Console.ReadLine(); Transmission.Trim(); //validate trasmission while (Transmission.ToUpper() != "AUTOMATIC" && Transmission.ToUpper() != "MANUAL") { Console.WriteLine("\nPlease Enter Valid Transmission Type(Automatic/Manual)"); Console.Write("Enter Transmission Type(Automatic/Manual) :"); Transmission = Console.ReadLine(); Transmission.Trim(); } Console.Write("Enter Fuel Type (Petrol/Disel) : "); Fuel = Console.ReadLine(); //validate trasmission Fuel.Trim(); while (Fuel.ToUpper() != "PETROL" && Fuel.ToUpper() != "DISEL") { Console.WriteLine("\nPlease Enter Valid Fuel Type (Petrol/Disel)"); Console.Write("Enter Fuel Type (Petrol/Disel) : "); Fuel = Console.ReadLine(); Fuel.Trim(); } Console.Write("GPS (T/F) :"); string temp = Console.ReadLine(); while (temp.ToUpper() != "T" && temp.ToUpper() != "F") { Console.WriteLine("\nPlease Enter T or F for GPS"); Console.Write("GPS (T/F) :"); temp = Console.ReadLine(); } //assign value to GPS bool variable if (temp.ToUpper() == "T") { GPS = true; } else { GPS = false; } //Sunroof Console.Write("Sun Roof (T/F): "); temp = Console.ReadLine(); while (temp.ToUpper() != "T" && temp.ToUpper() != "F") { Console.WriteLine("\nPlease Enter T or F for Sun Roof"); Console.Write("Sun Roof (T/F): "); temp = Console.ReadLine(); } //assign value to GPS bool variable if (temp.ToUpper() == "T") { SunRoof = true; } else { SunRoof = false; } //Daily Rate Validation Console.Write("Please Enter Daily Rate : "); while (!float.TryParse(Console.ReadLine(), out DailyRate)) { Console.WriteLine("\nEnter Valid Daily Rate"); Console.Write("Please Enter Daily Rate : "); } Console.Write("Enter Color : "); Colour = Console.ReadLine(); fleet.ModifyRecord(Registration, Grade, Make, Model, Year, NumSeats, Transmission, Fuel, GPS, SunRoof, DailyRate, Colour); Console.WriteLine("Record Modify Successfully"); break; } } else if (fleetInput.Key == ConsoleKey.D) { string RegistrationNo; Console.WriteLine("\nPlease Enter Registration No To Delete.\n"); Console.Write("Registration No: "); RegistrationNo = Console.ReadLine(); while (true) { if (!fleet.CheckRegistration(RegistrationNo)) { Console.WriteLine("\nRegistration No. not found! Please enter a valid Registration No."); Console.Write("\nRegistration No: "); RegistrationNo = Console.ReadLine(); } else if (RegistrationNo.Length != 6) { Console.WriteLine("\nRegistration No. must contains 6 characters."); Console.Write("\nRegistration No: "); RegistrationNo = Console.ReadLine(); } else { break; } } if (fleet.RemoveVehicle((RegistrationNo))) { Console.WriteLine("\nRecord Removed Successfully"); } else { Console.WriteLine("\nThis vehicle is currently rented."); } } else if (fleetInput.Key == ConsoleKey.Backspace) { break; } else if (fleetInput.Key == ConsoleKey.Escape) { crm.SaveToFile(); fleet.SaveToFile(); Environment.Exit(0); } else { Console.WriteLine("\nInvalid Input!"); } } } else if (mainInput.Key == ConsoleKey.C) { while (true) { ConsoleKeyInfo rentalInput; Console.WriteLine("\nPlease enter a character from the options below:\n"); Console.WriteLine("a) Display Rentals"); Console.WriteLine("b) Search Vehicles"); Console.WriteLine("c) Rent Vehicle"); Console.WriteLine("d) Return Vehicle"); Console.WriteLine(); Console.Write(">"); rentalInput = Console.ReadKey(); Console.WriteLine(); if (rentalInput.Key == ConsoleKey.A) { Console.WriteLine(); Dictionary <string, int> rentals = fleet.GetRentals(); DataTable rentalsTable = new DataTable(); DataRow rentalsRow = null; rentalsTable.TableName = "Rentals"; rentalsTable.Columns.Add("Registration", typeof(string)); rentalsTable.Columns.Add("CustomerID", typeof(int)).AllowDBNull = false; foreach (string regNo in rentals.Keys) { rentalsRow = rentalsTable.NewRow(); // have new row on each iteration rentalsRow["Registration"] = regNo; rentalsRow["CustomerID"] = rentals[regNo]; rentalsTable.Rows.Add(rentalsRow); } rentalsTable.Print(); } else if (rentalInput.Key == ConsoleKey.B) { } else if (rentalInput.Key == ConsoleKey.C) { string regNo; string ID; Console.WriteLine("\nPlease enter the registration number of vehicle you want to rent:\n"); Console.Write("Registration No.: "); regNo = Console.ReadLine(); if (regNo.Length != 6) { Console.WriteLine("\nRegistration No. must contains 6 characters."); } else if (!fleet.CheckRegistration(regNo)) { Console.WriteLine("\nRegistration number not found."); } else if (fleet.IsRented(regNo)) { Console.WriteLine("\nVehicle " + regNo + " is already rented by customer " + fleet.RentedBy(regNo) + "."); } else { Console.WriteLine("\nPlease enter the customer ID:\n"); Console.Write("ID: "); ID = Console.ReadLine(); while (!Regex.IsMatch(ID, @"^\d+$")) { Console.WriteLine("\nInvalid Input!\n"); Console.Write("ID: "); ID = Console.ReadLine(); } if (crm.FindCustomer(Convert.ToInt32(ID))) { fleet.RentCar(regNo, Convert.ToInt32(ID)); Console.WriteLine("\nVehicle " + regNo + " is successfully rented by customer " + ID + "."); } else { Console.WriteLine("\nCustomer ID not found."); } } } else if (rentalInput.Key == ConsoleKey.D) { string regNo; Console.WriteLine("\nPlease enter the registration number of rented vehicle:\n"); Console.Write("Registration No.: "); regNo = Console.ReadLine(); if (regNo.Length != 6) { Console.WriteLine("\nRegistration No. must contains 6 characters."); } else if (fleet.ReturnCar(regNo) != -1) { Console.WriteLine("\nVehicle " + regNo + " is successfully returned."); } else { Console.WriteLine("\nRegistration No. is not found in rentals."); } } else if (rentalInput.Key == ConsoleKey.Backspace) { break; } else if (rentalInput.Key == ConsoleKey.Escape) { crm.SaveToFile(); fleet.SaveToFile(); Environment.Exit(0); } else { Console.WriteLine("\nInvalid Input!"); } } } else if (mainInput.Key == ConsoleKey.Escape) { crm.SaveToFile(); fleet.SaveToFile(); Environment.Exit(0); } else if (mainInput.Key == ConsoleKey.Backspace) { //Do nothing } else { Console.WriteLine("\nInvalid Input!"); } } }