Menu
Coddy logo textTech

Kitap ve Kullanıcı Modelleri

Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 63 / 70.

challenge icon

Görev

Kolay

Kitap ve Kullanıcı modellerini daha zengin işlevlerle oluşturarak Kütüphane Sisteminizi genişletelim. Kitaplar için durum takibi, kullanıcılar için ödünç alma yetenekleri ve verilerinizi güvende tutmak için uygun kapsülleme (encapsulation) ekleyeceksiniz.

Dört dosyalı yapınızla çalışmaya devam edeceksiniz:

  • Book.cs: Book sınıfınızı benzersiz bir tanımlayıcı ve durum takibi ile geliştirin. Her kitabın bir Id (string), Title (string), Author (string) ve IsAvailable (bool, varsayılan olarak true) özelliği olmalıdır. Kullanılabilirlik durumunu değiştiren ve işlemin başarılı veya başarısız olduğunu belirten bir mesaj döndüren Borrow() ve Return() metotlarını ekleyin. Birisi mevcut olmayan bir kitabı ödünç almaya çalışırsa, "{Title} is not available" döndürün. Zaten mevcut olan bir kitabı iade etmeye çalışırlarsa, "{Title} was not borrowed" döndürün. Başarılı işlemler "{Title} has been borrowed" veya "{Title} has been returned" döndürmelidir.
  • User.cs: User sınıfınızı ödünç alınan kitapları takip edecek şekilde genişletin. Name (string), MemberId (int) ve ödünç alınan kitap ID'lerini saklamak için özel (private) bir liste ekleyin. Kullanıcının şu anda kaç kitaba sahip olduğunu döndüren salt okunur bir BorrowedCount özelliği ekleyin. Kullanıcının ödünç aldığı kitapları yönetmek için AddBorrowedBook(string bookId) ve RemoveBorrowedBook(string bookId) metotlarını dahil edin. Ayrıca, kullanıcı o belirli kitabı ödünç almışsa true döndüren bir HasBook(string bookId) metodu ekleyin.
  • Library.cs: Library sınıfınız kitap ve kullanıcı koleksiyonlarını barındırmalıdır. Kütüphaneyi doldurmak için AddBook(Book book) ve RegisterUser(User user) metotlarını ekleyin. Bu ID'ye sahip kitabı döndüren (veya bulunamazsa null döndüren) bir GetBookById(string id) metodu ve kullanıcılar için benzer şekilde çalışan GetUserById(int memberId) metodunu ekleyin.
  • Program.cs: Girdilere dayalı kütüphane işlemlerini işleyerek her şeyi bir araya getirin.

Aşağıdaki girdileri alacaksınız:

  • Kütüphane adı
  • Eklenecek kitap sayısı
  • Her kitap için: id|title|author
  • Kaydedilecek kullanıcı sayısı
  • Her kullanıcı için: name|memberId
  • Gerçekleştirilecek işlem sayısı
  • Her işlem için: action|bookId|memberId; burada action ya borrow ya da return şeklindedir

Her işlem için, ödünç alma veya iade etme eyleminin sonucunu yazdırın. Tüm işlemlerden sonra, her kullanıcı için adlarını ve şu anda kaç kitap ödünç aldıklarını {Name}: {BorrowedCount} book(s) formatında gösteren bir özet yazdırın.

Örneğin, girdiler şunlarsa:

Downtown Library
2
B001|Clean Code|Robert Martin
B002|Design Patterns|Gang of Four
2
Alice|101
Bob|102
4
borrow|B001|101
borrow|B002|101
borrow|B001|102
return|B001|101

Çıktı şöyle olmalıdır:

Clean Code has been borrowed
Design Patterns has been borrowed
Clean Code is not available
Clean Code has been returned
Alice: 1 book(s)
Bob: 0 book(s)

Alice'in iki kitabı başarıyla ödünç aldığına, ancak Bob Clean Code'u (zaten Alice'te olan) ödünç almaya çalıştığında işlemin başarısız olduğuna dikkat edin. Alice Clean Code'u iade ettikten sonra, kitap sayısı 1'e düşer. Bu, modellerinizin kütüphane kurallarını uygulamak için nasıl birlikte çalıştığını gösterir!

Kendin dene

using System;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Girdileri oku
            string libraryName = Console.ReadLine();
            string bookInput = Console.ReadLine();
            string userInput = Console.ReadLine();

            // Kitap girdisini ayrıştır (format: title|author)
            string[] bookParts = bookInput.Split('|');
            string bookTitle = bookParts[0];
            string bookAuthor = bookParts[1];

            // Kullanıcı girdisini ayrıştır (format: name|memberId)
            string[] userParts = userInput.Split('|');
            string userName = userParts[0];
            int memberId = Convert.ToInt32(userParts[1]);

            // Kütüphane adıyla bir Library örneği oluştur
            Library library = new Library(libraryName);

            // Başlık ve yazarla bir Book örneği oluştur
            Book book = new Book(bookTitle, bookAuthor);

            // İsim ve üye kimliğiyle bir User örneği oluştur
            User user = new User(userName, memberId);

            // GetInfo() kullanarak kütüphane bilgisini yazdır
            Console.WriteLine(library.GetInfo());

            // Kitap bilgisini şu formatta yazdır: Book: {Title} by {Author} - Available: {IsAvailable}
            Console.WriteLine($"Book: {book.Title} by {book.Author} - Available: {book.IsAvailable}");

            // Kullanıcı bilgisini şu formatta yazdır: User: {Name} (ID: {MemberId})
            Console.WriteLine($"User: {user.Name} (ID: {user.MemberId})");
        }
    }
}

Nesne Yönelimli Programlama bölümündeki tüm dersler