Menu
CoddyTech

Model Buku dan Pengguna

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

challenge icon

Tantangan

Mudah

Mari kembangkan Library System-mu dengan melengkapi model Book dan User dengan fungsionalitas yang lebih kaya. Kamu akan menambahkan pelacakan status buku, kemampuan meminjam bagi pengguna, dan enkapsulasi yang tepat untuk menjaga keamanan datamu.

Kamu akan terus menggunakan struktur empat file:

  • Book.cs: Tingkatkan class Book-mu dengan pengenal unik dan pelacakan status. Setiap buku harus memiliki Id (string), Title (string), Author (string), dan IsAvailable (bool, nilai awalnya true). Tambahkan method Borrow() dan Return() yang mengubah status ketersediaan dan mengembalikan pesan yang menunjukkan keberhasilan atau kegagalan. Jika seseorang mencoba meminjam buku yang tidak tersedia, kembalikan "{Title} is not available". Jika mereka mencoba mengembalikan buku yang sudah tersedia, kembalikan "{Title} was not borrowed". Operasi yang berhasil harus mengembalikan "{Title} has been borrowed" atau "{Title} has been returned".
  • User.cs: Kembangkan class User-mu untuk melacak buku yang dipinjam. Sertakan Name (string), MemberId (int), dan list privat untuk menyimpan ID buku yang dipinjam. Tambahkan property hanya-baca BorrowedCount yang mengembalikan jumlah buku yang sedang dimiliki pengguna. Sertakan method AddBorrowedBook(string bookId) dan RemoveBorrowedBook(string bookId) untuk mengelola buku yang dipinjam pengguna. Tambahkan juga method HasBook(string bookId) yang mengembalikan true jika pengguna telah meminjam buku tersebut.
  • Library.cs: Class Library-mu harus menyimpan kumpulan buku dan pengguna. Sertakan method AddBook(Book book) dan RegisterUser(User user) untuk mengisi library. Tambahkan method GetBookById(string id) yang mengembalikan buku dengan ID tersebut (atau null jika tidak ditemukan), dan GetUserById(int memberId) yang bekerja dengan cara serupa untuk pengguna.
  • Program.cs: Satukan semuanya dengan memproses operasi library berdasarkan input.

Kamu akan menerima input berikut:

  • Nama library
  • Jumlah buku yang akan ditambahkan
  • Untuk setiap buku: id|title|author
  • Jumlah pengguna yang akan didaftarkan
  • Untuk setiap pengguna: name|memberId
  • Jumlah operasi yang akan dilakukan
  • Untuk setiap operasi: action|bookId|memberId dengan action berupa borrow atau return

Untuk setiap operasi, cetak hasil tindakan peminjaman atau pengembalian. Setelah semua operasi selesai, cetak ringkasan untuk setiap pengguna yang menampilkan nama mereka dan jumlah buku yang sedang mereka pinjam dalam format {Name}: {BorrowedCount} book(s).

Contohnya, jika inputnya adalah:

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

Output-nya adalah:

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)

Perhatikan bahwa Alice berhasil meminjam dua buku, tetapi saat Bob mencoba meminjam Clean Code (yang sudah dipinjam Alice), operasi tersebut gagal. Setelah Alice mengembalikan Clean Code, jumlah bukunya turun menjadi 1. Ini menunjukkan bagaimana model-modelmu bekerja bersama untuk menerapkan aturan library!

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
            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);
            }
            
            // 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]);
                
                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);
                    }
                }
            }
            
            // Tampilkan ringkasan untuk setiap pengguna
            foreach (User user in usersList)
            {
                Console.WriteLine($"{user.Name}: {user.BorrowedCount} book(s)");
            }
        }
    }
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C# online