برای مدیریت بهتر کتاب‌هایمان به یک کتاب‌خانه نیاز داریم. این کتاب‌خانه مقداری ظرفیت دارد که بیشتر از آن نمی‌تواند کتاب در خود جا دهد.

این کتاب‌خانه مشخصات زیر را دارد:

  • از هر کتاب دقیقاً یکی دارد که یا موجود است و یا به یک نفر امانت داده شده است.
  • اسم کتاب‌ها به بزرگی و کوچکی حساس نیست، مثلاً Golestan و gOlEsTan دقیقاً یک کتاب هستند.
  • یک نفر می‌تواند چند کتاب را امانت بگیرد و از این نظر محدودیتی نیست.
  • در صورتی که یک کتاب امانت گرفته شده باشد، جایش همچنان محفوظ است و ظرفیت آن برای اضافه شدن کتاب دیگری باز نمی‌شود.
  • پیام‌های خطای زیر از متد‌های مختلف کتاب‌خانه دریافت می‌شود. در صورتی که هیچ خطایی نباشد نیز OK داده می‌شود:
The book has not been borrowed
The book is already borrowed by <borrower name>
The book is already in the library
The book is not defined in the library
Not enough capacity
OK
Plain text

تشخیص این‌که کدام ارور در چه زمان(ها)ی باید برگردانده شود بر عهده‌ی شماست.

کتاب‌خانه

جزئیات پروژه

پروژه‌ی اولیه را از این لینک دانلود کنید. ساختار فایل‌های پروژه به صورت زیر است:

library/
├── go.mod
├── go.sum
├── main.go
└── main_sample_test.go
Plain text

در فایل main.go چند تابع و متد وجود دارد که شما باید آن‌ها را کامل کنید.

تابع NewLibrary

این تابع یک اشاره‌گر به یک شی از نوع کتاب‌خانه برمی‌گرداند. در این تابع باید یک شی جدید بسازید و ساختار داخلی آن را مطابق آن‌چه خودتان تعریف کرده‌اید مقداردهی کنید.

type Library struct {
}

func NewLibrary(capacity int) *Library {
	// TODO
	return nil
}

Go
main.go

متد AddBook

در این متد شما اسم یک کتاب را گرفته و در صورتی که شرایط برقرار بود (مثلاً کتابخانه جا داشت و این کتاب قبلا در کتابخانه نبود) آن را اضافه می‌کنید و OK بر می‌گردانید. در غیر این صورت بسته به مورد ارور مناسب را در قالب یک رشته برمی‌گردانید.

func (library *Library) AddBook(name string) string {
	// TODO
	return ""
}
Go
main.go

*راهنمایی: در صورتی که کتاب‌خانه پر باشد و کتابی با نام تکراری وارد شود، خطای مربوط به کتاب تکراری (و نه پر بودن ظرفیت) باید برگردانده شود.*

متد BorrowBook و ReturnBook

در این دو متد یک نفر یک کتاب را امانت می‌گیرد و سپس آن را پس می‌دهد.

در مواردی نیز ممکن است خطا پیش آید مثلا کتابی که امانت گرفته شده را دوباره کسی بخواهد امانت بگیرد یا کسی کتابی که در حال حاضر امانت گرفته نشده را بخواهد پس دهد.

func (library *Library) BorrowBook(bookName, personName string) string {
	// TODO
	return ""
}

func (library *Library) ReturnBook(bookName string) string {
	// TODO
	return ""
}
Go
main.go

آن‌چه باید آپلود کنید

پس از پیاده‌سازی توابع خواسته شده، فایل main.go را آپلود کنید.


ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.