コード例 #1
0
        public Pair <int, List <IAnswer> > ExtractAnswers(ICodebook codebook, DataTable answers, IEnumerable <ColumnInfo> journalInfoColumns)
        {
            var results = new List <IAnswer>();

            var missingVars = new List <string>();

            foreach (DataRow row in answers.Rows)
            {
                Answer answer    = new Answer();
                var    variables = new List <IVariable>();

                // add journalInfo
                foreach (var info in journalInfoColumns)
                {
                    var col         = info.Column;
                    var columnType  = info.Datatype;
                    var columnWidth = info.ColumnWidth;
                    if (answers.Columns[col] != null)
                    {
                        var value = row[col].ToString();
                        variables.Add(new CodeAnswer(new Code(0, 0, 0, 0, col, col, "", columnType, col, columnWidth), value));
                    }
                }

                // add answers
                foreach (var code in codebook.Codes)  // read each column in row
                {
                    if (answers.Columns[code.Name] != null)
                    {
                        var       value      = row[code.Name].ToString();
                        IVariable codeAnswer = new CodeAnswer(code, value);
                        variables.Add(codeAnswer);
                    }
                    else
                    {
                        var miss = "Missing var: {0} - survey: {1}  row,col,sur,qId: {2},{3},{1},{4}  Q:{5}".F(code.Name, codebook.Id, code.Row, code.Column, code.QuestionId, code.QuestionNumber);
                        if (!missingVars.Contains(miss))
                        {
                            missingVars.Add(miss);
                        }
                    }
                }
                answer.Variables      = variables;
                answer.Id             = codebook.Id;
                answer.AnswerMetadata = AnswerMetadata.GetJournalInfo(row);
                // Key to group by (pid, follow_up)
                answer.SetKey(answer.AnswerMetadata.Pid, answer.AnswerMetadata.FollowUp);
                answer.Projekt = answer.AnswerMetadata.Projekt;
                results.Add(answer);
            }
            foreach (var miss in missingVars)
            {
                Console.Out.WriteLine(miss);
            }

            results = results.OrderBy(r => r.Key).ToList();
            return(new Pair <int, List <IAnswer> >(codebook.Id, results));
        }
コード例 #2
0
        private void GedCodeResult(Question _question, CodeAnswer codeAnswer, ref uint count)
        {
            var question = _question as CodeQuestion;

            //.Include(a => a.Question)
            //.ThenInclude(q => (q as CodeQuestion).Code)
            //.Include(a => a.Code).Include(a => a.Option)
            _context.Entry(question).Reference(x => x.Code).Load();
            _context.Entry(codeAnswer).Reference(x => x.Code).Load();
            var userCode      = codeAnswer.Code?.Value == null ? "" : codeAnswer.Code.Value;
            var creatorCode   = question.Code.Value;
            var creatorArgs   = question.Code.Args;
            var userOutput    = Compile(userCode, creatorArgs);
            var creatorOutput = Compile(creatorCode, creatorArgs);
            var code          = _context.Codes.SingleOrDefault(c => c.Answer == codeAnswer);

            if (code == null)
            {
                code            = (_context.Add(new Code()
                {
                    Answer = codeAnswer, Value = userCode
                })).Entity;
                codeAnswer.Code = code;
                _context.Update(codeAnswer);
            }

            code.Args   = creatorArgs;
            code.Output = userOutput;
            _context.Codes.Update(code);
            if (userCode != null)
            {
                if (userOutput == creatorOutput)
                {
                    codeAnswer.Score = codeAnswer.Question.Score;
                    count++;
                    codeAnswer.Result = AnswerResult.Right;
                }
                else
                {
                    codeAnswer.Result = AnswerResult.Wrong;
                    codeAnswer.Score  = 0;
                }
            }
            else
            {
                codeAnswer.Result = null;
                codeAnswer.Score  = 0;
            }

            _context.Update(codeAnswer);
        }
