public bool Embark(IPassenger passenger) { if (FlightStatus != FlightStatus.Boarding) { return(false); } if (passenger.IsTourist) { if (LuxuryBerths < 1) { return(false); } var crew = Passengers.Count(p => !p.IsTourist); var availableBerths = LuxuryBerths; if (crew > EconomyBerths) { availableBerths -= (crew - EconomyBerths); } var tourists = Passengers.Count(p => p.IsTourist); if (tourists >= availableBerths) { return(false); } Passengers.Add(passenger); } else { var totalBerths = EconomyBerths + LuxuryBerths; if (totalBerths < 1) { return(false); } var passengers = Passengers.Count; if (passengers >= LuxuryBerths + EconomyBerths) { return(false); } Passengers.Add(passenger); } return(true); }
internal void FillDatabase() { Random rnd = new Random(); //Passengers String[] names = { "Akhmed", "Said", "Ilias", "Ali", "Ivan", "Fjodor", "Veniamin", "Roy", "Brandon", "Roger", "Janze", "Shijenkun", "Shaolin", "Mirko", "Luca", "Slobodan", "Zukhra", "Giuli", "Zulikha", "Kimberly", "Sheron", "Samanta", "Evproksia", "Marina", "Vasilisa", "Syaomin", "Huowi", "Sanson" }; for (int i = 0; i < 400; i++) { AddPassenger(names[rnd.Next(0, names.Length - 1)]); } //Air companies Pair[] companies = { new Pair("Qatar", "Qatar"), new Pair("AirAsia", "Thailand"), new Pair("VietnamAirlines", "Vietnam"), new Pair("Aeroflot", "Russia"), new Pair("AirBaltic", "Latvia"), new Pair("FinAir", "Finland"), new Pair("AirFrance", "France") }; foreach (var x in companies) { AddCompany(x.company, x.country); } //Airplanes for (int i = 0; i < 50; i++) { int m = rnd.Next(0, 2); String[] manu = { "Boeing", "Airbus" }; String[] boeings = { "747", "777", "737", "787" }; String[] airbusses = { "310", "320", "321" }; String model = m < 1 ? boeings[rnd.Next(0, 4)] : airbusses[rnd.Next(0, 3)]; AddAirplane(manu[m], model, new DateTime(rnd.Next(1989, 2015)), rnd.Next(1, Companies.Count())); } //Flights for (int i = 0; i < 10; i++) { DateTime takeof = GetRandomSummerTime(); DateTime arrival = takeof.AddHours(11).AddMinutes(rnd.Next(15, 57)); AddTrip ( "LED, Saint-Petersburg, Pulkovo", "BKK, Bangkok, Suvarnabhumi", takeof, arrival, rnd.Next(1, Airplanes.Count()) ); } for (int i = 0; i < 3; i++) { DateTime takeof = GetRandomSummerTime(); DateTime arrival = takeof.AddHours(3).AddMinutes(rnd.Next(15, 57)); AddTrip("LED, Saint-Petersburg, Pulkovo", "MLA, Malta", takeof, arrival, rnd.Next(1, Airplanes.Count())); } for (int i = 0; i < 15; i++) { DateTime takeof = GetRandomSummerTime(); DateTime arrival = takeof.AddHours(3).AddMinutes(rnd.Next(0, 20)); AddTrip("LED, Saint-Petersburg, Pulkovo", "DRS, Drezden", takeof, arrival, rnd.Next(1, Airplanes.Count())); } for (int i = 0; i < 4; i++) { DateTime takeof = GetRandomSummerTime(); DateTime arrival = takeof.AddHours(4).AddMinutes(rnd.Next(20, 40)); AddTrip("LED, Saint-Petersburg, Pulkovo", "GYD, Geidar Aliev Airport", takeof, arrival, rnd.Next(1, Airplanes.Count())); } for (int i = 0; i < 20; i++) { DateTime takeof = GetRandomSummerTime(); DateTime arrival = takeof.AddHours(4).AddMinutes(rnd.Next(5, 25)); AddTrip("LED, Saint-Petersburg, Pulkovo", "PRG, Vatslahaveld, Prague", takeof, arrival, rnd.Next(1, Airplanes.Count())); } for (int i = 0; i < 9; i++) { DateTime takeof = GetRandomSummerTime(); DateTime arrival = takeof.AddHours(5).AddMinutes(rnd.Next(20, 40)); AddTrip("LED, Saint-Petersburg, Pulkovo", "LIS, Lisbon Portella Airport", takeof, arrival, rnd.Next(1, Airplanes.Count())); } //Lets sell tickets!! for (int i = 1; i < Passengers.Count(); i++) { Tickets.Add(new Ticket { PassengerId = i, TripId = rnd.Next(1, Trips.Count()) }); } SaveChanges(); }
public string GetSummary() { double costOfFlight = 0; double profitFromFlight = 0; var totalLoyaltyPointsAccrued = 0; var totalLoyaltyPointsRedeemed = 0; var totalExpectedBaggage = 0; var seatsTaken = 0; var result = "Flight summary for " + _flightRoute.Title; foreach (var passenger in Passengers) { switch (passenger.Type) { case PassengerType.General: profitFromFlight += _flightRoute.BasePrice; totalExpectedBaggage += passenger.AllowedBags; break; case PassengerType.LoyaltyMember: if (passenger.IsUsingLoyaltyPoints) { var loyaltyPointsRedeemed = Convert.ToInt32(Math.Ceiling(_flightRoute.BasePrice)); passenger.LoyaltyPoints -= loyaltyPointsRedeemed; totalLoyaltyPointsRedeemed += loyaltyPointsRedeemed; } else { totalLoyaltyPointsAccrued += _flightRoute.LoyaltyPointsGained; profitFromFlight += _flightRoute.BasePrice; } totalExpectedBaggage += passenger.AllowedBags; break; case PassengerType.AirlineEmployee: totalExpectedBaggage += passenger.AllowedBags; break; case PassengerType.Discounted: profitFromFlight += _flightRoute.BasePrice / 2; break; default: throw new ArgumentOutOfRangeException(); } costOfFlight += _flightRoute.BaseCost; seatsTaken++; } result += _verticalWhiteSpace; result += "Total passengers: " + seatsTaken; result += _newLine; result += Indentation + "General sales: " + Passengers.Count(p => p.Type == PassengerType.General); result += _newLine; result += Indentation + "Loyalty member sales: " + Passengers.Count(p => p.Type == PassengerType.LoyaltyMember); result += _newLine; result += Indentation + "Discounted sales: " + Passengers.Count(p => p.Type == PassengerType.Discounted); result += _newLine; result += Indentation + "Airline employee comps: " + Passengers.Count(p => p.Type == PassengerType.AirlineEmployee); result += _verticalWhiteSpace; result += "Total expected baggage: " + totalExpectedBaggage; result += _verticalWhiteSpace; result += "Total revenue from flight: " + profitFromFlight; result += _newLine; result += "Total costs from flight: " + costOfFlight; result += _newLine; var profitSurplus = profitFromFlight - costOfFlight; result += (profitSurplus > 0 ? "Flight generating profit of: " : "Flight losing money of: ") + profitSurplus; result += _verticalWhiteSpace; result += "Total loyalty points given away: " + totalLoyaltyPointsAccrued + _newLine; result += "Total loyalty points redeemed: " + totalLoyaltyPointsRedeemed + _newLine; result += _verticalWhiteSpace; if (_relaxRequirements) { if (seatsTaken < _selectedAircraft.NumberOfSeats && seatsTaken / (double)_selectedAircraft.NumberOfSeats > _flightRoute.MinimumTakeOffPercentage) { result += "THIS FLIGHT MAY PROCEED"; } else { result += "FLIGHT MAY NOT PROCEED"; result += getOtherAircrafts(seatsTaken); } } else { if (profitSurplus > 0 && seatsTaken <= _selectedAircraft.NumberOfSeats && seatsTaken / (double)_selectedAircraft.NumberOfSeats > _flightRoute.MinimumTakeOffPercentage) { result += "THIS FLIGHT MAY PROCEED"; } else { result += "FLIGHT MAY NOT PROCEED"; result += getOtherAircrafts(seatsTaken); } } result += _newLine; return(result); }