24 Eylül 2012 Pazartesi

Java - Restaurant


      Bir lokantada her biri 4 kişilik 10 adet masa bulunmaktadır. N ≤ 50 kişinin müşteri olarak geldiğini ve N değerinin kullanıcıdan alındığını varsayarak kişileri masalara yerleştiriniz.
a)      N adet müşterinin ad+soyadlarını oluşturunuz.
b)      Genelde 1 ile 4 kişi arasında random bir müşteri grubunun geldiğini dikkate alınız. Ancak 5 grupta bir, 5-6 kişilik bir grubun gelebildiğini ve iki masanın birleştirilmesi ile oturduklarını varsayınız. Müşterileri, her bir grubu farklı masaya gelecek şekilde yerleştiren i) Algoritmayı, ii) Java programını yazınız.   
c)      Her bir masadaki kişileri, masaların doluluk oranlarını ve kaçar TL (random) ödeme yaptıklarını listeleyiniz.
Yer bulamayan müşterilerin veya boş kalan masaların sayısını yazdırınız.


Masaa.java


import java.util.Vector;


public class Masaa {

int kapasite;
Vector<String> masadaOturanlar = new Vector<String>();
    
public Masaa(int boyut)
{
kapasite = boyut;
}

public void kisiEkle(String kisi)
{
masadaOturanlar.addElement(kisi);
}

public float dolulukOrani()
{
return (float) masadaOturanlar.size() / kapasite;
}

public int oturanKisiSayisi()
{
return masadaOturanlar.size();
}

public void oturanlariListele()
{
System.out.println(masadaOturanlar);
}
}


Musteri.java


import java.util.Vector;


public class Musteri {

Vector<String> liste = new Vector<String>();

public Musteri(int kisiSayisi)
{
String[] adListesi = { "Albert", "Mehmet", "Emmanuel", "Felipe",
"Fernando", "Sabri", "Sasha", "Ersan", "Lebron", "Kobe",
"Lionel", "Karim", "Christiano", "Lassana", "Ricardo", "Alex",
"Ahmet", "Halil Burak", "Anıl", "Emre", "Ezgi", "Ayşe",
"Fatma", "Özge", "Buse", "Buket", "Ceren", "Fatoş", "Sibel" };
String[] soyadListesi = { "Riera", "Okur", "Eboue", "Melo", "Muslera",
"Sarıoğlu", "Vujacic", "İlyasova", "James", "Bryant", "Messi",
"Benzema", "Ronaldo", "Diarra", "Queresma", "De Sauza", "Öz",
"Çetinkaya", "Turan", "Ergül", "Yılmaz", "Can", "Yıldırım",
"Güler", "Çalışkan", "Bilir", "Çetin" };

for(int i=0;i<kisiSayisi;i++)
{
String isim;
isim = adListesi[(int) (Math.random() * adListesi.length)] + " ";
isim += soyadListesi[(int) (Math.random() * soyadListesi.length)];
liste.addElement(isim);
}

}

public int kalanKisi()
{
return liste.size();
}

public String kisiAl()
{
String gonderilecekKisi = liste.elementAt(0);
liste.removeElementAt(0);
return gonderilecekKisi;
}

public Boolean bosMu()
{
return liste.isEmpty();
}

}


Test.java

import java.util.Vector;

import javax.swing.JOptionPane;


