Beispiel #1
0
 //updaUserState:
 //
 private void UpdateUserState(HomeworkState state)
 {
     RemoveUserState(state.UserId, state.HomeworkId);
     //add new state
     _homeworkStateDb.DbSet.Add(state);
     _homeworkStateDb.SaveChanges();
 }
Beispiel #2
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;
        }
Beispiel #3
0
        public ActionResult HomeWorkMaterial(int homeworkId, string a)
        {
            ViewBag.homeworkId = homeworkId;
            int           userId = _userDb.GetUserIdByUsername(User.Identity.Name);
            HomeworkState state  = GetUserState(userId, homeworkId);

            state.QuestionNumber = 0;
            UpdateUserState(state);
            return(RedirectToAction("HomeWorkLastStage", new{ state.HomeworkId }));
        }
Beispiel #4
0
        //GET: /HomeWorks/HomeWorkMaterial
        //
        public ActionResult HomeWorkMaterial(int homeworkId)
        {
            ViewBag.homeworkId = homeworkId;
            int           userId   = _userDb.GetUserIdByUsername(User.Identity.Name);
            HomeworkState state    = GetUserState(userId, homeworkId);
            Material      material = _algorithm.GetMatrial(state.SubjectId);

            ViewBag.material = material;
            return(View());
        }
Beispiel #5
0
        public ActionResult HomeworkFirstStage(int homeworkId, int questionId, string userAnswer)
        {
            ViewBag.homeworkId = homeworkId;
            int           userId = _userDb.GetUserIdByUsername(User.Identity.Name);
            HomeworkState state  = GetUserState(userId, homeworkId);

            _algorithm.UpdateMark(ref state, questionId, userAnswer);
            UpdateUserState(state);
            return(RedirectToAction("HomeworkFirstStage", new{ homeworkId }));
        }
Beispiel #6
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 #7
0
        //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 #8
0
        //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());
        }
Beispiel #9
0
        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 }));
        }
Beispiel #10
0
 //CreateUserState
 //
 private void CreateUserState(HomeworkState state)
 {
     _homeworkStateDb.DbSet.Add(state);
     _homeworkStateDb.SaveChanges();
 }
Beispiel #11
0
 public bool IsGoDown(ref HomeworkState state)       // TODO: why ref? you're not changing the variable state.
 {
     return(state.Mark < -3);
 }