Payroll System
SALARY SYSTEM
package strings.samples;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class Demo {
static File f;
static ArrayList<Employee1> empList;
public static void main(String[] args) {
f=new File("C:/Users/MuhammadShahid/Desktop/data.txt");
empList=new ArrayList<Employee1>();
readFromFile(empList,f);
displayMenu();
}//end of main
public static void displayMenu(){
Scanner sc=new Scanner(System.in);
int choice=0;
do{
System.out.println("1. Hire New Employee");
System.out.println("2. Print list of Employees");
System.out.println("3. Edit employee data");
System.out.println("4. Calculate salaries");
System.out.println("5. Exit");
choice=sc.nextInt();
switch(choice){
case 1:{
int i=0;
System.out.println("1. Salaried Employee"+ "\n2.Hourly Emplyee"
+ "\n3. Base Plus Comission Employee");
addEmployee(sc.nextInt());
}
break;
case 2:System.out.println(empList); break;
case 3: break;
case 4: break;
case 5: writeToFile(empList,f); System.exit(0);break;
default: System.out.println("Invalid Option");
}
}while(choice!=5);
}
public static void readFromFile(ArrayList<Employee1> empList,File f){
try{
FileReader fr=new FileReader(f);
Scanner sc=new Scanner(fr);
while(sc.hasNextLine()){
String str=sc.nextLine();
String r[]=str.split("_");
if(r.length==4)
{
empList.add(
new SalariedEmployee( r[0], r[1], r[2], Double.parseDouble(r[3]) ));
}
if(r.length==5)
{
empList.add(new HourlyEmployee( r[0], r[1], r[2],Double.parseDouble(r[3]) , Double.parseDouble(r[4]) ));
}
if(r.length==6)
{
empList.add(new BasePlusCommissionEmployee(
r[0], r[1], r[2], Double.parseDouble(r[3]), Double.parseDouble(r[4]), Double.parseDouble(r[5])));
}
}
}
catch(IOException e1){System.out.println("File "+f.getName()+" not found ");}
finally{}
}
public static void writeToFile(ArrayList<Employee1> empList,File f){
try {
FileWriter fw=new FileWriter(f);
BufferedWriter bw=new BufferedWriter(fw);
for(Employee1 e:empList){
if(e instanceof SalariedEmployee){
SalariedEmployee eS=(SalariedEmployee)e;
bw.write(eS.getFirstName()+"_"+eS.getLastName()+"_"+eS.getSocialSecurityNumber()+"_"+eS.getWeeklySalary());
bw.newLine();
}
if(e instanceof HourlyEmployee){
HourlyEmployee hE=(HourlyEmployee)e;
bw.write(hE.getFirstName()+"_"+hE.getLastName()+"_"+hE.getSocialSecurityNumber()+"_"+hE.getWage()+"_"+hE.getHours());
bw.newLine();
}
if(e instanceof BasePlusCommissionEmployee){
BasePlusCommissionEmployee eB=(BasePlusCommissionEmployee)e;
bw.write(eB.getFirstName()+"_"+eB.getLastName()+"_"+eB.getSocialSecurityNumber()+"_"+eB.getBaseSalary()+"_"+eB.getCommissionRate()+"_"+eB.getCommissionRate());
bw.newLine();
}
}
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void addEmployee(int category){
Scanner sc=new Scanner(System.in);
Scanner sc1=new Scanner(System.in);
System.out.print("Enter First Name:");
String first=sc.next();
System.out.print("Enter Last Name:");
String last=sc.next();
System.out.print("Enter SSN:");
String ssn=sc.next();
if(category==1)
{
System.out.print("Enter Salary:");
double salary=sc1.nextDouble();
empList.add(new SalariedEmployee(first,last,ssn,salary));
System.out.println("Emplyee Registered");
return;
}
if(category==2)
{
System.out.print("Enter Sales:");
double sales=sc1.nextDouble();
System.out.print("Enter Comission rate:");
double rate=sc1.nextDouble();
System.out.print("Enter Salary:");
double salary=sc1.nextDouble();
empList.add(new BasePlusCommissionEmployee(first,last,ssn,sales,rate,salary));
System.out.println("Emplyee Registered");
return;
}
if(category==3)
{
System.out.print("Enter Hours:");
int hours=sc1.nextInt();
System.out.print("Enter Hourly Rate:");
double rate=sc1.nextDouble();
empList.add(new HourlyEmployee(first,last,ssn,rate,hours));
System.out.println("Emplyee Registered");
return;
}
}
}//end of Demo
abstract class Employee1 implements Payable{
private String firstName;
private String lastName;
private String socialSecurityNumber;
public Employee1(String first, String last, String ssn) {
firstName = first;
lastName = last;
socialSecurityNumber = ssn;
} // end three-argument Employee constructor
public void setFirstName(String first) {
firstName = first; // should validate
} // end method setFirstName
public String getFirstName() {
return firstName;
} // end method getFirstName
public void setLastName(String last) {
lastName = last; // should validate
} // end method setLastName
public String getLastName() {
return lastName;
} // end method getLastName
public void setSocialSecurityNumber(String ssn) {
socialSecurityNumber = ssn; // should validate
} // end method setSocialSecurityNumber
public String getSocialSecurityNumber() {
return socialSecurityNumber;
} // end method getSocialSecurityNumber
public double getSales(){
return getSales();
}
public String toString() {
return String.format( "%s %s\nsocial security number: %s",
getFirstName(), getLastName(), getSocialSecurityNumber());
} // end method toString
} // end abstract class Employee1
class BasePlusCommissionEmployee extends CommissionEmployee {
private double baseSalary; // base salary per week
public BasePlusCommissionEmployee(String first, String last,
String ssn, double sales, double rate, double salary) {
super(first, last, ssn, sales, rate);
setBaseSalary(salary); // validate and store base salary
} // end six-argument BasePlusCommissionEmployee constructor
public void setBaseSalary(double salary) {
if (salary >= 0.0)
baseSalary = salary;
else
throw new IllegalArgumentException(
"Base salary must be >= 0.0" );
} // end method setBaseSalary
public double getBaseSalary() {
return baseSalary;
} // end method getBaseSalary
@Override
public double getPaymentAmount() {
return getBaseSalary() + super.getPaymentAmount();
} // end method getPaymentAmount
@Override
public String toString() {
return String.format("%s %s; %s: $%,.2f",
"base-salaried", super.toString(),
"base salary", getBaseSalary());
} // end method toString
public boolean equlas(Object o){
BasePlusCommissionEmployee e1=(BasePlusCommissionEmployee)o;
if(e1.getFirstName().equalsIgnoreCase(this.getFirstName())
&& e1.getLastName().equalsIgnoreCase(this.getLastName()))
return true;
else
return false;
}
} // end class BasePlusCommissionEmployee
interface Payable {
double getPaymentAmount();
}
class CommissionEmployee extends Employee1 {
private double grossSales; // gross weekly sales
private double commissionRate; // commission percentage
public CommissionEmployee(String first, String last, String ssn,
double sales, double rate) {
super(first, last, ssn);
setGrossSales(sales);
setCommissionRate(rate);
} // end five-argument CommissionEmployee constructor
public void setCommissionRate(double rate) {
if (rate > 0.0 && rate < 1.0)
commissionRate = rate;
else
throw new IllegalArgumentException(
"Commission rate must be > 0.0 and < 1.0");
} // end method setCommissionRate
public double getCommissionRate() {
return commissionRate;
} // end method getCommissionRate
// set gross sales amount
public void setGrossSales(double sales) {
if (sales >= 0.0)
grossSales = sales;
else
throw new IllegalArgumentException(
"Gross sales must be >= 0.0" );
} // end method setGrossSales
public double getGrossSales() {
return grossSales;
} // end method getGrossSales
@Override
public double getPaymentAmount() {
return getCommissionRate() * getGrossSales();
} // end method getPaymentAmount
@Override
public String toString() {
return String.format("%s: %s\n%s: $%,.2f; %s: %.2f",
"commission employee", super.toString(),
"gross sales", getGrossSales(),
"commission rate", getCommissionRate());
} // end method toString
public boolean equlas(Object o){
CommissionEmployee e1=(CommissionEmployee)o;
if(e1.getFirstName().equalsIgnoreCase(this.getFirstName())
&& e1.getLastName().equalsIgnoreCase(this.getLastName()))
return true;
else
return false;
}
} // end class CommissionEmployee
class SalariedEmployee extends Employee1 {
private double weeklySalary;
public SalariedEmployee(String first, String last, String ssn,
double salary) {
super(first, last, ssn); // pass to Employee constructor
setWeeklySalary(salary); // validate and store salary
} // end four-argument SalariedEmployee constructor
public void setWeeklySalary(double salary) {
if ( salary >= 0.0 )
weeklySalary = salary;
else
throw new IllegalArgumentException(
"Weekly salary must be >= 0.0" );
} // end method setWeeklySalary
public double getWeeklySalary() {
return weeklySalary;
} // end method getWeeklySalary
public double getPaymentAmount() {
return getWeeklySalary();
} // end method getPaymentAmount
public String toString() {
return String.format("salaried employee: %s\n%s: $%,.2f",
super.toString(), "weekly salary", getWeeklySalary());
} // end method toString
public boolean equlas(Object o){
SalariedEmployee e1=(SalariedEmployee)o;
if(e1.getFirstName().equalsIgnoreCase(this.getFirstName())
&& e1.getLastName().equalsIgnoreCase(this.getLastName()))
return true;
else
return false;
}
} // end class SalariedEmployee
class HourlyEmployee extends Employee1 {
private double wage; // wage per hour
private double hours; // hours worked for week
public HourlyEmployee(String first, String last, String ssn,
double hourlyWage, double hoursWorked) {
super(first, last, ssn);
setWage(hourlyWage); // validate and store hourly wage
setHours(hoursWorked); // validate and store hours worked
} // end five-argument HourlyEmployee constructor
public void setWage(double hourlyWage) {
if (hourlyWage >= 0.0)
wage = hourlyWage;
else
throw new IllegalArgumentException(
"Hourly wage must be >= 0.0" );
} // end method setWage
public double getWage() {
return wage;
} // end method getWage
public void setHours(double hoursWorked)
{
if ( ( hoursWorked >= 0.0 ) && ( hoursWorked <= 168.0 ) )
hours = hoursWorked;
else
throw new IllegalArgumentException(
"Hours worked must be >= 0.0 and <= 168.0" );
} // end method setHours
public double getHours() {
return hours;
} // end method getHours
public double getPaymentAmount() {
if (getHours() <= 40) // no overtime
return getWage() * getHours();
else
return 40 * getWage() + (getHours() - 40) * getWage() * 1.5;
} // end method getPaymentAmount
public String toString()
{
return String.format( "hourly employee: %s\n%s: $%,.2f; %s: %,.2f",
super.toString(), "hourly wage", getWage(),
"hours worked", getHours() );
} // end method toString
public boolean equlas(Object o){
HourlyEmployee e1=(HourlyEmployee)o;
if(e1.getFirstName().equalsIgnoreCase(this.getFirstName())
&& e1.getLastName().equalsIgnoreCase(this.getLastName()))
return true;
else
return false;
}
} // end class HourlyEmployee