2017-03-18 7 views
-3

나는 순수 지불을 계산하는 프로그램을 만드는 짧은 프로젝트를 진행하고 있습니다. 사용자는 이름, 근무 시간 및 요금을 입력합니다. 데이터를 수신하려면 생성자 대신 속성을 사용해야합니다. 두 가지 수업이 있어야합니다. Main 클래스 및 계산을 수행하고 overrideToString() 메서드를 사용하여 결과를 표시하는 Pay (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

4 가지 답변 주셔서 감사합니다. 나는 이미 그것을 시도했다는 것을 맹세 할 수 있었지만 나는 가질 수 없었을 것입니다. 또는 나는 프로그램을 작성하는 초기 단계에서 그것을 시도 할 것입니다. 너는 매우 도움이되었다! – 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