Anda di halaman 1dari 52

LAPORAN PROGRAM KEPEGAWAIAN

NAMA ANGGOTA :
1. Husnul Fadlilah : 1062240
2. Intan Ayu : 1062242
3. Lucita Aprillia : 1062246
4. Pidaryani : 1062251
5. Rizqi Pratama : 1062255
6. Silvia Agustin : 1062257

KELAS :
2 TRPL B

DOSEN : Riki Afriansyah, M.T


MATKUL : Pemograman Berorientasi Objek

PROGRAM STUDI TEKNOLOGI REKAYASA PERANGKAT LUNAK


POLITEKNIK MANUFAKTUR NEGERI BANGKA BELITUNG
TAHUN AKADEMIK 2023/2024
KATA PENGHANTAR

Assalamu’alaikum Warahmatullahi Wabarakatuh


Alhamdulillah Puji Syukur kehadirat Allah SWT. Senantiasa kita ucapkan atas
karunia-Nya berupa nikmat iman dan kesehatan Dan tentu tidak lupa juga shalawat dan
salam kita haturkan pada junjungan kita Nabi besar Muhammad SAW. Risalah beliau lah
yang bermanfaat bagi kita semua sebagai petunjuk menjalani kehidupan.
Dan tentunya saya berterimakasih kepada semua pihak yang terlibat dengan
laporan ini, terutama kepada Bapak Riki Afriansyah,M.T yang telah memberikan waktu
sehingga kami dapat menyelesaikan laporan ini yang berjudul”Laporan Program
Kepegawaian”
Tujuan dari dibuatnya laporan ini untuk memenuhi tugas mata kuliah
Pemograman Berorientasi Objek
Dengan rendah hati, kami memohon maaf apabila ada ketidaksesuaian kalimat
dan kesalahan. Meskipun demikian, kami terbuka atas kritik dan saran dari pembaca demi
kesempurna laporan ini.
Wassalamu’alaikum Warahmatullahi Wabarakatuh

Sungailiat, 18 December 2023

Penulis
DAFTAR ISI

KATA PENGHANTAR ................................................................................................. 2

DAFTAR ISI ................................................................................................................... 3

BAB I PENDAHULUAN ............................................................................................ 4

1.1 LATAR BELAKANG ....................................................................................... 4

1.2 RUMUSAN MASALAH ................................................................................... 4

1.3 TUJUAN ............................................................................................................ 4

BAB II PEMBAHASAN ............................................................................................... 5

2.1 LANDASAN TEORI ......................................................................................... 5

2.2 TUGAS BESAR .............................................................................................. 10

BAB III PENUTUP ....................................................................................................... 50

3.1 KESIMPULAN ................................................................................................ 50

DAFTAR PUSTAKA ................................................................................................... 52


BAB I
PENDAHULUAN
1.1 LATAR BELAKANG
Sistem Informasi merupakan kompinasi dari teknologi infomasi dan aktivitas
orang yang menggunkan tekgnologi itu untuk mendukung operasi dalam manajemen.
Pada saat ini sistem informasi kepegawaian merupakan hal yang sangat penting untuk
sebuah Instansi dalam mengelola suatu data Kepegawaian diPerusahaan . Dengan
menggunakan sistem informasi kepegawaian dapat mempermudah untuk mecari data
tentang pribadi semua pegawai.
Sistem informasi Kepegawaian merupakan sistem yang mampu memeberikan
informasi data – data pegawai. Sistem Informasi Manajemen Kepegawaian dibangun
sebagai sarana untuk melakukan adminstrasi data kepegawaian secara terstruktur agar
pengelolaan data kepegawaian bisa terarah dan efesien. Pada Sistem Kepegawaian yang
kami buat terdapat dua pilihan, yaitu Admin dan Karyawan.
Pada Sistem Kepegawaaian dipilihan Admin ada menampilkan data
karyawan, menambahkan data karyawan, menambahkan gaji karyawan, edit data
karyawan, hapus data karyawan, persetujuan karyawan, menampilkan data absensi
karyawan, dan menampilkan data gaji pada karyawan.
Pada Sistem Kepegawaian dipilihan Karyawan ada menampilakan data
karyawan, mengedit data karyawan, mengajukan permohonan cuti, absensi karyawan,
dan menampilkan gaji karyawan.

1.2 RUMUSAN MASALAH


Berdasarkan latar belakang yang sudah dijelaskan, maka pkami merumuskan
masalah yaitu bagaimana membangun sistem informasi Kepegawaian dengan Bahasa
Kotlin yang terdapat pendataan pegawai, gaji, potongan, dan lain – lain.
1.3 TUJUAN
Tujuan dari Tugas Besar dengan mata kuliah Pemograman Berorientasi
Object adalah membangun Sistem Informasi Kepegawaian berbasis Bahasa Kotlin.
BAB II
PEMBAHASAN
2.1 LANDASAN TEORI
Pemrograman berorientasi objek atau object oriented programming (OOP) merupakan
suatu pendekatan pemrograman yang menggunakan object dan class. OOP
memberikan kemudahan dalam pembuatan sebuah program, keuntungan yang
didapat apabila membuat Program berorientasi objek atau object oriented
programming (OOP) antara lain :
1) Reusability, kode yang dibuat dapat digunakan kembali.
2) Extensibility,pemrogram dapat membuat methode baru atau mengubah
yang sudah ada sesuai yang diinginkan tanpa harus membuat kode dari
awal.
3) Maintainability, kode yang sudah dibuat lebih mudah untuk dikelola
apabila aplikasi yang dibuat berskala besar yang memungkinkan
adanya error dalam pengembangannya hal tersebut dapat diatasi dengan
OOP karena pemrograman OOP sudah menggunakan konsep
modularitas [Ramadhani, 2015].
Keuntungan Pemrograman berorientasi objek atau object oriented programming
(OOP) yang lain:
1) Alamiah.
2) Dapat diandalkan (reliable).
3) Dapat dipakai kembali (reusable).
1) Mudah dirawat (maintainable).
2) Dapat diperluas (extendable).
3) Efisiensi waktu [Hermawan, 2004].

CLASS, METHOD DAN OBJEK