コード例 #3
0
        private void CheckLetter()
        {
            foreach (var letter in CodeAnswer)
            {
                var letterLow = Char.ToLower(letter);

                if (letterLow == Char.ToLower(PotentialLetter))
                {
                    MessageBox.Show("Ви вже вгадали цю літеру...", "Атата");
                    return;
                }
            }
            var arrayOfObject = _answerCheckManager.CheckLetter(PotentialLetter, ListOfTasks[_questionNumber].Answer, _codeAnswer);
            var coutOfPoint   = Convert.ToInt32(arrayOfObject[1]);

            CodeAnswer = Convert.ToString(arrayOfObject[0]);

            if (CodeAnswer.IndexOf('*') == -1)
            {
                MessageBox.Show("Вітаю, ви вгадали слово", "Вітаю");
                UserScore = 100 + coutOfPoint;
                ListOfTasks[_questionNumber].Asked = true;
                SetQuestion();
            }

            if (coutOfPoint == 0)
            {
                UserScore -= 1;
                MessageBox.Show("Нажаль, ви помилились :(", "Оу((");
            }
            else
            {
                UserScore += coutOfPoint;
                MessageBox.Show("Вітаю, ви вгадали букву", "Вітаю");
            }
            PotentialLetter = ' ';
        }
コード例 #4
0
        public async Task <IActionResult> Start(int testResultId, ErrorViewModel model)
        {
            var user = await _userManager.GetUserAsync(HttpContext.User);

            var testResult = await _context.TestResults
                             .Include(tr => tr.Test)
                             .ThenInclude(t => t.Questions)
                             .SingleAsync(t => t.Id == testResultId);

            if (testResult == null)
            {
                return(NotFound());
            }
            if (!testResult.Test.IsEnabled)
            {
                return(Forbid());
            }
            var questions = testResult.Test.Questions.Where(q => !q.IsDeleted).ToList();

            if (questions.Count() == 0)
            {
                return(NotFound());
            }
            if (_context.Answers.Any(a => a.TestResult == testResult))
            {
                return(RedirectToAction("Answer", "Answer",
                                        new
                {
                    testResultId = testResult.Id,
                    answerId = _context.Answers.Where(a => a.TestResult == testResult)
                               .SingleOrDefault(a => a.Order == 1).Id
                }));
            }
            var    answers = new List <Answer>();
            Answer answer  = null;

            if (testResult.Test.Count != 0 && testResult.Test.Count < questions.Count && testResult.Test.Shuffled)
            {
                var order = new ushort[testResult.Test.Count];
                for (var i = 0; i < order.Length; i++)
                {
                    order[i] = (ushort)(i + 1);
                }
                if (testResult.Test.Shuffled)
                {
                    Shuffle(order);
                }
                var j = 0;
                Shuffle(questions);
                for (var k = 0; k < order.Length; k++)
                {
                    var question = questions[k];
                    switch (question.QuestionType)
                    {
                    case "SingleChoiceQuestion":
                        answer = new SingleChoiceAnswer();
                        break;

                    case "MultiChoiceQuestion":
                        answer = new MultiChoiceAnswer();
                        break;

                    case "TextQuestion":
                        answer = new TextAnswer();
                        break;

                    case "DragAndDropQuestion":
                        answer = new DragAndDropAnswer();
                        break;

                    case "CodeQuestion":
                        answer = new CodeAnswer();
                        break;
                    }

                    if (answer == null)
                    {
                        throw new NullReferenceException();
                    }
                    answer.Result     = null;
                    answer.Question   = question;
                    answer.Score      = 0;
                    answer.TestResult = testResult;
                    answer.Order      = order[j++];
                    await _context.Answers.AddAsync(answer);

                    answers.Add(answer);
                    await _context.SaveChangesAsync();
                }
            }
            else
            {
                var order = new ushort[questions.Count()];
                for (var i = 0; i < order.Length; i++)
                {
                    order[i] = (ushort)(i + 1);
                }
                if (testResult.Test.Shuffled)
                {
                    Shuffle(order);
                }
                var j = 0;
                foreach (var question in questions)
                {
                    switch (question.QuestionType)
                    {
                    case "SingleChoiceQuestion":
                        answer = new SingleChoiceAnswer();
                        break;

                    case "MultiChoiceQuestion":
                        answer = new MultiChoiceAnswer();
                        break;

                    case "TextQuestion":
                        answer = new TextAnswer();
                        break;

                    case "DragAndDropQuestion":
                        answer = new DragAndDropAnswer();
                        break;

                    case "CodeQuestion":
                        answer = new CodeAnswer();
                        break;
                    }

                    if (answer == null)
                    {
                        throw new NullReferenceException();
                    }
                    answer.Question   = question;
                    answer.Score      = 0;
                    answer.TestResult = testResult;
                    answer.Order      = order[j++];
                    await _context.Answers.AddAsync(answer);

                    answers.Add(answer);
                    await _context.SaveChangesAsync();
                }
            }
            testResult.StartedOn = DateTime.UtcNow;
            _context.TestResults.Update(testResult);
            await _context.SaveChangesAsync();

            // TODO: redirect to first answer (question)
            //throw new NotImplementedException();
            return(RedirectToAction("Answer", "Answer",
                                    new { testResultId = testResult.Id, answerId = answers.SingleOrDefault(a => a.Order == 1).Id }));
        }
