示例#1
0
 public INavigator RunTest(TestSet.TestsRow test)
 {
     return
         (test.IsPractice
          ? (INavigator) new PracticeNavigator(test, this)
          : (INavigator) new TestNavigator(test, this));
 }
示例#2
0
 public WebTestController(TestSet.TestsRow testRow, Manager manager)
 {
     isPractice   = testRow.IsPractice;
     this.manager = manager;
     this.testRow = testRow;
     navigator    = manager.RunTest(testRow);
 }
示例#3
0
        public TestController(TestSet.TestsRow testRow, INavigator navigator, MainForm mainForm, Manager manager)
        {
            mainForm.RegisterTestController(this);

            mainForm.Hide();

            this.mainForm  = mainForm;
            isPractice     = testRow.IsPractice;
            this.testRow   = testRow;
            this.navigator = navigator;
            this.manager   = manager;
        }
示例#4
0
        public NavigatorSkeleton(TestSet.TestsRow test, Manager manager)
        {
            this.manager = manager;
            this.test    = test;
            manager.DataProvider.GetQuestionSetsByTestId(test.Id, sets);
            setRemainedTime = new TimeSpan[sets.QuestionSets.Count];

            resultRow = result.Results.AddResultsRow(manager.UserId, test.Id, DateTime.Now, DateTime.MaxValue, 0, "");

            int i = 0;

            foreach (QuestionSetSet.QuestionSetsRow row in sets.QuestionSets)
            {
                setRemainedTime[i] = row.IsTimeLimitNull() ? TimeSpan.MaxValue : new TimeSpan(0, row.TimeLimit, 0);
                ++i;
                result.ResultsDetailsOfSets.AddResultsDetailsOfSetsRow(resultRow, row.Id, 0, (byte)i);
            }
        }
示例#5
0
        public TestNavigator(TestSet.TestsRow test, Manager manager) : base(test, manager)
        {
            questionsAnswers = new QuestionAnswerSet[sets.QuestionSets.Count, 3];

            int i = 0, timeMin = 0;

            foreach (QuestionSetSet.QuestionSetsRow set in sets.QuestionSets)
            {
                for (byte zoneIndex = 0; zoneIndex <= 2; ++zoneIndex)
                {
                    QuestionAnswerSet qa = new QuestionAnswerSet();
                    manager.DataProvider.GetQuestionsAnswersByQuestionSetIdAndZone(set.Id, (byte)(zoneIndex + 1), qa);
                    questionsAnswers[i, zoneIndex] = qa;
                }
                ++i;
                totalQuestions += set.NumberOfQuestionsInZone1 + set.NumberOfQuestionsInZone2 +
                                  set.NumberOfQuestionsInZone3;
                questionsInZones[0] = set.NumberOfQuestionsInZone1;
                questionsInZones[1] = set.NumberOfQuestionsInZone2;
                questionsInZones[2] = set.NumberOfQuestionsInZone3;
                if (timeMin >= 0)
                {
                    if (set.IsTimeLimitNull())
                    {
                        timeMin = -1;
                    }
                    else
                    {
                        timeMin += set.TimeLimit;
                    }
                }
            }

            base.NextSet += new SimpleMethod(TestNavigator_NextSet);

            if (timeMin >= 0)
            {
                totalTime = new TimeSpan(0, timeMin, 0);
            }
            else
            {
                totalTime = TimeSpan.MaxValue;
            }
        }
示例#6
0
        private void DoTestById(int id)
        {
            //try
            {
                manager_.GetTests(testSet);
                TestSet.TestsRow tr = testSet.Tests.FindById(id);

                Session.Add("TestSet", testSet);
                if (tr.IsPractice)
                {
                    PracticeFormController pc = new PracticeFormController(tr, manager_);
                    Session.Add("IPracticeFormController", pc);
                    Session.Add("WebTestController", pc as WebTestController);
                }
                else
                {
                    WebTestController webTestController = new WebTestController(tr, manager_);
                    Session.Add("WebTestController", webTestController);
                }

                Response.Redirect("descriptionwebform.aspx");
            }
            //catch (Exception) { }
        }
示例#7
0
        public PracticeNavigator(TestSet.TestsRow test, Manager manager) : base(test, manager)
        {
            questionsAnswers      = new QuestionAnswerSet[sets.QuestionSets.Count];
            activeQuestionIndexes = new int[sets.QuestionSets.Count];

            int i       = 0;
            int timeMin = 0;

            totalQuestions = 0;
            Random r = new Random();

            foreach (QuestionSetSet.QuestionSetsRow set in sets.QuestionSets)
            {
                totalQuestions += set.NumberOfQuestionsToPick;
                if (timeMin >= 0)
                {
                    if (set.IsTimeLimitNull())
                    {
                        timeMin = -1;
                    }
                    else
                    {
                        timeMin += set.TimeLimit;
                    }
                }

                activeQuestionIndexes[i] = -1;
                questionsAnswers[i]      = new QuestionAnswerSet();
                manager.DataProvider.GetQuestionsAnswersByQuestionSetId(set.Id, questionsAnswers[i]);

                _explanationsDataTable = manager.DataProvider.GetExplanations(test.Id);

                if (questionsAnswers[i].Questions.Count < set.NumberOfQuestionsToPick)
                {
                    throw new Exception(
                              "Test is not valid: NumberOfQuestionsToPick is greater then total number of questions assigned to the test");
                }

                //Take random questions from the set so we have only NumberOfQuestionsToPick questions.
                int count = questionsAnswers[i].Questions.Count;
                if (set.NumberOfQuestionsToPick - questionsAnswers[i].Questions.Count < set.NumberOfQuestionsToPick / 2)
                {
                    while (count != set.NumberOfQuestionsToPick)
                    {
                        int j;
                        do
                        {
                            j = r.Next(questionsAnswers[i].Questions.Count);
                        } while (questionsAnswers[i].Questions[j].RowState == DataRowState.Deleted);
                        questionsAnswers[i].Questions[j].Delete();
                        --count;
                    }
                }
                else
                {
                    foreach (QuestionAnswerSet.QuestionsRow row in questionsAnswers[i].Questions)
                    {
                        row.Delete();
                    }

                    count = 0;
                    while (count != set.NumberOfQuestionsToPick)
                    {
                        int j;
                        do
                        {
                            j = r.Next(questionsAnswers[i].Questions.Count);
                        } while (questionsAnswers[i].Questions[j].RowState != DataRowState.Deleted);
                        questionsAnswers[i].Questions[j].RejectChanges();
                        ++count;
                    }
                }

                questionsAnswers[i].Questions.AcceptChanges();

                ++i;
            }

            if (timeMin >= 0)
            {
                totalTime = new TimeSpan(0, timeMin, 0);
            }
            else
            {
                totalTime = TimeSpan.MaxValue;
            }

            SetActiveSet(sets.QuestionSets[0].Id);
            SetActiveQuestion(questionsAnswers[0].Questions[0].Id);
        }
示例#8
0
 public PracticeFormController(TestSet.TestsRow testRow, Manager manager)
     : base(testRow, manager)
 {
 }