Automatisierte Notenvergabe bei Klausuren

ToolV00.py 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. # genutzte Module
  2. from Tkinter import *
  3. import sys
  4. import os
  5. # Globale Variablen
  6. name = ""
  7. date = ""
  8. PunkteProAufgabe = []
  9. zaehler = 1
  10. ProzentSatz = 0
  11. Summe = 0
  12. BestehPunkte = 0
  13. minEins = 0
  14. minZwei = 0
  15. minDrei = 0
  16. Studenten = []
  17. StudentenPunkte = []
  18. Notenverteilung = []
  19. # Funktionsdefinitionen
  20. def SchluesselDatenAbfragen():
  21. def WerteUebernehmen():
  22. global name
  23. global date
  24. name = entry1.get()
  25. date = entry2.get()
  26. button1.config(text = "Weiter", command = root.destroy)
  27. def VerbergeHilfeName():
  28. button3.config(text = "Hilfe", fg = "green", command = ZeigeHilfeName)
  29. def ZeigeHilfeName():
  30. button3.config(text = "Beachte: _ anstatt Leerzeichen", command = VerbergeHilfeName)
  31. def VerbergeHilfeDatum():
  32. button2.config(text = "Hilfe", fg = "green", command = ZeigeHilfeDatum)
  33. def ZeigeHilfeDatum():
  34. button2.config(text = "Format: DD-MM-JJJJ", command = VerbergeHilfeDatum)
  35. root = Tk()
  36. root.title("Name und Datum")
  37. Label(root, text = "Name der Klausur").grid(row = 0, column = 0)
  38. Label(root, text = "Datum der Klausur").grid(row = 1, column = 0)
  39. entry1 = Entry(root)
  40. entry2 = Entry(root)
  41. entry1.grid(row = 0, column = 1, pady = 4)
  42. entry2.grid(row = 1, column = 1, pady = 4)
  43. entry1.insert(10,"Klausur")
  44. entry2.insert(10,"01-01-2000")
  45. button1 = Button(root, text = "Uebernehmen", command = WerteUebernehmen)
  46. button2 = Button(root, text = "Hilfe", fg = "green", command = ZeigeHilfeDatum)
  47. button3 = Button(root, text = "Hilfe", fg = "green",command = ZeigeHilfeName)
  48. button1.grid(row = 3, column = 1)
  49. button2.grid(row = 1, column = 2)
  50. button3.grid(row = 0, column = 2)
  51. root.mainloop()
  52. def AufgabenPunkteAbfragen():
  53. def VerbergeHilfe():
  54. button1.config(text = "Hilfe", fg = "green", command = ZeigeHilfe)
  55. def ZeigeHilfe():
  56. button1.config(text = "Anzahl Punkte fuer jede Aufgabe eintragen", command = VerbergeHilfe)
  57. def NaechsteAufgabeEinlesen():
  58. global zaehler
  59. zaehler += 1
  60. tmp = "Aufgabe",str(zaehler)
  61. label1.config(text = tmp, font = "Arial 10")
  62. entry1.delete(0,END)
  63. entry1.insert(10,"10")
  64. button1.config(text = "Hilfe", fg = "green", command = ZeigeHilfe)
  65. button2.config(text = "Weiter", command = EndeAbfragen)
  66. def EndeAbfragen():
  67. global PunkteProAufgabe
  68. PunkteProAufgabe.append(float(entry1.get()))
  69. label1.config(text = "Waren das alle Aufgaben?", font = "Arial 13 bold")
  70. button1.config(text = "Ja", fg = "black", command = root.destroy)
  71. button2.config(text = "Nein", command = NaechsteAufgabeEinlesen)
  72. root = Tk()
  73. tmp = "Aufgabe",str(zaehler)
  74. root.title("Punkte fuer einzelne Aufgaben")
  75. label1 = Label(root, text = tmp)
  76. Label(root, text = "Erreichbare Punkte").grid(row = 1, column = 0)
  77. label1.grid(row = 0, column = 1)
  78. entry1 = Entry(root)
  79. entry1.grid(row = 1, column = 1, pady = 4)
  80. entry1.insert(10,"10")
  81. button1 = Button(root, text = "Hilfe", fg = "green", command = ZeigeHilfe)
  82. button2 = Button(root, text = "Weiter", command = EndeAbfragen)
  83. button1.grid(row = 3, column = 0)
  84. button2.grid(row = 3, column = 1)
  85. root.mainloop()
  86. def MindestPunktzahlAbfragen():
  87. def WertUebernehmen():
  88. global ProzentSatz
  89. ProzentSatz = float(entry1.get())
  90. button1.config(text = "Weiter", command = root.destroy)
  91. root = Tk()
  92. root.title("Prozentsatz zum Bestehen")
  93. Label(root, text = "Prozentsatz").grid(row = 0, column = 0)
  94. entry1 = Entry(root)
  95. entry1.grid(row = 0, column = 1)
  96. entry1.insert(10,"50")
  97. button1 = Button(root, text = "Uebernehmen", command = WertUebernehmen)
  98. button1.grid(row = 1, column = 1)
  99. root.mainloop()
  100. def BewertungsSpiegelBerechnen():
  101. global PunkteProAufgabe
  102. global ProzentSatz
  103. global Summe
  104. global BestehPunkte
  105. global minEins
  106. global minZwei
  107. global minDrei
  108. for i in range(len(PunkteProAufgabe)):
  109. Summe += PunkteProAufgabe[i]
  110. BestehPunkte = Summe * ProzentSatz/100
  111. tmp = Summe - BestehPunkte
  112. tmp /= 4
  113. minEins = Summe - tmp
  114. minZwei = minEins - tmp
  115. minDrei = minZwei - tmp
  116. def StudentenMaskeGenerieren():
  117. def VerbergeHilfe():
  118. button1.config(text = "Hilfe", fg = "green", command = ZeigeHilfe)
  119. def ZeigeHilfe():
  120. button1.config(text = "Beachte: _ anstatt Leerzeichen", command = VerbergeHilfe)
  121. def NaechstenStudentEinlesen():
  122. label1.config(text = "Name", font = "Arial 10")
  123. label2.config(text = "Matrikelnummer", font = "Arial 10")
  124. entry1.delete(0,END)
  125. entry2.delete(0,END)
  126. entry1.insert(10,"Max_Mustermann")
  127. entry2.insert(10,"9999999")
  128. for i in range(zaehler):
  129. entries[i].delete(0,END)
  130. entries[i].insert(10,PunkteProAufgabe[i])
  131. button1.config(text = "Hilfe", fg = "green", command = ZeigeHilfe)
  132. button2.config(text = "Uebernehmen", command = UebernehmeStudent)
  133. def UebernehmeStudent():
  134. global Studenten
  135. global StudentenPunkte
  136. tmpStudentenDaten = []
  137. tmpPunkte = []
  138. tmpStudentenDaten.append(int(entry2.get()))
  139. tmpStudentenDaten.append(entry1.get())
  140. Studenten.append(tmpStudentenDaten)
  141. tmpPunkte.append(int(entry2.get()))
  142. for i in range(zaehler):
  143. tmpPunkte.append(float(entries[i].get()))
  144. StudentenPunkte.append(tmpPunkte)
  145. label1.config(text = "Waren das alle", font = "Arial 12 bold")
  146. label2.config(text = "Studenten?", font = "Arial 12 bold")
  147. button1.config(text = "Ja", fg = "black", command = root.destroy)
  148. button2.config(text = "Nein", command = NaechstenStudentEinlesen)
  149. global PunkteProAufgabe
  150. root = Tk()
  151. root.title("Studentendaten")
  152. label1 = Label(root, text = "Name", font = "Arial 10")
  153. label2 = Label(root, text = "Matrikelnummer", font = "Arial 10")
  154. label1.grid(row = 0, column = 0)
  155. label2.grid(row = 1, column = 0)
  156. Label(root, text = "Aufgabe").grid(row = 2, column = 0)
  157. Label(root, text = "Erreichte Punkte").grid(row = 2, column = 1)
  158. entry1 = Entry(root)
  159. entry2 = Entry(root)
  160. entry1.grid(row = 0, column = 1, pady = 4)
  161. entry2.grid(row = 1, column = 1, pady = 4)
  162. entry1.insert(10,"Max_Mustermann")
  163. entry2.insert(10,"9999999")
  164. entries = []
  165. for i in range(zaehler):
  166. tmp = str(i+1)
  167. Label(root, text = tmp).grid(row = 3+i, column = 0)
  168. entries.append(Entry(root))
  169. entries[i].grid(row = 3+i, column = 1, pady = 4)
  170. entries[i].insert(10,PunkteProAufgabe[i])
  171. button1 = Button(root, text = "Hilfe", fg = "green", command = ZeigeHilfe)
  172. button2 = Button(root, text = "Uebernehmen", command = UebernehmeStudent)
  173. button1.grid(row = 0, column = 2)
  174. button2.grid(row = 1, column = 2)
  175. root.mainloop()
  176. def GesamtNoteBerechnen():
  177. global Studenten
  178. global StudentenPunkte
  179. global minEins
  180. global minZwei
  181. global minDrei
  182. global BestehPunkte
  183. for i in range(len(Studenten)):
  184. tmpSumme = 0
  185. for j in range(1,len(StudentenPunkte[i])):
  186. tmpSumme += StudentenPunkte[i][j]
  187. if tmpSumme < BestehPunkte:
  188. Studenten[i].append(5.0)
  189. elif tmpSumme < minDrei:
  190. Studenten[i].append(4.0 + 1 - float(int(10 * ((tmpSumme - BestehPunkte) / (minDrei - BestehPunkte)))) / 10.0)
  191. elif tmpSumme < minZwei:
  192. Studenten[i].append(3.0 + 1 - float(int(10 * ((tmpSumme - minDrei) / (minZwei - minDrei)))) / 10.0)
  193. elif tmpSumme < minEins:
  194. Studenten[i].append(2.0 + 1 - float(int(10 * ((tmpSumme - minZwei) / (minEins - minZwei)))) / 10.0)
  195. else:
  196. Studenten[i].append(1.0 + 1 - float(int(10 * ((tmpSumme - minEins) / (Summe - minEins)))) / 10.0)
  197. def Notenspiegel():
  198. global Notenverteilung
  199. global Studenten
  200. for i in range(41):
  201. Notenverteilung.append(0)
  202. for j in range(len(Studenten)):
  203. Vergleich = Studenten[j][2]
  204. Notenverteilung[int(10*(Vergleich-1))] += 1
  205. def NotenspiegelAusgabe():
  206. Farbauswahl = ["red", "black"]
  207. Farbe = 0
  208. root = Tk()
  209. for i in range(41):
  210. if Farbe < 1:
  211. Farbe += 1
  212. else:
  213. Farbe = 0
  214. tmp = 1.0 + float(i)/10.0
  215. Label(root, text = tmp).grid(row = i, column = 0)
  216. Label(root, width = int(float(Notenverteilung[i])/float(len(Studenten))*128), background = Farbauswahl[Farbe]).grid(row = i, column = 1, sticky = W, pady = 4)
  217. Button(root, text = "Beenden", command = root.destroy).grid(row = 0, column = 2)
  218. root.mainloop()
  219. <<<<<<< HEAD
  220. =======
  221. def DatenAnpassen():
  222. for i in range(len(Studenten)):
  223. if Studenten[i][0] >= 10**15:
  224. Studenten[i][0] = Studenten[i][0] - (Studenten[i][0] / 10**15) * 10**15
  225. if len(Studenten[i][1]) >= 16:
  226. Studenten[i][1] = Studenten[i][1][0:15]
  227. >>>>>>> 2476b640e1efcc92353c19f0d6771d4ff5a092d0
  228. def TextdateiErstellen():
  229. Datei = open(name, "w")
  230. Datei.write("Name der Klausur:\t%s\n" % (name))
  231. Datei.write("Datum der Klausur:\t%s\n" % (date))
  232. Datei.write("|\tMatr.-Nr.\t|\t\tName\t\t|\tNote\t|\n\n")
  233. for i in range(len(Studenten)):
  234. Datei.write("|\t%8d\t|\t%16s\t|\t%4.1f\t|\n" % (Studenten[i][0], Studenten[i][1], Studenten[i][2]))
  235. Datei.close()
  236. def ExistenzPruefung():
  237. global name
  238. foldercontent = os.listdir(".")
  239. if name in foldercontent:
  240. return True
  241. else:
  242. return False
  243. def DatenAuslesen():
  244. Datei = open(name,"r")
  245. Datei.readline()
  246. Datei.readline()
  247. Datei.readline()
  248. Datei.readline()
  249. while True:
  250. line = Datei.readline()
  251. if not line: break
  252. tmp = line.split("|")
  253. tmp = "".join(tmp)
  254. tmp = tmp.split("\t")
  255. tmp = "".join(tmp)
  256. tmp = tmp.split()
  257. Student = []
  258. Student.append(int(tmp[0]))
  259. Student.append(tmp[1])
  260. Student.append(float(tmp[2]))
  261. Studenten.append(Student)
  262. Datei.close()
  263. def NichtExistenzVerkuenden():
  264. root = Tk()
  265. root.title("Keine Datei gefunden")
  266. Label(root, text = "Die Datei existiert noch gar nicht!").grid()
  267. Button(root, text = "Weiter", command = root.destroy).grid()
  268. root.mainloop()
  269. def NeueKlausur():
  270. button1.config(text = "", command = mainroot.destroy)
  271. button2.config(text = "", command = mainroot.destroy)
  272. SchluesselDatenAbfragen()
  273. AufgabenPunkteAbfragen()
  274. MindestPunktzahlAbfragen()
  275. BewertungsSpiegelBerechnen()
  276. StudentenMaskeGenerieren()
  277. GesamtNoteBerechnen()
  278. Notenspiegel()
  279. NotenspiegelAusgabe()
  280. DatenAnpassen()
  281. TextdateiErstellen()
  282. def AlteKlausur():
  283. button1.config(text = "", command = mainroot.destroy)
  284. button2.config(text = "", command = mainroot.destroy)
  285. SchluesselDatenAbfragen()
  286. if ExistenzPruefung():
  287. AufgabenPunkteAbfragen()
  288. MindestPunktzahlAbfragen()
  289. BewertungsSpiegelBerechnen()
  290. StudentenMaskeGenerieren()
  291. GesamtNoteBerechnen()
  292. DatenAuslesen()
  293. Notenspiegel()
  294. NotenspiegelAusgabe()
  295. DatenAnpassen()
  296. TextdateiErstellen()
  297. else:
  298. NichtExistenzVerkuenden()
  299. mainroot = Tk()
  300. mainroot.title("Hauptmenue")
  301. <<<<<<< HEAD
  302. Button(mainroot, text = "Neue Klausur", command = NeueKlausur).grid(row = 1, column = 0)
  303. Button(mainroot, text = "Alte Klausur bearbeiten", command = AlteKlausur).grid(row = 2, column = 0)
  304. Button(mainroot, text = "Beenden", foreground = "red", command = mainroot.destroy).grid(row = 4, column = 0)
  305. =======
  306. button1 = Button(mainroot, text = "Neue Klausur", command = NeueKlausur)
  307. button2 = Button(mainroot, text = "Alte Klausur bearbeiten", command = AlteKlausur)
  308. button1.grid()
  309. button2.grid()
  310. >>>>>>> 2476b640e1efcc92353c19f0d6771d4ff5a092d0
  311. mainroot.mainloop()