Anda di halaman 1dari 19

Program Kuota dan Teller bank

Raihan Ikhlasul Amal, Siti Aulia Farhani

Jurnal Algoritma
Institut Teknologi Garut
Jl. Mayor Syamsu No. 1 Jayaraga Garut 44151 Indonesia
Email : jurnal@itg.ac.id
2206014@itg.ac.id
2206022@itg.ac.id

Abstrak – Pada era digital saat ini, peran teknologi informasi dalam industri perbankan sangat
penting untuk meningkatkan efisiensi dan memberikan layanan yang lebih baik kepada nasabah.
Dalam mengelola kuota dan teller bank, algoritma stuck dan queue dapat digunakan untuk
mengoptimalkan proses pelayanan. Penerapan algoritma stuck dan queue dalam pengelolaan kuota
dan teller bank dapat membantu menghindari ketidakadilan dan mengoptimalkan waktu tunggu
nasabah. Dengan menggunakan algoritma stuck, batasan kuota teller dapat diatur sesuai dengan
kapasitas dan kemampuan pelayanan. Sementara itu, algoritma queue memastikan bahwa nasabah
dilayani secara adil dan sesuai dengan urutan kedatangan mereka.

Kata Kunci – Stack, Queue

I. PENDAHULUAN
Algoritma stack dan queue adalah dua struktur data yang digunakan dalam pemrograman untuk mengatur dan
mengelola data dengan cara yang terstruktur. Stack merupakan struktur data linier yang bekerja berdasarkan
prinsip LIFO (Last In, First Out), di mana elemen terakhir yang dimasukkan ke dalam stack akan menjadi
elemen pertama yang diambil. Sementara itu, queue merupakan struktur data linier yang mengikuti prinsip FIFO
(First In, First Out), di mana elemen pertama yang dimasukkan ke dalam queue akan menjadi elemen pertama
yang diambil.
Dalam penelitian ini, kami akan menganalisis penggunaan algoritma stack dan queue dalam pengelolaan kuota
dan teller bank. Kami akan mengidentifikasi masalah yang dihadapi dalam mengatur kuota dan mengatur antrian
nasabah, dan kemudian mengusulkan solusi berdasarkan algoritma stack dan queue. Selain itu, kami akan
melakukan simulasi dan pengujian untuk mengevaluasi efektivitas dan efisiensi dari algoritma yang diusulkan
dalam meningkatkan pengalaman nasabah dan mengoptimalkan proses pelayanan.

1
Raihan ikhlasul amal, siti aulia farhani Jurnal Algoritma
Vol. 1; No.1 xx; 2023; Hal x-x

II. HASIL & PEMBAHASAN

A. Pembahasan

User Manager
User Manager adalah sebuah istilah yang mengacu pada perangkat lunakataufitur dalam sistem
komputer yang digunakan untuk mengelola pengguna (users) dan hak akses yang terkait dalam sistem
tersebut. User Manager memberikan kemampuan administratif yang diperlukan untuk membuat,
mengedit, menghapus, dan mengatur pengguna dalam lingkungan komputer tertentu. Fungsi utama
User Manager meliputi:
 Pembuatan Pengguna: User Manager memungkinkan administrator sistem untuk membuat akun
pengguna baru. Hal ini melibatkan pemberian nama pengguna (username), kata sandi
(password), dan lain lain.
 Pembaruan Pengguna: User Manager memungkinkan administrator sistem untuk memperbarui
akun pengguna yang sudah dibuat. Hal ini melibatkan pembaruan nama pengguna (username),
kata sandi (password), dan lain lain.
 Penghapusan Pengguna: User Manager memungkinkan administrator sistem untuk menghapus
akun pengguna yang sudah dibuat. Hal ini melibatkan penghapusan akun secara utuh, baik
nama pengguna (username), kata sandi (password), dan lain lain.

