Anda di halaman 1dari 38

[CLASS CONTAINER]

Disusun oleh:
Nur Cahyo Wibowo, S.Kom, M.Kom

FAKULTAS ILMU KOMPUTER


PROGRAM STUDI SISTEM INFORMASI
UPN “VETERAN” JAWA TIMUR
2021

Hal. 1
[CLASS CONTAINER]

DAFTAR ISI

1. Pendahuluan
2. Konsep Class Container
3. Contoh Program Class Container
4. Hasil Running Aplikasi
5. Penutup

Hal. 2
[CLASS CONTAINER]

1. PENDAHULUAN
Adakalanya relasi asosiasi antar class melibatkan tidak hanya
satu buah object. Situasi ini bisa terjadi baik pada relasi asosiasi
agregasi, maupun yang komposisi. Contoh dalam kehidupan
nyata misalnya Pak Budi yang memiliki tiga buah sepatu
(agregasi), atau rumah yang di dalamnya terdapat lima buah
kamar (komposisi). Untuk menerapkan model relasi seperti ini,
digunakanlah teknik class container, dimana di dalam sebuah
class bisa menampung beberapa object yang berasal dari sebuah
class sekaligus.

Mungkin modul ini masih terdapat banyak kekurangan dalam


penulisan atau pembuatan programnya. Oleh sebab itu, saran
dan masukan dari para pembaca sangat diharapkan. Semoga
modul yang singkat ini bisa memberikan manfaat yang
sebanyak-banyaknya.

Penulis.

Hal. 3
[CLASS CONTAINER]

2. KONSEP CLASS CONTAINER


Sepertinya istilah class container mempunyai kesamaan sifat
sebagaimana kata container ketika dikaitkan dengan truk yang
biasanya kita jumpai di jalan raya. Atau seperti kata kontainer
ketika disambungkan dengan box yang biasa kita temui di
rumah atau di toko. Keduanya berfungsi sebagai wadah untuk
menyimpan banyak (item) barang. Prinsip inilah yang diadopsi
oleh class container; yaitu sebuah class yang bisa menyimpan
banyak object sekaligus dari class lain.

Object-object class lain yang disimpan di dalam sebuah class


container tersebut bukan berupa object tunggal yang dibuat/
dideklarasikan dalam jumlah banyak. Namun, object-object
tersebut ditampung dalam wadah berupa array/ larik.
Sederhananya, implementasi class container adalah berupa
adanya array of object di dalam class tersebut. Hal ini mirip
dengan penerapan relasi one to many dalam konsep basis data.
Ilustrasinya seperti gambar di bawah ini.

Methods

Var1 Var2 Var3

Obj1 Obj2 Obj3 Obj4 Obj5

Gambar 1. Ilustrasi Struktur Class Container


Hal. 4
[CLASS CONTAINER]

Gambar di atas menunjukkan visualisasi struktur class container,


dimana di dalamnya terdapat beberapa atribut yang terdiri dari
tiga buah variabel biasa dengan tipe dasar, dan satu buah array
berisikan lima object dari class lain. Kelima object tersebut
berasal dari class yang sama. Di dalam class container
dimungkinkan pula mempunyai lebih dari satu array of object.
Tentunya situasi seperti ini berdasarkan hasil kajian terhadap
system/ aplikasi yang akan dibuat.

Contoh Nyata Class Container


Sangat banyak contoh nyata dalam kehidupan sehari-hari yang
menerapkan konsep class container. Misalnya smartphone
dimana aplikasi (app) merupakan object-nya. Banyak aplikasi
bisa dipasang/ ditambahkan (install) ke dan bisa dilepas/ dihapus
(uninstall) dari smartphone tersebut. Kotak CPU adalah class
container dengan aneka ragam komponen hardware yang ada di
dalamnya sebagai object-objectnya. Harddisk itu sendiri juga
bisa dipandang sebagai class container dimana file menjadi
object-nya. Sebuah harddisk mampu menyimpan sekian banyak
file. File bisa ditambahkan dan dihapus sesuai kebutuhannya
pengguna.

Di dalam rumah pun dapat dijumpai implementasi konsep class


container. Sepeda motor yang bisa dibuat boncengan itu pada
prinsipnya adalah bentuk class container dengan pengemudi dan
penumpangnya sebagai object. Sebuah mobil lebih jelas lagi.
Mobil sebagai class container-nya, sedangkan para penumpang
sebagai array of object-nya. Akuarium juga merupakan class
container dimana ikan-ikannya menjadi kumpulan object yang
ada di dalamnya. Meja makan adalah class container dengan
Hal. 5
[CLASS CONTAINER]

