Menu
CoddyTech

Logika Sistem Peminjaman

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 64 dari 70.

challenge icon

Tantangan

Mudah

Mari wujudkan Library System-mu dengan menerapkan logika inti peminjaman! Kamu akan membuat sistem terpusat yang mengoordinasikan buku dan pengguna, menerapkan aturan perpustakaan seperti batas peminjaman, serta memastikan buku hanya bisa dipinjam saat tersedia.

Kamu akan melanjutkan struktur empat file yang sudah ada:

  • Book.cs: Pertahankan class Book dengan property Id, Title, Author, dan IsAvailable, serta method Borrow() dan Return() dari pelajaran sebelumnya.
  • User.cs: Pertahankan class User dengan Name, MemberId, BorrowedCount, dan method untuk mengelola buku yang dipinjam. Tambahkan konstanta MaxBooks dengan nilai 3 yang menunjukkan jumlah maksimum buku yang bisa dipinjam pengguna sekaligus. Tambahkan method CanBorrow() yang hanya mengembalikan true jika pengguna meminjam kurang dari MaxBooks.
  • Library.cs: Di sinilah logika sistem peminjamanmu disatukan. Class Library-mu harus memiliki kumpulan buku dan pengguna, serta method untuk menambahkannya. Terapkan dua method utama:
    • BorrowBook(string bookId, int memberId) - Mengoordinasikan proses peminjaman. Method ini harus memeriksa apakah buku tersedia, apakah pengguna tersedia, apakah buku bisa dipinjam, dan apakah pengguna bisa meminjam lebih banyak buku. Kembalikan pesan yang sesuai untuk setiap kasus gagal atau berhasil.
    • ReturnBook(string bookId, int memberId) - Menangani pengembalian dengan memastikan pengguna memang memiliki buku tersebut sebelum memproses pengembaliannya.
  • Program.cs: Proses operasi perpustakaan dan tampilkan hasilnya.

Method BorrowBook-mu harus mengembalikan pesan berikut berdasarkan situasinya:

  • Book not found - saat ID buku tidak ada
  • User not found - saat ID anggota tidak ada
  • {Title} is not available - saat buku sudah dipinjam
  • {Name} has reached the borrowing limit - saat pengguna sudah memiliki 3 buku
  • {Name} borrowed {Title} - saat peminjaman berhasil

Method ReturnBook-mu harus mengembalikan:

  • Book not found atau User not found - untuk ID yang tidak valid
  • {Name} did not borrow {Title} - saat pengguna mencoba mengembalikan buku yang tidak dimilikinya
  • {Name} returned {Title} - saat pengembalian berhasil

Kamu akan menerima input berikut:

  • Nama perpustakaan
  • Jumlah buku, lalu setiap buku dalam format id|title|author
  • Jumlah pengguna, lalu setiap pengguna dalam format name|memberId
  • Jumlah operasi, lalu setiap operasi dalam format action|bookId|memberId

Cetak hasil setiap operasi pada barisnya sendiri.

Contohnya, jika inputnya adalah:

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

Outputnya harus berupa:

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

Perhatikan bagaimana class Library bertindak sebagai koordinator: class ini memvalidasi semua kondisi sebelum mengizinkan operasi, sehingga class Book dan User tetap berfokus pada tanggung jawab masing-masing. Pemisahan ini membuat kodemu lebih mudah dipelihara dan diuji!

Coba sendiri

using System;
using System.Collections.Generic;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Baca nama library
            string libraryName = Console.ReadLine();
            
            // Buat instance Library dengan nama library
            Library library = new Library(libraryName);
            
            // Baca jumlah buku
            int numBooks = Convert.ToInt32(Console.ReadLine());
            
            // Baca dan tambahkan buku
            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);
            }
            
            // Baca jumlah pengguna
            int numUsers = Convert.ToInt32(Console.ReadLine());
            
            // Baca dan daftarkan pengguna
            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);
            }
            
            // Baca jumlah operasi
            int numOperations = Convert.ToInt32(Console.ReadLine());
            
            // Proses operasi
            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);
                }
            }
        }
    }
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C# online