İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ AD SOYAD: OKUL NO: TESLİM TARİHİ: TESLİM SÜRESİ: 2 hafta ÖDEV NO: 5 1- BANKA KUYRUK UYGULAMASI: Şekil-1(a)’da bir bankanın danışma kuyruğu ve müşterileri vezneleri temsili olarak verilmiştir. Gelen müşterilerin veznelere dağıtım mekanizması aşağıda anlatılmıştır. Ayrıca yazılması tavsiye edilen sınıflar şekil-2(b)’de verilmiş ve bu sınıf ve metotları anlatılmıştır. Bu anlatılanlara bakarak gerekli sınıf ve yordamları yazınız. (a) (b) Şekil-1: (a)Banka için danışma ve vezne kuyruk gösterimi (b) yazılması tavsiye edilen sınıflar ve metotları. DANIŞMA ve VEZNE KUYRUĞU DAĞITIM MEKANİZMASI: Bankaya yeni gelen müşteri ismi ile bankanın danışma kuyruğuna girer. Bu kuyruk en fazla 10 kişiliktir. Danışmada kuyruğa giren müşteriler işlem yapmaları için 4 adet vezneye dağıtılacaktır. Her vezneye yine en fazla 5’er müşteri eklenebilecektir. Eğer her vezne 5’er kişi ile dolu ise danışmadan veznelere kimse gönderilmeyecektir. Danışmadan veznelere müşteri dağıtma mekanizması ise; en az sayıda müşterisi olan vezne kuyruğunun bulunması ve danışma kuyruğunda sırası gelen müşterinin bu vezne kuyruğuna eklenmesinden ibarettir. YAZILMASI TAVSİYE EDİLEN SINIF ve METOTLARI: public class BankaMusteriKuyruk { Bu sınıf danışma önündeki gelen müşterilerin isimleri ile dâhil edildikleri ana kuyruktur. Ekleme ve çekme işlemleri kuyruk mantığı ile tasarlanacaktır. Kuyruk yapısı JAVA’nın kendi altındaki LinkedList<String> yapısı kuyruk mekanizmasına uyarlanarak kullanılacaktır. JAVA’nın LinkedList sınıfı daha önceki ödevlerde gösterilmiştir. public BankaMusteriKuyruk() Yapılandırıcı metotdur ve içerisinde LinkedList<String> yapılandırılabilir. boolean bankaKuyrukEkle(String yeniMusteri, vezneKuyruk vk[]) : Bu metot parametre listesindeki yeniMusteri Stringini listedeki müşteri sayısı 10’dan az ise kuyruğa ekler. Aynı zamanda ekleme işleminden sonra vezneKuyruk vk[] ile vezne kuyruk sınıfından gelen 4 adet veznedeki her bir kuyruğu kontrol edip en az sayıdaki elemanlı vezneyi bularak en öndeki müşteriyi oraya gönderir, kendi listesinden de bu müşteriyi siler. Ekleme işlemi yapılmışsa metot true, yapılmamışsa false dönecektir. String bankaKuyrukCek(): Bu metot kuyruk mekanizmasına uygun olarak müşteri isim listesinden bir isim çekme işini yapacaktır. Burada listedeki eleman sayısı düşünülmelidir. vezneKuyruk enKucukKuyrukBul(vezneKuyruk vk[]) Bu metot vezneKuyruk vk[] dizisindeki vezne nesnelerinin en az müşteri olan vezneKuyruk vk nesnesini döndürmekle sorumludur. void uygunVezneyeGonder(vezneKuyruk vk[]) Bu metot vezneKuyruk vk[] parametresi içerisinde bulunan en küçük elemanlı vezne listesine banka kuyruğundan müşteri çekip göndermekle sorumludur. void bankaKuyrukListele() Bu metot banka kuyruğu listesindeki tüm isimleri alt alta ekrana yazdırmadan sorumludur. public class vezneKuyruk { : Bu sınıf bir tek veznenin sahip olması gereken metot ve özellikleri (sınıf değişkenleri) içerisinde barındırır. Banka danışma kuyruğu gibi kendi içinde LinkedList<String> içerir ve kuyruk modeline göre ekleme/çekme işlemleri yapılacaktır. Ana programda bu sınıftan 4 adet dizi şeklinde tanımlanarak yapılandırıcıları çağrılacaktır. public vezneKuyruk(): Yapılandırıcı metottur ve içerisinde LinkedList<String> yapılandırılabilir. boolean vezneKuyrukEkle(String yeniMusteri): Bu metot parametre listesindeki yeniMusteri Stringini vezne listedeki müşteri sayısı 5’den az ise kuyruğa ekler. Ekleme işlemi yapılmışsa metot true, yapılmamışsa false dönecektir. void vezneKuyrukListele(): Bu metot banka kuyruğu listesindeki tüm isimleri alt alta ekrana yazdırmadan sorumludur. int vezneKuyrukBoy(): Vezne kuyruğundaki müşteri sayısını döndürür. public class anaSinif { vezneKuyruk vk[]=new vezneKuyruk[4]; for(int i=0;i<vk.length;i++){ vk[i]=new vezneKuyruk(); } Bu sınıf main() metodunu içeren ana sınıftır. Bu metot altında banka kuyruğu sınıfı ve 4 adet vezne kuyruğu sınıfı dizi halinde tanımlanmalı ve değerleri atanmalıdır. Vezne kuyruğu sınıfından dizi oluşturma ve yapılandırıcı çağırma mekanizması yan tarafta verilmiştir. Bu sınıf altında konsol ekranına bir menü getirilerek müşteri kuyruğuna eleman ekleme işlemi, vezne ve danışman kuyruklarının birlikte ekrana bastırılmasının istenmesi gibi işlemler yapılır. Bu sayede danışman kuyruğuna eklenecek bir müşterinin vezne kuyruklarına dağıtımı görülecektir. 2- JAVAFX ListView, JAVA LinkedList İLE STACK UYGULAMASI Daha önce JAVA konsol ortamında bir Stack uygulaması yazılmıştı. Bu uygulamada ise JAVAFX Scene Builder ‘ in ListView‘ i ve JAVA altındaki LinkedList’i kullanılarak görsel bir uygulama geliştirilecektir. Şekil-1(a)’da geliştirilecek kullanıcı arayüzünün Scene Builder ortamındaki görüntüsü verilmiştir. Aşağıda anlatılan yöntemler ve çalışma mekanizması kullanılarak Scene Builder ile arayüzü tasarlayınız, Stack uygulamasını yazınız. (a) (b) (c) Şekil-1: (a) Scene Builder ekran görüntüsü (b) Stack eklemesi yapılmış ve listView’de Stack çıktısı ekranı (c) Stack’den silme yapılmış (veysel) çıktı ekranı ÇALIŞMA MEKANİZMASI: StackList içerisinde JAVA LinkedList kullanılarak Stack mantığına uyarlanacaktır. Scene Builder ekranında Stack Ekle butonuna tıklandığında StackList içerisinde stack mantığı ile tasarlanmış JAVA LinkedList’e değeri ekleyecek ve eski ListView silinerek LinkedList’ in tamamının yeniden ListView’e yazdırılması (refreshListView()) sağlanacaktır. Scene Builder ekranında Stack Sil butonuna tıklandığında StackList içerisinde stack mantığı ile tasarlanmış JAVA LinkedList’den en son eklenen değer silinecek ve arayüzdeki eski ListView silinerek LinkedList’ in tamamının yeniden ListView’e yazdırılması (refreshListView()) sağlanacaktır. Böylece tüm değişimler sadece LinkedList üzerinde yapılacak ve değişimlerin (ekleme, Silme işlemleri..) LinkedList’de yeniden yazdırılması sağlanmış olacaktır. YAZILMASI TAVSİYE EDİLEN SINIF ve METOTLAR public class Controller implements Initializable{ Bu sınıf kontrolör sınıfıdır ve içerisinde buton fonksiyonları, arayüz eleman tanımları ve bazı özel metotlar içerir. Ayrıca StackList sınıfından bir nesne oluşturulmalı ve ekleme silme işlemlerinin bu sınıf nesnesi üzerinde yapılması sağlanmalıdır. public void btnEkleStack(ActionEvent event): Stack ekle butonuna tıklandığında aktif olur. LinkedList’e ekleme yapmamızı sağlar ve yeni listenin tazelenerek ListView üzerinden görünmesini sağlar. public void btnSilStack(ActionEvent event): stack Sil butonuna tıklandığında aktif olur. LinkedList’den silme yapmamızı ve yeni listenin tazelenerek ListView üzerinden görünmesini sağlar. public void refreshListView(): içerisinde ListView ‘e ekleme/silme işlemlerini yapabilmemiz gerekli olan ObservableList<String> sınıfı tanımlanır. ListView içerisindeki tüm değerlerin ListView’e aktarımı tamamlanır (Şekil-1(b),(c)). Şekil-2: Yazılması tavsiye edilen sınıflar ve metotlar class StackList { Bu sınıf JAVA’ya ait olan LinkedList sınıfına ait bir nesnenin üretilip bu LinkedList’in bir Stack yapısına uyarlandığı sınıftır. LinkedList sınıfından bir referans sınıfın özelliği olmalıdır. public StackList(): StackList sınıfının yapılandırıcısıdır ve içerisinde sınıfın özelliği olarak tanımlanan LinkedList referansının bir nesneye bağlanması işlemi yapılmalıdır. boolean addStack(String newOne): Tanımlanan LinkedList içerisindeki değer 20’nin altındaysa Stack’e kayıt yapar ve true döner. void listStack(): Yığının tüm elemanlarını konsol ortamında ekrana yazdırmak için kullanılır. String getStack(int index): Parametre olarak verilen indeksdeki yığın elemanını döndürür. Bu metot yığın elemanlarını ListView içerisine yazdırmak için kullanılacaktır. String pullStack() Tanımlanan LinkedList içerisindeki değer varsa Stack’den silme/çekme işlemi yapar ve çektiği değeri döndürür. Stack silme işlemi sırasında kullanılacaktır. int getStackSize() Stack boyutunu döndürür. 3- JAVAFX ListView, JAVA LinkedList İLE KUYRUK (Queue) UYGULAMASI Daha önce JAVA konsol ortamında bir Queue(kuyruk) uygulaması yazılmıştı. Bu uygulamada ise JAVAFX Scene Builder ‘ in ListView‘ i ve JAVA altındaki LinkedList’i kullanılarak görsel bir uygulama geliştirilecektir. Şekil1(a)’da geliştirilecek kullanıcı arayüzünün Scene Builder ortamındaki görüntüsü verilmiştir. Aşağıda anlatılan yöntemler ve çalışma mekanizması kullanılarak Scene Builder ile arayüzü tasarlayınız, Kuyruk uygulamasını yazınız. (b) (b) (c) Şekil-1: (a) Scene Builder ekran görüntüsü (b) Kuyruk eklemesi yapılmış ve listView’de Kuyruk çıktısı ekranı (c) Kuyruktan silme yapılmış (Ali) çıktı ekranı ÇALIŞMA MEKANİZMASI: QueueList içerisinde JAVA LinkedList kullanılarak Kuyruk mantığına uyarlanacaktır. Scene Builder ekranında Kuyruk Ekle butonuna tıklandığında QueueList içerisinde Kuyruk mantığı ile tasarlanmış JAVA LinkedList’in en sonuna text alanındaki değer ekleyecek ve eski ListView silinerek LinkedList’ in tamamının yeniden ListView’e yazdırılması (refreshListView()) sağlanacaktır. Scene Builder ekranında Kuyruk Sil butonuna tıklandığında QueueList içerisinde Kuyruk mantığı ile tasarlanmış JAVA LinkedList’den en başına eklenen değer silinecek ve arayüzdeki eski ListView silinerek LinkedList’ in tamamının yeniden ListView’e yazdırılması (refreshListView()) sağlanacaktır. Böylece tüm değişimler sadece LinkedList üzerinde yapılacak ve değişimlerin (ekleme, Silme işlemleri..) LinkedList’de yeniden yazdırılması sağlanmış olacaktır. YAZILMASI TAVSİYE EDİLEN SINIF ve METOTLAR public class Controller implements Initializable{ Bu sınıf kontrolör sınıfıdır ve içerisinde buton fonksiyonları, arayüz eleman tanımları ve bazı özel metotlar içerir. Ayrıca KuyrukList sınıfından bir nesne oluşturulmalı ve ekleme silme işlemlerinin bu sınıf nesnesi üzerinde yapılması sağlanmalıdır. public void btnEkleKuyruk(ActionEvent event): Kuyruk ekle butonuna tıklandığında aktif olur. LinkedList’in en sonuna ekleme yapmamızı sağlar ve yeni listenin tazelenerek ListView üzerinden görünmesini sağlar. public void btnSilKuyruk(ActionEvent event): Kuyruk Sil butonuna tıklandığında aktif olur. LinkedList’in en başından silme/çekme yapmamızı ve yeni listenin tazelenerek ListView üzerinden görünmesini sağlar. public void refreshListView(): içerisinde ListView ‘e ekleme/silme işlemlerini yapabilmemiz gerekli olan ObservableList<String> sınıfı tanımlanır. ListView içerisindeki tüm değerlerin ListView’e aktarımı tamamlanır (Şekil-1(b),(c)). Şekil-2: Yazılması tavsiye edilen sınıflar ve metotlar class QueueList { Bu sınıf JAVA’ya ait olan LinkedList sınıfına ait bir nesnenin üretilip bu LinkedList’in bir Kuyruk yapısına uyarlandığı sınıftır. LinkedList sınıfından bir referans, sınıfın özelliği olmalıdır. public QueueList(): QueueList sınıfının yapılandırıcısıdır ve içerisinde sınıfın özelliği olarak tanımlanan LinkedList referansının bir nesneye bağlanması işlemi yapılmalıdır. boolean addQueue(String newOne): Tanımlanan LinkedList içerisindeki değer 20’nin altındaysa Kuyruğa kayıt yapar ve true döner. void listQueue(): Kuyruğun tüm elemanlarını konsol ortamında ekrana yazdırmak için kullanılır. String getQueue(int index): Parametre olarak verilen indeksdeki Kuyruk elemanını döndürür. Bu metot yığın elemanlarını ListView içerisine yazdırmak için kullanılacaktır. String pullQueue() Tanımlanan LinkedList içerisindeki değer varsa Kuyruktan silme/çekme işlemi yapar ve çektiği değeri döndürür. Kuyruk silme işlemi sırasında kullanılacaktır. int getQueueSize() Kuyruk boyutunu döndürür. 4- RECURSIVE BINARY SEARCH TREE CLASS Bir ikili arama ağacı düğüm sınıfı yazılacaktır. Düğüm sınıfının altına yazılan tüm metotlar düğüm sınıfı altında yazılacak ve metotlar özyinelemeli (Recursive) metotlar olacaktır. Aşağıda yazılması bu düğüm sınıfı için yazılması istenen metotları isimleri verilmiştir. Şekil-1’de eklemelerle oluşturulması istenen örnek ağaç yapısı verilmiştir. Bu sınıftan sonra main yordamını içeren bir ana sınıf yazılacaktır. Buna göre ana sınıf içerisinde aşağıdaki listenin eklenmesi için gerekli komutlar yazıldıktan sonra ağaç üzerinde ara gezinti yapıldığında sıralı olarak tüm ağaç elemanlarını yazdıran JAVA programını yazınız. YAZILMASI İSTENEN BST SINIFI METOTLARI 1. Yapılandırıcı 2. Ağaca eleman ekleme 3. Ağaçtan eleman silme 4. Ağaçta arama 5. En büyük eleman ara 6. En küçük eleman ara 7. Bir düğümün altındaki en büyük elemanı ara 8. Bir düğümün altındaki en küçük elemanı ara 9. Önce gezinti 10. Ara gezinti 11. Sonra gezinti Şekil-1: oluşturulması istenen örnek ağaç yaısı