TP1
unknown
java
a year ago
7.6 kB
6
Indexable
package assignments.assignment1; import java.util.Scanner; public class OrderGenerator { private static final Scanner input = new Scanner(System.in); /* Anda boleh membuat method baru sesuai kebutuhan Anda Namun, Anda tidak boleh menghapus ataupun memodifikasi return type method yang sudah ada. */ /* * Method ini untuk menampilkan menu */ public static void showMenu(){ System.out.println(">>=======================================<<"); System.out.println("|| ___ ___ _ ||"); System.out.println("||| . \\ ___ ___ ___ | __>___ ___ _| |||"); System.out.println("||| | |/ ._>| . \\/ ._>| _>/ . \\/ . \\/ . |||"); System.out.println("|||___/\\___.| _/\\___.|_| \\___/\\___/\\___|||"); System.out.println("|| |_| ||"); System.out.println(">>=======================================<<"); System.out.println(); System.out.println("Pilih menu:"); System.out.println("1. Generate Order ID"); System.out.println("2. Generate Bill"); System.out.println("3. Keluar"); } /* * Method ini digunakan untuk membuat ID * dari nama restoran, tanggal order, dan nomor telepon * * @return String Order ID dengan format sesuai pada dokumen soal */ public static String generateOrderID(String namaRestoran, String tanggalOrder, String noTelepon) { // TODO:Lengkapi method ini sehingga dapat mengenerate Order ID sesuai ketentuan // 4 karakter pertama dari nama restoran String restoran = namaRestoran.substring(0,4).toUpperCase(); //8 karakter dari tanggal pemesanan String tanggal = tanggalOrder.replace("/", ""); //jumlah dari semua angka pada nomor telepon dan ambil 2 digit terakhir int sum=0; for(char c:noTelepon.toCharArray()) { if(Character.isDigit(c)) { sum += Character.getNumericValue(c); } } String telepon=String.format("%02d", sum % 100); //hitung checksum String s=restoran+tanggal+telepon; int checksum1=0; int checksum2=0; String code39="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"; for(int i=0;i<s.length();i++) { int value = code39.indexOf(s.charAt(i)); if(i%2==0) { checksum1 += value; } else { checksum2 += value; } } checksum1 %=36; checksum2 %=36; //konversi checksum ke karakter berdasarkan code 39 character set char checksumChar1 =code39.charAt(checksum1); char checksumChar2 =code39.charAt(checksum2); //gabungkan untuk memperoleh bentuk Order ID String orderID =restoran+tanggal+telepon+checksumChar1+checksumChar2; return orderID; } /* * Method ini digunakan untuk membuat bill * dari order id dan lokasi * * @return String Bill dengan format sesuai di bawah: * Bill: * Order ID: [Order ID] * Tanggal Pemesanan: [Tanggal Pemesanan] * Lokasi Pengiriman: [Kode Lokasi] * Biaya Ongkos Kirim: [Total Ongkos Kirim] */ public static String generateBill(String OrderID, String lokasi){ // cek lokasi pengiriman int ongkir; String lokasiPengiriman; switch(lokasi){ case "P": ongkir=10000; lokasiPengiriman = "P"; break; case "U": ongkir=20000; lokasiPengiriman = "U"; break; case "T": ongkir=35000; lokasiPengiriman = "T"; break; case "S": ongkir=40000; lokasiPengiriman = "S"; break; case "B": ongkir=60000; lokasiPengiriman = "B"; break; default: return "Harap masukkan lokasi pengiriman yang ada pada jangkauan!"; } // tanggal pemesanan dari Order ID String tanggalPemesanan = OrderID.substring(4,6) + "/" + OrderID.substring(6, 8) + "/" + OrderID.substring(8,12); // membuat bill String bill = "Bill:\n" + "Order ID: " + OrderID + "\n" + "Tanggal Pemesanan: " + tanggalPemesanan + "\n" + "Lokasi Pengiriman: " + lokasiPengiriman + "\n" + "Biaya Ongkos Kirim: Rp " + ongkir; return bill; } public static void main(String[] args) { while(true){ showMenu(); int pilihan =input.nextInt(); input.nextLine(); switch(pilihan){ case 1: String namaRestoran = ""; do { System.out.println("Nama Restoran: "); namaRestoran = input.nextLine(); if (namaRestoran.length() < 4) { System.out.println("Nama restoran harus memiliki minimal 4 karakter. Silakan masukkan lagi."); } } while (namaRestoran.length() < 4); String tanggalOrder = ""; do { System.out.println("Tanggal Pemesanan: "); tanggalOrder = input.nextLine(); if (!tanggalOrder.matches("\\d{2}/\\d{2}/\\d{4}")) { System.out.println("Format tanggal pemesanan harus dd/mm/yyyy. Silakan masukkan lagi."); } } while (!tanggalOrder.matches("\\d{2}/\\d{2}/\\d{4}")); String noTelepon = ""; do { System.out.println("No. Telpon: "); noTelepon = input.nextLine(); if (!noTelepon.matches("\\d+") || Long.parseLong(noTelepon) <= 0) { System.out.println("Nomor telepon harus merupakan bilangan bulat positif. Silakan masukkan lagi."); } } while (!noTelepon.matches("\\d+") || Long.parseLong(noTelepon) <= 0); String orderID = generateOrderID(namaRestoran, tanggalOrder, noTelepon); System.out.println("Order ID "+ orderID + " diterima!"); break; case 2: System.out.println("Order ID: "); orderID = input.nextLine(); String lokasi = ""; do { System.out.println("Lokasi Pengiriman: "); lokasi = input.nextLine(); if (!lokasi.matches("[PUTSB]")) { System.out.println("Harap masukkan lokasi pengiriman yang ada pada jangkauan!"); } } while (!lokasi.matches("[PUTSB]")); String bill = generateBill(orderID, lokasi); System.out.println(bill); break; case 3: System.out.println("Terimakasih telah menggunakan DepeFood!"); return; default: System.out.println("Pilihan tidak valid silakan coba lagi."); } } } }
Editor is loading...
Leave a Comment