• Sonuç bulunamadı

Çankırı Karatekin Üniversitesi. Bilgisayar Mühendisliği Bölümü Bahar Yarıyılı JAVA Dersi Vize Projesi

N/A
N/A
Protected

Academic year: 2022

Share "Çankırı Karatekin Üniversitesi. Bilgisayar Mühendisliği Bölümü Bahar Yarıyılı JAVA Dersi Vize Projesi"

Copied!
8
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

1

Çankırı Karatekin Üniversitesi

Bilgisayar Mühendisliği Bölümü 2019-2020 Bahar Yarıyılı JAVA Dersi Vize Projesi

Proje Adı:

Güneş Sistemi Kayıtları.

Proje Yapısı:

(2)

2

Proje Açıklaması:

1. Projenizin kayıtlı olduğu klasör içine “dosyalar” isimli klasör oluşturunuz. Oluşturduğunuz klasör içine de aşağıda verilen .txt uzantılı dosyaları oluşturunuz. Oluşturduğunuz .txt uzantılı

dosyalardan Katalog.txt dosyasının içini aşağıdaki şekilde doldurunuz. Diğer .txt uzantılı dosyaların içleri boş kalmalı, program aracılığı ile dolmalıdır. Bu aşamada anlatılan dosya oluşturma ve doldurma işlemlerinin hepsini el ile manuel yapınız.

2. Super Class: GokCismi.java

Bu sınıfta gök cisminin ismi, konumu, çapı, güneşe uzaklığı, gün uzunluğu, yıl uzunluğu, kütlesi, yüzey çekim ivmesi bilgileri tutulacaktır. Bu bilgiler için set / get metotları yazınız. Bu bilgilerin hepsi UygulamaMain,java sınıfında kullanıcıdan alınarak sub classlardan obje oluştururken sub classın kurucu metotlarına gönderilecektir. Super classın kurucu metodunda çekim ivmesi parametresi olmayacak fakat metot içinde ataması yapılacaktır (Örnek: this.cekim_ivmesi = ivmeHesapla(kutle, cap);).

Yüzey çekim ivmesi kullanıcıdan alınan kütle ve çap bilgileri ile bu sınıf içinde otomatik olarak hesaplanacaktır (Örnek: ivmeHesapla(kutle, cap)). Kepler Çekim Kanununa göre her gök cisminin yüzey çekim ivmesi şu şekilde hesaplanır:

𝑔 = 𝐺(𝑀𝑔𝑒𝑧/𝑅𝑔𝑒𝑧2 ) 𝑔: Yüzey Çekim İvmesi (𝑚/𝑠2)

G: 6.67x10−11 (𝑚3/𝑘𝑔𝑠2) (sabit)

(3)

3 𝑀𝑔𝑒𝑧: Gezegenin Kütlesi (kg)

𝑅𝑔𝑒𝑧: Gezegenin Yarı Çapı (m)

Gezegen kütleleri çok yüksek değerde oldukları için bu sınıf içinde 1019 değerinde bir sabit tanımlanabilir (Örnek: final double kat = Math.pow(10, 19)). Kullanıcı kütle değerini girerken veri seti tablosundaki değerleri girebilir fakat ivme hesaplanırken 𝑀𝑔𝑒𝑧 = kutle*kat şeklinde alınabilir. Aynı şekilde G değeri sınıf içinde sabit olarak tanımlanmalıdır. Veri setinde çap değeri km cinsinden verilmiştir formüle göre yarı çap ve metre cinsinden olması gerektiğini gözden kaçırmayınız. Doğru birim ve değerleri kullanarak doğru hesap yaptığınız sürece istediğiniz algoritmayı üretip kullanabilirsiniz. Son olarak bu sınıfa ait toString metodu yazınız.

3. Interface: IGokCismi.java

Bu interface içinde dosyayaYaz() ve ivmeyiDosyayaYaz() isimli iki adet abstract metot olmalıdır. Sub classların hepsi GokCismi.java sınıfından türetilecek ve IGokCismi.java arayüzünü implement edecektir.

4. Sub Class 1: Gezegen.java

Bu sınıfta gezegenin tipi, uydu sayısı ve uydu bilgileri tutulacak diğer bütün özelliklerini süper classından miras alacaktır. Uydu bilgileri, Uydu.java sınıfından aggregation yoluyla bu sınıfa özellik olarak gelmekte ve dizi yapısındadır (Örnek: uydu [] uyduBilgileri). Bir gezegenin iki adet uydusu varsa; uyduBilgileri[0] birinci uydu bilgilerini, uyduBilgileri[1] ise ikinci uydu bilgilerini tutmaktadır.

