OneCompiler

q12

249

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class DeliveryStatusUpdate {

// Simulated database for parcel details
static Map<String, ParcelDetails> parcelDatabase = new HashMap<>();

public static void main(String[] args) {
    // Prepopulate the database with sample parcel data
    populateSampleData();

    Scanner scanner = new Scanner(System.in);

    System.out.println("Officer: Enter Booking ID to update Delivery Status: ");
    String bookingId = scanner.nextLine().trim();

    // Validate and display details
    if (bookingId.isEmpty()) {
        System.out.println("Error: Booking ID cannot be empty. Please provide a valid ID.");
    } else if (parcelDatabase.containsKey(bookingId)) {
        ParcelDetails details = parcelDatabase.get(bookingId);
        displayParcelDetails(details);

        // Allow the officer to update the status
        System.out.println("\nEnter new Delivery Status (Booked | In Transit | Delivered | Returned): ");
        String newStatus = scanner.nextLine().trim();

        if (validateStatus(newStatus)) {
            details.setParcelStatus(newStatus);
            System.out.println("Success: Delivery Status updated successfully!");
            displayParcelDetails(details);
        } else {
            System.out.println("Error: Invalid status entered. Allowed values are: Booked, In Transit, Delivered, Returned.");
        }
    } else {
        System.out.println("Error: Booking ID not found in the system. Please verify the ID.");
    }

    scanner.close();
}

// Method to populate sample data
private static void populateSampleData() {
    ParcelDetails parcel1 = new ParcelDetails(
        "BKG12345", "John Doe", "123 Main St, Springfield, USA",
        "Alice Smith", "456 Elm St, Shelbyville, USA", 
        "2024-12-01", "In Transit"
    );

    ParcelDetails parcel2 = new ParcelDetails(
        "BKG54321", "Jane Doe", "789 Maple Ave, Springfield, USA",
        "Bob Brown", "321 Oak St, Shelbyville, USA", 
        "2024-12-02", "Booked"
    );

    parcelDatabase.put(parcel1.getBookingId(), parcel1);
    parcelDatabase.put(parcel2.getBookingId(), parcel2);
}

// Method to display parcel details
private static void displayParcelDetails(ParcelDetails details) {
    System.out.println("\nCurrent Parcel Details:");
    System.out.println("Booking ID: " + details.getBookingId());
    System.out.println("Full Name: " + details.getFullName());
    System.out.println("Sender Address: " + details.getSenderAddress());
    System.out.println("Receiver Name: " + details.getReceiverName());
    System.out.println("Receiver Address: " + details.getReceiverAddress());
    System.out.println("Date of Booking: " + details.getDateOfBooking());
    System.out.println("Parcel Status: " + details.getParcelStatus());
}

// Method to validate the new delivery status
private static boolean validateStatus(String status) {
    return status.equalsIgnoreCase("Booked") || 
           status.equalsIgnoreCase("In Transit") || 
           status.equalsIgnoreCase("Delivered") || 
           status.equalsIgnoreCase("Returned");
}

}

// Class to represent parcel details
class ParcelDetails {
private String bookingId;
private String fullName;
private String senderAddress;
private String receiverName;
private String receiverAddress;
private String dateOfBooking;
private String parcelStatus;

// Constructor
public ParcelDetails(String bookingId, String fullName, String senderAddress,
                     String receiverName, String receiverAddress, String dateOfBooking,
                     String parcelStatus) {
    this.bookingId = bookingId;
    this.fullName = fullName;
    this.senderAddress = senderAddress;
    this.receiverName = receiverName;
    this.receiverAddress = receiverAddress;
    this.dateOfBooking = dateOfBooking;
    this.parcelStatus = parcelStatus;
}

// Getters and Setters
public String getBookingId() { return bookingId; }
public String getFullName() { return fullName; }
public String getSenderAddress() { return senderAddress; }
public String getReceiverName() { return receiverName; }
public String getReceiverAddress() { return receiverAddress; }
public String getDateOfBooking() { return dateOfBooking; }
public String getParcelStatus() { return parcelStatus; }
public void setParcelStatus(String parcelStatus) { this.parcelStatus = parcelStatus; }

}