diff --git a/.travis.yml b/.travis.yml
index 2dde814..9b32576 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,5 +5,5 @@ deploy:
provider: script
script: "mvn test"
skip_cleanup: true
- on:
+
tags: true
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..c5f3f6b
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "java.configuration.updateBuildConfiguration": "interactive"
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index bde0b59..fee48b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,12 +1,36 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.zipcodewilmington
central-library
1.0-SNAPSHOT
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.16.1
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.10.0
+ test
+
+
+ junit
+ junit
+ 4.13.2
+
+
-
\ No newline at end of file
+
+ 17
+ 17
+
+
+
+
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/Address.java b/src/main/java/com/zipcodewilmington/centrallibrary/Address.java
new file mode 100644
index 0000000..9b2be00
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/Address.java
@@ -0,0 +1,32 @@
+package com.zipcodewilmington.centrallibrary;
+
+
+public class Address{
+ private String street;
+ private String city;
+ private String state;
+ private String zipcode;
+
+ public Address(String street, String city, String state, String zipcode) {
+ this.street = street;
+ this.city = city;
+ this.state = state;
+ this.zipcode = zipcode;
+ }
+
+ public String getStreet() {return street; }
+ public String getCity() {return city; }
+ public String getState() {return state; }
+ public String getZipcode() {return zipcode; }
+
+ public void setStreet(String street) {this.street = street; }
+ public void setCity(String city) {this.city = city; }
+ public void setState(String state) {this.state = state; }
+ public void setZipcode(String zipCode) {this.zipcode = zipCode; }
+
+ @Override
+ public String toString() {
+ return street + ", " + city + ", " + state + ", " + zipcode;
+ }
+}
+
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/Book.java b/src/main/java/com/zipcodewilmington/centrallibrary/Book.java
new file mode 100644
index 0000000..803ab55
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/Book.java
@@ -0,0 +1,45 @@
+package com.zipcodewilmington.centrallibrary;
+
+public class Book extends LibraryItem {
+
+ private String author;
+ private String genre; // move this also remove the getter and setter of isbn
+ private int pages;
+
+ public Book(String id, String title, String location, String author, String genre, String publicationDate, String isbn, int numberOfPages) {
+ super(id, title, location);
+ this.author = author;
+ this.genre = genre;
+ this.pages = numberOfPages;
+ //implement searchable fields
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+ public void setAuthor(String author) {
+ this.author = author;
+
+ }
+
+ public String getGenre() {
+ return genre;
+ }
+ public void setGenre(String genre) {
+ this.genre = genre;
+ }
+
+ public int getPages() {
+ return pages;
+ }
+ public void setPages(int pages) {
+ this.pages = pages;
+
+ }
+
+ public String[] getSearchableFields() {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException("Unimplemented method 'getSearchableFields'");
+ }
+}
+
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/BookTest.java b/src/main/java/com/zipcodewilmington/centrallibrary/BookTest.java
new file mode 100644
index 0000000..63dbcd8
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/BookTest.java
@@ -0,0 +1,20 @@
+package com.zipcodewilmington.centrallibrary;
+
+public class BookTest {
+
+public static void main(String[] args) {
+
+ Book book = new Book("1", "The Great Gatsby", "Aisle 3", "F. Scott Fitzgerald", "Classic", "1925", "978-0743273565", 180);
+
+ System.out.println(book.getAuthor());
+ System.out.println(book.getGenre());
+ System.out.println(book.getPages());
+ System.out.println(book.isAvailable());
+ System.out.println(book.getLocation());
+ System.out.println(book.getId());
+ System.out.println(book.getTitle());
+
+}
+
+//something
+}
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/DVD.java b/src/main/java/com/zipcodewilmington/centrallibrary/DVD.java
new file mode 100644
index 0000000..917377a
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/DVD.java
@@ -0,0 +1,54 @@
+package com.zipcodewilmington.centrallibrary;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+
+// Base class (superclass) DVD
+public abstract class DVD extends LibraryItem implements Reservable {
+ private String Title;
+ private String Director;
+ private String Duration;
+ private String Rating;
+ private String Genre;
+ private boolean Borrowed;
+
+ public String getTitle() {
+ return Title;
+}
+
+ public String getDirector() {
+ return Director;
+ }
+
+ public String getGenre() {
+ return Genre;
+ }
+
+public String getRating() {
+ return Rating;
+}
+
+ public interface Reserveable {
+ void reserve(String user);
+ boolean isReserved();
+}
+
+
+ public String getType() {
+ return "DVD";
+}
+
+
+ public int getBorrowedDays() {
+ return 7;
+ }
+
+
+ public double getLateFeePerDay() {
+ return 1.00;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/Library.java b/src/main/java/com/zipcodewilmington/centrallibrary/Library.java
new file mode 100644
index 0000000..85da9e2
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/Library.java
@@ -0,0 +1,76 @@
+package com.zipcodewilmington.centrallibrary;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class Library {
+ private String name;
+ private Address address;
+ private List items;
+ private List members;
+ private List librarians;
+
+
+ public Library(String name, Address address) {
+ this.name = name;
+ this.address = address;
+ this.items = new ArrayList<>();
+ this.members = new ArrayList<>();
+ this.librarians = new ArrayList<>();
+ }
+
+ public String getName() {
+ return name;
+ }
+ public Address getAddress() {
+ return address;
+ }
+ public List getItems() {
+ return items;
+ }
+ public List getMembers() {
+ return members;
+ }
+ public List getLibrarians() {
+ return librarians;
+ }
+
+ public void addItem(LibraryItem item) {
+ items.add(item);
+ }
+ public void removeItem(LibraryItem item) {
+ items.remove(item);
+ }
+ public void addMember(LibraryMember member) {
+ members.add(member);
+ }
+ public void addLibrarian(Librarian librarian) {
+ librarians.add(librarian);
+ }
+
+ public List search(String keyword) {
+ List results = new ArrayList<>();
+ for (LibraryItem item : items) {
+ if (item.matchesKeyword(keyword)) {
+ results.add(item);
+ }
+ }
+ return results;
+ }
+ public void displayAllItems() {
+ for (LibraryItem item : items) {
+ System.out.println(item.getItemType() + " | " + item.getTitle() + " | " + (item.isAvailable() ? "Available" : "Checked Out"));
+ }
+ }
+
+ public void generateLateFeeReport() {
+ for (LibraryMember member : members) {
+ System.out.println("Member: " + member.getName());
+ for (LibraryItem item : member.getBorrowedItems()) {
+ System.out.println(" - " + item.getTitle()
+ + " | Max Days: " + item.getMaxBorrowDays()
+ + " | Daily Fee: $" + item.calculateLateFee(1));
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/LibraryItem.java b/src/main/java/com/zipcodewilmington/centrallibrary/LibraryItem.java
new file mode 100644
index 0000000..d65a422
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/LibraryItem.java
@@ -0,0 +1,83 @@
+package com.zipcodewilmington.centrallibrary;
+
+public class LibraryItem {
+
+ private String id;
+ private String title;
+ private String location;
+ private boolean isAvailable;
+ private String isbn;
+
+
+//constructor
+ public LibraryItem() {
+
+ }
+
+ public LibraryItem(String id, String title, String location){
+ this.id = id;
+ this.title = title;
+ this.location = location;
+ this.isAvailable = true;
+
+ }
+
+
+
+ public String getId() {
+ return id;
+ }
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getLocation() {
+ return location;
+ }
+ public void setLocation(String location) {
+ this.location = location;
+ }
+
+ public boolean isAvailable() {
+ return isAvailable;
+ }
+ public void setAvailable(boolean available) {
+ isAvailable = available;
+ }
+
+ public void checkOut() {
+ if (!isAvailable) throw new IllegalStateException(title + " is already checked out.");
+ this.isAvailable = false;
+
+ }
+
+ public void checkIn() {
+ this.isAvailable = true;
+
+ }
+ public String getIsbn() {
+ return isbn;
+ }
+ public void setIsbn(String isbn) {
+ this.isbn = isbn;
+ }
+
+
+ public boolean matchesKeyword(String keyword) {
+ for (String field : getSearchableFields()) {
+ if (field != null && field.toLowerCase().contains(keyword.toLowerCase())) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/LibraryMember b/src/main/java/com/zipcodewilmington/centrallibrary/LibraryMember
new file mode 100644
index 0000000..e69de29
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/MainApplication.java b/src/main/java/com/zipcodewilmington/centrallibrary/MainApplication.java
index c914d10..d8e8bed 100644
--- a/src/main/java/com/zipcodewilmington/centrallibrary/MainApplication.java
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/MainApplication.java
@@ -1,4 +1,4 @@
-package com.zipcodewilmington.centralibrary;
+package com.zipcodewilmington.centrallibrary;
/**
* Created by n3pjk on 6/9/2025.
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/Movie.java b/src/main/java/com/zipcodewilmington/centrallibrary/Movie.java
new file mode 100644
index 0000000..da0400f
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/Movie.java
@@ -0,0 +1,46 @@
+package com.zipcodewilmington.centrallibrary;
+
+public class Movie extends LibraryItem {
+ private String director;
+ private int duration;
+ private String rating;
+ private String genre;
+ public Movie(String id, String title, String location, String director, int duration, String rating, String genre) {
+ super(id, title, location);
+ this.director = director;
+ this.duration = duration;
+ this.rating = rating;
+ this.genre = genre;
+
+
+ }
+ public String getDirector() {
+ return director;
+ }
+ public void setDirector(String director) {
+ this.director = director;
+ }
+
+ public int getDuration() {
+ return duration;
+ }
+ public void setDuration(int duration) {
+ this.duration = duration;
+ }
+
+ public String getRating() {
+ return rating;
+ }
+ public void setRating(String rating) {
+ this.rating = rating;
+ }
+
+ public String getGenre() {
+ return genre;
+ }
+ public void setGenre(String genre) {
+ this.genre = genre;
+ }
+ // add in the rating
+
+}
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/Periodical.java b/src/main/java/com/zipcodewilmington/centrallibrary/Periodical.java
new file mode 100644
index 0000000..0d03cfe
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/Periodical.java
@@ -0,0 +1,45 @@
+package com.zipcodewilmington.centrallibrary;
+
+public class Periodical extends LibraryItem {
+ private String publisher;
+ private String issn;
+ private String volume;
+ private String issueNumber;
+ private String publicationDate;
+
+ public Periodical(String id, String title, String location, String publisher, String issn, String volume, String issueNumber, String publicationDate) {
+ super(id, title, location);
+ this.publisher = publisher;
+ this.issn = issn;
+ this.volume = volume;
+ this.issueNumber = issueNumber;
+ this.publicationDate = publicationDate;
+ }
+
+ public String getPublisher() {return publisher;}
+ public String getIssn() {return issn;}
+ public String getVolume() {return volume;}
+ public String getIssueNumber() {return issueNumber;}
+ public String getPublicationDate() {return publicationDate;}
+
+
+ public double calculateLateFee(int daysLate) {
+ return daysLate * 0.25;
+ }
+
+
+ public int getMaxBorrowDays() {
+ return 7;
+ }
+
+
+ public String getItemType() {
+ return "Periodical";
+ }
+
+
+ @Override
+ public String[] getSearchableFields() {
+ return new String[]{getTitle(), publisher, issn};
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/Reservable.java b/src/main/java/com/zipcodewilmington/centrallibrary/Reservable.java
new file mode 100644
index 0000000..8c21263
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/Reservable.java
@@ -0,0 +1,9 @@
+package com.zipcodewilmington.centrallibrary;
+
+
+public interface Reservable {
+ void reserve(LibraryMember member);
+ void cancelReserve(LibraryMember member);
+ boolean isReserved();
+
+}
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/Searchable.java b/src/main/java/com/zipcodewilmington/centrallibrary/Searchable.java
new file mode 100644
index 0000000..e935ee3
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/Searchable.java
@@ -0,0 +1,6 @@
+package com.zipcodewilmington.centrallibrary;
+public interface Searchable {
+ boolean matchesKeyword(String keyword);
+ String[] getSearchableFields();
+}
+
diff --git a/src/main/java/com/zipcodewilmington/centrallibrary/person.java b/src/main/java/com/zipcodewilmington/centrallibrary/person.java
new file mode 100644
index 0000000..bdf2be3
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/centrallibrary/person.java
@@ -0,0 +1,51 @@
+package com.zipcodewilmington.centrallibrary;
+
+public class Person {
+ private String name;
+ private String email;
+ private String phoneNumber;
+ private int age;
+ //constructor initialized variable instances that belong to the person class
+
+ public Person(String name, int age, String phoneNumber, String email) {
+ this.name = name;
+ this.email = email;
+ this.phoneNumber = phoneNumber;
+ this.age = age;
+ }
+ //getters and setters for the person class
+ public String getName() {
+ return name;
+ }
+ public int getAge() {
+ return age;
+ }
+ public String getEmail() {
+ return email;
+ }
+ public String getPhoneNumber() {
+ return phoneNumber;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+ public void setEmail(String email) {
+ this.email = email;
+ }
+ public void setPhoneNumber(String phoneNumber) {
+ if (phoneNumber == null || phoneNumber.trim().isEmpty()) {
+ throw new IllegalArgumentException("Phone number cannot be null or empty");
+ }
+ this.phoneNumber = phoneNumber;
+}
+@Override
+ public String toString() {
+ return "person{" + "name='" + name + '\'' + ", email='" + email + '\'' + ", phoneNumber='" + phoneNumber + '\'' + ", age=" + age +'}';
+ }
+
+
+ void setAge(int i) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+}
diff --git a/src/main/resources/library.json b/src/main/resources/library.json
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/LibraryMember.java b/src/test/LibraryMember.java
new file mode 100644
index 0000000..3304e4c
--- /dev/null
+++ b/src/test/LibraryMember.java
@@ -0,0 +1,80 @@
+package com.zipcodewilmington.centrallibrary;
+import java.util.ArrayList;
+import java.util.List;
+
+public class LibraryMember extends Person{
+ private String memberId;
+ private double outstandingFees;
+ private String membershipDate;
+ private List borrowedItems;
+ private Address address;
+
+ public LibraryMember(String name, int age, String email, String phoneNumber, String memberId, Address address) {
+ super(name, age, email, phoneNumber);
+ setMemberId(memberId);
+ this.membershipDate = membershipDate;
+ this.borrowedItems = new ArrayList<>();
+ this.outstandingFees = 0.0;
+ this.address = address;
+ }
+ public String getMemberId() {
+ return memberId;
+ }
+ public String getMembershipDate() {
+ return membershipDate;
+}
+ public List getBorrowedItems() {
+ return borrowedItems;
+ }
+ public double getOutstandingFees() {
+ return outstandingFees;
+ }
+ public Address getAddress() {
+ return address;
+ }
+
+ public void setMemberId(String memberId) {
+ if (memberId == null || memberId.trim().isEmpty()) {
+ throw new IllegalArgumentException("Member ID cannot be null or empty.");
+ }
+ this.memberId = memberId;
+ }
+
+ public void setAddress(Address address) {
+ if (address == null) {
+ throw new IllegalArgumentException("Address cannot be null.");
+ }
+ this.address = address;
+ }
+
+ public void borrowItem(LibraryItem item) {
+ if (!item.isAvailable())
+ throw new IllegalStateException(item.getTitle() + " is not available.");
+ item.checkOut();
+ borrowedItems.add(item);
+ System.out.println(getName() + " borrowed: " + item.getTitle());
+ }
+ public void returnItem(LibraryItem item, int daysLate) {
+ item.checkIn();
+ borrowedItems.remove(item);
+ double fee = item.calculateLateFee(daysLate);
+ outstandingFees += fee;
+ System.out.println(getName() + " returned: " + item.getTitle() + " | Late Fee: $" + fee);
+ }
+ public void payFees(double amount) {
+ if (amount <= 0) {
+ throw new IllegalArgumentException("Payment amount must be positive.");
+ }
+ if (amount > outstandingFees) {
+ throw new IllegalArgumentException("Payment exceeds outstanding fees.");
+ }
+ outstandingFees -= amount;
+ System.out.println(getName() + " paid: $" + amount + " | Remaining Fees: $" + outstandingFees);
+
+ }
+@Override
+public String toString() {
+ return "LibraryMember{name='" + getName() + "', memberId='" + memberId +
+"', outstandingFees=" + outstandingFees + ", address=" + address + "}";
+}
+}
\ No newline at end of file
diff --git a/src/test/java/com/DVDTest.java b/src/test/java/com/DVDTest.java
new file mode 100644
index 0000000..7689a64
--- /dev/null
+++ b/src/test/java/com/DVDTest.java
@@ -0,0 +1,55 @@
+package com;
+
+public class DVDTest {
+
+}
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+
+// Base class (superclass) DVD
+public abstract class DVD extends LibraryItem implements Reservable {
+ private String Title;
+ private String Director;
+ private String Duration;
+ private String Rating;
+ private String Genre;
+ private boolean Borrowed;
+
+ public String getTitle() {
+ return Title;
+}
+
+ public String getDirector() {
+ return Director;
+ }
+
+ public String getGenre() {
+ return Genre;
+ }
+
+public String getRating() {
+ return Rating;
+}
+
+ public interface Reserveable {
+ void reserve(String user);
+ boolean isReserved();
+}
+
+
+ public String getType() {
+ return "DVD";
+}
+
+
+ public int getBorrowedDays() {
+ return 7;
+ }
+
+
+ public double getLateFeePerDay() {
+ return 1.00;
+ }
diff --git a/src/test/java/com/Main.java b/src/test/java/com/Main.java
new file mode 100644
index 0000000..d709fd1
--- /dev/null
+++ b/src/test/java/com/Main.java
@@ -0,0 +1,7 @@
+package com;
+
+public class Main {
+ public static void main(String[] args) {
+
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/Library.java b/src/test/java/com/zipcodewilmington/Library.java
new file mode 100644
index 0000000..a2e0ba1
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/Library.java
@@ -0,0 +1,76 @@
+package com.zipcodewilmington.centrallibrary;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class Library {
+ private String name;
+ private Address address;
+ private List items;
+ private List members;
+ private List librarians;
+
+
+ public Library(String name, Address address) {
+ this.name = name;
+ this.address = address;
+ this.items = new ArrayList<>();
+ this.members = new ArrayList<>();
+ this.librarians = new ArrayList<>();
+ }
+
+ public String getName() {
+ return name;
+ }
+ public Address getAddress() {
+ return address;
+ }
+ public List getItems() {
+ return items;
+ }
+ public List getMembers() {
+ return members;
+ }
+ public List getLibrarians() {
+ return librarians;
+ }
+
+ public void addItem(LibraryItem item) {
+ items.add(item);
+ }
+ public void removeItem(LibraryItem item) {
+ items.remove(item);
+ }
+ public void addMember(LibraryMember member) {
+ members.add(member);
+ }
+ public void addLibrarian(Librarian librarian) {
+ librarians.add(librarian);
+ }
+
+ public List search(String keyword) {
+ List results = new ArrayList<>();
+ for (LibraryItem item : items) {
+ if (item.matchesKeyword(keyword)) {
+ results.add(item);
+ }
+ }
+ return results;
+ }
+ public void displayAllItems() {
+ for (LibraryItem item : items) {
+ System.out.println(item.getItemType() + " | " + item.getTitle() + " | " + (item.isAvailable() ? "Available" : "Checked Out"));
+ }
+ }
+
+ public void generateLateFeeReport() {
+ for (LibraryMember member : members) {
+ System.out.println("Member: " + member.getName());
+ for (LibraryItem item : member.getBorrowedItems()) {
+ System.out.println(" - " + item.getTitle()
+ + " | Max Days: " + item.getMaxBorrowDays()
+ + " | Daily Fee: $" + item.calculateLateFee(1));
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/zipcodewilmington/centrallibrary/AddressTest.java b/src/test/java/com/zipcodewilmington/centrallibrary/AddressTest.java
new file mode 100644
index 0000000..1a48f82
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/centrallibrary/AddressTest.java
@@ -0,0 +1,25 @@
+package com.zipcodewilmington.centrallibrary;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class AddressTest {
+
+ @Test
+ public void testAddressConstructorAndGetters() {
+ // given
+ String street = "123 North St.";
+ String city = "Narnia";
+ String state = "Fairytaleland";
+ String zipcode = "12345";
+
+ // when
+ Address address = new Address (street, city, state,zipcode);
+
+ Assert.assertEquals(street, address.getStreet());
+ Assert.assertEquals(city, address.getCity());
+ Assert.assertEquals(state, address.getState());
+ Assert.assertEquals(zipcode, address.getZipcode());
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/centrallibrary/BookTest.java b/src/test/java/com/zipcodewilmington/centrallibrary/BookTest.java
new file mode 100644
index 0000000..2b9e127
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/centrallibrary/BookTest.java
@@ -0,0 +1,22 @@
+package com.zipcodewilmington.centrallibrary;
+
+
+
+public class BookTest {
+
+public static void main(String[] args) {
+
+ Book book = new Book("A100", "The Great Gatsby", "Aisle 3", "John Smith", "Horror", "2/2/22", "293849595934", 9);
+
+ System.out.println(book.getAuthor());
+ System.out.println(book.getGenre());
+ System.out.println(book.getPages());
+ System.out.println(book.isAvailable());
+ System.out.println(book.getLocation());
+ System.out.println(book.getId());
+ System.out.println(book.getTitle());
+
+}
+
+//something
+}
diff --git a/src/test/java/com/zipcodewilmington/centrallibrary/DVDTest.java b/src/test/java/com/zipcodewilmington/centrallibrary/DVDTest.java
new file mode 100644
index 0000000..180eea5
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/centrallibrary/DVDTest.java
@@ -0,0 +1,54 @@
+package com.zipcodewilmington.centrallibrary;
+
+public class DVDTest {
+}
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+
+// Base class (superclass) DVD
+public abstract class DVD extends LibraryItem implements Reservable {
+ private String Title;
+ private String Director;
+ private String Duration;
+ private String Rating;
+ private String Genre;
+ private boolean Borrowed;
+
+ public String getTitle() {
+ return Title;
+}
+
+ public String getDirector() {
+ return Director;
+ }
+
+ public String getGenre() {
+ return Genre;
+ }
+
+public String getRating() {
+ return Rating;
+}
+
+ public interface Reserveable {
+ void reserve(String user);
+ boolean isReserved();
+}
+
+
+ public String getType() {
+ return "DVD";
+}
+
+
+ public int getBorrowedDays() {
+ return 7;
+ }
+
+
+ public double getLateFeePerDay() {
+ return 1.00;
+ }
diff --git a/src/test/java/com/zipcodewilmington/centrallibrary/Librarian.java b/src/test/java/com/zipcodewilmington/centrallibrary/Librarian.java
new file mode 100644
index 0000000..f23d10a
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/centrallibrary/Librarian.java
@@ -0,0 +1,73 @@
+package com.zipcodewilmington.centrallibrary;
+
+import com.zipcodewilmington.centrallibrary.Library;
+import com.zipcodewilmington.centrallibrary.LibraryItem;
+import com.zipcodewilmington.centrallibrary.Person;
+
+public class Librarian extends Person {
+ private String employeeId;
+ private String department;
+ private double salary;
+
+ public Librarian(String name, int age, String email, String phoneNumber, String employeeId, String department, double salary) {
+ super(name, age, email, phoneNumber);
+ setEmployeeId(employeeId);
+ setDepartment(department);
+ setSalary(salary);
+ }
+
+ public String getEmployeeId() {
+ return employeeId;
+ }
+ public String getDepartment() {
+ return department;
+ }
+ public double getSalary() {
+ return salary;
+ }
+
+public void setEmployeeId(String employeeId) {
+ if (employeeId == null || employeeId.trim().isEmpty()) {
+ throw new IllegalArgumentException("Employee ID cannot be null or empty.");
+ }
+ this.employeeId = employeeId;
+ }
+
+ public void setDepartment(String department) {
+ if (department == null || department.trim().isEmpty()) {
+ throw new IllegalArgumentException("Department cannot be null or empty.");
+ }
+ this.department = department;
+ }
+
+ public void setSalary(double salary) {
+ if (salary < 0) {
+ throw new IllegalArgumentException("Salary cannot be negative.");
+ }
+ this.salary = salary;
+ }
+
+
+public void addItemToLibrary(Library library, LibraryItem item) {
+ library.addItem(item);
+ System.out.println(getName() + " added: " + item.getTitle());
+ }
+
+ public void removeItemFromLibrary(Library library, LibraryItem item) {
+ library.removeItem(item);
+ System.out.println(getName() + " removed: " + item.getTitle());
+ }
+@Override
+ public String toString() {
+ return "Librarian{" +
+ "employeeId='" + employeeId + '\'' +
+ ", department='" + department + '\'' +
+ ", salary=" + salary +
+ ", name='" + getName() + '\'' +
+ ", age=" + getAge() +
+ ", email='" + getEmail() + '\'' +
+ ", phoneNumber='" + getPhoneNumber() + '\'' +
+ '}';
+ }
+
+}
\ No newline at end of file
diff --git a/src/test/java/com/zipcodewilmington/centrallibrary/MainApplicationTest.java b/src/test/java/com/zipcodewilmington/centrallibrary/MainApplicationTest.java
index f706f32..daa47d7 100644
--- a/src/test/java/com/zipcodewilmington/centrallibrary/MainApplicationTest.java
+++ b/src/test/java/com/zipcodewilmington/centrallibrary/MainApplicationTest.java
@@ -1,7 +1,9 @@
-package com.zipcodewilmington.centralibrary;
+package com.zipcodewilmington.centrallibrary;
/**
* Created by n3pjk on 6/9/2025.
*/
public class MainApplicationTest {
+
+
}
diff --git a/src/test/java/com/zipcodewilmington/centrallibrary/PeriodicalTest.java b/src/test/java/com/zipcodewilmington/centrallibrary/PeriodicalTest.java
new file mode 100644
index 0000000..26ac4b7
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/centrallibrary/PeriodicalTest.java
@@ -0,0 +1,48 @@
+package com.zipcodewilmington.centrallibrary;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class PeriodicalTest {
+
+ @Test
+ public void testPeriodicalConstructorAndGetters() {
+ // given
+ String id = "P001";
+ String title = "Cool Magazine";
+ String location = "Wilmington";
+ String publisher = "Pixar";
+ String issn = "394851939422";
+ String volume = "4";
+ String issueNumber = "2";
+ String publicationDate = "2/2/22";
+
+ // when
+ Periodical periodical = new Periodical (id, title, location, publisher, issn, volume, issueNumber, publicationDate);
+
+ Assert.assertEquals(publisher, periodical.getPublisher());
+ Assert.assertEquals(issn, periodical.getIssn());
+ Assert.assertEquals(volume, periodical.getVolume());
+ Assert.assertEquals(issueNumber, periodical.getIssueNumber());
+ Assert.assertEquals(publicationDate, periodical.getPublicationDate());
+ }
+
+ @Test
+ public void testPeriodicalLateFee() {
+ // given
+ Periodical periodical = new Periodical("P001", "Byte", "P1", "McGraw-Hill", "0360-5280", "6", "8", "08/01/1981");
+
+ // then
+ Assert.assertEquals(2.50, periodical.calculateLateFee(10), 0.001);
+ }
+
+
+ @Test
+ public void testPeriodicalMaxBorrowDays() {
+ // given
+ Periodical periodical = new Periodical("P001", "Byte", "P1", "McGraw-Hill", "0360-5280", "6", "8", "08/01/1981");
+
+ // then
+ Assert.assertEquals(7, periodical.getMaxBorrowDays());
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/centrallibrary/PersonTest.java b/src/test/java/com/zipcodewilmington/centrallibrary/PersonTest.java
new file mode 100644
index 0000000..24df9b0
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/centrallibrary/PersonTest.java
@@ -0,0 +1,34 @@
+package com.zipcodewilmington.centrallibrary;
+
+
+import org.junit.Assert;
+import org.junit.Test;
+
+
+public class PersonTest {
+
+ @Test
+ public void testPersonConstructorAndGetters() {
+ // given
+ String name = "Joe";
+ int age = 30;
+ String email = "joeschmo@gmail.com";
+ String phoneNumber = "302-555-1111";
+
+ // when
+ Person person = new Person(name, age, email, phoneNumber);
+
+ Assert.assertEquals(name, person.getName());
+ Assert.assertEquals(age, person.getAge());
+ Assert.assertEquals(email, person.getEmail());
+ Assert.assertEquals(phoneNumber, person.getPhoneNumber());
+ }
+ @Test
+ public void testSetAge_negativeAge_throwsException() {
+ Person person = new Person("Joe", 30, "123-456-7890", "joeschmo@gmail.com");
+
+ Assert.assertThrows(IllegalArgumentException.class, () -> {
+ person.setAge(-1);
+ });
+ }
+}