Sebenarnya tugas ini sudah diberikan beberapa minggu yang lalu, tetapi karena tidak ada niat untuk mengerjakan jadi barus selesai sekarang. Untung bisa selesai tepat waktu, jadi besok pagi sudah bisa dikumpulkan. Tugas ini merupakan tugas mata kuliah Struktur Data, kita disuruh membuat aplikasi sederhana dengan Java dan logika Double Link List. Nah bagi yang pengen nyontek silahkan copy source code dibawah ini dan jangan lupa kasih komenter jika menemukan bug!
import java.util.Scanner;
class Node
{
String nodeNama;
String nodeNIM;
String nodeJenis;
Node next;
Node previous;
public Node(String dat1, String dat2, String dat3)
{
nodeNama = dat1;
nodeNIM = dat2;
nodeJenis = dat3;
}
public void showData()
{
System.out.println(nodeNama + " ---> " + nodeNIM + " ---> " + nodeJenis);
}
}
class DoubleLink
{
Node first;
Node last;
Node laki;
Node perempuan;
public DoubleLink()
{
first = null;
last = null;
laki = null;
perempuan = null;
}
public boolean isEmpty()
{
return (first == null);
}
public boolean cekNIM(String dat2)
{
Node indek1 = first;
while(indek1 != null)
{
if(dat2.equals(indek1.nodeNIM))
{
return true;
}
indek1 = indek1.next;
}
return false;
}
public Node insert(String dat1, String dat2, String dat3)
{
Node newNode = new Node(dat1, dat2, dat3);
Node indek1;
Node indek2;
Node indek3;
indek1 = first;
indek3 = null;
if(isEmpty())
{
if(dat3.equals("L"))
{
laki = newNode;
}
else
{
perempuan = newNode;
}
first = newNode;
last = newNode;
}
else
{
if(dat3.equals("L"))
{
if(laki != null)
{
indek2 = laki;
if(indek2 == null)
{
indek3.previous = newNode;
newNode.next = indek3;
}
else if(indek3 != null)
{
indek3.previous = newNode;
newNode.next = indek3;
indek2.next = newNode;
newNode.previous = indek2;
}
else if(indek3 == null)
{
laki = newNode;
indek2.next = newNode;
newNode.previous = indek2;
newNode.next = perempuan;
if(perempuan != null)
{
newNode.next.previous = newNode;
}
}
}
else
{
perempuan.previous = newNode;
newNode.next = perempuan;
laki = newNode;
}
}
else
{
if(perempuan != null)
{
indek2 = perempuan;
if(indek2 == null)
{
indek3.next = newNode;
newNode.previous = indek3;
}
else if(indek3 != null)
{
indek3.next = newNode;
newNode.previous = indek3;
indek2.previous = newNode;
newNode.next = indek2;
}
else if(indek3 == null)
{
perempuan = newNode;
indek2.previous = newNode;
newNode.next = indek2;
newNode.previous = laki;
if(laki != null)
{
newNode.previous.next = newNode;
}
}
}
else
{
laki.next = newNode;
newNode.previous = laki;
perempuan = newNode;
}
}
while(first.previous != null)
{
first = first.previous;
}
while(last.next != null)
{
last = last.next;
}
indek3 = null;
return null;
}
return indek1;
}
public Node delete(String dat2)
{
Node indek1 = first;
while(indek1.nodeNIM.compareTo(dat2) != 0)
{
indek1 = indek1.next;
if(indek1 == null)
{
return null;
}
}
if(indek1.nodeJenis.equals("L") && indek1.next == perempuan)
{
laki = laki.previous;
}
else if(indek1.nodeJenis.equals("P") && indek1.previous == laki)
{
perempuan = perempuan.next;
}
if((indek1 == first) && (indek1 == last))
{
first = null;
last = null;
}
else if((indek1 == first) && (indek1 != last))
{
first = first.next;
first.previous = indek1.previous;
}
else if((indek1 != first) && (indek1 == last))
{
last = last.previous;
last.next =indek1.next;
}
else
{
indek1.previous.next = indek1.next;
indek1.next.previous = indek1.previous;
}
return indek1;
}
public Node update(String dat2)
{
Node indek1;
Node indek2;
indek1 = first;
int a = 0;
int b = 1;
String updateNIM;
String updateNama;
String updateJenis;
String updateMenu;
while(indek1.nodeNIM.compareTo(dat2) != 0)
{
indek1 = indek1.next;
if(indek1 == null)
{
System.out.println("");
System.out.println("NIM " + dat2 + " tidak ditemukan!");
return null;
}
}
while(a < b)
{
System.out.println("");
System.out.println("Menu Update");
System.out.println("[1] Update Nama : " + indek1.nodeNama);
System.out.println("[2] Update NIM : " + indek1.nodeNIM);
System.out.println("[3] Update Jenis Kelamin : " + indek1.nodeJenis);
System.out.println("[x] Selesai");
System.out.println("");
System.out.print("Masukan pilihan anda : ");
updateMenu = DoubleLinkList.scanMenu.nextLine().toUpperCase();
if (updateMenu.equals("1"))
{
System.out.print("Nama baru : ");
updateNama = DoubleLinkList.scanNama.nextLine();
if (updateNama.equals("/q") || updateNama.equals("/Q")) continue;
delete(indek1.nodeNIM);
indek1.nodeNama = updateNama;
insert(indek1.nodeNama, indek1.nodeNIM, indek1.nodeJenis);
}
else if (updateMenu.equals("2"))
{
while(a < b)
{
indek2 = first;
System.out.print("NIM baru : ");
updateNIM = DoubleLinkList.scanNIM.nextLine();
if (updateNIM.equals("/q") || updateNIM.equals("/Q")) break;
while(indek2.nodeNIM.compareTo(updateNIM) != 0)
{
indek2 = indek2.next;
if(indek2 == null)
{
delete(indek1.nodeNIM);
indek1.nodeNIM = updateNIM;
insert(indek1.nodeNama, indek1.nodeNIM, indek1.nodeJenis);
a = 1;
break;
}
}
if (a < b)
{
System.out.println("");
System.out.println("NIM " + updateNIM + " sudah ada!");
}
}
a = 0;
}
else if (updateMenu.equals("3"))
{
while(a < b) { System.out.print("Jenis Kelamin : "); updateJenis = DoubleLinkList.scanJenis.nextLine().toUpperCase(); if (updateJenis.equals("/q") || updateJenis.equals("/Q")) break; if(updateJenis.equals("L") || updateJenis.equals("P")) { delete(indek1.nodeNIM); indek1.nodeJenis = updateJenis; insert(indek1.nodeNama,indek1.nodeNIM, indek1.nodeJenis); a = 1; } else { System.out.println("Hanya masukan L / P!"); } } a = 0; } else if (updateMenu.equals("X")) { a = 1; } else { System.out.println(""); System.out.println("Hanya masukan 1-3 atau x!"); } } System.out.println(""); System.out.println("NIM " + dat2 + " telah diupdate menjadi " + indek1.nodeNIM); return indek1; } public void show() { Node current = first; System.out.println(""); System.out.println("Nama ---> NIM ---> Jenis Kelamin");
while(current != null)
{
current.showData();
current = current.next;
}
}
}
class DoubleLinkList
{
static String menu; //menu
static String nama; //nama
static String nim; //nim
static String jenis; //jenis kelamin
static String data; //input nim yang akan di haspus atau diupdate
public static Scanner scanMenu = new Scanner(System.in);
public static Scanner scanNama = new Scanner(System.in);
public static Scanner scanNIM = new Scanner(System.in);
public static Scanner scanJenis = new Scanner(System.in);
public static Scanner scanData = new Scanner(System.in);
public static void main(String[] args)
{
DoubleLink list = new DoubleLink();
int a = 0;
int b = 1;
while(a < b)
{
System.out.println(""); //menu pilihan
System.out.println("+----------MENU PILIHAN----------+");
System.out.println("| [1] Masukan Data...........[1] |");
System.out.println("| [2] Hapus Data.............[2] |");
System.out.println("| [3] Update Data............[3] |");
System.out.println("| [4] Tampilkan Data.........[4] |");
System.out.println("+--------------------------------+");
System.out.println("| [x] Keluar.................[x] |");
System.out.println("| [/q] Cancel Proses.........[q] |");
System.out.println("+--------------------------------+");
System.out.print("Masukan Pilihan Anda : ");
menu = scanMenu.nextLine().toUpperCase(); //input pada menu
System.out.println("");
if (menu.equals("1")) //masukan data
{
System.out.print("Nama : ");
nama = scanNama.nextLine();
if (nama.equals("/q") || nama.equals("/Q")) continue;
while(a < b)
{
System.out.print("NIM : ");
nim = scanNIM.nextLine();
if (nim.equals("/q") || nim.equals("/Q"))
{
a = 1;
}
if (list.cekNIM(nim) == true)
{
System.out.println("");
System.out.println("NIM " + nim + " sudah ada!");
}
else
{
while (a < b)
{
System.out.print("Jenis Kelamin (L / P) : ");
jenis = scanJenis.nextLine().toUpperCase();
if (jenis.equals("/q") || jenis.equals("/Q"))
{
a = 1;
}
else if(jenis.equals("L") || jenis.equals("P"))
{
list.insert(nama, nim, jenis);
a = 1;
}
else
{
System.out.println("");
System.out.println("Jenis Kelamin salah!");
}
}
}
}
a = 0;
}
else if (menu.equals("2")) //hapus data
{
if (list.isEmpty())
{
System.out.println("Data Kosong!");
}
else
{
System.out.print("NIM yang akan dihapus : ");
data = scanData.nextLine();
if (data.equals("/q") || data.equals("/Q"))
{
continue;
}
else if (list.delete(data) == null)
{
System.out.println("");
System.out.println("NIM " + data + " tidak ditemukan!");
}
else
{
System.out.println("");
System.out.println("NIM " + data + " telah dihapus!");
}
}
}
else if (menu.equals("3")) //update data
{
if (list.isEmpty())
{
System.out.println("Data Kosong!");
}
else
{
System.out.print("NIM yang akan diupdate : ");
data = scanData.nextLine();
if (data.equals("/q") || data.equals("/Q"))
{
continue;
}
else
{
list.update(data);
}
}
}
else if (menu.equals("4")) //tampilkan dat
{
if (list.isEmpty())
{
System.out.println("Data Kosong!");
}
else
{
list.show();
}
}
else if (menu.equals("X")) //keluar
{
System.out.println("Bey-bey....");
a = 1;
}
else
{
System.out.println("Hanya masukan menu 1-4 atau x atau /q!");
}
}
}
}
