This worked for me while I was a TA. my $numberOfStudents = scalar keys %Grade;
my @studentGrades = map { rand(100) } (1 .. $numberOfStudents); foreach my $student (keys %Grade){ %Grade{$student} = shift @studentGrades; } > -----Original Message----- > From: FLAHERTY, JIM-CONT [mailto:[EMAIL PROTECTED]] > Sent: Friday, March 22, 2002 1:51 PM > To: Jim (E-mail); Beginners (E-mail) > Subject: I am clueless about making my test generator program to > generate random questions.... Help > > > I have a script that generates test questions and grades > them . I was > asked to make them generate in a random order , can someone > point me in the > right direction > > They come in two files make_test.cgi and grade.cgi > > > > #! /usr/bin/perl > # > # make test for Cram Program > # > # version 0.02 mar 18 2002 > # > ############################################ > require "subparseform.lib"; > &Parse_Form; > > $name = $formdata{'name'}; > $test = $formdata{'test1'}; > > ########################################## > # connect to DB > ############################ > use DBI; > my $database = "cram"; > my $data_source = "DBI:mysql:$database"; > my $username = "root"; > my $password = "elaine"; > > > #################################### > ## make sure they havent taken the test before > #################################### > > # $dbh = DBI -> connect($data_source, $username, $password) > > > # my $sth = $dbh1 -> prepare("select * from scores where name > = '$name' and > test = '$test'"); > > # $sth -> execute > > > # $result = "$result > > # if($result ne "") { > > > > > > > > > > > # my Arrary > > > > > > > > > > > > > > ###################################################### > ### Make Random # > ###################################################### > > > > > > > > > > > > > $dbh =DBI ->connect($data_source, $username, $password) or > die "cant connect > to > $data_source : my $dbh-> errstr\n"; > > > > > > > > > > my $sth1 = $dbh -> prepare("select * from tests where subject > = '$test' "); > $sth1 -> execute or die " unable to execute query "; > #$sth1 -> finish; > > > > > > > > ########################################## > # make count > $count = 0; > ########################################### > # make Page > ######################################## > print "content-type: text/html\n\n"; > print "<html>\n"; > print "<head><title> Welcome "; > print "$name"; > print " </title></head>\n"; > print "</head>\n"; > > print "<body bgcolor=\"#FFFFFF\" text=\"000000\" \n"; > print "background=\"notebook.jpg\">\n\n"; > > print "<h3 align=\"right\">$name </h3> \n"; > print "<h3 align=\"right\">$test Test</h3> \n"; > print "<hr>\n"; > > print "<div align=\"center\">\n"; > print "<center>\n"; > print "<table border=\"1\" width=\"80%\">\n"; > > print "<form action=\"grade.cgi\""; > > print " method=\"post\" "; > print " name=\"cramtest\">\n"; > print "<input type=\"hidden\" name=\"name\" value=\"$name\">\n"; > print "<input type=\"hidden\" name=\"test12\" value=\"$test\">\n"; > my $array_ref = $sth1 -> fetchall_arrayref(); > > foreach $row(@$array_ref){ > > ############################################################## > # Count Routine > ############################################################## > # > $count ++; > # > my($num, $subject, $ques,$quesA, $quesB, $quesC, $quesD,$quesE,$ans) = > @$row; > > $tot_ans = 0; > > print "<tr>\n"; > > print "<td width=\"3%\">$num</td>\n"; > print "<td width=\"3%\"> </td>\n"; > print "<td width=\"84%\" bgcolor=\"#FFFF00\">$ques\n"; > > $c_ans = $num."c_ans"; > > print " <input type=\"hidden\" name=\"$c_ans\" > value=\"$ans\">\n"; > > print " </td>\n"; > print "</tr>\n"; > > $ques1a = $num."a"; > if ($quesA ne ""){ > $tot_ans++; > print "<tr>\n\n"; > print "<td width=\"3%\"> <input type=\"checkbox\" > name=\"$ques1a\"\n"; > print "value=\"ON\"></td>\n\n"; > > print "<td width=\"3%\"> A.</td>\n"; > > print "<td width=\"84%\">$quesA </td>\n"; > print "</tr>\n"; > > } > > > $ques1b = $num."b"; > if ($quesB ne ""){ > $tot_ans++; > print "<tr>\n"; > > $num_a = $num; > print "<td width=\"3%\"> <input type=\"checkbox\" > name=\"$ques1b\" "; > print "value=\"ON\"></td>\n"; > > print "<td width=\"3%\"> B.</td>\n"; > print "<td width=\"84%\">$quesB</td>\n"; > print "</tr>\n"; > > } > > > > $ques1c = $num."c"; > > if ($quesC ne ""){ > $tot_ans++; > print "<tr>\n"; > print "<td width=\"3%\"> <input type=\"checkbox\" > name=\"$ques1c\" "; > print "value=\"ON\"></td>\n"; > > print "<td width=\"3%\"> C.</td>\n"; > print "<td width=\"84%\">$quesC</td>\n"; > print "</tr>\n"; > > } > > > $ques1d = $num."d"; > > if ($quesD ne ""){ > > $tot_ans++; > print "<tr>\n"; > > print "<td width=\"3%\"> <input type=\"checkbox\" > name=\"$ques1d\" "; > print "value=\"ON\"></td>\n"; > > > print "<td width=\"3%\"> D.</td>\n"; > print "<td width=\"84%\">$quesD </td>\n"; > print "</tr>\n"; > > } > > > > if ($quesE ne ""){ > $tot_ans++; > $ques1e = $num."e"; > > print "<tr>\n"; > print "<td width=\"3%\"> <input type=\"checkbox\" > name=\"$ques1e\" "; > print "value=\"ON\"></td>\n"; > > print "<td width=\"3%\"> E.</td>\n"; > print "<td width=\"84%\">$quesE </td>\n"; > print "</tr>\n"; > > } > > > $ques1f = $num."f"; > > if ($quesf ne ""){ > > $tot_ans++; > print "<tr>\n"; > > print "<td width=\"3%\"> <input type=\"checkbox\" > name=\"$ques1f\" "; > print "value=\"ON\"></td>\n"; > > > print "<td width=\"3%\"> f.</td>\n"; > print "<td width=\"84%\">$quesf </td>\n"; > print "</tr>\n"; > > } > > $tot_ans1 = $num."tot_ans1"; > print "<input type=\"hidden\" name=\"$tot_ans1\" > value=\"$tot_ans\">\n"; > > > } > > print "<input type=\"hidden\" name=\"count\" value=\"$count\">\n"; > > > > print "</table>\n"; > print "<input type=\"Submit\" value=\"Submit to Be Graded\">\n"; > print "</form>\n"; > > print "</center>\n"; > print "</div>\n"; > > > print "</body>\n"; > print "</html>\n"; > > > > > > > > > > > #! /usr/bin/perl > # user grading script > # > # Mar 18, 2002 ver 0.02 > ############################################ > require "subparseform.lib"; > &Parse_Form; > > > > $test = $formdata{'test12'}; > $sname = $formdata{'name'}; > > > > > ########################################## > # connect to DB > ############################ > use DBI; > my $database = "cram"; > my $data_source = "DBI:mysql:$database"; > my $username = "root"; > my $password = "elaine"; > > $dbh =DBI ->connect($data_source, $username, $password) or > die "cant connect > to > $data_source : my $dbh-> errstr\n"; > > my $sth1 = $dbh -> prepare("select * from tests where subject > = '$test' "); > > > $sth1 -> execute or die " unable to execute query "; > #$sth1 -> finish; > > > ########################################### > # make Page > ######################################## > print "content-type: text/html\n\n"; > print "<html>\n"; > print "<head><title> Welcome "; > print "$sname"; > print " </title></head>\n"; > print "</head>\n"; > > print "<body bgcolor=\"#FFFFFF\" text=\"000000\" \n"; > print "background=\" \n'>https://kins2158/cram/notebook.jpg\" > <https://kins2158/cram/notebook.jpg\> >\n"; > > print "<h1 align=\"center\">$sname </h1> \n"; > print "<h3 align=\"center\"> Test results for Test : $test </h3>\n"; > print "<hr>\n"; > my $array_ref = $sth1 -> fetchall_arrayref(); > > > > > ######################################################## > ### Get Date ### > ######################################################## > > @days = ("Sunday","Monday","Tuesday","Wednesday","Thursday", > "Friday","Saturday"); > @months = ("January","February","March","April","May","June", > "July","August","September","October","November", > "December"); > > ($sec,$min,$hr,$mday,$mon,$year,$wday,$yday,$isdst) = > localtime(time); > $year = $year + 1900; #prints correct date > > $today_n = $days[$wday]; > > > > > > > > > > > > > > print "<div align=\"center\">\n"; > print "<center>\n"; > print "<table border=\"1\" width=\"80%\">\n"; > > > $tot_cor = 0; > $tot_ques = 0; > > > foreach $row(@$array_ref){ > > $they_ans=""; > > my($num,$subject,$ques,$quesA,$quesB,$quesC,$quesD,$quesE,$ans > ,$corr_a,$corr > _b,$corr_c,$corr_d,$corr_e,$exp) = @$row; > #################################### > #correct answer for this question > ################################### > $corr = $num."c_ans"; > $corr1 = $formdata{$corr}; > ################################### > # Total answers for the question > ################################### > $totans = $num."tot_ans1"; > $totans1 = $formdata{$totans}; > > $tot_ques++; > > > ##################################### > ### This process goes through all the questions > ### And adds them into on variable > ############################################# > > ##################################### > ## answer 1 ###### > ##################################### > $ans1 = $num."a"; > $ans1a = $formdata{$ans1}; > > if($ans1a eq "ON") { > $they_ans = "A"; > } > > > ##################################### > ## answer 2 ###### > ##################################### > $ans1 = $num."b"; > $ans1b = $formdata{$ans1}; > > if($ans1b eq "ON"){ > $they_ans = $they_ans."B"; > } > > ##################################### > ## answer 3 ###### > ##################################### > $ans1 = $num."c"; > $ans1c = $formdata{$ans1}; > > if($ans1c eq "ON") { > $they_ans = $they_ans."C"; > } > ##################################### > ## answer 4 ###### > ##################################### > $ans1 = $num."d"; > $ans1d = $formdata{$ans1}; > > if($ans1d eq "ON") { > $they_ans = $they_ans."D"; > } > ##################################### > ## answer 5 ###### > ##################################### > $ans1 = $num."e"; > $ans1e = $formdata{$ans1}; > > if($ans1e eq "ON") { > $they_ans = $they_ans."E"; > } > > ##################################### > ## answer 6 ###### > ##################################### > $ans1 = $num."f"; > $ans1f = $formdata{$ans1}; > > > if($ans1f eq "ON") { > $they_ans = $they_ans."F"; > } > > if($corr1 eq $they_ans) { > $outcome = "Correct"; > $tot_cor++; > } > > if($corr1 ne $they_ans) { > $outcome = "Incorrect"; > } > > > ### add to test analysis > # > # connect to DB > ############################ > my $database = "cram"; > my $data_source = "DBI:mysql:$database"; > my $username = "root"; > my $password = "elaine"; > > $dbh5 = DBI ->connect($data_source, $username, $password); > > > my $sth4 = $dbh5 -> prepare("insert into > testhistory(sname,testname,date,question,theyans,outcome)value > s('$sname','$s > ubject','0000-00-00','$num','$they_ans','$outcome')"); > $sth4 -> execute ; > #$sth1 -> finish; > > > $dbh5->disconnect; > > > > > > > > > > > > if($outcome ne "Correct"){ > > print "<tr>\n"; > print "<td width=\"3%\">$num</td>\n"; > print "<td width=\"73%\"> $ques </td>\n"; > print "</tr><tr>\n"; > print "<td width=\"33%\">Correct answer is : $corr1</td>\n"; > print "<td width=\"64%\">You answered $they_ans </td>\n"; > print "</tr><tr>\n"; > print "<td>The Reason</td>\n"; > print "<td>$exp </td>\n"; > print "</tr><tr><td bgcolor=\"#FFFF00\"> </td></tr>\n"; > } > > } > > print "</table>\n"; > print "</center>\n"; > print "</div>\n"; > > print "<center>\n"; > > ######################### > ## get total questions and corrects > > > $aver = $tot_cor/$tot_ques; > > $aver = sprintf "%.2f", $aver; > > > print " Your Score is $aver \n"; > > $status = "Passed"; > > if($aver < 0.70) > { > $status = "Failed"; > } > > > print "<BR>Yours status is : $status"; > > > > > ##################################################### > ## insert Grades into DB > ##################################################### > # > # connect to DB > ############################ > # use DBI; > # my $database = "sobtmedia"; > # my $data_source = "DBI:mysql:$database"; > # my $username = "root"; > # my $password = "elaine"; > > # $dbh = DBI ->connect($data_source, $username, $password); > > my $sth1 = $dbh -> prepare("insert into > scores(name,test,score,result)values('$sname','$test','$aver', > '$status')"); > $sth1 -> execute; > $sth1 -> finish; > > > $dbh->disconnect; > > > > > > > > > > > > > > print "</body>\n"; > print "</html>\n"; > > > > > > > > > > > > ---------------------------------------------------------------------------- -------------------- The views and opinions expressed in this email message are the sender's own, and do not necessarily represent the views and opinions of Summit Systems Inc. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]