nasi, sayur, lauk (makanan) yang ada di atasnya. Lemari pakaian


adalah class container juga dengan tumpukan baju sebagai
kumpulan object-nya.

Sebuah kompleks pertokoan atau pasar adalah class container,


dimana kios-kios atau lapak-lapak adalah array of object-nya.
Lemari rak etalase dapat juga dipandang sebagai class container
dengan barang-barang yang dijual sebagai object-object-nya.
Nota/ struk pembelian dapat dipandang juga sebagai class
container, dimana dalam satu transaksi bisa berisikan sekaligus
beberapa item barang yang dijual. Lemari pendingin juga
sebuah container dimana botol-botol minuman yang dijual di
dalamnya sebagai array of object-nya.

Kampus adalah class container dengan fakultas-fakultas sebagai


object-nya. Fakultas adalah class container dengan beberapa
program studi sebagai object-nya. Dan program studi adalah
class container dimana para mahasiswa menjadi array of object
yang dimilikinya. Gedung kuliah adalah class container dengan
ruang-ruang kelas, laboratorium sebagai kumpulan object-
object-nya. Ruang kelas bisa dipandang sebagai class container
dengan sekian banyak kursi sebagai object-nya. Laboratorium
pun dapat berperan sebagai class container dimana sejumlah
komputer di dalamnya sebagai array of object.

Dalam aplikasi system informasi akademik yang dikembangkan


dalam serial modul ini, salah satu contoh implementasi class
container-nya adalah Kartu Rencana Studi (KRS) mahasiswa.
Dimana dalam implementasinya nanti, sebuah object KRS akan
berisikan informasi mahasiswa, dan daftar mata kuliah apa saja
Hal. 6
[CLASS CONTAINER]

yang diprogram oleh mahasiswa yang bersangkutan di semester


tertentu. Daftar mata kuliah tersebutlah yang dapat dipandang
sebagai array of object; kumpulan beberapa object dari sebuah
class yang sama, yaitu class mata kuliah. Contoh ilustrasinya
seperti gambar di bawah ini.

Kartu Rencana Studi


Semester 2
Mahasiswa
1535010111 Budi 3.45

Daftar Mata Kuliah


SI1111 BP2 3
SI1112 Basis Data 3
SI1113 Matematika 3
SI1114 Pendidikan Agama 2
SI1115 Bahasa Inggris 2

Gambar 2. Class Container Kartu Rencana Studi.

Hal. 7
[CLASS CONTAINER]

3. CONTOH PROGRAM CLASS CONTAINER


Di bagian ini akan dibahas langkah-langkah untuk mengubah/
mengembangkan program yang sudah dibuat sesuai modul
terdahulu (Modul 18 Relasi Asosiasi) sehingga memiliki class
yang mampu berperan sebagai class container. Class yang
dimaksud adalah class KRS yang sebelumnya sudah memiliki
sebuah object dari class mahasiswa dan sebuah object dari class
mata kuliah. Untuk menjadi class kontainer, maka object class
mata kuliah akan diubah menjadi array. Berikut ini tahapan
modifikasinya.

a. Mengubah isi class KRS.


Perubahannya antara lain yaitu mengubah object mata kuliah
menjadi array. Menambahkan variabel counter jmk untuk
menyimpan jumlah object mata kuliah di dalam array.
Membuat variabel totalsks untuk pengendali jumlah sks
yang diambil oleh mahasiswa. Nilai totalsks akan berubah
saat dijalankan proses penambahan dan penghapusan mata
kuliah sejumlah SKS masing-masing mata kuliah.

Source code di dalam constructor juga perlu dimodifikasi


khususnya untuk mengakomodasi pembuatan array of object
mata kuliah saat inisialisasi object KRS. Kemudian method
setter dan getter object mata kuliah juga disesuaikan dengan
tipe yang berupa array. Untuk variabel baru jmk (jumlah
mata kuliah) dan totalsks bisa dibuatkan method getter-nya,
namun tidak harus dibuat method setter-nya karena
perubahan nilainya cukup dijalankan dari dalam class KRS
saja; tidak perlu dijalankan dari luar class.

Hal. 8
[CLASS CONTAINER]

Method query juga mengalami perubahan source code,


