Senin, 06 Oktober 2025

Pertemuan 7 - Latihan Membuat TechSupport untuk Sistem Akademik

 Nama     : Safa Mashita

 NRP       : 5025241022


 Pertemuan 7 - Latihan Membuat TechSupport untuk Sistem Akademik

Hari ini saya belajar bagaimana membuat sebuah sistem bantuan otomatis (Tech Support) menggunakan konsep pemrograman berorientasi objek (OOP) di Java. Sistem ini dirancang untuk membantu mahasiswa menghadapi permasalahan ketika melakukan pengisian FRS (Formulir Rencana Studi), seperti kelas penuh, jadwal bentrok, atau IPK tidak memenuhi.

Dalam pembelajaran ini, sistem dibuat dengan 3 kelas utama:
  1. SupportSystem
  2. InputReader
  3. Responder

Masing-masing kelas memiliki peran yang berbeda, tetapi saling berhubungan membentuk satu sistem utuh.


A. Visualisasi Hubungan Antar Kelas


  • SupportSystem menjadi pusat sistem.
    Ia memanggil InputReader untuk membaca input dari pengguna,
    dan menggunakan Responder untuk menentukan jawaban berdasarkan input tersebut.
  • InputReader hanya bertanggung jawab membaca teks dari pengguna.
  • Responder memproses input (kata kunci) dan mengembalikan respon yang sesuai.

B. Alur Sistem Bantuan Sistem Akademik
  1. Pengguna menjalankan program SupportSystem.
  2. Sistem menampilkan sambutan awal dan menunggu input.
  3. InputReader membaca masukan pengguna.
  4. SupportSystem meneruskan input itu ke Responder.
  5. Responder mencari kata kunci dalam input dan mengembalikan jawaban sesuai masalah (misal: kelas penuh, prasyarat belum terpenuhi, IPK rendah, dll).
  6. Jawaban dikirim kembali ke SupportSystem lalu ditampilkan di layar.
  7. Jika pengguna mengetik “bye”, sistem menampilkan pesan perpisahan dan berhenti.

C. Code dan Penjelasan

A. Class SupportSystem

public class SupportSystem {
    private InputReader reader;
    private Responder responder;
    private boolean running;

    public SupportSystem() {
        reader = new InputReader();
        responder = new Responder();
        running = true;
    }

    public void start() {
        printWelcome();

        while (running) {
            String input = reader.getInput("> ");
            if (input == null) continue;
            input = input.trim().toLowerCase();

            if (input.equals("bye") || input.equals("exit")) {
                running = false;
                printGoodbye();
            } else {
                String response = responder.generateResponse(input);
                System.out.println(response);
            }
        }
    }

    private void printWelcome() {
        System.out.println("== Selamat datang di Bantuan Sistem Akademik! ==");
        System.out.println("Kami akan membantu Anda menyelesaikan kendala pengisian FRS.");
        System.out.println("Ketik 'bye' untuk keluar dari sistem.");
        System.out.println("------------------------------------------------------------");
    }

    private void printGoodbye() {
        System.out.println("Terima kasih telah menggunakan Bantuan Sistem Akademik. Semoga sukses di semester ini!");
    }

    public static void main(String[] args) {
        SupportSystem system = new SupportSystem();
        system.start();
    }
}

Kegunaan:
Kelas utama yang mengontrol seluruh jalannya program — mulai dari menampilkan sambutan, membaca input, mengolah respon, hingga menutup sistem.

Atribut:

  • InputReader reader – untuk membaca input pengguna.
  • Responder responder – untuk menghasilkan respon otomatis.
  • boolean running – status apakah sistem masih berjalan.

Method utama:

  • start() – loop utama program, membaca input dan menampilkan respon.
  • printWelcome() – menampilkan pesan pembuka.
  • printGoodbye() – menampilkan pesan penutup.
  • main() – titik awal eksekusi program.

Hubungan:

  • Membuat objek InputReader dan Responder.
  • Menggunakan keduanya untuk interaksi dua arah antara pengguna dan sistem.

B. Class InputReader

import java.util.Scanner;

public class InputReader {
    private Scanner scanner;

    public InputReader() {
        scanner = new Scanner(System.in);
    }

    public String getInput(String prompt) {
        System.out.print(prompt);
        return scanner.nextLine();
    }
}

Kegunaan:

Bertanggung jawab membaca masukan teks dari pengguna melalui konsol (keyboard).

Atribut:

  • Scanner scanner – objek untuk membaca input dari System.in.

Method:

  • getInput(String prompt) – menampilkan prompt dan mengembalikan string input pengguna.

Hubungan:

  • Dipanggil oleh SupportSystem untuk mendapatkan teks input dari pengguna.

C. Class Responder

import java.util.*;

public class Responder {
    private Map<String, String> responseMap;
    private String[] defaultResponses;
    private Random random;

