Automatisierte Notenvergabe bei Klausuren

ToolV00.py 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. # genutzte Module
  2. from Tkinter import *
  3. import sys
  4. # Globale Variablen
  5. name = ""
  6. date = ""
  7. PunkteProAufgabe = []
  8. zaehler = 1
  9. ProzentSatz = 0
  10. Summe = 0
  11. BestehPunkte = 0
  12. minEins = 0
  13. minZwei = 0
  14. minDrei = 0
  15. Studenten = []
  16. StudentenPunkte = []
  17. Notenverteilung = []
  18. # Funktionsdefinitionen
  19. def SchluesselDatenAbfragen():
  20. def WerteUebernehmen():
  21. global name
  22. global date
  23. name = entry1.get()
  24. date = entry2.get()
  25. button1.config(text = "Weiter", command = root.destroy)
  26. def VerbergeHilfeName():
  27. button3.config(text = "Hilfe", command = ZeigeHilfeName)
  28. def ZeigeHilfeName():
  29. button3.config(text = "Beachte: _ anstatt Leerzeichen", command = VerbergeHilfeName)
  30. def VerbergeHilfeDatum():
  31. button2.config(text = "Hilfe", command = ZeigeHilfeDatum)
  32. def ZeigeHilfeDatum():
  33. button2.config(text = "Format: DD-MM-JJJJ", command = VerbergeHilfeDatum)
  34. root = Tk()
  35. root.title("Name und Datum")
  36. Label(root, text = "Name der Klausur").grid(row = 0, column = 0)
  37. Label(root, text = "Datum der Klausur").grid(row = 1, column = 0)
  38. entry1 = Entry(root)
  39. entry2 = Entry(root)
  40. entry1.grid(row = 0, column = 1, pady = 4)
  41. entry2.grid(row = 1, column = 1, pady = 4)
  42. entry1.insert(10,"Klausur")
  43. entry2.insert(10,"01-01-2000")
  44. button1 = Button(root, text = "Uebernehmen", command = WerteUebernehmen)
  45. button2 = Button(root, text = "Hilfe", command = ZeigeHilfeDatum)
  46. button3 = Button(root, text = "Hilfe", command = ZeigeHilfeName)
  47. button1.grid(row = 3, column = 1)
  48. button2.grid(row = 1, column = 2)
  49. button3.grid(row = 0, column = 2)
  50. root.mainloop()
  51. def AufgabenPunkteAbfragen():
  52. def VerbergeHilfe():
  53. button1.config(text = "Hilfe", command = ZeigeHilfe)
  54. def ZeigeHilfe():
  55. button1.config(text = "Anzahl Punkte fuer jede Aufgabe eintragen", command = VerbergeHilfe)
  56. def NaechsteAufgabeEinlesen():
  57. global zaehler
  58. zaehler += 1
  59. tmp = "Aufgabe",str(zaehler)
  60. label1.config(text = tmp)
  61. entry1.delete(0,END)
  62. entry1.insert(10,"10")
  63. button1.config(text = "Hilfe", command = ZeigeHilfe)
  64. button2.config(text = "Weiter", command = EndeAbfragen)
  65. def EndeAbfragen():
  66. global PunkteProAufgabe
  67. PunkteProAufgabe.append(float(entry1.get()))
  68. label1.config(text = "Waren das alle Aufgaben?")
  69. button1.config(text = "Ja", command = root.destroy)
  70. button2.config(text = "Nein", command = NaechsteAufgabeEinlesen)
  71. root = Tk()
  72. tmp = "Aufgabe",str(zaehler)
  73. root.title("Punkte fuer einzelne Aufgaben")
  74. label1 = Label(root, text = tmp)
  75. Label(root, text = "Erreichbare Punkte").grid(row = 1, column = 0)
  76. label1.grid(row = 0, column = 1)
  77. entry1 = Entry(root)
  78. entry1.grid(row = 1, column = 1, pady = 4)
  79. entry1.insert(10,"10")
  80. button1 = Button(root, text = "Hilfe", command = ZeigeHilfe)
  81. button2 = Button(root, text = "Weiter", command = EndeAbfragen)
  82. button1.grid(row = 3, column = 0)
  83. button2.grid(row = 3, column = 1)
  84. root.mainloop()
  85. def MindestPunktzahlAbfragen():
  86. def WertUebernehmen():
  87. global ProzentSatz
  88. ProzentSatz = float(entry1.get())
  89. button1.config(text = "Weiter", command = root.destroy)
  90. root = Tk()
  91. root.title("Prozentsatz zum Bestehen")
  92. Label(root, text = "Prozentsatz").grid(row = 0, column = 0)
  93. entry1 = Entry(root)
  94. entry1.grid(row = 0, column = 1)
  95. entry1.insert(10,"50")
  96. button1 = Button(root, text = "Uebernehmen", command = WertUebernehmen)
  97. button1.grid(row = 1, column = 1)
  98. root.mainloop()
  99. def BewertungsSpiegelBerechnen():
  100. global PunkteProAufgabe
  101. global ProzentSatz
  102. global Summe
  103. global BestehPunkte
  104. global minEins
  105. global minZwei
  106. global minDrei
  107. for i in range(len(PunkteProAufgabe)):
  108. Summe += PunkteProAufgabe[i]
  109. BestehPunkte = Summe * ProzentSatz/100
  110. tmp = Summe - BestehPunkte
  111. tmp /= 4
  112. minEins = Summe - tmp
  113. minZwei = minEins - tmp
  114. minDrei = minZwei - tmp
  115. def StudentenMaskeGenerieren():
  116. def VerbergeHilfe():
  117. button1.config(text = "Hilfe", command = ZeigeHilfe)
  118. def ZeigeHilfe():
  119. button1.config(text = "Beachte: _ anstatt Leerzeichen", command = VerbergeHilfe)
  120. def NaechstenStudentEinlesen():
  121. label1.config(text = "Name")
  122. label2.config(text = "Matrikelnummer")
  123. entry1.delete(0,END)
  124. entry2.delete(0,END)
  125. entry1.insert(10,"Max_Mustermann")
  126. entry2.insert(10,"9999999")
  127. for i in range(zaehler):
  128. entries[i].delete(0,END)
  129. entries[i].insert(10,PunkteProAufgabe[i])
  130. button1.config(text = "Hilfe", command = ZeigeHilfe)
  131. button2.config(text = "Uebernehmen", command = UebernehmeStudent)
  132. def UebernehmeStudent():
  133. global Studenten
  134. global StudentenPunkte
  135. tmpStudentenDaten = []
  136. tmpPunkte = []
  137. tmpStudentenDaten.append(int(entry2.get()))
  138. tmpStudentenDaten.append(entry1.get())
  139. Studenten.append(tmpStudentenDaten)
  140. tmpPunkte.append(int(entry2.get()))
  141. for i in range(zaehler):
  142. tmpPunkte.append(float(entries[i].get()))
  143. StudentenPunkte.append(tmpPunkte)
  144. label1.config(text = "Waren das alle")
  145. label2.config(text = "Studenten?")
  146. button1.config(text = "Ja", command = root.destroy)
  147. button2.config(text = "Nein", command = NaechstenStudentEinlesen)
  148. global PunkteProAufgabe
  149. root = Tk()
  150. root.title("Studentendaten")
  151. label1 = Label(root, text = "Name")
  152. label2 = Label(root, text = "Matrikelnummer")
  153. label1.grid(row = 0, column = 0)
  154. label2.grid(row = 1, column = 0)
  155. Label(root, text = "Aufgabe").grid(row = 2, column = 0)
  156. Label(root, text = "Erreichte Punkte").grid(row = 2, column = 1)
  157. entry1 = Entry(root)
  158. entry2 = Entry(root)
  159. entry1.grid(row = 0, column = 1, pady = 4)
  160. entry2.grid(row = 1, column = 1, pady = 4)
  161. entry1.insert(10,"Max_Mustermann")
  162. entry2.insert(10,"9999999")
  163. entries = []
  164. for i in range(zaehler):
  165. tmp = str(i+1)
  166. Label(root, text = tmp).grid(row = 3+i, column = 0)
  167. entries.append(Entry(root))
  168. entries[i].grid(row = 3+i, column = 1, pady = 4)
  169. entries[i].insert(10,PunkteProAufgabe[i])
  170. button1 = Button(root, text = "Hilfe", command = ZeigeHilfe)
  171. button2 = Button(root, text = "Uebernehmen", command = UebernehmeStudent)
  172. button1.grid(row = 0, column = 2)
  173. button2.grid(row = 1, column = 2)
  174. root.mainloop()
  175. def GesamtNoteBerechnen():
  176. global Studenten
  177. global StudentenPunkte
  178. global minEins
  179. global minZwei
  180. global minDrei
  181. global BestehPunkte
  182. for i in range(len(Studenten)):
  183. tmpSumme = 0
  184. for j in range(1,len(StudentenPunkte[i])):
  185. tmpSumme += StudentenPunkte[i][j]
  186. if tmpSumme < BestehPunkte:
  187. Studenten[i].append(5.0)
  188. elif tmpSumme < minDrei:
  189. Studenten[i].append(4.0 + 1 - float(int(10 * ((tmpSumme - BestehPunkte) / (minDrei - BestehPunkte)))) / 10.0)
  190. elif tmpSumme < minZwei:
  191. Studenten[i].append(3.0 + 1 - float(int(10 * ((tmpSumme - minDrei) / (minZwei - minDrei)))) / 10.0)
  192. elif tmpSumme < minEins:
  193. Studenten[i].append(2.0 + 1 - float(int(10 * ((tmpSumme - minZwei) / (minEins - minZwei)))) / 10.0)
  194. else:
  195. Studenten[i].append(1.0 + 1 - float(int(10 * ((tmpSumme - minEins) / (Summe - minEins)))) / 10.0)
  196. def Notenspiegel():
  197. global Notenverteilung
  198. global Studenten
  199. for i in range(41):
  200. Notenverteilung.append(0)
  201. for j in range(len(Studenten)):
  202. Vergleich = Studenten[j][2]
  203. Notenverteilung[int(10*(Vergleich-1))] += 1
  204. def NotenspiegelAusgabe():
  205. root = Tk()
  206. for i in range(41):
  207. Label(root, text = "a" * int((Notenverteilung[i]/len(Studenten))*128), background = "red").grid(row = i, column = 0)
  208. root.mainloop()
  209. def TextdateiErstellen():
  210. Datei = open(name, "w")
  211. Datei.write("Name der Klausur:\t%s\n" % (name))
  212. Datei.write("Datum der Klausur:\t%s\n" % (date))
  213. Datei.write("|\tMatr.-Nr.\t|\t\tName\t\t|\tNote\t|\n\n")
  214. for i in range(len(Studenten)):
  215. Datei.write("|\t%8d\t|\t%16s\t|\t%.1f\t|\n" % (Studenten[i][0], Studenten[i][1], Studenten[i][2]))
  216. # Hauptprogramm
  217. SchluesselDatenAbfragen()
  218. AufgabenPunkteAbfragen()
  219. MindestPunktzahlAbfragen()
  220. BewertungsSpiegelBerechnen()
  221. StudentenMaskeGenerieren()
  222. GesamtNoteBerechnen()
  223. Notenspiegel()
  224. NotenspiegelAusgabe()
  225. TextdateiErstellen()