Mini Proyek: Kasir Warung — Pseudocode

Ini struk yang bakal dicetak program kasirmu di akhir pelajaran ini: Warung Bu Sri -------------------- Nasi goreng x 1 = 15000 Es teh x 2 = 8000…

Ini struk yang bakal dicetak program kasirmu di akhir pelajaran ini:

Warung Bu Sri
--------------------
Nasi goreng x 1 = 15000
Es teh x 2 = 8000
--------------------
Total: 23000
Bayar: 50000
Kembalian: 27000

Pembeli memesan satu nasi goreng dan dua es teh, lalu membayar 50000. Program yang mencetaknya membaca pesanan satu per satu, mencari harganya di menu, menjumlah semuanya, lalu menghitung kembalian.

Gak ada perintah baru di pelajaran ini. Daftar, pencarian, perulangan, fungsi, prosedur, dan JIKA sudah kamu kenal semua. Yang baru cuma pekerjaannya: merakit potongan-potongan itu jadi satu program yang utuh, kayak kasir beneran.

Rencananya dulu

Pelajaran Memecah Masalah bilang: langkah dulu, kode belakangan. Ini rencana kasirnya:

  1. Simpan nama menu dan harganya.
  2. Tulis kepala struk.
  3. Baca pesanan satu per satu sampai pembeli bilang selesai. Untuk tiap pesanan: cari harganya, tulis barisnya, tambahkan ke total.
  4. Tulis totalnya.
  5. Baca uang bayar, lalu tulis kembaliannya, atau berapa kurangnya.

Tiap langkah sudah pernah kamu kerjakan di pelajaran lain. Bagian berikutnya membahasnya satu per satu, masing-masing sebagai program kecil yang bisa kamu jalankan sendiri.

Menu dan harganya

Menunya dua daftar yang berpasangan, kayak di pelajaran Mencari Data: nama di menu, harga di harga, dengan urutan yang sama. Untuk mencari harga, cari dulu nomor menunya:

FUNGSI cariPosisi(daftar, nama)
    UNTUK i ← 0 SAMPAI PANJANG(daftar) - 1
        JIKA daftar[i] = nama MAKA
            KEMBALIKAN i
        AKHIR JIKA
    AKHIR UNTUK
    KEMBALIKAN -1
AKHIR FUNGSI

menu ← ["Nasi goreng", "Mie ayam", "Es teh", "Kopi"]
harga ← [15000, 12000, 4000, 5000]
posisi ← cariPosisi(menu, "Es teh")
TULIS "Es teh", harga[posisi]
TULIS "Bakso", cariPosisi(menu, "Bakso")
Es teh 4000
Bakso -1

Es teh ada di nomor 2, jadi harganya harga[2], 4000. Bakso gak ada di menu, jadi hasilnya -1. Daftar menu dikirim lewat parameter daftar, karena fungsi gak bisa melihat variabel di luarnya.

Membaca pesanan sampai "selesai"

Banyaknya pesanan gak ketahuan di awal. Pola dari pelajaran Mengulang Selama dipakai lagi: baca sekali sebelum perulangan, lalu baca lagi di baris terakhir isinya. Tiap pesanan dua baris input, nama menunya lalu jumlahnya. Dengan input Es teh, 2, Kopi, 1, selesai:

BACA nama
SELAMA nama ≠ "selesai" LAKUKAN
    BACA jumlah
    TULIS "Pesanan:", nama, jumlah
    BACA nama
AKHIR SELAMA
TULIS "Pesanan ditutup"
Pesanan: Es teh 2
Pesanan: Kopi 1
Pesanan ditutup

Di pelajaran Mengulang Selama, tanda berhentinya 0. Di sini yang dibaca nama, jadi tanda berhentinya kata selesai, yang gak mungkin jadi nama menu.

Baris struk dan totalnya

Tiap pesanan jadi satu baris: nama, jumlah, dan subtotalnya. Totalnya dijumlah sambil jalan, dimulai dari 0 di luar perulangan. Garis pemisahnya prosedur dari pelajaran Prosedur:

PROSEDUR garis()
    TULIS "--------------------"
AKHIR PROSEDUR

total ← 0
garis()
subtotal ← 4000 * 2
TULIS "Es teh", "x", 2, "=", subtotal
total ← total + subtotal
subtotal ← 5000 * 1
TULIS "Kopi", "x", 1, "=", subtotal
total ← total + subtotal
garis()
TULIS "Total:", total
--------------------
Es teh x 2 = 8000
Kopi x 1 = 5000
--------------------
Total: 13000

Tiga baris tengah per pesanan itu yang nanti masuk ke dalam SELAMA, dengan harga dari cariPosisi dan jumlah dari BACA.

Bayar dan kembalian

Uang yang pas juga harus diterima, jadi syaratnya >=, bukan >. Dengan input 20000 untuk belanja 23000:

total ← 23000
BACA bayar
TULIS "Bayar:", bayar
JIKA bayar >= total MAKA
    TULIS "Kembalian:", bayar - total
SELAIN ITU
    TULIS "Uang kurang:", total - bayar
AKHIR JIKA
Bayar: 20000
Uang kurang: 3000

Kalau pembeli bayar pas 23000, yang tercetak Kembalian: 0.

Merakit dan menguji

Di latihan, kerangkanya sudah ada: menunya, prosedur garis, dan perulangan yang membaca pesanan. Kamu mengisi tiga bagian: isi cariPosisi, apa yang terjadi dengan tiap pesanan di dalam SELAMA, dan bagian bayar di bawahnya. Kerjakan satu per satu, jalankan tiap selesai satu bagian, dan lihat struknya bertambah.

Programmu dijalankan tiga kali, masing-masing menguji batas yang beda. Satu pembeli memesan menu pertama dan bayar lebih. Satu memesan menu yang gak ada dan menu terakhir, lalu bayar pas. Satu lagi memesan tiga menu dan uangnya kurang. Kalau ada yang meleset, tab Tabel jejak di Playground menunjukkan isi total dan posisi di tiap putaran.

⚠️ Struk yang meleset

TL;DR: Kasir warung itu gabungan semua yang sudah kamu pelajari: menu dan harga di dua daftar yang berpasangan, cariPosisi untuk mencari nomor menunya, SELAMA nama ≠ "selesai" untuk membaca pesanan sebanyak apa pun, subtotal dan total yang dijumlah sambil jalan, prosedur garis untuk struknya, dan JIKA bayar >= total untuk kembalian. Mulai dari rencana, rakit satu bagian, jalankan, lalu lanjut ke bagian berikutnya.

Yang akan kamu pelajari