输出无法显示构造函数,但可以显示默认构造函数

时间:2013-09-22 02:05:45

标签: c#

以下代码将显示所有内容。 我可以在默认构造函数上显示。 不幸的是,我无法显示员工ID号和付款的任何结果。 我编写代码时没有遇到任何错误。 因此,我根本不知道。

//class for FullTimeEmployee
namespace EmPloyee
{
public class FullTimeEmployee  //object
{
    private string FEmployeeFName, FEmployeeLName;
    private double FEmployeeID;
    private double FEmployeeWorkHour;
    private const double FEmployeePayRate = 20.00;
    private double GrossPay, RegPay, OTPay;

    //No Args Constructor, Default Constructor
    public FullTimeEmployee()
    {
        FEmployeeFName = "Arthur";
        FEmployeeLName = "Chen";
        FEmployeeID = 1000;
        FEmployeeWorkHour = 60;
        RegPay = calcRegPay();
        OTPay = CalOTPay();

    }

    //Constructor 
    public FullTimeEmployee(string FFName, string FLName, double FID, double FHours)
    {
        FEmployeeFName = FFName;
        FEmployeeLName = FLName;
        FID = FEmployeeID;
        FEmployeeWorkHour = FHours;
        //FEmployeePayRate = FPRate;

    }

    //Accessor Methods

    //get name
    public string GetFName()
    {
        return FEmployeeFName + " " + FEmployeeLName; 
    }

    //get ID
    public double getID()
    {
        return FEmployeeID;
    }

    //get Payrate
    public double getPayRate()
    {
        return FEmployeePayRate;
    }

    //get hours
    public double getHours()
    {
        return FEmployeeWorkHour;
    }

    //**********************************
    //******Calculate GrossPay**********
    //**********************************

    //Calculate RegularPay
    private double calcRegPay()
    {
        double RegPay;
        if (FEmployeeWorkHour >= 0 && FEmployeeWorkHour <= 38)
        {
            RegPay = FEmployeeWorkHour * FEmployeePayRate;
        }
        else
        {
            RegPay = 38 * FEmployeePayRate;
        }

        return RegPay;
    }

    //get Regular Pay
    public double getRegPay()
    {
        return RegPay;
    }

    //calculate OverTime Pay
    private double CalOTPay()
    {
        double OTPay;
        if (FEmployeeWorkHour >= 0 && FEmployeeWorkHour <= 38)
        {
            OTPay = 0;
        }
        else
        {
            OTPay = (FEmployeeWorkHour - 38) * FEmployeePayRate * 1.5;
        }

        return OTPay;
    }

    //get OTPay
    public double getOTPay()
    {
        return OTPay;
    }

    //get Gross Pay
    public double getGrossPay()
    {
        return GrossPay = RegPay + OTPay;
    }

} //end FullTimeEployee Class

} //end Name Space


//Employee Driver 
namespace EmPloyee
{
class EmployeeDriver
{
    static void Main(string[] args)
    { 
        //switch
        char Response;
        Response = 'X';

          String Question= "Select F or f if you want to Create a Full Time Employee\n"
            + "Or P or p to create a Part-Time Employee";
        Console.WriteLine(Question);
        String inputS =Console.ReadLine();

        Response=Convert.ToChar(inputS.Substring(0,1));

        switch (Response) 
        {
            case 'F': case 'f':
                CreateFullTime();
                break;

            case 'P': case 'p':
          //      CreatePartTime();
                break;

        } //end Switch
        Console.WriteLine("Hit Any Key to Exit");
        Console.ReadLine();


    } //end main


