Tugas 07:
Tugas 07:
Kode package.json berikut tidak dapat diubah:
{
"tipe": "modul"
}
Berikut diberikan kode main.js:
import { orders, addOrder, updateOrderStatus, calculateTotalRevenue, deleteOrder } from './orders.js';
tambahPesan('Alice', [
{nama: 'Nasi Goreng', harga: 20000 },
{ nama: 'Teh Manis', harga: 5000 }
]);
tambahPesan('Bob', [
{ nama: 'Mie Goreng', harga: 15000 },
{nama: 'Kopi', harga: 10000 }
]);
konsol.log(pesanan);
/**
* Output yang diharapkan:
* [
* {
* id: '_someUniqueId1',
* Nama pelanggan: 'Alice',
* item: [
* {nama: 'Nasi Goreng', harga: 20000 },
* { nama: 'Teh Manis', harga: 5000 }
* ],
* TotalHarga: 25000,
* status: 'Menunggu'
* },
* {
* id: '_someUniqueId2',
* customerName: 'Bob',
* item: [
* { nama: 'Mie Goreng', harga: 15000 },
* {nama: 'Kopi', harga: 10000 }
* ],
* TotalHarga: 25000,
* status: 'Menunggu'
* }
* ]
*/
updateOrderStatus(orders[0].id, 'Sedang diproses');
updateOrderStatus(orders[1].id, 'Selesai');
konsol.log(pesanan);
/**
* Output yang diharapkan:
* [
* {
* id: '_someUniqueId1',
* Nama pelanggan: 'Alice',
* item: [
* {nama: 'Nasi Goreng', harga: 20000 },
* { nama: 'Teh Manis', harga: 5000 }
* ],
* TotalHarga: 25000,
* status: 'Sedang diterjemahkan'
* },
* {
* id: '_someUniqueId2',
* customerName: 'Bob',
* item: [
* { nama: 'Mie Goreng', harga: 15000 },
* {nama: 'Kopi', harga: 10000 }
* ],
* TotalHarga: 25000,
* status: 'Selesai'
* }
* ]
*/
console.log(calculateTotalRevenue());
/**
* Output yang diharapkan:
* 25000
*/
hapusPesanan(pesanan[0].id);
konsol.log(pesanan);
/**
* Output yang diharapkan:
* [
* {
* id: '_someUniqueId2',
* customerName: 'Bob',
* item: [
* { nama: 'Mie Goreng', harga: 15000 },
* {nama: 'Kopi', harga: 10000 }
* ],
* TotalHarga: 25000,
* status: 'Selesai'
* }
* ]
*/
Dan juga kode order.js berikut:
// Gunakan fungsi di bawah ini untuk menghasilkan id yang unik
fungsi generateUniqueId() {
kembalikan `_${Math.random().toString(36).slice(2, 9)}`;
}
// TODO: buatlah variabel yang menampung data pesanan
Biarkan perintah;
// TODO: menyelesaikan fungsi addOrder
fungsi addOrder(customerName, items) {}
// TODO: menyelesaikan fungsi updateOrderStatus
fungsi updateOrderStatus(orderId, status) {}
// TODO: menyelesaikan fungsi menghitungTotalRevenue dari pesanan yang berstatus Selesai
fungsi calculateTotalRevenue() {}
// TODO: menyelesaikan fungsi deleteOrder
fungsi deleteOrder(id) {}
ekspor { pesanan, tambahPesanan, perbaruiStatusPesanan, hitungTotalPendapatan, hapusPesanan };
Selesaikan tugas yang diinstruksikan pada instruksi.md berikut ini:
# Asesmen Penggunaan JavaScript untuk Kasus Nyata: Sistem Pengelolaan Pesanan Restoran
Anda diminta untuk membuat sebuah sistem sederhana untuk mengelola pesanan di sebuah restoran.
Sistem ini akan menggunakan bahasa pemrograman JavaScript dan memanfaatkan berbagai konsep yang telah dipelajari.
## Fitur yang harus ada
### Struktur Data untuk menyimpan Data Pesanan
- Gunakan Array dan Object untuk menyimpan data pesanan.
- Setiap pesanan harus memiliki informasi berikut:
- ID Pesanan (unik) -> `id`
- Nama Pelanggan -> `NamaPelanggan`
- Daftar Item yang Dipesan (Array dari objek item, setiap item memiliki nama dan harga) -> `items` -> `{ name: string, price: number }`
- Total Harga Pesanan -> `totalHarga`
- Status Pesanan (Menunggu, Diproses, Selesai) -> `status`
##
1. Kode harus dipecah ke dalam beberapa modul JavaScript. Mohon untuk memanfaatkan berkas JavaScript yang sudah tersedia.
2. Instruksi lebih detail terdapat pada berkas JavaScript masing-masing.
3. Tidak mengubah kode di dalam file `package.json`.
Jawaban :
Berikut adalah penyelesaian untuk berkasorders.js . Kode ini meliputi susunan pengelolaan orders, pembuatan ID unik, penghitungan total harga otomatis, dan filter pendapatan hanya untuk pesanan yang sudah selesai.
// Gunakan fungsi di bawah ini untuk menghasilkan id yang unik
function generateUniqueId() {
return `_${Math.random().toString(36).slice(2, 9)}`;
}
// TODO: buatlah variabel yang menampung data orders
let orders = [];
// TODO: selesaikan fungsi addOrder
function addOrder(customerName, items) {
const totalPrice = items.reduce((sum, item) => sum + item.price, 0);
const newOrder = {
id: generateUniqueId(),
customerName: customerName,
items: items,
totalPrice: totalPrice,
status: 'Menunggu'
};
orders.push(newOrder);
}
// TODO: selesaikan fungsi updateOrderStatus
function updateOrderStatus(orderId, status) {
const order = orders.find((o) => o.id === orderId);
if (order) {
order.status = status;
}
}
// TODO: selesaikan fungsi calculateTotalRevenue dari order yang berstatus Selesai
function calculateTotalRevenue() {
return orders
.filter((order) => order.status === 'Selesai')
.reduce((total, order) => total + order.totalPrice, 0);
}
// TODO: selesaikan fungsi deleteOrder
function deleteOrder(id) {
orders = orders.filter((order) => order.id !== id);
}
export { orders, addOrder, updateOrderStatus, calculateTotalRevenue, deleteOrder };
addOrder: Menggunakan.reduce()untuk menjumlahkan semua harga item sebelum dimasukkan ke dalam objek pesanan baru dengan status default "Menunggu".updateOrderStatus: Menggunakan.find()untuk mencari objek pesanan berdasarkan ID, lalu memperbarui propertistatus-nya.calculateTotalRevenue: Melakukan filter terlebih dahulu untuk mengambil pesanan dengan status'Selesai', kemudian menjumlahkantotalPricedari pesanan-pesanan tersebut.deleteOrder: Menggunakan.filter()untuk menghapus pesanan. Perlu diingat bahwa karena kita menimpa variabelorders, pastikan variabel tersebut dideklarasikan denganlet, bukanconst.
main.js , Anda hanya perlu menggunakan kode yang sudah Anda berikan sebelumnya. Kode tersebut sudah berfungsi sebagai penguji (test script) untuk memvalidasi apakah logika orders.jsberjalan sesuai dengan Output yang diharapkan .main.jslengkapnya (pastikan file ini satu folder dengan orders.js):import { orders, addOrder, updateOrderStatus, calculateTotalRevenue, deleteOrder } from './orders.js';
// 1. Menambah pesanan Alice
addOrder('Alice', [
{ name: 'Nasi Goreng', price: 20000 },
{ name: 'Teh Manis', price: 5000 }
]);
// 2. Menambah pesanan Bob
addOrder('Bob', [
{ name: 'Mie Goreng', price: 15000 },
{ name: 'Kopi', price: 10000 }
]);
console.log('Initial Orders:');
console.log(JSON.stringify(orders, null, 2));
// 3. Memperbarui status pesanan
// Menggunakan ID dari array orders yang baru saja dibuat
updateOrderStatus(orders[0].id, 'Diproses');
updateOrderStatus(orders[1].id, 'Selesai');
console.log('\nAfter Status Update:');
console.log(JSON.stringify(orders, null, 2));
// 4. Menghitung total pendapatan (hanya yang statusnya 'Selesai')
console.log('\nTotal Revenue (Selesai):');
console.log(calculateTotalRevenue()); // Harus keluar: 25000
// 5. Menghapus pesanan pertama (Alice)
deleteOrder(orders[0].id);
console.log('\nAfter Deleting Alice\'s Order:');
console.log(JSON.stringify(orders, null, 2));
JSON.stringify(orders, null, 2): Saya menambahkan ini agar saat di-console.log, struktur objek dan array-nya terlihat rapi di terminal (bertingkat), sama seperti format yang diminta di instruksi.- Variabel
orders: Karenaorders.jskita menggunakanexport { orders, ... }, maka saatdeleteOrderdijalankan (yang mengubah isi array),main.jsakan mendapatkan data terbaru secara otomatis.
Buka terminal (atau terminal di StackBlitz/Acode) dan jalankan:
node main.js
calculateTotalRevenue atau penghapusan data yang ingin Anda tanyakan lebih detail?pkg update && pkg upgrade
pkg install nodejs
nano. Contoh untuk file orders.js:nano orders.js
orders.jsyang sudah kita buat tadi, lalu tekan CTRL + O , Enter (untuk menyimpan), dan CTRL + X (untuk keluar).main.jsdan package.json.package.jsonAdaimport/export), file package.json wajib ada di folder yang sama agar tidak error.nano package.json
{
"type": "module"
}
node main.js
- Melihat daftar file : Ketik
lsuntuk memastikan filemain.js,orders.js, danpackage.jsonsudah ada di sana. - Pindah Folder : Jika Anda menyimpan file di memori internal HP, Anda perlu memberikan izin akses penyimpanan dulu dengan perintah
termux-setup-storage.
node main.jstersebut?node yang diikuti dengan nama file utama Anda.main.jsnode main.js
- Pastikan sudah di folder yang benar : Ketik
lsuntuk melihat apakah filemain.jsdanorders.jssudah ada di daftar. - Bersihkan layar : Jika terminal terlalu penuh, ketik
clearsebelum menjalankannode main.jsagar outputnya terlihat rapi di atas. - Gunakan JSON Stringify : Jika output hanya muncul tulisan
[object Object], pastikan di dalam kodemain.jsAnda menggunakan:javascriptconsole.log(JSON.stringify(orders, null, 2));Gunakan kode dengan hati-hati.
1. Menjalankan File (Prompt $)
- Caranya : Ketik
nodediikuti nama file Anda. - Contoh :
node skrip.js. - Kelebihan : Cocok untuk menguji kode yang panjang, aplikasi server, atau proyek yang disimpan dalam file
.js. [1, 2, 3, 4]
2. Menggunakan REPL (Interaktif)
- Caranya : Cukup ketik
nodelalu tekan Enter . Prompt akan berubah menjadi>. - Kelebihan : Sangat membantu untuk eksperimen logika sederhana, memeriksa fungsi JavaScript, atau melakukan debugging dengan cepat tanpa harus membuat file baru. [5, 7, 8]
- Gunakan Prompt
$(perintahnode namafile.js) jika kode Anda sudah disimpan di dalam file. - Masuk ke REPL Node (perintah
node) jika Anda hanya ingin mencoba satu atau dua baris kode secara langsung. [1, 6, 8]
.jsyang ingin dijalankan, atau baru ingin mulai menulis kode di Termux?Ctrl + C: Ini adalah cara paling umum untuk menghentikan program Node.js yang sedang berjalan (mengirim sinyal SIGINT)..exit: Jika Anda berada di dalam REPL Node.js (interaktif), ketik.exitlalu tekan Enter.Ctrl + D: Menutup aliran input (EOF), yang juga akan keluar dari sesi REPL Node.js.- Keluar dari Termux : Jika Anda ingin menutup seluruh sesi Termux, ketik
exitlalu tekan Enter. [1, 2, 3]
Ctrl + Cdua kali.node index.jslangsung di prompt $adalah cara standar untuk mengeksekusi file JavaScript yang sudah Anda simpan. [1, 3]- Lokasi File : Pastikan Anda berada di direktori (folder) yang sama dengan tempat penyimpanan file
index.jstersebut. Anda bisa memeriksa isi folder dengan mengetikkan perintahls. [1, 4] - Hasil Eksekusi : Jika kode di dalam
index.jsmemiliki perintahconsole.log(), maka hasilnya akan muncul tepat di bawah perintah tersebut sebelum prompt$muncul kembali. [2, 5] - Tanpa Output : Jika setelah menekan Enter prompt
$langsung muncul kembali tanpa ada teks apa pun, itu berarti kode Anda berhasil dijalankan tetapi tidak memiliki perintah untuk menampilkan output ke terminal. [3]
Jika isi
index.jsadalah console.log("Halo Termux!");, maka tampilannya akan seperti ini:node index.jsprompt $langsung muncul kembali tanpa teks apa pun, biasanya itu karena dua kemungkinan berikut:1. File index.jsAnda Kosong atau Tidak Ada Perintah Output
console.log(). Jika file tersebut kosong atau isinya hanya berupa variabel/fungsi tanpa dipanggil, maka tidak akan ada keluaran.Ketik perintah ini di Termux untuk melihat isi file Anda:
console.log, itulah sebabnya.2. Belum Menggunakanconsole.log
index.jsAnda dan pastikan ada perintah untuk menampilkan teks. Contoh isi file yang benar untuk pengujian:
Coba masukkan perintah ini untuk mengisi file
index.jsdengan teks pengujian secara otomatis:nanoatau vim) untuk menulis kodenya?
Comments
Post a Comment