コード例 #1
0
ファイル: quiz.aspx.cs プロジェクト: eugenetan2015/PlusMinus
        protected void Timer1_Tick(object sender, EventArgs e)
        {
            TimeSpan timeLeft = new TimeSpan();

            if (Session["timeLeft"] != null)
            {
                timeLeft = (DateTime)Session["timeLeft"] - DateTime.Now;
                if (timeLeft.Hours <= 0 && timeLeft.Minutes <= 0 && timeLeft.Seconds <= 0)
                {
                    lblTimer.Text          = "Times up!";
                    lblTimerDisplay.Text   = "Times up!";
                    panelQuiz.Visible      = false;
                    panelStartQuiz.Visible = false;
                    panelTimesUp.Visible   = true;

                    //insert attempt
                    int                      quizID          = Convert.ToInt32(Request.QueryString["id"]);
                    User                     currentUser     = (User)Session["currentUser"];
                    QuizResultDAO            qrDAO           = new QuizResultDAO();
                    QuizResultHistoryDAO     qrhDAO          = new QuizResultHistoryDAO();
                    List <QuizResultHistory> userAnswers     = (List <QuizResultHistory>)Session["userAnswers"];
                    QuizQuestion             currentQuestion = (QuizQuestion)Session["previousQuestion"];
                    int                      attempt         = qrDAO.getAttemptForQuiz(quizID, currentUser.getUserID());
                    attempt++;

                    //to calculate score
                    int userScore = calculateScore(userAnswers);

                    //to get all other details needed to insert to QuizResult
                    string grade = "fail";
                    if (checkIfUserPass(quizID, userScore))
                    {
                        grade = "pass";
                    }
                    DateTime currentDate = DateTime.Now.Date;

                    //insert quizResultHistory
                    foreach (QuizResultHistory qrh in userAnswers)
                    {
                        qrhDAO.createQuizResultHistory(qrh);
                    }

                    //insert QuizResult
                    int quizResultID = qrDAO.createQuizResult(currentUser.getUserID(), quizID, userScore, grade, currentDate, attempt);
                    Session["timesUpResultID"] = quizResultID;

                    //check if user can reattempt quiz
                    QuizResult currentResult = qrDAO.getQuizResultByID(quizResultID);
                    Quiz       currentQuiz   = currentResult.getQuiz();
                    if (currentQuiz.getMultipleAttempts().Equals("n"))
                    {
                        int numOfAttempts = qrDAO.getNumberOfAttempts(currentUser.getUserID(), currentQuiz.getQuizID());
                        if (numOfAttempts >= currentQuiz.getNumberOfAttempts())
                        {
                            btnRestartQuiz.Visible = false;
                        }
                    }
                }
                else
                {
                    //lblTimer.Text = timeLeft.Seconds.ToString();
                    lblTimer.Text = timeLeft.ToString(@"hh\:mm\:ss");
                }
            }
        }
コード例 #2
0
ファイル: quiz.aspx.cs プロジェクト: eugenetan2015/PlusMinus
        protected void Page_Load(object sender, EventArgs e)
        {
            QuizDAO quizDAO     = new QuizDAO();
            String  id_str      = Request.QueryString["id"];
            int     id_num      = int.Parse(id_str);
            Quiz    currentQuiz = quizDAO.getQuizByID(id_num);
            User    currentUser = (User)Session["currentUser"];

            if (currentUser == null)
            {
                Response.Redirect("Login.aspx");
            }
            else
            {
                //check if user completed all prerequisites of the quiz
                Boolean checkCompleted = checkIfCompletedAllPrerequisite(currentUser.getUserID(), currentQuiz.getQuizID());

                if (!checkCompleted)
                {
                    //redirect user to complete all prerequisite quiz first
                    Response.Redirect("preqIncomplete.aspx");
                }
                else
                {
                    if (!IsPostBack)
                    {
                        int questionCounter = 1;
                        Session["questionCounter"]   = questionCounter;
                        lblBreadcrumbCourseName.Text = currentQuiz.getMainCourse().getCourseName();
                        lblQuizDesc.Text             = currentQuiz.getDescription();
                        lblQuizTitle.Text            = currentQuiz.getTitle();
                        QuizQuestionDAO     qqDAO        = new QuizQuestionDAO();
                        QuizResultDAO       qrDAO        = new QuizResultDAO();
                        List <QuizQuestion> allQuestions = qqDAO.getAllQuizQuestionByQuizID(currentQuiz.getQuizID());
                        lblQnNum.Text      = "1";
                        lblTotalQn.Text    = allQuestions.Count.ToString();
                        lblTotalNumQn.Text = allQuestions.Count.ToString();
                        lblPassingReq.Text = currentQuiz.getPassingGrade().ToString() + "/" + allQuestions.Count.ToString();
                        TimeSpan timeLeft = TimeSpan.FromSeconds(currentQuiz.getTimeLimit());
                        lblTimer.Text        = timeLeft.ToString(@"hh\:mm\:ss");
                        lblTimerDisplay.Text = timeLeft.ToString(@"hh\:mm\:ss");
                        string multipleAttempt = currentQuiz.getMultipleAttempts();
                        if (multipleAttempt.Equals("n"))
                        {
                            int attempts = currentQuiz.getNumberOfAttempts();
                            lblMaxAttempt.Text = attempts + " times";
                            int numOfAttempts = qrDAO.getNumberOfAttempts(currentUser.getUserID(), currentQuiz.getQuizID());
                            if (numOfAttempts > currentQuiz.getNumberOfAttempts())
                            {
                                btnStartQuiz.Visible     = false;
                                lblmaxAttemptMsg.Visible = true;
                            }
                        }
                        else
                        {
                            lblMaxAttempt.Text = "No limit";
                        }

                        if (currentQuiz.getRandomOrder().Equals("y"))
                        {
                            Session["remainingQuestions"] = randomize(allQuestions);
                        }
                        else
                        {
                            Session["remainingQuestions"] = allQuestions;
                        }
                    }
                    else
                    {
                        lblQnNum.Text = Session["questionCounter"].ToString();
                    }
                }
            }
        }