Bu sınıfa ait constructor ve toString metodunu yazınız. İmplement ettiğiniz arayüz nedeniyle override etmeniz gereken dosyayaYaz metodunda gezegene ait tüm bilgileri "dosyalar\\Gezegen.txt" dosyasına yazdırınız. Aynı şekilde hangi gezegen girildiyse ivme değerini ivmeyiDosyayaYaz isimli metodu override ederken gezegen ismi ve ivmesi şeklinde "dosyalar\\ivme.txt" dosyasına yazdırınız.

5. Sub Class 2: Uydu.java

Uydu isimli sınıf GokCismi sınıfından türetilmelidir. Bu sınıfın kendine ait özellikleri yoktur. Tüm özelliklerini super classtan miras almaktadır. Bu sınıfa constructor ve toString metotları yazınız.

Kullanıcı gezegen girerken uydu bilgilerini de gireceğinden uygulama tek başına uydu eklemesi yapmayacak gezegen ve uydu bilgilerini birlikte alacaktır (Her uydu bir gezegene aittir). Gezegen bilgileri, Gezegen.java sınıfı aracılığı ile "dosyalar\\Gezegen.txt" dosyasına yazdırılacak, uydu bilgileri ise Uydu sınıfı aracılığı ile "dosyalar\\Uydu.txt" dosyasına yazdırılacaktır. İmplement ettiğiniz arayüz nedeniyle override etmeniz gereken dosyayaYaz metodunda uyduya ait tüm bilgileri

"dosyalar\\Uydu.txt" dosyasına yazdırınız. Aynı şekilde gezegenle birlikte hangi uydu girildiyse uydunun ivme değerini, ivmeyiDosyayaYaz isimli metodu override ederken uydu ismi ve ivmesi şeklinde "dosyalar\\ivme.txt" dosyasına yazdırınız.

6. Sub Class 3: Yildiz.java

Bu sınıfta yıldızın yaş bilgisi tutulacak diğer bütün özelliklerini süper classtan miras alacaktır. Bu sınıfa constructor ve toString metotları yazınız. İmplement ettiğiniz arayüz nedeniyle override etmeniz gereken dosyayaYaz metodunda yıldıza ait tüm bilgileri "dosyalar\\Yıldız.txt" dosyasına yazdırınız.

Aynı şekilde yıldızın ivme değerini, ivmeyiDosyayaYaz isimli metodu override ederken yıldız ismi ve ivmesi şeklinde "dosyalar\\ivme.txt" dosyasına yazdırınız.

7. Sub Class 4: Asteroit.java

(4)

4

Bu sınıfta asteroitin tip bilgisi tutulacak diğer bütün özelliklerini süper classtan miras alacaktır. Bu sınıfa constructor ve toString metotları yazınız. Asteroitin tip bilgisi otomatik olarak bu sınıf içinde hesaplanmalıdır. Kurucu metodunda parametre olarak bulunmayacak fakat içinde ataması yapılacaktır (Örnek: this.tip = tipBul(cap)). Çapları 10−2 ile 10−7 km arasında kalan asteroitlere “meteorit” denir.

Diğer çap boyutunda olanların tipi “asteroit” olarak isimlendirilir. Bu bilgilere göre tipBul() metodunu yazınız. İmplement ettiğiniz arayüz nedeniyle override etmeniz gereken dosyayaYaz metodunda asteroite ait tüm bilgileri "dosyalar\\Asteroit.txt" dosyasına yazdırınız. Aynı şekilde asteroitin ivme değerini, ivmeyiDosyayaYaz isimli metodu override ederken asteroit ismi ve ivmesi şeklinde

"dosyalar\\ivme.txt" dosyasına yazdırınız.

8. Class: UygulamaMain.java

Bu sınıf uygulamayı şekillendiren temel işlemlerin yapıldığı sınıftır. Main() metodu ve obje oluşturmalar bu sınıf içinde yapılacaktır. Bu sınıfta genel olarak hangi işlemlerin yapılacağı ekran görüntüleri ile aşağıda anlatılmaktadır.