Stack
Stack adalah suatu tumpukan dari benda. Konsep utamanya adalah LIFO (Last In First Out), benda yang terakhir
masuk dalam stack akan menjadi benda pertama yang dikeluarkan dari stack.
Ada dua cara penerapan prinsip stack, yakni dengan array dan linked list. Setidaknya stack haruslah memiliki
operasi-operasi sebagai berikut.
 Push Untuk menambahkan item pada tumpukan paling atas
 Pop Untuk mengambil item teratas
 Clear Untuk mengosongkan stack
 IsEmpty Untuk memeriksa apakah stack kosong
 IsFull Untuk memeriksa apakah stack sudah penuh
 Retreive Untuk mendapatkan nilai dari item teratas

Queue
Queue disebut juga antrian dimana data masuk di satu sisi dan keluar di sisi yang lain. Queue bersifat FIFO
(First In First Out). Antrian (Queue) merupakan suatu kumpulan data yang penambahan elemennya (masuk
antrian) hanya bisa dilakukan pada suatu ujung (disebut dengan sisi belakang/rear) atau disebut juga enqueue
yaitu apabila seseorang masuk ke dalam sebuah antrian dan keluar dari antrian adalah dequeue.
Struktur data queue setidaknya harus memiliki operasi-operasi sebagai berikut :
 EnQueue : Memasukkan data ke dalam antrian
 DeQueue : Mengeluarkan data terdepan dari antrian

2 https://jurnal.itg.ac.id/
Jurnal Algoritma Raihan ikhlasul amal , siti aulia farhani
Vol. xx; No. xx; <Tahun>; Hal x-x

 Clear : Menghapus seluruh antrian


 IsEmpty : Memeriksa apakah antrian kosong
 IsFull : Memeriksa apakah antrian penuh.

B. Source Code Program & Penjelasan

Source code
#include <iostream>
#include <stack>
#include <queue>
#include <string>
using namespace std;

struct User {
string username;
string password;
};

//Dekllarasi User
vector<User> users;

//Fungsi
void addUser() {
User newUser;
cout << "Username: ";
cin >> newUser.username;
cout << "Password: ";
cin >> newUser.password;

users.push_back(newUser);
cout << "User ditambahkan!" << endl;
}

void updateUser() {
string username;
cout << "Masukkan username user yang akan diperbarui: ";
cin >> username;

bool found = false;


for (int i = 0; i < users.size(); i++) {
if (users[i].username == username) {
cout << "Username baru: ";
cin >> users[i].username;
cout << "Password baru: ";
cin >> users[i].password;
found = true;
break;

https://jurnal.itg.ac.id/ 3
Raihan ikhlasul amal, siti aulia farhani Jurnal Algoritma
Vol. 1; No.1 xx; 2023; Hal x-x

}
}

if (!found) {
cout << "User tidak ditemukan!" << endl;
} else {
cout << "User diperbarui!" << endl;
}
}

void removeUser() {
string username;
cout << "Masukkan username user yang akan dihapus: ";
cin >> username;

bool found = false;


for (int i = 0; i < users.size(); i++) {
if (users[i].username == username) {
users.erase(users.begin() + i);
found = true;
break;
}
}

if (!found) {
cout << "User tidak ditemukan!" << endl;
} else {
cout << "User dihapus!" << endl;
}
}

// Deklarasi stack untuk menyimpan kuota


stack<int> kuotaStack;

// Fungsi untuk menambahkan kuota


void beliKuota() {
int jumlahKuota;
cout << "Masukkan jumlah kuota yang ingin dibeli: ";
cin >> jumlahKuota;
kuotaStack.push(jumlahKuota);
cout << "Kuota sebanyak " << jumlahKuota << " GB telah ditambahkan." << endl;
}

// Fungsi untuk mengambil kuota


void gunakanKuota() {
if (kuotaStack.empty()) {
cout << "Kuota kosong. Tidak ada kuota yang dapat digunakan." << endl;
} else {
int kuota = kuotaStack.top();
kuotaStack.pop();

4 https://jurnal.itg.ac.id/
Jurnal Algoritma Raihan ikhlasul amal , siti aulia farhani
Vol. xx; No. xx; <Tahun>; Hal x-x

cout << "Kuota sebanyak " << kuota << " GB telah digunakan." << endl;
}
}

// Fungsi untuk menampilkan kuota saat ini