- Class adalah prototype, atau blueprint, atau rancangan yang mendefinisikan
variable dan method-methode pada seluruh objek tertentu. Class berfungsi
untuk menampung isi dari program yang akan di jalankan, di dalamnya
berisi atribut / type data dan method untuk menjalankan suatu program.
- Class merupakan suatu blueprint atau cetakan untuk menciptakan suatu
instant dari object. class juga merupakan grup suatu object dengan
kemiripan attributes/properties, behaviour dan relasi ke object lain. Contoh
: Class Person, Vehicle, Tree, Fruit dan lain-lain.
- Method adalah kumpulan program yang mempunyai nama. Method
merupakan sarana bagi programmer untuk memecah program menjadi
bagian-bagian yang kecil agar jadi lebih kompleks sehingga dapat di
gunakan berulang-ulang.
- Method merupakan suatu operasi berupa fungsi-fungsi yang dapat
dikerjakan oleh suatu object. Method didefinisikan pada class akan tetapi
dipanggil melalui object. Contoh, pada object pear : terdapat method
ambilRasa , kupasKulit dan lain-lain.
- Yang dimaksud dengan objek pada java adalah sekumpulan software yang
terdiri dari variable dan method-method yang terkait. Objek juga merupakan
benda nyata yang di buat berdasarkan rancangan yang di definisikan di
dalam class. Object adalah instance dari class. Jika class secara umum
mepresentasikan (template) sebuah object, sebuah instance adalah
representasi nyata dari class itu sendiri. Contoh : Dari class Fruit kita dapat
membuat object Mangga, Pisang, Apel, dan lain-lain.

SETTER GETTER
Setter dan getter penting dalam pemrograman berorientasi objek karena
menyediakan cara untuk mengakses atribut atau bidang pribadi suatu kelas.
Berikut beberapa kesimpulan penting dari hasil pencarian:
- Setter digunakan untuk menetapkan nilai atribut atau bidang yang memiliki
pengubah akses pribadi. Mereka biasanya memiliki pengubah akses publik,
yang berarti mereka dapat diakses oleh kelas lain.
- Setter digunakan untuk mendapatkan nilai atribut atau bidang yang
memiliki pengubah akses ribadi.
- Setter dan getter merangkum data dan mengurangi ketergantungan langsung
pada variabel.
- Getter tidak memiliki tipe pengembalian kosong dan mengembalikan nilai
atribut atau bidang yang diperolehnya.
- Setter memiliki tipe pengembalian kosong dan menetapkan nilai atribut atau
bidang yang disetel.
LIST OF
- List adalah antarmuka untuk koleksi yang menyediakan akses hanya baca
ke elemen-elemennya.
- List tidak mendukung operasi penambahan, penghapusan, atau pembaruan
elemen.
- Implementasi default dari List adalah ArrayList, yang dapat dianggap
sebagai larik yang dapat diubah ukurannya.
MUTABLE LIST OF
- MutableList adalah antarmuka untuk koleksi yang menyediakan operasi
penulisan khusus untuk menambah dan menghapus elemen.
- Dapat menambah, menghapus, dan memperbarui elemen dalam
MutableList.
- MutableList dapat dibuat menggunakan
fungsi mutableListOf() atau toMutableList() untuk mengubah List menjadi
MutableList.
PEWARISAN (INHERITANCE)
- Dalam Kotlin, inheritance memungkinkan untuk mendefinisikan kelas baru
berdasarkan kelas yang sudah ada.
- Kelas yang sudah ada dikenal sebagai superclass atau base class, sedangkan
kelas baru dikenal sebagai subclass atau derived class.
- Subclass mewarisi semua properti dan fungsi dari superclass, dan juga dapat
menambah properti dan fungsi baru atau mengganti properti dan fungsi yang
diwarisi.
- Inheritance memungkinkan untuk penggunaan kembali kode (code
reusability) dan perilaku polimorfik.
- Untuk membuat kelas dapat diwarisi, gunakan kata kunci open sebelum
deklarasi kelas.
Contoh kasus pewarisan:
- open class Hewan(val jenis: String, val habitat: String) adalah class parent
yang memiliki dua parameter yaitu jenis dan habitat. Class ini memiliki dua
function yaitu bergerak() dan makan().
- class Kucing(jenis: String, habitat: String, val nama: String) :
Hewan(jenis,nhabitat) adalah class child yang mewarisi class
parent Hewan. Class ini memiliki dua function tambahan
yaitu meong() dan tidur().
- Pada class Kucing, kita menggunakan keyword : Hewan(jenis,
habitat) untuk menunjukkan bahwa class ini mewarisi class Hewan.
- Pada fun main(), kita membuat object kucing dari class Kucing dengan
parameter Kucing, Darat, dan Tom. Kemudian kita memanggil
function bergerak(), makan(), meong(), dan tidur() dari object kucing.

OVERLOADING & OVERIDING


Perbedaan Overloading dan Overriding
- Overloading:Suatu kelas yang mempunyai nama method yang sama antara
satu dengan yang lainnya.Tetapi,yang membedakannya yaitu parameternya.
- Overriding:Antara suatu kelas parent dan child itu mempunyai nama method
yang sama.
Overloading di Kotlin: Overloading terjadi ketika mendefinisikan beberapa
fungsi dengan nama yang sama tetapi dengan parameter yang berbeda, baik dalam
jumlah parameter maupun jenis parameter.Contoh kelebihan beban di Kotlin adalah
ketika kita memiliki beberapa fungsi penambahan dengan nama yang sama tetapi
parameternya berbeda, seperti add(firstNumber: Int, twoNumber: Int) dan
add(firstNumber : Int, twoNumber: Int, ThirdNumber : INT).
Overriding di Kotlin: Overriding terjadi saat kita mendefinisikan fungsi
dengan nama yang sama di kelas induk dan kelas anak, dimana fungsi yang
ditentukan di kelas anak menggantikan fungsi yang ditentukan di kelas
induk.Contoh overriding di Kotlin adalah saat kita mendefinisikan fungsi add untuk
objek Point, yang mana fungsi tersebut akan menggantikan fungsi add di kelas
induk.
Dalam contoh kelebihan beban ini, kita dapat melihat bahwa beberapa
fungsi dengan nama yang sama tetapi dengan parameter berbeda dapat
didefinisikan dalam satu kelas. Sedangkan pada contoh penggantian, kita dapat
melihat cara mendefinisikan fungsi dengan nama yang sama di kelas anak untuk
menggantikan fungsi yang ada di kelas induk.
2.2 TUGAS BESAR
1. Kode
import java.sql.Connection
import java.sql.DriverManager
import java.sql.ResultSet
import java.util.Scanner

val JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"


val DB_URL = "jdbc:mysql://localhost/kepegawaian"
val USER = "root"
val PASS = ""

lateinit var conn: Connection


lateinit var stmt: java.sql.Statement
lateinit var rs: ResultSet
val input = Scanner(System.in)

var peranSudahDipilih = false

fun main(args: Array<String>) {


try {
Class.forName(JDBC_DRIVER)
conn = DriverManager.getConnection(DB_URL, USER, PASS)
stmt = conn.createStatement()

var peranSudahDipilih = false

while (!conn.isClosed) {
if (!peranSudahDipilih) {
peranSudahDipilih = true
pilihSebagai()
}
}
} catch (e: Exception) {
e.printStackTrace()
} finally {
// Close resources in a final block
rs.close()
stmt.close()
conn.close()
}
}

