Menu
Coddy logo textTech

Ödünç Alma Sistemi Mantığı

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

challenge icon

Görev

Kolay

Kütüphane Sistemini, temel ödünç alma mantığını uygulayarak hayata geçirelim! Kitaplar ve kullanıcılar arasındaki koordinasyonu sağlayan merkezi bir sistem oluşturacak, ödünç alma limitleri gibi kütüphane kurallarını uygulayacak ve kitapların yalnızca mevcut olduklarında ödünç alınabilmesini sağlayacaksın.

Mevcut dört dosyalı yapını geliştirmeye devam edeceksin:

  • Book.cs: Önceki dersteki Id, Title, Author ve IsAvailable özelliklerine, ayrıca Borrow() ve Return() metotlarına sahip Book sınıfını koru.
  • User.cs: Name, MemberId, BorrowedCount özelliklerine ve ödünç alınan kitapları yönetmeye yarayan metotlara sahip User sınıfını koru. Bir kullanıcının aynı anda ödünç alabileceği maksimum kitap sayısını temsil eden ve 3 değerine ayarlanmış MaxBooks sabitini ekle. Yalnızca kullanıcı CanBorrow() değerinden daha az sayıda kitap ödünç aldıysa true döndüren MaxBooks metodunu ekle.
  • Library.cs: Ödünç alma sistemi mantığının bir araya geldiği yer burasıdır. Library sınıfında kitap ve kullanıcı koleksiyonlarıyla bunları eklemeye yarayan metotlar bulunmalıdır. İki temel metot uygula:
    • BorrowBook(string bookId, int memberId) - Ödünç alma sürecini koordine eder. Kitabın mevcut olup olmadığını, kullanıcının mevcut olup olmadığını, kitabın müsait olup olmadığını ve kullanıcının daha fazla kitap ödünç alıp alamayacağını kontrol etmelidir. Her hata durumu veya başarı için uygun mesajları döndür.
    • ReturnBook(string bookId, int memberId) - İade işlemini gerçekleştirmeden önce kullanıcının ilgili kitaba gerçekten sahip olduğunu doğrulayarak iadeleri yönetir.
  • Program.cs: Kütüphane işlemlerini gerçekleştir ve sonuçları görüntüle.

BorrowBook metodun duruma göre şu mesajları döndürmelidir:

  • Book not found - kitap kimliği mevcut olmadığında
  • User not found - üye kimliği mevcut olmadığında
  • {Title} is not available - kitap zaten ödünç alınmış olduğunda
  • {Name} has reached the borrowing limit - kullanıcı zaten 3 kitaba sahip olduğunda
  • {Name} borrowed {Title} - başarılı ödünç alma işleminde

ReturnBook metodun şunları döndürmelidir:

  • Book not found veya User not found - geçersiz kimlikler için
  • {Name} did not borrow {Title} - kullanıcı sahip olmadığı bir kitabı iade etmeye çalıştığında
  • {Name} returned {Title} - başarılı iade işleminde

Şu girdileri alacaksın:

  • Kütüphane adı
  • Kitap sayısı, ardından id|title|author biçiminde her kitap
  • Kullanıcı sayısı, ardından name|memberId biçiminde her kullanıcı
  • İşlem sayısı, ardından action|bookId|memberId biçiminde her işlem

Her işlemin sonucunu kendi satırında yazdır.

Örneğin girdiler şöyleyse:

Central Library
4
B001|The Hobbit|Tolkien
B002|1984|Orwell
B003|Dune|Herbert
B004|Foundation|Asimov
2
Alice|101
Bob|102
6
borrow|B001|101
borrow|B002|101
borrow|B003|101
borrow|B004|101
borrow|B001|102
return|B002|101

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

Alice borrowed The Hobbit
Alice borrowed 1984
Alice borrowed Dune
Alice has reached the borrowing limit
The Hobbit is not available
Alice returned 1984

Library sınıfının koordinatör olarak nasıl davrandığına dikkat et: işlemlere izin vermeden önce tüm koşulları doğrular ve Book ile User sınıflarını kendi sorumluluklarına odaklı tutar. Bu ayrım, kodunun bakımını ve test edilmesini kolaylaştırır!

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
            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);
            }
            
            // İş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]);
                
                if (action == "borrow")
                {
                    string result = library.BorrowBook(bookId, memberId);
                    Console.WriteLine(result);
                }
                else if (action == "return")
                {
                    string result = library.ReturnBook(bookId, memberId);
                    Console.WriteLine(result);
                }
            }
        }
    }
}

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

Kendi başına pratik yap: Online C# derleyicisi