Monday, October 13, 2025

Evaluasi Tengah Semester | PBO

 Naufal Daffa Alfa Zain

5025241066

PBO A


Sistem Vending Coffee Machine adalah aplikasi yang mensimulasikan mesin penjual otomatis untuk minuman kopi. Pengguna dapat memilih jenis kopi, ukuran gelas, menambahkan gula atau susu, melakukan pembayaran, dan menerima kopi yang telah disiapkan oleh mesin.

Sistem ini mengelola stok bahan (kopi, gula, susu, air), memproses pembayaran, serta memberikan laporan transaksi dan status mesin.

Alur kerja Vending Coffee Machine
  • Mesin aktif → menampilkan menu pilihan kopi.
  • Pengguna memilih jenis dan ukuran kopi.
  • Pengguna menambah gula/susu (opsional).
  • Mesin menampilkan total harga.
  • Pengguna melakukan pembayaran.
  • Mesin memverifikasi pembayaran → jika cukup → membuat kopi.
  • Kopi disajikan → sistem mengurangi stok.
  • Transaksi disimpan ke log.
  • Jika stok habis → admin diingatkan untuk refill

Ketentuan
    
1. Tentukan fitur yang ada pada mesin
  • Tampilkan menu
  • Pemilihan jenis kopi (5 jenis)
  • Pemilihan size cup (3 cup)
  • Verifikasi pembayaran
  • Melihat stock Ingredient
  • Mengurangi stock Ingredient
  • Menyimpan transaksi ke log
  • Menambah stock Ingredient
2. Gambarkan rancangan kelas dan rancangan objek vending coffee machine



        Class Main
        Tanggung Jawab: 
                Menginisialisasi dan menjalankan mesin kopi  

        Class CoffeeMachine
        Atribut:
                SUGAR_SHOT_GRAMS: int (5) - jumlah gram per shot gula
                MILK_SHOT_ML: int (30) - jumlah ml per shot susu
                LOW_STOCK_THRESHOLD: int (50) - batas peringatan stok rendah
                scanner: Scanner - untuk membaca input pengguna
                stock: Ingredient.Stock - manajemen stok bahan
                transactions: List<Transaction> - daftar transaksi yang sudah dilakukan
                active: boolean - status mesin (hidup/mati)

        Class Coffee
        Atribut:
                displayName: String - nama tampilan kopi
                basePrice: int - harga dasar kopi
                recipe: Ingredient.Usage - resep bahan yang dibutuhkan
                displayName: String - nama ukuran (Small/Medium/Large)
                priceMultiplier: double - pengali harga (1.0, 1.15, 1.3)

        Class Ingredient
        Atribut:
                coffeeGram: int - jumlah bubuk kopi (gram)
                sugarGram: int - jumlah gula (gram)
                milkMl: int - jumlah susu (ml)
                waterMl: int - jumlah air (ml)
                cups: int - jumlah gelas

         Class Transaction
         Atribut:
                DateTimeFormatter - format tanggal/waktu untuk tampilan
                time: LocalDateTime - waktu transaksi

3. Output simulasi




4. Implementasikan dalam bentuk aplikasi simulasi vending coffe machine 


5.Buatlah Video Presentasi yang menjelaskan pekerjaanmu kemudian upload di Youtube
    
    Youtube

6.Buat Dokumentasi pengerjaan di blog, kemudian isi google form  Link Pengumpulan ETS

     blogspot



















Pertemuan 7 | support system

  Naufal Daffa Alfa Zain

5025241066
Pemrograman Berorientasi Objek - A

        Pada pertemuan ke-7, kami belajar mengenai Tech Support. Pada tugas kali ini, saya mengimplementasikan konsep tersebut melalui pembuatan proyek simulasi Tech Support untuk customer service di myITS menggunakan bahasa Java di BlueJ.

    Saya menggunakan library bawaan Java yang lebih advanced seperti Scanner (java.util.Scanner) untuk membaca input pengguna, HashMap (java.util.HashMap) untuk menyimpan data kata kunci dan respon, serta Random (java.util.Random) untuk menghasilkan respon acak. disini juga menggunakan rensponse.put(input,response), untuk auto response chat users.



source code :

TechSupport.java

import java.util.Map;
import java.util.HashMap;
import java.util.Random;
import java.util.Scanner;

public class TechSupport {
    private Map<String, String> responses;
    private Random random;

