Pages

Rabu, 16 November 2011

SiPerpus

Kelas Buku
package project;


import java.util.Date;

public class Buku extends Koleksi {

    private String isbn;
    private int jmlHal;
    public static int WAKTU_PINJAM = 42; // static sebagai tanda bahwa waktu_pinjam adalah konstanta
    public static int BIAYA_DENDA = 500;

    /**
     * merupakan method yang digunakan untuk menghitung lama pinjam dengan memanggil rumus yang ada di kelas koleksi
     * @return
     */
    @Override
    public int lamaPinjam() {
        return super.lamaPinjam();
    }

    /**
     * merupakan method yang digunakan untuk menghitung lama hari terlambat dengan rumus jika ada terlambat maka lama pinjam dikurangi dengan waktu pinjam
     * @param tanggalKembali
     * @return
     */
    public int lamaHariTerlambat(Date tanggalKembali) {
        Date tanggal_pinjam = super.getTanggalPinjam();
        if (isTerlambat(tanggal_pinjam, tanggalKembali)) {
            return super.lamaPinjam(tanggalPinjam, tanggalKembali) - WAKTU_PINJAM;
        }
        return 0;
    }

    /**
     * merupakan method hitung denda yang digunakan untuk menghitung denda dari setiap buku yang terlambat dengan cara mengalikan lama hari terlambat dengan biaya denda perhari
     * @param tanggalKembali
     * @return
     */
    @Override
    public int hitungDenda(Date tanggalKembali) {
        Date tanggalPinjaman = super.getTanggalPinjam();
        if (isTerlambat(tanggalPinjaman, tanggalKembali)) {
            return this.lamaHariTerlambat(tanggalKembali) * BIAYA_DENDA;
        }
        return 0;
    }

