QCM par interface WEB.

From Tuxunix
Jump to: navigation, search

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&eacute; 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&eacute; dans le temps pour r&eacute;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