karena data object mata kuliah yang ditampilkan tidak lagi
tunggal, tetapi sudah berupa array. Sehingga diperlukan
penggunaan blok perintah perulangan yang dikombinasikan
dengan teknik rekursi implisit untuk menyusun teks string
yang akan dikirimkan saat method tersebut dipanggil.
Modifikasi di method query terlihat lebih efisien jika
dibandingkan harus memanggil satu per satu method getter
oleh class lain.

Terakhir, ditambahkan dua buah method baru, yaitu untuk


menangani transaksi/ proses penambahan dan penghapusan
mata kuliah. Mehod baru ini berfungsi untuk menambahkan
object baru ke dalam array mata kuliah, dan menghapus
object yang sudah ada di dalam array mata kuliah. Method
setter (dan getter) lebih berperan untuk operasi duplikasi
(copy) array of object secara keseluruhan; bukan lagi satuan
sebagaimana versi aplikasi sebelumnya. Oleh karena itu
perlu dibuatkan method khusus untuk menangani proses
yang memanipulasi object mata kuliah secara satuan.

Catatan: perlu mekanisme tambahan untuk melakukan


penghapusan elemen array of object; yaitu menggeser satu
indeks ke depan semua elemen-elemen di belakang posisi
yang dihapus. Posisi elemen terakhir array kemudian di-null-
kan untuk membuatnya menjadi kosong. Ilustrasi prosesnya
seperti gambar berikut ini.

12 33 21 65 45 37 88

Hal. 9
[CLASS CONTAINER]

Jika elemen dengan data 65 dihapus, maka elemen 45 akan


menempati posisi elemen 65, elemen 37 akan menempati
posisi elemen 45, dan elemen 88 akan menempati posisi
elemen 37. Sedangkan posisi elemen 88 (paling belakang)
akan dikosongkan untuk ditempati data baru nantinya.

Berikut ini adalah contoh source code class KRS yang sudah
dimodifikasi dengan menambahkan array of object mata
kuliah untuk mengakomodasi penerapan class KRS sebagai
class container.

class cKRS{
private cMhs mhs;
//array of objects mata kuliah
private cMatkul mk[];
//counter indeks array matkul
private int jmk;
private int totalsks;
private String semester;
cKRS(){
mhs=null; mk=new cMatkul[10];
jmk=0; totalsks=0;
System.out.println("Object KRS dibuat...");
}
public void tambahMatkul(cMatkul m){
if((totalsks+m.getSKS()<=20)){
mk[jmk]=m;
jmk++;
totalsks=totalsks+m.getSKS();
System.out.println("Tambah MK Sukses...");
Hal. 10
[CLASS CONTAINER]

}
else{
System.out.println("Total SKS Melebihi Batas!");
}
}
public void hapusMatkul(String kd){
boolean ada=false;
for (int i = 0; i < jmk; i++) {
if(kd.equalsIgnoreCase(mk[i].getKodeMK())){
ada=true;
totalsks=totalsks-mk[i].getSKS();
mk[i]=null;
//majukan elemen2 array di belakang
//untuk mengisi elemen yg dihapus
for (int j = i; j < jmk; j++) {
//elemen terakhir diisi null
if(j==jmk-1)
mk[j]=null;
else
//majukan elemen di belakangnya
mk[j]=mk[j+1];
}
jmk--;
System.out.println("Hapus MK Sukses!");
break;
}
}
if(ada==false){
System.out.println("Kode MK Tidak Ada!");
}
Hal. 11
[CLASS CONTAINER]

}
public void setMhs(cMhs m){
mhs=m;
}
public void setMatkul(cMatkul[] m){
mk=m;
}
public void setSemester(String s){
semester=s;
}
public int getJMK(){
return jmk;
}
public int getTotalSks(){
return totalsks;
}
public cMhs getMhs(){
return mhs;
}
public cMatkul[] getMatkul(){
return mk;
}
public String getSemester(){
return semester;
}
public String ToString(){
String temp = "KRS Semester "+semester+" - ";
temp = temp + mhs.getNama();
temp = temp + "\tSKS : "+totalsks;
temp = temp + "\nNo. Kode\tNama MK\tSKS\n";
Hal. 12
[CLASS CONTAINER]

for (int i = 0; i < jmk; i++) {


temp = temp + (i+1)+" ";
temp = temp + mk[i].getKodeMK()+"\t";
temp = temp + mk[i].getNamaMK()+"\t";
temp = temp + mk[i].getSKS()+"\n";
}
return temp;
}
}

b. Mengubah source code di class aplikasi (main)


