Problem statement: Write a program to simulate a car dealership sales process. We will have employees, working selling vehicles to customers.
you have to think about nouns(a person, name or thing) while doing OOP, we have 4 nouns in the problem statement.
Dealership.java
package com.zakilive; public class Dealership { public static void main(String[] args) { Customer cust1=new Customer("Tom", "123 Anything st", 25000); //cust1 is a variable // cust1.setName("Tom"); //cust1 is referencing the things on heap // cust1.setAddress("123 Anything st"); // cust1.setCashOnHand(25000); // Vehicle vehicle=new Vehicle("Honda","Accord", 15000); //we are passing through constructor // vehicle.setMake("Honda"); // vehicle.setModel("Accord"); // vehicle.setPrice(15000); Vehicle vehicle = new Vehicle("BMW","M3",20000); Employee emp=new Employee(); cust1.purchaseCar(vehicle, emp, false); //false Vehicle car=new Vehicle("BMW","M3",20000); boolean value=car.equals(vehicle); System.out.println(value); /*** * * handleCustomer(Customer cust, boolean finance, Vehicle vehicle) * if(finance==true) * runCreditHistory(Customer cust, double doubleAmount) * else if(vehicle.getPrice()<=cust.getCashOnHand()): * processTransaction(Customer cust,Vehicle vehicle) * else: * tell customer bring more money * * * //getters allow us to encapsulate data * */ } }
Customer.java
package com.zakilive; public class Customer { private String name; //this are only accessible in this class private String address; private double cashOnHand; public Customer(String name, String address, double cashOnHand) { this.name = name; this.address = address; this.cashOnHand = cashOnHand; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getCashOnHand() { return cashOnHand; } public void setCashOnHand(double cashOnHand) { cashOnHand+=500; this.cashOnHand = cashOnHand; } public String getAddress() { return address; } public void setAddress(String address) { address+="Dealership City"; this.address = address; } public void purchaseCar(Vehicle vehicle, Employee emp, boolean finance) //method signature { emp.handleCustomer(this, finance, vehicle); //"this" actually shares the instances of a class to the another class method } }
Vehicle.java
package com.zakilive; public class Vehicle { private String make; private String model; private double price; public Vehicle(String make, String model, double price) { this.make = make; this.model = model; this.price = price; } public String getMake() { return make; } public void setMake(String make) { this.make = make; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public int hashCode() { return super.hashCode(); } @Override public boolean equals(Object obj) { return super.equals(obj); } @Override public String toString() { return "Vehicle {" + "make='" + make + '\'' + ", model='" + model + '\'' + ", price=" + price + '}'; } }
Employee.java
package com.zakilive; public class Employee { public void handleCustomer(Customer cust, boolean finance, Vehicle vehicle) { if(finance==true) { //customer pays in loan double loanAmount=vehicle.getPrice()-cust.getCashOnHand(); runCreditHistroy(cust,loanAmount); } else if (vehicle.getPrice()<=cust.getCashOnHand()) //reason for using getters is encapsulating and the data hiding objects, setters to set also for the same purpose { //customer pays in cash processTransaction(cust,vehicle); } else{ System.out.println(" Customer will need more money to purchase vehicle: "+vehicle); } } public void runCreditHistroy(Customer cust, double loanAmount) { System.out.println("Ran credit history for customer...."); System.out.println("Customer has been approved to purchase the vehicle"); } public void processTransaction(Customer cust, Vehicle vehicle){ System.out.println("Customer has purchased the vehicle: " +vehicle+" for the price "+vehicle.getPrice()); } }
Output:
if false in purchaseCar()
Customer has purchased the vehicle: Vehicle {make='BMW', model='M3', price=20000.0} for the price 20000.0 false
if true in purchaseCar()
Ran credit history for customer.... Customer has been approved to purchase the vehicle false