import java.util.*;
public class fp{
public static int hashFunction(String nama){ //Untuk menentukan letak HashTable
int hash = 0;
for(int i=0; i<nama.length(); i++){
hash = hash*10 + nama.charAt(i);
}
hash = hash % 499;
return hash;
}
public static void main(String[] args){
Hashtable<Integer, Integer> gaji = new Hashtable<>(); //Hashtable untuk Gaji karyawan
Hashtable<Integer, Integer> waktu = new Hashtable<>();//Hashtable untuk Lama Kerja Karyawan
Hashtable<Integer, String> ID = new Hashtable<>();//Hashtable untuk NIK
Hashtable<Integer, String> golongan = new Hashtable<>();//Hashtable untuk Golongan
List<String> list = new ArrayList<>();//List untuk menyimpan nama-nama karyawan
Scanner sc = new Scanner(System.in);
//Variabel-variabel yang diperlukan
int choice = -1;
String nama, nomor, gol;
int jumlah, upah, data, jam;
int total = 0;
System.out.println("================= PENDATAAN GAJI KARYAWAN =================");
System.out.println("====================== PERUSAHAAN X =======================\\n\\n");
System.out.println("Keterangan :");
System.out.println("Golongan = A maka upah per jam 15000");
System.out.println("Golongan = B maka upah per jam 17000");
System.out.println("Golongan = C maka upah per jam 20000");
System.out.println("Golongan = D maka upah per jam 22000");
System.out.println("Nomor Induk Kerja (NIK) harus 10 angka\\n");
System.out.println(" Silahkan Memilih");
System.out.println("1. Tambahkan Data Baru");
System.out.println("2. Lihat Data Seseorang");
System.out.println("3. Ganti Data Seseorang");
System.out.println("4. Hapus Data Seseorang");
System.out.println("5. Lihat Semua Data");
System.out.println("6. Exit\\n");
while(choice != 6){
System.out.print("Masukkan pilihan : ");
choice = sc.nextInt();//Input choice
System.out.print("\\n");
if (choice == 1){
System.out.print("Masukkan banyak data : ");
data = sc.nextInt();//Masukkan banyak data yang akan dilooping
System.out.print("\\n");
for(int i = 0; i<data; i++){
//Masukkan data-data yang diperlukan
System.out.print("Nama : ");
nama = sc.next();
System.out.print("NIK : ");
nomor = sc.next();
System.out.print("Golongan : ");
gol = sc.next();
System.out.print("Lama Kerja (Jam): ");
jam = sc.nextInt();
System.out.print("\\n");
list.add(nama);//Memasukkan nama ke list
switch(gol){
case "A":
case "a":
total = jam*15000;
break;
case "B":
case "b":
total = jam*17000;
break;
case "C":
case "c":
total = jam*20000;
break;
case "D":
case "d":
total = jam*22000;
break;
default:
System.out.print("Maaf Pilihan Tidak Ditemukan\\n");
}
ID.put(hashFunction(nama), nomor); //Masukkan NIK ke HashTabble
gaji.put(hashFunction(nama), total); //Masukkan Gaji Total ke HashTabble
golongan.put(hashFunction(nama), gol); //Masukkan Golongan ke HashTabble
waktu.put(hashFunction(nama), jam);//Masukkan Lama Kerja ke HashTabble
}
System.out.println("Data telah ditambahkan\\n");
}
else if(choice == 2){
System.out.print("Nama : ");
nama = sc.next();//Masukkan Nama yang dicari
//Menampilkan data-data yang terkait dengan nama
System.out.println("NIK : " + ID.get(hashFunction(nama)));
System.out.println("Golongan : " + golongan.get(hashFunction(nama)));
System.out.println("Lama Kerja : " + waktu.get(hashFunction(nama)));
System.out.println("Gaji Total : Rp." + gaji.get(hashFunction(nama)));
System.out.print("\\n");
}
else if (choice == 3){
System.out.print("Masukkan Nama Karyawan : ");
nama = sc.next();//Masukkan Nama yang akan diganti
//Hapus data-data yang terkait akan nama
gaji.remove(hashFunction(nama));
golongan.remove(hashFunction(nama));
ID.remove(hashFunction(nama));
waktu.remove(hashFunction(nama));
boolean cek;//variabel untuk mengecek kesamaan nama dalam list
//Lakukan looping untuk mengecek nama dari yang ke-0
for (int i = 0; i < list.size(); i++) {
cek = list.get(i).equals(nama);
//Jika pengecekan true
//Semua data-data dari nama tersebut dapat diganti
//Tanpa mengubah posisi nama dalam list
if(cek == true){
System.out.print("Masukkan Data Baru Karyawan\\n");
System.out.print("Nama : ");
nama = sc.next();
System.out.print("NIK : ");
nomor = sc.next();
System.out.print("Golongan : ");
gol = sc.next();
System.out.print("Lama Kerja (Jam): ");
jam = sc.nextInt();
list.set(i,nama);
switch(gol){
case "A":
case "a":
total = jam*15000;
break;
case "B":
case "b":
total = jam*17000;
break;
case "C":
case "c":
total = jam*20000;
break;
case "D":
case "d":
total = jam*22000;
break;
default:
System.out.print("Maaf Pilihan Tidak Ditemukan\\n");
}
ID.put(hashFunction(nama), nomor);
gaji.put(hashFunction(nama), total);
golongan.put(hashFunction(nama), gol);
waktu.put(hashFunction(nama), jam);
System.out.print("\\n");
}
}
}
else if (choice == 4){
System.out.print("Masukkan Nama Karyawan : ");
nama = sc.next();//Masukkan Nama yang dihapus
//Hapus semua data termasuk nama
list.remove(nama);
gaji.remove(hashFunction(nama));
golongan.remove(hashFunction(nama));
ID.remove(hashFunction(nama));
waktu.remove(hashFunction(nama));
System.out.println("Data Karyawan Telah Dihapus\\n");
}
else if (choice == 5){
if(gaji.size() > 0){
//Lakukan pengoutputan jika terdapat data dalam lize dan HashTable
String temp;//Variabel sementara untuk mengurutkan
//for loop untuk mengurutkan nama sesuai abjad
for(int b=1 ;b<list.size() ;b++){
for(int c=0; c<b; c++){
if(list.get(c).compareTo(list.get(c+1)) > 0)//fungsi compareTo
{
temp=list.get(c);
list.set(c,list.get(c+1));
list.set(c+1,temp);
}
}
}
System.out.println("Terdapat " + gaji.size() + " data tersimpan\\n");
System.out.println(".----.----------.-------------.----------.------------------.---------------------.");
System.out.println("| No | Nama | NIK | Golongan | Lama Kerja (Jam) | Gaji Total (Rupiah) |");
System.out.println("|----|----------|-------------|----------|------------------|---------------------|");
for (int i = 1; i <= list.size(); i++) {
System.out.print("| " + i + " |");
System.out.print("\\t" + list.get(i-1) + "\\t|");
System.out.print(" " + ID.get(hashFunction(list.get(i-1))) + " |");
System.out.print("\\t " + golongan.get(hashFunction(list.get(i-1))) + "\\t |");
System.out.print("\\t " + waktu.get(hashFunction(list.get(i-1))) + "\\t |");
System.out.print("\\t " + gaji.get(hashFunction(list.get(i-1))) + "\\t |\\n");
if( i != list.size()){
System.out.println("|----|----------|-------------|----------|------------------|---------------------|");
}
else if (i == list.size()){
System.out.println("\'----\'----------\'-------------\'----------\'------------------\'---------------------\'");
}
}
System.out.print("\\n");
}
else
System.out.println("Tidak ada data yang tersimpan\\n");
}
}
}
}