Bagian pertama yang diubah di dalam method main adalah
deklarasi object-object utama yang akan digunakan oleh
aplikasi. Object mata kuliah yang di aplikasi sebelumnya
berupa object tunggal (yang berarti hanya ada satu object
mata kuliah pada satu waktu), maka untuk mendukung
implementasi class container dimana object KRS dapat
menyimpan banyak mata kuliah secara bersamaan, maka
object mata kuliah tersebut diubah juga menjadi array of
object.

Object mahasiswa dan object KRS di dalam method Main


sebenarnya masih bisa berupa object tunggal. Namun untuk
implementasi class container yang lebih nyata, maka dalam
aplikasi kali ini kedua object tersebut juga diubah menjadi
array of object, meskipun untuk sementara dibatasi dalam
jumlah elemen yang sedikit.

Kemudian, sehubungan dengan adanya beberapa array di


method Main, maka ditambahkan juga beberapa variabel
Hal. 13
[CLASS CONTAINER]

pendukung untuk menyimpan indeks masing-masing array.


Termasuk juga variabel untuk menyimpan kapasitas
maksimal setiap array. Dan guna memudahkan/
mempercepat saat uji coba program, maka dibuat beberapa
object mahasiswa dan object mata kuliah di permulaan
program secara otomatis. Sehingga saat user menjalankan
aplikasi bisa langsung mencoba menu KRS tanpa perlu lagi
membuat kedua object tersebut dari awal. Efek dari
dibuatnya object uji coba ini adalah variabel jumlah object
harus diberi nilai awal yang sesuai dengan jumlah object uji
coba yang dibuat tersebut.

Berikut ini potongan awal source code di awal method main


yang ada di dalam class aplikasi.

