Monday, September 29, 2025

Pertemuan 5 | pengambilan matkul

 Naufal Daffa Alfa Zain

5025241066
Pemrograman Berorientasi Objek - A

        Pada pertemuan ke-5, kami belajar mengenai bagaimana interaksi antar objek yang saling mempengaruhi dan membutuhkan untuk membuat sebuah projek yang kompleks. Pada tugas kali ini, saya mengimplementasikan konsep tersebut melalui pembuatan proyek simulasi pengambilan matkul menggunakan bahasa Java di BlueJ.

Disini, saya juga menggunakan GUI agar lebih menarik dan lebih mudah untuk digunakan. terutama lebih mudah untuk berpindah antar menu



Ketika program dijalankan akan terlihat seperti berikut


Berikut adalah Source Codenya :

Main.Java

import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;

public class Main {
    private static Mahasiswa mhs;
    private static ArrayList<Matkul> daftarMatkul;

    public static void main(String[] args) {
        // Data dosen & matkul sesuai daftar
        daftarMatkul = new ArrayList<>();
        daftarMatkul.add(new Matkul("IF201", "Pemrograman Web", 3, 40, new Dosen("Fajar Baskoro, S.Kom., M.T.", "001")));
        daftarMatkul.add(new Matkul("IF202", "Pemrograman Berorientasi Objek", 3, 40, new Dosen("Fajar Baskoro, S.Kom., M.T.", "002")));
        daftarMatkul.add(new Matkul("IF203", "Jaringan Komputer", 3, 40, new Dosen("Ir. Ary Mazharuddin Shiddiqi, S.Kom., M.Comp.Sc., Ph.D.", "003")));
        daftarMatkul.add(new Matkul("IF204", "Teori Graf", 3, 40, new Dosen("Victor Hariadi, S.Si., M.Kom.", "004")));
        daftarMatkul.add(new Matkul("IF205", "Matematika Diskrit", 3, 40, new Dosen("Muhamad Hilmil Muchtar Aditya Pradana, S.Kom., M.Sc., Ph.D.", "005")));
        daftarMatkul.add(new Matkul("IF206", "Konsep Pengembangan Perangkat Lunak", 3, 40, new Dosen("Dr. Sarwosri, S.Kom., M.T.", "006")));
        daftarMatkul.add(new Matkul("IF207", "Konsep Kecerdasan Artifisial", 3, 40, new Dosen("Imam Mustafa Kamal, S.ST., Ph.D.", "007")));
        daftarMatkul.add(new Matkul("IF208", "Pengantar Teknologi Elektro dan Informatika Cerdas", 2, 40, new Dosen("Ir. Suhadi Lili, M.T.I.", "008")));
        daftarMatkul.add(new Matkul("IF209", "Struktur Data", 3, 40, new Dosen("Dr. Yudhi Purwananto, S.Kom., M.Kom.", "009")));
        daftarMatkul.add(new Matkul("IF210", "Sistem Operasi", 3, 40, new Dosen("Ir. Ary Mazharuddin Shiddiqi, S.Kom., M.Comp.Sc., Ph.D.", "010")));
        daftarMatkul.add(new Matkul("IF211", "Organisasi Komputer", 3, 40, new Dosen("Dr. Wahyu Suadi, S.Kom., MM., M.Kom.", "011")));
        daftarMatkul.add(new Matkul("IF212", "Komputasi Numerik", 3, 40, new Dosen("Dr. Bilqis Amaliah, S.Kom., M.Kom.", "012")));

        // Input mahasiswa via dialog
        String nama = JOptionPane.showInputDialog("Masukkan Nama Mahasiswa:");
        String nrp = JOptionPane.showInputDialog("Masukkan NRP:");
        mhs = new Mahasiswa(nama, nrp);

        // Buat frame utama
        JFrame frame = new JFrame("Sistem Akademik - " + mhs.getNama());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 500);
        frame.setLayout(new BorderLayout());

        JTextArea output = new JTextArea();
        output.setEditable(false);
        JScrollPane scroll = new JScrollPane(output);

        JPanel panelButton = new JPanel();
        panelButton.setLayout(new GridLayout(1, 5));

