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; } } } } }
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 }
//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; } } } }
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; }
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(); } }
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; }
static int kontenjanAl(Otel[] otelList) { int toplamKont = 0; for (int i = 0; i < otelList.Length; i++) toplamKont += otelList[i].kontenjan; return toplamKont; }