public static void main(String[] args) {


Scanner sc = new Scanner(System.in);
cMhs mhs[]=new cMhs[3];
//buat object mhs uji coba
mhs[0]=new cMhs();
mhs[0].setNPM("123");
mhs[0].setNama("Budi");
mhs[0].setIPK(3.45);

cMatkul mk[]=new cMatkul[5];


//buat object matkul uji coba
mk[0]=new cMatkul();
mk[0].setKodeMK("111");
mk[0].setNamaMK("BP2");
mk[0].setSKS(3);
Hal. 14
[CLASS CONTAINER]

mk[1]=new cMatkul();
mk[1].setKodeMK("222");
mk[1].setNamaMK("Basdat");
mk[1].setSKS(3);

//satu object KRS utk 1 mhs dan banyak mata kuliah


cKRS krs[]=new cKRS[3];

//satu prodi bisa memiliki banyak mhs


cProdi prodi[]=new cProdi[2];
//buat object prodi uji coba
prodi[0]=new cProdi();
prodi[0].setKodeProdi("082");
prodi[0].setNamaProdi("Sistem Informasi");
prodi[0].setAkreditasi("B");

//variabel2 pendukung
int pilih, pilih2;
//untuk menyimpan indeks array object di Main
int jmhs, jmk, jkrs=0, jpro;
//untuk menyimpan jumlah elemen maksimal
//array of object di MAIN
int maxmhs=3, maxmk=5, maxkrs=3, maxpro=2;
//inisialisasi jumlah object tiap array
jmhs=1; jmk=2; jpro=1;

Setelah itu bagian yang perlu dimodifikasi adalah bagian


source code untuk menjalankan pilihan sub menu untuk
Mahasiswa, Mata Kuliah, dan KRS. Ini dilakukan sebagai

Hal. 15
[CLASS CONTAINER]

dampak diubahnya object tunggal class-class tersebut


menjadi array of object. Sub menu untuk tambah, ubah,
lihat, dan hapus object harus disesuaikan dengan perintah
yang mengoperasikan array.

Untuk menjaga integritas setiap object dari array, maka di


setiap operasi perlu dilakukan validasi data terlebih dulu.
Misalnya untuk penambahan object mahasiswa baru, maka
setelah dicek kapasitas array-nya, maka NPM-nya harus
dicek ke dalam array yang sudah ada. Jika belum ada NPM
yang sama, maka penambahan object baru bisa dilakukan.
Jika NPM sudah ada, maka user diminta untuk memasukkan
NPM baru lagi. Cara yang identik dilakukan untuk proses
ubah, hapus, dan lihat data mahasiswa. Berikut ini adalah
contoh potongan source code untuk menu Mahasiswa.

case 1:
System.out.println("Sub Menu Mahasiswa");
System.out.println("1. Tambah Mhs");
System.out.println("2. Hapus Mhs");
System.out.println("3. Update Data");
System.out.println("4. Cetak Data");
System.out.println("5. Query");
System.out.print("Pilih = ");
pilih2 = sc.nextInt();
switch(pilih2){
case 1:
System.out.println("== Tambah Mhs ==");
//jumlah mhs masih di bawah kapasitas maksimal
if(jmhs<maxmhs){
Hal. 16
[CLASS CONTAINER]

System.out.print("Masukkan Nama = ");


sc = new Scanner(System.in);
String nama = sc.nextLine();
String npm="";
//cek apakah NPM sdh dipakai
boolean sudahada;
do{
System.out.print("Masukkan NPM = ");
npm = sc.next();
sudahada=false;
for (int i = 0; i < jmhs; i++) {
if(mhs[i].getNPM().equalsIgnoreCase(npm)){
sudahada=true;
break;
}
}
if(sudahada){
System.out.println(" NPM Sudah Ada!");
}
}while(sudahada==true);
//simpan di array object mhs di MAIN
mhs[jmhs] = new cMhs(npm, nama);
jmhs++;
System.out.println("Penambahan Sukses");
}
else{
System.out.println("Kapasitas Penuh!");
}
break;
case 2:
Hal. 17
[CLASS CONTAINER]

System.out.println("== Hapus Mhs ==");


//jumlah object mhs harus minimal 1
if(jmhs>0){
System.out.print("Masukkan NPM = ");
String npm = sc.next();
//cari di array object mhs di MAIN
boolean ketemu=false;
for (int i = 0; i < jmhs; i++) {
if(mhs[i].getNPM().equalsIgnoreCase(npm)){
ketemu=true;
System.out.println("Data Ditemukan!");
System.out.println("Dihapus? 1.Ya, 2.Tidak");
System.out.print("Pilih = ");
pilih2 = sc.nextInt();
if(pilih2==1){
//hapus elemen array object di MAIN
mhs[i] = null;
//geser maju utk mengisi elemen yg dihapus
for (int j = i; j < jmhs; j++) {
if(j==jmhs-1)
mhs[j]=null;
else
mhs[j]=mhs[j+1];
}
jmhs--;
System.out.println("Penghapusan Sukses");
}
else System.out.println("Batal Hapus!");
break;
}
Hal. 18
[CLASS CONTAINER]

}
if(!ketemu){
System.out.println("NPM Tidak Ada!");
}
}
else System.out.println("Data Mhs Kosong!");
break;
case 3:
System.out.println("== Update Data ==");
//jumlah object mhs harus minimal 1
if(jmhs>0){
System.out.print("Masukkan NPM = ");
String npm = sc.next();
//cari NPM di array object di MAIN
boolean ketemu=false;
for (int i = 0; i < jmhs; i++) {
if(mhs[i].getNPM().equalsIgnoreCase(npm)){
ketemu=true;
System.out.println("Data Ditemukan!");
//skenarionya update ipk mhs
System.out.print("Masukkan IPK Baru = ");
double ip = sc.nextDouble();
System.out.println("Simpan? 1.Ya, 2.Tidak");
System.out.print("Pilih = ");
pilih2 = sc.nextInt();
if(pilih2==1){
//update elemen array object di MAIN
mhs[i].setIPK(ip);
System.out.println("Update Sukses");
}
Hal. 19
[CLASS CONTAINER]

else System.out.println("Batal Update!");


break;
}
}
if(!ketemu){
System.out.println("NPM Tidak Ada!");
}
}
else System.out.println("Data Mhs Kosong!");
break;
case 4:
System.out.println("== Lihat Data ==");
//object mhs harus ada dulu
if(jmhs>0){
System.out.println("No.\tNPM\tNama\tIPK");
for (int i = 0; i < jmhs; i++) {
System.out.print((i+1)+". ");
System.out.print(mhs[i].getNPM()+"\t");
System.out.print(mhs[i].getNama()+"\t");
System.out.println(mhs[i].getIPK());
}
}
else System.out.println("Data Mhs kosong!");
break;
case 5:
System.out.println("== Query Data ==");
//object mhs harus ada dulu
if(jmhs>0){
for (int i = 0; i < jmhs; i++) {
System.out.println(mhs[i].ToString());
Hal. 20
[CLASS CONTAINER]

}
}
else System.out.println("Data Mhs kosong!");
break;
}
break;

Dengan pola yang sama, modifikasi source code di menu


mahasiswa diterapkan juga terhadap menu mata kuliah.
Selanjutnya, modifikasi dilakukan terhadap source code di
dalam menu KRS. Modifikasi untuk sub menu KRS lebih
banyak dibandingkan menu Mahasiswa atau menu Mata
Kuliah, karena di dalam menu KRS terdapat validasi untuk
object mahasiswa dan variabel semester sekaligus sebagai
“primary key”-nya sebuah KRS. Selain itu, pilihan menu
Kartu Rencana Studi mahasiswa juga perlu disesuaikan dulu
dengan adanya array object mata kuliah untuk satu buah
object KRS. Bagian pertama sub menunya adalah untuk
mengelola KRS, dan bagian sub menu keduanya adalah
untuk mengelola daftar mata kuliah yang deprogram oleh
mahasiswa. Berikut ini adalah potongan source code untuk
menu KRS.

case 3:
System.out.println("Sub Menu KRS Mahasiswa");
System.out.println("1. Buat KRS Baru");
System.out.println("2. Hapus KRS");
System.out.println("3. Ambil Mata Kuliah");
System.out.println("4. Drop Mata Kuliah");
System.out.println("5. Cetak KRS");
Hal. 21
[CLASS CONTAINER]

System.out.print("Pilih = ");
pilih2 = sc.nextInt();
switch(pilih2){
case 1:
if(jkrs<maxkrs){
System.out.println("== Buat KRS Baru ==");
System.out.print("Masukkan NPM = ");
String npm = sc.next();
System.out.print("Masukkan Semester = ");
String smt = sc.next();
//validasi mhs ke array object di MAIN
boolean ketemu=false;
for (int i = 0; i < jmhs; i++) {
if(mhs[i]!=null &&
mhs[i].getNPM().equalsIgnoreCase(npm)){
ketemu=true;
krs[jkrs]=new cKRS();
krs[jkrs].setMhs(mhs[i]);
krs[jkrs].setSemester(smt);
jkrs++;
System.out.println("KRS Baru Sukses...");
break;
}
}
if(ketemu==false){
System.out.println("NPM Tidak Ada!");
}
} else{
System.out.println("Kapasitas KRS Penuh!");
}
Hal. 22
[CLASS CONTAINER]

break;
case 2:
if(jkrs>0){
System.out.println("== Hapus KRS ==");
System.out.print("Masukkan NPM = ");
String npm = sc.next();
System.out.print("Masukkan Semester = ");
String smt = sc.next();
//validasi mhs, dan semester
boolean ketemu=false;
for (int i = 0; i < jkrs; i++) {
if(krs[i]!=null &&
krs[i].getMhs().getNPM().equalsIgnoreCase(npm
)){
if(krs[i].getSemester().equalsIgnoreCase(smt)){
ketemu=true;
System.out.println("Dihapus? 1.Ya,
2.Tidak");
System.out.print("Pilih = ");
pilih2 = sc.nextInt();
if(pilih2==1){
//hapus elemen array object di MAIN
krs[i] = null;
//geser elemen array ke depan
int t=0;
for (int j = i; j < jkrs; j++) {
if(j==jkrs-1)
krs[j]=null;
else
krs[j]=krs[j+1];
Hal. 23
[CLASS CONTAINER]

}
jkrs--;
System.out.println("Hapus Sukses");
}
else System.out.println("Batal Hapus!");
break;
}
}
}
if(ketemu==false){
System.out.println("KRS Mhs Tidak Ada!");
}
}
else{
System.out.println("KRS Belum Ada!");
}
break;
case 3:
if(jkrs>0){
System.out.println("== Ambil Mata Kuliah ==");
System.out.print("Masukkan NPM = ");
String npm = sc.next();
System.out.print("Masukkan Semester = ");
String smt = sc.next();
//validasi mhs, semester, kode mk baru
boolean ketemu=false;
for (int i = 0; i < jkrs; i++) {
if(krs[i]!=null &&
krs[i].getMhs().getNPM().equalsIgnoreCase(npm
)){
Hal. 24
[CLASS CONTAINER]

if(krs[i].getSemester().equalsIgnoreCase(smt)){
ketemu=true;
System.out.print("Masukkan Kode MK = ");
String kd = sc.next();
//validasi kode MK ke array mk di MAIN
for (int j = 0; j < jmk; j++) {
if(mk[j]!=null &&
mk[j].getKodeMK().equalsIgnoreCase(kd
)){
System.out.println("Tambah? 1.Ya,
2.Tidak");
System.out.print("Pilih = ");
pilih2 = sc.nextInt();
if(pilih2==1){
//simpan ke array object MK di KRS
krs[i].tambahMatkul(mk[j]);
}
else System.out.println("Batal
Tambah!");
break;
}
}
break;
}
}
}
if(ketemu==false){
System.out.println("KRS Mhs Tidak Ada!");
}
}
Hal. 25
[CLASS CONTAINER]

else{
System.out.println("KRS Belum Ada!");
}
break;
case 5:
if(jkrs>0){
System.out.println("== Cetak KRS Mhs ==");
System.out.print("Masukkan NPM = ");
String npm = sc.next();
System.out.print("Masukkan Semester = ");
String smt = sc.next();
//validasi mhs, semester
boolean ketemu=false;
for (int i = 0; i < jkrs; i++) {
if(krs[i]!=null &&
krs[i].getMhs().getNPM().equalsIgnoreCase(npm
)){
if(krs[i].getSemester().equalsIgnoreCase(smt)){
ketemu=true;
if(krs[i].getJMK()>0){
System.out.println(krs[i].ToString());
}
else System.out.println("KRS Belum
Diisi!");
break;
}
}
}
if(ketemu==false){
System.out.println("KRS Mhs Tidak Ada!");
Hal. 26
[CLASS CONTAINER]

}
}
else System.out.println("KRS Kosong!");
break;
case 4:
if(jkrs>0){
System.out.println("== Drop Mata Kuliah ==");
System.out.print("Masukkan NPM = ");
String npm = sc.next();
System.out.print("Masukkan Semester = ");
String smt = sc.next();
//validasi mhs, semester, kode mk ke array di KRS
boolean ketemu=false;
for (int i = 0; i < jkrs; i++) {
if(krs[i]!=null &&
krs[i].getMhs().getNPM().equalsIgnoreCase(npm
)){
if(krs[i].getSemester().equalsIgnoreCase(smt)){
//tampilkan daftar MK yg ada di KRS Mhs
cMatkul t[] = krs[i].getMatkul();
System.out.println(" Daftar Isi KRS");
for (int j = 0; j < krs[i].getJMK(); j++) {
System.out.print("
"+t[j].getKodeMK()+"\t");
System.out.println(t[j].getNamaMK());
}
System.out.print("Masukkan Kode MK =
");
String kd = sc.next();
//validasi kode MK ke array mk di KRS
Hal. 27
[CLASS CONTAINER]

for (int j = 0; j < jmk; j++) {


if(t[j].getKodeMK().equalsIgnoreCase(kd
)){
ketemu=true;
System.out.println("Drop? 1.Ya,
2.Tidak");
System.out.print("Pilih = ");
pilih2 = sc.nextInt();
if(pilih2==1){
//simpan ke array object MK di KRS
krs[i].hapusMatkul(kd);
}
else System.out.println("Batal
Tambah!");
break;
}
}
break;
}
}
}
if(ketemu==false){
System.out.println("KRS Mhs Tidak Ada!");
}
}
else{
System.out.println("KRS Belum Ada!");
}
break;
}
Hal. 28
[CLASS CONTAINER]

break;

Catatan: Source code program versi lengkap dapat di akses di


halaman https://ngodingdhisik.blogspot.com.

Hal. 29
[CLASS CONTAINER]

4. HASIL RUNNING APLIKASI


Skenario jalannya aplikasi dimulai dengan pembuatan object
KRS. Kemudian dilanjutkan dengan menambahkan dua buah
mata kuliah ke dalam KRS. Setelah itu dijalankan opsi
menghapus satu buah mata kuliah yang diprogram mahasiswa.
Perubahan isi KRS ditampilkan dengan memilih menu Cetak
KRS. Dan terakhir, dijalankan pilihan untuk menghapus KRS
mahasiswa. Berikut ini adalah contoh tampilan hasilnya.

MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3

Sub Menu KRS Mahasiswa


1. Buat KRS Baru
2. Hapus KRS
3. Ambil Mata Kuliah
4. Drop Mata Kuliah
5. Cetak KRS
Pilih = 1
== Buat KRS Baru ==
Masukkan NPM = 123
Masukkan Semester = 2
Object KRS dibuat...
KRS Baru Sukses...

Hal. 30
[CLASS CONTAINER]

MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3

Sub Menu KRS Mahasiswa


1. Buat KRS Baru
2. Hapus KRS
3. Ambil Mata Kuliah
4. Drop Mata Kuliah
5. Cetak KRS
Pilih = 3
== Ambil Mata Kuliah ==
Masukkan NPM = 123
Masukkan Semester = 2
Masukkan Kode MK = 111
Tambah? 1.Ya, 2.Tidak
Pilih = 1
Tambah MK Sukses...

MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3
Hal. 31
[CLASS CONTAINER]

Sub Menu KRS Mahasiswa


1. Buat KRS Baru
2. Hapus KRS
3. Ambil Mata Kuliah
4. Drop Mata Kuliah
5. Cetak KRS
Pilih = 5
== Cetak KRS Mhs ==
Masukkan NPM = 123
Masukkan Semester = 2
KRS Semester 2 - Budi SKS : 3
No. Kode Nama MK SKS
1 111 BP2 3

MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3

Sub Menu KRS Mahasiswa


1. Buat KRS Baru
2. Hapus KRS
3. Ambil Mata Kuliah
4. Drop Mata Kuliah
5. Cetak KRS
Hal. 32
[CLASS CONTAINER]

Pilih = 3
== Ambil Mata Kuliah ==
Masukkan NPM = 123
Masukkan Semester = 2
Masukkan Kode MK = 222
Tambah? 1.Ya, 2.Tidak
Pilih = 1
Tambah MK Sukses...

MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3

Sub Menu KRS Mahasiswa


1. Buat KRS Baru
2. Hapus KRS
3. Ambil Mata Kuliah
4. Drop Mata Kuliah
5. Cetak KRS
Pilih = 5
== Cetak KRS Mhs ==
Masukkan NPM = 123
Masukkan Semester = 2
KRS Semester 2 - Budi SKS : 6
No. Kode Nama MK SKS
1 111 BP2 3
Hal. 33
[CLASS CONTAINER]

2 222 Basdat 3

MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3

Sub Menu KRS Mahasiswa


1. Buat KRS Baru
2. Hapus KRS
3. Ambil Mata Kuliah
4. Drop Mata Kuliah
5. Cetak KRS
Pilih = 4
== Drop Mata Kuliah ==
Masukkan NPM = 123
Masukkan Semester = 2
Daftar Isi KRS
111 BP2
222 Basdat
Masukkan Kode MK = 111
Drop? 1.Ya, 2.Tidak
Pilih = 1
Hapus MK Sukses!

MENU SIAMIK
Hal. 34
[CLASS CONTAINER]

1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3

Sub Menu KRS Mahasiswa


1. Buat KRS Baru
2. Hapus KRS
3. Ambil Mata Kuliah
4. Drop Mata Kuliah
5. Cetak KRS
Pilih = 5
== Cetak KRS Mhs ==
Masukkan NPM = 123
Masukkan Semester = 2
KRS Semester 2 - Budi SKS : 3
No. Kode Nama MK SKS
1 222 Basdat 3

MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3

Hal. 35
[CLASS CONTAINER]

Sub Menu KRS Mahasiswa


1. Buat KRS Baru
2. Hapus KRS
3. Ambil Mata Kuliah
4. Drop Mata Kuliah
5. Cetak KRS
Pilih = 2
== Hapus KRS ==
Masukkan NPM = 123
Masukkan Semester = 2
Dihapus? 1.Ya, 2.Tidak
Pilih = 1
Penghapusan Berhasil...

MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3

Sub Menu KRS Mahasiswa


1. Buat KRS Baru
2. Hapus KRS
3. Ambil Mata Kuliah
4. Drop Mata Kuliah
5. Cetak KRS
Pilih = 5
KRS Kosong!
Hal. 36
[CLASS CONTAINER]

MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 5

Terima kasih...
BUILD SUCCESSFUL (total time: 3 minutes 1 second)

Hal. 37
[CLASS CONTAINER]

5. PENUTUP
Pengembangan aplikasi yang dihasilkan sampai dengan modul
ini sudah semakin mendekati proses sistem yang biasanya
berjalan, jika dibandingkan aplikasi sebelumnya. Penambahan
array of object di dalam sebuah class menuntut adanya
penambahan validasi object yang lebih banyak daripada saat
program hanya melibatkan satu buah object saja. Karena itu
tidak menutup kemungkinan source code program dalam modul
ini belum bisa mencakup semua aspek/ kondisi yang harus
diperhatikan secara seksama; dan boleh jadi masih mungkin
menyebabkan kesalahan saat program dijalankan, meskipun
sudah berhasil dijalankan.

Hal. 38

Anda mungkin juga menyukai