예제 #1
0
        static void transferEt(Otel[] otelList, Konuk[] konukList, ArrayList tek)
        {
            ArrayList transfer = new ArrayList();
            Konuk konukNesne = new Konuk();
            Konuk konukKarsilastirma = new Konuk();
            int toplamKont = kontenjanAl(otelList);
            transfer = transferListesiAl(otelList, tek);

            if (konukList.Length != toplamKont)
            {
                for (int i=0; i < transfer.Count; i++ )
                {
                    konukNesne = (Konuk)transfer[i];
                    for (int j = 0; j + 1 < transfer.Count; j++)
                    {
                        konukKarsilastirma = (Konuk)transfer[j + 1];
                        if (konukKarsilastirma.Equals(konukNesne) == true && otelList[konukNesne.kaldigiIndex].kontenjan - otelList[konukNesne.kaldigiIndex].kalan != 0)
                        {
                            otelList[konukNesne.kaldigiIndex].kalanlar.Add(konukKarsilastirma);
                            ++otelList[konukNesne.kaldigiIndex].kontrol[anadilIndex(konukKarsilastirma.dil)];
                            otelList[konukKarsilastirma.kaldigiIndex].kalanlar.Remove(konukKarsilastirma);
                            --otelList[konukKarsilastirma.kaldigiIndex].kontrol[anadilIndex(konukKarsilastirma.dil)];
                            konukKarsilastirma.kaldigiIndex = konukNesne.kaldigiIndex;
                            transfer.Remove(konukNesne);
                            transfer.Remove(konukKarsilastirma);
                            break;
                        }
                        else if (otelList[konukKarsilastirma.kaldigiIndex].kontenjan - otelList[konukKarsilastirma.kaldigiIndex].kalan != 0)
                        {
                            otelList[konukKarsilastirma.kaldigiIndex].kalanlar.Add(konukNesne);
                            ++otelList[konukKarsilastirma.kaldigiIndex].kontrol[anadilIndex(konukNesne.dil)];
                            otelList[konukNesne.kaldigiIndex].kalanlar.Remove(konukNesne);
                            --otelList[konukNesne.kaldigiIndex].kontrol[anadilIndex(konukNesne.dil)];
                            konukNesne.kaldigiIndex = konukKarsilastirma.kaldigiIndex;
                            transfer.Remove(konukNesne);
                            transfer.Remove(konukKarsilastirma);
                            break;
                        }
                    }
                }
            }
        }
예제 #2
0
 static ArrayList transferListesiAl(Otel[] otelList, ArrayList tek)
 {
     Konuk konuk = new Konuk();
     ArrayList transferList = new ArrayList();
     for (int i = 0; i < otelList.Length; i++)//otelleri dolaş
     {
         for (int j = 0; j < 7; j++ )//otelde anadil kontrol listesini dolaş
         {
             if (otelList[i].kontrol[j] == 1)//yalnız kalan var mı?
             {
                 for (int k = 0; k < otelList[i].kalanlar.Count; k++)//varsa otelde kalanları dolaş
                 {
                     konuk = (Konuk)otelList[i].kalanlar[k];
                     if (j == anadilIndex(konuk.dil) && tek.Contains(konuk) == false)//j ile belirlenen yalnız kalan dil tutuyorsa ve yalnız kalmak zorunda değilse
                     {
                         transferList.Add(otelList[i].kalanlar[k]);//transfer listesine ekle
                     }
                 }
             }
         }
     }
     return transferList;//transfer listesini döndür
 }
예제 #3
0
        //static int menu()
        //{
        //    Console.WriteLine("");
        //    int secim = Convert.ToInt32(Console.ReadLine());
        //    return secim;
        //}
        static void otel_yerleştirme(Otel[] bir_otel, Konuk[] konuklist, int konuksayisi, int otelSayi)
        {
            int toplamKontenjan = 0, dolasimSayaci = 0, ilkdeger = konuksayisi, gecici = 0;
            double bolunecekOran, yerlesecek;

            toplamKontenjan = kontenjanAl(bir_otel);
            bolunecekOran = (double)toplamKontenjan / konuksayisi;

            for (int i = 0; i < otelSayi; ++i)
            {
                yerlesecek = Math.Round((double)bir_otel[i].kontenjan / bolunecekOran);
                for (int j = dolasimSayaci; j < yerlesecek + gecici; ++j)
                {
                    bir_otel[i].kalanlar.Add(konuklist[j]);
                    konuklist[j].kaldigiIndex = i;
                    ++bir_otel[i].kontrol[anadilIndex(konuklist[j].dil)];
                    ++bir_otel[i].kalan;
                    ++dolasimSayaci;
                    --konuksayisi;
                }
                gecici = dolasimSayaci;
                bir_otel[i].yuzde = (double)bir_otel[i].kalan / (double)bir_otel[i].kontenjan;
            }

            if (konuksayisi > 0)
            {
                int min = 100, index = 0;
                while (konuksayisi != 0)
                {
                    for (int j = 0; j < otelSayi; ++j)
                    {
                        if (bir_otel[j].yuzde < min && bir_otel[j].kontenjan - bir_otel[j].kalan != 0)
                            index = j;
                        else if (bir_otel[j].yuzde == min && (bir_otel[j].kontenjan - bir_otel[j].kalan) < (bir_otel[index].kontenjan - bir_otel[index].kalan))
                        {
                            index = j;
                        }
                        bir_otel[index].kalanlar.Add(konuklist[ilkdeger - konuksayisi]);
                        ++bir_otel[index].kalan;
                        --konuksayisi;
                        ++dolasimSayaci;
                        bir_otel[index].yuzde = (double)bir_otel[index].kalan / (double)bir_otel[index].kontenjan;
                        if (konuksayisi == 0)
                            break;
                    }
                }
            }
        }
예제 #4
0
 static Otel[] otel_bilgisi_alma(int sayi)
 {
     Otel[] bir_otel = new Otel[sayi];
     for (int i = 0; i < sayi; i++)
     {
         bir_otel[i] = new Otel();
         bir_otel[i].bilgi_al(i);
     }
     return bir_otel;
 }
예제 #5
0
 static void otelBazındaKonukListe(Otel[] otelList)
 {
     Konuk yazdir = new Konuk();
     for (int i = 0; i < otelList.Length; i++)
     {
         Console.WriteLine(otelList[i].otel_isim + " Oteli Konuk Listesi:");
         Console.WriteLine("Otelde kalan konuk sayısı : " + otelList[i].kalan+"\n");
         for (int j = 0; j < otelList[i].kalanlar.Count; j++)
         {
             yazdir = (Konuk)otelList[i].kalanlar[j];
             yazdir.yazdır();
         }
         Console.WriteLine();
     }
 }
예제 #6
0
 static int konuk_sayisi_alma(Otel[] otelList)
 {
     int kontenjan = kontenjanAl(otelList);
     int konuk_say = 0;
     bool flag = true;
     do
     {
         Console.Write("Konuk sayısını giriniz:");
         konuk_say = Convert.ToInt32(Console.ReadLine());
         Console.Clear();
         if (konuk_say > kontenjan)
         {
             flag = false;
             Console.WriteLine("Konuk sayısı kontenjandan fazla! Konuk sayısını tekrar girin.");
         }
         else
             flag = true;
     } while (!flag);
     return konuk_say;
 }
예제 #7
0
        static int kontenjanAl(Otel[] otelList)
        {
            int toplamKont = 0;

            for (int i = 0; i < otelList.Length; i++)
                toplamKont += otelList[i].kontenjan;

            return toplamKont;
        }