Teacher Reporting

Description

Ideally we envision this project to evolve into a collection of scripts or methods. These methods,specific to an individual game will be modified to parse and report relevant information to a central host program which keeps track of progress from multiple activities. This host program will live on the instructors machine for monitoring purposes and on the students machine only so far as to coordinate the correct implementation of the proper scripts.

Group Members

  • Wesley Dillingham will be in charge of the scripts involved with student and class performance, Parsing the mathematical expression. Additionally, he will be responsible for the integration with Kuku.
  • Jeremiah Green will be responsible for automating the collective delivery of each student's game data (Student ID ,Problem, Correctness) to the Teachers XO. and format their results to allow for Wes's methods to compute the relevant class-wide statistics.

Goals

Using a combination of shell scripts, AWK, and Python we will be developing a system which reads in from a file, students identifiable information, the question itself (a mathematical operation), and the students correctness. From this studentinfo.dat file we will report to the teacher: Number of questions, total percent correct, percent correct for multiplication, division, addition, and subtraction.

Week by week milestones

  • Week 8: Have both scripts succesfully tabulating relevant information
  • Week 9 :Have student to teacher data information transfer succesfully functioning with scripts.
  • Week 10: Have integration with kuku, and a gui for teachers data retrieval.

"Required Accomplishment"

Wes

  • Get StudentParser.awk to successfully calculate the accuracy for each mathematical operation, plus other relevant information TBD, one example will be success of division with remainders.
  • Get ClassParser.awk to successfully calculate class-wide statistics on the same information
  • Provide Grader.awk which grades each student, calculates a class average, tallys students in each grade interval.

Jeremiah

  • Create Moodle data flow diagram to give an understanding of how the Moodle Server and corresponding database interact with Student and Teachers machines.
  • Install Moodle server and DBMS on a test Virtual Machine.
    • Attempt PHP calls to the Moodle DBMS.
    • Attempt to create a simple Moodle module extension which can be further built off of to provide further functionality.
  • Provide a script to move StudentParser.awk's output to ClassParser.awk's input

"Wishlist Accomplishments "

Links & Resources

StudentParser.awk Input file format:

Field Structure:
"Mathematical Operation" "Correct?"

example:
45/67 y

StudentParser.awk Output file format *Incomplete*

Field Structure:
line 1: "Student MAC-Address"
line 2+: "Operation type" "correct in decimal"

example:
0:1e:8c:25:a0:c1
+ .86
- .84
x .91
/ .86

Grader.awk:

#!/usr/bin/awk

# grades -- average student grades and determine
# letter grade as well as class averages
# at the command line run: awk -f grader.awk grades.dat

BEGIN { OFS = "\t";     "date +%H:%M:%S" | getline current_time
     close("date +%H:%M:%S")
     print "Report printed on " current_time
 }

# action applied to all input lines
{
	# add up the grades
	total = 0
	for (i = 3; i <= NF; ++i) # i=3 skips first 2 fields - last name, first name
		total+=$i
		
	# calculate average
	avg = total / (NF - 2)
	
	# assign student's average to element of array
	class_avg[NR] = avg
	
	# determine letter grade
	if (avg >= 90) grade="A"
	else if (avg >= 80) grade="B"
	else if (avg >= 70) grade="C"
	else if (avg >= 60) grade="D"
	else grade="F"
	
	# increment counter for letter grade array
	++class_grade[grade]
	
	# print student first name, last name, average interger value, and letter grade
	print $2 " " $1, int(avg), grade#, NF, NF
}

# print out class statistics
END  {
	# calculate class average
	for (x = 1; x <= NR; x++)
		class_avg_total += class_avg[x]
	class_average = class_avg_total / NR
	
	# determine how many above/below average
	for (x = 1; x <= NR; x++)
		if (class_avg[x] >= class_average)
			++above_average
		else
			++below_average
			
	# print results
	print ""
	print "Class Average: ", class_average
	print "At or Above Average: ", above_average
	print "Below Average: ", below_average
	
	# print number of students per letter grade
	for (letter_grade in class_grade)
		print letter_grade ":", class_grade[letter_grade]

}

Helpful stuff