        JButton btn1 = new JButton("Daftar Matkul");
        JButton btn2 = new JButton("Matkul Diambil");
        JButton btn3 = new JButton("Ambil");
        JButton btn4 = new JButton("Drop");
        JButton btn5 = new JButton("Keluar");

        panelButton.add(btn1);
        panelButton.add(btn2);
        panelButton.add(btn3);
        panelButton.add(btn4);
        panelButton.add(btn5);

        // Event handling
        btn1.addActionListener(e -> {
            StringBuilder sb = new StringBuilder("--- DAFTAR MATA KULIAH ---\n");
            for (Matkul mk : daftarMatkul) {
                sb.append(mk.tampilkanInfo()).append("\n");
            }
            output.setText(sb.toString());
        });

        btn2.addActionListener(e -> {
            output.setText(mhs.tampilkanMatkulDiambil());
        });

        btn3.addActionListener(e -> {
            String kode = JOptionPane.showInputDialog("Masukkan kode kelas:");
            Matkul mk = cariMatkul(kode);
            if (mk != null) {
                mhs.ambilMatkul(mk);
                output.setText("✅ Ambil matkul berhasil!\n\n" + mhs.tampilkanMatkulDiambil());
            } else {
                output.setText("⚠️ Matkul tidak ditemukan!");
            }
        });

        btn4.addActionListener(e -> {
            String kode = JOptionPane.showInputDialog("Masukkan kode kelas untuk drop:");
            Matkul mk = cariMatkul(kode);
            if (mk != null) {
                mhs.dropMatkul(mk);
                output.setText("✅ Drop matkul berhasil!\n\n" + mhs.tampilkanMatkulDiambil());
            } else {
                output.setText("⚠️ Matkul tidak ditemukan!");
            }
        });

        btn5.addActionListener(e -> {
            JOptionPane.showMessageDialog(frame, "Terima kasih! Program selesai.");
            System.exit(0);
        });

        frame.add(scroll, BorderLayout.CENTER);
        frame.add(panelButton, BorderLayout.SOUTH);
        frame.setVisible(true);
    }

    private static Matkul cariMatkul(String kode) {
        for (Matkul mk : daftarMatkul) {
            if (mk.getKodeKelas().equalsIgnoreCase(kode)) {
                return mk;
            }
        }
        return null;
    }
}



Mahasiswa.Java



import java.util.ArrayList;

public class Mahasiswa {
    private String nama;
    private String nrp;
    private ArrayList<Matkul> matkulDiambil;

    public Mahasiswa(String nama, String nrp) {
        this.nama = nama;
        this.nrp = nrp;
        this.matkulDiambil = new ArrayList<>();
    }

    public String getNama() {
        return nama;
    }

    public String getNrp() {
        return nrp;
    }

    public ArrayList<Matkul> getMatkulDiambil() {
        return matkulDiambil;
    }

    public void ambilMatkul(Matkul mk) {
        if (!matkulDiambil.contains(mk) && mk.getDaftarMahasiswa().size() < mk.getKapasitas()) {
            matkulDiambil.add(mk);
            mk.tambahMahasiswa(this);
        }
    }

    public void dropMatkul(Matkul mk) {
        if (matkulDiambil.remove(mk)) {
            mk.hapusMahasiswa(this);
        }
    }

    public String tampilkanMatkulDiambil() {
        if (matkulDiambil.isEmpty()) {
            return "Belum ada mata kuliah yang diambil.\n";
        }
        StringBuilder sb = new StringBuilder("Mata kuliah yang diambil:\n");
        for (Matkul mk : matkulDiambil) {
            sb.append("- ").append(mk.getKodeKelas()).append(" | ")
              .append(mk.getNamaMatkul()).append(" (")
              .append(mk.getSks()).append(" SKS) - Dosen: ")
              .append(mk.getDosenPengampu().getNama()).append("\n");
        }
        return sb.toString();
    }
}



Dosen.java



public class Dosen {
    private String nama;
    private String nip;

    public Dosen(String nama, String nip) {
        this.nama = nama;
        this.nip = nip;
    }

    public String getNama() {
        return nama;
    }

    public String getNip() {
        return nip;
    }
}



Matkul.Java



import java.util.ArrayList;

