Ödünç Alma Sistemi
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 79 / 87.
Görev
KolayKitap ve kullanıcı koleksiyonunu yöneten bir Library sınıfıyla uygun bir ödünç alma sistemi oluşturarak Kütüphane Yönetim Sistemi'ni geliştirmeye devam edelim. Sisteminizin gerçek bir kütüphane gibi hissettirmeye başladığı yer burası: kimin neye sahip olduğunu takip etmek ve ödünç alma kurallarını uygulamak!
Kodunuzu dört dosyaya ayıracaksınız:
Book.java: Önceki görevdeki Book sınıfınızı tüm işlevleriyle koruyun: isbn, title, author, isAvailable, borrowedBy, getDetails() ve uygun getter/setter metotları.User.java: id, name, borrowedBooks ArrayList'i, borrowBook(), returnBook(), getBorrowedCount() ve toString() içeren User sınıfınızı koruyun.Library.java: Her şeyi yöneten merkeziLibrarysınıfını oluşturun. Kütüphaneniz iki ArrayList tutmalıdır: biriBooknesneleri, diğeriUsernesneleri için. Şu metotları ekleyin:addBook(Book book)- bir kitabı kütüphanenin koleksiyonuna ekler.registerUser(User user)- bir kullanıcıyı kütüphanenin kayıtlı kullanıcılarına ekler.findBookByIsbn(String isbn)- kitaplar arasında arama yapar ve eşleşen ISBN'ye sahip Book nesnesini döndürür; bulunamazsanulldöndürür.findUserById(String id)- kullanıcılar arasında arama yapar ve eşleşen ID'ye sahip User nesnesini döndürür; bulunamazsanulldöndürür.borrowBook(String userId, String isbn)- kullanıcıyı ve kitabı bulur; ardından ikisi de mevcutsa ve kitap ödünç alınabilir durumdaysa kullanıcının kitabı ödünç almasını sağlar ve[userName] borrowed [bookTitle]yazdırır. Kitap kullanılamıyorsaBook not availableyazdırın. Kullanıcı veya kitap bulunamazsaInvalid user or bookyazdırın.returnBook(String userId, String isbn)- kullanıcıyı ve kitabı bulur; ardından kullanıcının kitabı iade etmesini sağlar ve[userName] returned [bookTitle]yazdırır. Kullanıcı veya kitap bulunamazsaInvalid user or bookyazdırın.Main.java: Kütüphane sisteminizi bir araya getirin! İki kitap için (her biri ISBN, başlık ve yazar), bir kullanıcı için (ID ve ad) ve ardından bir dizi işlem için girdi alacaksınız.Bir Library oluşturun, her iki kitabı ekleyin ve kullanıcıyı kaydedin. Ardından işlemleri işleyin: her işlemin
borrow:userId:isbnveyareturn:userId:isbnbiçiminde olduğu, virgülle ayrılmış bir dize alacaksınız.Tüm işlemleri işledikten sonra her kitabın durumunu
[isbn]: [Available/Borrowed]biçiminde gösteren bir özet yazdırın.
Girdileri şu sırayla alacaksınız: book1 ISBN'i, book1 başlığı, book1 yazarı, book2 ISBN'i, book2 başlığı, book2 yazarı, kullanıcı ID'si, kullanıcı adı ve son olarak işlemler dizesi.
Örneğin, girdiler ISBN-001, Clean Code, Robert Martin, ISBN-002, Design Patterns, Gang of Four, U001, Alice ve borrow:U001:ISBN-001,borrow:U001:ISBN-002,return:U001:ISBN-001 olduğunda çıktınız şöyle olur:
Alice borrowed Clean Code
Alice borrowed Design Patterns
Alice returned Clean Code
ISBN-001: Available
ISBN-002: BorrowedBu görev, bütünlüklü bir sistem oluşturmak için composition, encapsulation ve metot tasarımını bir araya getirir. Library sınıfı, genel koleksiyonu yönetirken gerçek ödünç alma mantığını User ve Book sınıflarına devreden bir koordinatör görevi görür!
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Kitap 1 bilgilerini oku
String isbn1 = scanner.nextLine();
String title1 = scanner.nextLine();
String author1 = scanner.nextLine();
// Kitap 2 bilgilerini oku
String isbn2 = scanner.nextLine();
String title2 = scanner.nextLine();
String author2 = scanner.nextLine();
// Kullanıcı bilgilerini oku
String userId = scanner.nextLine();
String userName = scanner.nextLine();
// İşlemler dizesini oku (virgülle ayrılmış, format: borrow:userId:isbn veya return:userId:isbn)
String operationsStr = scanner.nextLine();
// TODO: book1 ve book2 için Book nesneleri oluştur
// TODO: Bir User nesnesi oluştur
// TODO: Bir Library oluştur, her iki kitabı ekle ve kullanıcıyı kaydet
// TODO: operationsStr'yi "," ile ayır ve her işlemi işle
// Her işlem için, action, userId, isbn almak üzere ":" ile ayır
// Buna göre library.borrowBook() veya library.returnBook() çağır
// TODO: Her kitap için "[isbn]: [Available/Borrowed]" formatında özet yazdır
}
}Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama10OOP'de İstisna Yönetimi
İstisna Sınıfı HiyerarşisiÖzel İstisnalarDenetimli ve Denetimsiz HatalarTry-With-Resources YapısıÖzet - Doğrulanmış Kullanıcı13Proje: Kütüphane Yönetimi
Proje Genel Bakış ve UML TasarımıKitap ve Kullanıcı SınıflarıÖdünç Alma SistemiArama İşlevselliğiYönetici ArayüzüException Handling EntegrasyonuTest ve Entegrasyon2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici KalıbıKendi başına pratik yap: Online Java derleyicisi