예제 #1
0
        static void Main()
        {
            //Testovi za IPassenger
            /******************************************************************************/
            Console.WriteLine("\n/*************************************************************************/\n");
            Console.WriteLine("Testovi za IPassenger-a\n");
            IPassenger passenger1 = new Passenger("Lebron", "James", 1000);

            Console.WriteLine(passenger1.GetName() + " " + passenger1.GetSurname());
            Console.WriteLine(passenger1.GetMoney());
            passenger1.TakeMoney(755.55);
            Console.WriteLine(passenger1.GetMoney().ToString("F2"));
            passenger1.GiveMoney(836.677);
            Console.WriteLine(passenger1.GetMoney().ToString("F4"));
            Console.WriteLine("\n/*************************************************************************/\n");
            /*******************************************************************************/



            //Testiranje ITicket
            /*******************************************************************************/
            Console.WriteLine("\n/*************************************************************************/\n");
            Console.WriteLine("Testovi za ITicket\n");

            // ITicket = new Ticket(100);   //Izbacuje gresku,sto i treba
            //Jer Ticket sme da napravi samo Flight
            // IFlight f = new Flight();    //Analogno vazi i za Flight,moze ga stvoriti samo
            //FlightDatabase
            IFlightDatabase database = FlightDatabase.Instance;

            database.SetGenerator(new SequenceGenerator());
            Vector2  pos1   = new Vector2(0, 0);
            Vector2  pos2   = new Vector2(3, 4);
            IAirport src1   = new Airport(pos1, 5);
            IAirport dest1  = new Airport(pos2, 4);
            IPlane   plane1 = new Plane();
            double   Price1 = 10;
            IFlight  f1     = database.CreateFlight(database.GetRandom(), src1, dest1, plane1, Price1);
            ITicket  t1     = f1.CreateTicket();

            Console.WriteLine("price of ticket t1 is: {0}", t1.GetPrice());
            Console.WriteLine("\n/*************************************************************************/\n");
            /********************************************************************************/



            //Testiranje 1) metode ButTicket(IAirport src,IAirport dst) iz IPassanger-a
            //           2) metoda SetPassenger i GetPassenger iz ITicket-a
            //           3) IBuyingStrategy-a
            /********************************************************************************/
            Console.WriteLine("\n/*************************************************************************/\n");
            Console.WriteLine("Testovi za ITicket,IPassenger,IbuyingTicket\n");
            IBuyingStrategy Cheap     = new CheapTicketStrategy();
            IBuyingStrategy Expensive = new ExpensiveTicketStrategy();
            IBuyingStrategy Average   = new AverageTicketStrategy();
            double          Price2    = 20;
            double          Price3    = 11;
            double          Price4    = 15;
            IFlight         f2        = database.CreateFlight(database.GetRandom(), src1, dest1, plane1, Price2);
            IFlight         f3        = database.CreateFlight(database.GetRandom(), src1, dest1, plane1, Price3);
            IFlight         f4        = database.CreateFlight(database.GetRandom(), src1, dest1, plane1, Price4);

            IAirport.Connect(src1, dest1);//moramo prvo da povezemo dva aerodroma
            database.InsertFlight(f1);
            database.InsertFlight(f2);
            database.InsertFlight(f3);
            database.InsertFlight(f4);
            ITicket t2 = f2.CreateTicket();
            ITicket t3 = f3.CreateTicket();
            ITicket t4 = f4.CreateTicket();

            passenger1.SetStrategy(Cheap);
            passenger1.BuyTicket(src1, dest1);
            IPassenger passenger2 = new Passenger("Michael", "Jordan", 1100);
            IPassenger passenger3 = new Passenger("Garry", "Payton", 500);

            passenger2.SetStrategy(Expensive);
            passenger2.BuyTicket(src1, dest1);
            passenger3.SetStrategy(Average);
            passenger3.BuyTicket(src1, dest1);
            ITicket t11 = f1.GetTickets()[0];

            if (t11 != null) //Karta koju je kupio Lebron James,Jeftina
            {
                Console.WriteLine(t11.GetPassenger().GetName() + " " + t11.GetPassenger().GetSurname());
                Console.WriteLine("Price of the ticket is {0}", t1.GetPrice());
            }
            ITicket t22 = f2.GetTickets()[0];

            if (t22 != null) //Karta koju je kupio Michael Jordan,Najskuplja
            {
                Console.WriteLine(t22.GetPassenger().GetName() + " " + t22.GetPassenger().GetSurname());
                Console.WriteLine("Price of the ticket is {0}", t22.GetPrice());
            }

            ITicket t33 = f4.GetTickets()[0];

            if (t33 != null) //Karta koju je kupio Garry Payton,Prosecna
            {
                Console.WriteLine(t33.GetPassenger().GetName() + " " + t33.GetPassenger().GetSurname());
                Console.WriteLine("Price of the ticket is {0}", t33.GetPrice());
            }

            //Garry Payton je kupio kartu najblize proseku,uzeo je t4(75),a ne t3(55),(prosek je 70)
            //Average Ticket dakle radi

            Console.WriteLine("\n/*************************************************************************/\n");
            /*****************************************************************************************/



            //Testiranje IPlane
            /****************************************************************************************/
            Console.WriteLine("\n/*************************************************************************/\n");
            Console.WriteLine("\n Testiranje za IPlane\n\n");
            IPlane plane2 = new Plane();

            plane2.AddPassenger(passenger1);
            plane2.AddPassenger(passenger2);
            plane2.AddPassenger(passenger3);
            foreach (IPassenger passenger in plane2.GetPassengers())
            {
                Console.WriteLine(passenger.GetName() + " " + passenger.GetSurname());
            }
            plane2.ClearPassenger();
            if (plane2.GetPassengers().Count == 0)
            {
                Console.WriteLine("ClearPassenger works !**");
            }
            CrewMember pilot1      = new Pilot("Michael", "Schumaher");
            CrewMember copilot1    = new Copilot("Manuel", "Fangio");
            CrewMember crewMember1 = new Other("Michael", "Johnson");
            CrewMember crewMember2 = new Other("David", "Figuererdo");
            CrewMember crewMember3 = new Other("Anabela", "Mischkin");
            CrewMember crewMember4 = new Other("Stephen", "Wonderboy");
            CrewMember crewMember5 = new Other("Michael", "Franceze");

            plane2.AddCrewMember(pilot1);
            plane2.AddCrewMember(copilot1);
            plane2.AddCrewMember(crewMember1);
            plane2.AddCrewMember(crewMember2);
            plane2.AddCrewMember(crewMember3);
            foreach (CrewMember member in plane2.GetCrew())
            {
                Console.WriteLine(member.Role() + " " + member.GetName() + " " + member.GetSurname());
            }
            plane2.RemoveCrewMember(crewMember1);
            plane2.RemoveCrewMember(pilot1);
            Console.WriteLine();
            Console.WriteLine();
            foreach (CrewMember member in plane2.GetCrew())
            {
                Console.WriteLine(member.Role() + " " + member.GetName() + " " + member.GetSurname());
            }

            Console.WriteLine("\n/*************************************************************************/\n");
            /*******************************************************************************************/



            //Testiranje IFlightControl
            /*******************************************************************************************/
            Console.WriteLine("\n/*************************************************************************/");
            Console.WriteLine("Testing IFlightControl");
            IPassenger Stefan  = new Passenger("Stefan", "Jakovlejvic", 1200);
            IPassenger Nikola  = new Passenger("Nikola", "Novakovic", 1000);
            IPassenger Slaki   = new Passenger("Slavisa", "Blesic", 1000);
            IPassenger Boki    = new Passenger("Bojan", "Jovanovic", 300);
            IPassenger Milos   = new Passenger("Milos", "Jovanovic", 1300);
            IPassenger Miki    = new Passenger("Milisav", "Jovanovic", 1600);
            IPassenger Nevena  = new Passenger("Nevena", "Preradovic", 900);
            IPassenger Teodora = new Passenger("Teodora", "Jovanov", 800);

            Stefan.SetStrategy(Expensive);
            Nikola.SetStrategy(Average);
            Slaki.SetStrategy(Cheap);
            Boki.SetStrategy(Cheap);
            Milos.SetStrategy(Expensive);
            Miki.SetStrategy(Average);
            Nevena.SetStrategy(Average);
            Teodora.SetStrategy(Expensive);

            Vector2  start  = new Vector2(0, 0);
            Vector2  finish = new Vector2(6, 8);
            int      NumOfRunwaysBelgrade  = 3;
            int      NumOfRunwaysFrankfurt = 5;
            IAirport Belgrade  = new Airport(start, NumOfRunwaysBelgrade);
            IAirport Frankfurt = new Airport(finish, NumOfRunwaysFrankfurt);
            IPlane   AirSerbia = new Plane();
            IPlane   Lufthansa = new Plane();
            IPlane   Elite     = new Plane();

            IAirport.Connect(Belgrade, Frankfurt);
            IFlightControl BelgradeControl  = new FlightControl(Belgrade);
            IFlightControl FrankfurtControl = new FlightControl(Frankfurt);


            IFlight flight1 = database.CreateFlight(database.GetRandom(), Belgrade, Frankfurt, AirSerbia, 50);
            IFlight flight2 = database.CreateFlight(database.GetRandom(), Belgrade, Frankfurt, Lufthansa, 75);
            IFlight flight3 = database.CreateFlight(database.GetRandom(), Belgrade, Frankfurt, Elite, 100);

            database.DeleteFlight(f1);
            database.DeleteFlight(f2);
            database.DeleteFlight(f3);
            database.DeleteFlight(f4);

            database.InsertFlight(flight1);
            database.InsertFlight(flight2);
            database.InsertFlight(flight3);
            // brisemo prethodne letove iz baze i dodajemo ove


            Stefan.BuyTicket(Belgrade, Frankfurt);
            Nikola.BuyTicket(Belgrade, Frankfurt);
            Slaki.BuyTicket(Belgrade, Frankfurt);
            Boki.BuyTicket(Belgrade, Frankfurt);
            Miki.BuyTicket(Belgrade, Frankfurt);
            Milos.BuyTicket(Belgrade, Frankfurt);

            Console.WriteLine("Num of Runways on Belgrade Airport {0}", BelgradeControl.GetNumOfRunways());
            BelgradeControl.SetOnRunway(AirSerbia);
            Console.WriteLine("Num of Runways on Belgrade Airport {0}", BelgradeControl.GetNumOfRunways());
            int i1 = 0;

            Console.WriteLine();
            Console.WriteLine("passengers in flight1\n");
            BelgradeControl.SetOnRunway(Lufthansa);
            BelgradeControl.SetOnRunway(Elite);  //Bez ovoga se nece ispisati putnici u trecem avionu:
            foreach (IPassenger passenger in flight1.GetPlane().GetPassengers())
            {
                i1++;
                Console.WriteLine("Passenger" + i1 + ": " + passenger.GetName() + " " + passenger.GetSurname());
                Console.WriteLine("Price of his ticket is " + flight1.GetTickets()[i1 - 1].GetPrice());
                Console.WriteLine("\n");
            }
            i1 = 0;
            Console.WriteLine("\npassengers in flight2");
            foreach (IPassenger passenger in flight2.GetPlane().GetPassengers())
            {
                i1++;
                Console.WriteLine("Passenger" + i1 + ": " + passenger.GetName() + " " + passenger.GetSurname());
                Console.WriteLine("Price of his ticket is " + flight2.GetTickets()[i1 - 1].GetPrice());
                Console.WriteLine("\n");
            }
            i1 = 0;
            Console.WriteLine("\npassengers in flight3\n");
            foreach (IPassenger passenger in flight3.GetPlane().GetPassengers())
            {
                i1++;
                Console.WriteLine("Passenger" + i1 + ": " + passenger.GetName() + " " + passenger.GetSurname());
                Console.WriteLine("Price of his ticket is " + flight3.GetTickets()[i1 - 1].GetPrice());
                Console.WriteLine("\n");
            }
            Console.WriteLine("Flight1 Status: " + flight1.GetPlane().Status);
            Console.WriteLine("Flight2 Status: " + flight2.GetPlane().Status);
            Console.WriteLine("Flight3 Status: " + flight3.GetPlane().Status);

            //Dodajemo posadu
            AirSerbia.AddCrewMember(pilot1);
            AirSerbia.AddCrewMember(copilot1);
            AirSerbia.AddCrewMember(crewMember1);
            AirSerbia.AddCrewMember(crewMember2);
            AirSerbia.AddCrewMember(crewMember3);
            AirSerbia.AddCrewMember(crewMember4);
            AirSerbia.AddCrewMember(crewMember5);

            BelgradeControl.AllowTakeOff(AirSerbia);
            Console.WriteLine("\n\n\nAirserbia Status: {0}", AirSerbia.Status);
            FrankfurtControl.AllowLanding(AirSerbia); //Ako zakomentarisemo ovu liniju i otkomentarisemo sledecu
            //AirSerbia.Status=Status.FINISHED;       //Pojavice se i Slaki na povratku,sto ne bi trebalo
            //Sto znaci da f-ja uspesno brise IPassengerima karte
            Console.WriteLine("\n\n\nAirserbia Status: {0}", AirSerbia.Status);
            Console.WriteLine("\n\ndodajemo jos dva putnika sa aerodroma u Frankfurtu: \n");


            IFlight flight4 = database.CreateFlight(database.GetRandom(), Frankfurt, Belgrade, AirSerbia, 80);

            database.InsertFlight(flight4);

            Teodora.BuyTicket(Frankfurt, Belgrade);
            Nevena.BuyTicket(Frankfurt, Belgrade);

            FrankfurtControl.SetOnRunway(AirSerbia);

            i1 = 0;
            Console.WriteLine("\npassengers in flight4\n");
            foreach (IPassenger passenger in flight4.GetPlane().GetPassengers())
            {
                i1++;
                Console.WriteLine("Passenger" + i1 + ": " + passenger.GetName() + " " + passenger.GetSurname());
                Console.WriteLine("Price of his ticket is " + flight4.GetTickets()[i1 - 1].GetPrice());
                Console.WriteLine("\n");
            }
            Console.WriteLine("\n/*************************************************************************/\n");
            /*******************************************************************************************/



            /*******************************************************************************************/
            Console.WriteLine("\n/*************************************************************************/");
            Console.WriteLine("Testing Exceptions\n\n\n");

            IAirport NewYork = new Airport(start, NumOfRunwaysBelgrade);
            IAirport Ottawa  = new Airport(finish, NumOfRunwaysFrankfurt);

            IPlane AirCanada = new Plane();

            int     random     = database.GetRandom();
            IFlight TestFlight = database.CreateFlight(random, NewYork, Ottawa, AirCanada, 100);

            IFlightControl NewYorkControl = new FlightControl(NewYork);
            IFlightControl OttawaControl  = new FlightControl(Ottawa);

            //Izuztak pri ubacivanju leta u bazu gde dva aviona nisu povezana
            try
            {
                database.InsertFlight(TestFlight);
            }catch (AirportsNotConnectedException e)
            {
                Console.WriteLine("\n---- Exception1: ----\n");
                Console.WriteLine(e.Message);
            }

            IAirport.Connect(NewYork, Ottawa);
            database.InsertFlight(TestFlight);

            //Izuzetak pri ubacivanju leta gde su dva Unique_ID ista
            try
            {
                IFlight TestFlight2 = database.CreateFlight(random, NewYork, Ottawa, AirCanada, 100);
                database.InsertFlight(TestFlight2);
            }
            catch (IdConflictException e)
            {
                Console.WriteLine("\n---- Exception2: ----\n");
                Console.WriteLine(e.Message);
            }

            //Izuzetak pri brisanju leta ako taj let nije u bazi
            try
            {
                IFlight TestFlight2 = database.CreateFlight(random, NewYork, Ottawa, AirCanada, 100);
                database.DeleteFlight(TestFlight2);
            }catch (FlightNotInDatabaseException e)
            {
                Console.WriteLine("\n---- Exception3: ----\n");
                Console.WriteLine(e.Message);
            }

            //Izuzetak ako ne postoji let sa tog aerodroma za dati avion
            try
            {
                NewYorkControl.SetOnRunway(AirSerbia);
            }catch (PlaneNotSuitableException e)
            {
                Console.WriteLine("\n---- Exception4: ----\n");
                Console.WriteLine(e.Message);
            }

            IFlight TestFlight_ = null;

            //izuzetak ako nema slobodne piste pri postavljanju aviona
            try
            {
                Vector2  spoint       = new Vector2(0, 0);
                Vector2  fpoint       = new Vector2(1, 1);
                IAirport TestAirport  = new Airport(spoint, 0); //Ako umesto 0 stavimo 1 ne baca se izuzetak
                IAirport TestAirport2 = new Airport(fpoint, 0);
                IAirport.Connect(TestAirport, TestAirport2);
                TestFlight_ = database.CreateFlight(-7, TestAirport, TestAirport2, AirCanada, 100);
                IFlightControl TestFlightControl = new FlightControl(TestAirport);
                database.InsertFlight(TestFlight_);
                TestFlightControl.SetOnRunway(AirCanada);
            }
            catch (NoFreeRunwayException e)
            {
                database.DeleteFlight(TestFlight_);
                Console.WriteLine("\n---- Exception5: ----\n");
                Console.WriteLine(e.Message);
            }

            //izuzetak ako je avion u letu a mi hocemo da ga postavimo na pistu
            try
            {
                Vector2  spoint       = new Vector2(0, 0);
                Vector2  fpoint       = new Vector2(1, 1);
                IAirport TestAirport  = new Airport(spoint, 1);
                IAirport TestAirport2 = new Airport(fpoint, 0);
                IAirport.Connect(TestAirport, TestAirport2);
                TestFlight_ = database.CreateFlight(-7, TestAirport, TestAirport2, AirCanada, 100);
                IFlightControl TestFlightControl = new FlightControl(TestAirport);
                database.InsertFlight(TestFlight_);
                AirCanada.Status = Status.ONFFLIGHT;
                TestFlightControl.SetOnRunway(AirCanada);
            }
            catch (PlaneNotOnGroundException e)
            {
                database.DeleteFlight(TestFlight_);
                Console.WriteLine("\n---- Exception6: ----\n");
                Console.WriteLine(e.Message);
            }
            //Izuzetak pri sklanjanju aviona sa piste,ako avion nije na pisti
            try
            {
                Vector2  spoint       = new Vector2(0, 0);
                Vector2  fpoint       = new Vector2(1, 1);
                IAirport TestAirport  = new Airport(spoint, 1);
                IAirport TestAirport2 = new Airport(fpoint, 0);
                IAirport.Connect(TestAirport, TestAirport2);
                TestFlight_ = database.CreateFlight(-7, TestAirport, TestAirport2, AirCanada, 100);
                IFlightControl TestFlightControl = new FlightControl(TestAirport);
                database.InsertFlight(TestFlight_);
                AirCanada.Status = Status.READY;
                //TestFlightControl.SetOnRunway(AirCanada);
                TestFlightControl.RemoveFromRunway(AirCanada);
            }
            catch (PlaneNotOnRunwayException e)
            {
                database.DeleteFlight(TestFlight_);
                Console.WriteLine("\n---- Exception7: ----\n");
                Console.WriteLine(e.Message);
            }

            //Izuzetak ako nema dovoljno clanova posade
            try
            {
                Vector2  spoint       = new Vector2(0, 0);
                Vector2  fpoint       = new Vector2(1, 1);
                IAirport TestAirport  = new Airport(spoint, 1);
                IAirport TestAirport2 = new Airport(fpoint, 0);
                IAirport.Connect(TestAirport, TestAirport2);
                TestFlight_ = database.CreateFlight(-7, TestAirport, TestAirport2, AirCanada, 100);
                IFlightControl TestFlightControl = new FlightControl(TestAirport);
                database.InsertFlight(TestFlight_);
                AirCanada.Status = Status.READY;
                TestFlightControl.SetOnRunway(AirCanada);
                TestFlightControl.AllowTakeOff(AirCanada);
            }
            catch (NoCrewException e)
            {
                database.DeleteFlight(TestFlight_);
                Console.WriteLine("\n---- Exception7: ----\n");
                Console.WriteLine(e.Message);
            }

            //izuzetak ako avion nije spreman za poletanje
            try
            {
                Vector2  spoint       = new Vector2(0, 0);
                Vector2  fpoint       = new Vector2(1, 1);
                IAirport TestAirport  = new Airport(spoint, 1);
                IAirport TestAirport2 = new Airport(fpoint, 0);
                IAirport.Connect(TestAirport, TestAirport2);
                TestFlight_ = database.CreateFlight(-7, TestAirport, TestAirport2, AirCanada, 100);
                IFlightControl TestFlightControl = new FlightControl(TestAirport);
                database.InsertFlight(TestFlight_);
                AirCanada.Status = Status.READY;
                TestFlightControl.SetOnRunway(AirCanada);
                AirCanada.AddCrewMember(pilot1);
                AirCanada.AddCrewMember(copilot1);
                AirCanada.AddCrewMember(crewMember1);
                AirCanada.AddCrewMember(crewMember2);
                AirCanada.AddCrewMember(crewMember3);
                AirCanada.AddCrewMember(crewMember4);
                AirCanada.AddCrewMember(crewMember5);
                AirCanada.Status = Status.FINISHED;
                TestFlightControl.AllowTakeOff(AirCanada);
            }
            catch (PlaneNotReadyException e)
            {
                database.DeleteFlight(TestFlight_);
                Console.WriteLine("\n---- Exception8: ----\n");
                Console.WriteLine(e.Message);
            }


            Console.WriteLine("\n/*************************************************************************/\n");
            /*******************************************************************************************/
        }