public class Test {
public static void main(String args[])
{
int kisiSayisi;
int[] masaBirlestirme = new int[1];
do{
kisiSayisi = Integer.parseInt(JOptionPane.showInputDialog("Restorana gelen kişi sayısını giriniz [0-50]"));
}while(kisiSayisi < 0 || kisiSayisi > 50);
int[] masaKapasiteleri={4,4,4,4,4,4,4,4,4,4}; // masa kapasiteleri ayarlandı
Masaa[] masalar = new Masaa[masaKapasiteleri.length]; // 10 adet masa masalar dizisi şeklinde oluştu
for(int i=0;i<masaKapasiteleri.length;i++)
{
masalar[i] = new Masaa(masaKapasiteleri[i]); //her bir masanın kapasitesi belirtildi
}
Musteri musteriler = new Musteri(kisiSayisi); 
MasalaraEkle(kisiSayisi, masalar, musteriler, masaBirlestirme);
Vector<Integer> bosMasalar = new Vector<Integer>();
for(int i=0;i<masalar.length;i++)
{
if(masalar[i].oturanKisiSayisi() == 0)
bosMasalar.addElement(i);
else
{
if(i==5 && masaBirlestirme[0] > 4)
{
System.out.println("6. ve 7. masalar birleştirildi");
System.out.println("Ortak Masa : " + masaBirlestirme[0] + " kişi" + masalar[i].dolulukOrani() + " %doluluk oranı");
System.out.println("Masanın hesabı : "+ (int)(Math.random() * 300));
masalar[i].oturanlariListele();
masalar[i+1].oturanlariListele();
i++; // masa birleştiği için for u bir kez daha donduruyoruz.
}
else
{
System.out.println(" "+(i+1) +".Masa : " + masalar[i].oturanKisiSayisi()+ " kişi" + masalar[i].dolulukOrani() + " %doluluk oranı");
System.out.println("Masanın hesabı : "+ (int)(Math.random() * 100));
masalar[i].oturanlariListele();
}
}
}
System.out.println("\nKullanılan Masa sayisi :"+(masalar.length-bosMasalar.size()));
System.out.println("Boş Masa Sayısı: "+bosMasalar.size());
}

private static void MasalaraEkle(int kisiSayisi, Masaa[] masalar,Musteri musteriler, int[] masaBirlestirme) {
int kapasite = 40;  // restoran kapasitesi
int gelenGrupKacKisi;  // Kac kişilik müşteri grubunun geleceğini tuttuğum değişken.
for(int k=0;k<10;k++)
{
if(kisiSayisi <= 0 && kapasite == 0)
break;
if(k==5) // yani 6.grup ise
{
gelenGrupKacKisi = (int) (Math.random() * 6);
if(kisiSayisi < gelenGrupKacKisi+1)  // Ayakta kalan müşteri sayısı random gelen gruptan küçükse
{
for(int j=0;j<kisiSayisi;j++)
masalar[k].kisiEkle(musteriler.kisiAl());
kapasite -= kisiSayisi;
kisiSayisi = 0;
break;
}
kisiSayisi -= gelenGrupKacKisi;
if(gelenGrupKacKisi+1 > 4) // gelen grup 4 kişiden fazlaysa
{
for(int j=0;j<4;j++)
masalar[k].kisiEkle(musteriler.kisiAl());
for(int m=0;m<gelenGrupKacKisi+1;m++)
masalar[k].kisiEkle(musteriler.kisiAl());
kapasite -= 8;
masaBirlestirme[0] = gelenGrupKacKisi+1;
}
else
for(int j=0;j<gelenGrupKacKisi+1;j++)
masalar[k].kisiEkle(musteriler.kisiAl());
continue;
}
gelenGrupKacKisi = (int) (Math.random() * 4);  // 6.grup( dort kisiden daha kalabalık olan grup) değilse
if(kisiSayisi < gelenGrupKacKisi+1)
{
for(int j=0;j<kisiSayisi;j++)
masalar[k].kisiEkle(musteriler.kisiAl());
kapasite -= kisiSayisi;
kisiSayisi = 0;
break;
}
kisiSayisi -= gelenGrupKacKisi+1;
kapasite -= 4;
for(int j=0;j<gelenGrupKacKisi+1;j++)
masalar[k].kisiEkle(musteriler.kisiAl());
}
System.out.println("\n\nAyakta kalan müşteri sayısı:"+kisiSayisi);
        System.out.print("\n\n");
}
}

Hiç yorum yok:

Yorum Gönder