public Konuk[] konuk_dizi_olusturma() { Konuk[] konuklar = new Konuk[konuk_say]; Random random_sayi1 = new Random((int)DateTime.Now.Ticks); for (int i = 0; i < konuk_say; i++) { konuklar[i] = new Konuk(); int a = random_sayi1.Next(20); int b = random_sayi1.Next(20); int c = random_sayi1.Next(7); konuklar[i].ad = isim_matrisi[0, a]; konuklar[i].soyad = isim_matrisi[1, b]; konuklar[i].dil = dil_dizisi[c]; } return konuklar; }
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 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 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 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 ArrayList dilKontrol(Konuk[] konukList) { int[] kontrol = { 0, 0, 0, 0, 0, 0, 0 }; string[] arama = { "TR", "ENG", "GER", "FRE", "JAP", "CHN", "RUS" }; ArrayList tek = new ArrayList(); Konuk yazdir = new Konuk(); for (int i = 0; i < konukList.Length; i++)//Konuk tek kalma için listesi kontrol edilir { ++kontrol[anadilIndex(konukList[i].dil)]; } for (int j = 0; j < 7;j++ ) { if (kontrol[j] == 1) { for (int k = 0; k < konukList.Length; k++) { if (arama[j].Equals(konukList[k].dil) == true)//yalnız kalacakları belirle tek.Add(konukList[k]); } } } if (tek.Count != 0) { Console.BackgroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Aşağıda listelenen kişiler aynı dilde tek katılımcı olduğundan mecburen yalnız kalacaklardır!"); Console.ResetColor(); for (int i = 0; i < tek.Count; i++) { yazdir = (Konuk)tek[i]; yazdir.yazdır(); } Console.WriteLine("\nDevam etmek için bir tuşa basın."); Console.ReadKey(); } Console.Clear(); return tek; }