public class Matkul {
    private String kodeKelas;
    private String namaMatkul;
    private int sks;
    private int kapasitas;
    private Dosen dosenPengampu;
    private ArrayList<Mahasiswa> daftarMahasiswa;

    public Matkul(String kodeKelas, String namaMatkul, int sks, int kapasitas, Dosen dosenPengampu) {
        this.kodeKelas = kodeKelas;
        this.namaMatkul = namaMatkul;
        this.sks = sks;
        this.kapasitas = kapasitas;
        this.dosenPengampu = dosenPengampu;
        this.daftarMahasiswa = new ArrayList<>();
    }

    public String getKodeKelas() { return kodeKelas; }
    public String getNamaMatkul() { return namaMatkul; }
    public int getSks() { return sks; }
    public int getKapasitas() { return kapasitas; }
    public Dosen getDosenPengampu() { return dosenPengampu; }
    public ArrayList<Mahasiswa> getDaftarMahasiswa() { return daftarMahasiswa; }

    public void tambahMahasiswa(Mahasiswa m) { daftarMahasiswa.add(m); }
    public void hapusMahasiswa(Mahasiswa m) { daftarMahasiswa.remove(m); }

    public String tampilkanInfo() {
        return kodeKelas + " | " + namaMatkul + " (" + sks + " SKS)\n" +
               "Dosen: " + dosenPengampu.getNama() + "\n" +
               "Kapasitas: " + daftarMahasiswa.size() + "/" + kapasitas + "\n";
    }
}




Pertemuan 6 | Bootstrap

  

 

 Naufal Daffa Alfa Zain

5025241066

Pemrograman Web - B


   Pada pertemuan keenam mata kuliah Pemrograman Web – B, saya mendapatkan tugas untuk membuat halaman konten dengan menggunakan bootstrap. disini saya mengambil referensi dari startbootstrap dan membuat sedikit modifikasi menjadi seperti berikut




Untuk source code dan live page dapat dilihat disini :

Source code : Source Code

Live Page      : Live Page 








 

Monday, September 22, 2025

Pertemuan 4 | ClockDisplay

Naufal Daffa Alfa Zain
5025241066
Pemrograman Berorientasi Objek - A

        Pada pertemuan ke-4, kami belajar mengenai bagaimana interaksi antar objek yang saling mempengaruhi dan membutuhkan untuk membuat sebuah projek yang kompleks. Pada tugas kali ini, saya mengimplementasikan konsep tersebut melalui pembuatan proyek jam digital menggunakan bahasa Java di BlueJ.

Dalam proyek ini terdapat tiga kelas utama, yaitu:

  1. NumberDisplay → bertanggung jawab untuk menangani angka dengan batas tertentu, misalnya jam maksimal 24, menit dan detik maksimal 60. Kelas ini menerapkan logika rollover sehingga ketika mencapai nilai maksimum, ia kembali ke 0.

  2. ClockDisplay → menggunakan objek NumberDisplay untuk menyusun representasi jam, menit, dan detik. Kelas ini juga mengatur mekanisme penambahan waktu setiap satu detik dan memastikan format tampilan waktu selalu dalam format HH:MM:SS.

  3. Clock → berfungsi sebagai antarmuka utama menggunakan GUI berbasis Swing. Kelas ini menampilkan jam digital dengan desain hitam-hijau, serta menyediakan tombol Start, Stop, dan Step untuk mengontrol jalannya jam.







        Melalui proyek ini, saya memahami bagaimana enkapsulasi, pemisahan tanggung jawab antar kelas, serta penggunaan thread dapat dikombinasikan untuk membangun aplikasi sederhana namun interaktif. Selain itu, saya juga belajar mempercantik tampilan dengan menambahkan elemen GUI seperti tombol, label digital, serta pengaturan warna agar program lebih menarik.

Berikut adalah Source Codenya:

Pertemuan 5 | Suggestion with js

 

 

 Naufal Daffa Alfa Zain

5025241066

Pemrograman Web - B


   Pada pertemuan kelima mata kuliah Pemrograman Web – B, saya mendapatkan tugas untuk membuat halaman portofolio sederhana yang berisi Form perndaftaran. namun disini bedanya form page juga menampilkan suggestion nama yang disimpan dalam json.

 