    public Responder() {
        responseMap = new HashMap<>();
        random = new Random();

        responseMap.put("kelas penuh", 
            "Kelas yang Anda pilih sudah penuh. Silakan cari kelas lain atau hubungi dosen pengampu untuk kuota tambahan.");
        responseMap.put("prasyarat", 
            "Anda belum memenuhi prasyarat mata kuliah ini. Pastikan sudah lulus mata kuliah pendukungnya.");
        responseMap.put("jadwal bentrok", 
            "Kelas ini bentrok dengan jadwal lain. Coba pilih sesi atau hari berbeda.");
        responseMap.put("sks melebihi", 
            "Jumlah SKS Anda melebihi batas maksimum semester ini. Kurangi mata kuliah agar sesuai aturan.");
        responseMap.put("nrp salah", 
            "NRP yang Anda masukkan tidak valid. Periksa kembali format dan panjang NRP Anda.");
        responseMap.put("ipk rendah", 
            "IPK Anda tidak memenuhi syarat untuk mengambil jumlah SKS yang diminta. Konsultasikan dengan dosen wali.");
        responseMap.put("kelas tidak tersedia", 
            "Kelas ini tidak ditawarkan semester ini. Periksa daftar mata kuliah aktif di sistem.");
        responseMap.put("kelas tersedia tidak penuh", 
            "Kelas belum penuh, tetapi Anda tidak dapat mendaftar karena jadwal bentrok atau prasyarat belum terpenuhi.");
        responseMap.put("nama kelas tidak ditemukan", 
            "Nama atau kode kelas tidak dikenali. Pastikan ejaan sesuai data akademik.");
        responseMap.put("sistem error", 
            "Server FRS mengalami gangguan sementara. Silakan coba lagi nanti.");
        responseMap.put("mata kuliah sudah diambil", 
            "Anda sudah mengambil mata kuliah ini sebelumnya. Hanya bisa diulang jika statusnya 'mengulang'.");
        responseMap.put("masa frs berakhir", 
            "Periode pengisian FRS telah berakhir. Hubungi bagian akademik untuk perpanjangan waktu.");
        responseMap.put("akses ditolak", 
            "Anda tidak memiliki hak akses untuk fitur ini. Pastikan akun Anda aktif sebagai mahasiswa.");
        responseMap.put("server sibuk", 
            "Server sedang sibuk karena banyak pengguna. Silakan coba lagi beberapa menit kemudian.");
        responseMap.put("belum bayar", 
            "Anda belum melakukan pembayaran UKT atau SKS. Silakan selesaikan pembayaran terlebih dahulu.");

        defaultResponses = new String[] {
            "Silakan jelaskan masalah FRS Anda dengan lebih spesifik.",
            "Apakah Anda sudah mencoba logout dan login ulang?",
            "Pastikan koneksi internet Anda stabil lalu coba lagi.",
            "Masalah Anda menarik, bisa dijelaskan lebih rinci?"
        };
    }

    public String generateResponse(String input) {
        for (String key : responseMap.keySet()) {
            if (input.contains(key)) {
                return responseMap.get(key);
            }
        }
        return defaultResponses[random.nextInt(defaultResponses.length)];
    }
}

Kegunaan:
Berisi daftar masalah dan solusi terkait sistem FRS.
Kelas ini mengidentifikasi kata kunci dari input pengguna dan menghasilkan respon yang sesuai.

Atribut:

  • Map<String, String> responseMap – menyimpan pasangan kata kunci → respon.
  • Random random – digunakan untuk memilih jawaban acak bila tidak ada kecocokan.
  • String[] defaultResponses – jawaban generik bila masalah tidak dikenali.

Method:

  • generateResponse(String input) – mencari kata kunci dalam input dan mengembalikan respon yang sesuai.
    Jika tidak ada yang cocok, mengembalikan jawaban default.

Hubungan:

  • Dipanggil oleh SupportSystem untuk memproses input pengguna dan memberikan solusi.

D. Output

Jika input pengguna tidak spesifik (sistem akan memberi perintah kepada user untuk menjelaskan masalah FRSnya dengan lebih spesifik). Salah satu contohnya :


Jika input pengguna sudah spesifik :

1. Kelas penuh

2. Prasyarat


3. Jadwal bentrok


4. SKS melebihi


5. NRP salah


6. IPK rendah

7. Kelas tidak tersedia

8. Kelas tersedia tidak penuh

9. Nama kelas tidak ditemukan

10. Sistem error

11. Mata kuliah sudah diambil

12. Masa FRS berakhir

13. Akses ditolak

14. Server sibuk

15. Belum bayar

16. Keluar


E. Kesimpulan

Dari kelas hari ini saya belajar:

  • Cara mengimplementasikan konsep OOP dengan membagi tanggung jawab tiap kelas.
  • SupportSystem sebagai pengontrol utama, InputReader sebagai penerima input, dan Responder sebagai pemberi respon.
  • Cara membuat pemetaan masalah akademik (FRS) ke dalam sistem otomatis berbasis teks.
  • Struktur ini mudah dikembangkan menjadi chatbot sederhana untuk layanan akademik kampus.

Tidak ada komentar:

Posting Komentar

Pertemuan 16 - Membuat Aplikasi CRUD Java

 Nama          : Safa Mashita  NRP            : 5025241022 Membuat Aplikasi CRUD Java - Manajemen Buku Perpustakaan Pada pertemuan ini, saya...