QCM par interface WEB.
From Tuxunix
QCM par interface WEB, et envoie des réponses dans un fichier texte, prêt pour analyse.
Code
Classe =>
#!/usr/bin/python import os import os.path import re class qcm: "store file metadata" def __init__(self, filename, dstFileName): self.name = filename self.dstAns = dstFileName def getDataFile(self): if os.path.isfile(self.name): f=open(self.name) data=f.read() f.close() else: print "le premier argument (%s) est pas un fichier ou existe pas !"%(self.name) return data def setMatricule(self, matri): self.mat="" self.mat = matri def getMatricule(self): return self.mat def answerSave(self, donne): self.rep = donne if not self.rep: print "donner vide" else: answer=open(self.dstAns, 'a') answer.write("%s"%(self.rep)) answer.write("\n") answer.close() #heritage class html(qcm): def __init__(self, filename, dstFileName): qcm.__init__(self, filename, dstFileName) def headHtml(self): print "Content-Type: text/html" print print """ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>- QCM -</title> <script type="text/javascript" src="qcm.js"></script> <link rel="stylesheet" type="text/css" href="qcm.css" /> </head> <body> """ def indexHtml(self, libe, comment): self.libelle = libe self.commentaire = comment print """ <div id="pad1" class="pad"> <h2 class=welcome>QCM</h2> """ print "<p class=welcome>"+self.libelle+"<br /><br /></p>" print "<p>"+self.commentaire+"</p>" print """ <fieldset class="fieldset"> <legend><strong>Saisissez votre matricule : </strong></legend> <form action="" onsubmit="return valider()" method="get" name="formSaisie"> <p> <input type="text" name="matricule" id="matricule" /> <input type="submit" value="valider" size="10" /> </p> </form> </fieldset> </div> """ def headQ(self): #self.mat = matri print """ <div id="pad1" class="pad"> """ print "<h2 class=welcome>QCM - Plx - </h2>" print """ <p> <fieldset class="fieldsetQ"> <legend><strong>Questionnaire : </strong></legend> <form action="" method="post" name="formQ"> """ def finishQ(self): print """ <div id="pad1" class="pad">""" print '<h2 class=welcome>QCM</h2>' print """ <p> Merci d'avoir repondu au questionnaire. </p> </div> """ def footQ(self): print '<br />' print """ <input type="submit" value="valider" size="10" /> </p> </form> </fieldset> </div> """ def footHtml(self): print """ </body> </html> """ def displayQ(self, data): cpt=1 listeData=[20] for i in data.split('#'): if i == "" : continue listeData=[(i)] numQ=re.split('\n', i)[0] q=re.split('\n', i)[1] r1=re.split('\n', i)[3] r2=re.split('\n', i)[4] r3=re.split('\n', i)[5] r4=re.split('\n', i)[6] print '<br />' print '<p>'+q+'</p>' print '<input type="checkbox" name="quest" value="'+numQ+'-'+r1+'" id="'+numQ+'-'+r1+'" />'+r1+'<br />' print '<input type="checkbox" name="quest" value="'+numQ+'-'+r2+'" id="'+numQ+'-'+r2+'" />'+r2+'<br />' print '<input type="checkbox" name="quest" value="'+numQ+'-'+r3+'" id="'+numQ+'-'+r3+'" />'+r3+'<br />' print '<input type="checkbox" name="quest" value="'+numQ+'-'+r4+'" id="'+numQ+'-'+r4+'" />'+r4+'<br />'
CGI => (qcm.cgi)
#!/usr/bin/python import cgi import classQcm #libelle first page libelleQcm="20 Questions sur le plx et tout ce qui l'entoure..." #commentaire first page commentaireQcm="Lorsque vous validerez votre matricule, un questionnaire composé de 20 questions apparaitra.<br /> Cette etude nous permettra de nous investir un peu plus sur le manque d'information concernant le plx.<br /> Vous n'etes pas limité dans le temps pour répondre a ce questionnaire. Si vous souhaitez rester anonyme, saisir un pseudo a la place du matricule." #fichier reponse de destination pathAnswer="/tmp/qcm1Answer.txt" #instance objQcm = classQcm.html("Admin/qcm.txt", pathAnswer) form=cgi.FieldStorage() if form.getvalue("matricule"): objQcm.setMatricule(form.getvalue("matricule")) objQcm.answerSave(objQcm.getMatricule()) objQcm.headHtml() objQcm.headQ() #launch qest objQcm.displayQ(objQcm.getDataFile()) objQcm.footQ() objQcm.footHtml() elif form.getvalue("quest"): objQcm.headHtml() objQcm.finishQ() objQcm.answerSave(form.getvalue("quest")) objQcm.footHtml() else: objQcm.headHtml() objQcm.indexHtml(libelleQcm, commentaireQcm) objQcm.footHtml()
Questionnaire:
(qcm.txt)
#1 Q: Quelle est la version de Debian utilise en ce moment? A: 2 1: 3.4 2: 3.5 3: 4.0 4: 5.0 #2 Q: Que fait la combinaison de touche "Ctrl+Alt+t" ? A: 3 1: Ouvre firefox 2: Ouvre l'application Bluetooth 3: Ouvre un terminal 4: Redemarre la machine #6 Q: A quoi sert la partition recover ? A: 2 1: A faire jolie! 2: A reconstruire un plx crashe 3: A modifier la configuration du poste 4: A creer une nouvelle partition sur le poste #7 Q: Dans la commande suivante "netpipes4.0/faucet 3000 --out --verbose tar cf - . ", que signifie l'option  "cf - . " ? A: 3 1: A recuperer le repertoire courant 2: A recuperer la sortie standard 3: A compresser l'archive du repertoire courant et envoyer sur la sortie standard 4: A compresser l'archive et l'envoyer sur le reseau
By TuXedo

