diff --git a/app/src/main/kotlin/org/example/App.kt b/app/src/main/kotlin/org/example/App.kt deleted file mode 100644 index a1d413b..0000000 --- a/app/src/main/kotlin/org/example/App.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * This source file was generated by the Gradle 'init' task - */ -package org.example - -class App { - val greeting: String - get() { - return "Hello World!" - } -} - -fun main() { - println(App().greeting) -} diff --git a/app/src/main/kotlin/org/example/Book.kt b/app/src/main/kotlin/org/example/Book.kt new file mode 100644 index 0000000..ad9dda4 --- /dev/null +++ b/app/src/main/kotlin/org/example/Book.kt @@ -0,0 +1,14 @@ +package org.example + +class Book( + id: String, + title: String, + val author: String, + val isbn: String, + val pages: Int +) : LibraryItem(id, title) { + override fun getItemType(): String = "Book" + override fun calculateLateFee(daysLate: Int): Double { + return daysLate * 0.5 + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/example/DVD.kt b/app/src/main/kotlin/org/example/DVD.kt new file mode 100644 index 0000000..b9a04df --- /dev/null +++ b/app/src/main/kotlin/org/example/DVD.kt @@ -0,0 +1,14 @@ +package org.example + +class DVD( + id: String, + title: String, + val director: String, + val duration: Int, + val genre: String +) : LibraryItem(id, title) { + override fun getItemType(): String = "DVD" + override fun calculateLateFee(daysLate: Int): Double { + return daysLate * 1.0 + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/example/LibraryItem.kt b/app/src/main/kotlin/org/example/LibraryItem.kt new file mode 100644 index 0000000..a0f790e --- /dev/null +++ b/app/src/main/kotlin/org/example/LibraryItem.kt @@ -0,0 +1,16 @@ +package org.example + +abstract class LibraryItem( + val id: String, + val title: String, + var isAvailable: Boolean = true +) { + abstract fun getItemType(): String + abstract fun calculateLateFee(daysLate: Int): Double + + open fun displayInfo(): String { + return "ID: $id, Title: $title, Available: $isAvailable" + } + + +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/example/Magazine.kt b/app/src/main/kotlin/org/example/Magazine.kt new file mode 100644 index 0000000..a273bbb --- /dev/null +++ b/app/src/main/kotlin/org/example/Magazine.kt @@ -0,0 +1,13 @@ +package org.example + +class Magazine( + id: String, + title: String, + val issueNumber: Int, + val publisher: String +) : LibraryItem(id, title) { + override fun getItemType(): String = "Magazine" + override fun calculateLateFee(daysLate: Int): Double { + return daysLate * 0.25 + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/org/example/Main.kt b/app/src/main/kotlin/org/example/Main.kt new file mode 100644 index 0000000..74009e6 --- /dev/null +++ b/app/src/main/kotlin/org/example/Main.kt @@ -0,0 +1,24 @@ +/* + * This source file was generated by the Gradle 'init' task + */ +package org.example + +fun main() { + val member1= Member("M1", "S", "s") + member1.setName("Smith") + member1.setEmail("smith.com") + member1.setEmail("smith@gmail.com") + + val book1 = Book("B1", "Harry Potter", "JK", "1111-222", 122) + member1.borrowItem(book1) + + val member2 = Member("M2", "John", "john@gmail.com") + member2.borrowItem(book1) + + member2.returnItem(book1) + member1.returnItem(book1) + member2.borrowItem(book1) + member1.totalLateFees(15) + member2.totalLateFees(15) + +} diff --git a/app/src/main/kotlin/org/example/Member.kt b/app/src/main/kotlin/org/example/Member.kt new file mode 100644 index 0000000..646982a --- /dev/null +++ b/app/src/main/kotlin/org/example/Member.kt @@ -0,0 +1,64 @@ +package org.example + +class Member( + private val memberId: String, + private var name: String, + private var email: String +) { + private val borrowedItems = mutableListOf() + + fun getMemberId(): String = memberId + fun getName(): String = name + fun getEmail(): String = email + + fun setName(memberName: String) { + name = memberName + println("Member Name set to $name") + } + fun setEmail(memberEmail: String) { + if( + memberEmail.contains('@') + && + memberEmail.contains('.') + ) { + email = memberEmail + println("Member Email set to $email") + } else { + println("invalid email") + } + } + + fun borrowItem(item: LibraryItem) { + if(item.isAvailable) { + borrowedItems.add(item) + item.isAvailable = false + println("Member $memberId $name borrowed item ${item.id} ${item.title}") + } + else { + println("item unavailable") + } + } + + fun returnItem(item: LibraryItem) { + if(borrowedItems.contains(item)) { + borrowedItems.remove(item) + item.isAvailable = true + println("Member $memberId $name returned item ${item.id} ${item.title}") + } else { + println("Member $memberId $name did not borrow this item") + } + } + + fun totalLateFees(daysLate: Int) { + if(borrowedItems.isEmpty()) { + println("no items borrowed") + } + else { + var total = 0.0 + borrowedItems.forEach { item -> + total += item.calculateLateFee(daysLate) + } + println("Total Late Fees = $$total") + } + } +} \ No newline at end of file