void tampilkanKuota() {
if (kuotaStack.empty()) {
cout << "Kuota kosong." << endl;
} else {
cout << "Kuota saat ini:" << endl;
stack<int> tempStack = kuotaStack;
int i = 1;
while (!tempStack.empty()) {
int kuota = tempStack.top();
tempStack.pop();
cout << i << ". " << kuota << " GB" << endl;
i++;
}
}
}

// Fungsi untuk menjumlahkan kuota saat ini


void jumlahkanKuota() {
if (kuotaStack.empty()) {
cout << "Kuota kosong. Tidak ada kuota yang dapat dijumlahkan." << endl;
} else {
int totalKuota = 0;
stack<int> tempStack = kuotaStack;
while (!tempStack.empty()) {
int kuota = tempStack.top();
tempStack.pop();
totalKuota += kuota;
}
cout << "Total kuota saat ini: " << totalKuota << " GB" << endl;
}
}

struct Customer {
string name;
int accountNumber;
int balance;
};

// Deklarasi antrian pelanggan di bank


queue<Customer> customerQueue;

// Fungsi untuk menambahkan pelanggan ke dalam antrian


void addCustomer() {
Customer customer;
cout << "Masukkan nama pelanggan: ";

https://jurnal.itg.ac.id/ 5
Raihan ikhlasul amal, siti aulia farhani Jurnal Algoritma
Vol. 1; No.1 xx; 2023; Hal x-x

cin.ignore();
getline(cin, customer.name);
cout << "Masukkan nomor akun pelanggan: ";
cin >> customer.accountNumber;
cout << "Masukkan saldo pelanggan: ";
cin >> customer.balance;
customerQueue.push(customer);
cout << "Pelanggan " << customer.name << " dengan nomor akun " << customer.accountNumber << "
dan saldo " << customer.balance << " telah ditambahkan ke dalam antrian." << endl;
}

// Fungsi untuk memanggil pelanggan selanjutnya


void callNextCustomer() {
if (customerQueue.empty()) {
cout << "Antrian pelanggan kosong. Tidak ada pelanggan yang dapat dipanggil." << endl;
} else {
Customer customer = customerQueue.front();
customerQueue.pop();
cout << "Pelanggan yang dipanggil:" << endl;
cout << "Nama: " << customer.name << endl;
cout << "Nomor Akun: " << customer.accountNumber << endl;
cout << "Saldo: " << customer.balance << endl;
}
}

// Fungsi untuk menampilkan antrian pelanggan di bank


void displayCustomerQueue() {
if (customerQueue.empty()) {
cout << "Antrian pelanggan kosong." << endl;
} else {
cout << "Antrian pelanggan di bank:" << endl;
int i = 1;
queue<Customer> tempQueue = customerQueue; // Menggunakan antrian sementara untuk tetap
menjaga isi antrian utama
while (!tempQueue.empty()) {
Customer customer = tempQueue.front();
tempQueue.pop();
cout << i << ". Nama: " << customer.name << ", Nomor Akun: " << customer.accountNumber <<
", Saldo: " << customer.balance << endl;
i++;
}
}
}

