Помогите разобраться в программе.
Совсем недавно начал знакомство с C#. Дали задание описать класс для изменения времени на заданное пользователем. Битый час бьюсь с задачкой, уже закипают мозги. Вроде все правильно, но существует ошибка. Если пользователь вводит допустим: 4 часа, 120 минут, то программа, 59 запишет в минуты, а все остальное занесет в часы. Так вот, идя дальше и вводя значение секунд = 120 мы получим сообщение об ошибке, что введено слишком много секунд, потому что минут уже 59, и если перевести секунды в минуты, то кол-во минут получится > 60. Подскажите, как сделать так, чтобы он и с секундами проделывал то же самое, что делает с минутами, то есть оставляет подходящую часть себе, а остальное отправляет в минуты и в часы. Я понимаю, что там делается по аналогии, но все же есть расхождения, я пробую менять код, но никак не могу дойти до верного решения. Подскажите пожалуйста, что мне нужно сделать. Вот фрагмент кода, где я описал методы добавления времени:
public bool AddHours(int plusHours)
{
bool flag = true;
if (Hours + plusHours <= 24)
Hours = Hours + plusHours;
else
{
Console.WriteLine("Невозможно изменить на введенное количество часов");
flag = false;
}
return flag;
}
public bool AddMinutes(int plusMinutes)
{
bool flag = true;
if (Minutes + plusMinutes <= 59)
Minutes = Minutes + plusMinutes;
else
{
int plusHours = (plusMinutes - 59) / 60;
Hours = Hours + plusHours;
Minutes = (plusMinutes-1) - plusHours * 60;
flag = false;
}
return flag;
}
public bool AddSeconds(int plusSeconds)
{
bool flag = true;
if (Seconds + plusSeconds <= 59)
Seconds = Seconds + plusSeconds;
else
{
int plusMinutes = (plusSeconds - 59) / 60;
if (Minutes + plusMinutes <= 59)
Minutes = Minutes + plusMinutes;
else
{
do
{
Console.WriteLine("Нельзя изменить на столько секунд, введите новое значение");
plusMinutes = int.Parse(Console.ReadLine());
if (Minutes + plusMinutes <= 59)
{
flag = false;
}
else
{
int plusHours = (plusMinutes) / 60;
Hours = Hours + plusHours;
}
}
while (Minutes + plusMinutes <= 59);
}
Seconds = (plusSeconds - 1) - plusMinutes * 60;
flag = false;
}
return flag;
}
Я изменил немного код. И в объекте указал, чтобы первыми спрашивались секунды. Так лучше? Или для большей понятности нужен весь код?
class Time1
{
private int a;
private int b;
private int c;
public Time1(int hours, int minutes, int seconds)
{
Hours = hours;
Minutes = minutes;
Seconds = seconds;
}
public bool AddHours(int plusHours)
{
bool flag = true;
if (Hours + plusHours < 24)
Hours = Hours + plusHours;
else
{
Console.WriteLine("Невозможно изменить на введенное количество часов");
flag = false;
}
return flag;
}
public bool AddMinutes(int plusMinutes)
{
bool flag = true;
if (Minutes + plusMinutes <= 59)
Minutes = Minutes + plusMinutes;
else
{
int plusHours = (plusMinutes) / 60;
Hours = Hours + plusHours;
Minutes = (Minutes + plusMinutes) - plusHours * 60;
flag = false;
}
return flag;
}
public bool AddSeconds(int plusSeconds)
{
bool flag = true;
if (Seconds + plusSeconds <= 59)
Seconds = Seconds + plusSeconds;
else
{
int plusMinutes = (plusSeconds) / 60;
if (Minutes + plusMinutes <= 59)
Minutes = Minutes + plusMinutes;
else
{
int plusHours = (plusMinutes) / 60;
Hours = Hours + plusHours;
}
Seconds = (plusSeconds) - plusMinutes * 60;
flag = false;
}
return flag;
}
public int Hours
{
get
{
return c;
}
set
{
if (c < 0 && c < 24)
c = value;
}
}
public int Minutes
{
get
{
return b;
}
set
{
if (b < 0 && b <= 1439)
b = value;
else
Console.WriteLine("Вы ввели недопустимое значение");
}
}
public int Seconds
{
get
{
return a;
}
set
{
if (a < 0 && a <= 86399 )
Console.WriteLine("Вы ввели недопустимое значение");
else
a = value;
}
}