Automatisierte Notenvergabe bei Klausuren

ToolV00.py 7.1KB

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