Beispiel #1
0
 public Question GetNextQuestion(HomeworkState state,int userId)
 {
     List<int> solvedQuestionIdList = GetSolvedQuestionIdList(state.SubjectId,userId);
     List<Question> questionList = _questionDb.GetQuestionListBySubjectId(state.SubjectId);
     List<Question> unSolvedQuestionList  = questionList.Where(question => !solvedQuestionIdList.Contains(question.id)).ToList() ;
     if(!unSolvedQuestionList.Any())
     {
         throw new UnSolvedQuestionNotFoundException();
     }
     return unSolvedQuestionList.First();
 }
Beispiel #2
0
 // TODO: copy contructor in c#? huh?
 public HomeworkState(HomeworkState state)
 {
     IndexOfBaseSubject = state.IndexOfBaseSubject;
     BaseSubjectId      = state.BaseSubjectId;
     SubjectId          = state.SubjectId;
     Direction          = state.Direction;
     QuestionNumber     = state.QuestionNumber;
     HomeworkId         = state.HomeworkId;
     Mark   = state.Mark;
     UserId = state.UserId;
 }
Beispiel #3
0
 // TODO: copy contructor in c#? huh?
 public HomeworkState(HomeworkState state)
 {
     IndexOfBaseSubject = state.IndexOfBaseSubject;
     BaseSubjectId = state.BaseSubjectId;
     SubjectId = state.SubjectId;
     Direction = state.Direction;
     QuestionNumber = state.QuestionNumber;
     HomeworkId = state.HomeworkId;
     Mark = state.Mark;
     UserId = state.UserId;
 }
 //updaUserState:
 //
 private void UpdateUserState(HomeworkState state)
 {
     RemoveUserState(state.UserId, state.HomeworkId);
     //add new state
     _homeworkStateDb.DbSet.Add(state);
     _homeworkStateDb.SaveChanges();
 }
 //CreateUserState
 //
 private void CreateUserState(HomeworkState state)
 {
     _homeworkStateDb.DbSet.Add(state);
     _homeworkStateDb.SaveChanges();
 }
 public ActionResult SolveHomework(int baseSubjectIndex,int subjectId, int homeworkId)
 {
     int userId = _userDb.GetUserIdByUsername(User.Identity.Name);
     if (IsHomeworkSolved(homeworkId, userId)) {
         return RedirectToAction("HomeworkSolved", new {homeworkId });
     }
     //send First parameters to start homeWork
     HomeworkState newState=new HomeworkState(userId,baseSubjectIndex,subjectId,subjectId,0,0,homeworkId,0);
     //if state exist ,update else create
     if (IsUserStateExist(newState.UserId, newState.HomeworkId))
     {
         UpdateUserState(newState);
     }
     else
     {
         CreateUserState(newState);
     }
     return RedirectToAction("HomeworkFirstStage",new {homeworkId});
 }
 //HomeWorkLastStage
 //in LastStage: we give questions with solution
 public ActionResult HomeWorkLastStage(int homeworkId)
 {
     ViewBag.homeworkId = homeworkId;
     int userId = _userDb.GetUserIdByUsername(User.Identity.Name);
     HomeworkState state = GetUserState(userId, homeworkId);
     HomeworkState nextState = new HomeworkState(GetUserState(userId, homeworkId));
     if (_algorithm.MaxNumberOfStageQuestion <= state.QuestionNumber)
     {
         state.Mark = 0;
         UpdateUserState(state);
         return RedirectToAction("HomeWorkFirstStage",new{homeworkId});
     }
     ViewBag.question = _algorithm.GetNextQuestion(state,userId);
     nextState.QuestionNumber++;
     UpdateUserState(nextState);
     return View();
 }
        //GET: HomeworkFirstStage:
        //when we go down in tree subject we will be in FirstStage
        //otherWise we are in LastStage
        public ActionResult HomeworkFirstStage(int homeworkId)
        {
            ViewBag.homeworkId = homeworkId;
            int userId = _userDb.GetUserIdByUsername(User.Identity.Name);
            HomeworkState state = GetUserState(userId, homeworkId);
            HomeworkState nextState = new HomeworkState(GetUserState(userId,homeworkId));
            //update mark,and check if we need to go to children subject
            if (_algorithm.IsGoDown(ref nextState))
            {
                List<int> subjectChildrenIds = _subjectDb.GetChildren(state.SubjectId);
                try {
                    nextState.SubjectId      = GetAvailableSubject(subjectChildrenIds);
                    nextState.Mark           = 0;
                    nextState.QuestionNumber = 0;
                }
                catch(SubjectNotFoundException)
                {
                    return RedirectToAction("HomeworkMaterial", new { state.HomeworkId });
                }
            }
            else
            {
                //check if we Finish the current Level, and go Up.
                if (state.QuestionNumber >= _algorithm.MaxNumberOfStageQuestion)
                {
                    //if we get to the base subject mean we finish Exam
                    if (state.SubjectId == state.BaseSubjectId)
                    {
                        return RedirectToAction("PreSolveHomeWork", new{baseSubjectIndex = state.IndexOfBaseSubject+1,
                            homeWorkId = state.HomeworkId});
                    }
                    else
                    {
                        nextState.SubjectId = _subjectDb.GetSubjectParentId(state.SubjectId);
                        nextState.Mark = -100; //TODO: need to change that we fail
                        UpdateUserState(nextState);
                        return RedirectToAction("HomeworkFirstStage", new { state.HomeworkId });
                    }

                }
            }
            //continue with the next state.
            ViewBag.question = _algorithm.GetNextQuestion(nextState, userId);
            nextState.QuestionNumber++;
            UpdateUserState(nextState);
            return View();
        }
Beispiel #9
0
 public bool IsGoDown(ref HomeworkState state)
 {
     // TODO: why ref? you're not changing the variable state.
     return (state.Mark < -3) ;
 }
Beispiel #10
0
 public void UpdateMark(ref HomeworkState state, int questionId, string userAnswer)
 {
     Question question = _questionDb.GetQuestionById(questionId);
     int questionSign = (question.correctAnswerNum == userAnswer)? 1 : -1;
     // if the answer right add the level number to mark other sub level number from mark
     state.Mark += questionSign*question.level;
 }