    /**
     * merupakan method is terlambat dengan rumus jika lama pinjam lebih besar dari waktu pinjam maka ada terlambat
     * @param tanggalPinjam
     * @param tanggalKembali
     * @return
     */
    @Override
    public boolean isTerlambat(Date tanggalPinjam, Date tanggalKembali) {
        if (super.lamaPinjam(tanggalPinjam, tanggalKembali) > WAKTU_PINJAM) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * merupakan method is terlambat, jika ada terlambat maka return true
     * @return
     */
    @Override
    public boolean isTerlambat() {
        if (isTerlambat(super.getTanggalPinjam(), super.getTanggalKembali())) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * merupakan method yang digunakan untuk memanggil Isbn
     * @return the isbn
     */
    public String getIsbn() {
        return isbn;
    }

    /**
     * merupakan method yang digunakan untuk mengeset Isbn
     * @param isbn the isbn to set
     */
    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    /**
     * merupakan method yang digunakan untuk memanggil jumlah halaman
     * @return the jmlHal
     */
    public int getJmlHal() {
        return jmlHal;
    }

    /**
     * merupakan method yang digunakan untuk mengeset jumlah halaman
     * @param jmlHal the jmlHal to set
     */
    public void setJmlHal(int jmlHal) {
        this.jmlHal = jmlHal;
    }
}



Kelas CDDVD

package project;


import java.util.Date;


public class CDDVD extends Koleksi {
    private String isbn;
    private String format;
    public static int WAKTU_PINJAM = 7; // static sebagai tanda bahwa waktu_pinjam adalah konstanta
    public static int BIAYA_DENDA = 2000;

    @Override
    public int lamaPinjam() {
        return super.lamaPinjam();
    }

    public int lamaHariTerlambat(Date tanggalKembali) {
        Date tanggal_pinjam = super.getTanggalPinjam();
        if (isTerlambat(tanggal_pinjam, tanggalKembali)) {
            return super.lamaPinjam() - WAKTU_PINJAM;
        }
        return 0;
    }

    @Override
    public int hitungDenda(Date tanggalKembali) {
        Date tanggalPinjaman = super.getTanggalPinjam();
        if (isTerlambat(tanggalPinjaman, tanggalKembali)) {
            return this.lamaHariTerlambat(tanggalKembali) * BIAYA_DENDA;
        }
        return 0;
    }

    @Override
    public boolean isTerlambat(Date tanggalPinjam, Date tanggalKembali) {
        if (super.lamaPinjam(tanggalPinjam, tanggalKembali) > WAKTU_PINJAM) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public boolean isTerlambat() {
//            if(super.lamaPinjam(super.getTanggalPinjam(), super.getTanggalKembali()) > WAKTU_PINJAM)
        if (isTerlambat(super.getTanggalPinjam(), super.getTanggalKembali())) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @return the isbn
     */
    public String getIsbn() {
        return isbn;
    }

    /**
     * @param isbn the isbn to set
     */
    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    /**
     * @return the format
     */
    public String getFormat() {
        return format;
    }

    /**
     * @param format the format to set
     */
    public void setFormat(String format) {
        this.format = format;
    }

  


}


Kelas Dosen
package project;


public class Dosen extends Pengguna {
 private String nip;



    public String getNip() {
        return nip;
    }

   
    public void setNip(String nip) {
        this.nip = nip;
    }

}


Kelas Koleksi
package project;

import java.util.Date;
import java.util.StringTokenizer;

public class Koleksi {

    private String id;
    private String judul;
    private String penerbit;
    private int thTerbit;
    public Date tanggalPinjam;
    public Date tanggalKembali;

//    public Koleksi(String judul) {
//        this.judul = judul;
//    }
    /**
     * method lamaPinjam, merupakan method yang digunakan untuk menghitung lama pinjam sebuah koleksi dalam hari
     * @return
     */
    public int lamaPinjam() {
        return (int) (getTanggalKembali().getTime() - getTanggalPinjam().getTime()) / (1000 * 60 * 60 * 24); //casting tanggal
    }

    /**
     *  method lamaPinjam, merupakan method yang digunakan untuk menghitung lama pinjam sebuah koleksi dalam hari
     * @param tanggalPinjam
     * @param tanggalKembali
     * @return
     */
    public int lamaPinjam(Date tanggalPinjam, Date tanggalKembali) {
        return (int) ((tanggalKembali.getTime() - tanggalPinjam.getTime()) / (1000 * 60 * 60 * 24));
    }

    /**
     * merupakan method yang digunakan untuk menghitung denda dari koleksi yang dipinjam
     * @param tanggalKembali
     * @return
     */
    public int hitungDenda(Date tanggalKembali) {
        return 0;
    }

    /**
     * merthod yang digunakan untuk menghitung jumlah hari terlambat pengembalian sebuah koleksi
     * @return
     */
    public int jumlahHariTerlambat() {
        return 0;
    }

    /**
     * merupakan method terlambat. Jika ada terlambat maka return false
     * @return
     */
    public boolean isTerlambat() {
        return false;
    }

    /**
     * merupakan method terlambat. Jika ada terlambat maka return false
     * @param tanggalPinjam
     * @param tanggalKembali
     * @return
     */
    public boolean isTerlambat(Date tanggalPinjam, Date tanggalKembali) {
        return false;
    }

    /**
     * merupakan method yang digunakn untuk memanggil id
     * @return the id
     */
    public String getId() {
        return id;
    }

    /**
     * merupakan method yang digunakan untuk mengeset id
     * @param id the id to set
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * merupakan method yang digunakan untuk memanggil judul
     * @return the judul
     */
    public String getJudul() {
        return judul;
    }

    /**
     * merupakan method yang digunakan untuk mengeset judul
     * @param judul the judul to set
     */
    public void setJudul(String judul) {
        this.judul = judul;
    }

    /**
     * merupakan method yang digunakan untuk memanggil penerbit
     * @return the penerbit
     */
    public String getPenerbit() {
        return penerbit;
    }

    /**
     * merupakan method yang digunakan untuk mengeset penerbit
     * @param penerbit the penerbit to set
     */
    public void setPenerbit(String penerbit) {
        this.penerbit = penerbit;
    }

    /**
     * merupakan method yang digunakan untuk memanggil tahun terbit
     * @return the thTerbit
     */
    public int getThTerbit() {
        return thTerbit;
    }

    /**
     * merupakan method yang digunakan untuk mengeset tahun terbit
     * @param thTerbit the thTerbit to set
     */
    public void setThTerbit(int thTerbit) throws Exception {
        if (thTerbit < 1900) {
            throw new Exception("tahun terbit kurang dari 1900");
        }
        if (thTerbit < 0) {
            throw new Exception("tahun terbit negative");
        }
        this.thTerbit = thTerbit;

    }

    /**
     * merupakan method yang digunakan untuk memanggil tanggal pinjam
     * @return the tanggalPinjam
     */
    public Date getTanggalPinjam() {
        return tanggalPinjam;
    }

    /**
     * merupakan method yang digunakan untuk mengeset tanggal pinjam
     * @param tanggalPinjam the tanggalPinjam to set
     */
    public void setTanggalPinjam(Date tanggalPinjam) {
        this.tanggalPinjam = tanggalPinjam;
    }

    /**
     * merupakan method yang digunakan untuk memanggil tanggal kembali
     * @return the tanggalKembali
     */
    public Date getTanggalKembali() {
        return tanggalKembali;
    }

    /**
     * merupakan method yang digunakan untuk mengeset tanggal kembali
     * @param tanggalKembali the tanggalKembali to set
     */
    public void setTanggalKembali(Date tanggalKembali) throws Exception {
        if (tanggalPinjam == null) {
            //tanggal pinjam kosong
            throw new Exception("tanggal pinjam kosong");
        } else {
            //tanggal pinjam tidak kosong
            //cek tanggal kembali sebelum tanggal pinjam atau tidak
            if (tanggalKembali.before(tanggalPinjam)) {
                throw new Exception("tanggal kembali lebih dulu dari tanggal pinjam");
            } else {
                //tanggal kembali setelah tanggal pinjam
                this.tanggalKembali = tanggalKembali;
            }
        }
    }

    public void setTanggalPinjam(String tanggal) {
        StringTokenizer test1 = new StringTokenizer(tanggal, "-");
        Date test2 = new Date();
        while (test1.hasMoreTokens()) {
//            System.out.println(test1.nextToken());
            test2.setDate(Integer.parseInt(test1.nextToken()));
            test2.setMonth(Integer.parseInt(test1.nextToken()) - 1);
            test2.setYear(Integer.parseInt(test1.nextToken()) - 1900);

        }
        this.setTanggalPinjam(test2);
    }
}


Kelas Mahasiswa
package project;


public class Mahasiswa extends Pengguna {
    private String nim;

    /**
     * @return the nim
     */
    public String getNim() {
        return nim;
    }

    /**
     * @param nim the nim to set
     */
    public void setNim(String nim) {
        this.nim = nim;
    }

   
   

}


Kelas Majalah
package project;


import java.util.Date;

public class Majalah extends Koleksi {

    private String issn;
    private String series;
    private int volume;
    public static int WAKTU_PINJAM = 3; // static sebagai tanda bahwa waktu_pinjam adalah konstanta
    public static int BIAYA_DENDA = 2000;

    @Override
    public int lamaPinjam() {
        return super.lamaPinjam();
    }

    public int lamaHariTerlambat(Date tanggalKembali) {
        Date tanggal_pinjam = super.getTanggalPinjam();
        if (isTerlambat(tanggal_pinjam, tanggalKembali)) {
            return super.lamaPinjam() - WAKTU_PINJAM;
        }
        return 0;
    }

    @Override
    public int hitungDenda(Date tanggalKembali) {
        Date tanggalPinjaman = super.getTanggalPinjam();
        if (isTerlambat(tanggalPinjaman, tanggalKembali)) {
            return this.lamaHariTerlambat(tanggalKembali) * BIAYA_DENDA;
        }
        return 0;
    }

    @Override
    public boolean isTerlambat(Date tanggalPinjam, Date tanggalKembali) {
        if (super.lamaPinjam(tanggalPinjam, tanggalKembali) > WAKTU_PINJAM) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public boolean isTerlambat() {
        if (isTerlambat(super.getTanggalPinjam(), super.getTanggalKembali())) {
            return true;
        } else {
            return false;
        }
    }

    /**
     *
     * @return
     */
    public String getIssn() {
        return issn;
    }

    /**
     *
     * @param issn
     */
    public void setIssn(String issn) {
        this.issn = issn;
    }

    /**
     *
     * @return
     */
    public String getSeries() {
        return series;
    }

    /**
     *
     * @param series
     */
    public void setSeries(String series) {
        this.series = series;
    }

    /**
     *
     * @return
     */
    public int getVolume() {
        return volume;
    }

    /**
     *
     * @param volume
     */
    public void setVolume(int volume) {
        this.volume = volume;
    }
}

Kelas Masyarakat
package project;



public class Masyarakat extends Pengguna {
    private String noKtp;

  
    public String getNoKtp() {
        return noKtp;
    }

    public void setNoKtp(String noKtp) {
        this.noKtp = noKtp;
    }


}


Kelas Interface Peminjam
package project;


import java.util.Date;


interface Peminjam  {

public int hitungDenda (Date tanggalPinjam) ;
public void tambahDaftarPinjaman(Koleksi koleksi, Date tanggalPinjam);

}


Kelas Pengguna
package project;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Pengguna implements Peminjam {

    private String nama;
    private String alamat;
    public static int MaxKoleksiPinjaman = 10;
    private ArrayList<Koleksi> daftarPinjaman = new ArrayList<Koleksi>();

    /**
     * method yang digunakan untuk memanggil nama
     * @return the nama
     */
    public String getNama() {
        return nama;
    }

    /**
     * method yang digunakan untuk mengeset nama
     * @param nama
     */
    public void setNama(String nama) {
        this.nama = nama;
    }

    /**
     * method yang digunakan untuk memanggil Alamat
     * @return alamat
     */
    public String getAlamat() {
        return alamat;
    }

    /**
     * method yang digunkan untuk mengeset alamat
     * @param alamat
     */
    public void setAlamat(String alamat) {
        this.alamat = alamat;
    }

    /**
     * fungsi untuk mengetahui ada tidaknya pinjaman yang terlambat
     * @param tanggalPinjam
     * @param tanggalKembali
     * @return
     */
    public boolean adaDaftarPinjamanTerlambat(Date tanggalKembali) {
        // dari i sama dengan 0 sampai dengan i kurang dari lebar daftarPinjaman
        for (int i = 0; i < daftarPinjaman.size(); i++) {
            // menampilkan tanggal pinjam
            Date tanggalPinjam = daftarPinjaman.get(i).getTanggalPinjam();
            // jika ada terlambat maka return true, jika tidak return false
            if (daftarPinjaman.get(i).isTerlambat(tanggalPinjam, tanggalKembali)) {
                return true;
            }
        }
        return false;
    }

    /**
     * merupakan method tambahDaftarPinjaman yang berisi 3 syarat yang harus terpenuhi saat meminjam koleksi
     * @param kolPinjam
     * @param tanggalPinjam
     */
    @Override
    public void tambahDaftarPinjaman(Koleksi kolPinjam, Date tanggalPinjam) {
        Koleksi tempPinjam = kolPinjam;
        if (kolPinjam.getJudul() == null) {
            try {
                throw new Exception("ndak ada judul tuu");
            } catch (Exception ex) {
                Logger.getLogger(Pengguna.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        if (daftarPinjaman.isEmpty()) {
            //daftar pinjaman kosong
            daftarPinjaman.add(tempPinjam);
        } else {
            if (daftarPinjaman.size() < MaxKoleksiPinjaman) {
                //daftar pinjaman isi
                //cek terlambat
                if (!adaDaftarPinjamanTerlambat(tanggalPinjam)) {
                    //tidak ada pinjaman terlambat
//                    kolPinjam.setTanggalPinjam(tanggalPinjam);
                    daftarPinjaman.add(tempPinjam);
                } else {
                    //ada yang terlambat
                    System.out.println("Ada pinjaman terlambat");
                }
            } else {
                // jumlah pinjaman melebihi batas
                System.out.println("Jumlah pinjaman sudah lebih dari : " + MaxKoleksiPinjaman);
            }
        }
    }

    /**
     * merupakan method adaKoleksi yang digunakan untuk mengeluarkan daftarPinjaman
     * @param kol
     * @return
     */
    public boolean adaKoleksi(Koleksi kol) {
        return daftarPinjaman.contains(kol);
    }

    /**
     * methos hitung denda yang digunakan untuk menjumlahkan semua total denda dari semua koleksi yang pernah dipinjam
     * @param tanggalPinjam
     * @return
     */
    @Override
    public int hitungDenda(Date tanggalPinjam) {
        int result = 0;
        if (adaDaftarPinjamanTerlambat(tanggalPinjam)) {
            for (int i = 0; i < daftarPinjaman.size(); i++) {
                result = result + daftarPinjaman.get(i).hitungDenda(tanggalPinjam);
            }
            return result;
        } else {
            return 0;
        }
    }

    /**
     * merupakan method tampilPinjaman yang digunakan utuk menampilkan semua judul koleksi yang dipinjam
     * @return
     */
    public String tampilPinjaman() {
        String result = "";
        if (daftarPinjaman.isEmpty()) {
            result = "anda tidak pinjam apa-apa";
        } else {
            for (int i = 0; i < daftarPinjaman.size(); i++) {
                result = result + daftarPinjaman.get(i).getJudul() + "/n tanggal pinjam " + daftarPinjaman.get(i).getTanggalPinjam() + "\n";
            }
        }
        return result;
    }

    /**
     * Fungsi untuk mengembalikan pinjaman koleksi
     * @param kol adalah koleksi yang dikembalikan
     */
    public void kembalikanPinjaman(Koleksi kol) throws Exception {
        Date now = Calendar.getInstance().getTime();
        kol.getTanggalKembali();
        if (daftarPinjaman.isEmpty()) {
            throw new Exception("anda belum pinjam");

        } else {
            if (adaKoleksi(kol)) {
                // pinjaman ada di daftar pinjam
                daftarPinjaman.remove(kol);
            } else {
                // koleksi tidak ada di daftar pinjaman
                System.out.println("Tidak ada koleksi di daftar pinjaman");
            }
        }
    }
}

0 komentar:

Posting Komentar