Tugas 07:
Tugas 07:
Kode package.json berikut tidak boleh dirubah:
{
"type": "module"
}
Berikut diberikan kode main.js:
import { orders, addOrder, updateOrderStatus, calculateTotalRevenue, deleteOrder } from './orders.js';
addOrder('Alice', [
{ name: 'Nasi Goreng', price: 20000 },
{ name: 'Teh Manis', price: 5000 }
]);
addOrder('Bob', [
{ name: 'Mie Goreng', price: 15000 },
{ name: 'Kopi', price: 10000 }
]);
console.log(orders);
/**
* Output yang diharapkan:
* [
* {
* id: '_someUniqueId1',
* customerName: 'Alice',
* items: [
* { name: 'Nasi Goreng', price: 20000 },
* { name: 'Teh Manis', price: 5000 }
* ],
* totalPrice: 25000,
* status: 'Menunggu'
* },
* {
* id: '_someUniqueId2',
* customerName: 'Bob',
* items: [
* { name: 'Mie Goreng', price: 15000 },
* { name: 'Kopi', price: 10000 }
* ],
* totalPrice: 25000,
* status: 'Menunggu'
* }
* ]
*/
updateOrderStatus(orders[0].id, 'Diproses');
updateOrderStatus(orders[1].id, 'Selesai');
console.log(orders);
/**
* Output yang diharapkan:
* [
* {
* id: '_someUniqueId1',
* customerName: 'Alice',
* items: [
* { name: 'Nasi Goreng', price: 20000 },
* { name: 'Teh Manis', price: 5000 }
* ],
* totalPrice: 25000,
* status: 'Diproses'
* },
* {
* id: '_someUniqueId2',
* customerName: 'Bob',
* items: [
* { name: 'Mie Goreng', price: 15000 },
* { name: 'Kopi', price: 10000 }
* ],
* totalPrice: 25000,
* status: 'Selesai'
* }
* ]
*/
console.log(calculateTotalRevenue());
/**
* Output yang diharapkan:
* 25000
*/
deleteOrder(orders[0].id);
console.log(orders);
/**
* Output yang diharapkan:
* [
* {
* id: '_someUniqueId2',
* customerName: 'Bob',
* items: [
* { name: 'Mie Goreng', price: 15000 },
* { name: 'Kopi', price: 10000 }
* ],
* totalPrice: 25000,
* status: 'Selesai'
* }
* ]
*/
Dan juga kode orders.js berikut:
// 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) {}
// TODO: selesaikan fungsi updateOrderStatus
function updateOrderStatus(orderId, status) {}
// TODO: selesaikan fungsi calculateTotalRevenue dari order yang berstatus Selesai
function calculateTotalRevenue() {}
// TODO: selesaikan fungsi deleteOrder
function deleteOrder(id) {}
export { orders, addOrder, updateOrderStatus, calculateTotalRevenue, deleteOrder };
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 -> `customerName`
- Daftar Item yang Dipesan (Array dari objek item, setiap item memiliki nama dan harga) -> `items` -> `{ name: string, price: number }`
- Total Harga Pesanan -> `totalPrice`
- Status Pesanan (Menunggu, Diproses, Selesai) -> `status`
## Ketentuan
1. Kode harus dipecah ke dalam beberapa modul JavaScript. Mohon untuk manfaatkan berkas JavaScript yang sudah tersedia.
2. Instruksi lebih detail terdapat pada berkas JavaScript masing-masing.
3. Tidak mengubah kode di dalam berkas `package.json`.
Jawaban:
Berikut adalah penyelesaian untuk berkas orders.js. Kode ini mencakup pengelolaan array 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 memasukkannya 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 di orders.js berjalan sesuai dengan Output yang diharapkan.main.js lengkapnya (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: Karena diorders.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.js yang sudah kita buat tadi, lalu tekan CTRL + O, Enter (untuk simpan), dan CTRL + X (untuk keluar).main.js dan package.json.package.json Adaimport/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.js tersebut?
Comments
Post a Comment