• Kullanıcı için ana menü yazılmalıdır. Kullanıcı 0 seçmediği sürece program çalışmalı, 0 seçtiğinde program sonlanmalıdır.

• Kullanıcı 1 seçerse gök cisimleri menüsü açılmalıdır. Açılan menü, Katalog.txt dosyasından okunarak ekrana yazdırılırken numaralandırılması gerekmektedir.

• Kullanıcı eklemek istediği gök cisminin numarasını girdikten sonra kullanıcıdan gök cismine ait bilgiler istenmelidir. Örneğin gezegen eklemek istersek; uydu bilgileri de gezegenle birlikte istenmeli. Uydusu yok ise uydu bilgileri istenmemelidir (gezegenEkle()). Yıldız ve asteroit eklenirken kendine ait tüm özellikleri istenmelidir (yildizEkle(), asteroitEkle()). Kullanıcı uydu eklemek isterse “Her uydu bir gezegene aittir” kuralını unutmayınız ve gezegenle birlikte uydu bilgilerini isteyiniz (uyduEkle()). Her eklenen gök cismi türü için; kendine ait sınıfından obje oluşturulacak kurucu metoduna kullanıcıdan alınan bilgiler olması gereken sırasıyla gönderilecek böylece dosyalara tüm bilgileri ile yazdırılacaktır.

Seçim:2 için ekran görüntüsü:

(5)

5

• Kullanıcı ana menüden 2’yi seçerek dosyalarda kayıtlı olan gök cisimlerini kategorik olarak listelemek isterse ilk önce gök cisimleri menüsü açılmalıdır. Açılan menü, Katalog.txt dosyasından okunarak ekrana yazdırılırken numaralandırılması gerekmektedir. Örneğin; gök

Gezegenin uydusu yoksa uydu bilgileri girilmesini istemiyor.

Gezegenin kaç uydusu varsa tüm uydularının bilgilerini istiyor.

Seçim:1 için ekran görüntüsü

(6)

6

cisimleri menüsünden 2’yi seçerek Uydu kategorisini listelemek isterse Uydu.txt dosyasındaki tüm uydu kayıtları okunarak ekrana basılmalıdır (uyduListele()).

• Kullanıcı ana menüden 3’ü seçerek tüm gök cisimlerini listelemek isterse; tüm gök cisimlerinin .txt dosyaları okunmalı ve ekrana basılmalı (hepsiniListele()).

• Kullanıcı ana menüden 4’ü seçerek gök cisimlerinin yüzey çekim ivmelerini listelemek isterse; ivme.txt dosyası okunarak ekrana basılmalıdır.

• Dosya içi görünümleri şu şekilde olmalıdır:

(7)

7

• Uygulama için gereken verileri aşağıdaki tablodan elde edebilirsiniz.

İsim Tür Konum Çap

(km)

Güneşe Uzaklık (km)

Gün Uzunluğu (gün)

Yıl Uzunluğu (yıl)

Kütle (x𝟏𝟎𝟏𝟗 kg) Yıldız Yaşı (yıl)

Ceres Cüce Gezegen

Asteroit Kuşağı

960 423.000.000 0,377777778 4,10 94,45

Dünya Gezegen İç Güneş Sistemi

12709 148.000.000 1 1 597237

Ay Uydu (Dünya)

İç Güneş Sistemi

3483 148.384.000 1 0,07392355 7347,7

Mars Gezegen İç Güneş Sistemi

6767 230.000.000 1 1,80 64171

Phobos Uydu (Mars)

İç Güneş Sistemi

23 230.009.000 1 0,001026716 0,00107

Deimos Uydu (Mars)

İç Güneş Sistemi

12 230.023.000 1 0,003422387 0,0002

Orcus Cüce Gezegen

Kuiper Kuşağı

1342 5.918.000.000 0,549305556 245 486852

Vanth Uydu (Orcus)

Kuiper Kuşağı

278 5.918.104.000 0,549305556 0,027379093 64,1 Eris Cüce

Gezegen

Dağınık Disk

2438 10.854.000.000 1,07916667 569,8 1670

Dysnomia Uydu (Eris)

Dağınık Disk

254 10.854.210.000 1,07916667 0,041068639 14,3

Vesta Asteroit Asteroit Kuşağı

524 372.000.000 0,208333333 3,6 25,9

Pallas Asteroit Asteroit Kuşağı

542 460.000.000 0,208333333 4,6 12

