C # Почему мои вычисления не добавляются правильно? - PullRequest
0 голосов
/ 24 сентября 2018

Я делаю форму, которая рассчитывает даты бронирования.По пятницам и субботам плата за номер составляет 150 долларов, а в остальные дни - 120 долларов.Я использовал цикл while для его настройки, но по какой-то причине он продолжает вычислять неправильные цены.

Как это должно выглядеть:

enter image description here

Как это выглядит:

enter image description here

Вот мой код:

int nights = 0;
int price = 0;

private void btnCalculate_Click(object sender, EventArgs e)
    {
        DateTime arrivalDate = DateTime.Parse(txtArrivalDate.Text);
        DateTime departureDate = DateTime.Parse(txtDepartureDate.Text);
        TimeSpan ts = departureDate.Subtract(arrivalDate);
        nights = ts.Days;

        while (arrivalDate != departureDate)
        {
            DayOfWeek dow = arrivalDate.DayOfWeek;
            if (dow == DayOfWeek.Friday || 
                dow == DayOfWeek.Saturday)
            {
                price = 150;
            }
            else
            {
                price = 120;
            }

            arrivalDate = arrivalDate.AddDays(1);

        }

        txtNights.Text = nights.ToString();
        int totalPrice = price * nights;
        txtTotalPrice.Text = totalPrice.ToString();
        int average = totalPrice / nights;
        txtAvgPrice.Text = average.ToString();
        txtArrivalDate.Focus();
    }

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Короче, int totalPrice = price * nights; эта строка должна быть удалена, а в цикле while, price += 120 или price += 150 в каждом условии.totalPrice можно просто заменить на price.

Вы не используете price, установленный в цикле while.price устанавливается на 120 или 150, но затем перезаписывается следующим значением (предыдущее значение полностью игнорируется).Поэтому, как только ваш код выходит из цикла while, используется последний набор price, умноженный на общее количество ночей.

Итак, ваш код принимает price последнего дня (2 /1/2016 в данном случае) и умножить его на общее количество ночей.То, что он должен делать, это держать промежуточный итог price внутри цикла.

0 голосов
/ 24 сентября 2018

Вы ничего не делаете с price.

Он должен использоваться в цикле while.

Кроме того, вы должны использовать .TotalDays, а не .Days.

Что-то вроде:

            public static (decimal price, int nights) GetPrice
        (DateTime arrivalDate, DateTime departureDate)
    {
        //This code assumes there is no time component in the dates provided 

        if(departureDate < arrivalDate )
        {
            throw new ArgumentException("Arrival after Departure");
        }

        if (departureDate.Date == arrivalDate.Date)
        {
            //TODO
            return (0, 0);
        }

        Decimal totalPrice = 0;
        DateTime day = arrivalDate;
        while (day != departureDate)
        {
            totalPrice += GetRate(day.DayOfWeek);
            day = day.AddDays(1);
        }
        return (totalPrice, (int)(departureDate - arrivalDate).TotalDays);
    }

    private static decimal GetRate(DayOfWeek dow)
    {
        return (dow == DayOfWeek.Friday || dow == DayOfWeek.Saturday)
            ? 150
            : 120;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...