    public TechSupport() {
        responses = new HashMap<>();
        random = new Random();

        // Daftar kata kunci dan respons
        responses.put("halo", "Halo! Ada yang bisa saya bantu?");
        responses.put("bantu", "Apa yang bisa saya bantu hari ini?");
        responses.put("siakad", "Apakah Anda mengalami masalah dengan SIAKAD? Pastikan server tidak sedang maintenance.");
        responses.put("frs","Mohon maaf, saat ini sedang diluar masa frs");
        responses.put("wifi", "Coba restart perangkat Anda atau periksa pengaturan jaringan.");
        responses.put("vpn", "Install dan konfigurasi VPN sesuai petunjuk di myITS VPN.");
        responses.put("lupa", "Silahkan datang ke gedung research center di ITS untuk reset password.");
        responses.put("sakit", "Untuk perizinan sakit, mohon lampirkan surat keterangan dokter di myITS presensi.");
        responses.put("izin", "Untuk perizinan izin, mohon lampirkan surat izin di myITS presensi.");
        responses.put("presensi", "Presensi dapat dilakukan di myITS presensi.");
        responses.put("matkul", "Informasi mata kuliah dapat dilihat di SIAKAD.");
        responses.put("dosen", "Untuk menghubungi dosen, silahkan cek email resmi dosen di myITS classroom.");
        responses.put("kelas", "Jadwal kelas dapat dilihat di SIAKAD.");
        responses.put("ujian", "Jadwal ujian dapat dilihat di SIAKAD.");
        responses.put("tugas", "Untuk informasi tugas, silahkan cek di myITS classroom.");
        responses.put("keluhan", "Silahkan sampaikan keluhan Anda melalui myITS Service Desk.");
        responses.put("link", "Untuk fitur url shortener, silahkan kunjungi https://shortener.its.ac.id/");
        responses.put("login", "Pastikan komputer Anda terhubung ke internet dan coba lagi.");
        responses.put("SKEM", "Mohon maaf, saat ini sedang diluar masa pengajuan SKEM.");
        responses.put("authenticator", "Unduh aplikasi Microsoft Authenticator, lalu ikuti langkah login di SIAKAD.");
        responses.put("kode", "Kode autentikasi muncul di aplikasi Authenticator Anda.");
        responses.put("akun", "Untuk masalah akun, silahkan datang ke gedung research center di ITS.");
    }

    public String getResponse(String userInput) {
        if (userInput == null || userInput.isBlank()) {
            return "Coba tulis pertanyaan yang lebih jelas.";
        }

        String[] words = userInput.toLowerCase().split("\\s+");
        for (String w : words) {
            if (responses.containsKey(w)) {
                return responses.get(w);
            }
        }

        // Jika tidak ada kata kunci yang cocok
        String[] generic = {
            "Bisa jelaskan lebih detail?",
            "Saya belum mengerti, bisa diulangi?",
            "Coba tambahkan informasi lebih spesifik."
        };
        return generic[random.nextInt(generic.length)];
    }

    private static void printWelcome() {
        System.out.println("========================================");
        System.out.println("   Selamat datang di Academic Support");
        System.out.println("   Apa ada yang bisa kami bantu?");
        System.out.println("   Ketik 'bye' untuk mengakhiri percakapan");
        System.out.println("========================================");
    }

    private static void printGoodbye() {
        System.out.println("Terima kasih telah menggunakan Academic Support.");
        System.out.println("Sampai jumpa!");
    }

    public static void main(String[] args) {
        TechSupport as = new TechSupport();
        Scanner scanner = new Scanner(System.in);
        printWelcome();

        while (true) {
            System.out.print("> ");
            String input = scanner.nextLine().trim();

            if (input.equalsIgnoreCase("bye")) {
                break;
            }

            String response = as.getResponse(input);
            System.out.println(response);
        }

        printGoodbye();
        scanner.close();
    }
}


Pertemuan 6 | Library Catalog

 Naufal Daffa Alfa Zain

5025241066
Pemrograman Berorientasi Objek - A

        Pada pertemuan ke-6, kami belajar mengenai Grouping Object. Pada tugas kali ini, saya mengimplementasikan konsep tersebut melalui pembuatan proyek simulasi LibraryCatalog menggunakan bahasa Java di BlueJ.

terdapat 5 menu yaitu:

1. Tambah Buku

2. Lihat Semua Buku

3. Cari Buku

4. Hapus Buku

5. Keluar



Berikut adalah source codenya

1. LibraryCatalog.java

import java.util.ArrayList;
import java.util.Scanner;