コード例 #5
0
ファイル: DbInitializer.cs プロジェクト: deefault/TestApp
        private void StartTest(User user, TestResult testResult, Test test)
        {
            var    answers   = new List <Answer>();
            Answer answer    = null;
            var    questions = testResult.Test.Questions.Where(q => !q.IsDeleted).ToList();

            testResult.TotalQuestions = (uint)questions.Count;
            if (test.Count != 0 && test.Count < test.Questions.Count && testResult.Test.Shuffled)
            {
                var order = new ushort[testResult.Test.Count];
                for (var i = 0; i < order.Length; i++)
                {
                    order[i] = (ushort)(i + 1);
                }

                var j = 0;
                for (var k = 0; k < order.Length; k++)
                {
                    var question = questions[k];
                    switch (question.QuestionType)
                    {
                    case "SingleChoiceQuestion":
                        answer = new SingleChoiceAnswer();
                        break;

                    case "MultiChoiceQuestion":
                        answer = new MultiChoiceAnswer();
                        break;

                    case "TextQuestion":
                        answer = new TextAnswer();
                        break;

                    case "DragAndDropQuestion":
                        answer = new DragAndDropAnswer();
                        break;

                    case "CodeQuestion":
                        answer = new CodeAnswer();
                        break;
                    }

                    if (answer == null)
                    {
                        throw new NullReferenceException();
                    }
                    answer.Result     = null;
                    answer.Question   = question;
                    answer.Score      = 0;
                    answer.TestResult = testResult;
                    answer.Order      = order[j++];
                    _context.Answers.Add(answer);
                    answers.Add(answer);
                    _context.SaveChanges();
                }
            }
            else
            {
                var order = new ushort[questions.Count()];
                for (var i = 0; i < order.Length; i++)
                {
                    order[i] = (ushort)(i + 1);
                }

                var j = 0;
                foreach (var question in questions)
                {
                    switch (question.QuestionType)
                    {
                    case "SingleChoiceQuestion":
                        answer = new SingleChoiceAnswer();
                        break;

                    case "MultiChoiceQuestion":
                        answer = new MultiChoiceAnswer();
                        break;

                    case "TextQuestion":
                        answer = new TextAnswer();
                        break;

                    case "DragAndDropQuestion":
                        answer = new DragAndDropAnswer();
                        break;

                    case "CodeQuestion":
                        answer = new CodeAnswer();
                        break;
                    }

                    if (answer == null)
                    {
                        throw new NullReferenceException();
                    }
                    answer.Question   = question;
                    answer.Score      = 0;
                    answer.TestResult = testResult;
                    answer.Order      = order[j++];
                    _context.Answers.Add(answer);
                    answers.Add(answer);
                    _context.SaveChanges();
                }
            }

            testResult.StartedOn = DateTime.UtcNow;
            _context.TestResults.Update(testResult);
            _context.SaveChanges();
        }