/// <summary> /// Расчет времени чтения книги /// </summary> /// <param name="language">Язык книги</param> /// <param name="pages">Количество страниц книги</param> /// <param name="dataTime">Дата начала чтения книги</param> /// <returns></returns> public double TimeReadingBook(BookSDB.languageEnum language, int pages, DateTime dataTime) { double timeReadingBook; //время чтения книги int level = 0; //уровень владения языком foreach (LevelLanguageSDB lela in LevelLanguages) { if (lela.Language == language) { level = lela.Level; break; } } if (level == 0) { throw new Exception("Клиент не владеет языком" + language); } TimeSpan interval = dataTime - DataRegistration; //интервал времени от данного до времени регистрации int ReadingIntervalActiveSecond = ReadingIntervalActive * ProgramServer.DaysSecond; //время активного чтения в цикле int ReadingIntervalPassiveSecond = ReadingIntervalPassive * ProgramServer.DaysSecond; //время пассивного чтения чтения в цикле int cycleReading = ReadingIntervalActiveSecond + ReadingIntervalPassiveSecond; //время цикла чтения double levelPagesPerCycle = ReadingIntervalActive * PagesPerDay * (level / 10.0); //количество читаемых страниц в цикл double balanseInterval = (double)interval.TotalSeconds % (double)cycleReading; //текущее время нового цикла double remainingActiveCycle = ReadingIntervalActiveSecond - balanseInterval; //оставшееся время цикла активного чтения double timeReadingBookNCCycle = (double)(pages % levelPagesPerCycle) / (double)levelPagesPerCycle //время чтения неполного цикла * (double)ReadingIntervalActiveSecond; int timeReadingBookFullCycle = (int)(pages / levelPagesPerCycle) * cycleReading; //время чтения полных циклов if (balanseInterval >= ReadingIntervalActiveSecond) { timeReadingBook = timeReadingBookFullCycle + timeReadingBookNCCycle + (cycleReading - balanseInterval); } else { if (remainingActiveCycle > timeReadingBookNCCycle) { timeReadingBook = timeReadingBookFullCycle + timeReadingBookNCCycle; } else { timeReadingBook = timeReadingBookFullCycle + timeReadingBookNCCycle + ReadingIntervalPassiveSecond; } } return(timeReadingBook); }
/// <summary> /// Конструктор объекта язык-уровень /// </summary> /// <param name="language">Язык</param> /// <param name="level">Уровень владения</param> public LevelLanguageSDB(BookSDB.languageEnum language, int level) { Language = language; Level = level; }