Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hands on OOP submission by Yasra Zhafirah #69

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions YasraZhafirah_ITB/Book.java
Original file line number Diff line number Diff line change
@@ -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() {}
}
51 changes: 51 additions & 0 deletions YasraZhafirah_ITB/BookList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import java.util.ArrayList;
import java.util.List;

public class BookList {
List<Book> 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<Book> 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.");
}
}
}
3 changes: 3 additions & 0 deletions YasraZhafirah_ITB/Donation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
public interface Donation {
public Book donateBook(String title, String author, int genre, int stock);
}
15 changes: 15 additions & 0 deletions YasraZhafirah_ITB/Fiction.java
Original file line number Diff line number Diff line change
@@ -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");
}
}
49 changes: 49 additions & 0 deletions YasraZhafirah_ITB/Main.java
Original file line number Diff line number Diff line change
@@ -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<Book> 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();
}
}
}
}
16 changes: 16 additions & 0 deletions YasraZhafirah_ITB/Menu.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
31 changes: 31 additions & 0 deletions YasraZhafirah_ITB/README.md
Original file line number Diff line number Diff line change
@@ -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).
14 changes: 14 additions & 0 deletions YasraZhafirah_ITB/donationGenre.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
15 changes: 15 additions & 0 deletions YasraZhafirah_ITB/nonFiction.java
Original file line number Diff line number Diff line change
@@ -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");
}
}