Код цены бронирования отеля цена выходного дня (проблема с реализацией логики)

#c# #logic

#c# #Логические

Вопрос:

Я пытаюсь взимать на 30 долларов больше, когда пользователь бронирует бронирование на день в пятницу и субботу в качестве дополнительной платы за выходные, но я не могу получить день и не могу добавить свои дополнительные расходы. Я сделал это до сих пор:

     private void btnCalculate_Click(object sender, EventArgs e)
            {
                DateTime dtArrivalDate;
                DateTime.TryParse(txtArrivalDate.Text, out dtArrivalDate);
                DateTime dtDepartureDate;
                DateTime.TryParse(txtDepartureDate.Text, out dtDepartureDate);
                TimeSpan tsDuration = dtDepartureDate.Subtract(dtArrivalDate);
                int costPerNight = 120;
                for (DateTime date = dtArrivalDate; date <= dtDepartureDate; date = date.AddDays(1))
                {
                    DayOfWeek dw = date.DayOfWeek;
                    string days = dw.ToString();
                    int weekendCost = 0;
                    if (dw == DayOfWeek.Friday || dw == DayOfWeek.Saturday)
                    {
                        weekendCost = weekendCost   30;
                        dw  ;
                        int totalCost = tsDuration.Days * costPerNight   weekendCost;
                        int avgPricePerNight = (tsDuration.Days * costPerNight   weekendCost) / tsDuration.Days;
                        txtNights.Text = tsDuration.Days.ToString("n");
                        txtTotalPrice.Text = totalCost.ToString("n");
                        txtAvgPrice.Text = avgPricePerNight.ToString("n");
                    }
                    else
                    {
                        int totalCost = tsDuration.Days * costPerNight;
                        int avgPricePerNight = (tsDuration.Days * costPerNight) / tsDuration.Days;
                        txtNights.Text = tsDuration.Days.ToString("n");
                        txtTotalPrice.Text = totalCost.ToString("n");
                        txtAvgPrice.Text = avgPricePerNight.ToString("n");
                    }
                }    
            }
  

Комментарии:

1. Я удалил ваш [visual-studio-201] тег, потому что этот вопрос не относится к Visual Studio.

2. Можете ли вы посоветовать, какую проблему вы здесь видите?

Ответ №1:

 for (DateTime date = dtArrivalDate; date <= dtDepartureDate; date = date.AddDays(1))
  

Не имеет прямого отношения к вашей проблеме, но это должно быть date < dtDepartureData .

В любом случае, проблема в том, что вы проверяете каждый день, но внутри цикла вы пересчитываете и отображаете цены. Лучший код был бы примерно таким (сохраняя вашу основную идею повторения каждого дня):

 int costPerNight = 120;
int weekendCost = 0;
for (DateTime date = dtArrivalDate; date < dtDepartureDate; date = date.AddDays(1))
{
    DayOfWeek dw = date.DayOfWeek;
    if (dw == DayOfWeek.Friday || dw == DayOfWeek.Saturday)
    {
        weekendCost = weekendCost   30;
    }
}
int totalCost = tsDuration.Days * costPerNight   weekendCost;
int avgPricePerNight = (tsDuration.Days * costPerNight   weekendCost) / tsDuration.Days;
txtNights.Text = tsDuration.Days.ToString("n");
txtTotalPrice.Text = totalCost.ToString("n");
txtAvgPrice.Text = avgPricePerNight.ToString("n");
  

Мы считаем каждый выходной день, затем после завершения цикла рассчитываем общие цены.

Кстати, эти 30 и 120 значения должны быть заменены именованными константами для лучшей читаемости.