Dosen Pengampu: Bayutama Isnaini, S.Si., M.Si.
Disusun oleh: Kelompok 2
| Nama | NIM |
|---|---|
| Humaida Annafsul Mutmainnah | 21108062610047 |
| Keisha Dwian Kirani | 21108062610055 |
| Khansa Puspitasari | 21108062610060 |
| Masayu Putri Gunaratna | 21108062610066 |
| Muhamad Radifattah Anggaraksa | 21108062610068 |
Dunia Fantasi (Dufan) merupakan salah satu destinasi wisata wahana terbesar yang menghadapi lonjakan pengunjung setiap harinya, baik pada hari kerja (weekdays) maupun hari libur akhir pekan (weekends). Saat ini, sistem pencatatan loket tiket masuk masih dilakukan secara semi-manual, sehingga sering terjadi antrean panjang akibat lambatnya proses pengelompokkan kategori usia pengunjung dan perhitungan tarif yang bervariasi.
Untuk meningkatkan efisiensi operasional dan akurasi data finansial, pihak manajemen Dufan memutuskan untuk membangun sebuah Sistem Kasir Otomatis berbasis bahasa pemrograman R. Sistem ini diharapkan mampu mengolah data profil pengunjung secara massal (vektor data) untuk menghasilkan kode antrean, kategori kelompok usia, serta nominal harga tiket yang harus dibayar secara instan.
Kebijakan manual Dufan diintegrasikan ke dalam algoritma komputasi dengan ketentuan sebagai berikut:
no_id):
Setiap pengunjung mendapatkan kode unik 4 digit yang merepresentasikan
identitas hari kedatangan dan nomor urut mereka (misalnya kode huruf “A”
untuk hari Senin, “B” untuk Selasa, hingga “G” untuk hari Minggu).klmpk_umur):
Kategori anak-anak jika berusia maksimal 14 tahun, dan
kategori dewasa untuk usia di atas 14 tahun.hrga):
trf): Pengunjung yang datang pada hari Sabtu atau
Minggu (weekends) dikenakan biaya tambahan (surcharge)
sebesar 10% dari nilai harga dasar tiket mereka.Berikut adalah data mentah dari 30 pengunjung pertama yang dimasukkan ke dalam sistem:
nma <- c("Aris", "Bimo", "Caca", "Dedi", "Egao", "Fani", "Gani", "Heri", "Iwan", "Joko",
"Kiki", "Lili", "Mira", "Niko", "Okiw", "Pian", "Rian", "Sita", "Tioa", "Vina",
"Wawan", "Yudi", "Zaki", "Rara", "Budi", "Joni", "Tika", "Rani", "Zian", "Aliw")
usia <- c(26, 8, 15, 4, 35, 11, 6, 22, 12, 50,
10, 18, 1, 45, 9, 28, 7, 60, 11, 16,
2, 32, 12, 19, 8, 72, 24, 10, 5, 30)
harii <- rep(c("senin", "selasa", "rabu", "kamis", "jumat", "sabtu", "minggu"), times = c(4, 3, 2, 4, 6, 6, 5))
# Membuat data frame awal untuk visualisasi data mentah
data_mentah <- data.frame(No = 1:30, Nama = nma, Usia = usia, Hari = harii)
knitr::kable(
data_mentah,
caption = "Data Profil Mentah Pengunjung Dufan",
format.args = list(big.mark = ".", decimal.mark = ",")
)
| No | Nama | Usia | Hari |
|---|---|---|---|
| 1 | Aris | 26 | senin |
| 2 | Bimo | 8 | senin |
| 3 | Caca | 15 | senin |
| 4 | Dedi | 4 | senin |
| 5 | Egao | 35 | selasa |
| 6 | Fani | 11 | selasa |
| 7 | Gani | 6 | selasa |
| 8 | Heri | 22 | rabu |
| 9 | Iwan | 12 | rabu |
| 10 | Joko | 50 | kamis |
| 11 | Kiki | 10 | kamis |
| 12 | Lili | 18 | kamis |
| 13 | Mira | 1 | kamis |
| 14 | Niko | 45 | jumat |
| 15 | Okiw | 9 | jumat |
| 16 | Pian | 28 | jumat |
| 17 | Rian | 7 | jumat |
| 18 | Sita | 60 | jumat |
| 19 | Tioa | 11 | jumat |
| 20 | Vina | 16 | sabtu |
| 21 | Wawan | 2 | sabtu |
| 22 | Yudi | 32 | sabtu |
| 23 | Zaki | 12 | sabtu |
| 24 | Rara | 19 | sabtu |
| 25 | Budi | 8 | sabtu |
| 26 | Joni | 72 | minggu |
| 27 | Tika | 24 | minggu |
| 28 | Rani | 10 | minggu |
| 29 | Zian | 5 | minggu |
| 30 | Aliw | 30 | minggu |
Program ini memanfaatkan beberapa fungsi dan konsep dasar pemrograman
R untuk otomatisasi: 1. Manajemen Vektor Data (c()
dan rep()): Memasukkan data mentah dan melakukan
replikasi data hari agar seimbang. 2. Logika Percabangan /
Kondisi Vektor (ifelse()): Digunakan untuk
menyaring kondisi hari (weekdays / weekends),
mengelompokkan kategori umur, serta menghitung tarif bersyarat. 3.
Penyusunan Laporan Akhir (data.frame()):
Menggabungkan seluruh variabel independen menjadi satu objek tabel dua
dimensi yang terstruktur.
Proses pengolahan data antrean, penentuan segmentasi hari, pengelompokan umur, hingga kalkulasi tarif akhir dilakukan menggunakan komputasi vektor di bawah ini:
# 1. Menghitung Penomoran Antrean Unik
urutan <- seq(0.01, 0.30, length.out = 30)
kode <- rep(LETTERS[1:7], times = c(4, 3, 2, 4, 6, 6, 5))
no_id <- paste0(kode, urutan)
# 2. Menentukan Segmentasi Hari (Weekdays vs Weekends)
pekan <- ifelse(harii == "minggu" | harii == "sabtu", "weekends", "weekdays")
# 3. Segmentasi Kelompok Umur Demografi
klmpk_umur <- ifelse(usia <= 14, "anak-anak", "dewasa")
# 4. Menentukan Harga Dasar Berdasarkan Aturan Usia Baru (0-14 Tahun)
hrga <- ifelse(usia <= 14, 40000, 50000)
# 5. Menghitung Tarif Akhir Menggunakan Surcharge 10% di Akhir Pekan
trf <- ifelse(pekan == "weekends", hrga + (hrga * 0.1), hrga)
# 6. Menggabungkan ke Laporan Utama
tiket_dufan <- data.frame(no = 1:30, no_id, nma, usia, pekan, harga = trf)
Berikut adalah output lembar manifest atau struk laporan kasir utama Dunia Fantasi (Dufan) yang berhasil dipetakan secara otomatis oleh sistem:
knitr::kable(
tiket_dufan,
caption = "Laporan Manifes Sistem Kasir Otomatis Dunia Fantasi",
format.args = list(big.mark = ".", decimal.mark = ",")
)
| no | no_id | nma | usia | pekan | harga |
|---|---|---|---|---|---|
| 1 | A0.01 | Aris | 26 | weekdays | 50.000 |
| 2 | A0.02 | Bimo | 8 | weekdays | 40.000 |
| 3 | A0.03 | Caca | 15 | weekdays | 50.000 |
| 4 | A0.04 | Dedi | 4 | weekdays | 40.000 |
| 5 | B0.05 | Egao | 35 | weekdays | 50.000 |
| 6 | B0.06 | Fani | 11 | weekdays | 40.000 |
| 7 | B0.07 | Gani | 6 | weekdays | 40.000 |
| 8 | C0.08 | Heri | 22 | weekdays | 50.000 |
| 9 | C0.09 | Iwan | 12 | weekdays | 40.000 |
| 10 | D0.1 | Joko | 50 | weekdays | 50.000 |
| 11 | D0.11 | Kiki | 10 | weekdays | 40.000 |
| 12 | D0.12 | Lili | 18 | weekdays | 50.000 |
| 13 | D0.13 | Mira | 1 | weekdays | 40.000 |
| 14 | E0.14 | Niko | 45 | weekdays | 50.000 |
| 15 | E0.15 | Okiw | 9 | weekdays | 40.000 |
| 16 | E0.16 | Pian | 28 | weekdays | 50.000 |
| 17 | E0.17 | Rian | 7 | weekdays | 40.000 |
| 18 | E0.18 | Sita | 60 | weekdays | 50.000 |
| 19 | E0.19 | Tioa | 11 | weekdays | 40.000 |
| 20 | F0.2 | Vina | 16 | weekends | 55.000 |
| 21 | F0.21 | Wawan | 2 | weekends | 44.000 |
| 22 | F0.22 | Yudi | 32 | weekends | 55.000 |
| 23 | F0.23 | Zaki | 12 | weekends | 44.000 |
| 24 | F0.24 | Rara | 19 | weekends | 55.000 |
| 25 | F0.25 | Budi | 8 | weekends | 44.000 |
| 26 | G0.26 | Joni | 72 | weekends | 55.000 |
| 27 | G0.27 | Tika | 24 | weekends | 55.000 |
| 28 | G0.28 | Rani | 10 | weekends | 44.000 |
| 29 | G0.29 | Zian | 5 | weekends | 44.000 |
| 30 | G0.3 | Aliw | 30 | weekends | 55.000 |
Sistem otomatisasi ini berhasil memetakan harga tiket dasar secara
tepat berdasarkan aturan usia fisik. Dari 30 data pengunjung yang
diproses, kolom pekan berhasil menyaring kedatangan akhir
pekan (weekends) pada urutan baris ke-20 hingga ke-30 secara
tepat, sehingga rumus kalkulasi surcharge tambahan sebesar 10%
otomatis aktif hanya untuk pengunjung di hari Sabtu dan Minggu. Hal ini
meminimalkan risiko kesalahan hitung manual oleh petugas loket.
Laporan manifest ini dapat diekspor langsung ke format
.xlsx dengan mengaktifkan pustaka
openxlsx:
library(openxlsx)
write.xlsx(tiket_dufan, file = "Laporan_Tiket_Dufan.xlsx", overwrite = TRUE)