بسم الله الرحمن الرحیم
در این تمرین سعی داریم تا یک سامانه مدیریت کتابخانه را مدل کنیم. این کتابخانه قرار است یک سری کتاب را در کتابخانه نگهداری کند و به اعضای کتابخانه امانت دهد. اعضا میتوانند کتاب را از کتابخانه به امانت گیرند و یا آن را پس دهند.
در طراحی این سامانه، شما باید مدیریت اعضای کتابخانه، را انجام دهید و اعمالی از قبیل اضافه کردن کتاب به کتابخانه، حذف کتاب از کتابخانه، به امانت دادن کتاب به اعضا و ... در این سامانه قابل انجام باشد.
نکته: ممکن است برای پیادهسازی کلاسهای خود نیازمند اضافه کردن توابع private یا public به کلاسها باشید. توابع زیر صرفا توابعی هستند که باید پیادهسازی شوند. همچنین در موارد مورد نیاز متدهای getو setبرای متغیرها بنویسید.
برای مدلسازی مساله بالا نیازمند کلاسهای زیر هستیم.
public class Library{}
این کلاس برای مدلسازی کتابخانه بصورت کلی استفاده میشود.
public class Member{}
این کلاس برای مدلسازی اعضای کتابخانه استفاده میشود.
public class Borrow{}
این کلاس برای مدلسازی به امانت گرفتن کتاب استفاده میشود.
public class Book{}
این کلاس برای توصیف کتابهایی که در کتابخانه به امانت داده میشوند، استفاده میشود..
public class Writer{}
این کلاس برای مدلسازی نویسندهها استفاده میشود.
public class Address{}
این کلاس برای مدلسازی آدرس یک شخص استفاده میشود.
متدهای کلاسهای زیر بدین صورت هستند:
public Library(String name);
سازنده: اسم کتابخانه را به عنوان ورودی دریافت میکند.
public void addMember(Member m);
این تابع یک عضو به لیست اعضای کتابخانه اضافه میکند.
public Member[] getMembers();
لیست اعضای کتابخانه را بازمیگرداند..
public void addBook(Book b);
یک کتاب جدید را به لیست کتابهای کتابخانه اضافه میکند.
public Book[] getExistBooks();
یک آرایه از کتابهای موجود در کتابخانه را باز میگرداند.
public Book[] getBorrowedBooks();
یک آرایه از کتابهای قرض داده شده بر میگرداند.
public Book[] getAllBooks();
یک آرایه از کلیه کتابهایی که کتابخانه دارد ( چه امانت گرفته شده و چه موجود) برمیگرداند.
public Borrow[] getBorrows();
یک آرایه از تمام امانت های بر می گرداند.
public Borrow getBorrow(int id);
امانتی با شناسه idرا برمی گرداند.
public Book(String name, int ID, Writer[]writers, int year);
سازنده: اسم کتاب، کد کتاب، نویسندگان کتاب و سال نشر کتاب را به عنوان ورودی میگیرد.
برای هر یک از ویژگیهای این کلاس متد setو getنوشته شود.
public Member(String name, int ID, Address address);
سازنده: نام عضو کتابخانه و شناسه و آدرس آن را میگیرد.
public Member(String name, int ID);
سازنده: نام عضو کتابخانه و شناسه آن را میگیرد.
public int getNumBorrows();
تعداد کتابهای کنونی به امانت گرفته شده توسط یک عضو را باز میگرداند.
public void addBorrow(Borrow borrow);
یک امانت را به لیست امانتهای عضو اضافه میکند.
public Borrow[] getTotalBorrows();
تمام درخواستهای به امانت گرفتن کتاب را باز میگرداند.
public Member getMember(int id);
عضوی با شماره شناسه idرا برمی گرداند. در صورت عدم وجود عضوی با این شماره شناسه nullبر میگرداند.
public Borrow(int ID, Member m);
سازنده: شناسه درخواست امانت و عضو درخواست دهنده را دریافت میکند.
public int getID()
شناسه خرید را باز میگرداند.
public void addItem (Book book);
کتاب bookرا به لیست امانت اضافه میکند.
public void removeItem (Book book);
کتاب bookرا از لیست امانت حذف میکند.
public Book[] getItems();
خروجی این تابع یک آرایه از کتابهای موجود در درخواست امانت است.
public Writer(String firstName, String lastName);
سازنده: نام و نام خانوادگی نویسنده را دریافت میکند.
public Address(String provinceName, String townName, String streetName, int plaque);
سازنده: نام استان، نام شهر، نام خیابان و شماره پلاک را دریافت می کند
نحوهی ارتباط این سامانه با کاربرانش با دستورات ورودی در terminal است و برنامه شما باید در یک حلقه بی نهایت ورودی بخواند. قالب دستورات این سامانه بصورت سلسله مراتبی است. بدین صورت که در ابتدا نوع دستورadd , remove, report مشخص می شود. سپس موجودیتی که قرار است این دستور روی آن اعمال شود . member , book , borrowدر نهایت نیز اطلاعات موجودیت وارد میشود
برنامه با دستور terminate خاتمه مییابد.
در صورتی که این دستور وارد شد در خط بعدی کاربر موجودیت مورد نیاز خود را وارد میکند.
درصورتی که موجودیت مشتری بود در خط های بعدی کاربر مشخصات مشتری را بدین صورت وارد میکند.
شناسه مشتری
نام مشتری
آدرس مشتری به ترتیب : نام استان، نام شهر، نام خیابان، پلاک ، هرکدام در یک خط.
درصورتی که موجودیت کتاب بود در خط های بعدی کاربر مشخصات کتاب را بدین صورت وارد میکند.
شناسه کتاب
نام کتاب
تعداد نویسندگان
مشخصات نویسندگان کتاب به ترتیب : نام، نام خانوادگی هر کدام در یک خط
سال نشر کتاب
شناسه درخواست امانت
شناسه کاربر درخواست دهنده
این دستور برای اضافه کردن کتاب به درخواست امانت عضو است. در خطهای بعدی مشخصات itemبصورت زیر وارد میشود.
شناسه درخواست امانت
شناسه کتاب
پس از این دستور در صورتی که کتاب در کتابخانه موجود بود در امانت کسی نبود به لیست امانت مشخص شده اضافه میشود
همچنین هر یک از آرایه های borrowedBooksو existBooksدر کلاس Library آپدیت می شوند. ولی در صورتی که موجود نبود اضافه نمیشود.
در این حالت باید اطلاعات اعضای کتابخانه هر کدام در یک خط پرینت شود. فرمت خروجی هر مشتری بدین صورت است.از آنجا که خروجی شما به زبان انگلیسی هست فرمتهای خروجی نیز به زبان انگلیسی هست.
member-ID, member-name, total-borrow-size, member address
دقت کنید آدرس مشتری به ترتیب نام استان، نام شهر، نام خیابان، پلاک پرینت شود.
در این حالت تعداد کتابهای موجود در کتابخانه و قابل به امانت گرفتن پرینت می شود.
در این حالت شناسه درخواست امانت در یک خط به عنوان ورودی گرفته می شود و پس از آن در خط دیگر مشخصات آن امانت به
ترتیب زیر در خروجی نشان داده می شود:
borrow_ID, member_ID, booksList
که لیست کتابها به ترتیب به صورت زیر نمایش داده می شود :
book_ID, book_name, book_year, book_writer1_name, book_writer2-name , …
این دستور یک کتاب را از لیست امانت عضو حذف میکند. ورودی خطهای بعدی برای توصیف این دستور بدین صورت است.
شناسه درخواست
شناسه کتاب
نمونه ورودی :
add
member
1
ali
fars
shiraz
jamejam
24
report
customers
terminate
نمونه خروجی:
1,ali,0,fars,shiraz,jamejam,24
فایل پی دی اف این تمرین
کدهای حل این تمرین در گیتهاب :