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

Kütüphane Sisteminizi (Library System), Book ve User modellerini daha zengin işlevsellikle geliştirerek 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 dosyadan oluşan 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) alanı olmalıdır. Kullanılabilirlik durumunu değiştiren ve başarı veya başarısızlık 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: Ödünç alınan kitapları takip etmek için User sınıfınızı genişletin. Name (string), MemberId (int) ve ödünç alınan kitap ID'lerini saklamak için özel bir liste (private list) ekleyin. Kullanıcının şu anda kaç kitaba sahip olduğunu döndüren BorrowedCount adında salt okunur (read-only) bir özellik 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ı belirli bir 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ı yönetmelidir. Kütüphaneyi doldurmak için AddBook(Book book) ve RegisterUser(User user) metotlarını ekleyin. Bu ID'ye sahip kitabı döndüren (bulunamazsa null) bir GetBookById(string id) metodu ve kullanıcılar için benzer şekilde çalışan GetUserById(int memberId) metodu ekleyin.
  • Program.cs: Girdilere dayalı olarak 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
  • Kayıt edilecek kullanıcı sayısı
  • Her kullanıcı için: name|memberId
  • Gerçekleştirilecek işlem sayısı
  • Her işlem için: action değerinin borrow veya return olduğu action|bookId|memberId

Her işlem için ödünç alma veya iade işleminin sonucunu yazdırın. Tüm işlemlerden sonra, her kullanıcı için isimlerini 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ı şu şekilde 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 başarıyla iki kitap ödünç aldığına, ancak Bob'un 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 sayısı 1'e düşer. Bu, modellerinizin kütüphane kurallarını uygulamak için birlikte nasıl çalıştığını gösterir!

Kendin dene

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Kütüphane adını oku
            string libraryName = Console.ReadLine();
            
            // Kütüphane adıyla bir Library örneği oluştur
            Library library = new Library(libraryName);
            
            // Kitap sayısını oku
            int numBooks = Convert.ToInt32(Console.ReadLine());
            
            // Kitapları oku ve ekle
            for (int i = 0; i < numBooks; i++)
            {
                string bookInput = Console.ReadLine();
                string[] bookParts = bookInput.Split('|');
                string bookId = bookParts[0];
                string bookTitle = bookParts[1];
                string bookAuthor = bookParts[2];
                
                Book book = new Book(bookId, bookTitle, bookAuthor);
                library.AddBook(book);
            }
            
            // Kullanıcı sayısını oku
            int numUsers = Convert.ToInt32(Console.ReadLine());
            
            // Kullanıcıları oku ve kaydet
            List<User> usersList = new List<User>();
            for (int i = 0; i < numUsers; i++)
            {
                string userInput = Console.ReadLine();
                string[] userParts = userInput.Split('|');
                string userName = userParts[0];
                int memberId = Convert.ToInt32(userParts[1]);
                
                User user = new User(userName, memberId);
                library.RegisterUser(user);
                usersList.Add(user);
            }
            
            // İşlem sayısını oku
            int numOperations = Convert.ToInt32(Console.ReadLine());
            
            // İşlemleri işle
            for (int i = 0; i < numOperations; i++)
            {
                string operationInput = Console.ReadLine();
                string[] opParts = operationInput.Split('|');
                string action = opParts[0];
                string bookId = opParts[1];
                int memberId = Convert.ToInt32(opParts[2]);
                
                Book book = library.GetBookById(bookId);
                User user = library.GetUserById(memberId);
                
                if (action == "borrow")
                {
                    string result = book.Borrow();
                    Console.WriteLine(result);
                    if (result.Contains("has been borrowed"))
                    {
                        user.AddBorrowedBook(bookId);
                    }
                }
                else if (action == "return")
                {
                    string result = book.Return();
                    Console.WriteLine(result);
                    if (result.Contains("has been returned"))
                    {
                        user.RemoveBorrowedBook(bookId);
                    }
                }
            }
            
            // Her kullanıcı için özeti yazdır
            foreach (User user in usersList)
            {
                Console.WriteLine($"{user.Name}: {user.BorrowedCount} book(s)");
            }
        }
    }
}

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