// Private method to perform MCQ marks calculation private void calculateMCQMarks(Assessment assessment, List <Question> questions) { using (OnlineAssessmentDBEntities db = new OnlineAssessmentDBEntities()) { List <Student_Answer> studentAnswerList = db.Student_Answer.Where(sa => sa.Question.assessmentId == assessment.Id).ToList(); int correctCounter = 0; double score = 0.0; for (int i = 0; i < studentAnswerList.Count; i++) { if (db.Answer.Find(Guid.Parse(studentAnswerList[i].studentAnswer)).isCorrectAnswer) { correctCounter++; } } score = Math.Round((Convert.ToDouble(correctCounter) / assessment.Question.Count) * 100.00); Student_Assessment studentAssessment = new Student_Assessment(); studentAssessment.Id = Guid.NewGuid(); studentAssessment.assessmentId = assessment.Id; studentAssessment.studentId = Guid.Parse(Membership.GetUser().ProviderUserKey.ToString()); studentAssessment.score = Convert.ToInt32(score); studentAssessment.dateFinished = DateTime.Now; db.Student_Assessment.Add(studentAssessment); db.SaveChanges(); } }
protected void submitBtn_Click(object sender, EventArgs e) { // Variables declaration double totalMark = 0.0; Guid assessID = Guid.Empty; string studID = ""; try { assessID = Guid.Parse(Page.RouteData.Values["id"].ToString()); studID = Page.RouteData.Values["studId"].ToString(); } catch (Exception) { Response.Redirect("/lecturer/list"); } using (OnlineAssessmentDBEntities db = new OnlineAssessmentDBEntities()) { Student_Assessment studAssess = db.Student_Assessment.Where(sa => sa.aspnet_Users.LoweredUserName.Equals(studID.ToLower()) && sa.assessmentId == assessID).FirstOrDefault(); if (studAssess is null) { Response.Redirect("/lecturer/list"); } List <Question> questions = studAssess.Assessment.Question.ToList(); // Iterate and display questions for (int i = 0; i < questions.Count; i++) { TextBox markTxtBox = questionPlaceHolder.FindControl($"writtenAns_qm{i + 1}") as TextBox; totalMark += Convert.ToDouble(markTxtBox.Text); } // Calculate final mark totalMark /= Convert.ToDouble(questions.Count); studAssess.score = Convert.ToInt16(totalMark); db.SaveChanges(); // Display label totalMarkLbl.Text = $"{Convert.ToInt16(totalMark).ToString()} ({studAssess.getGrade()})"; alertPlaceholder.Visible = true; // Send an email of the score to student sendEmailToStudent(studAssess); } }
// Method to send email to student private void sendEmailToStudent(Student_Assessment studAssess) { // Create an SMTP client server object to connect to hotmail server SmtpClient smtpServer = new SmtpClient("smtp.live.com"); smtpServer.Port = 587; smtpServer.UseDefaultCredentials = false; smtpServer.Credentials = new System.Net.NetworkCredential("*****@*****.**", "%TGB6yhn^YHN5tgb"); smtpServer.EnableSsl = true; // Create new MailMessage object to send an email MailMessage mailMessage = new MailMessage(); mailMessage.IsBodyHtml = true; mailMessage.Subject = $"Score for assessment {studAssess.Assessment.assessName}"; mailMessage.From = new MailAddress("*****@*****.**"); mailMessage.To.Add(studAssess.aspnet_Users.aspnet_Membership.Email); mailMessage.Body = $"Your assessment for \"{studAssess.Assessment.Subject1.subjectName} - {studAssess.Assessment.assessName}\" has just been graded!<br/>Your score is {studAssess.score} ({studAssess.getGrade()})."; // Send the email smtpServer.Send(mailMessage); }
protected void Page_Load(object sender, EventArgs e) { db = new OnlineAssessmentDBEntities(); Guid assessID = Guid.Empty; try { assessID = Guid.Parse(Page.RouteData.Values["id"].ToString()); } catch (Exception) { Response.Redirect("/lecturer/list"); } Student_Assessment student_Assessments = db.Student_Assessment.Where(sa => sa.assessmentId == assessID).FirstOrDefault(); if (student_Assessments == null) { Response.Redirect("/lecturer/list"); } assessName.Text = student_Assessments.Assessment.assessName; }
protected void submitAsmntBtn_Click(object sender, EventArgs e) { String assessID = ""; try { assessID = Page.RouteData.Values["id"].ToString(); } catch (Exception) { Response.Redirect("/student/list"); } using (OnlineAssessmentDBEntities db = new OnlineAssessmentDBEntities()) { Assessment assessment = db.Assessment.Find(Guid.Parse(assessID)); if (assessment.type == 0) { // Get the list of questions List <Question> questions = assessment.Question.ToList(); // Loop through the list of questions for (int i = 0; i < questions.Count; i++) { Student_Answer student_Answer = new Student_Answer(); // Declare an empty Guid and question ID Guid studMCQAnswerID = Guid.Empty; Guid questionID = questions[i].Id; // Loop through the 4 MCQ choice to find the answer choice the student has chosen for (int j = 0; j < 4; j++) { CheckBox ansChkBox = questionPlaceHolder.FindControl($"mcqAns_{i + 1}_{j + 1}") as CheckBox; // If student picked this MCQ choice as the answer if (ansChkBox.Checked) { // Get the MCQ answer text String studSelectedAns = (questionPlaceHolder.FindControl($"ans_{i + 1}_{j + 1}") as Label).Text.Substring(3); // Retrieve the answer and get the ID Answer answer = db.Answer.Where(a => a.answer1.Equals(studSelectedAns) && a.questionId == questionID).FirstOrDefault(); if (answer != null) { studMCQAnswerID = answer.Id; } break; } } // Set student answer attributes and save it into database student_Answer.questionId = questionID; student_Answer.studentId = Guid.Parse(Membership.GetUser().ProviderUserKey.ToString()); student_Answer.studentAnswer = studMCQAnswerID.ToString(); db.Student_Answer.Add(student_Answer); db.SaveChanges(); } // Method to perform MCQ marks calculation calculateMCQMarks(assessment, questions); Response.Redirect("/student/list", false); } else if (assessment.type == 1) { // Get the list of questions List <Question> questions = assessment.Question.ToList(); // Create new student assessment record Student_Assessment student_Assessment = new Student_Assessment(); student_Assessment.Id = Guid.NewGuid(); student_Assessment.studentId = Guid.Parse(Membership.GetUser().ProviderUserKey.ToString()); student_Assessment.assessmentId = assessment.Id; student_Assessment.dateFinished = DateTime.Now; student_Assessment.score = -1; // Loop through the list of questions for (int i = 0; i < questions.Count; i++) { // Get the written answer and save into database Student_Answer student_Answer = new Student_Answer(); TextBox writtenAnswer = questionPlaceHolder.FindControl($"writtenAns_q{i + 1}") as TextBox; student_Answer.questionId = questions[i].Id; student_Answer.studentId = Guid.Parse(Membership.GetUser().ProviderUserKey.ToString()); student_Answer.studentAnswer = writtenAnswer.Text; db.Student_Answer.Add(student_Answer); db.SaveChanges(); } db.Student_Assessment.Add(student_Assessment); db.SaveChanges(); } Session["assessCompleted"] = "1"; Session["assessName"] = assessment.assessName; Response.Redirect("/student/list"); } }
protected void Page_Load(object sender, EventArgs e) { Guid assessID = Guid.Empty; string studID = ""; try { assessID = Guid.Parse(Page.RouteData.Values["id"].ToString()); studID = Page.RouteData.Values["studId"].ToString(); } catch (Exception) { Response.Redirect("/lecturer/list"); } using (OnlineAssessmentDBEntities db = new OnlineAssessmentDBEntities()) { Student_Assessment studAssess = db.Student_Assessment.Where(sa => sa.aspnet_Users.LoweredUserName.Equals(studID.ToLower()) && sa.assessmentId == assessID).FirstOrDefault(); if (studAssess is null) { Response.Redirect("/lecturer/list"); } Page.Title = $"{ studAssess.aspnet_Users.Student_Profile.firstName } { studAssess.aspnet_Users.Student_Profile.lastName } { studAssess.Assessment.assessName }"; // Set header name subjectLbl.Text = studAssess.Assessment.Subject1.subjectName; assessNameLbl.Text = studAssess.Assessment.assessName; List <Question> questions = studAssess.Assessment.Question.ToList(); // Iterate and display questions for (int i = 0; i < questions.Count; i++) { Label quesNoLbl = new Label(); quesNoLbl.Text = $"Question No.{i + 1}"; questionPlaceHolder.Controls.Add(quesNoLbl); questionPlaceHolder.Controls.Add(new LiteralControl("<br>")); if (questions[i].imgPath != null) { questionPlaceHolder.Controls.Add(new LiteralControl($"<img src=\"/Image_Storage/{questions[i].imgPath}\" class=\"img-fluid\" />")); } questionPlaceHolder.Controls.Add(new LiteralControl($"<p>{questions[i].question1}</p>")); questionPlaceHolder.Controls.Add(new LiteralControl("<div class=\"form-group\">")); TextBox answerTxtBox = new TextBox(); answerTxtBox.TextMode = TextBoxMode.MultiLine; answerTxtBox.ID = $"writtenAns_q{i + 1}"; answerTxtBox.CssClass = "form-control"; answerTxtBox.Attributes.Add("cols", "20"); answerTxtBox.Attributes.Add("rows", "2"); answerTxtBox.Text = questions[i].Student_Answer.studentAnswer; questionPlaceHolder.Controls.Add(answerTxtBox); questionPlaceHolder.Controls.Add(new LiteralControl("</div>")); questionPlaceHolder.Controls.Add(new LiteralControl("<div class=\"form-group\">")); Label markLabel = new Label(); markLabel.Text = "Marks"; TextBox markTextBox = new TextBox(); markTextBox.TextMode = TextBoxMode.Number; markTextBox.ID = $"writtenAns_qm{i + 1}"; markTextBox.CssClass = "form-control"; markTextBox.Attributes.Add("min", "0"); markTextBox.Attributes.Add("max", "100"); questionPlaceHolder.Controls.Add(markLabel); questionPlaceHolder.Controls.Add(markTextBox); questionPlaceHolder.Controls.Add(new LiteralControl("</div>")); } } }