コード例 #1
0
        public void SetFirstReviewQuestion()
        {
            switch (ReviewState)
            {
            case ReviewState.none:
                throw new ApplicationException("Method can used in ReviewMode only.");
                break;

            case ReviewState.ReviewIncorrect:
                if (QuestionInfoForReview.flaged.Count > 0)
                {
                    QuestionIdentity qide = QuestionInfoForReview.flaged[0];
                    SetActiveSet(qide.SetId);
                    SetActiveQuestion(qide.QuestionId);
                }
                break;

            case ReviewState.ReviewFlagged:
                if (QuestionInfoForReview.incorrect.Count > 0)
                {
                    QuestionIdentity qide = QuestionInfoForReview.incorrect[0];
                    SetActiveSet(qide.SetId);
                    SetActiveQuestion(qide.QuestionId);
                }
                break;

            case ReviewState.UserReview:
                break;

            default:
                break;
            }
        }
コード例 #2
0
        public void SetUserAnswer(int answerId, bool reviewFlag)
        {
            _setUserAnswer(answerId);

            //New functionality - store review flag
            lock (QuestionInfoForReview.flaged)
            {
                QuestionIdentity questionIde =
                    new QuestionIdentity(sets.QuestionSets[activeSetIndex].Id, ActiveQuestion.Id);
                if (QuestionInfoForReview.flaged.Contains(questionIde))
                {
                    if (!reviewFlag)
                    {
                        QuestionInfoForReview.flaged.Remove(questionIde);
                    }
                }
                else
                {
                    if (reviewFlag)
                    {
                        QuestionInfoForReview.flaged.Add(questionIde);
                    }
                }
            }
        }
コード例 #3
0
        private QuestionIdentity GetNextReviewQuestion()
        {
            List <QuestionIdentity> questionIdentityCollection = GetQuestionIdentityCollection();

            QuestionIdentity cirrentQuestionIde = new QuestionIdentity(sets.QuestionSets[activeSetIndex].Id, ActiveQuestion.Id);

            for (int i = 0; i < questionIdentityCollection.Count; i++)
            {
                if (questionIdentityCollection[i] == cirrentQuestionIde)
                {
                    if (i + 1 < questionIdentityCollection.Count)
                    {
                        return(questionIdentityCollection[i + 1]);
                    }
                }
            }
            if (questionIdentityCollection.Count > 0)
            {
                return(questionIdentityCollection[0]);
            }
            throw new ApplicationException("Unknoun error.");
        }
コード例 #4
0
        private void _setUserAnswer(int answerId)
        {
            CheckTime();
            QuestionAnswerSet.QuestionsRow          q   = ActiveQuestion;
            ResultResultDetailSet.ResultsDetailsRow row =
                result.ResultsDetails.FindByResultIdQuestionId(result.Results[0].Id, q.Id);

            bool isCorrect = false;

            foreach (QuestionAnswerSet.AnswersRow r in q.GetAnswersRows())
            {
                if (r.Id == answerId)
                {
                    isCorrect = r.IsCorrect;
                    break;
                }
            }

            double scoreForCorrect = CalculateScoreOfActiveQuestion(true);
            double score           = CalculateScoreOfActiveQuestion(isCorrect);

            ResultResultDetailSet.ResultsDetailsOfSetsRow setRow =
                result.ResultsDetailsOfSets.FindByResultIdQuestionSetId(resultRow.Id,
                                                                        sets.QuestionSets[activeSetIndex].Id);

            if (row != null)
            {
                row.AnswerId = answerId;
                QuestionIdentity qi = new QuestionIdentity(setRow.QuestionSetId, q.Id);
                if (isCorrect)
                {
                    if (((Question.Status)questionStatus[q.Id]).status != BuisinessObjects.StatusType.ANSWER_IS_CORRECT)
                    {
                        setRow.Score += score;
                    }

                    QuestionInfoForReview.incorrect.Remove(qi);
                }
                else
                {
                    if (((Question.Status)questionStatus[q.Id]).status == BuisinessObjects.StatusType.ANSWER_IS_CORRECT)
                    {
                        setRow.Score -= scoreForCorrect;
                    }

                    if (!QuestionInfoForReview.incorrect.Contains(qi))
                    {
                        QuestionInfoForReview.incorrect.Add(qi);
                    }
                }
            }
            else
            {
                result.ResultsDetails.AddResultsDetailsRow(
                    resultRow,
                    q.Id,
                    answerId,
                    (byte)(ActiveQuestionIndex + 1),
                    questionStartTime,
                    DateTime.Now);

                questionStartTime = DateTime.Now;
                setRow.Score     += score;
            }

            ((Question.Status)questionStatus[q.Id]).status = isCorrect
                                                                  ? BuisinessObjects.StatusType.ANSWER_IS_CORRECT
                                                                  : BuisinessObjects.StatusType.ANSWER_IS_INCORRECT;
            ((Question.Status)questionStatus[q.Id]).answeredId = answerId;
            ((Question.Status)questionStatus[q.Id]).score      = score;
        }