Selain itu, saya juga membuat List drop down yang menampilkan Merk sesuai dengan jenis produknya.


Dan yang terakhir disini saya juga membuat sebuah page yang menampilkan kode pos setelah user mengisi Provisi, kabupaten/kota, dan kecamatan
 
Untuk source code dan live page dapat dilihat disini :

Source code : Source Code

Live Page      : Live Page 

 

Monday, September 15, 2025

Pertemuan 4 | Porto with css

 

 Naufal Daffa Alfa Zain

5025241066

Pemrograman Web - B


   Pada pertemuan keempat mata kuliah Pemrograman Web – B, saya mendapatkan tugas untuk membuat halaman portofolio sederhana yang berisi beberapa elemen penting dalam HTML, seperti tabel, form, dan struktur dasar halaman web. Tugas ini bertujuan untuk melatih kemampuan saya dalam menyusun kerangka halaman sekaligus memahami peran masing-masing elemen HTML yang sering digunakan pada pengembangan web. Dengan menyelesaikan tugas ini, saya belajar bagaimana tabel dapat digunakan untuk menampilkan data dengan rapi, form untuk menyediakan interaksi dengan pengguna, serta bagaimana menyusun konten agar dapat diakses secara mudah melalui browser. Pengalaman ini menjadi pondasi awal yang penting bagi saya sebagai mahasiswa Informatika, karena keterampilan dalam membangun halaman web dasar merupakan langkah fundamental dalam proses pengembangan web dan pembentukan personal branding digital.




Source code : Source Code

Live Page      : Live Page 


  Selain itu, saya juga semakin memahami pentingnya konsistensi dalam penulisan kode serta kerapian struktur agar halaman web mudah dipelajari kembali maupun dikembangkan lebih lanjut. Tugas ini memberi saya kesempatan untuk mengasah kreativitas dalam menyusun tampilan, sekaligus melatih kedisiplinan dalam mengikuti aturan penulisan HTML yang baik. Saya merasa bahwa pengalaman ini akan sangat membantu ketika menghadapi proyek pemrograman web berikutnya yang lebih besar dan kompleks.

Tuesday, September 9, 2025

Tugas 3 PBO | Ticket Machine with BlueJ

Naufal Daffa Alfa Zain

5025241066

Pemrogaman Berbasis Objek - A

    Pada pertemuan ketiga kelas Pemrograman berbasis objek - A, saya mendapat tugas tes simulasi menyelesaikan studi kasus class Ticket Machine menggunakan BlueJ. untuk source code dapat dilihat di buku Buku Object First with Java halaman 40-42

    Setelah itu kita bisa klik kanan pada class TicketMachine yang sudah dibuat lalu klik add new TicketMachine, kemudian set harga tiket yang kita inginkan. disini saya set ke harga 300.


    Setelah itu, akan muncul Ticket machine berwarna merah di kiri bawah. kita klik kanan saja untuk menjalankan. pertama masuk ke void(insertmoney) untuk memasukkan balance/uang kedalam mesin. disini saya test memasukkan 1000.




    Setelah itu bisa kita cek dibagian getBalance() untuk mengecek berapa balance/uang yang kita punya saat ini. disini terlihat uang 1000 yang saya insert tadi sudah masuk.


    Pada bagian getPrice(), kita bisa mengecek berapa harga satuan ticket. disini muncul output 300 dimana itu sesuai dengan harga yang sudah saya set di awal tadi.


    Setelah melihat balance cukup, kita bisa beli tiket menggunakan printTiket(). otomatis saldo berkurang dan akan muncul nota tiket seperti dibawah ini.


    Terakhir kita bisa cek Balance tersisa setelah transaksi dengan menggunakan refundBalance(). disini muncul 700 dimana itu sesuai dengan saldo awal (1000) dikurangi harga tiket (300) = 700








    





Monday, September 8, 2025

Tugas 1 PBO | Type Writter

 Naufal Daffa Alfa Zain

