Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 112 additions & 0 deletions src/main/java/jamesbarclayApartmentMaintenance/Main.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
109 changes: 109 additions & 0 deletions src/main/java/jamesbarclayApartmentMaintenance/MaintenanceOffice.java
Original file line number Diff line number Diff line change
@@ -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<MaintenanceRequest> 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(); }
}
Original file line number Diff line number Diff line change
@@ -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;
}
}