In: Computer Science
Language is C# (i've got some code but it seems to not run correctly, would love a new take)
Create an Employee class with five fields: first name, last name, workID, yearStartedWked, and initSalary. It includes constructor(s) and properties to initialize values for all fields. Create an interface, SalaryCalculate, class that includes two functions: first,CalcYearWorked() function, it takes one parameter (currentyear) and calculates the number of year the worker has been working. The second function, CalcCurSalary() function that calculates the current year salary. Create a Worker classes that is derived from Employee and SalaryCalculate class. In Worker class, it includes two field, nYearWked and curSalary, and constructor(s). It defines the CalcYearWorked() function using (current year – yearStartedWked) and save it in the nYearWked variable. It also defines the CalcCurSalary() function that calculates the current year salary by using initial salary with 3% yearly increment. Create a Manager class that is derived from Worker class. In Manager class, it includes one field: yearPromo and constructor(s). Itincludes a CalcCurSalary function that calculate the current year salary by overriding the base class function using initial salary with 5% yearly increment plus 10% bonus. The manager’s salary calculates in two parts. It calculates as a worker before the year promoted and as a manager after the promotion. Write an application that reads the workers and managers information from files (“worker.txt” and “manager.txt”) and then creates the dynamic arrays of objects. Prompt the user for current year and display the workers’ and managers’ current information in separate groups: first and last name, ID, the year he/she has been working, and current salary.
Worker.txt
5 Hector Alcoser A001231 1999 24000 Anna Alaniz A001232 2001 34000 Lydia Bean A001233 2002 30000 Jorge Botello A001234 2005 40000 Pablo Gonzalez A001235 2007 35000
Manager.txt
3 Sam Reza M000411 1995 51000 2005 Jose Perez M000412 1998 55000 2002 Rachel Pena M000413 2000 48000 2010
What i Have:
/// Employee.cs ///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyNamespace
{
public class Employee
{
private string firstName;
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
private string lastName;
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
private int wordId;
public int WordId
{
get { return wordId; }
set { wordId = value; }
}
private int yearStartedWked;
public int YearStartedWked
{
get { return yearStartedWked; }
set { yearStartedWked = value; }
}
private double initSalary;
public double InitSalary
{
get { return initSalary; }
set { initSalary = value; }
}
public Employee()
{
firstName = "";
lastName = "";
wordId = 0;
yearStartedWked = 0;
initSalary = 0;
}
public Employee(string fN, string lN, int id, int yearStarted,
double salary)
{
firstName = fN;
lastName = lN;
wordId = id;
yearStartedWked = yearStarted;
initSalary = salary;
}
}
}
/// SalaryCalculate.cs ///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyNamespace
{
public interface SalaryCalculate
{
void CalcYearWorked(int currentYear);
void CalcCurSalary(int currentYear);
}
}
/// Worker.cs ///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyNamespace
{
public class Worker : Employee, SalaryCalculate
{
private int nYearWked;
public int NYearWked
{
get { return nYearWked; }
set { nYearWked = value; }
}
private double curSalary;
public double CurSalary
{
get { return curSalary; }
set { curSalary = value; }
}
public Worker(string fN, string lN, int id, int yearStarted,
double salary) : base(fN, lN, id, yearStarted, salary)
{
}
public void CalcYearWorked(int currentYear)
{
nYearWked = currentYear - YearStartedWked;
}
public void CalcCurSalary(int currentYear)
{
double salary = InitSalary;
for (int i = YearStartedWked; i <= currentYear; ++i)
{
salary *= 1.03;
}
CurSalary = salary;
}
}
}
/// Manager.cs ///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyNamespace
{
public class Manager : Worker
{
private int yearPromo;
public int YearPromo
{
get { return yearPromo; }
set { yearPromo = value; }
}
public Manager(string fN, string lN, int id, int yearStarted,
double salary, int yearPromo)
: base(fN, lN, id, yearStarted, salary)
{
this.yearPromo = yearPromo;
}
public void CalcCurSalary(int currentYear)
{
double salary = InitSalary;
for (int i = YearStartedWked; i <= currentYear; ++i)
{
if (i < yearPromo)
salary *= 1.03;
else
salary *= 1.05;
}
CurSalary = salary * 1.2; // 20% bonus
}
}
}
/// Main.cs ///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace MyNamespace
{
class EmployeeMain
{
public static void Main()
{
List<Worker> employees = new List<Worker>();
using (StreamReader sr = new StreamReader(new
FileStream("worker.txt", FileMode.Open)))
{
string line;
while((line = sr.ReadLine()) != null)
{
string[] words = line.Split(' ');
employees.Add(new Worker(words[0], words[1],
Convert.ToInt32(words[2]), Convert.ToInt32(words[3]),
Convert.ToDouble(words[4])));
}
}
List<Manager> managers = new List<Manager>();
using (StreamReader sr = new StreamReader(new
FileStream("manager.txt", FileMode.Open)))
{
string line;
while ((line = sr.ReadLine()) != null)
{
string[] words = line.Split(' ');
managers.Add(new Manager(words[0], words[1],
Convert.ToInt32(words[2]), Convert.ToInt32(words[3]),
Convert.ToDouble(words[4]), Convert.ToInt32(words[5])));
}
}
Console.Write("Enter current year: ");
int year = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < employees.Count; ++i)
{
employees[i].CalcYearWorked(year);
employees[i].CalcCurSalary(year);
Console.WriteLine("Worker: " + employees[i].LastName + ", " +
employees[i].FirstName + "'s salary is: " + employees[i].CurSalary
+ " and worked a total of " + employees[i].NYearWked + "
years.");
}
for (int i = 0; i < managers.Count; ++i)
{
managers[i].CalcYearWorked(year);
managers[i].CalcCurSalary(year);
Console.WriteLine("Manager: " + managers[i].LastName + ", " +
managers[i].FirstName + "'s salary is: " + managers[i].CurSalary +
" and worked a total of " + managers[i].NYearWked + "
years.");
}
}
}
}
HELP:
The error that is constantly showing up is the index is out of bounds of the array with the source being LINE 21 in the EmployeeMain Class.
There were numerous errors in your previous code, which are summarised below.
The corrected class files are given below within their respective tables.
Employee.cs |
|
SalaryCalculate.cs |
|
Worker.cs |
|
Manager.cs |
using System; namespace MyNamespace public int YearPromo public Manager(string fN, string lN, string id, int yearStarted,
double salary, int yearPromo) public void CalcCurSalary(int currentYear) } |
Main.cs |
|
Console Output
NOTE: Please put the worker.txt and manager.txt files in your projects > Bin > Debug folder. Please mention your doubts(if any) in the comments section and please give a thumbs up if you liked the solution.