#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
значения должны быть заменены именованными константами для лучшей читаемости.