SavefileArchive
USD/IDR ...
|
BTC ...
|
ETH ...
|
GOLD/gram ...
Terbaru
SavefileArchive — Tutorial coding, tips programming, dan dunia musik untuk developer & pecinta musik Indonesia

contoh antrian LIFO

 

<?php

// Inisialisasi jumlah quota loket
$quota_per_loket = 100;
$quota_loket_1 = $quota_per_loket;
$quota_loket_2 = $quota_per_loket;
$quota_loket_3 = $quota_per_loket;

// Antrian pelanggan
$customer_queue = array();

// Mendapatkan nomor antrian berikutnya
function get_next_queue_number()
{
    // Mendapatkan nomor antrian terakhir dari file
    $last_queue_number = file_get_contents("last_queue_number.txt");
    // Menambahkan 1 ke nomor antrian terakhir untuk mendapatkan nomor antrian berikutnya
    $next_queue_number = $last_queue_number + 1;
    // Menyimpan nomor antrian berikutnya ke dalam file
    file_put_contents("last_queue_number.txt", $next_queue_number);
    return $next_queue_number;
}

// Menambahkan pelanggan ke dalam antrian
function add_customer_to_queue($customer)
{
    global $customer_queue;
    array_push($customer_queue, $customer); // LIFO
}

// Mengambil pelanggan dari antrian
function get_customer_from_queue()
{
    global $customer_queue;
    // Mengambil pelanggan paling akhir dari antrian menggunakan LIFO
    $customer = array_pop($customer_queue);
    return $customer;
}

// Menentukan loket yang akan digunakan untuk pelanggan selanjutnya
function get_next_counter()
{
    global $quota_loket_1, $quota_loket_2, $quota_loket_3;
    // Memeriksa apakah masih ada kuota tersedia di masing-masing loket
    if ($quota_loket_1 > 0) {
        $next_counter = 1;
    } elseif ($quota_loket_2 > 0) {
        $next_counter = 2;
    } elseif ($quota_loket_3 > 0) {
        $next_counter = 3;
    } else {
        // Jika tidak ada kuota tersedia di semua loket, kembalikan nilai null
        $next_counter = null;
    }
    return $next_counter;
}

// Mendapatkan nomor antrian dan loket untuk pelanggan selanjutnya
function get_next_customer()
{
    $next_queue_number = get_next_queue_number();
    $next_counter = get_next_counter();
    if ($next_counter !== null) {
        // Mengurangi kuota di loket yang digunakan untuk pelanggan selanjutnya
        global $quota_loket_1, $quota_loket_2, $quota_loket_3;
        if ($next_counter == 1) {
            $quota_loket_1--;
        } elseif ($next_counter == 2) {
            $quota_loket_2--;
        } elseif ($next_counter == 3) {
            $quota_loket_3--;
        }
        // Menambahkan pelanggan ke dalam antrian
        add_customer_to_queue(array($next_queue_number, $next_counter));
    } else {
        // Jika tidak ada loket yang tersedia, kembalikan nilai null
        return null;
    }
}
// Modifikasi untuk menggunakan LIFO
function get_customer_from_queue_lifo()
{
    global $customer_queue;
    // Mengambil pelanggan paling akhir dari antrian menggunakan LIFO
    $customer = array_pop($customer_queue);
    return $customer;
}

// Contoh penggunaan sistem antrian dengan LIFO
$next_customer = get_next_customer();
if ($next_customer !== null) {
    list($queue_number, $counter) = $next_customer;
    echo "Silakan menuju loket $counter untuk nomor antrian $queue_number.";
} else {
    echo "Maaf, semua loket sudah penuh. Silakan coba lagi nanti.";
}

// Memanggil fungsi get_customer_from_queue_lifo untuk mengambil pelanggan
$next_customer = get_customer_from_queue_lifo();
if ($next_customer !== null) {
    list($queue_number, $counter) = $next_customer;
    echo "Pelanggan dengan nomor antrian $queue_number, silakan menuju loket $counter.";
    // Membebaskan kuota loket yang digunakan oleh pelanggan
    if ($counter == 1) {
        $quota_loket_1++;
    } elseif ($counter == 2) {
        $quota_loket_2++;
    } elseif ($counter == 3) {
        $quota_loket_3++;
    }
} else {
    echo "Tidak ada pelanggan yang menunggu.";
}


?>