Code Implementation
Authenticate.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Authenticate.aspx.vb" Inherits="Authenticate" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Log In</title>
<STYLE>
*{
box-sizing: border-box;
}
body, HTML,HEAD{
padding: 0;
margin: 0;
height:95%;
font-family: "Times New Roman";
}
body{
display:flex;
justify-content:center;
align-items:center;
background:#f4f6fb;
}
.main-container{
border: 2px solid #e5e7eb;
background: white;
width: 100%;
padding: 4.0rem;
display:flex;
justify-content:center;
align-items:center;
flex-direction:column;
border-radius: 12px;
transition: transform 0.3s ease;
box-shadow: 5px 10px 10px rgba(0,0,0,0.2);
}
.main-container h1{
border-bottom: 2px solid #2512cb;
padding-bottom: 0.5rem;
margin-top: 0;
color: #4f46e5;
margin-bottom: 2.5rem;
}
.main-container:hover{
transform: translateY(-5px);
}
.input-box{
margin-bottom: 1.0rem;
}
.button{
width: 30%;
transition: transform 0.3s ease;
border-radius: 10px;
cursor: pointer;
transition: transform 0.2s ease, background-color 0.2s;
}
.button:hover{
transform: translateY(-2px);
background: #3730a3;
box-shadow: 0 4px 6px rgba(0,0,0,0.2);
}
</STYLE>
</head>
<body>
<form id="form1" runat="server">
<div class="main-container">
<h1>Online Quiz Portal</h1>
<div class="input-box">
<label for="emailTxt" id="emaillbl"><b>Email</b></label><br />
<asp:TextBox ID="emailTxt" runat="server" Width="172px"></asp:TextBox><br />
</div>
<div class="input-box">
<label for="passwordTxt" id="passlbl"><b>Password</b></label><br />
<asp:TextBox ID="passwordTxt" runat="server" Textmode="Password" Width="172px"></asp:TextBox><br />
</div>
<asp:Button ID="loginbtn" runat="server" Text="Login" CssClass="button" />
</div>
<p>
<asp:Label ID="Status" runat="server" Text=""></asp:Label>
</p>
</form>
</body>
</html>
Authenticate.aspx.vb
Imports System.Data
Imports System.Data.SqlClient
Partial Class Authenticate
Inherits System.Web.UI.Page
Private Sub loginbtn_Click(sender As Object, e As EventArgs) Handles loginbtn.Click
Dim email As String = emailTxt.Text
Dim pass As String = passwordTxt.Text
If String.IsNullOrEmpty(email) Or String.IsNullOrEmpty(pass) Then
Response.Redirect("./Authenticate.aspx")
Exit Sub
End If
Dim conn As New SqlConnection
Dim constr As String
constr = "Data Source=WIN-3G30IJDBABE\SQLEXPRESS;Integrated Security=True;Database = QuizApp"
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "SELECT FULL_NAME,ROLE,ID FROM USERS_T WHERE "
cmd.CommandText &= "EMAIL = '" & email & "' AND PASSWORD = '"
cmd.CommandText &= pass & "' "
Dim dr As SqlDataReader
Try
conn.Open()
dr = cmd.ExecuteReader()
If dr.Read() Then
Dim role As String = dr("ROLE").ToString()
Dim id As String = dr("ID").ToString()
Dim name As String = dr("FULL_NAME").ToString()
Session("UserEmail") = email
Session("UserRole") = role
Session("UserId") = id
Session("FULL_NAME") = name
Select Case role.ToLower()
Case "admin"
Response.Redirect("Admin.aspx")
Case "teacher"
Response.Redirect("Teacher.aspx")
Case "student"
Response.Redirect("Student.aspx")
End Select
Else
Status.Text = "Invalid Email or Password."
Response.Redirect("Authenticate.aspx")
End If
dr.Close()
Catch ex As Exception
Status.Text = ex.Message
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
End Class
Admin.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Admin.aspx.vb" Inherits="Admin" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Admin Dashboard</title>
<style>
* {
box-sizing: border-box;
}
body, html {
padding: 0;
margin: 0;
height: 100%;
font-family: "Times New Roman";
background: #f4f6fb;
}
.main-container {
background: white;
border: 1px solid black;
padding: 40px;
margin: 5% auto;
max-width: 800px;
min-width: 300px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.main-body h2 {
margin-top: 0;
color: #4f46e5;
font-size: 30px;
text-align: center;
margin-bottom: 10px;
}
.header {
text-align: center;
margin-bottom: 30px;
}
.header span {
color: #4f46e5;
font-size: 32px;
font-weight: bold;
}
.admin-card {
background: #f9fafb;
padding: 25px;
border-radius: 8px;
border: 1px solid #e5e7eb;
margin-bottom: 30px;
box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}
.admin-card h3 {
color: #4f46e5;
margin-top: 0;
margin-bottom: 20px;
border-bottom: 2px solid #e5e7eb;
padding-bottom: 10px;
font-size: 20px;
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
color: #333;
font-size: 16px;
font-weight: bold;
margin-bottom: 8px;
}
.form-control {
width: 100%;
padding: 12px;
border: 1px solid #e5e7eb;
border-radius: 8px;
font-family: "Times New Roman";
font-size: 16px;
transition: border-color 0.2s;
}
.btn-submit {
width: 20%;
transition: transform 0.3s ease;
border-radius: 10px;
cursor: pointer;
transition: transform 0.2s ease, background-color 0.2s;
}
.btn-submit:hover {
transform: translateY(-2px);
background: #3730a3;
box-shadow: 0 4px 6px rgba(0,0,0,0.2);
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="main-container">
<div class="header">
<asp:Label ID="name" runat="server" Text=""></asp:Label>
</div>
<asp:Label ID="lblMessage" runat="server" CssClass="message-label"></asp:Label>
<div class="admin-card">
<h3>1. Add New Teacher</h3>
<div class="form-group">
<label>Full Name:</label>
<asp:TextBox ID="txtTeacherName" runat="server" CssClass="form-control"></asp:TextBox>
</div>
<div class="form-group">
<label>Email:</label>
<asp:TextBox ID="txtTeacherEmail" runat="server" CssClass="form-control"></asp:TextBox>
</div>
<div class="form-group">
<label>Password:</label>
<asp:TextBox ID="txtTeacherPassword" runat="server" CssClass="form-control" TextMode="Password"></asp:TextBox>
</div>
<asp:Button ID="btnAddTeacher" runat="server" Text="Add Teacher" CssClass="btn-submit" />
</div>
<div class="admin-card">
<h3>2. Add a New Student</h3>
<div class="form-group">
<label>Full Name:</label>
<asp:TextBox ID="txtStudentName" runat="server" CssClass="form-control"></asp:TextBox>
</div>
<div class="form-group">
<label>Email:</label>
<asp:TextBox ID="txtStudentEmail" runat="server" CssClass="form-control"></asp:TextBox>
</div>
<div class="form-group">
<label>Password:</label>
<asp:TextBox ID="txtStudentPassword" runat="server" CssClass="form-control" TextMode="Password"></asp:TextBox>
</div>
<asp:Button ID="btnAddStudent" runat="server" Text="Add Student" CssClass="btn-submit" />
</div>
<div class="admin-card">
<h3>3. Assign Course to Teacher</h3>
<div class="form-group">
<label>Select Teacher:</label>
<asp:DropDownList ID="ddlTeachers" runat="server" CssClass="form-control"></asp:DropDownList>
</div>
<div class="form-group">
<label>Select Course:</label>
<asp:DropDownList ID="ddlTeacherCourses" runat="server" CssClass="form-control"></asp:DropDownList>
</div>
<asp:Button ID="btnAssignTeacher" runat="server" Text="Assign to Teacher" CssClass="btn-submit" />
</div>
<div class="admin-card">
<h3>4. Assign Course to Student</h3>
<div class="form-group">
<label>Select Student:</label>
<asp:DropDownList ID="ddlStudents" runat="server" CssClass="form-control"></asp:DropDownList>
</div>
<div class="form-group">
<label>Select Course:</label>
<asp:DropDownList ID="ddlStudentCourses" runat="server" CssClass="form-control"></asp:DropDownList>
</div>
<asp:Button ID="btnAssignStudent" runat="server" Text="Assign to Student" CssClass="btn-submit" />
</div>
<div class="admin-card">
<h3>5. Create New Course</h3>
<div class="form-group">
<label>Course Title:</label>
<asp:TextBox ID="txtCourseTitle" runat="server" CssClass="form-control"></asp:TextBox>
</div>
<div class="form-group">
<label>Description:</label>
<asp:TextBox ID="txtCourseDesc" runat="server" CssClass="form-control" TextMode="MultiLine" Rows="3"></asp:TextBox>
</div>
<div class="form-group">
<label>Assign to Teacher (Optional):</label>
<asp:DropDownList ID="ddlCourseTeacher" runat="server" CssClass="form-control"></asp:DropDownList>
</div>
<asp:Button ID="btnCreateCourse" runat="server" Text="Create Course" CssClass="btn-submit" />
</div>
<asp:Label ID="Status" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>
Admin.aspx.vb
Imports System.Data
Imports System.Data.SqlClient
Partial Class Admin
Inherits System.Web.UI.Page
Dim constr As String = "Data Source=WIN-3G30IJDBABE\SQLEXPRESS;Integrated Security=True;Database = QuizApp"
Private Sub form1_Load(sender As Object, e As EventArgs) Handles form1.Load
If Session("UserRole") Is Nothing OrElse Session("UserRole").ToString().ToLower() <> "admin" Then
Response.Redirect("Authenticate.aspx")
End If
name.Text = "Welcome " + Session("FULL_NAME")
If Not IsPostBack Then
load_dropdowns()
End If
End Sub
Private Sub load_dropdowns()
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "SELECT ID, FULL_NAME FROM USERS_T WHERE ROLE = 'teacher'"
Dim dr As SqlDataReader
Try
conn.Open()
dr = cmd.ExecuteReader()
ddlTeachers.Items.Clear()
ddlCourseTeacher.Items.Clear()
ddlCourseTeacher.Items.Add(New ListItem("-- Unassigned --", "0"))
While dr.Read()
Dim tItem As New ListItem(dr("FULL_NAME").ToString(), dr("ID").ToString())
ddlTeachers.Items.Add(tItem)
ddlCourseTeacher.Items.Add(tItem)
End While
dr.Close()
cmd.CommandText = "SELECT ID, FULL_NAME FROM USERS_T WHERE ROLE = 'student'"
dr = cmd.ExecuteReader()
ddlStudents.Items.Clear()
While dr.Read()
ddlStudents.Items.Add(New ListItem(dr("FULL_NAME").ToString(), dr("ID").ToString()))
End While
dr.Close()
cmd.CommandText = "SELECT ID, TITLE FROM COURSES_T"
dr = cmd.ExecuteReader()
ddlTeacherCourses.Items.Clear()
ddlStudentCourses.Items.Clear()
While dr.Read()
Dim courseItem As New ListItem(dr("TITLE").ToString(), dr("ID").ToString())
ddlTeacherCourses.Items.Add(courseItem)
ddlStudentCourses.Items.Add(courseItem)
End While
dr.Close()
Catch ex As Exception
Status.Text = ex.Message
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Sub btnAddTeacher_Click(sender As Object, e As EventArgs) Handles btnAddTeacher.Click
Dim name As String = txtTeacherName.Text.Trim()
Dim email As String = txtTeacherEmail.Text.Trim()
Dim pass As String = txtTeacherPassword.Text.Trim()
Dim role As String = "teacher"
If name = "" Or email = "" Or pass = "" Then
Status.Text = "Please fill in all fields to add a teacher."
Exit Sub
End If
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "INSERT INTO USERS_T(FULL_NAME,EMAIL,PASSWORD,ROLE) "
cmd.CommandText &= "VALUES ('" & name & "', '" & email & "', '" & pass & "', '" & role & "')"
Try
conn.Open()
Dim ins As Integer = cmd.ExecuteNonQuery()
Status.Text = ins & " Teacher Added"
txtTeacherName.Text = ""
txtTeacherEmail.Text = ""
txtTeacherPassword.Text = ""
load_dropdowns()
Catch ex As Exception
Status.Text = ex.Message
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Sub btnAddStudent_Click(sender As Object, e As EventArgs) Handles btnAddStudent.Click
Dim name As String = txtStudentName.Text.Trim()
Dim email As String = txtStudentEmail.Text.Trim()
Dim pass As String = txtStudentPassword.Text.Trim()
Dim role As String = "student"
If name = "" Or email = "" Or pass = "" Then
Status.Text = "Please fill in all fields to add a student."
Exit Sub
End If
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "INSERT INTO USERS_T(FULL_NAME,EMAIL,PASSWORD,ROLE) "
cmd.CommandText &= "VALUES ('" & name & "', '" & email & "', '" & pass & "', '" & role & "')"
Try
conn.Open()
Dim ins As Integer = cmd.ExecuteNonQuery()
Status.Text = ins & " Student Added"
txtStudentName.Text = ""
txtStudentEmail.Text = ""
txtStudentPassword.Text = ""
load_dropdowns()
Catch ex As Exception
Status.Text = ex.Message
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Sub btnAssignTeacher_Click(sender As Object, e As EventArgs) Handles btnAssignTeacher.Click
If ddlTeachers.Items.Count = 0 Or ddlTeacherCourses.Items.Count = 0 Then
Status.Text = "Not enough data to assign a course."
Exit Sub
End If
Dim teacherId As String = ddlTeachers.SelectedValue
Dim courseId As String = ddlTeacherCourses.SelectedValue
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "UPDATE COURSES_T SET ASSIGNED_TO = " & teacherId & " WHERE ID = " & courseId
Try
conn.Open()
Dim ins As Integer = cmd.ExecuteNonQuery()
If ins > 0 Then
Status.Text = "Course Sucessfully assigned assigned to the teacher ! "
Else
Status.Text = "Could not find the course to update."
End If
Catch ex As Exception
Status.Text = ex.Message
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Sub btnAssignStudent_Click(sender As Object, e As EventArgs) Handles btnAssignStudent.Click
Dim studentId As String = ddlStudents.SelectedValue
Dim courseId As String = ddlStudentCourses.SelectedValue
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "INSERT INTO STUDENT_COURSES_T(STUDENT_ID,COURSE_ID) "
cmd.CommandText &= "VALUES (" & studentId & "," & courseId & ")"
Try
conn.Open()
Dim ins As Integer = cmd.ExecuteNonQuery()
If ins > 0 Then
Status.Text = "Course Sucessfully assigned assigned to the student ! "
Else
Status.Text = "Could not find the course to update."
End If
Catch ex As Exception
Status.Text = ex.Message
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Sub btnCreateCourse_Click(sender As Object, e As EventArgs) Handles btnCreateCourse.Click
Dim title As String = txtCourseTitle.Text
Dim desc As String = txtCourseDesc.Text
Dim teacherId As String = ddlCourseTeacher.SelectedValue
If title = "" Or desc = "" Then
Status.Text = "Please provide a Title and Description for the course."
Exit Sub
End If
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "INSERT INTO COURSES_T(TITLE ,DESCRIPTION, ASSIGNED_TO) "
cmd.CommandText &= "VALUES ('" & title & "','" & desc & "','" & teacherId & "')"
Try
conn.Open()
Dim ins As Integer = cmd.ExecuteNonQuery()
If ins > 0 Then
Status.Text = "Course Sucessfully created! "
Else
Status.Text = "Error in course creation."
End If
txtCourseTitle.Text = ""
txtCourseDesc.Text = ""
ddlCourseTeacher.SelectedIndex = 0
load_dropdowns()
Catch ex As Exception
Status.Text = ex.Message
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
End Class
Teacher.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Teacher.aspx.vb"
Inherits="Teacher" %>
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Teacher Dashboard</title>
<style>
*{
box-sizing: border-box;
}
body, HTML{
padding: 0;
margin: 0;
height: 100%;
font-family: "Times New Roman";
background: #f4f6fb;
}
.header{
padding-bottom: 0.5rem;
margin-bottom: 2.0rem;
color: #4f46e5;
background:white;
border:1px solid black;
padding: 2% 1%;
margin:1% 2%;
border-radius: 8px;
}
.header h2{
margin:0;
color: #4f46e5;
font-size: 30px;
text-align:center;
}
.quiz-list-container{
background:red;
padding: 40px;
padding: 2% 1%;
margin:1% 2%;
border-radius: 8px;
background:white;
border:1px solid black;
}
.quiz-list-container h3 {
color: #333;
margin-top: 0;
margin-bottom: 20px;
font-size: 22px;
}
.button {
float: right;
}
.create-btn{
padding: 10px 20px;
transition: transform 0.2s ease, background-color 0.2s;
border-radius: 8px;
background-color: #4f46e5;
border: none;
color: white;
font-weight: bold;
font-size: 16px;
cursor: pointer;
}
.create-btn:hover{
transform: translateY(-2px);
background: #3730a3;
box-shadow: 0 4px 6px rgba(0,0,0,0.2);
}
ul{
list-style-type: none;
padding: 0;
margin: 0;
}
ul li{
background: white;
margin-bottom: 12px;
padding: 15px 20px;
border-radius: 8px;
border: 1px solid #e5e7eb;
transition: border-color 0.2s, box-shadow 0.2s;
}
ul li:hover{
border-color: #4f46e5;
box-shadow: 0 4px 8px rgba(79, 70, 229, 0.15);
}
ul li a {
text-decoration: none;
color: #4f46e5;
font-weight: bold;
display: block;
width: 100%;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="main-container">
<div class="header">
<h2>
Welcome,
<asp:Label ID="teacherLbl" runat="server" Text="Teacher"></asp:Label>!
</h2>
</div>
<div class="quiz-list-container">
<div class="button">
<asp:Button
ID="btnCreateQuiz"
runat="server"
Text="+ Create New Quiz"
CssClass="create-btn"
/>
</div>
<h3>Your Published Quizzes</h3>
<asp:BulletedList
ID="listQuizzes"
runat="server"
DisplayMode="LinkButton"
OnClick="show_quiz_details"
></asp:BulletedList>
</div>
</div>
</form>
</body>
</html>
Teacher.aspx.vb
Imports System.Data
Imports System.Data.SqlClient
Partial Class Teacher
Inherits System.Web.UI.Page
Dim connstr As String = "Data Source=WIN-3G30IJDBABE\SQLEXPRESS;Integrated Security=True;Database = QuizApp"
Private Sub form1_Load(sender As Object, e As EventArgs) Handles form1.Load
If Session("UserRole") Is Nothing OrElse Session("UserRole").ToString().ToLower() <> "teacher" Then
Response.Redirect("Authenticate.aspx")
End If
If Not IsPostBack Then
teacherLbl.Text = Session("FULL_NAME").ToString()
load_quizzes()
End If
End Sub
Private Sub load_quizzes()
Dim teacher_id As String = Session("UserId")
Dim conn As SqlConnection = New SqlConnection
conn.ConnectionString = connstr
Dim cmd As SqlCommand = New SqlCommand
cmd.Connection = conn
cmd.CommandText = "SELECT ID, TITLE, DESCRIPTION FROM QUIZZES_T WHERE CREATED_BY = " & teacher_id
Dim dr As SqlDataReader
Try
conn.Open()
dr = cmd.ExecuteReader()
While dr.Read()
Dim li As New ListItem(dr("TITLE").ToString(), dr("ID").ToString())
listQuizzes.Items.Add(li)
End While
Catch ex As Exception
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Public Sub show_quiz_details(sender As Object, e As BulletedListEventArgs)
Dim selectedQuizId As String = listQuizzes.Items(e.Index).Value
Session("QuizId") = selectedQuizId
Response.Redirect("/QuizDetails.aspx")
End Sub
Private Sub btnCreateQuiz_Click(sender As Object, e As EventArgs) Handles btnCreateQuiz.Click
Response.Redirect("CreateQuiz.aspx")
End Sub
End Class
QuizDetails.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="CreateQuiz.aspx.vb" Inherits="CreateQuiz" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Create Quiz</title>
<style>
* {
box-sizing: border-box;
}
body, html {
padding: 0;
margin: 0;
height: 94%;
font-family: "Times New Roman";
background: #f4f6fb;
}
.main-body {
background: white;
border: 1px solid black;
padding: 40px;
margin-left: 30%;
margin-right: 30%;
margin-top: 5%;
max-width: 600px;
min-width: 300px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.main-body h2 {
margin-top: 0;
color: #4f46e5;
font-size: 30px;
text-align: center;
margin-bottom: 30px;
}
.button-container {
display: flex;
align-items: center;
justify-content: center;
}
.button {
width: 31%;
transition: transform 0.3s ease;
border-radius: 10px;
cursor: pointer;
transition: transform 0.2s ease, background-color 0.2s;
}
.button:hover {
transform: translateY(-2px);
background: #3730a3;
box-shadow: 0 4px 6px rgba(0,0,0,0.2);
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="main-body">
<h2>Create Quiz</h2>
<label>Select Course:</label>
<asp:DropDownList ID="ddlCourses" runat="server"></asp:DropDownList>
<br />
<br />
<label>Quiz Title:</label>
<asp:TextBox ID="quizTitleTxt" runat="server"></asp:TextBox>
<br />
<br />
<label>Description:</label>
<asp:TextBox ID="quizDescriptionTxt" runat="server" TextMode="MultiLine"></asp:TextBox>
<br />
<br />
<label>Allowed Time (Minutes):</label>
<asp:TextBox ID="txtTime" runat="server" TextMode="Number" Text="10"></asp:TextBox>
<br />
<br />
<label>Settings:</label><br />
<asp:CheckBox ID="chkRandom" runat="server" Text="Randomize Questions" /><br />
<asp:CheckBox ID="chkShuffle" runat="server" Text="Shuffle Options" />
<br />
<br />
<div class="button-container">
<asp:Button ID="addQuestion" runat="server" Text="Save and Add Questions" CssClass="button" />
</div>
<br />
<div class="button-container">
<asp:Button ID="returnbtn" runat="server" Text="Return" CssClass="button" />
</div>
<asp:Label ID="lblMsg" runat="server" ForeColor="Red"></asp:Label>
</div>
</form>
</body>
</html>
QuizDetails.aspx.vb
Imports System.Data
Imports System.Data.SqlClient
Partial Class QuizDetails
Inherits System.Web.UI.Page
Dim connstr As String = "Data Source=WIN-3G30IJDBABE\SQLEXPRESS;Integrated Security=True;Database = QuizApp"
Private Sub btnback_Click(sender As Object, e As EventArgs) Handles btnback.Click
Response.Redirect("Teacher.aspx")
End Sub
Private Sub form1_Load(sender As Object, e As EventArgs) Handles form1.Load
If Session("UserRole") Is Nothing OrElse Session("UserRole").ToString().ToLower() <> "teacher" Then
Response.Redirect("Authenticate.aspx")
ElseIf Session("QuizId") Is Nothing Then
Response.Redirect("Teacher.aspx")
End If
If Not IsPostBack Then
load_questions()
load_marks()
End If
End Sub
Private Sub load_questions()
Dim quizId As Integer = Session("QuizId")
Dim conn As SqlConnection = New SqlConnection
conn.ConnectionString = connstr
Dim cmd As SqlCommand = New SqlCommand
cmd.Connection = conn
cmd.CommandText = "SELECT QUESTION_TEXT, OPTION_TEXT "
cmd.CommandText &= "FROM QUESTIONs_T, OPTIONs_T "
cmd.CommandText &= "WHERE Questions_t.Id = Options_T.question_id "
cmd.CommandText &= "and options_t.IS_CORRECT = 1 and quiz_id = " & quizId
Dim dr As SqlDataReader
Try
Dim head As TableRow = New TableRow
Dim cell1 As TableCell = New TableCell
Dim cell2 As TableCell = New TableCell
Dim lbl As Label = New Label
lbl.Text = "Questions"
lbl.Style.Add("font-weight", "bold")
cell1.Controls.Add(lbl)
Dim lbl2 As Label = New Label
lbl2.Text = "Correct Answer"
lbl2.Style.Add("font-weight", "bold")
cell2.Controls.Add(lbl2)
head.Controls.Add(cell1)
head.Controls.Add(cell2)
questionTable.Controls.Add(head)
conn.Open()
dr = cmd.ExecuteReader()
While dr.Read()
Dim qText As String = dr("QUESTION_TEXT").ToString()
Dim ansText As String = dr("OPTION_TEXT").ToString()
Dim qlbl As Label = New Label
qlbl.Text = qText
Dim albl As Label = New Label
albl.Text = ansText
Dim qcell As TableCell = New TableCell
qcell.Controls.Add(qlbl)
Dim acell As TableCell = New TableCell
acell.Controls.Add(albl)
Dim row As TableRow = New TableRow
row.Controls.Add(qcell)
row.Controls.Add(acell)
questionTable.Controls.Add(row)
End While
Catch ex As Exception
Response.Write(ex.Message)
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Sub load_marks()
Dim quizId As Integer = Session("QuizId")
Dim conn As SqlConnection = New SqlConnection
conn.ConnectionString = connstr
Dim cmd As SqlCommand = New SqlCommand
cmd.Connection = conn
Dim dr As SqlDataReader
cmd.CommandText = "Select COUNT(id) as Total_Marks "
cmd.CommandText &= "FROM QUESTIONS_T Where QUIZ_ID = " & quizId
Dim Total_Marks As Integer
Try
conn.Open()
dr = cmd.ExecuteReader()
dr.Read()
Total_Marks = dr("Total_Marks")
Catch ex As Exception
Response.Write(ex.Message)
Finally
cmd.Dispose()
conn.Close()
End Try
cmd.CommandText = "SELECT max(SCORE) as SCORE, FULL_NAME "
cmd.CommandText &= "FROM USERS_T U,QUIZZES_T Q,ATTEMPTS_T A "
cmd.CommandText &= "WHERE U.ID = A.STUDENT_ID and Q.ID = A.QUIZ_ID and q.ID = " & quizId & " "
cmd.CommandText &= "Group by u.ID,FULL_NAME"
Try
Dim head As TableRow = New TableRow
Dim cell1 As TableCell = New TableCell
Dim cell2 As TableCell = New TableCell
Dim lbl As Label = New Label
lbl.Text = "Student Name"
lbl.Style.Add("font-weight", "bold")
cell1.Controls.Add(lbl)
Dim lbl2 As Label = New Label
lbl2.Text = "Score"
lbl2.Style.Add("font-weight", "bold")
cell2.Controls.Add(lbl2)
head.Controls.Add(cell1)
head.Controls.Add(cell2)
markstable.Controls.Add(head)
conn.Open()
dr = cmd.ExecuteReader()
While dr.Read()
Dim studentName As String = dr("FULL_NAME").ToString()
Dim marks As String = dr("SCORE").ToString()
Dim slbl As Label = New Label
slbl.Text = studentName
Dim mlbl As Label = New Label
mlbl.Text = marks & " / " & Total_Marks.ToString()
Dim scell As TableCell = New TableCell
scell.Controls.Add(slbl)
Dim mcell As TableCell = New TableCell
mcell.Controls.Add(mlbl)
Dim row As TableRow = New TableRow
row.Controls.Add(scell)
row.Controls.Add(mcell)
markstable.Controls.Add(row)
End While
Catch ex As Exception
Response.Write(ex.Message)
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
End Class
CreateQuiz.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="CreateQuiz.aspx.vb" Inherits="CreateQuiz" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Create Quiz</title>
<style>
* {
box-sizing: border-box;
}
body, html {
padding: 0;
margin: 0;
height: 94%;
font-family: "Times New Roman";
background: #f4f6fb;
}
.main-body {
background: white;
border: 1px solid black;
padding: 40px;
margin-left: 30%;
margin-right: 30%;
margin-top: 5%;
max-width: 600px;
min-width: 300px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.main-body h2 {
margin-top: 0;
color: #4f46e5;
font-size: 30px;
text-align: center;
margin-bottom: 30px;
}
.button-container {
display: flex;
align-items: center;
justify-content: center;
}
.button {
width: 31%;
transition: transform 0.3s ease;
border-radius: 10px;
cursor: pointer;
transition: transform 0.2s ease, background-color 0.2s;
}
.button:hover {
transform: translateY(-2px);
background: #3730a3;
box-shadow: 0 4px 6px rgba(0,0,0,0.2);
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="main-body">
<h2>Create Quiz</h2>
<label>Select Course:</label>
<asp:DropDownList ID="ddlCourses" runat="server"></asp:DropDownList>
<br />
<br />
<label>Quiz Title:</label>
<asp:TextBox ID="quizTitleTxt" runat="server"></asp:TextBox>
<br />
<br />
<label>Description:</label>
<asp:TextBox ID="quizDescriptionTxt" runat="server" TextMode="MultiLine"></asp:TextBox>
<br />
<br />
<label>Allowed Time (Minutes):</label>
<asp:TextBox ID="txtTime" runat="server" TextMode="Number" Text="10"></asp:TextBox>
<br />
<br />
<label>Settings:</label><br />
<asp:CheckBox ID="chkRandom" runat="server" Text="Randomize Questions" /><br />
<asp:CheckBox ID="chkShuffle" runat="server" Text="Shuffle Options" />
<br />
<br />
<div class="button-container">
<asp:Button ID="addQuestion" runat="server" Text="Save and Add Questions" CssClass="button" />
</div>
<br />
<div class="button-container">
<asp:Button ID="returnbtn" runat="server" Text="Return" CssClass="button" />
</div>
<asp:Label ID="lblMsg" runat="server" ForeColor="Red"></asp:Label>
</div>
</form>
</body>
</html>
CreateQuiz.aspx.vb
Imports System.Data.SqlClient
Partial Class CreateQuiz
Inherits System.Web.UI.Page
Dim constr As String = "Data Source=WIN-3G30IJDBABE\SQLEXPRESS;Integrated Security=True;Database=QuizApp"
Private Sub form1_Load(sender As Object, e As EventArgs) Handles form1.Load
If Session("UserRole") Is Nothing OrElse Session("UserRole").ToString().ToLower() <> "teacher" Then
Response.Redirect("Authenticate.aspx")
End If
If Not IsPostBack Then
loadCourses()
End If
End Sub
Private Sub loadCourses()
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "SELECT ID, TITLE FROM COURSES_T WHERE ASSIGNED_TO = " & Session("UserId")
Dim dr As SqlDataReader
Try
conn.Open()
dr = cmd.ExecuteReader()
While dr.Read()
Dim li As New ListItem(dr("TITLE").ToString(), dr("ID").ToString())
ddlCourses.Items.Add(li)
End While
Catch ex As Exception
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Sub addQuestion_Click(sender As Object, e As EventArgs) Handles addQuestion.Click
Dim quiztitle As String = quizTitleTxt.Text
Dim quizDescription As String = quizDescriptionTxt.Text
Dim time As String = txtTime.Text
Dim courseId As String = ddlCourses.SelectedValue
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "INSERT INTO QUIZZES_T(COURSE_ID,CREATED_BY,TITLE,DESCRIPTION,ALLOWED_TIME_MINUTES) "
cmd.CommandText &= "VALUES (" & courseId & "," & Session("UserId") & ",'" & quiztitle
cmd.CommandText &= "','" & quizDescription & "'," & time & ")"
Try
conn.Open()
cmd.ExecuteNonQuery()
cmd.CommandText = "SELECT ID FROM QUIZZES_T "
cmd.CommandText &= "WHERE TITLE = '" & quiztitle & "' AND CREATED_BY = " & Session("UserId")
Dim dr As SqlDataReader
dr = cmd.ExecuteReader()
dr.Read()
Dim newQuizId As String = dr("ID").ToString
Response.Redirect("AddQuestions.aspx?QuizID=" & newQuizId)
Catch ex As Exception
Response.Write(ex.Message)
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Sub returnbtn_Click(sender As Object, e As EventArgs) Handles returnbtn.Click
Response.Redirect("Teacher.aspx")
End Sub
End Class
AddQustions.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="AddQuestions.aspx.vb" Inherits="AddQuestions" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Add Qustions</title>
<style>
* {
box-sizing: border-box;
}
body, html {
padding: 0;
margin: 0;
height: 100%;
font-family: "Times New Roman";
background: #f4f6fb;
}
.main-container {
background: white;
border: 1px solid black;
padding: 40px;
margin: 5% auto;
max-width: 800px;
min-width: 300px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.main-container h2 {
margin-top: 0;
color: #4f46e5;
font-size: 30px;
text-align: center;
margin-bottom: 30px;
}
.box {
margin-bottom: 25px;
}
#QuizInfoLbl {
display: block;
text-align: center;
color: #6b7280;
font-size: 16px;
margin-bottom: 20px;
}
label {
display: block;
color: #333;
font-size: 18px;
margin-bottom: 8px;
}
textarea {
width: 100%;
padding: 12px;
border: 1px solid #e5e7eb;
border-radius: 8px;
font-family: "Times New Roman";
font-size: 16px;
min-height: 100px;
resize: vertical;
transition: border-color 0.2s, box-shadow 0.2s;
}
textarea:focus {
outline: none;
border-color: #4f46e5;
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.15);
}
.option-box {
display: flex;
align-items: center;
background: #f9fafb;
padding: 15px;
border-radius: 8px;
border: 1px solid #e5e7eb;
gap: 15px;
}
.button-container {
display: flex;
align-items: center;
justify-content: center;
}
.button {
width: 31%;
transition: transform 0.3s ease;
border-radius: 10px;
cursor: pointer;
transition: transform 0.2s ease, background-color 0.2s;
}
.button:hover {
transform: translateY(-2px);
background: #3730a3;
box-shadow: 0 4px 6px rgba(0,0,0,0.2);
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="main-container">
<h2>Add Questions to Quiz</h2>
<asp:Label ID="QuizInfoLbl" runat="server" Font-Bold="True"></asp:Label>
<hr />
<div class="box">
<label><b>Question Statement</b></label>
<asp:TextBox ID="questiontxt" runat="server" TextMode="MultiLine"></asp:TextBox>
</div>
<div class="option-box">
<label><b>Option a: </b></label>
<asp:TextBox ID="txtOption1" runat="server" />
<asp:CheckBox ID="chkCorrect1" runat="server" Text=" Correct" />
</div>
<div class="option-box">
<label><b>Option b: </b></label>
<asp:TextBox ID="txtOption2" runat="server" />
<asp:CheckBox ID="chkCorrect2" runat="server" Text=" Correct" />
</div>
<div class="option-box">
<label><b>Option c: </b></label>
<asp:TextBox ID="txtOption3" runat="server" />
<asp:CheckBox ID="chkCorrect3" runat="server" Text=" Correct" />
</div>
<div class="option-box">
<label><b>Option d: </b></label>
<asp:TextBox ID="txtOption4" runat="server" />
<asp:CheckBox ID="chkCorrect4" runat="server" Text=" Correct" />
</div>
<asp:Button ID="btnaddquestion" runat="server" Text="+ Add Question" CssClass="button" />
<asp:Button ID="btnfinish" runat="server" Text="Finish Quiz" CssClass="button" />
</div>
</form>
</body>
</html>
AddQuestions.aspx.vb
Imports System.Data
Imports System.Data.SqlClient
Partial Class AddQuestions
Inherits System.Web.UI.Page
Dim constr As String = "Data Source=WIN-3G30IJDBABE\SQLEXPRESS;Integrated Security=True;Database=QuizApp"
Private Sub clear()
questiontxt.Text = ""
txtOption1.Text = ""
txtOption2.Text = ""
txtOption3.Text = ""
txtOption4.Text = ""
chkCorrect1.Checked = False
chkCorrect2.Checked = False
chkCorrect3.Checked = False
chkCorrect4.Checked = False
questiontxt.Focus()
End Sub
Private Sub form1_Load(sender As Object, e As EventArgs) Handles form1.Load
Dim currentQuizId As String = Request.QueryString("QuizID")
If Not IsPostBack Then
QuizInfoLbl.Text = "Adding questions to Quiz ID: " & currentQuizId
End If
End Sub
Private Function CheckValue(ByVal chk As CheckBox) As Integer
If chk.Checked Then
Return 1
Else
Return 0
End If
End Function
Private Sub btnaddquestion_Click(sender As Object, e As EventArgs) Handles btnaddquestion.Click
Dim currentQuizId As String = Request.QueryString("QuizID")
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "INSERT INTO QUESTIONS_T (QUIZ_ID, QUESTION_TEXT, ORDER_INDEX) "
cmd.CommandText &= "VALUES(" & currentQuizId & ", '" & questiontxt.Text & "', 1)"
Try
conn.Open()
cmd.ExecuteNonQuery()
cmd.CommandText = "SELECT ID FROM QUESTIONS_T "
cmd.CommandText &= "WHERE QUIZ_ID = " & currentQuizId & " AND "
cmd.CommandText &= "QUESTION_TEXT LIKE '" & questiontxt.Text & "'"
Dim dr As SqlDataReader
dr = cmd.ExecuteReader()
dr.Read()
Dim newQustionId As String = dr("ID").ToString
dr.Close()
cmd.CommandText = "INSERT INTO OPTIONS_T (QUESTION_ID,OPTION_TEXT,IS_CORRECT) "
cmd.CommandText &= "VALUES (" & newQustionId & ", '" & txtOption1.Text & "', " & CheckValue(chkCorrect1) & ")"
cmd.ExecuteNonQuery()
cmd.CommandText = "INSERT INTO OPTIONS_T (QUESTION_ID,OPTION_TEXT,IS_CORRECT) "
cmd.CommandText &= "VALUES (" & newQustionId & ", '" & txtOption2.Text & "', " & CheckValue(chkCorrect2) & ")"
cmd.ExecuteNonQuery()
cmd.CommandText = "INSERT INTO OPTIONS_T (QUESTION_ID,OPTION_TEXT,IS_CORRECT) "
cmd.CommandText &= "VALUES (" & newQustionId & ", '" & txtOption3.Text & "', " & CheckValue(chkCorrect3) & ")"
cmd.ExecuteNonQuery()
cmd.CommandText = "INSERT INTO OPTIONS_T (QUESTION_ID,OPTION_TEXT,IS_CORRECT) "
cmd.CommandText &= "VALUES (" & newQustionId & ", '" & txtOption4.Text & "', " & CheckValue(chkCorrect4) & ")"
cmd.ExecuteNonQuery()
Catch ex As Exception
Response.Write(ex.Message)
Finally
cmd.Dispose()
conn.Close()
End Try
clear()
End Sub
Private Sub btnfinish_Click(sender As Object, e As EventArgs) Handles btnfinish.Click
Response.Redirect("Teacher.aspx")
End Sub
End Class
Student.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Student.aspx.vb" Inherits="Student" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Student</title>
<style>
* {
box-sizing: border-box;
}
body, html {
padding: 0;
margin: 0;
height: 100%;
font-family: "Times New Roman";
background: #f4f6fb;
}
.main-container {
background: white;
border: 1px solid black;
padding: 40px;
margin: 5% auto;
max-width: 800px;
min-width: 300px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.main-body h2 {
margin-top: 0;
color: #4f46e5;
font-size: 30px;
text-align: center;
margin-bottom: 10px;
}
hr {
border: none;
border-top: 2px solid #e5e7eb;
margin: 20px 0 25px 0;
}
.quiz-list-container h3 {
color: #333;
margin-top: 0;
margin-bottom: 15px;
font-size: 20px;
}
.quiz-list-container h3 {
color: #333;
margin-top: 0;
margin-bottom: 15px;
font-size: 20px;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
}
ul li {
background: white;
margin-bottom: 12px;
padding: 15px 20px;
border-radius: 8px;
border: 1px solid #e5e7eb;
transition: border-color 0.2s, box-shadow 0.2s;
}
ul li a {
text-decoration: none;
color: #4f46e5;
font-weight: bold;
display: block;
width: 100%;
}
ul li:hover {
border-color: #4f46e5;
box-shadow: 0 4px 8px rgba(79, 70, 229, 0.15);
}
.button {
width: 20%;
transition: transform 0.3s ease;
border-radius: 10px;
cursor: pointer;
transition: transform 0.2s ease, background-color 0.2s;
}
.button:hover {
transform: translateY(-2px);
background: #3730a3;
box-shadow: 0 4px 6px rgba(0,0,0,0.2);
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="main-container">
<h2>
<asp:Label ID="studentLbl" runat="server" Text=""></asp:Label></h2>
<hr />
<div class="quiz-list-container">
<h3>Select Course</h3>
<asp:DropDownList ID="ddlcourses" runat="server" Height="16px" Width="183px"></asp:DropDownList>
<asp:Button ID="btnshowQuizzes" runat="server" Text="Show Quizes" CssClass="button" />
<hr />
<br />
<br />
<asp:BulletedList ID="listQuizzes" runat="server" DisplayMode="LinkButton" OnClick="Quiz_Click"></asp:BulletedList>
<asp:Label ID="lblMessage" runat="server" Text=""></asp:Label>
</div>
</div>
</form>
</body>
</html>
Student.aspx.vb
Imports System.Data
Imports System.Data.SqlClient
Partial Class Student
Inherits System.Web.UI.Page
Dim connstr As String = "Data Source=WIN-3G30IJDBABE\SQLEXPRESS;Integrated Security=True;Database = QuizApp"
Private Sub form1_Load(sender As Object, e As EventArgs) Handles form1.Load
If Session("UserRole") Is Nothing OrElse Session("UserRole").ToString().ToLower() <> "student" Then
Response.Redirect("Authenticate.aspx")
End If
If Not IsPostBack Then
studentLbl.Text = Session("FULL_NAME").ToString()
load_courses()
End If
End Sub
Private Sub load_courses()
Dim student_id As String = Session("UserId")
Dim conn As SqlConnection = New SqlConnection
conn.ConnectionString = connstr
Dim cmd As SqlCommand = New SqlCommand
cmd.Connection = conn
cmd.CommandText = "SELECT COURSE_ID, TITLE "
cmd.CommandText &= "FROM STUDENT_COURSES_T, COURSES_T "
cmd.CommandText &= "WHERE STUDENT_COURSES_T.COURSE_ID = COURSES_T.ID AND "
cmd.CommandText &= "STUDENT_ID = " & student_id
Dim dr As SqlDataReader
Try
conn.Open()
dr = cmd.ExecuteReader()
While dr.Read()
Dim li As New ListItem(dr("TITLE").ToString(), dr("COURSE_ID").ToString())
ddlcourses.Items.Add(li)
End While
Catch ex As Exception
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Sub btnshowQuizzes_Click(sender As Object, e As EventArgs) Handles btnshowQuizzes.Click
Dim selectedCourseId As String = ddlcourses.SelectedValue
If String.IsNullOrEmpty(selectedCourseId) Then
lblMessage.Text = "Please select a course first."
Exit Sub
End If
Dim conn As SqlConnection = New SqlConnection
conn.ConnectionString = connstr
Dim cmd As SqlCommand = New SqlCommand
cmd.Connection = conn
cmd.CommandText = "SELECT ID AS QUIZ_ID, TITLE FROM QUIZZES_T WHERE COURSE_ID = " & selectedCourseId
Dim dr As SqlDataReader
Try
conn.Open()
dr = cmd.ExecuteReader()
listQuizzes.Items.Clear()
lblMessage.Text = ""
While dr.Read()
Dim li As New ListItem(dr("TITLE").ToString(), dr("QUIZ_ID").ToString())
listQuizzes.Items.Add(li)
End While
If listQuizzes.Items.Count = 0 Then
lblMessage.Text = "There are no quizzes available for this course right now."
End If
Catch ex As Exception
lblMessage.Text = ex.Message
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Public Sub Quiz_click(sender As Object, e As BulletedListEventArgs)
Dim selectedQuizID As String = listQuizzes.Items(e.Index).Value
Dim quizTitle As String = listQuizzes.Items(e.Index).Text
Dim student_id As String = Session("UserId").ToString()
Dim conn As SqlConnection = New SqlConnection
conn.ConnectionString = connstr
Dim cmd As SqlCommand = New SqlCommand
cmd.Connection = conn
cmd.CommandText = "SELECT max(SCORE) AS SCORE FROM ATTEMPTS_T WHERE STUDENT_ID = " & student_id & " AND QUIZ_ID = " & selectedQuizID
Try
conn.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader()
If dr.Read() AndAlso Not IsDBNull(dr("SCORE")) Then
Dim previousScore As String = dr("SCORE").ToString()
lblMessage.Text = "You have already attempted '" & quizTitle & "'. Your score is: " & previousScore
lblMessage.ForeColor = Drawing.Color.DarkRed
Else
Session("QuizId") = selectedQuizID
Session("QuizTitle") = quizTitle
Response.Redirect("AttemptQuiz.aspx")
End If
Catch ex As Exception
lblMessage.Text = "Error: " & ex.Message
lblMessage.ForeColor = Drawing.Color.Red
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
End Class
AttemptQuiz.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="AttemptQuiz.aspx.vb" Inherits="AttemptQuiz" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Attemp Quiz</title>
<style>
* {
box-sizing: border-box;
}
body, html {
padding: 0;
margin: 0;
height: 100%;
font-family: "Times New Roman";
background: #f4f6fb;
}
.main-container {
background: white;
border: 1px solid black;
padding: 40px;
margin: 5% auto;
max-width: 800px;
min-width: 300px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
}
.main-container h2 {
margin-top: 0;
color: #4f46e5;
font-size: 30px;
text-align: center;
margin-bottom: 5px;
}
.question-card {
background: #f9fafb;
padding: 30px;
border-radius: 8px;
border: 1px solid #e5e7eb;
margin-bottom: 25px;
}
.button {
width: 20%;
transition: transform 0.3s ease;
border-radius: 10px;
cursor: pointer;
transition: transform 0.2s ease, background-color 0.2s;
}
.button:hover {
transform: translateY(-2px);
background: #3730a3;
box-shadow: 0 4px 6px rgba(0,0,0,0.2);
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="main-container">
<h2>
<asp:Label ID="quizId" runat="server" Text="Label"></asp:Label></h2>
<asp:Label ID="statuslbl" runat="server" Text="Label"></asp:Label>
<hr />
<div class="question-card" id="quizContainer" runat="server">
<h4>
<asp:Label ID="progressLbl" runat="server" Text="Label"></asp:Label></h4>
<h3>
<asp:Label ID="qustionlbl" runat="server"></asp:Label></h3>
<asp:RadioButtonList ID="rblOptions" runat="server" CellPadding="5"></asp:RadioButtonList>
<asp:Button ID="btnNext" runat="server" Text="Next Question" CssClass="button" />
<asp:Button ID="btnSubmit" runat="server" Text="Submit Quiz" Visible="False" CssClass="button" />
</div>
<asp:Label ID="lblFinalScore" runat="server" Font-Bold="True" Font-Size="Large" ForeColor="Green"></asp:Label>
<br />
<asp:Button ID="returnBtn" runat="server" Text="Return" CssClass="button" />
</div>
</form>
</body>
</html>
AttemptQuiz.aspx.vb
Imports System.Data.SqlClient
Partial Class AttemptQuiz
Inherits System.Web.UI.Page
Dim constr As String = "Data Source=WIN-3G30IJDBABE\SQLEXPRESS;Integrated Security=True;Database=QuizApp"
Private Sub form1_Load(sender As Object, e As EventArgs) Handles form1.Load
If Not IsPostBack Then
If Session("UserId") Is Nothing Then
Response.Redirect("Authenticate.aspx")
Exit Sub
End If
Dim quiz_id As String = Session("QuizId")
Dim quiz_title As String = Session("QuizTitle").ToString
quizId.Text = "Attempting " & quiz_title
load_questions()
End If
End Sub
Private Sub load_questions()
qustionlbl.Text = ""
Dim currentQuizId As String = Session("QuizId")
Dim studentId As String = Session("UserId").ToString()
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
cmd.CommandText = "INSERT INTO ATTEMPTS_T (QUIZ_ID, STUDENT_ID, STARTED_AT) VALUES ("
cmd.CommandText &= currentQuizId & ", " & studentId & ", GETDATE())"
Dim dr As SqlDataReader
Try
conn.Open()
cmd.ExecuteNonQuery()
cmd.CommandText = "SELECT MAX(ID) AS ID FROM ATTEMPTS_T WHERE QUIZ_ID = " & currentQuizId & " AND STUDENT_ID = " & studentId
dr = cmd.ExecuteReader()
dr.Read()
Session("AttemptID") = dr("ID").ToString()
dr.Close()
cmd.CommandText = "SELECT ID FROM QUESTIONS_T WHERE QUIZ_ID = " & currentQuizId
dr = cmd.ExecuteReader()
Dim question_counts As Integer = 0
While dr.Read()
Dim questionid As String = dr("ID").ToString()
question_counts = question_counts + 1
Session("Question " & question_counts) = questionid
End While
dr.Close()
Session("TotalQuestions") = question_counts
ViewState("CurrentQuestionNumber") = 1
If question_counts > 0 Then
DisplaySpecificQuestion(1)
Else
qustionlbl.Text = "This quiz has no questions."
rblOptions.Visible = False
btnNext.Visible = False
btnSubmit.Visible = False
returnBtn.Visible = False
End If
Catch ex As Exception
statuslbl.Text = ex.Message
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Sub DisplaySpecificQuestion(ByVal questionNum As Integer)
statuslbl.Text = ""
rblOptions.Items.Clear()
Dim totalQuestion As Integer = CType(Session("TotalQuestions"), Integer)
progressLbl.Text = "Question " & questionNum & " of " & totalQuestion
Dim questionId As String = Session("Question " & questionNum).ToString()
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
Dim dr As SqlDataReader
Try
cmd.CommandText = "SELECT QUESTION_TEXT FROM QUESTIONS_T WHERE ID = " & questionId
conn.Open()
dr = cmd.ExecuteReader()
dr.Read()
qustionlbl.Text = dr("QUESTION_TEXT").ToString()
cmd.CommandText = "SELECT ID, OPTION_TEXT FROM OPTIONS_T WHERE "
cmd.CommandText &= "QUESTION_ID = " & questionId
dr.Close()
dr = cmd.ExecuteReader()
While dr.Read()
Dim li As ListItem = New ListItem(dr("OPTION_TEXT").ToString(), dr("ID").ToString())
rblOptions.Items.Add(li)
End While
If questionNum = totalQuestion Then
btnNext.Visible = False
btnSubmit.Visible = True
Else
btnNext.Visible = True
btnSubmit.Visible = False
End If
Catch ex As Exception
statuslbl.Text = ex.Message
Finally
cmd.Dispose()
conn.Close()
End Try
End Sub
Private Function SaveCurrentAnswer() As Boolean
If rblOptions.SelectedIndex = -1 Then
statuslbl.Text = "Please select an answer before continuing!"
Return False
End If
Dim currentNum As Integer = CType(ViewState("CurrentQuestionNumber"), Integer)
Dim questionId As String = Session("Question " & currentNum).ToString()
Dim selectedOptionId As String = rblOptions.SelectedValue
Dim attemptId As String = Session("AttemptID").ToString()
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
Try
conn.Open()
cmd.CommandText = "INSERT INTO answers (ATTEMPT_ID, QUESTION_ID, SELECTED_OPTION_ID) "
cmd.CommandText &= "VALUES (" & attemptId & ", " & questionId & ", " & selectedOptionId & ")"
cmd.ExecuteNonQuery()
Return True
Catch ex As Exception
statuslbl.Text = "Error saving answer: " & ex.Message
Return False
Finally
conn.Close()
End Try
End Function
Protected Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
If Not SaveCurrentAnswer() Then
Exit Sub
End If
Dim currentNum As Integer = CType(ViewState("CurrentQuestionNumber"), Integer)
currentNum = currentNum + 1
ViewState("CurrentQuestionNumber") = currentNum
DisplaySpecificQuestion(currentNum)
End Sub
Protected Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
If Not SaveCurrentAnswer() Then
Exit Sub
End If
GradeQuiz()
End Sub
Private Sub GradeQuiz()
Dim attemptId As String = Session("AttemptID").ToString()
Dim totalQuestions As String = Session("TotalQuestions").ToString()
Dim score As Integer = 0
Dim conn As New SqlConnection
conn.ConnectionString = constr
Dim cmd As New SqlCommand
cmd.Connection = conn
Dim dr As SqlDataReader
Try
conn.Open()
cmd.CommandText = "SELECT COUNT(*) AS GRADE "
cmd.CommandText &= "FROM answers A, OPTIONS_T O "
cmd.CommandText &= "WHERE A.SELECTED_OPTION_ID = O.ID AND A.ATTEMPT_ID = " & attemptId & " AND "
cmd.CommandText &= "O.IS_CORRECT = 1"
dr = cmd.ExecuteReader()
dr.Read()
score = dr("GRADE")
dr.Close()
cmd.CommandText = "UPDATE ATTEMPTS_T "
cmd.CommandText &= "SET SCORE = " & score & ", SUBMITTED_AT = GETDATE() "
cmd.CommandText &= "WHERE ID = " & attemptId
cmd.ExecuteNonQuery()
quizContainer.Visible = False
statuslbl.Text = ""
lblFinalScore.Text = "Quiz Complete! Your Score: " & score & " / " & totalQuestions
returnBtn.Visible = True
Catch ex As Exception
statuslbl.Text = "Error grading quiz: " & ex.Message
Finally
conn.Close()
End Try
End Sub
Private Sub returnBtn_Click(sender As Object, e As EventArgs) Handles returnBtn.Click
Response.Redirect("Student.aspx")
End Sub
End Class