public class LibraryCatalog
{    
    public static void main(String[] args) {
            ArrayList<Book> catalog = new ArrayList<>();
            Scanner scanner = new Scanner(System.in);
            int choice;
        do {
            System.out.println("\n=== Library Catalog ===");
            System.out.println("1. Tambah Buku");
            System.out.println("2. Lihat Semua Buku");
            System.out.println("3. Cari Buku");
            System.out.println("4. Hapus Buku");
            System.out.println("5. Keluar");
            System.out.print("Pilih menu: ");
            choice = scanner.nextInt();
            scanner.nextLine(); // clear buffer
           
            switch (choice) {
                case 1:
                    System.out.print("Masukkan judul buku: ");
                    String title = scanner.nextLine();
                    System.out.print("Masukkan nama penulis: ");
                    String author = scanner.nextLine();
                    System.out.print("Masukkan tahun terbit: ");
                    int year = scanner.nextInt();
                    catalog.add(new Book(title, author, year));
                    System.out.println("Buku berhasil ditambahkan!");
                    break;
                case 2:
                    System.out.println("\nDaftar Buku:");
                    if (catalog.isEmpty()) {
                        System.out.println("Tidak ada buku dalam katalog.");
                    } else {
                        for (int i = 0; i < catalog.size(); i++) {
                            System.out.println((i + 1) + ". " + catalog.get(i));
                        }
                    }
                    break;
                case 3:
                    System.out.print("Masukkan judul buku yang dicari: ");
                    String searchTitle = scanner.nextLine().toLowerCase();
                   
                    boolean found = false;
                    for (Book book : catalog) {
                        if (book.getTitle().toLowerCase().contains(searchTitle)) {
                        System.out.println(book);
                            found = true;
                        }
                    }
                    if (!found) {
                        System.out.println("Buku tidak ditemukan.");
                    }
                    break;
                case 4:
                    System.out.print("Masukkan nomor buku yang akan dihapus: ");
                    int index = scanner.nextInt();
                    if (index > 0 && index <= catalog.size()) {
                        catalog.remove(index - 1);
                        System.out.println("Buku berhasil dihapus!");
                    } else {
                        System.out.println("Nomor buku tidak valid.");
                    }
                    break;
                case 5:
                    System.out.println("Keluar dari katalog. Terima kasih!");
                    break;
                default:
                    System.out.println("Pilihan tidak valid, coba lagi.");
            }
        } while (choice != 5);
        scanner.close();
    }
}

2. Book.java

import java.util.ArrayList;
import java.util.Scanner;

public class Book
{
    private String title;
    private String author;
    private int year;

    public Book(String title, String author, int year) {
        this.title = title;
        this.author = author;
        this.year = year;
    }
   
    public String getTitle() {
        return title;
    }
   
    @Override

    public String toString() {
        return "Judul: " + title + " | Penulis: " + author + " | Tahun: " + year;
    }
}

Sunday, October 12, 2025

Evaluasi Tengah Semester | Pemrograman Web

 

 Naufal Daffa Alfa Zain

5025241066

Pemrograman Web - B


1. Buatlah desain Landing page yang di dalamnya memuat

    1. Header / Hero Section
    2. Benefit Section
    3. Social Proof / Testimoni
    4. Detail Produk / Penjelasan Layanan
    5. Offer / Promo (opsional)
    6. Formulir / Lead Capture
    7. FAQ (Frequently Asked Questions)
    8. Footer

2. Implementasikan konsep yang telah dibuat ke dalam sebuah aplikasi web. Setiap menu atau fitur yang ada mengarah ke page baru. Jika menggunakan css buat dalam file yan berbeda.

Disini, saya membuat website sewa mainan menggunakan html,css, dan bootstrap. terdiri dari beberapa pages, yaitu
 
1. Page beranda 

  

 2. Page Manfaat 

 

 

3. page testimoni

 

4. page produk

 

 

5. page promo

 

6. page reservasi / form buy

 

7. page FAQ

 

 

Untuk source code dan live page dapat dilihat disini :

Source code : Source Code

Live Page      : Live Page 

Video demo   : Video Demo

 

Pertemuan 7 | Ajax

 

 Naufal Daffa Alfa Zain

5025241066

Pemrograman Web - B


   

    Pada pertemuan ketujuh mata kuliah Pemrograman Web – B, saya mendapatkan tugas untuk membuat halaman form submit dengan sistem pengiriman email menggunakan AJAX dan microservice berbasis PHP.
Dalam implementasinya, saya menggunakan PHPMailer sebagai library utama untuk menangani proses pengiriman email agar lebih aman dan kompatibel dengan layanan SMTP modern seperti Gmail.

    Awalnya, saya mengalami kendala karena fungsi mail() bawaan PHP tidak berjalan dengan baik di beberapa server lokal. Oleh karena itu, saya beralih ke PHPMailer yang memungkinkan konfigurasi SMTP secara langsung.
Saya melakukan setup dengan menggunakan akun Gmail, di mana untuk alasan keamanan, Google tidak lagi mengizinkan penggunaan password akun utama secara langsung, sehingga saya harus mengaktifkan fitur 2-Step Verification dan membuat App Password khusus dari halaman Google App Passwords


 
 


    App Password ini berfungsi sebagai token autentikasi khusus untuk aplikasi pihak ketiga seperti PHPMailer. Setelah saya memperoleh App Password tersebut, saya menyesuaikan konfigurasi SMTP. Dengan konfigurasi di atas, form yang saya buat berhasil mengirimkan email ke alamat penerima tanpa perlu melakukan reload halaman (berkat AJAX jQuery yang mengatur request secara asinkron).
Selain itu, sistem validasi pada sisi klien dan server juga saya tambahkan agar input yang dikirim benar-benar valid sebelum diproses.

Untuk source code dan live server dapat dilihat disini :

Source code : Source Code

Live Server      : Live Server 


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";
    }
}




Evaluasi Tengah Semester | PBO

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