TP1

mail@pastecode.io avatar
unknown
java
a month ago
7.6 kB
2
Indexable
Never
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.");
            }
        }
    }    
}
Leave a Comment