public static IBank GetBank(Transaction transaction)
        {
            string bankCode = string.Empty;
            IBank  bank     = null;

            if (transaction.CardDetail == null)
            {
                throw new Exception(Common.Constants.CardNotAvailable);
            }

            var cardNumber = transaction.CardDetail.CardNumber;

            if (!string.IsNullOrEmpty(cardNumber))
            {
                bankCode = cardNumber.Substring(0, 4);

                switch (bankCode)
                {
                case "1234":
                    bank = new HSBC(new FileLogger());
                    break;

                case "4567":
                    bank = new MCB(new EventViewerLogger());
                    break;

                default:
                    throw new Exception(Common.Constants.BankUnavailable);
                }
            }

            return(bank);
        }
            public void agentsFun()
            {
                // checks the number of price cuts
                while (Airlines.NumOfPriceCut < 21)
                {
                    Airlines airline1 = new Airlines();

                    if (newTicket < oldTicket)

                    {
                        Thread.Sleep(1000);

                        //Generates a Random credit card number between 5000 to 7000
                        Int32 creditCardNo = r2.Next(5000, 7000);
                        //Taking random amount of flight tickets
                        Int32 numOfTicket = r2.Next(1, 20);

                        OrderClass order = new OrderClass();

                        //Sets the values of object to send it to Encoder

                        order.SenderId   = Convert.ToInt32(Thread.CurrentThread.Name);
                        order.CardNumber = creditCardNo;
                        order.Amount     = numOfTicket;
                        order.UnitPrice  = newTicket;


                        String en_order = Encoder(order); // Converts the order object to string

                        MCB.setOneCell(en_order);         //Adding the string to encoder
                        Console.WriteLine("Agency {0} has everyday low price : ${1} each", Thread.CurrentThread.Name, newTicket);
                    }

                    else
                    {
                        Thread.Sleep(1000);

                        Int32 creditCardNo = r2.Next(5000, 7000); //Taking a random credit card number
                        Int32 numOfTicket  = r2.Next(1, 20);      //Taking a random amount of Tickets

                        OrderClass order = new OrderClass();
                        //Setting the values of object for sending it to encoder

                        order.SenderId   = Convert.ToInt32(Thread.CurrentThread.Name);
                        order.CardNumber = creditCardNo;
                        order.Amount     = numOfTicket;
                        order.UnitPrice  = newTicket;
                        String en_order = Encoder(order); // Converting the order object to string

                        MCB.setOneCell(en_order);         //Adding the string to encoder

                        Console.WriteLine("Agency {0} has everyday low price : ${1} each", Thread.CurrentThread.Name, newTicket);
                    }
                } //End while
            }     //End agentsFun
        // Airline thread calls the function
        public void UpdatePrice()
        {
            // No of Price cuts
            while (NumOfPriceCut < 6)
            {
                if (PriceCounter == 5)
                {
                    Int32 p = rng.Next(100, 900);
                    Console.WriteLine("* * * * * * New Price Is : " + p + " * * * * * * * *");
                    PriceCounter = 0;

                    if (p < FlightTicket)
                    {
                        NumOfPriceCut++;
                    }
                    TravelAgents.oldTicket = FlightTicket;
                    TravelAgents.newTicket = p;
                    Airlines.changePrice(p);
                }


                rwObj1.AcquireWriterLock(1000);
                try
                {
                    String en_order = MCB.getOneCell();//gets the order string from the  buffer
                    PriceCounter++;

                    OrderClass orderObject = Decoder(en_order); //Convert the string order to order object

                    OrderProcessing opObj = new OrderProcessing();
                    //Console.WriteLine(orderObject.SenderId);
                    Thread orderProcessing = new Thread(() => opObj.orderP(orderObject));
                    orderProcessing.Start();
                    // orderProcessing.Join();
                }

                finally { rwObj1.ReleaseWriterLock(); }

                if (NumOfPriceCut > 5)
                {
                    Console.WriteLine("The Airlines thread will terminate - No of price cuts completed"); //Print before termination of  thread
                }
            }
        } //End of method
 public void UpdateMCB()
 {
     MCBResult = string.Join(", ", MCB.Select(i => i.ToString()));
 }