int main() {
int choice, nominal;
string username, password;

do {

6 https://jurnal.itg.ac.id/
Jurnal Algoritma Raihan ikhlasul amal , siti aulia farhani
Vol. xx; No. xx; <Tahun>; Hal x-x

cout << "\n=========== Konter & Teller Bank ===========\n";


cout << "1. Login sebagai Admin\n";
cout << "2. Login sebagai User Stack\n";
cout << "3. Login sebagai User Queue\n";
cout << "4. Keluar\n";
cout << "Pilihan Anda: ";
cin >> choice;

switch (choice) {
case 1:
cout << "Anda masuk ke User Manager." << endl;
cout << "Masukkan username : ";
cin >> username;
cout << "Masukkan password: ";
cin >> password;

if (username == "admin" && password == "admin123") {


do {
cout << "\n========== User Manager Menu ==========\n";
cout << "1. Tambah User\n";
cout << "2. Perbarui User\n";
cout << "3. Hapus User\n";
cout << "4. Keluar\n";
cout << "Pilihan Anda: ";
cin >> choice;
system("cls");

switch (choice) {
case 1:
addUser();
break;
case 2:
updateUser();
break;
case 3:
removeUser();
break;
case 4:
cout << "Anda telah keluar dari menu User Manager." << endl;
break;
default:
cout << "Pilihan tidak valid. Silakan coba lagi." << endl;
}
} while (choice != 4);
} else {
cout << "Username atau password salah. Akses ditolak." << endl;
}
break;
case 2:
cout << "Anda masuk ke User Stack." << endl;

https://jurnal.itg.ac.id/ 7
Raihan ikhlasul amal, siti aulia farhani Jurnal Algoritma
Vol. 1; No.1 xx; 2023; Hal x-x

cout << "Masukkan username (stack): ";


cin >> username;
cout << "Masukkan password: ";
cin >> password;

if (username == "stack" && password == "stack123") {


do {
cout << "\n========== User Stack Menu ==========\n";
cout << "1. Beli Kuota\n";
cout << "2. Gunakan Kuota\n";
cout << "3. Tampilkan Kuota yang Tersedia\n";
cout << "4. Jumlahkan Kuota\n";
cout << "5. Keluar\n";
cout << "Pilihan Anda: ";
cin >> choice;
system("cls");

switch (choice) {
case 1:
beliKuota();
break;
case 2:
gunakanKuota();
break;
case 3:
tampilkanKuota();
break;
case 4:
jumlahkanKuota();
break;
case 5:
cout << "Terima kasih! Program telah berakhir." << endl;
return 0;
default:
cout << "Pilihan tidak valid. Silakan coba lagi." << endl;
}
} while (choice != 5);
} else {
cout << "Username atau password salah. Akses ditolak." << endl;
}
break;
case 3:
cout << "Anda masuk ke Antrian Bank." << endl;
cout << "Masukkan username (queue): ";
cin >> username;
cout << "Masukkan password: ";
cin >> password;

if (username == "queue" && password == "queue123") {


do {

8 https://jurnal.itg.ac.id/
Jurnal Algoritma Raihan ikhlasul amal , siti aulia farhani
Vol. xx; No. xx; <Tahun>; Hal x-x

cout << "\n========== User Queue Menu ==========\n";


cout << "1. Tambah Pelanggan\n";
cout << "2. Panggil Pelanggan\n";
cout << "3. Tampilkan Antrian Pelanggan\n";
cout << "4. Jumlahkan Saldo Pelanggan\n";
cout << "5. Keluar\n" << endl;
cout << "Pilihan Anda: ";
cin >> choice;
system("cls");

switch (choice) {
case 1:
addCustomer();
break;
case 2:
callNextCustomer();
break;
case 3:
displayCustomerQueue();
break;
case 4: {
int totalBalance = 0;
queue<Customer> tempQueue = customerQueue;
while (!tempQueue.empty()) {
Customer customer = tempQueue.front();
tempQueue.pop();
totalBalance += customer.balance;
}
cout << "Total saldo pelanggan: " << totalBalance << endl;
break;
}
case 5:
cout << "Terima kasih! Program telah berakhir." << endl;
return 0;
default:
cout << "Pilihan tidak valid. Silakan coba lagi." << endl;
}
} while (choice != 4);
} else {
cout << "Username atau password salah. Akses ditolak." << endl;
}
break;
case 4:
cout << "Terima kasih! Program telah berakhir." << endl;
break;
default:
cout << "Pilihan tidak valid. Silakan coba lagi." << endl;
}
} while (choice != 5);

https://jurnal.itg.ac.id/ 9
Raihan ikhlasul amal, siti aulia farhani Jurnal Algoritma
Vol. 1; No.1 xx; 2023; Hal x-x

return 0;
}

Penjelasan Source Code

1. #include <iostream>: Ini adalah header file yang digunakan untuk input-output stream dalam C++.
2. #include <stack>: Ini adalah header file yang mengimport library stack, yang merupakan implementasi
dari struktur data stack dalam C++.
3. #include <queue>: Ini adalah header file yang mengimport library queue, yang merupakan implemen-
tasi dari struktur data queue dalam C++.
4. struct: Ini adalah deklarasi struktur data untuk User yang berisi variable atau atribut bernama username
dan password.
5. Didalam user manager ada beberapa fungsi void yang berfungsi untuk menambahkan pengguna baru ke
dalam vektor users, memperbarui data pengguna yang sudah ada dalam vektor users dan menghapus
pengguna dari vektor users.
6. Didalam program stack ada beberapa fungsi void yang diantaranya :
 void beliKuota() { ... }: Ini adalah definisi fungsi beliKuota() yang digunakan untuk menam-