5025241066
Pemrogaman Berbasis Objek - A

    Pada pertemuan pertama kelas Pemrograman berbasis objek - A, saya mendapat tugas tes kecepatan mengetik, sebuah kemampuan yang sangat penting bagi mahasiswa IT, khususnya programmer. Hal ini karena kecepatan mengetik berhubungan langsung dengan produktivitas dalam menulis kode, membuat dokumentasi, serta mengerjakan berbagai tugas akademik maupun proyek nyata. Programmer yang terbiasa mengetik cepat dengan akurasi tinggi akan lebih efisien dalam menuangkan ide ke dalam bentuk kode, mengurangi waktu pengerjaan, dan meminimalisir kesalahan yang bisa muncul akibat salah ketik. Selain itu, kecepatan mengetik juga membantu dalam berkomunikasi melalui platform daring, seperti saat berkolaborasi dengan tim atau mengerjakan laporan.

    Untuk mengukur kemampuan tersebut, saya menggunakan platform Monkeytype, sebuah aplikasi berbasis web yang populer untuk latihan mengetik. Dari hasil tes yang saya lakukan, saya memperoleh kecepatan mengetik 70 WPM (words per minute) dengan tingkat akurasi mencapai 98%. Hasil ini menunjukkan bahwa kemampuan mengetik saya sudah cukup baik, meskipun masih bisa terus ditingkatkan agar lebih optimal. Kecepatan yang stabil ditambah dengan akurasi yang tinggi akan menjadi modal penting dalam mendukung kelancaran studi dan aktivitas saya sebagai mahasiswa IT.

    Dari hasil yang saya dapatkan, saya cukup puas dengan kecepatan mengetik saat ini, namun saya juga menyadari masih banyak ruang untuk berkembang. Dalam upaya meningkatkan kecepatan WPM saya, ada beberapa cara yang bisa saya lakukan. Pertama, saya bisa melatih konsistensi melalui latihan rutin di Monkeytype maupun platform sejenis sehingga jari terbiasa dengan pola tombol keyboard. Kedua, memperdalam penggunaan teknik touch typing (mengetik tanpa melihat keyboard) agar fokus hanya pada layar, sehingga kecepatan bisa meningkat tanpa mengorbankan akurasi. Dengan langkah-langkah tersebut, saya optimis bahwa WPM saya bisa terus meningkat dari 70 ke level yang lebih tinggi, tanpa mengurangi akurasi.

Pertemuan 3 | Form and Pages

 Naufal Daffa Alfa Zain

5025241066

Pemrograman Web - B


   Pada pertemuan ketiga kelas Pemrograman Web - B, saya mendapatkan tugas untuk membuat beberapa elemen penting dalam HTML, yaitu tabel, form, dan halaman web sederhana. Tugas ini dirancang untuk melatih kemampuan saya dalam menyusun struktur halaman web sekaligus memahami fungsi masing-masing elemen HTML yang sering digunakan dalam pengembangan web. Dengan mengerjakan tugas ini, saya belajar bagaimana HTML membentuk fondasi halaman web, dari menampilkan data melalui tabel, membuat interaksi melalui form, hingga menyusun konten dalam halaman yang bisa diakses di browser. Hal ini menjadi pengalaman awal yang penting bagi mahasiswa Informatika, karena kemampuan membuat halaman web dasar merupakan keterampilan fundamental dalam pengembangan web dan personal branding digital.



    
    Live Page : Live Table    
    Source Code : Sc Table



    Live Page : Live Form
    Source Code : Sc Form



    Live Page : Live Frame
    Source Code : Sc Frame

    melalui tugas ini saya menyadari bahwa pembuatan halaman web, meskipun sederhana, membutuhkan perencanaan struktur yang jelas dan pemahaman setiap elemen HTML yang digunakan. Mulai dari menampilkan data dalam tabel, membuat form interaktif, hingga menyusun halaman yang rapi dan mudah dinavigasi, semuanya memberikan pengalaman belajar yang sangat berharga. Tugas ini tidak hanya meningkatkan keterampilan teknis saya dalam HTML, tetapi juga melatih kemampuan menyampaikan informasi secara terstruktur dan profesional melalui web. Dengan menguasai dasar-dasar ini, saya merasa lebih siap untuk menghadapi tantangan pengembangan web yang lebih kompleks di masa depan.

Evaluasi Tengah Semester | PBO

 Naufal Daffa Alfa Zain 5025241066 PBO A Sistem Vending Coffee Machine adalah aplikasi yang mensimulasikan mesin penjual otomatis untuk minu...