customer
unknown
java
2 years ago
9.2 kB
8
Indexable
package assignments.assignment3.systemCLI;
import assignments.assignment3.Restaurant;
import assignments.assignment3.Menu;
import assignments.assignment3.Order;
import assignments.assignment3.User;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Scanner;
public class CustomerSystemCLI extends UserSystemCLI {
private Scanner input = new Scanner(System.in);
private ArrayList<Restaurant> restaurants;
private User user;
public CustomerSystemCLI(ArrayList<Restaurant> restaurants, User user) {
this.restaurants = restaurants;
this.user = user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public boolean handleMenu(int choice) {
switch (choice) {
case 1:
handleBuatPesanan();
break;
case 2:
handleCetakBill();
break;
case 3:
handleLihatMenu();
break;
case 4:
handleBayarBill();
break;
case 5:
handleCekSaldo();
break;
case 6:
input.close(); // Menutup scanner
return false; // keluar loop
default:
System.out.println("Perintah tidak diketahui, silakan coba kembali.");
}
return true;
}
//Menampilkan menu
@Override
public void displayMenu() {
System.out.println("\n--------------------------------------------");
System.out.println("Pilih menu:");
System.out.println("1. Buat Pesanan");
System.out.println("2. Cetak Bill");
System.out.println("3. Lihat Menu");
System.out.println("4. Bayar Bill");
System.out.println("5. Cek Saldo");
System.out.println("6. Keluar");
System.out.println("--------------------------------------------");
System.out.print("Pilihan menu: ");
}
//Menangani pesanan
protected void handleBuatPesanan() {
System.out.println("Buat Pesanan");
System.out.print("Nama Restoran: ");
String namaRestoran = input.nextLine();
Restaurant resto = restaurants.stream()
.filter(r -> r.getNama().equalsIgnoreCase(namaRestoran))
.findFirst()
.orElse(null);
if (resto == null) {
System.out.println("Restoran tidak terdaftar pada sistem. Silakan masukkan lagi.");
return;
}
String tanggal = getValidDate();
System.out.print("Jumlah Pesanan: ");
int jumlahPesanan = Integer.parseInt(input.nextLine());
ArrayList<Menu> items = new ArrayList<>();
for (int i = 0; i < jumlahPesanan; i++) {
System.out.print("Masukkan nama menu: ");
String namaMenu = input.nextLine();
Menu menu = resto.getMenu().stream()
.filter(m -> m.getNamaMakanan().equalsIgnoreCase(namaMenu))
.findFirst()
.orElse(null);
if (menu == null) {
System.out.println("Menu tidak tersedia.");
return;
}
items.add(menu);
}
String orderId = generateOrderID(resto.getNama(), tanggal, user.getNomorTelepon());
Order order = new Order(orderId, tanggal, calculateOngkir(user.getLokasi()), resto, items);
user.getOrderHistory().add(order);
System.out.println("Pesanan dengan ID " + orderId + " diterima!");
}
// Mengecek dan mengembalikan tanggal yang valid
private String getValidDate() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
while (true) {
System.out.print("Tanggal Pemesanan (DD/MM/YYYY): ");
String tanggal = input.nextLine();
try {
sdf.parse(tanggal);
return tanggal;
} catch (Exception e) {
System.out.println("Masukkan tanggal sesuai format (DD/MM/YYYY)!");
}
}
}
//Mencetak Bill pesanan
protected void handleCetakBill() {
System.out.println("Cetak Bill");
System.out.print("Masukkan Order ID: ");
String orderId = input.nextLine();
Order order = user.getOrderHistory().stream()
.filter(o -> o.getOrderId().equals(orderId))
.findFirst()
.orElse(null);
if (order == null) {
System.out.println("Order ID tidak dapat ditemukan.");
return;
}
System.out.println(generateBill(order));
}
//Menampilkan menu
protected void handleLihatMenu() {
System.out.println("Lihat Menu");
System.out.print("Nama Restoran: ");
String namaRestoran = input.nextLine();
Restaurant resto = restaurants.stream()
.filter(r -> r.getNama().equalsIgnoreCase(namaRestoran))
.findFirst()
.orElse(null);
if (resto == null) {
System.out.println("Restoran tidak terdaftar pada sistem.");
return;
}
System.out.println("Menu:");
for (Menu menu : resto.getMenu()) {
System.out.println(menu.getNamaMakanan() + " Rp" + menu.getHarga());
}
}
protected void handleBayarBill() {
System.out.println("Bayar Bill");
System.out.print("Masukkan Order ID: ");
String orderId = input.nextLine();
Order order = user.getOrderHistory().stream()
.filter(o -> o.getOrderId().equals(orderId) && !o.isOrderFinished())
.findFirst()
.orElse(null);
if (order == null) {
System.out.println("Order ID tidak dapat ditemukan atau sudah dibayar.");
return;
}
System.out.println("Total biaya: Rp" + order.getTotalHarga());
System.out.println("Pilih metode pembayaran (1. Credit Card, 2. Debit):");
int pilihan = Integer.parseInt(input.nextLine());
if (pilihan == 1) {
System.out.println("Proses pembayaran dengan Credit Card...");
} else {
System.out.println("Proses pembayaran dengan Debit Card...");
}
System.out.println("Pembayaran berhasil.");
order.setOrderFinished(true);
}
//Mencetak Saldo
protected void handleCekSaldo() {
System.out.println("Cek Saldo");
System.out.println("Saldo saat ini: Rp" + user.getSaldo());
}
//Membuat ID pesanan
private String generateOrderID(String namaRestoran, String tanggalOrder, String noTelepon) {
String restoran = namaRestoran.length() >= 4 ? namaRestoran.substring(0, 4).toUpperCase() : namaRestoran.toUpperCase();
String tanggal = tanggalOrder.replaceAll("/", "");
int sum = 0;
for (char c : noTelepon.toCharArray()) {
if (Character.isDigit(c)) {
sum += Character.getNumericValue(c);
}
}
String telepon = String.format("%02d", sum % 100);
return restoran + tanggal + telepon;
}
//Menghitung ongkir
private int calculateOngkir(String lokasi) {
switch (lokasi.toUpperCase()) {
case "P": return 10000;
case "U": return 20000;
case "T": return 30000;
case "S": return 40000;
case "B": return 50000;
default: return 15000;
}
}
//Mencetak Bill
private String generateBill(Order order) {
StringBuilder bill = new StringBuilder("Bill:\n");
bill.append("Order ID: ").append(order.getOrderId()).append("\n");
bill.append("Tanggal Pemesanan: ").append(order.getTanggal()).append("\n");
bill.append("Restaurant: ").append(order.getResto().getNama()).append("\n");
bill.append("Lokasi Pengiriman: ").append(order.getLokasi()).append("\n");
bill.append("Status Pengiriman: ").append(order.isOrderFinished() ? "Finished" : "Not Finished").append("\n");
bill.append("Pesanan:\n");
for (Menu item : order.getItems()) {
bill.append("- ").append(item.getNamaMakanan()).append(" Rp").append(String.format("%,.2f", item.getHarga())).append("\n");
}
int ongkir = calculateOngkir(order.getLokasi());
bill.append("Biaya Ongkos Kirim: Rp").append(String.format("%,d", ongkir)).append("\n");
double totalBiaya = order.getItems().stream().mapToDouble(Menu::getHarga).sum() + ongkir;
bill.append("Total Biaya: Rp").append(String.format("%,.2f", totalBiaya)).append("\n");
return bill.toString();
}
}
Editor is loading...
Leave a Comment