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 


Evaluasi Tengah Semester | PBO

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