bahkan kuota baru ke dalam stack kuotaStack.
 void gunakanKuota() { ... }: Ini adalah definisi fungsi gunakanKuota() yang digunakan untuk
mengambil dan menggunakan kuota dari stack kuotaStack.
 void tampilkanKuota() { ... }: Ini adalah definisi fungsi tampilkanKuota() yang digunakan untuk
menampilkan kuota yang tersedia dalam stack kuotaStack.
 void jumlahkanKuota() { ... }: Ini adalah definisi fungsi jumlahkanKuota() yang digunakan un-
tuk menjumlahkan total kuota yang tersedia dalam stack kuotaStack.

7. Didalam program queue ada beberapa fungsi void yang diantaranya:


 void addCustomer() { ... }: Ini adalah definisi fungsi addCustomer() yang digunakan untuk
menambahkan pelanggan ke dalam antrian customerQueue.
 void callNextCustomer() { ... }: Ini adalah definisi fungsi callNextCustomer() yang digunakan
untuk memanggil dan menghapus pelanggan berikutnya dari antrian customerQueue.
 void displayCustomerQueue() { ... }: Ini adalah definisi fungsi displayCustomerQueue() yang
digunakan untuk menampilkan seluruh antrian pelanggan dalam customerQueue.

10 https://jurnal.itg.ac.id/
Jurnal Algoritma Raihan ikhlasul amal , siti aulia farhani
Vol. xx; No. xx; <Tahun>; Hal x-x

8. int main(): Ini adalah fungsi utama yang menjalankan seluruh program. Program ini menggunakan peru-
langan do-while untuk menampilkan menu berulang kali dan menerima input dari pengguna hingga
pengguna memilih opsi keluar.
9. switch dan case: Ini adalah struktur kontrol yang digunakan untuk memilih tindakan yang akan diambil
berdasarkan nilai dari variabel choice yang sudah dibuat.
10. Void add digunakan untuk membuat username yang baru dengan maksimal 4 username. Dengan pro-
gram do while meminta pengguna memilih kategori pengguna antara "Stack" dan "Queue". Dengan
memerintahkan “switch” berfungsi untuk memeriksa nilai pilihan
 Jika pilihan adalah 1, maka pengguna ditetapkan sebagai pengguna "Stack", dan username dan pass-
word baru disimpan dalam variabel stackuser dan stackpass.
 Jika pilihan adalah 2, maka pengguna ditetapkan sebagai pengguna "Queue", dan username dan
password baru disimpan dalam variabel queueuser dan queuepass.
 Jika pilihan tidak valid, cetak pesan "Salah".
11. Void Update pada tabel diatas berfungsi untuk memperbaharui informasi pengguna yang sudah ditam -
bahkan sebelumnya.
12. Void remove ini digunakan untuk menghapus informasi pengguna yang ada dalam program berdasarkan
pilihan pengguna.
13. Void display stack ini digunakan untuk menampilkan data obat yang ada dalam program dan juga
memeriksa apakah stack obat tidak kosong (is empty), dan juga digunakan untuk mencetak nomor urut
dimulai dari angka 0.
14. Void push digunakan untuk menambahkan jenis obat baru ke dalam stack jika stack belum penuh.
15. Void pop digunakan untuk menghapus elemen teratas dari stack jika stack tidak kosong.
16. Void view digunakan untuk menampilkan data antrian. Jika antrian kosong, akan mencetak pesan "An-
trian Kosong!". Jika antrian penuh, akan mencetak pesan "Antrian Penuh!".
17. Void displayBarang digunakan untuk menampilkan daftar barang beserta harga-harganya kepada peng-
guna.
18. Void enqueue yang Anda berikan digunakan untuk menambahkan elemen ke dalam antrian. Jika antrian
belum penuh:
 Mencetak pesan "Masukkan Nama : " untuk meminta pengguna memasukkan nama.
 Membaca input nama dari pengguna menggunakan pernyataan cin.
 Mencetak pesan "Pilih Jenis Obat : " untuk meminta pengguna memilih jenis obat.
 Membaca input jenis obat dari pengguna menggunakan pernyataan cin.
 Menggunakan struktur switch untuk menentukan pesanan dan harga berdasarkan pilihan pengguna.

