Nama : Safa Mashita
NRP : 5025241022
Pertemuan 5 - Aplikasi Sistem Pengambilan Mata Kuliah
A. Visualisasi Hubungan
Penjelasan :
Main → Semua class
Main jadi pusat kontrol (entry point), semua interaksi user lewat sini.-
Classroom ↔ Matakuliah
Satu matakuliah bisa punya banyak kelas (misal JK Senin & Rabu). -
Classroom ↔ Dosen
Satu kelas diajar satu dosen, tapi dosen bisa mengajar banyak kelas. -
Classroom ↔ Mahasiswa
Relasi many-to-many: mahasiswa bisa ambil banyak kelas, kelas bisa diikuti banyak mahasiswa. -
Mahasiswa ↔ Main
Mahasiswa login lewat Main, lalu akses data kelas, dosen, dan matakuliah.
B. Alur Sistem FRS
1. Login
-
User (mahasiswa) harus login terlebih dahulu pakai NRP, Nama, dan Password.
-
Kalau cocok dengan data di sistem : masuk.
-
Kalau salah : gagal login.
-
(1) Lihat Daftar Mata Kuliah : tampilkan semua kelas yang tersedia (info singkat: kode, nama, kapasitas).
-
(2) Lihat Daftar Mahasiswa di Suatu Kelas : pilih kelas, lalu tampilkan daftar mahasiswa yang sudah daftar kelas itu.
-
(3) Cari Mata Kuliah : masukkan kata kunci (nama/kode), sistem menampilkan kelas yang cocok.
-
(4) Registrasi Mata Kuliah : pilih kelas dari daftar, lalu sistem akan menambahkan mahasiswa ke kelas itu (jika belum penuh & belum terdaftar).
-
(5) Drop Mata Kuliah : lihat daftar kelas yang sudah diambil, pilih salah satu untuk di-drop.
-
(6) Lihat Riwayat KRS : tampilkan semua kelas yang sudah diambil oleh mahasiswa yang sedang login.
-
(7) Keluar : keluar dari sistem.
C. Code dan Penjelasan
Ada 5 class dalam sistem ini:
-
Mahasiswa : Menyimpan data mahasiswa & kelas yang diambil.
-
Dosen : Menyimpan data dosen pengajar.
-
Matakuliah : Menyimpan data matakuliah.
-
Classroom : Representasi kelas (gabungan matakuliah + dosen + jadwal + peserta).
-
Main : Mengatur jalannya program (menu, login, registrasi, drop, dll).
1. Mahasiswa.java
import java.util.ArrayList;
public class Mahasiswa {
private String nrp;
private String nama;
private String password;
private ArrayList<Classroom> kelasDiambil;
public Mahasiswa(String nrp, String nama, String password) {
this.nrp = nrp;
this.nama = nama;
this.password = password;
this.kelasDiambil = new ArrayList<>();
}
public String getNrp() { return nrp; }
public String getNama() { return nama; }
public String getPassword() { return password; }
public ArrayList<Classroom> getKelasDiambil() { return kelasDiambil; }
public void tambahKelas(Classroom c) {
if (!kelasDiambil.contains(c)) {
kelasDiambil.add(c);
}
}
public void hapusKelas(Classroom c) {
kelasDiambil.remove(c);
}
}
Kegunaan:
Mewakili data mahasiswa dan kelas-kelas yang diambilnya.
Atribut:
-
nrp: Nomor registrasi mahasiswa, unik untuk setiap mahasiswa. -
nama: Nama mahasiswa. -
password: Password untuk login ke sistem. -
kelasDiambil: List (ArrayList) dariClassroomyang sudah diambil mahasiswa.
Method:
-
Constructor
Mahasiswa(String nrp, String nama, String password): Membuat objek mahasiswa baru dan menginisialisasi daftar kelas kosong. -
getNrp(),getNama(),getPassword(): Mengambil atribut masing-masing. -
getKelasDiambil(): Mengembalikan list kelas yang diambil mahasiswa. -
tambahKelas(Classroom c): Menambahkan kelas ke daftar kelas mahasiswa jika belum ada. -
hapusKelas(Classroom c): Menghapus kelas dari daftar kelas mahasiswa.
Hubungan:
Mahasiswa bisa mengambil banyak Classroom. Jadi, Mahasiswa punya relasi many-to-many dengan Classroom (seorang mahasiswa bisa ikut banyak kelas, satu kelas bisa diikuti banyak mahasiswa).
2. Dosen.java
public class Dosen {
private String nama;
public Dosen(String nama) {
this.nama = nama;
}
public String getNama() { return nama; }
}
Kegunaan:
Mewakili data dosen pengajar.
Atribut:
-
nama: Nama dosen.
Method:
-
Constructor
Dosen(String nama): Membuat objek dosen baru. -
getNama(): Mengambil nama dosen.
Hubungan:
Setiap Classroom memiliki satu Dosen sebagai pengajar. Jadi, Classroom memiliki satu Dosen.
3. MataKuliah.java
public class Matakuliah {
private String kode;
private String nama;
public Matakuliah(String kode, String nama) {
this.kode = kode;
this.nama = nama;
}
public String getKode() { return kode; }
public String getNama() { return nama; }
}
Kegunaan:
Mewakili data mata kuliah.
Atribut:
-
kode: Kode mata kuliah, misal IF101. -
nama: Nama mata kuliah, misal "Jaringan Komputer".
Method:
-
Constructor
Matakuliah(String kode, String nama): Membuat mata kuliah baru. -
getKode(),getNama(): Mengambil kode dan nama mata kuliah.
Hubungan:
Setiap Classroom mengaitkan satu Matakuliah. Jadi, Classroom memiliki satu Matakuliah.
4. Classroom.java
import java.util.ArrayList;
public class Classroom {
private Matakuliah matakuliah;
private Dosen dosen;
private String jadwal;
private int kapasitas;
private ArrayList<Mahasiswa> peserta;
public Classroom(Matakuliah mk, Dosen dosen, String jadwal, int kapasitas) {
this.matakuliah = mk;
this.dosen = dosen;
this.jadwal = jadwal;
this.kapasitas = kapasitas;
this.peserta = new ArrayList<>();
}
public Matakuliah getMatakuliah() { return matakuliah; }
public Dosen getDosen() { return dosen; }
public String getJadwal() { return jadwal; }
public int getKapasitas() { return kapasitas; }
public ArrayList<Mahasiswa> getPeserta() { return peserta; }
public boolean tambahPeserta(Mahasiswa m) {
if (peserta.size() < kapasitas && !peserta.contains(m)) {
peserta.add(m);
m.tambahKelas(this);
return true;
}
return false;
}
public void hapusPeserta(Mahasiswa m) {
peserta.remove(m);
m.hapusKelas(this);
}
public String infoSingkat() {
return matakuliah.getKode() + " - " + matakuliah.getNama() +
" | Kapasitas: " + peserta.size() + "/" + kapasitas;
}
public String infoLengkap() {
return matakuliah.getKode() + " - " + matakuliah.getNama() + "\n" +
"Dosen : " + dosen.getNama() + "\n" +
"Jadwal : " + jadwal;
}
}
Kegunaan:
Mewakili sebuah kelas dari mata kuliah tertentu, termasuk jadwal, dosen, dan peserta.
Atribut:
-
matakuliah: ObjekMatakuliahdari kelas ini. -
dosen: ObjekDosenpengajar. -
jadwal: Waktu pelaksanaan kelas, misal "Senin 08:00". -
kapasitas: Batas maksimal mahasiswa yang bisa ikut. -
peserta: List (ArrayList) mahasiswa yang sudah mendaftar.
Method:
-
Constructor
Classroom(Matakuliah mk, Dosen dosen, String jadwal, int kapasitas):Membuat kelas baru. -
getMatakuliah(),getDosen(),getJadwal(),getKapasitas(),getPeserta(): Mengambil masing-masing atribut. -
tambahPeserta(Mahasiswa m): Menambahkan mahasiswa ke kelas jika kapasitas belum penuh, juga menambahkan kelas ke daftar mahasiswa. -
hapusPeserta(Mahasiswa m): Menghapus mahasiswa dari kelas dan dari daftar kelas mahasiswa. -
infoSingkat(): Menampilkan ringkasan info kelas (kode, nama, kapasitas terisi). -
infoLengkap(): Menampilkan info detail kelas (kode, nama, dosen, jadwal).
Hubungan:
-
Classroommengaitkan 1 Matakuliah, 1 Dosen, dan banyak Mahasiswa.
5. Main.java
import java.util.*;
public class Main {
private static ArrayList<Mahasiswa> daftarMahasiswa = new ArrayList<>();
private static ArrayList<Classroom> daftarKelas = new ArrayList<>();
private static Scanner sc = new Scanner(System.in);
private static Mahasiswa currentUser;
public static void main(String[] args) {
seedData();
if (login()) {
int pilihan;
do {
System.out.println("\n=== MENU SISTEM FRS ===");
System.out.println("1. Lihat Daftar Mata Kuliah");
System.out.println("2. Lihat Daftar Mahasiswa di Suatu Kelas");
System.out.println("3. Cari Mata Kuliah");
System.out.println("4. Registrasi Mata Kuliah");
System.out.println("5. Drop Mata Kuliah");
System.out.println("6. Lihat Riwayat KRS");
System.out.println("7. Keluar");
System.out.print("Pilih menu: ");
pilihan = sc.nextInt();
sc.nextLine();
switch (pilihan) {
case 1: lihatDaftarMK(); break;
case 2: lihatMahasiswaDalamKelas(); break;
case 3: cariMK(); break;
case 4: registrasiMK(); break;
case 5: dropMK(); break;
case 6: lihatRiwayat(); break;
case 7: System.out.println("Terima kasih!"); break;
default: System.out.println("Pilihan tidak valid");
}
} while (pilihan != 7);
}
}
private static boolean login() {
System.out.println("=== LOGIN SISTEM FRS ===");
System.out.print("NRP : ");
String nrp = sc.nextLine();
System.out.print("Nama : ");
String nama = sc.nextLine();
System.out.print("Password : ");
String pass = sc.nextLine();
for (Mahasiswa m : daftarMahasiswa) {
if (m.getNrp().equals(nrp) && m.getNama().equals(nama) && m.getPassword().equals(pass)) {
currentUser = m;
System.out.println("\nLogin berhasil, selamat datang " + m.getNama() + "!");
lihatRiwayat();
return true;
}
}
System.out.println("Login gagal. Data tidak cocok.");
return false;
}
private static void lihatDaftarMK() {
System.out.println("\n=== Daftar Mata Kuliah ===");
int i = 1;
for (Classroom c : daftarKelas) {
System.out.println(i++ + ". " + c.infoSingkat());
}
}
private static void lihatMahasiswaDalamKelas() {
lihatDaftarMK();
System.out.print("Pilih nomor kelas: ");
int idx = sc.nextInt(); sc.nextLine();
if (idx > 0 && idx <= daftarKelas.size()) {
Classroom c = daftarKelas.get(idx-1);
System.out.println("\nMahasiswa di " + c.getMatakuliah().getKode() + " - " + c.getMatakuliah().getNama() + ":");
if (c.getPeserta().isEmpty()) {
System.out.println("Belum ada mahasiswa terdaftar.");
} else {
for (Mahasiswa m : c.getPeserta()) {
System.out.println(m.getNrp() + " - " + m.getNama());
}
}
}
}
private static void cariMK() {
System.out.print("Masukkan kata kunci mata kuliah: ");
String key = sc.nextLine().toLowerCase();
for (Classroom c : daftarKelas) {
if (c.getMatakuliah().getNama().toLowerCase().contains(key) ||
c.getMatakuliah().getKode().toLowerCase().contains(key)) {
System.out.println(c.infoSingkat());
}
}
}
private static void registrasiMK() {
lihatDaftarMK();
System.out.print("Pilih nomor kelas untuk registrasi: ");
int idx = sc.nextInt(); sc.nextLine();
if (idx > 0 && idx <= daftarKelas.size()) {
Classroom c = daftarKelas.get(idx-1);
if (c.tambahPeserta(currentUser)) {
System.out.println("\nRegistrasi berhasil!");
System.out.println(c.infoLengkap());
} else {
System.out.println("Gagal registrasi. Mungkin kelas penuh atau sudah terdaftar.");
}
}
}
private static void dropMK() {
lihatRiwayat();
System.out.print("Pilih nomor kelas untuk drop: ");
int idx = sc.nextInt(); sc.nextLine();
if (idx > 0 && idx <= currentUser.getKelasDiambil().size()) {
Classroom c = currentUser.getKelasDiambil().get(idx-1);
c.hapusPeserta(currentUser);
System.out.println("Berhasil drop kelas " + c.getMatakuliah().getNama());
}
}
private static void lihatRiwayat() {
System.out.println("\n=== Riwayat KRS " + currentUser.getNama() + " ===");
ArrayList<Classroom> list = currentUser.getKelasDiambil();
if (list.isEmpty()) {
System.out.println("Belum ada mata kuliah yang diambil.");
} else {
int i = 1;
for (Classroom c : list) {
System.out.println(i++ + ". " + c.infoLengkap());
}
}
}
private static void seedData() {
// Daftar mahasiswa dummy
daftarMahasiswa.add(new Mahasiswa("5025241022", "Safa Mashita", "hai123"));
daftarMahasiswa.add(new Mahasiswa("5025241023", "Andi Prasetyo", "andi123"));
daftarMahasiswa.add(new Mahasiswa("5025241024", "Budi Santoso", "budi123"));
// Daftar mata kuliah
Matakuliah jk = new Matakuliah("IF101", "Jaringan Komputer");
Matakuliah tg = new Matakuliah("IF102", "Teori Graf");
Matakuliah kppl = new Matakuliah("IF103", "Konsep Pengembangan Perangkat Lunak");
Matakuliah pw = new Matakuliah("IF104", "Pemrograman Web");
daftarKelas.add(new Classroom(jk, new Dosen("Royyana Muslim Ijtihadie, S.Kom, M.Kom, Ph.D"), "Senin 08:00", 40));
daftarKelas.add(new Classroom(jk, new Dosen("Dr. Baskoro Adi P., S.Kom., M.Kom."), "Rabu 10:00", 40));
daftarKelas.add(new Classroom(tg, new Dosen("Victor Hariadi, S.Si., M.Kom."), "Selasa 09:00", 30));
daftarKelas.add(new Classroom(tg, new Dosen("Arya Yudhi Wijaya, S.Kom, M.Kom."), "Kamis 13:00", 30));
daftarKelas.add(new Classroom(kppl, new Dosen("Dr. Sarwosri, S.Kom., MT."), "Senin 13:00", 35));
daftarKelas.add(new Classroom(kppl, new Dosen("Dr. Adhatus Solichah Ahmadiyah, S.Kom., M.Sc."), "Jumat 09:00", 35));
daftarKelas.add(new Classroom(pw, new Dosen("Fajar Baskoro, S.Kom., MT."), "Selasa 13:00", 40));
daftarKelas.add(new Classroom(pw, new Dosen("Misbakhul Munir Irfan Subakti, S.Kom., M.Sc."), "Kamis 10:00", 40));
}
}
Kegunaan:
-
Menjadi program utama untuk menjalankan sistem FRS melalui menu interaktif.
-
Mengelola login, menampilkan daftar mata kuliah, registrasi, drop kelas, dan riwayat KRS mahasiswa.
Atribut:
-
daftarMahasiswa: List semua mahasiswa. -
daftarKelas: List semua kelas (Classroom). -
currentUser: Mahasiswa yang sedang login. -
sc: Scanner untuk input dari user.
Method:
-
main(): Menjalankan program. -
login(): Autentikasi mahasiswa. -
lihatDaftarMK(): Menampilkan semua kelas. -
lihatMahasiswaDalamKelas(): Menampilkan mahasiswa di kelas tertentu. -
cariMK(): Mencari mata kuliah berdasarkan keyword. -
registrasiMK(): Menambahkan mahasiswa ke kelas. -
dropMK(): Menghapus mahasiswa dari kelas. -
lihatRiwayat(): Menampilkan daftar kelas yang diambil mahasiswa. -
seedData(): Mengisi data dummy mahasiswa, matakuliah, dosen, dan kelas untuk simulasi.
Hubungan:
Main menggunakan semua kelas (Mahasiswa, Classroom, Matakuliah, Dosen) untuk mewakili sistem FRS secara utuh.
D. Output
(4) Registrasi Mata Kuliah
(5) Drop Mata Kuliah
(6) Lihat Riwayat KRS
Tidak ada komentar:
Posting Komentar