TP1
unknown
java
2 years ago
7.6 kB
9
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