https://jurnal.itg.ac.id/ 11
Raihan ikhlasul amal, siti aulia farhani Jurnal Algoritma
Vol. 1; No.1 xx; 2023; Hal x-x

 Mencetak pesan "Masukkan jumlah pesanan : " untuk meminta pengguna memasukkan jumlah pe-
sanan.
 Membaca input jumlah pesanan dari pengguna menggunakan pernyataan cin.
 Menambahkan 1 ke nilai top (indeks atas) untuk menggeser posisi top antrian.
19. Void dequeue digunakan untuk menghapus elemen pertama dari antrian. Dan int main digunakan untuk
mengimplementasi login sebagai admin dengan menggunakan username dan password. Setelah login
berhasil, terdapat loop do-while yang menampilkan menu admin dan menerima input dari pengguna un-
tuk melakukan operasi pada data user.
20. Switch case pada table diatas mengimplementasikan setelah pengguna berhasil login sebagai pengguna
dengan username dan password yang sesuai, kemudian pengguna diarahkan pada tampilan menu dan
melakukan operasi pada data antrian di apotek.

C. Output Program

12 https://jurnal.itg.ac.id/
Jurnal Algoritma Raihan ikhlasul amal , siti aulia farhani
Vol. xx; No. xx; <Tahun>; Hal x-x

https://jurnal.itg.ac.id/ 13
Raihan ikhlasul amal, siti aulia farhani Jurnal Algoritma
Vol. 1; No.1 xx; 2023; Hal x-x

14 https://jurnal.itg.ac.id/
Jurnal Algoritma Raihan ikhlasul amal , siti aulia farhani
Vol. xx; No. xx; <Tahun>; Hal x-x

https://jurnal.itg.ac.id/ 15
Raihan ikhlasul amal, siti aulia farhani Jurnal Algoritma
Vol. 1; No.1 xx; 2023; Hal x-x

16 https://jurnal.itg.ac.id/
Jurnal Algoritma Raihan ikhlasul amal , siti aulia farhani
Vol. xx; No. xx; <Tahun>; Hal x-x

https://jurnal.itg.ac.id/ 17
Raihan ikhlasul amal, siti aulia farhani Jurnal Algoritma
Vol. 1; No.1 xx; 2023; Hal x-x

III. KESIMPULAN
Jurnal tersebut merupakan contoh implementasi program untuk mengelola kuota dan antrian pelanggan dalam
sebuah sistem konter dan teller bank. Program tersebut menggunakan konsep stack untuk mengelola kuota dan
queue untuk mengelola antrian pelanggan. Program ini memungkinkan pengguna untuk menambahkan pengguna
baru, memperbarui data pengguna, menghapus pengguna, membeli kuota, menggunakan kuota, menampilkan
kuota yang tersedia, menjumlahkan total kuota, menambahkan pelanggan ke antrian, memanggil pelanggan
berikutnya dalam antrian, dan menampilkan seluruh antrian pelanggan. Program ini juga memiliki menu interak-
tif yang memungkinkan pengguna untuk memilih opsi yang diinginkan.

18 https://jurnal.itg.ac.id/
Jurnal Algoritma Raihan ikhlasul amal , siti aulia farhani
Vol. xx; No. xx; <Tahun>; Hal x-x

DAFTAR PUSTAKA

Area, T. I. universitas medan. (2018). Program Kuota dan Teller bank. Pemograman C++ Algoritma & Struktur
Data, 1–16. https://abdulkadir.blog.uma.ac.id/wp-content/uploads/sites/365/2019/02/Modul-Praktikum-
Algoritma-Struktur-Data-Merge.pdf

https://jurnal.itg.ac.id/ 19

Anda mungkin juga menyukai