// Book.
public class Book {
private String bookId;
private String title;
private String author;
private String publisher;
private int publicationYear;
private boolean available;
public Book(String bookId, String title, String author, String publisher, int
publicationYear) {
[Link] = bookId;
[Link] = title;
[Link] = author;
[Link] = publisher;
[Link] = publicationYear;
[Link] = true; // Initially available
}
public String getBookId() { return bookId; }
public String getTitle() { return title; }
public String getAuthor() { return author; }
public boolean isAvailable() { return available; }
public void setAvailable(boolean available) { [Link] = available; }
@Override
public String toString() {
return "Book ID: " + bookId + ", Title: " + title + ", Author: " + author +
", Available: " + available;
}
}
// [Link] (Abstract Class)
public abstract class Member {
protected String memberId;
protected String name;
protected String address;
protected String phoneNumber;
protected int borrowLimit;
public Member(String memberId, String name, String address, String phoneNumber,
int borrowLimit) {
[Link] = memberId;
[Link] = name;
[Link] = address;
[Link] = phoneNumber;
[Link] = borrowLimit;
}
public String getMemberId() { return memberId; }
public String getName() { return name; }
public String getAddress() { return address; }
public String getPhoneNumber() { return phoneNumber; }
public int getBorrowLimit() { return borrowLimit; }
public abstract double calculateFine(Date dueDate, Date returnDate);
@Override
public String toString() {
return "Member ID: " + memberId + ", Name: " + name + ", Address: " +
address + ", Phone: " + phoneNumber;
}
}
// [Link]
import [Link];
public class StudentMember extends Member {
private String studentId;
private String department;
public StudentMember(String memberId, String name, String address, String
phoneNumber, String studentId, String department) {
super(memberId, name, address, phoneNumber, 5); // Student borrow limit is
5
[Link] = studentId;
[Link] = department;
}
@Override
public double calculateFine(Date dueDate, Date returnDate) {
// Implement fine calculation logic for student members
long diff = [Link]() - [Link]();
long diffDays = diff / (24 * 60 * 60 * 1000);
if (diffDays > 0) {
return diffDays * 0.50; // 0.50 Birr per day overdue
} else {
return 0.0;
}
}
@Override
public String toString() {
return [Link]() + ", Student ID: " + studentId + ", Department: " +
department;
}
}
// [Link] (Key methods)
import [Link];
import [Link];
public class Library {
private String name;
private ArrayList<Book> books;
private ArrayList<Member> members;
private ArrayList<Loan> loans;
public Library(String name) {
[Link] = name;
[Link] = new ArrayList<>();
[Link] = new ArrayList<>();
[Link] = new ArrayList<>();
}
public void addBook(Book book) {
[Link](book);
}
public void lendBook(Book book, Member member, Date dueDate) {
if ([Link]() && [Link]() > 0) {
Loan loan = new Loan(book, member, new Date(), dueDate);
[Link](loan);
[Link](false);
[Link]--;
[Link]("Book lent successfully to " + [Link]());
} else {
[Link]("Book is not available or member has reached borrow
limit.");
}
}
}
// [Link]
import [Link];
public class Loan {
private Book book;
private Member member;
private Date borrowDate;
private Date dueDate;
private Date returnDate;
public Loan(Book book, Member member, Date borrowDate, Date dueDate) {
[Link] = book;
[Link] = member;
[Link] = borrowDate;
[Link] = dueDate;
[Link] = null; // Initially not returned
}
public Book getBook() { return book; }
public Member getMember() { return member; }
public Date getBorrowDate() { return borrowDate; }
public Date getDueDate() { return dueDate; }
public Date getReturnDate() { return returnDate; }
public void setReturnDate(Date returnDate) { [Link] = returnDate; }
public boolean isOverdue() {
if (returnDate == null) {
return new Date().after(dueDate); // Check if current date is after due
date
}
return false; // Already returned
}
}
// [Link] (Main Class - Partial Example)
import [Link];
import [Link];
import [Link];
import [Link];
public class LibrarySystem {
public static void main(String[] args) {
Library dtuLibrary = new Library("Debre Tabor University Library");
Scanner scanner = new Scanner([Link]);
// Example: Add some books and members (for testing)
Book book1 = new Book("ISBN-123", "The Lord of the Rings", "J.R.R.
Tolkien", "Allen & Unwin", 1954);
Book book2 = new Book("ISBN-456", "Pride and Prejudice", "Jane Austen", "T.
Egerton", 1813);
[Link](book1);
[Link](book2);
StudentMember student1 = new StudentMember("DTU-001", "Abebe Kebede",
"Debre Tabor", "0911111111", "STD-123", "Computer Science");
[Link](student1);
// Main menu loop
while (true) {
[Link]("\nDebre Tabor University Library System");
[Link]("1. Add Book");
[Link]("2. Lend Book");
[Link]("3. Return Book");
[Link]("4. List All Books");
[Link]("5. List All Members");
[Link]("6. Exit");
[Link]("Enter your choice: ");
int choice = [Link]();
[Link](); // Consume newline
switch (choice) {
case 1:
// Implement add book logic (prompt user for book details,
create a Book object, and call [Link]())
[Link]("Adding a book (implementation needed)");
break;
case 2: {
// Implement lend book logic
[Link]("Lending a book");
[Link]("Enter book ID to lend: ");
String bookId = [Link]();
[Link]("Enter member ID to lend to: ");
String memberId = [Link]();
[Link]("Enter due date (yyyy-MM-dd): ");
String dueDateString = [Link]();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-
dd");
Date dueDate = null;
try {
dueDate = [Link](dueDateString);
} catch (ParseException e) {
[Link]("Invalid date format. Please use yyyy-
MM-dd.");
break;
}
// Find the book and member
Book bookToLend = null;
for (Book book : [Link]) {
if ([Link]().equals(bookId)) {
bookToLend = book;
break;
}
}
Member memberToLendTo = null;
for (Member member : [Link]) {
if ([Link]().equals(memberId)) {
memberToLendTo = member;
break;
}
}
if (bookToLend != null && memberToLendTo != null) {
[Link](bookToLend, memberToLendTo, dueDate);
} else {
[Link]("Book or member not found.");
}
break;
}
case 3:
[Link]("Returning a book (implementation needed)");
break;
case 4:
[Link]();
break;
case 5:
[Link]();
break;
case 6:
[Link]("Exiting...");
[Link]();
return;
default:
[Link]("Invalid choice.");
}
}
}
}