1.3 ER Diagram, Kamus Data & Spesifikasi Proses

A. Entity Relationship Diagram (ERD)

ER Diagram ngegambarin struktur data sistem — entitasnya apa aja, atributnya apa, sama relasi antar entitasnya gimana.

erDiagram
    Anggota ||--o{ Peminjaman : "melakukan (1:N)"
    Buku ||--o{ Peminjaman : "terdiri dari (1:N)"

    Anggota {
        string Kd_Anggota PK
        string Nm_Anggota
        date Tgl_Lahir
        date Tgl_Daftar
    }

    Buku {
        string Kd_Buku PK
        string Judul
        string Penerbit
        string Pengarang
        int Stok
    }

    Peminjaman {
        string No_Pinjam PK
        string Kd_Anggota FK
        string Kd_Buku FK
        date Tgl_Pinjam
        date Tgl_Kembali
    }
          

Penjelasan Relasi

  • Anggota → Peminjaman (1:N): Satu anggota bisa minjem berkali-kali (banyak transaksi). Tapi setiap transaksi peminjaman ya cuma buat satu anggota doang.
  • Buku → Peminjaman (1:N): Satu buku bisa muncul di banyak catatan peminjaman (dipinjem berkali-kali). Tapi setiap catatan peminjaman cuma ngerujuk ke satu buku.
📊 ER Diagram — Notasi Alternatif (Crow's Foot) Versi alternatif ER diagram pake notasi crow's foot: Anggota 1---N Peminjaman N---1 Buku

B. Kamus Data (Data Dictionary)

B.1 Struktur Data Store

Data Store: Anggota

FieldTipePanjangConstraintDeskripsi
Kd_AnggotaString10Primary KeyKode unik anggota (auto-generated, format: AGT-001)
Nm_AnggotaString100Not NullNama lengkap anggota
Tgl_LahirDateNot NullTanggal lahir anggota
Tgl_DaftarDateDefault: todayTanggal pendaftaran anggota

Data Store: Buku

FieldTipePanjangConstraintDeskripsi
Kd_BukuString10Primary KeyKode unik buku (BKU-001)
JudulString200Not NullJudul buku
PenerbitString100Not NullNama penerbit
PengarangString100Not NullNama pengarang
StokInteger≥ 0Jumlah buku tersedia (ngurang kalo ada yang minjem)

Data Store: Peminjaman

FieldTipePanjangConstraintDeskripsi
No_PinjamString15Primary KeyNomor transaksi peminjaman (format: PJM-YYYYMMDD-001)
Kd_AnggotaString10Foreign KeyMereferensi ke Anggota(Kd_Anggota)
Kd_BukuString10Foreign KeyMereferensi ke Buku(Kd_Buku)
Tgl_PinjamDateDefault: todayTanggal peminjaman
Tgl_KembaliDateTgl_Pinjam + 7 hariTanggal jatuh tempo pengembalian

B.2 Spesifikasi Data Flow

Data FlowDariKeKomposisi
Id-AnggotaAnggotaProses 1.1Kd_Anggota
Kartu AnggotaProses 1.3AnggotaKd_Anggota + Nm_Anggota + Tgl_Daftar
Id-bukuBag. PengadaanProses 2.0Kd_Buku + Judul + Penerbit + Pengarang + Stok
Info Status BukuProses 3.0AnggotaKd_Buku + Judul + Stok + Status (Tersedia/Tidak)
Kd-Buku PinjamanAnggotaProses 4.1Kd_Buku + Kd_Anggota
Bukti PinjamanProses 4.2AnggotaNo_Pinjam + Kd_Anggota + Kd_Buku + Tgl_Pinjam + Tgl_Kembali
Daftar Pengeluaran BukuProses 5.2Bag. PengadaanKd_Buku + Judul + Jumlah_Dipinjam + Sisa_Stok (periode)
Laporan PeminjamanProses 5.1PimpinanNo_Pinjam + Nm_Anggota + Judul + Tgl_Pinjam (periode)

C. Spesifikasi Proses (Process Specifications)

Dibawah ini spesifikasi logika prosesnya, pake structured English / pseudocode biar jelas alurnya.

PSPEC 2.0 — Rekam Data Buku

-- Proses 2.0: Nambahin data buku baru
PROCEDURE Rekam_Data_Buku
INPUT:  Id_buku (dari Bag. Pengadaan)
OUTPUT: Konfirmasi pencatatan

BEGIN
    // Cek dulu inputnya bener apa ga
    IF Id_buku.Kd_Buku IS NULL OR Id_buku.Judul IS NULL THEN
        DISPLAY "Error: Data buku ga lengkap"
        EXIT
    END IF

    // Cek dobel data, siapa tau udah ada
    READ Buku WHERE Kd_Buku = Id_buku.Kd_Buku
    IF FOUND THEN
        // Kalo udah ada, tambahin aja stoknya
        Buku.Stok = Buku.Stok + Id_buku.Stok
        DISPLAY "Stok buku berhasil ditambahin"
    ELSE
        // Kalo belum ada, insert baru
        INSERT INTO Buku
        VALUES (Id_buku.Kd_Buku, Id_buku.Judul,
                Id_buku.Penerbit, Id_buku.Pengarang, Id_buku.Stok)
        DISPLAY "Buku baru berhasil direkam"
    END IF
END

PSPEC 4.1 — Rekam Peminjaman

-- Proses 4.1: Nyatet transaksi peminjaman buku
PROCEDURE Rekam_Peminjaman
INPUT:  Id-Anggota, Kd-Buku Pinjaman (dari Anggota)
OUTPUT: Data peminjaman (ke Proses 4.2 dan 4.3)

BEGIN
    // Cek anggota terdaftar apa ga
    READ Anggota WHERE Kd_Anggota = Id_Anggota
    IF NOT FOUND THEN
        DISPLAY "Error: Anggota ga terdaftar"
        EXIT
    END IF

    // Cek bukunya ada apa ga
    READ Buku WHERE Kd_Buku = Kd_Buku_Pinjaman
    IF NOT FOUND THEN
        DISPLAY "Error: Buku ga ketemu"
        EXIT
    END IF

    IF Buku.Stok <= 0 THEN
        DISPLAY "Error: Stok buku abis"
        EXIT
    END IF

    // Bikin nomor peminjaman otomatis
    No_Pinjam = "PJM-" + TODAY() + "-" + SEQUENCE()
    Tgl_Pinjam = TODAY()
    Tgl_Kembali = Tgl_Pinjam + 7  // Jatuh tempo 7 hari kemudian

    // Simpen transaksi
    INSERT INTO Peminjaman
    VALUES (No_Pinjam, Id_Anggota, Kd_Buku_Pinjaman,
            Tgl_Pinjam, Tgl_Kembali)

    // Kirim ke proses selanjutnya
    SEND dt_Peminjaman TO Proses 4.2  // Buat cetak bukti
    SEND Kd_Buku_Pinjaman TO Proses 4.3  // Buat update stok
END

PSPEC 5.1 — Cetak Laporan Peminjaman

-- Proses 5.1: Nyetak laporan peminjaman buat Pimpinan
PROCEDURE Cetak_Laporan_Peminjaman
INPUT:  Periode (tanggal awal, tanggal akhir)
OUTPUT: Laporan Peminjaman (ke Pimpinan)

BEGIN
    // Cek periode masuk akal apa ga
    IF Tgl_Awal > Tgl_Akhir THEN
        DISPLAY "Error: Periode ga valid"
        EXIT
    END IF

    // Ambil data peminjaman pake join 3 tabel
    READ Peminjaman, Anggota, Buku
    WHERE Peminjaman.Kd_Anggota = Anggota.Kd_Anggota
      AND Peminjaman.Kd_Buku = Buku.Kd_Buku
      AND Peminjaman.Tgl_Pinjam BETWEEN Tgl_Awal AND Tgl_Akhir
    ORDER BY Peminjaman.Tgl_Pinjam ASC

    // Itung total peminjaman
    Total_Peminjaman = COUNT(*)

    // Format dan cetak laporannya
    PRINT "LAPORAN PEMINJAMAN BUKU"
    PRINT "Periode: " + Tgl_Awal + " s/d " + Tgl_Akhir
    PRINT "================================="
    PRINT "No | Tgl Pinjam | Anggota | Buku | Jatuh Tempo"

    FOR EACH record IN result_set DO
        PRINT record.No_Pinjam + " | " +
              record.Tgl_Pinjam + " | " +
              record.Nm_Anggota + " | " +
              record.Judul + " | " +
              record.Tgl_Kembali
    END FOR

    PRINT "================================="
    PRINT "Total Peminjaman: " + Total_Peminjaman

    // Kirim laporan ke Pimpinan
    SEND Laporan_Peminjaman TO Pimpinan
END

PSPEC 4.3 — Update Buku

-- Proses 4.3: Update stok buku abis ada yang minjem
PROCEDURE Update_Buku
INPUT:  Kd_Buku_Pinjaman (dari Proses 4.1)
OUTPUT: Stok buku ter-update

BEGIN
    // Cek stok dulu
    READ Buku WHERE Kd_Buku = Kd_Buku_Pinjaman
    IF NOT FOUND THEN
        DISPLAY "Error: Buku ga ketemu"
        EXIT
    END IF

    IF Buku.Stok <= 0 THEN
        DISPLAY "Error: Stok udah 0, gabisa minjem"
        EXIT
    END IF

    // Kurangin stoknya 1
    Buku.Stok = Buku.Stok - 1
    UPDATE Buku SET Stok = Buku.Stok
           WHERE Kd_Buku = Kd_Buku_Pinjaman

    DISPLAY "Stok buku berhasil diupdate. Sisa: " + Buku.Stok
END

PSPEC 1.1 — Cari Data Anggota

-- Proses 1.1: Nyari data anggota buat verifikasi
PROCEDURE Cari_Data_Anggota
INPUT:  Id-Anggota (dari Anggota)
OUTPUT: Status anggota (terdaftar/belum) & data anggota

BEGIN
    IF Id_Anggota IS NULL OR Id_Anggota = "" THEN
        DISPLAY "Error: ID Anggota ga boleh kosong"
        EXIT
    END IF

    // Cari di data store
    READ Anggota WHERE Kd_Anggota = Id_Anggota

    IF FOUND THEN
        DISPLAY "Anggota udah terdaftar"
        DISPLAY "Nama: " + Anggota.Nm_Anggota
        DISPLAY "Tgl Daftar: " + Anggota.Tgl_Daftar
        SEND dt_Anggota TO Proses 1.3  // Langsung cetak ulang kartu
    ELSE
        DISPLAY "Anggota belum terdaftar"
        SEND Id_Anggota TO Proses 1.2  // Lanjut ke pendaftaran baru
    END IF
END