2017-03-18 74 views
-3

我正在研究一個簡短的項目,其目標是創建一個計算淨工資的程序。用戶將輸入他們的姓名,工作時間和薪資。我必須使用Properties而不是構造函數來接收數據。應該有兩個類別; Main類和我稱爲Pay的類,它將執行計算並使用override ToString()方法來顯示結果(使用string.format命令)。C#如何在2個類中引用/使用/設置對象/實例的值

我有一個問題,程序能夠顯示人員姓名,工作時間以及工資率(所有這些都是用戶輸入的)。但是,其他一些變量顯示爲「0」。我也無法弄清楚如何設置這些變量,以便它們是我在Main類中創建的對象「aPay」的實例。

我應該將這些變量設置爲Main類或Pay類中的aPay對象的實例嗎?如果是這樣,我該怎麼做呢?在過去一個小時裏我一直在嘗試一些事情,或者試圖弄清楚這一點,甚至參考了上週我作爲一項任務所做的類似計劃,但我似乎無法圍繞這一概念及其正確性實現。

我會在下面發表我的代碼,任何幫助和解釋將真誠讚賞。

class MainClass 
{ 
    public static void Main(string[] args) 
    { 


     Header(); 
     Directions(); 

     Pay aPay = new Pay(); 
     Write("**********************************\n"); 
     Write("Enter name: "); 
     aPay.WorkerName = ReadLine(); 

     Write("Enter hours: "); 
     aPay.HoursWorked = double.Parse(ReadLine()); 

     Write("Enter rate: "); 
     aPay.RateOfPay = double.Parse(ReadLine()); 
     Write("**********************************\n"); 



     WriteLine(aPay.ToString()); 




    } 

    private static void Header() 
    { 
     WriteLine("*************************************************************"); 
     WriteLine("\t Pay"); 
     WriteLine("\t Calculate Net Pay"); 
     WriteLine("\t Matt Craig"); 
     WriteLine("\t " + DateTime.Today); 
     WriteLine("*************************************************************"); 
    } 

    private static void Directions() 
    { 
     WriteLine("This program will determine pay."); 
     WriteLine(" "); 
     WriteLine("You will be asked to enter hours worked" 
        + "\n and rate of pay"); 
     WriteLine(" "); 
     WriteLine("*************************************************************"); 
    } 
} 

這是主類,我會後下面的薪酬等級:

public class Pay 
{ 
    private string workerName; 
    private double hoursWorked; 
    private double rateOfPay; 
    private double grossPay; 
    private double netPay; 
    private double FICA_TAX = 0.0765; 
    private double FED_TAX = 0.20; 
    private double STATE_TAX = 0.10; 
    private double HEALTH_INS = 0.07; 
    private double ficaTax; 
    private double fedTax; 
    private double stateTax; 
    private double healthIns; 

    public Pay() 
    { 
     /* Pay aPay = new Pay(); 
     aPay.grossPay = grossPay; 
     aPay.netPay = netPay; 
     aPay.ficaTax = ficaTax; 
     aPay.fedTax = fedTax; 
     aPay.stateTax = stateTax; 
     aPay.healthIns = healthIns; */ 
    } 

    public string WorkerName 
    { 
     set 
     { 
      workerName = value; 
     } 
    } 

    public double HoursWorked 
    { 
     set 
     { 
      hoursWorked = value; 
     } 
    } 

    public double RateOfPay 
    { 
     set 
     { 
      rateOfPay = value; 
     } 
    } 

    public double GrossPay 
    { 
     get 
     { 
      grossPay = (hoursWorked * rateOfPay); 
      return grossPay; 
     } 
    } 

    public double NetPay 
    { 
     get 
     { 
      netPay = grossPay - FICA_TAX - FED_TAX - STATE_TAX - HEALTH_INS; 
      return netPay; 
     } 
    } 

    public double FicaTax 
    { 
     get 
     { 
      ficaTax = FICA_TAX * grossPay; 
      return ficaTax; 
     } 
    } 

    public double FedTax 
    { 
     get 
     { 
      fedTax = FED_TAX * grossPay; 
      return fedTax; 
     } 
    } 

    public double StateTax 
    { 
     get 
     { 
      stateTax = STATE_TAX * grossPay; 
      return stateTax; 
     } 
    } 

    public double HealthIns 
    { 
     get 
     { 
      healthIns = HEALTH_INS * grossPay; 
      return healthIns; 
     } 
    } 

    public override string ToString() 
    { 
     string stats; 
     stats = string.Format("Name\t\t {0} \n", workerName); 
     stats += string.Format("Gross Pay\t {0} \n", grossPay); 
     stats += string.Format("FICA tax\t {0} \n", ficaTax); 
     stats += string.Format("Federal tax\t {0} \n", fedTax); 
     stats += string.Format("State tax\t {0} \n", stateTax); 
     stats += string.Format("Health Insurance {0} \n", healthIns); 
     stats += string.Format("Net pay\t\t {0} \n", netPay); 
     return stats; 
    } 
} 

回答

1

這裏的問題是,你是不是調用干將裏面ToString,您呼叫的領域,他們在通過屬性的get方法之前,沒有任何價值。

public override string ToString() 
{ 
    string stats; 
    stats = string.Format("Name\t\t {0} \n", workerName); 
    stats += string.Format("Gross Pay\t {0} \n", GrossPay); 
    stats += string.Format("FICA tax\t {0} \n", FicaTax); 
    stats += string.Format("Federal tax\t {0} \n", FedTax); 
    stats += string.Format("State tax\t {0} \n", StateTax); 
    stats += string.Format("Health Insurance {0} \n", HealthIns); 
    stats += string.Format("Net pay\t\t {0} \n", NetPay); 
    return stats; 
} 

請參閱我將名稱更改爲以大寫字母開頭,以便它們引用屬性。

+0

非常感謝你的回答。我可以發誓我已經嘗試過,但我可能沒有,或者我可能在我編寫程序的早期階段嘗試過。你一直很有幫助! – Snags

+0

這些值不是aPay對象的實例,對嗎?我是否需要將用戶輸入的WorkerName,HoursWorked和RateOfPay值分配給aPay?如果是這樣,Pay類中僅包含aPay實例的其他值嗎? (grossPay,ficaTax,fedTax,stateTax,healthIns,netPay) – Snags

+0

如果是這樣,我可以做類似於這樣的事情:Write(「Enter name:」); aPay.WorkerName = ReadLine();到僅包含在Pay類中的非用戶輸入變量,使它們成爲aPay對象的實例? – Snags

相關問題