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.

javascript
// 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 };
Gunakan kode dengan hati-hati.
Penjelasan Logika:
  1. addOrder: Menggunakan .reduce()untuk menjumlahkan semua harga item sebelum dimasukkan ke dalam objek pesanan baru dengan status default "Menunggu".
  2. updateOrderStatus: Menggunakan .find()untuk mencari objek pesanan berdasarkan ID, lalu memperbarui properti status-nya.
  3. calculateTotalRevenue: Melakukan filter terlebih dahulu untuk mengambil pesanan dengan status 'Selesai', kemudian menjumlahkan totalPricedari pesanan-pesanan tersebut.
  4. deleteOrder: Menggunakan .filter()untuk menghapus pesanan. Perlu diingat bahwa karena kita menimpa variabel orders, pastikan variabel tersebut dideklarasikan dengan letbukan const.
Apakah Anda ingin saya membantu membuatkan pengujian file untuk memastikan semua fungsi ini berjalan dengan benar?


Untuk kodemain.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 .
Berikut adalah kode main.jslengkapnya (pastikan file ini satu folder dengan orders.js):
javascript
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));
Gunakan kode dengan hati-hati.
Beberapa hal penting agar keluaran cepat:
  1. 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.
  2. Variabelorders : Karena orders.jskita menggunakan export { orders, ... }, maka saat deleteOrderdijalankan (yang mengubah isi array), main.jsakan mendapatkan data terbaru secara otomatis.
Cara membatasi:
Buka terminal (atau terminal di StackBlitz/Acode) dan jalankan:
pesta
node main.js
Gunakan kode dengan hati-hati.
Apakah ada bagian dari logikacalculateTotalRevenue atau penghapusan data yang ingin Anda tanyakan lebih detail?


Jalankan kode js di Termux:

Untuk menjalankan kode JavaScript Anda di Termux , ikuti langkah-langkah praktis berikut:
1. Instal Node.js
Buka aplikasi Termux dan instal paket Node.js terlebih dahulu.
pesta
pkg update && pkg upgrade
pkg install nodejs
Gunakan kode dengan hati-hati.
2. Siapkan File Kode
Anda bisa membuat file langsung di Termux menggunakan editor nano. Contoh untuk file orders.js:
pesta
nano orders.js
Gunakan kode dengan hati-hati.
Salin kode orders.jsyang sudah kita buat tadi, lalu tekan CTRL + O , Enter (untuk menyimpan), dan CTRL + X (untuk keluar).
Lakukan hal yang sama untuk file main.jsdan package.json.
3. Pastikan File package.jsonAda
Karena kita menggunakan sistem modul ( import/export), file package.json wajib ada di folder yang sama agar tidak error.
pesta
nano package.json
Gunakan kode dengan hati-hati.
Isi dengan:
json
{
  "type": "module"
}
Gunakan kode dengan hati-hati.
4. Jalankan Kode
Setelah semua file siap dalam satu folder, ketik perintah berikut:
pesta
node main.js
Gunakan kode dengan hati-hati.
Tips Tambahan:
  • Melihat daftar file : Ketik lsuntuk memastikan file main.js, orders.js, dan package.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.
Apakah muncul pesan error saat Anda mencoba menjalankan perintah node main.jstersebut?


Anda bisa melakukan keduanya, tergantung pada apa yang ingin Anda uji. Di Termux, ada dua cara utama untuk menjalankan kode Node.js:

1. Menjalankan File (Prompt $)

Ini adalah cara yang paling sering digunakan untuk menjalankan aplikasi atau skrip yang sudah lengkap. Anda tidak perlu "masuk" ke aplikasi Node terlebih dahulu. [1, 2, 3]
  • 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)

Ini adalah cara "masuk" ke aplikasi Node (shell interaktif) untuk mencoba potongan kode kecil secara cepat. [5, 6]
  • 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]
Kesimpulan :
  • Gunakan Prompt$ (perintah node 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]
Apakah Anda sudah memiliki file .jsyang ingin dijalankan, atau baru ingin mulai menulis kode di Termux?


Berikut adalah beberapa perintah untuk keluar dari aplikasi Node.js atau menghentikan skrip yang berjalan 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]
Jika aplikasi Node.js tidak merespons, Anda dapat menekan Ctrl + Cdua kali.


Ya, format tersebut sudah benar[1, 2]
Penggunaan perintah node index.jslangsung di prompt $adalah cara standar untuk mengeksekusi file JavaScript yang sudah Anda simpan. [1, 3]
Berikut adalah hal-hal yang perlu Anda perhatikan saat menggunakan prompt tersebut:
  • Lokasi File : Pastikan Anda berada di direktori (folder) yang sama dengan tempat penyimpanan file index.jstersebut. Anda bisa memeriksa isi folder dengan mengetikkan perintah ls. [1, 4]
  • Hasil Eksekusi : Jika kode di dalam index.jsmemiliki perintah console.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]
Contoh Tampilan Jika Berhasil:
Jika isi index.jsadalah console.log("Halo Termux!");, maka tampilannya akan seperti ini:
~ $ node index.js
Halo Termux!
~ $
Apakah muncul pesan "Error" atau "File not found" saat Anda mencoba menjalankan perintah tersebut?


Jika setelah mengetik 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

Node.js hanya akan menampilkan sesuatu di layar jika Anda menggunakan perintah cetak seperti console.log(). Jika file tersebut kosong atau isinya hanya berupa variabel/fungsi tanpa dipanggil, maka tidak akan ada keluaran.
Cara Mengecek Isi File:
Ketik perintah ini di Termux untuk melihat isi file Anda:
cat index.js
Jika isinya kosong atau tidak ada kata console.log, itulah sebabnya.

2. Belum Menggunakanconsole.log

Coba edit file index.jsAnda dan pastikan ada perintah untuk menampilkan teks.
Contoh isi file yang benar untuk pengujian:
console.log("Tes: Node.js berhasil jalan!");

Cara Cepat memperbaikinya (untuk tes):
Coba masukkan perintah ini untuk mengisi file index.jsdengan teks pengujian secara otomatis:
echo "console.log('Berhasil!')" > index.js
Lalu jalankan lagi:
node index.js
Jika sekarang tulisan muncul "Berhasil!" , berarti sistem Node.js Anda sudah normal.
Apakah Anda menggunakan editor teks tertentu di Termux (seperti nanoatau vim) untuk menulis kodenya?


Comments

Popular posts from this blog

Rangkuman Gerbang Dunia JavaScript

KUIS FUNCTION

KUIS Asynchronous Process