Hygiea Asteroit Asteroit Kuşağı

433 523.000.000 1,16666667 5,4 8,67

Halley Kuyrulu Yıldız

Değişken 11 93.000.000 2,2 76,1 0,00017 4.500.000

Güneş Süper Yıldız

Merkez 1324332 0 26 224.000.000 198.910.000.000 4.500.000

Proje Teslimi ve Değerlendirilmesi:

• Genel olarak bireysel çalıştığınız sürece projenizdeki tüm işlemler için internetten yardım alabilirsiniz buna ek olarak dosyaya yazma ve dosyadan okuma işlemleri için aşağıdaki sitelerden yardım alabilirsiniz:

✓ https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android- 101/javada- dosya-islemleri

✓ https://www.youtube.com/watch?v=yfew3_730zQ buradaki video serisi

✓ https://www.yazilimbilisim.net/java/java-dosya-islemeleri/

✓ https://yazdoldur.com/programlama/java/java-i-o-islemleri-dosya-islemleri/

• Proje yapısı bölümünde verilen diyagramları takip ederek projenizi oluşturunuz. Projeniz içinde eksik ya da fazla sınıf oluşturmayınız. Kod isimlendirmelerinize dikkat ediniz, Türkçe karakterler kullanmayınız. Her sınıfın içine kod başına: /* ÖğrenciNo Ad Soyad ŞubeNo*/ ekleyiniz. Her kod bloğu için açıklama satırı yazınız. Ekran çıktısı yazıları, sınıf isimleri bu yazıda verilenlerle birebir

(8)

8

aynı olmalıdır. Projenizi tam çalışıyor şeklinde kodlayamazsanız dahi gönderiniz. Yazdığınız her bir satır kod değerlendirmeye alınacaktır. Projeyi bireysel olarak yapınız. Tek bir projeyi grup şeklinde kodlayarak birden fazla kişinin gönderdiği ya da bireysel gönderilen projelerin birebir aynı olduğu tespit edilirse hiçbir sebep göstermeye hakkınız yoktur ve projeniz değerlendirmeye alınmayacaktır. Bu maddede yazan her şey değerlendirmeye dahildir.

• Klasör adı, “ÖgrNo_AdSoyad_SubeNo “ olan bir klasör oluşturunuz. Bu klasör içine eclipse workspace’te bulunan tüm proje klasörünüzü eksiksiz koyup sıkıştırılmış şekliyle mail atınız.

Proje dosyası çalıştırılabilir olmalı eksik göndermeyiniz. Ayrıca mailinizin gereksiz/istenmeyen kutusuna düşmemesi için mailinize konu başlığını mutlaka ekleyiniz. Mailinizin konusuna “JAVA Vize Projesi”, içine ise öğrenci numaranızı, adınızı, soyadınızı, şube numaranızı mutlaka yazınız.

Eklemek istediğiniz açıklamaları da resmi şekilde mail içine yazabilirsiniz.

Referanslar

Benzer Belgeler

Çukurova Üniversitesi Çevre Mühendisliği Bölümü 2017-2018 Bahar Yarıyılı Ders Programı.. Birinci

Verilen A ve B binary sayıları için CMP ve TEST komutlarının yürütülmesiyle oluşan sonucu ve bayrak durumlarını (0 veya 1) yazarak, verilen koşullu

Cep telefonlarının saate bakmak için bile olsa herhangi bir amaçla kullanılması yasaktır.. Telefon kapalı ve

Karadeniz Teknik Üniversitesi Bilgisayar Mühendisliği

Öğr.Gör. Cep telefonlarının saate bakmak için bile olsa herhangi bir amaçla kullanılması yasaktır. Telefon kapalı ve cepte olmalıdır. Sınavın başında sorular

Kuyruk veri yapısında veri ekleme (enqueue) kuyruk sonuna yapıldığından dairesel bağlı listenin add fonksiyonunun peşine, cursor yeni eklenene son eleman olarak işaret etsin

Döndüren ve döndürülen dişli çarklarda dişlerin teması kavrama doğrusu üzerinde oluşur ve bu kavrama doğrusunun şekilde gösterildiği gibi bir yatay

a) Yataklara gelen toplam kuvvetleri bulunuz. b) Rulmanların en az L h =16000 saatlik bir çalışma süresine sahip olmaları istendiğine göre rulman seçimi yapınız. Verilen