diff --git a/YasraZhafirah_ITB/Book.java b/YasraZhafirah_ITB/Book.java new file mode 100644 index 0000000..29f28c4 --- /dev/null +++ b/YasraZhafirah_ITB/Book.java @@ -0,0 +1,28 @@ +public abstract class Book { + public String title; + public String author; + public int stock; + + Book(String title, String author, int stock) { + this.title = title; + this.author = author; + this.stock = stock; + } + + public String getTitle() { + return title; + } + + public String getAuthor() { + return author; + } + + public int stock() { + return stock; + } + + public void status() { + } + + public void keterangan() {} +} \ No newline at end of file diff --git a/YasraZhafirah_ITB/BookList.java b/YasraZhafirah_ITB/BookList.java new file mode 100644 index 0000000..5aaaa44 --- /dev/null +++ b/YasraZhafirah_ITB/BookList.java @@ -0,0 +1,51 @@ +import java.util.ArrayList; +import java.util.List; + +public class BookList { + List books = new ArrayList<>(); + public BookList(){ + books.add(new Fiction("Harrypota", "Anton", 0)); + books.add(new Fiction("Persijeksen", "Budiman", 3)); + books.add(new nonFiction("Kalkulus", "Caca", 1)); + books.add(new nonFiction("Fisika", "Suparman", 0)); + } + + public List getList() { + return books; + } + + public void pinjam(String title) { + boolean match = false; + for(Book book : books) { + if (book.getTitle().equals(title) && book.stock() > 0) { + book.keterangan(); + System.out.println("Anda meminjam buku " + title + "."); + book.stock -= 1; + match = true; + break; + } else if(book.getTitle().equals(title) && book.stock() == 0){ + System.out.println("Buku " + title + " sedang kosong."); + match = true; + break; + } + } + if(!match) { + System.out.println("Buku yang anda cari tidak tersedia."); + } + } + + public void kembali(String title) { + boolean match = false; + for(Book book : books) { + if (book.getTitle().equals(title)) { + System.out.println("Buku " + title + " telah dikembalikan."); + match = true; + book.stock += 1; + break; + } + } + if(!match) { + System.out.println("Buku yang anda cari invalid."); + } + } +} diff --git a/YasraZhafirah_ITB/Donation.java b/YasraZhafirah_ITB/Donation.java new file mode 100644 index 0000000..63afc35 --- /dev/null +++ b/YasraZhafirah_ITB/Donation.java @@ -0,0 +1,3 @@ +public interface Donation { + public Book donateBook(String title, String author, int genre, int stock); +} diff --git a/YasraZhafirah_ITB/Fiction.java b/YasraZhafirah_ITB/Fiction.java new file mode 100644 index 0000000..fdd0886 --- /dev/null +++ b/YasraZhafirah_ITB/Fiction.java @@ -0,0 +1,15 @@ +public class Fiction extends Book { + protected Fiction (String title, String author, int stock) { + super(title, author, stock); + } + + @Override + public void status() { + System.out.println("Terima kasih! Anda telah mendonasikan buku fiksi."); + } + + @Override + public void keterangan() { + System.out.println("Genre buku: Fiksi"); + } +} diff --git a/YasraZhafirah_ITB/Main.java b/YasraZhafirah_ITB/Main.java new file mode 100644 index 0000000..ae5cf32 --- /dev/null +++ b/YasraZhafirah_ITB/Main.java @@ -0,0 +1,49 @@ +import java.util.List; +import java.util.Scanner; + +public class Main extends Menu { + public static void main(String[] args) { + System.out.println("Selamat datang di perpustakaan abal abal!"); + Scanner input = new Scanner(System.in); + + BookList buku = new BookList(); + + int choice = Menu.getMenu(); + while (choice != 5) { + if (choice == 1) { + System.out.println("Masukkan judul buku: "); + String title = input.nextLine(); + buku.pinjam(title); + choice = Menu.getMenu(); + } else if (choice == 2) { + System.out.println("Masukkan judul buku: "); + String title = input.nextLine(); + buku.kembali(title); + choice = Menu.getMenu(); + } else if (choice == 3) { + System.out.println("Masukkan judul buku: "); + String title = input.nextLine(); + System.out.println("Masukkan penulis buku: "); + String author = input.nextLine(); + System.out.println("Pilih genre buku: "); + System.out.println("1. Fiksi"); + System.out.println("2. Non-fiksi"); + int genre = input.nextInt(); input.nextLine(); + System.out.println("Masukkan jumlah buku: "); + int stock = input.nextInt(); input.nextLine(); + + donationGenre donatedBook = new donationGenre(); + Book newBook = donatedBook.donateBook(title, author, genre, stock); + newBook.status(); + choice = Menu.getMenu(); + } else if (choice == 4) { + List books = buku.getList(); + System.out.println("JUDUL | PENULIS | STOK "); + for (Book book : books) { + System.out.println(book.getTitle() + " | " + book.getAuthor() + " | " + book.stock()); + } + choice = Menu.getMenu(); + } + } + } +} diff --git a/YasraZhafirah_ITB/Menu.java b/YasraZhafirah_ITB/Menu.java new file mode 100644 index 0000000..6b9e986 --- /dev/null +++ b/YasraZhafirah_ITB/Menu.java @@ -0,0 +1,16 @@ +import java.util.Scanner; + +public class Menu { + public static int getMenu() { + Scanner input = new Scanner(System.in); + System.out.println("\nApa yang ingin anda lakukan?"); + System.out.println("1. Meminjam buku"); + System.out.println("2. Mengembalikan buku"); + System.out.println("3. Donasi buku"); + System.out.println("4. Lihat daftar buku"); + System.out.println("5. Keluar"); + int choice = input.nextInt(); + input.nextLine(); + return choice; + } +} diff --git a/YasraZhafirah_ITB/README.md b/YasraZhafirah_ITB/README.md new file mode 100644 index 0000000..f13b2cf --- /dev/null +++ b/YasraZhafirah_ITB/README.md @@ -0,0 +1,31 @@ +# LIBRARY MANAGEMENT SYSTEM + +## Deskripsi Tugas +- Design Pattern: Program ini menggunakan factory method sebagai design pattern, yang terletak pada class donationGenre yang menambahkan buku baru (yang didonasikan user). Saya memilih design pattern ini untuk menyederhanakan "pembentukan" buku yang memiliki property yang sama dengan buku-buku yang sudah ada. + +- SOLID Principle: Singleton Responsibility Principle, di mana setiap class memiliki satu tanggung jawab. + +- Inheritance: Salah satu penggunaan Inheritance pada program ini terdapat pada abstract class Book (parent class) yang datanya diturunkan ke class Fiction (child class). + +- Polymorphism: Salah satu contoh polymorphism pada program ini yaitu method keterangan() pada class Book yang dipakai oleh class Fiction dan nonFiction sehingga outputnya tergantung objek yang digunakan. + +- Interface: Interface yang terdapat pada program ini adalah interface Donation yang memiliki method donateBook(). + +- Abstract Class: Abstract class pada program ini adalah abstract class Book. + +## Bahasa Pemrograman +Bahasa pemrograman yang digunakan adalah Java. + +## Penjelasan Program +- Program ini adalah prototype sistem perpustakaan dengan dua jenis/genre buku yaitu fiksi dan non-fiksi. +- Program ini masih jauh dari sempurna dan banyak yang bisa dikembangkan. +- Alur program: + - User akan ditawarkan menu di mana user memilih apa yang akan dilakukan. Pilihan tersebut berupa meminjam buku, mengembalikan buku, mendonasikan buku, melihat daftar buku, dan keluar. + - Jika user memilih meminjam buku, user akan diminta input judul buku yang ingin dipinjam. Program akan mencari buku berdasarkan judul tersebut di mana ada tiga kemungkinan: 1) Buku ditemukan dan program menampilkan output bahwa user telah meminjam buku tersebut, 2) Buku tidak ditemukan namun stok sedang kosong, 3) Buku tidak ditemukan. + - Jika user memilih mengembalikan buku, user akan diminta input judul buku yang ingin dikembalikan. Program akan mencari judul buku yang sama untuk mengecek apakah buku tersebut terdaftar di perpustakaan atau tidak. Ada dua kemungkinan: 1) Buku terdaftar maka buku berhasil dikembalikan dan 2) Buku tidak terdaftar maka judul buku tersebut invalid. + - Jika user memilih mendonasikan buku, user akan diminta input judul, penulis, genre, dan jumlah buku yang ingin disumbangkan. Akan ada output yang menyatakan user berhasil menyumbang buku. + - Jika user memilih melihat daftar buku, program akan menampilkan daftar buku yang terdiri dari judul, penulis, dan jumlah buku yang tersedia. + - Di akhir setiap kegiatan yang dilakukan, program akan menampilkan kembali menu sampai user memutuskan untuk keluar. + +## Keterangan Tambahan +Program ini merupakan interactive program (menggunakan input user untuk output yang diinginkan). diff --git a/YasraZhafirah_ITB/donationGenre.java b/YasraZhafirah_ITB/donationGenre.java new file mode 100644 index 0000000..2ace792 --- /dev/null +++ b/YasraZhafirah_ITB/donationGenre.java @@ -0,0 +1,14 @@ +import java.util.ArrayList; +import java.util.List; + +public class donationGenre implements Donation { + public donationGenre() {} + + public Book donateBook(String title, String author, int genre, int stock) { + if (genre == 1) { + return new Fiction(title, author, stock); + } else { + return new nonFiction(title, author, stock); + } + } +} diff --git a/YasraZhafirah_ITB/nonFiction.java b/YasraZhafirah_ITB/nonFiction.java new file mode 100644 index 0000000..01792dc --- /dev/null +++ b/YasraZhafirah_ITB/nonFiction.java @@ -0,0 +1,15 @@ +public class nonFiction extends Book { + protected nonFiction (String title, String author, int stock) { + super(title, author, stock); + } + + @Override + public void status() { + System.out.println("Terima kasih! Anda telah mendonasikan buku non-fiksi."); + } + + @Override + public void keterangan() { + System.out.println("Genre buku: Non-fiksi"); + } +}