Teacher Reporting

Description

A custom Moodle quiz module which, in addition to the standard Moodle quiz features, analyzes the questions posed to the student for various qualities, such as compliance with Curriculum Standards.

Group Members


Data Flow Diagram

 


Goals

  • Run Moodle with the modified quiz module on an XO running XS, The XO school Server.

Milestones

Week 8

  • Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.
  • Have Moodle's latest stable release functioning in an XS School Server VirtualBox OSE Virtual Machine

Week 9

  • Have Moodle's latest stable release functioning on an XO running XS using the techniques outlined here.
  • Have PHP calls successfully querying mock student results from Moodle's MySQL database running on XS.
  • Parse mathematical-operation-based and tally percentage of success with each individual operation (+,-,/,* etc).
  • Parse mathematical operation and check for compliance with standard 4.P.3 Determine values of variables in simple equations, e.g., 4106 – x = 37, 5 = y + 3, and s – y = 3.

Week 10

Documentation & Resources

Post XS School Server Installation Configuration:

yum groupinstall "GNOME Desktop Environment"

edit /etc/inittab and change runlevel from 3 to 5 to startup in Gnome

yum install mysql-server php php-mysql php-mbstring php-gd php-xmlrpc php-imap cvs

service mysqld start
mysqladmin -u root password 'mySecurePassword'
mysql -u root -p
mysql> CREATE DATABASE moodle CHARSET 'utf8';
mysql> exit;
chkconfig mysqld on
--starts sql server; adds root admin user; logs into server and creates DB; 
--turns the service on on boot.

cd /var/www
cvs -z3 -d:pserver:anonymous@eu.cvs.moodle.org:/cvsroot/moodle co -r MOODLE_19_STABLE moodle
--download and install/update with the latest version of moodle

mkdir moodledata
chown -R apache:apache moodle
chown -R apache:apache moodledata
--make directory in /var/www/ and change permissions.

edit the file /etc/httpd/conf/httpd.conf
change DocumentRoot "/var/www/html" to DocumentRoot "/var/www/moodle"
change <Directory "/var/www/html"> to <Directory "/var/www/moodle">
then you must restart the apache server by issuing the command:
service httpd restart

Installing MySQL:
 

Starting MySQL Database:
 

Logging in to MySQL Database:
 

Creating Database:
 

Code

BEGIN{
	printf("%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s\n", "Student", "Only +", "Contains", "Only -",
       "Contains -", "Only *", "Contains *", "Only /", "Contains /") 
}

{
 #*****Field Reference *************

	#MAC=$1
	#NAME=$2
	#OPERATION=$3
	#SUCCESS=$4

#************************************

#Because in the end statement we will have to loop through one of the arrays, which will be localized according
#to specific aritmetic operations (- + / *). We need to account for the fact that some students may not answer a
#question with one of these operations, and if we looped through that particular operation, we would not represent
#that student in any of the logic containted within that loop in the END{} statment. Therefore an associative array
#which absolutely, accounts for any student, contained in the .dat, the CLASS[] array.
CLASS[$2]
  
	#any line that has division, but not necessarily just.  
	if ( match($3, /\//) ) 
	{
		#How many division problem student $2 encounters = divison[$2]
		division[$2]++ 
		
		if ( $4 == "1" )
		{
			division_correct[$2]++
		} 
	}
	
	#any line with multiplication but not  neccearily just multiplication
	if ( match($3, /\*/) ) 
	{
		#How many multiplication problem student $2 encounters = multiplication[$2]
		multiplication[$2]++ 
		
		if ( $4 == "1" )
		{
			multiplication_correct[$2]++
		} 

	}
	
	#any line with addition but not necessarily just addition
	if ( match($3, /\+/) )
	{
		#How many addition problem student $2 encounters = addition[$2]
		addition[$2]++ 
		
		if ( $4 == "1" )
		{
			addition_correct[$2]++
		} 
	}
	
	#contains subtractions, excludes negative numbers, as it only matches expressions with a "-" sandwiched b/w two digits
	if ( match($3, /[0-9]\-[0-9]/) )  
	{				
		#How many subtraction problem student $2 encounters = subtraction[$2]
		subtraction[$2]++ 
		
		if ( $4 == "1" )
		{
			subtraction_correct[$2]++
		} 
	}
	


	# Matches operations with ONLY DIVISION
	if ( match($3, /\//) && !match($3, /[0-9]\-[0-9]/) && !match($3, /\+/) && !match($3, /\*/) ) 
	{

		#How many ONLY division problem student $2 encounters = 0_divison[$2]
		o_division[$2]++ 
		
		if ( $4 == "1" )
		{
			o_division_correct[$2]++
		} 

	
	}
	
	# Matches operations with ONLY SUBTRACTION
	if (  !match($3, /\//) && match($3, /[0-9]\-[0-9]/) && !match($3, /\+/) && !match($3, /\*/) )
	{
		#How many ONLY subtraction problem student $2 encounters = o_subtraction[$2]
		o_subtraction[$2]++ 
		
		if ( $4 == "1" )
		{
			o_subtraction_correct[$2]++
		} 
	
	}
	
	# Matches operations with ONLY ADDITION
	if (  !match($3, /\//) && !match($3, /[0-9]\-[0-9]/) && match($3, /\+/) && !match($3, /\*/) )
	{
		#How many ONLY Addition problem student $2 encounters = o_addition[$2]
		o_addition[$2]++ 
		
		if ( $4 == "1" )
		{
			o_addition_correct[$2]++
		} 

	}
	
	# Matches operations with ONLY MULTIPLICATION 
	if (  !match($3, /\//) && !match($3, /[0-9]\-[0-9]/) && !match($3, /\+/) && match($3, /\*/) )
	{
		#How many ONLY MULTIPLICATION problem student $2 encounters = o_multiplication[$2]
		o_multiplication[$2]++ 
		
		if ( $4 == "1" )
		{
			o_multiplication_correct[$2]++
		} 
			
	}

#How many problems an individual student faced: for classwide statistics we simply use the built-in var NR
numproblems[$2]++


if ( $4 == "1" )
{correct[$2]++}
	
}#end of AWK_MAIN
END{
	
#BEGIN printf header order: student, operation, success

	#loops through all of the elements in the array CLASS[]
	#Here We will print out the students	
for (student in CLASS) 
{
	#need to address divide by 0 issue
	printf("%-11s%-8s%-11s%-8s%-11s%-8s%-11s%-8s%-11s\n", student,
int(o_addition_correct[student]*100/o_addition[student]),  
int(addition_correct[student]*100/addition[student]),
int(o_subtraction_correct[student]*100/o_addition[student]), 
int(subtraction_correct[student]*100/subtraction[student]),
int(o_multiplication_correct[student]*100/o_multiplication[student]),
int(multiplication_correct[student]*100/multiplication[student]),
int(o_division_correct[student]*100/o_division[student]),
int(division_correct[student]*100/division[student]))  
	
}

} #end of AWK_END