Esempio n. 1
0
 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();
        }
Esempio n. 3
0
        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);
        }