    public static void CreateFullTime()
    {    //get output for default constructor
        FullTimeEmployee myFT;

        myFT = new FullTimeEmployee();

        //outputing with formatted strings
        Console.WriteLine("Full Time Employee's First Name: " + myFT.GetFName());
        Console.WriteLine("Full Time Employee's ID: " + myFT.getID());
        Console.WriteLine("Full Time Employee's Hour: " + myFT.getHours().ToString("n2"));
        Console.WriteLine("Full Time Employee's PayRate: " + myFT.getPayRate().ToString("C2"));
        Console.WriteLine("Full Time Employee's Regular Pay: " + myFT.getRegPay().ToString("C2"));
        Console.WriteLine("Full Time Employee's Over Time Pay: " + myFT.getOTPay().ToString("C2"));
        Console.WriteLine("Full Time Employee's Net Pay: " + myFT.getGrossPay().ToString("C2"));


        //some temporary variables
        string LN = " ", FN = " ";
        double FId = -8888;
        double FHrs = -10;
        // bool checkFN=false;
        bool CheckID = false;
        bool CheckHour = false;




        Console.WriteLine("Enter Your First Name");
        FN = Console.ReadLine();

        //do  //get information for first name
        //{
        //    try
        //    {
        //        FN = Console.ReadLine();

        //    }
        //    catch (FormatException fmte)
        //    {
        //        Console.WriteLine(fmte.Message);
        //        // flag = true;

        //    }
        //    if (FN = " ")
        //    {
        //        Console.WriteLine("Please Enter a Valid Name");
        //        // flag = true;
        //    }
        //} while (FN = " ");

        Console.WriteLine("Enter Your Last Name");

        LN = Console.ReadLine();



        //input the correct ID number
        //Console.WriteLine("Enter Your ID Number");
        do
        {
            try
            {
                Console.WriteLine("Enter Your ID Number");
                string inputid = Console.ReadLine();
                FId = double.Parse(inputid);

                //  FId = double.Parse(Console.ReadLine());

            }
            catch (FormatException fmte)
            {
                Console.WriteLine(fmte.Message);

            }
            if (FId >= 1001 && FId <= 9999)
            {
                CheckID = true;
            }
            else
            {

                Console.WriteLine("ID Number Must Be 4 Digit Number "
                + "and greater than 1000");
            }
        } while (!CheckID);


        //Enter workhous


        do
        {
            try
            {
                Console.WriteLine("Enter Hours");
                string inputhr = Console.ReadLine();

                FHrs = double.Parse(inputhr);
            }
            catch (FormatException fmte)
            {
                Console.BackgroundColor = ConsoleColor.Red;
                Console.WriteLine("Dude\n"
                      + "It is NOT a Legic Number!!" + fmte.Message);


            }
            if (FHrs > 0 && FHrs <= 65)
            {
                CheckHour = true;
            }
            else
            {
                Console.WriteLine("Please Enter a Positive Number\n"
                + "And the maxmium number is 65!!!");
            }

        } while (!CheckHour);

        FullTimeEmployee YrFT;
        YrFT = new FullTimeEmployee(FN, LN, FId, FHrs);

        //outputing
        Console.WriteLine("FT Employee's Name: " + YrFT.GetFName());
        Console.WriteLine("FT Employee's ID: " + YrFT.getID());
        Console.WriteLine("FT Employee's Hours: " + YrFT.getHours().ToString("n2"));
        Console.WriteLine("FT Employee's Pay Rate: " + YrFT.getPayRate().ToString("c2"));
        Console.WriteLine("FT Employee's Regular Pay: " + YrFT.getRegPay().ToString("C2"));
        Console.WriteLine("FT Employee's Over Time Pay: " + YrFT.getOTPay().ToString("C2"));
        Console.WriteLine("FT Employee's Net Pay: " + YrFT.getGrossPay().ToString("c2"));

    }
      }
}

2 个答案:

答案 0 :(得分:1)

课程相当混乱,但我能找到你的错误。见下文......

 //Constructor 
    public FullTimeEmployee(string FFName, string FLName, double FID, double FHours)
    {
        FEmployeeFName = FFName;
        FEmployeeLName = FLName;
        FEmployeeID = FID; // This was backwards in your code.
        FEmployeeWorkHour = FHours;
        RegPay = calcRegPay(); // You need this line and the next one...
        OTPay = CalOTPay(); // to trigger your payment calculations.
    }

答案 1 :(得分:0)

在带参数的构造函数中,工资率已被注释掉。在no-args构造函数中,计算工资率,但是因为正在调用4-args构造函数,所以不会调用此构造函数。

员工ID位于等号的错误一侧。您将输入变量FID的值重新分配给字段FEmployeeID中的任何内容。

请改为尝试:

// Constructor 
public FullTimeEmployee(string FFName, string FLName, double FID, double FHours, double FPRate)
{
    FEmployeeFName = FFName;
    FEmployeeLName = FLName;
    FEmployeeID = FID;
    FEmployeeWorkHour = FHours;
    FEmployeePayRate = FPRate;
}

请注意,构造函数中的所有参数都位于等号的右侧。

另一个选项,如果你想让no-args构造函数插入4-(well,5-)args构造函数的默认值,你可以让4/5-args构造函数调用no-args构造函数在声明的最后使用this()

// Constructor 
public FullTimeEmployee(string FFName, string FLName, double FID, double FHours, double FPRate) 
    : this()
{
    FEmployeeFName = FFName;
    FEmployeeLName = FLName;
    FEmployeeID = FID;
    FEmployeeWorkHour = FHours;
    FEmployeePayRate = FPRate;
}