Disusun oleh:
Nur Cahyo Wibowo, S.Kom, M.Kom
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.
Penulis.
Hal. 3
[CLASS CONTAINER]
Methods
Hal. 7
[CLASS CONTAINER]
Hal. 8
[CLASS CONTAINER]
12 33 21 65 45 37 88
Hal. 9
[CLASS CONTAINER]
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]
mk[1]=new cMatkul();
mk[1].setKodeMK("222");
mk[1].setNamaMK("Basdat");
mk[1].setSKS(3);
//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;
Hal. 15
[CLASS CONTAINER]
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]
}
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("Data Mhs kosong!");
break;
}
break;
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]
break;
Hal. 29
[CLASS CONTAINER]
MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3
Hal. 30
[CLASS CONTAINER]
MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3
MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3
Hal. 31
[CLASS CONTAINER]
MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3
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
2 222 Basdat 3
MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3
MENU SIAMIK
Hal. 34
[CLASS CONTAINER]
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3
MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3
Hal. 35
[CLASS CONTAINER]
MENU SIAMIK
1. Mahasiswa
2. Mata Kuliah
3. Kartu Rencana Studi
4. Program Studi
5. Exit
Pilih = 3
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