/// <summary> /// Ответ на вопрос пользователем /// </summary> /// <param name="reader">Экземпляр QBDBReader с текущим опросом</param> /// <param name="nBlock">Текущий номер блока вопросов</param> /// <returns>Дан ли ответ пользователем</returns> static bool AnswerOnQuest(QBDBReader reader, int nBlock) { List <Question> quests = reader.GetQuestsBlock(nBlock); //Получение списка вопросов в блоке //Вывод вопросов на экран Console.WriteLine(); for (int i = 0; i < quests.Count; i++) { Console.Write('[' + i.ToString() + ']'); Console.WriteLine(quests[i].quest); } String input_line = Console.ReadLine(); //Получение ответа от пользователя int res = ParseInput(input_line, quests.Count); //Парсинг введенных пользователем данных if (TestErr(res)) //Проверка корректности введенных данных на ошибки { Console.WriteLine(); if (currRate < quests[res].rate) //Если рейтинг выбранного ответа больше текущего { currRate = quests[res].rate; //Увеличиваем рейтинга } return(true); } return(false); }
/// <summary> /// Статический метод, для создания экземпляра класса QBDBReader и выбора опроса для прохождения. /// </summary> /// <returns>Экземпляр класса QBDRBReader, с содержимым файла</returns> public static QBDBReader GetAllBlocks() { QBDBReader qbl = null; try { String[] filesBlock = Directory.GetFiles(dirQuest, fileExt); //Получение списка файлов *.qbdb if (filesBlock.Length == 0) //Если файлов не найдено { return(null); } String[] blockNames = GetBlockNames(filesBlock); //Получение имен опросов int selFile; if (1 == filesBlock.Length) //Если опрос всего один, отметить его как выбранный { selFile = 0; } else //Иначе предоставить выбор пользователю { selFile = GetSelectCurrFile(blockNames); //Выбор пользователем проходимого опроса. } if (selFile == (int)Errors.ERREXIT) { return(null); } currFile = filesBlock[selFile]; qbl = ReadFileBlock(currFile); //Считывание файла return(qbl); } catch (IOException) { return(null); } }
static void Main(string[] args) { //Считывание данных выбранного пользователем опроса QBDBReader qbdb = QBDBReader.GetAllBlocks(); Console.WriteLine(); if (qbdb == null) { Console.WriteLine("Папка QuestionsDB с опросами не найдена, либо она пустая, либо выбран некорректный опрос."); Console.ReadKey(); return; } while (qbdb.countBlocks > 0) //Пока не даны ответы на все блоки вопросов { if (currRate == Age_Rate.R_18) { break; //Если текущий рейтинг 18, выход из цикла } List <String> names = qbdb.GetNameBlocks(); //Получение имен оставшихся блоков вопросов. Console.WriteLine(); Console.WriteLine("---------------------------------------------"); for (int i = 0; i < names.Count; i++) { Console.Write('[' + i.ToString() + ']'); Console.WriteLine(names[i]); } Console.WriteLine("---------------------------------------------"); String input_line = Console.ReadLine(); //Получение номера блока от пользователя int res = ParseInput(input_line, qbdb.countBlocks); //Парсинг введенных пользователем данных if (TestErr(res)) //Проверка корректности введенных данных на ошибки { if (AnswerOnQuest(qbdb, res)) //Ответ на вопрос пользователем { qbdb.DeleteBlock(res); //Если ответ дан, удалить текущий блок из списка } } } Console.Clear(); Console.WriteLine("Рейтинг - {0}+", Convert.ToString((int)currRate)); Console.ReadKey(); }