fun pilihSebagai() {
val input = Scanner(System.in)
println("\n===Login Sebagai===")
println("1. Admin")
println("2. Karyawan")
println("0. Hentikan Program")
println("")
print("Pilih >>> ")

try {
val pilihan: Int = input.nextLine().toInt()
when (pilihan) {
0 -> System.exit(0)
1 -> showMenuAdmin()
2 -> showMenuKaryawan()
else -> {
println("!!!Silahkan Pilih Menu Yang
Tersedia!!!")
pilihSebagai()
}

}
} catch (e: Exception) {
e.printStackTrace()
}
}
fun showMenuAdmin() {
var continueShowingMenu = true

while (continueShowingMenu) {
val input = Scanner(System.in)
println("\n===Silahkan Pilih Menu===")
println("1. Tampilkan Data Karyawan")
println("2. Tambah Data Karyawan")
println("3. Tambah Gaji Karyawan")
println("4. Edit Data Karyawan")
println("5. Hapus Data Karyawan")
println("6. Persetujuan Karyawan")
println("7. Tampilkan Data Absensi Karyawan")
println("8. Tampilkan Data Gaji Karyawan")
println("0. Kembali")
println("")
print("Pilih >>> ")

try {
val pilihan: Int = input.nextLine().toInt()
when (pilihan) {
0 -> pilihSebagai()
1 -> TampilDataKaryawan()
2 -> TambahDataKaryawan()
3 -> TambahGaji()
4 -> EditDataKaryawan()
5 -> HapusDataKaryawan()
6 -> {
println("Pilih Menu: ")
println("1. Cuti Hari Ini")
println("2. Tampilkan Seluruh Data")
println("")
print("Pilih >>> ")
val menu: Int = input.nextLine().toInt()
when (menu) {
1 -> Persetujuan()
2 -> PersetujuanSeluruh()
}
}

7 -> DataAbsensiKaryawan()
8 -> DataGajiKaryawan()
else -> println("Silahkan Pilih Menu Yang
Tersedia...")
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}

fun showMenuKaryawan() {
var continueShowingMenu = true

while (continueShowingMenu) {
val input = Scanner(System.in)
println("\n===Silahkan Pilih Menu===")
println("1. Tampilkan Data Karyawan")
println("2. Edit Data Karyawan")
println("3. Pengajuan Cuti")
println("4. Absensi Karyawan")
println("5. Gaji Karyawan")
println("6. Status Cuti")
println("0. Kembali")
println("")
print("Pilih >>> ")

try {
val pilihan: Int = input.nextLine().toInt()
when (pilihan) {
0 -> pilihSebagai()
1 -> {
println("Masukkan ID Karyawan: ")
val idKaryawan = input.nextInt()
TampilDataKaryawan(idKaryawan)
}

2 -> EditDataKaryawan()
3 -> PengajuanCuti()
4 -> AbsensiKaryawan()
5 -> {
println("Masukkan ID Karyawan: ")
val idpegawai = input.nextInt()
DataGajiKaryawan(idpegawai)
}
6 -> {
println("Masukkan ID Karyawan: ")
var idpegawai = input.nextInt()
StatusCuti(idpegawai)
}

else -> println("Silahkan Pilih Menu Yang


Tersedia...")

}
} catch (e: Exception) {
e.printStackTrace()
}
}
}

fun TampilDataKaryawan(idKaryawan: Int) {


val sql = "SELECT * FROM data_karyawan WHERE id_pegawai =
$idKaryawan"
try {
rs = stmt.executeQuery(sql)
println("=====================")
println("Tampil Data Karyawan")
println("=====================")

while (rs.next()) {
var id_pegawai: Int = rs.getInt("id_pegawai")
var id_departemen: Int = rs.getInt("id_dapartemen")
var nama_lengkap: String =
rs.getString("nama_lengkap")
var jenkel: String = rs.getString("jenkel")
var tmp_lahir: String = rs.getString("tmp_lahir")
var tgl_lahir: String = rs.getString("tgl_lahir")
var alamat: String = rs.getString("alamat")
var tgl_masuk: String = rs.getString("tgl_masuk")
var no_telp: String = rs.getString("no_telp")

println(
"Id_Pegawai: $id_pegawai \n" +
"Id_dapartemen: $id_departemen \n" +
"Nama Lengkap: $nama_lengkap \n" +
"Jenis Kelamin: $jenkel \n" +
"Tempat Lahir: $tmp_lahir \n" +
"Tanggal Lahir: $tgl_lahir \n" +
"Alamat: $alamat \n" +
"Tanggal Masuk: $tgl_masuk \n" +
"No Telpon: $no_telp"
)
}
} catch (e: Exception) {
e.printStackTrace()
}
}

fun PengajuanCuti() {
println("\n=== Pengajuan Cuti ===")

try {
// Input data pengajuan cuti
print("Masukkan ID Karyawan: ")
val idKaryawan = input.nextInt()
input.nextLine()
print("Masukkan Alasan Cuti: ")
val alasanCuti = input.nextLine()
print("Masukkan Tanggal Pengajuan (yyyy-MM-dd): ")
val tanggalPengajuan =
java.sql.Date.valueOf(input.next())
input.nextLine() // Membersihkan newline di buffer
print("Masukkan Tanggal Selesai (yyyy-MM-dd): ")
val tanggalSelesai = java.sql.Date.valueOf(input.next())
input.nextLine() // Membersihkan newline di buffer

// Insert data pengajuan cuti ke tabel cuti using


parameterized query
val insertQuery =
"INSERT INTO cuti (id_pegawai, keterangan,
tgl_mulai, tgl_selesai, status_cuti) VALUES (?, ?, ?, ?,
'Menunggu Persetujuan')"
val insertStmt = conn.prepareStatement(insertQuery)
insertStmt.setInt(1, idKaryawan)
insertStmt.setString(2, alasanCuti)
insertStmt.setDate(3, tanggalPengajuan)
insertStmt.setDate(4, tanggalSelesai)
insertStmt.executeUpdate()

println("Pengajuan cuti berhasil diajukan.")

} catch (e: Exception) {


e.printStackTrace()
}
}

fun AbsensiKaryawan() {
println("\n=== Input Absensi Karyawan ===")
try {
// Input data absensi
print("Masukkan ID Karyawan: ")
val idKaryawan = input.nextInt()
input.nextLine()
print("Masukkan Tanggal Absen (yyyy-MM-dd): ")
val tanggalAbsenStr = input.next()
input.nextLine()
val tanggalAbsen = try {
java.sql.Date.valueOf(tanggalAbsenStr)
} catch (ex: Exception) {
println("Format tanggal tidak valid. Pengajuan
absensi dibatalkan.")
return
}
print("Masukkan Jam Datang: ")
val jm_dtng = input.nextLine()
print("Masukkan Jam Pulang: ")
val jm_plng = input.nextLine()

// Insert data absensi ke tabel absensi


val insertQuery = "INSERT INTO absensi (id_pegawai,
tgl_absen, jam_dtg, jam_plg) VALUES (?, ?, ?, ?)"
val insertStmt = conn.prepareStatement(insertQuery)
insertStmt.setInt(1, idKaryawan)
insertStmt.setDate(2, tanggalAbsen)
insertStmt.setString(3, jm_dtng)
insertStmt.setString(4, jm_plng)
insertStmt.executeUpdate()

println("Absensi karyawan berhasil dicatat.")

} catch (e: Exception) {


e.printStackTrace()
}
}

fun DataGajiKaryawan(idKaryawan: Int) {


println("\n=== Data Gaji Karyawan ===")

try {
// Assuming you have a connection object named 'conn'
and a statement object named 'stmt'
val sql = "SELECT gaji_total.no_nota,
data_karyawan.nama_lengkap, " +
"data_karyawan.id_pegawai, gaji_total.jmlh_gaji
" +
"FROM gaji_total INNER JOIN data_karyawan " +
"ON gaji_total.id_pegawai =
data_karyawan.id_pegawai " +
"WHERE data_karyawan.id_pegawai = $idKaryawan"

val rs = stmt.executeQuery(sql)

println("====================================")
println("ID Gaji | Nama Karyawan | ID Karyawan | Jumlah
Gaji")
println("====================================")

while (rs.next()) {
val idGaji = rs.getInt("no_nota")
val nama = rs.getString("nama_lengkap")
val idKaryawan = rs.getInt("id_pegawai")
val jumlahGaji = rs.getDouble("jmlh_gaji")

println("$idGaji | $nama | $idKaryawan |


$jumlahGaji")
}

// Close the ResultSet, Statement, and Connection


rs.close()
stmt.close()
conn.close()

} catch (e: Exception) {


e.printStackTrace()
}
}

fun StatusCuti(idKaryawan: Int) {


val sql = "SELECT data_karyawan.id_pegawai,
data_karyawan.nama_lengkap, " +
"cuti.lama_cuti, cuti.status_cuti " +
"FROM cuti INNER JOIN data_karyawan " +
"ON cuti.id_pegawai = data_karyawan.id_pegawai " +
"WHERE data_karyawan.id_pegawai = $idKaryawan"
println("\n=== Data Status Cuti Karyawan ===")

try {
rs = stmt.executeQuery(sql)
println("====================================")
println("ID Karyawan | Nama Karyawan | Lama Cuti |
Status")
println("====================================")

while (rs.next()) {
val idKaryawan = rs.getInt("id_pegawai")
val nama = rs.getString("nama_lengkap")
val lama = rs.getString("lama_cuti")
val status = rs.getString("status_cuti")

println("$idKaryawan | $nama | $lama | $status")


}

println("Data status cuti karyawan berhasil


ditampilkan.")
} catch (e: Exception) {
e.printStackTrace()
}
}

fun TampilDataKaryawan() {
val sql = "SELECT * FROM data_karyawan"
try {
rs = stmt.executeQuery(sql)
println("=====================")
println("Tampil Data Karyawan")
println("=====================")

while (rs.next()) {
var id_pegawai: Int = rs.getInt("id_pegawai")
var id_departemen: Int = rs.getInt("id_dapartemen")
var nama_lengkap: String =
rs.getString("nama_lengkap")
var jenkel: String = rs.getString("jenkel")
var tmp_lahir: String = rs.getString("tmp_lahir")
var tgl_lahir: String = rs.getString("tgl_lahir")
var alamat: String = rs.getString("alamat")
var tgl_masuk: String = rs.getString("tgl_masuk")
var no_telp: String = rs.getString("no_telp")

println("Id_Pegawai: $id_pegawai, Id_dapartemen:


$id_departemen, Nama Lengkap: $nama_lengkap, Jenis Kelamin:
$jenkel, Tempat Lahir: $tmp_lahir, Tanggal Lahir: $tgl_lahir,
Alamat: $alamat, Tanggal Masuk: $tgl_masuk, No Telpon:
$no_telp")

}
} catch (e: Exception) {
e.printStackTrace()
}
}
fun TambahDataKaryawan() {
try {
print("Id Dapartemen: ")
var id_dapartemen = input.nextInt()
input.nextLine()

print("Nama: ")
var nama_lengkap = input.nextLine()
print("Jenis Kelamin: ")
var jenkel = input.nextLine()
print("Tempat Lahir: ")
var tmp_lahir = input.nextLine()
print("Tanggal Lahir: ")
var tgl_lahir = input.nextLine()
print("Alamat: ")
var alamat = input.nextLine()
print("Tanggal Masuk: ")
var tgl_masuk = input.nextLine()
print("nomor Telpon: ")
var no_telp = input.nextLine()

val sql =
"INSERT INTO data_karyawan (id_dapartemen,
nama_lengkap, jenkel, tmp_lahir, tgl_lahir, alamat, tgl_masuk,
no_telp) VALUES ('$id_dapartemen', '$nama_lengkap', '$jenkel',
'$tmp_lahir', '$tgl_lahir', '$alamat', '$tgl_masuk',
'$no_telp')"

stmt.execute(sql)
println("Data Berhasil Disimpan")
} catch (e: Exception) {
e.printStackTrace()
}
}
fun TambahGaji() {
try {
print("No Nota: ")
var id_nota = input.nextInt()
input.nextLine() // Consume the newline character left
in the buffer
print("ID Pegawai: ")
var id_karyawan = input.nextInt()
input.nextLine()
print("No Slip: ")
var no_slip = input.nextInt()
input.nextLine()
print("Jumlah Gaji: ")
var jmlh = input.nextLine()

// No need to include id_pegawai in the column list


val sql =
"INSERT INTO gaji_total (no_nota, id_pegawai,
id_slip, jmlh_gaji) VALUES ('$id_nota', '$id_karyawan',
'$no_slip', '$jmlh')"

stmt.execute(sql)
println("Data Berhasil Disimpan")
} catch (e: Exception) {
e.printStackTrace()
}
}

fun EditDataKaryawan() {
try {
print("ID Yang Mau Diedit: ")
var id_pegawai = input.nextInt()

input.nextLine() // Consume the newline character left


in the buffer
print("Id Dapartemen: ")
var id_dapartemen = input.nextInt()
input.nextLine() // Consume the newline character left
in the buffer

print("Nama: ")
var nama_lengkap = input.nextLine()
print("Jenis Kelamin: ")
var jenkel = input.nextLine()
print("Tempat Lahir: ")
var tmp_lahir = input.nextLine()
print("Tanggal Lahir: ")
var tgl_lahir = input.nextLine()
print("Alamat: ")
var alamat = input.nextLine()
print("Tanggal Masuk: ")
var tgl_masuk = input.nextLine()
print("Nomor Telpon: ")
var no_telp = input.nextLine()

var sql =
"UPDATE data_karyawan SET
id_dapartemen='$id_dapartemen', nama_lengkap='$nama_lengkap',
jenkel='$jenkel', tmp_lahir='$tmp_lahir',
tgl_lahir='$tgl_lahir', alamat='$alamat',
tgl_masuk='$tgl_masuk', no_telp='$no_telp' WHERE
id_pegawai=$id_pegawai "
stmt.execute(sql)
println("Data Berhasil Diupdate")
} catch (e: Exception) {
e.printStackTrace()
}
}

fun HapusDataKaryawan() {
try {
print("ID Yang Mau Dihapus: ")
var id_pegawai = input.nextInt()
var sql = "DELETE FROM data_karyawan WHERE
id_pegawai=$id_pegawai"
stmt.execute(sql)
println("Data Berhasil Dihapus")
} catch (e: Exception) {
e.printStackTrace()
}
}

fun Persetujuan() {
println("\n=== Persetujuan Cuti ===")

try {
// Ambil data pengajuan cuti yang menunggu persetujuan
dengan tanggal pengajuan hari ini
val selectQuery =
"SELECT cuti.no, cuti.id_pegawai,
data_karyawan.nama_lengkap, cuti.tgl_mulai, cuti.keterangan " +
"FROM cuti " +
"INNER JOIN data_karyawan ON cuti.id_pegawai
= data_karyawan.id_pegawai " +
"WHERE cuti.status_cuti = 'Menunggu
Persetujuan' AND DATE(cuti.tgl_mulai) = CURRENT_DATE"
val selectStmt = conn.prepareStatement(selectQuery)
val rs = selectStmt.executeQuery()

println("==================================")
println("ID Pengajuan | ID Karyawan | Nama Karyawan |
Tanggal Pengajuan | Alasan")
println("==================================")

while (rs.next()) {
val idPengajuan = rs.getInt("no")
val idKaryawan = rs.getInt("id_pegawai")
val nama = rs.getString("nama_lengkap")
val tanggalPengajuan = rs.getDate("tgl_mulai")
val alasan = rs.getString("keterangan")

println("$idPengajuan | $idKaryawan | $nama |


$tanggalPengajuan | $alasan")
}

// Admin memutuskan untuk menyetujui atau menolak


pengajuan cuti
print("Pilih ID Pengajuan untuk disetujui (0 untuk
kembali): ")
val idPengajuan = input.nextInt()

if (idPengajuan != 0) {
// Admin memutuskan untuk menyetujui atau menolak
pengajuan cuti
print("Apakah Anda menyetujui pengajuan cuti ini?
(ya/tidak): ")
val keputusan = input.next().toLowerCase()

val updateQuery = when (keputusan) {


"ya" -> "UPDATE cuti SET status_cuti =
'Disetujui' WHERE no = ?"
"tidak" -> "UPDATE cuti SET status_cuti =
'Ditolak' WHERE no = ?"
else -> {
println("Pilihan tidak valid.")
return
}
}

conn.prepareStatement(updateQuery).use { updateStmt
->
updateStmt.setInt(1, idPengajuan)
val affectedRows = updateStmt.executeUpdate()

if (affectedRows > 0) {
println("Keputusan pengajuan cuti berhasil
diupdate.")
} else {
println("Gagal mengupdate keputusan
pengajuan cuti.")
}
}
}

} catch (e: Exception) {


e.printStackTrace()
}
}

fun PersetujuanSeluruh() {
println("\n=== Persetujuan Cuti ===")

try {
// Ambil data pengajuan cuti yang menunggu persetujuan
dengan tanggal pengajuan hari ini
val selectQuery =
"SELECT cuti.no, cuti.id_pegawai,
data_karyawan.nama_lengkap, cuti.tgl_mulai, cuti.keterangan " +
"FROM cuti " +
"INNER JOIN data_karyawan ON cuti.id_pegawai
= data_karyawan.id_pegawai " +
"WHERE cuti.status_cuti = 'Menunggu
Persetujuan'"
val selectStmt = conn.prepareStatement(selectQuery)
val rs = selectStmt.executeQuery()

println("==================================")
println("ID Pengajuan | ID Karyawan | Nama Karyawan |
Tanggal Pengajuan | Alasan")
println("==================================")

while (rs.next()) {
val idPengajuan = rs.getInt("no")
val idKaryawan = rs.getInt("id_pegawai")
val nama = rs.getString("nama_lengkap")
val tanggalPengajuan = rs.getDate("tgl_mulai")
val alasan = rs.getString("keterangan")

println("$idPengajuan | $idKaryawan | $nama |


$tanggalPengajuan | $alasan")
}

// Admin memutuskan untuk menyetujui atau menolak


pengajuan cuti
print("Pilih ID Pengajuan untuk disetujui (0 untuk
kembali): ")
val idPengajuan = input.nextInt()

if (idPengajuan != 0) {
// Admin memutuskan untuk menyetujui atau menolak
pengajuan cuti
print("Apakah Anda menyetujui pengajuan cuti ini?
(ya/tidak): ")
val keputusan = input.next().toLowerCase()

val updateQuery = when (keputusan) {


"ya" -> "UPDATE cuti SET status_cuti =
'Disetujui' WHERE no = ?"
"tidak" -> "UPDATE cuti SET status_cuti =
'Ditolak' WHERE no = ?"
else -> {
println("Pilihan tidak valid.")
return
}
}

conn.prepareStatement(updateQuery).use { updateStmt
->
updateStmt.setInt(1, idPengajuan)
val affectedRows = updateStmt.executeUpdate()

if (affectedRows > 0) {
println("Keputusan pengajuan cuti berhasil
diupdate.")
} else {
println("Gagal mengupdate keputusan
pengajuan cuti.")
}
}
}

} catch (e: Exception) {


e.printStackTrace()
}
}

fun DataAbsensiKaryawan() {
println("\n=== Data Absensi Karyawan ===")

try {
// Ambil data absensi dari tabel absensi
val selectQuery = "SELECT absensi.kd_absen,
data_karyawan.nama_lengkap, " +
"absensi.id_pegawai, absensi.tgl_absen " +
"FROM absensi INNER JOIN data_karyawan " +
"ON absensi.id_pegawai =
data_karyawan.id_pegawai"
val selectStmt = conn.prepareStatement(selectQuery)
val rs = selectStmt.executeQuery()
println("==================================")
println("ID Absensi | Nama Karyawan | ID Karyawan |
Tanggal Absen")
println("==================================")

while (rs.next()) {
val idAbsensi = rs.getInt("kd_absen")
val nama = rs.getString("nama_lengkap")
val idKaryawan = rs.getInt("id_pegawai")
val tanggalAbsen = rs.getDate("tgl_absen")

println("$idAbsensi | $nama | $idKaryawan |


$tanggalAbsen")
}

println("Data absensi karyawan berhasil ditampilkan.")


} catch (e: Exception) {
e.printStackTrace()
}
}

fun DataGajiKaryawan() {
println("\n=== Data Gaji Karyawan ===")

try {
// Ambil data gaji dari tabel gaji
val selectQuery = "SELECT gaji_total.no_nota,
data_karyawan.nama_lengkap, " +
"data_karyawan.id_pegawai,
dapartemen.dapartemen, gaji_total.jmlh_gaji " +
"FROM gaji_total " +
"INNER JOIN data_karyawan ON
gaji_total.id_pegawai = data_karyawan.id_pegawai " +
"INNER JOIN dapartemen ON
data_karyawan.id_dapartemen = dapartemen.id_dapartemen"
val selectStmt = conn.prepareStatement(selectQuery)
val rs = selectStmt.executeQuery()

println("====================================")
println("ID Gaji | ID Karyawan | Nama Karyawan |
Dapartemen | Jumlah Gaji")
println("====================================")

while (rs.next()) {
val idGaji = rs.getInt("no_nota")
val idKaryawan = rs.getInt("id_pegawai")
val nama = rs.getString("nama_lengkap")
val dapar = rs.getString("dapartemen")
val jumlahGaji = rs.getDouble("jmlh_gaji")

println("$idGaji | $idKaryawan | $nama | $dapar |


$jumlahGaji")
}

println("Data gaji karyawan berhasil ditampilkan.")


} catch (e: Exception) {
e.printStackTrace()
}
}

2. Penjelasan Study Kasus


Dalam pengembangan sistem pengolahan data karyawan di suatu instansi,
kami memilih pendekatan yang menggabungkan kecanggihan konsep
Pemrograman Berorientasi Objek (PBO) dan metode relasi antar tabel di database.
Rancangan konseptual kami, yang tergambar dengan jelas dalam gambar,
menunjukkan bagaimana entitas data, seperti karyawan, gaji, absensi, dan
sebagainya, saling terkait untuk menciptakan sistem yang terstruktur.
Kami telah merinci langkah-langkah implementasi yang mencakup desain
struktur database dengan tabel-tabel terkait. Setiap tabel memiliki peranannya
sendiri, dan hubungan antar tabel dirancang dengan cermat untuk memastikan
integritas data dan konsistensi. Penggunaan indeks dalam database juga kami
maksimalkan untuk meningkatkan performa sistem, terutama dalam hal pencarian
dan pengambilan data.
Dalam kode, kami telah menghadirkan sejumlah method yang
mencerminkan kebutuhan di berbagai bidang. Terdapat metode untuk manipulasi
data, seperti menambahkan karyawan baru, memperbarui informasi gaji,
merekam data absensi, dan sebagainya. Kami juga merancang metode khusus
untuk perhitungan gaji, yang memanfaatkan informasi dari tabel gaji dan tabel
karyawan. Adanya rekapitulasi data absensi memudahkan pengguna untuk
melihat dan menganalisis kehadiran karyawan dengan lebih baik.
Dengan demikian, solusi yang kami hasilkan bukan hanya merupakan
suatu sistem yang teknis efisien, tetapi juga memberikan pengalaman pengguna
yang menyenangkan dan intuitif. Melalui penggabungan konsep PBO dan
implementasi database yang cermat, kami yakin bahwa sistem pengolahan data
karyawan kami memberikan solusi yang bagus dan berkualitas untuk kebutuhan
suatu instansi.

3. Database

➢ Absensi
➢ Cuti

➢ Dapartemen

➢ Data_Karyawan
➢ Gaji_Total

4. Output
• Sebagai admin
===Login Sebagai===
1. Admin
2. Karyawan
0. Hentikan Program

Pilih >>> 1

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 1
=====================
Tampil Data Karyawan
=====================
Id_Pegawai: 1, Id_dapartemen: 904, Nama Lengkap: husnul, Jenis
Kelamin: oer, Tempat Lahir: sungai, Tanggal Lahir: 221104, Alamat:
sbakwecb wechie, Tanggal Masuk: 0082913, No Telpon: 0987668
Id_Pegawai: 2, Id_dapartemen: 910, Nama Lengkap: Intan Ayu, Jenis
Kelamin: Perempuan, Tempat Lahir: Belinyu, Tanggal Lahir: 16 11
2004, Alamat: Saber, Tanggal Masuk: 2023 12 21, No Telpon:
08315463748
Id_Pegawai: 4, Id_dapartemen: 900, Nama Lengkap: pidsil, Jenis
Kelamin: perempuan, Tempat Lahir: mabet, Tanggal Lahir: 17 11
2004, Alamat: cukruk, Tanggal Masuk: 14, No Telpon: 0987
Id_Pegawai: 6, Id_dapartemen: 911, Nama Lengkap: Pidaryani, Jenis
Kelamin: Perempuan, Tempat Lahir: Toboali, Tanggal Lahir: 12 09
2003, Alamat: Toboali, Tanggal Masuk: 2023 20 12, No Telpon:
08923736376

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 2
Id Dapartemen: 900
Nama: Lucita
Jenis Kelamin: Perempuan
Tempat Lahir: Mabet
Tanggal Lahir: 26 April 2004
Alamat: Mabet
Tanggal Masuk: 20 Januari 2019
nomor Telpon: 0897219
Data Berhasil Disimpan

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali
Pilih >>> 1
=====================
Tampil Data Karyawan
=====================
Id_Pegawai: 1, Id_dapartemen: 904, Nama Lengkap: husnul, Jenis
Kelamin: oer, Tempat Lahir: sungai, Tanggal Lahir: 221104, Alamat:
sbakwecb wechie, Tanggal Masuk: 0082913, No Telpon: 0987668
Id_Pegawai: 2, Id_dapartemen: 910, Nama Lengkap: Intan Ayu, Jenis
Kelamin: Perempuan, Tempat Lahir: Belinyu, Tanggal Lahir: 16 11
2004, Alamat: Saber, Tanggal Masuk: 2023 12 21, No Telpon:
08315463748
Id_Pegawai: 4, Id_dapartemen: 900, Nama Lengkap: pidsil, Jenis
Kelamin: perempuan, Tempat Lahir: mabet, Tanggal Lahir: 17 11
2004, Alamat: cukruk, Tanggal Masuk: 14, No Telpon: 0987
Id_Pegawai: 6, Id_dapartemen: 911, Nama Lengkap: Pidaryani, Jenis
Kelamin: Perempuan, Tempat Lahir: Toboali, Tanggal Lahir: 12 09
2003, Alamat: Toboali, Tanggal Masuk: 2023 20 12, No Telpon:
08923736376
Id_Pegawai: 10, Id_dapartemen: 900, Nama Lengkap: Lucita, Jenis
Kelamin: Perempuan, Tempat Lahir: Mabet, Tanggal Lahir: 26 April
2004, Alamat: Mabet, Tanggal Masuk: 20 Januari 2019, No Telpon:
0897219

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 3
No Nota: 89
ID Pegawai: 10
No Slip: 78
Jumlah Gaji: 5000000
Data Berhasil Disimpan

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 4
ID Yang Mau Diedit: 4
Id Dapartemen: 901
Nama: Silvia
Jenis Kelamin: Perempuan
Tempat Lahir: Sungailiat
Tanggal Lahir: 17 Agustus 2004
Alamat: Matras
Tanggal Masuk: 8 April 2017
Nomor Telpon: 0863552
Data Berhasil Diupdate

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 1
=====================
Tampil Data Karyawan
=====================
Id_Pegawai: 1, Id_dapartemen: 904, Nama Lengkap: husnul, Jenis
Kelamin: oer, Tempat Lahir: sungai, Tanggal Lahir: 221104, Alamat:
sbakwecb wechie, Tanggal Masuk: 0082913, No Telpon: 0987668
Id_Pegawai: 2, Id_dapartemen: 910, Nama Lengkap: Intan Ayu, Jenis
Kelamin: Perempuan, Tempat Lahir: Belinyu, Tanggal Lahir: 16 11
2004, Alamat: Saber, Tanggal Masuk: 2023 12 21, No Telpon:
08315463748
Id_Pegawai: 4, Id_dapartemen: 901, Nama Lengkap: Silvia, Jenis
Kelamin: Perempuan, Tempat Lahir: Sungailiat, Tanggal Lahir: 17
Agustus 2004, Alamat: Matras, Tanggal Masuk: 8 April 2017, No
Telpon: 0863552
Id_Pegawai: 6, Id_dapartemen: 911, Nama Lengkap: Pidaryani, Jenis
Kelamin: Perempuan, Tempat Lahir: Toboali, Tanggal Lahir: 12 09
2003, Alamat: Toboali, Tanggal Masuk: 2023 20 12, No Telpon:
08923736376
Id_Pegawai: 10, Id_dapartemen: 900, Nama Lengkap: Lucita, Jenis
Kelamin: Perempuan, Tempat Lahir: Mabet, Tanggal Lahir: 26 April
2004, Alamat: Mabet, Tanggal Masuk: 20 Januari 2019, No Telpon:
0897219

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 5
ID Yang Mau Dihapus: 6
Data Berhasil Dihapus

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 1
=====================
Tampil Data Karyawan
=====================
Id_Pegawai: 1, Id_dapartemen: 904, Nama Lengkap: husnul, Jenis
Kelamin: oer, Tempat Lahir: sungai, Tanggal Lahir: 221104, Alamat:
sbakwecb wechie, Tanggal Masuk: 0082913, No Telpon: 0987668
Id_Pegawai: 2, Id_dapartemen: 910, Nama Lengkap: Intan Ayu, Jenis
Kelamin: Perempuan, Tempat Lahir: Belinyu, Tanggal Lahir: 16 11
2004, Alamat: Saber, Tanggal Masuk: 2023 12 21, No Telpon:
08315463748
Id_Pegawai: 4, Id_dapartemen: 901, Nama Lengkap: Silvia, Jenis
Kelamin: Perempuan, Tempat Lahir: Sungailiat, Tanggal Lahir: 17
Agustus 2004, Alamat: Matras, Tanggal Masuk: 8 April 2017, No
Telpon: 0863552
Id_Pegawai: 10, Id_dapartemen: 900, Nama Lengkap: Lucita, Jenis
Kelamin: Perempuan, Tempat Lahir: Mabet, Tanggal Lahir: 26 April
2004, Alamat: Mabet, Tanggal Masuk: 20 Januari 2019, No Telpon:
0897219

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 6
Pilih Menu:
1. Cuti Hari Ini
2. Tampilkan Seluruh Data

Pilih >>> 1

=== Persetujuan Cuti ===


==================================
ID Pengajuan | ID Karyawan | Nama Karyawan | Tanggal Pengajuan |
Alasan
==================================
Pilih ID Pengajuan untuk disetujui (0 untuk kembali): 0

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 6
Pilih Menu:
1. Cuti Hari Ini
2. Tampilkan Seluruh Data

Pilih >>> 1

=== Persetujuan Cuti ===


==================================
ID Pengajuan | ID Karyawan | Nama Karyawan | Tanggal Pengajuan |
Alasan
==================================
Pilih ID Pengajuan untuk disetujui (0 untuk kembali): 0

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 6
Pilih Menu:
1. Cuti Hari Ini
2. Tampilkan Seluruh Data

Pilih >>> 2

=== Persetujuan Cuti ===


==================================
ID Pengajuan | ID Karyawan | Nama Karyawan | Tanggal Pengajuan |
Alasan
==================================
8 | 2 | Intan Ayu | 2023-12-19 | sakit
Pilih ID Pengajuan untuk disetujui (0 untuk kembali): 0

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 6
Pilih Menu:
1. Cuti Hari Ini
2. Tampilkan Seluruh Data

Pilih >>> 2
=== Persetujuan Cuti ===
==================================
ID Pengajuan | ID Karyawan | Nama Karyawan | Tanggal Pengajuan |
Alasan
==================================
8 | 2 | Intan Ayu | 2023-12-19 | sakit
Pilih ID Pengajuan untuk disetujui (0 untuk kembali): 8
Apakah Anda menyetujui pengajuan cuti ini? (ya/tidak): ya
Keputusan pengajuan cuti berhasil diupdate.

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 7

=== Data Absensi Karyawan ===


==================================
ID Absensi | Nama Karyawan | ID Karyawan | Tanggal Absen
==================================
2 | husnul | 1 | 2023-12-18
5 | husnul | 1 | 2023-12-19
3 | Intan Ayu | 2 | 2023-12-18
4 | Silvia | 4 | 2023-12-18
Data absensi karyawan berhasil ditampilkan.

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Tambah Data Karyawan
3. Tambah Gaji Karyawan
4. Edit Data Karyawan
5. Hapus Data Karyawan
6. Persetujuan Karyawan
7. Tampilkan Data Absensi Karyawan
8. Tampilkan Data Gaji Karyawan
0. Kembali

Pilih >>> 8

=== Data Gaji Karyawan ===


====================================
ID Gaji | ID Karyawan | Nama Karyawan | Dapartemen | Jumlah Gaji
====================================
1 | 1 | husnul | Danus | 300000.0
21 | 4 | Silvia | Komunikasi | 3100000.0
89 | 10 | Lucita | Sosial | 5000000.0
625 | 2 | Intan Ayu | Komunikasi | 200000.0
Data gaji karyawan berhasil ditampilkan.
• Sebagai Karyawan
===Login Sebagai===
1. Admin
2. Karyawan
0. Hentikan Program

Pilih >>> 2

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Edit Data Karyawan
3. Pengajuan Cuti
4. Absensi Karyawan
5. Gaji Karyawan
6. Status Cuti
0. Kembali

Pilih >>> 1
Masukkan ID Karyawan:
2
=====================
Tampil Data Karyawan
=====================
Id_Pegawai: 2
Id_dapartemen: 901
Nama Lengkap: Intan Ayu
Jenis Kelamin: Perempuan
Tempat Lahir: Belinyu
Tanggal Lahir: 16 11 2004
Alamat: Saber
Tanggal Masuk: 2023 12 21
No Telpon: 08315463748

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Edit Data Karyawan
3. Pengajuan Cuti
4. Absensi Karyawan
5. Gaji Karyawan
6. Status Cuti
0. Kembali

Pilih >>> 3

=== Pengajuan Cuti ===


Masukkan ID Karyawan: 2
Masukkan Alasan Cuti: Acara Keluarga
Masukkan Tanggal Pengajuan (yyyy-MM-dd): 2023-12-22
Masukkan Tanggal Selesai (yyyy-MM-dd): 2023-12-27
Pengajuan cuti berhasil diajukan.

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Edit Data Karyawan
3. Pengajuan Cuti
4. Absensi Karyawan
5. Gaji Karyawan
6. Status Cuti
0. Kembali

Pilih >>> 4

=== Input Absensi Karyawan ===


Masukkan ID Karyawan: 2
Masukkan Tanggal Absen (yyyy-MM-dd): 2023-12-21
Masukkan Jam Datang: 07.30
Masukkan Jam Pulang: 16.00
Absensi karyawan berhasil dicatat.

===Silahkan Pilih Menu===


1. Tampilkan Data Karyawan
2. Edit Data Karyawan
3. Pengajuan Cuti
4. Absensi Karyawan
5. Gaji Karyawan
6. Status Cuti
0. Kembali

Pilih >>> 5
Masukkan ID Karyawan:
2

=== Data Gaji Karyawan ===


====================================
ID Gaji | Nama Karyawan | ID Karyawan | Jumlah Gaji
====================================
625 | Intan Ayu | 2 | 200000.0
===Silahkan Pilih Menu===
1. Tampilkan Data Karyawan
2. Edit Data Karyawan
3. Pengajuan Cuti
4. Absensi Karyawan
5. Gaji Karyawan
6. Status Cuti
0. Kembali

Pilih >>> 6
Masukkan ID Karyawan:
2

=== Data Status Cuti Karyawan ===


====================================
ID Karyawan | Nama Karyawan | Status
====================================
2 | Intan Ayu | Ditolak
2 | Intan Ayu | Disetujui
2 | Intan Ayu | Menunggu Persetujuan
Data status cuti karyawan berhasil ditampilkan
BAB III
PENUTUP
3.1 KESIMPULAN
Saat mengikuti mata kuliah Pemrograman Berorientasi Objek, kami
mendalami konsep dasar dan praktik terbaik dalam pengembangan perangkat
lunak berbasis objek. Kursus ini tidak hanya memberikan wawasan dalam
merancang dan mengimplementasikan program menggunakan paradigma
berorientasi objek, namun juga memanfaatkan konsep-konsep seperti pewarisan,
enkapsulasi, dan polimorfisme untuk mencapai desain yang bersih, efisien, dan
mudah dipahami. Aspek penting yang dipelajari adalah kegunaan enkapsulasi
untuk menyembunyikan detail implementasi dan menyediakan antarmuka yang
jelas.
Dengan menerapkan konsep ini, Anda dapat meningkatkan keamanan dan
keterbacaan kode serta mempermudah pengembangan tim Anda. Warisan juga
merupakan fokus utama, memungkinkan kita memanfaatkan hierarki kelas untuk
merancang solusi yang lebih fleksibel dan dapat digunakan kembali. Memahami
konsep ini dapat membantu Anda mengoptimalkan penggunaan kode,
mengurangi duplikasi, dan mempercepat proses pengembangan Anda.
Mata kuliah mempelajari cara menggunakan polimorfisme untuk menulis kode
yang dapat menangani berbagai jenis objek tanpa mengubah struktur inti.
Selain konsep dasar, juga akan terlibat dalam proyek praktis yang akan
membantu Anda menerapkan pengetahuan teoretis Anda pada situasi kehidupan
nyata. Melalui proyek-proyek ini, saya belajar berkolaborasi dalam tim
pengembangan perangkat lunak dan memahami tantangan yang mungkin timbul
dalam situasi dunia nyata.
Secara keseluruhan, kursus pemrograman berorientasi objek memberi kami
dasar yang kuat untuk memahami pengembangan perangkat lunak modern.
Sekarang memiliki kepercayaan diri dalam merancang dan mengimplementasikan
solusi perangkat lunak yang efisien, modular, dan mudah dipelihara. Kesempatan
in akan memberikan landasan yang kuat bagi saya untuk memasuki dunia
pemrograman dan akan menjadi modal berharga bagi karir saya di masa depan.
DAFTAR PUSTAKA

(RIKI AFRIANSYAH M. , Class Object Method Pada Kotlin, 2022)


(RIKI AFRIANSYAH M. , mutableListOf with constructor and Scanner in Kotlin, 2023)
(RIKI AFRIANSYAH M. , Setter, Getter, Method Tanpa Paramter , Method dengan
Paramater, 2022)
(RIKI AFRIANSYAH M. , Class Object Method Pada Kotlin, 2022)
(RIKI AFRIANSYAH M. , Case Study Pewarisan (Inheritance) pada pemrograman
Kotlin, 2022)
(RIKI AFRIANSYAH M. , Overloading dan Overriding Kotlin, 2022)
(RIKI AFRIANSYAH M. , Materi Access Modifier (Public, Private, Protected)
Pemrograman Kotlin, 2022)
(RIKI AFRIANSYAH M. , CRUD (CREATE READ UPDATE DELETE) MYSQL
JDBC WITH KOTLIN, 2022)

Anda mungkin juga menyukai