This is a homework problem – so I would appreciate if you could tell me what I am doing wrong and how to fix it, resp. how to optimize my programing techniques :). Thanks!
I built this to save the employee in the array – it will save the first one right but when it saves the others it shows up blank – right out of the constructor. Why?
using System;
using System.IO;
class Driver
{
const int NUMBER_OF_EMPLOYEES = 10;
// Main Method
// Purpose: directs the program in what to do and loops the program while np.again != n
// Parameters: none
// Returns: nothing
// Pre-conditions: none
// Post-conditions: none
public static void Main()
{
Driver nd = new Driver();
char response = 'y';
string PathName = "empdata" + ".txt";
int counter = 0;
do
{
employee[] emps = new employee[NUMBER_OF_EMPLOYEES];
TextReader tr = new StreamReader(PathName);
do
{
emps[counter] = nd.getSaveEmpdataPrint(PathName, counter, tr );
counter++;
} while (counter != 6);
response = nd.again();
Console.Clear();
} while (response != 'n');
}
public employee getSaveEmpdataPrint(string PathName, int counter, TextReader tr)
{
employee tempEmployee = new employee();
Driver nd = new Driver();
double i = 1;
string temp = "";
do
{
temp = tr.ReadLine();
if ((i % 1) == 0.5)
i += 0.5;
try
{
if (temp != null)
{
try
{
if ((int.Parse(temp)) == 1)
{
tempEmployee.empNumber = (int)(i - 0.5);
i += 0.5;
}
}
catch (FormatException){ }
if (i == 2)
{
string fn = "";
string ln = "";
nd.SplitString(temp, ref fn , ref ln);
tempEmployee.firstName = fn;
tempEmployee.lastName = ln;
i += 0.5;
}
if (i == 3)
{
tempEmployee.adress = temp;
i += 0.5;
}
if (i == 4)
{
double temphrwage = 0;
double temphrsworked = 0;
nd.SplitDouble(temp, ref temphrwage, ref temphrsworked);
tempEmployee.hrsWorked = temphrsworked;
tempEmployee.hrlyWage = temphrwage;
i += 0.5;
}
}
}
catch (NullReferenceException)
{
Console.WriteLine("The data in the text file was imcomplete or was formated wrong.");
Console.ReadLine();
}
} while (temp != null && i != 4.5);
return tempEmployee;
}
private void PrintEmployee(employee tempEmployee)
{
Console.WriteLine("-------------------------------------");
Console.WriteLine("Employee Number: --- {0}", tempEmployee.empNumber);
Console.WriteLine(" Name: --- {0}, {1}", tempEmployee.lastName, tempEmployee.firstName);
Console.WriteLine(" Adress: --- {0}", tempEmployee.adress);
Console.WriteLine(" Hourly wage: --- {0:f2} (USD per hour)", tempEmployee.hrlyWage);
if (tempEmployee.hrsWorked == 1)
Console.WriteLine(" Hours Worked: --- 1hr ");
if (tempEmployee.hrsWorked != 1)
Console.WriteLine(" Hours Worked: --- {0:f2}hrs", tempEmployee.hrsWorked);
Console.WriteLine("-------------------------------------");
}
private void SplitString(string temp, ref string FirstName, ref string LastName)
{
char[] delimit = new char[] { ' ' };
int counter = 0;
foreach (string substr in temp.Split(delimit))
{
if (counter == 0)
FirstName = substr;
if (counter == 1)
LastName = substr;
counter++;
}
}
private void SplitDouble(string temp, ref Double a, ref Double b)
{
char[] delimit = new char[] { ' ' };
int counter = 0;
string ta = "";
string tb = "";
foreach (string substr in temp.Split(delimit))
{
if (counter == 0)
ta = substr;
if (counter == 1)
tb = substr;
counter++;
}
a = double.Parse(ta);
b = double.Parse(tb);
}
// again Method
// Purpose: asks the user if they want to run the program again
// Parameters: none
// Returns: a char ( y or n )
// Pre-conditions: none
// Post-conditions: none
public char again()
{
char response = 'y';
Console.Write("\nWould you like run again? (y or n)");
response = char.Parse(Console.ReadLine());
response = char.ToLower(response);
Console.Clear();
return response;
}
}
class employee
{
private int EmpNumber;
private string FirstName;
private string LastName;
private string Adress;
private double HrlyWage;
private double HrsWorked;
// Default Constructor
public employee()
{
EmpNumber = 0;
FirstName = "";
LastName = "";
Adress = "";
HrlyWage = 0;
HrsWorked = 0;
}
// Method empNumber
// Porpose: get and set the EmpNumber
// Pramereters: int
// Returns: a int (employee Number)
public int empNumber
{
get
{
return EmpNumber;
}
set
{
EmpNumber = value;
}
}
// Method lastName
// Porpose: get and set the name
// Pramereters: string
// Returns: a string (employee name)
public string lastName
{
get
{
return LastName;
}
set
{
LastName = value;
}
}
// Method firstName
// Porpose: get and set the first name
// Pramereters: string
// Returns: a string (employee's first name)
public string firstName
{
get
{
return FirstName;
}
set
{
FirstName = value;
}
}
// Method adress
// Porpose: get and set the adress of the employee
// Pramereters: string
// Returns: a string (employee adress)
public string adress
{
get
{
return Adress;
}
set
{
Adress = value;
}
}
// Method hrlyWage
// Porpose: get and set the Hourly Wage
// Pramereters: Double
// Returns: a double (employee's Hourly Wage)
public double hrlyWage
{
get
{
return HrlyWage;
}
set
{
HrlyWage = value;
}
}
// Method hrsWorked
// Porpose: get and set the Hours Worked
// Pramereters: Double
// Returns: a double (the number of hours the employee worked)
public double hrsWorked
{
get
{
return HrsWorked;
}
set
{
HrsWorked = value;
}
}
// Method reset
// Porpose: reset everything to zero/default
// Pramereters: none
// Returns: nothing
public void reset()
{
EmpNumber = 0;
FirstName = "";
LastName = "";
Adress = "";
HrlyWage = 0;
HrsWorked = 0;
}
// Method empNumber
// Porpose: get and set the EmpNumber
// Pramereters: int
// Returns: a int (employee Number)
public int empNumber
{
get
{
return EmpNumber;
}
set
{
EmpNumber = value;
}
}
// Method lastName
// Porpose: get and set the name
// Pramereters: string
// Returns: a string (employee name)
public string lastName
{
get
{
return LastName;
}
set
{
LastName = value;
}
}
// Method firstName
// Porpose: get and set the first name
// Pramereters: string
// Returns: a string (employee's first name)
public string firstName
{
get
{
return FirstName;
}
set
{
FirstName = value;
}
}
// Method adress
// Porpose: get and set the adress of the employee
// Pramereters: string
// Returns: a string (employee adress)
public string adress
{
get
{
return Adress;
}
set
{
Adress = value;
}
}
// Method hrlyWage
// Porpose: get and set the Hourly Wage
// Pramereters: Double
// Returns: a double (employee's Hourly Wage)
public double hrlyWage
{
get
{
return HrlyWage;
}
set
{
HrlyWage = value;
}
}
// Method hrsWorked
// Porpose: get and set the Hours Worked
// Pramereters: Double
// Returns: a double (the number of hours the employee worked)
public double hrsWorked
{
get
{
return HrsWorked;
}
set
{
HrsWorked = value;
}
}
// Method reset
// Porpose: reset everything to zero/default
// Pramereters: none
// Returns: nothing
public void reset()
{
EmpNumber = 0;
FirstName = "";
LastName = "";
Adress = "";
HrlyWage = 0;
HrsWorked = 0;
}
}
}
sample txt file format:
1
John MerryWeather
123 West Main Street
5.00 30
2
Andrew Buttons
17 East Riverview Drive
12.00 40
3
Martha Washington
1 Mount Vernon Lane
7.25 20
…
Example from txt
Thanks, guys, and sorry about not having all the code 😛 and the txt file. :))
Here is a rewritten version that should be somewhat clearer. I commented it about some things.
My main complaint about your original code was that you made too much use of loops and counters when you didn’t have to use them. It unnecessarily complicates the code which is never a good thing.