c # установить элемент данных класса налогоплательщика равным другому методу - PullRequest
0 голосов
/ 17 апреля 2011

Я довольно новичок в c # и запутался в том, как установить элементы данных и затем рассчитать налог другим методом.Вот что должна делать эта часть программы:

"Если пользователь выбирает значения по умолчанию по умолчанию, вы создадите экземпляр объекта тарифов с помощью конструктора по умолчанию и установите для элемента данных класса Taxpayer налог, равный возвращенному значениюот вызова объекта ставок методом CalculateTax. "

-У меня есть оператор switch, вызывающий конструктор по умолчанию, если они выбирают 'D', я не уверен, как установить данные класса налогоплательщика по умолчанию, i 'Я не уверен, что метод CalculateTax также является правильным.

, а затем сделайте то же самое, если они выберут 'O'

Вот что у меня есть:

using System;
interface Icomparable
{
    int CompareTo(Object o);
}
    class rates
    {
        public double Limit{get;}
        public double LowRate{get;}
        public double HighRate{get;}
        private rates()
        {
            Limit = 30000;
            LowRate = 0.15;
            HighRate = 0.28;
        }
        public rates(double Limit; double LowRate; double HighRate;)
        {
            Console.Write("Enter dollar limit: ");              
            Limit = Convert.ToDouble(Console.ReadLine());
            Console.Write("Enter the low rate: ");
            LowRate = Convert.ToDouble(Console.ReadLine());
            Console.Write("Enter the high rate: ");
            HighRate = Convert.ToDouble(Console.ReadLine());
        }
        public CalculateTax()
        {
            if(Income < Limit)
            {TaxOwed = (Income * LowRate)}
            else
            {TaxOwed = (Income * HighRate)}
        }
    }

    public class taxpayer : IComparable
    {
        public string SSN{get; set;}
        public double Income{get; set;}
        public double TaxOwed{get;}

        int IComparable.CompareTo(Object o)
    {
        int returnVal;
        taxpayer temp = (taxpayer)o;
        if(this.TaxOwed > temp.TaxOwed)
            returnVal = 1;
        else
            if(this.TaxOwed < temp.TaxOwed)
                returnVal = -1;
            else
                returnVal = 0;
            return returnVal;
        }
    public getRates()
    {
    double Limit;
    double LowRate;
    double HighRate;
    Console.WriteLine("Do you want default values(enter D) or enter your own (enter O)?");
    entry = Convert.ToChar(Console.ReadLine());

    switch (entry)  //set switch
    {
        case'D':
            rates();
            break;
        case'O':
            rates(double Limit; double LowRate; double HighRate;)
            break;
        default:
            Console.WriteLine("Invalid input");
            goto getRates();
    }


    }
    }

Любая помощь с этим будет очень признателен.

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

Я не понимаю, почему вы продолжаете создавать объект, для которого у вас есть все значения. Вот альтернативный шаблон, статические пресеты + заводские

class Rates
{
    public double Limit{get;}
    public double LowRate{get;}
    public double HighRate{get;}

    static readonly Rates default = new Rates(30000,0.15,0.28);
    static readonly Rates govna = new Rates(300000,0.1,0.2);
    static readonly Rates priest = new Rates(300,0.05,0.07);

    public static Rates createRates()
    {
        double Limit; double LowRate; double HighRate;
        Console.Write("Enter dollar limit: ");              
        Limit = Convert.ToDouble(Console.ReadLine());
        Console.Write("Enter the low rate: ");
        LowRate = Convert.ToDouble(Console.ReadLine());
        Console.Write("Enter the high rate: ");
        HighRate = Convert.ToDouble(Console.ReadLine());

        return new Rates( Limit, LowRate, HighRate );
    }

    private Rates(double limit; double lowRate; double highRate;)
    {
        Limit = limit;
        LowRate = lowRate;
        HighRate = highRate;
    }

    public double CalculateTax( double Income)
    {
        if(Income < Limit)
        {return (Income * LowRate)}
        else
        {return (Income * HighRate)}
    }
}

О, а что с Гото?

while( null == ratesResult ){
    Console.WriteLine("Do you want default values(enter D) or enter your own (enter O)?");
    entry = Convert.ToChar(Console.ReadLine());

    switch (entry)  //set switch
    {
        case'D':
            ratesResult = Rates.default;
            break;
        case'O':
            ratesResult = Rates.createRates();
            break;
        default:
            Console.WriteLine("Invalid input");
    }

}
0 голосов
/ 17 апреля 2011

У вас много проблем с вашим кодом, приятель. Вот несколько советов, которые могут направить вас в правильном направлении.

В следующих свойствах у вас также должен быть набор; аксессор, чтобы иметь возможность хранить эти значения.

    public double Limit{get;}
    public double LowRate{get;}
    public double HighRate{get;}

В следующей функции вы хотите предложить пользователю ввести значения? Если это так, измените первую строку с

public rates(double Limit; double LowRate; double HighRate;)

до

public rates(bool dummy)

Теперь ваш код будет выглядеть как

    public rates(bool dummy) //Note that dummy is not used in this function.  It just distinguishes rates() from rates(bool)
    {
        Console.Write("Enter dollar limit: ");              
        Limit = Convert.ToDouble(Console.ReadLine());
        Console.Write("Enter the low rate: ");
        LowRate = Convert.ToDouble(Console.ReadLine());
        Console.Write("Enter the high rate: ");
        HighRate = Convert.ToDouble(Console.ReadLine());
    }

Пустышка только для того, чтобы код мог различить ваши две разные функции.

В вашем операторе switch просто вызовите функцию rate (bool dummy) вместо другой. Для манекена присвойте ему значение true или false, кого это волнует ... Это будет выглядеть следующим образом.

switch (entry)  //set switch
{
    case'D':
        rates();
        break;
    case'O':
        rates(true)
        break;
    default:
        Console.WriteLine("Invalid input");
        goto getRates();
}

В вашем коде больше проблем, но вы должны пересмотреть его, прежде чем мы сможем помочь вам в дальнейшем. На самом деле вы должны попытаться использовать его в VS, так как редактор может помочь вам исправить проблемы, сообщив вам конкретные ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...