diff --git a/src/main/java/jamesbarclayApartmentMaintenance/Main.java b/src/main/java/jamesbarclayApartmentMaintenance/Main.java new file mode 100644 index 0000000..4b3d0a4 --- /dev/null +++ b/src/main/java/jamesbarclayApartmentMaintenance/Main.java @@ -0,0 +1,112 @@ +package jamesbarclayApartmentMaintenance; +import java.util.ArrayList; +import java.util.Scanner; + +/*Requirements: + +Use a loop to continue entering requests + +Stop when user types "done" + +After each request: + +Print confirmation +Apply rules: +Rules: + +If issueType is "Electrical" and severity ≥ 4 → print warning +If severity is 5 → dispatch immediately*/ + + + +public class Main { + + public static void main(String[] args) { + + Scanner sc = new Scanner(System.in); + MaintenanceOffice office = new MaintenanceOffice(); + + // --- Initial Requests --- + // office.addRequest(new MaintenanceRequest("James", 808, "Water", 5, "NEW")); + office.addRequest(new MaintenanceRequest("John", 715, "Electrical", 3, "NEW")); + office.addRequest(new MaintenanceRequest("Carol", 368, "Sewage", 2, "NEW")); + + System.out.println("\n--- INITIAL REQUESTS ---"); + office.displayAllRequests(); + + for (int i = 1; i <= office.getRequestCount(); i++) { + office.assignTechnician(i); + } + + // --- Menu Loop --- + boolean running = true; + while (running) { + System.out.println("\n--- APARTMENT MAINTENANCE MENU ---"); + System.out.println("1. Add new request"); + System.out.println("2. View all requests"); + System.out.println("3. Assign technician"); + System.out.println("4. Update request status"); + System.out.println("5. Close request"); + System.out.println("6. Daily report"); + System.out.println("7. Exit"); + System.out.print("Choose an option: "); + + int choice; + try { + choice = Integer.parseInt(sc.nextLine()); + } catch (Exception e) { + System.out.println("Invalid input. Please enter 1-7."); + continue; + } + + switch (choice) { + case 1: // Add request + System.out.print("Tenant name: "); + String name = sc.nextLine(); + System.out.print("Apartment #: "); + int apt = Integer.parseInt(sc.nextLine()); + System.out.print("Issue type: "); + String issue = sc.nextLine(); + System.out.print("Severity (1-5): "); + int sev = Integer.parseInt(sc.nextLine()); + if (sev < 1 || sev > 5) { System.out.println("Invalid severity."); break; } + + MaintenanceRequest r = new MaintenanceRequest(name, apt, issue, sev, "NEW"); + office.addRequest(r); + System.out.println("Request Confirmed: " + r); + + office.assignTechnician(office.getRequestCount()); + + if (issue.equalsIgnoreCase("Electrical") && sev >= 4) + System.out.println("⚠ High-risk electrical issue!"); + if (sev == 5) { + System.out.println(" Dispatch maintenance immediately!"); + r.setStatus("DISPATCHED"); + } + if (sev >= 4) System.out.println("HIGH PRIORITY\n"); + break; + + case 2: office.displayAllRequests(); break; + case 3: + System.out.print("Enter request number to assign technician: "); + office.assignTechnician(Integer.parseInt(sc.nextLine())); + break; + case 4: + System.out.print("Enter request number to update status: "); + int updateNum = Integer.parseInt(sc.nextLine()); + System.out.print("Enter new status (NEW, IN_PROGRESS, DONE): "); + office.updateStatus(updateNum, sc.nextLine()); + break; + case 5: + System.out.print("Enter request number to close: "); + office.closeRequest(Integer.parseInt(sc.nextLine())); + break; + case 6: office.report(); break; + case 7: running = false; System.out.println("Exiting. Goodbye!"); break; + default: System.out.println("Invalid option. Choose 1-7."); + } + } + + sc.close(); + } +} diff --git a/src/main/java/jamesbarclayApartmentMaintenance/MaintenanceOffice.java b/src/main/java/jamesbarclayApartmentMaintenance/MaintenanceOffice.java new file mode 100644 index 0000000..80c25b5 --- /dev/null +++ b/src/main/java/jamesbarclayApartmentMaintenance/MaintenanceOffice.java @@ -0,0 +1,109 @@ +package jamesbarclayApartmentMaintenance; +import java.util.ArrayList; +/*Create a MaintenanceOffice class. + +It must: + +Assign a tech based on severity +Update request status +Close completed requests +Only allow status updates to: + + "NEW" + "IN_PROGRESS" + "DONE" +Do not close a request unless it is "DONE".*/ + +public class MaintenanceOffice { + + private ArrayList requests = new ArrayList<>(); + + // --- Add request --- + public void addRequest(MaintenanceRequest r) { + requests.add(r); + } + + // --- Display all requests --- + public void displayAllRequests() { + if (requests.isEmpty()) { System.out.println("No maintenance requests."); return; } + int idx = 1; + for (MaintenanceRequest r : requests) { + System.out.println(idx++ + ". " + r); + if (r.getSeverity() >= 4) System.out.println("HIGH PRIORITY\n"); + } + } + + // --- Assign technician based on issue type --- + public void assignTechnician(int num) { + if (!validIndex(num)) return; + MaintenanceRequest r = requests.get(num - 1); + String tech; + + switch (r.getIssueType().toLowerCase()) { + case "water": + case "electrical": tech = "Jordan"; break; + case "sewage": tech = "Coreye"; break; + default: tech = "Standard Technician"; + } + + System.out.println("Technician assigned: " + tech); + updateStatus(num, "IN_PROGRESS"); + } + + // --- Update request status --- + public void updateStatus(int num, String status) { + if (!validIndex(num) || (!status.equals("NEW") && !status.equals("IN_PROGRESS") && !status.equals("DONE"))) { + System.out.println("Invalid status."); return; + } + requests.get(num - 1).setStatus(status); + System.out.println("Status updated to " + status); + } + + // --- Close request only if DONE --- + public void closeRequest(int num) { + if (!validIndex(num)) return; + MaintenanceRequest r = requests.get(num - 1); + if (!r.getStatus().equals("DONE")) System.out.println("Cannot close unless status is DONE."); + else System.out.println("Request officially closed."); + } + + // --- Daily report --- + public void report() { + if (requests.isEmpty()) { System.out.println("No data for report."); return; } + + int total = requests.size(), open = 0, closed = 0, low = 0, med = 0, high = 0; + String commonIssue = ""; int maxCount = 0; + + for (MaintenanceRequest r : requests) { + // Open vs Closed + if (r.getStatus().equals("DONE")) closed++; else open++; + + // Severity + int s = r.getSeverity(); + if (s <= 2) low++; + else if (s == 3) med++; + else high++; + + // Most common issue + int count = 0; + for (MaintenanceRequest r2 : requests) + if (r2.getIssueType().equalsIgnoreCase(r.getIssueType())) count++; + if (count > maxCount) { maxCount = count; commonIssue = r.getIssueType(); } + } + + System.out.println("\n===== DAILY MAINTENANCE REPORT ====="); + System.out.println("Total Requests: " + total + " | Open: " + open + " | Closed: " + closed); + System.out.println("Severity - Low: " + low + " | Medium: " + med + " | High: " + high); + System.out.println("Most Common Issue: " + commonIssue); + if (high > 3) System.out.println("⚠ OVERLOAD WARNING: Too many high priority requests!"); + System.out.println("====================================\n"); + } + + // --- Helper methods --- + private boolean validIndex(int num) { + if (num < 1 || num > requests.size()) { System.out.println("Invalid request number."); return false; } + return true; + } + + public int getRequestCount() { return requests.size(); } +} \ No newline at end of file diff --git a/src/main/java/jamesbarclayApartmentMaintenance/MaintenanceRequest.java b/src/main/java/jamesbarclayApartmentMaintenance/MaintenanceRequest.java new file mode 100644 index 0000000..eaf7992 --- /dev/null +++ b/src/main/java/jamesbarclayApartmentMaintenance/MaintenanceRequest.java @@ -0,0 +1,62 @@ +package jamesbarclayApartmentMaintenance; + + +/*It must contain: + +tenantName + apartmentNumber +issueType +severity (1–5) +status (default = "NEW") +Requirements: + +Include both constructors +Include getters and setters +Include a toString() method*/ + + +public class MaintenanceRequest { + + private String tenantName; + private int apartmentNumber; + private String issueType; + private int severity; + private String status; + + // Default constructor + public MaintenanceRequest() { + this.status = "NEW"; + } + + // Parameterized constructor + public MaintenanceRequest(String tenantName, int apartmentNumber, String issueType, int severity, String status) { + this.tenantName = tenantName; + this.apartmentNumber = apartmentNumber; + this.issueType = issueType; + this.severity = severity; + this.status = "NEW"; // default status + } + + // --- Getters --- + public String getTenantName() { return tenantName; } + public int getApartmentNumber() { return apartmentNumber; } + public String getIssueType() { return issueType; } + public int getSeverity() { return severity; } + public String getStatus() { return status; } + + // --- Setters --- + public void setTenantName(String tenantName) { this.tenantName = tenantName; } + public void setApartmentNumber(int apartmentNumber) { this.apartmentNumber = apartmentNumber; } + public void setIssueType(String issueType) { this.issueType = issueType; } + public void setSeverity(int severity) { this.severity = severity; } + public void setStatus(String status) { this.status = status; } + + @Override + public String toString() { + return "Tenant: " + tenantName + + " | Apt: " + apartmentNumber + + " | Issue: " + issueType + + " | Severity: " + severity + + " | Status: " + status; + } +}