# Autoren: Vinzent Reiss, Nils Dohndorf(, Christian Tuemmler) # Letzte Aenderung: 27.07.2017 # Funktion: Ermittlung und Speicherung der Noten einer Klausur # # genutzte Module from Tkinter import * import sys import os # Globale Variablen name = "" date = "" PunkteProAufgabe = [] zaehler = 1 ProzentSatz = 0 Summe = 0 BestehPunkte = 0 minEins = 0 minZwei = 0 minDrei = 0 Studenten = [] StudentenPunkte = [] Notenverteilung = [] # Funktionsdefinitionen # interaktive Abfrage der Eckdaten (Name und Datum) der Klausur def SchluesselDatenAbfragen(): def WerteUebernehmen(): global name global date name = entry1.get() date = entry2.get() root.destroy() def VerbergeHilfeName(): button3.config(text = "Hilfe", fg = "green", command = ZeigeHilfeName) def ZeigeHilfeName(): button3.config(text = "Beachte: _ anstatt Leerzeichen", command = VerbergeHilfeName) def VerbergeHilfeDatum(): button2.config(text = "Hilfe", fg = "green", command = ZeigeHilfeDatum) def ZeigeHilfeDatum(): button2.config(text = "Format: DD-MM-JJJJ", command = VerbergeHilfeDatum) root = Tk() root.title("Name und Datum") Label(root, text = "Name der Klausur").grid(row = 0, column = 0) Label(root, text = "Datum der Klausur").grid(row = 1, column = 0) entry1 = Entry(root) entry2 = Entry(root) entry1.grid(row = 0, column = 1, pady = 4) entry2.grid(row = 1, column = 1, pady = 4) entry1.insert(10,"Klausur") entry2.insert(10,"01-01-2000") button1 = Button(root, text = "Uebernehmen", command = WerteUebernehmen) button2 = Button(root, text = "Hilfe", fg = "green", command = ZeigeHilfeDatum) button3 = Button(root, text = "Hilfe", fg = "green",command = ZeigeHilfeName) button1.grid(row = 3, column = 1) button2.grid(row = 1, column = 2) button3.grid(row = 0, column = 2) root.mainloop() # interktive Abfrage der fuer jede Aufgabe erreichbaren maximalen Punkte def AufgabenPunkteAbfragen(): def VerbergeHilfe(): button1.config(text = "Hilfe", fg = "green", command = ZeigeHilfe) def ZeigeHilfe(): button1.config(text = "Anzahl Punkte fuer jede Aufgabe eintragen", command = VerbergeHilfe) def NaechsteAufgabeEinlesen(): global zaehler zaehler += 1 tmp = "Aufgabe",str(zaehler) label1.config(text = tmp, font = "Arial 10") entry1.delete(0,END) entry1.insert(10,"10") button1.config(text = "Hilfe", fg = "green", command = ZeigeHilfe) button2.config(text = "Weiter", command = EndeAbfragen) def EndeAbfragen(): global PunkteProAufgabe if 0.0 < float(entry1.get()): PunkteProAufgabe.append(float(entry1.get())) label1.config(text = "Waren das alle Aufgaben?", font = "Arial 13 bold") button1.config(text = "Ja", fg = "black", command = root.destroy) button2.config(text = "Nein", command = NaechsteAufgabeEinlesen) root = Tk() tmp = "Aufgabe",str(zaehler) root.title("Punkte fuer einzelne Aufgaben") label1 = Label(root, text = tmp) Label(root, text = "Erreichbare Punkte").grid(row = 1, column = 0) label1.grid(row = 0, column = 1) entry1 = Entry(root) entry1.grid(row = 1, column = 1, pady = 4) entry1.insert(10,"10") button1 = Button(root, text = "Hilfe", fg = "green", command = ZeigeHilfe) button2 = Button(root, text = "Weiter", command = EndeAbfragen) button1.grid(row = 3, column = 0) button2.grid(row = 3, column = 1) root.mainloop() # interaktive Abfrage eines Prozentsatzes fuer Mindestpunktzahl zum Bestehen def MindestPunktzahlAbfragen(): def WertUebernehmen(): global ProzentSatz ProzentSatz = float(entry1.get()) root.destroy() root = Tk() root.title("Prozentsatz zum Bestehen") Label(root, text = "Prozentsatz").grid(row = 0, column = 0) entry1 = Entry(root) entry1.grid(row = 0, column = 1) entry1.insert(10,"50") button1 = Button(root, text = "Uebernehmen", command = WertUebernehmen) button1.grid(row = 1, column = 1) root.mainloop() # errechnet die jeweiligen Mindestpunkte, die fuer die Noten 1, 2, 3 benoetigt werden def BewertungsSpiegelBerechnen(): global PunkteProAufgabe global ProzentSatz global Summe global BestehPunkte global minEins global minZwei global minDrei for i in range(len(PunkteProAufgabe)): Summe += PunkteProAufgabe[i] BestehPunkte = Summe * ProzentSatz/100 tmp = Summe - BestehPunkte tmp /= 4 minEins = Summe - tmp minZwei = minEins - tmp minDrei = minZwei - tmp # interaktives Abfragen der individuellen Punkte der Studenten je Aufgabe def StudentenMaskeGenerieren(): def VerbergeHilfe(): button1.config(text = "Hilfe", fg = "green", command = ZeigeHilfe) def ZeigeHilfe(): button1.config(text = "Beachte: _ anstatt Leerzeichen", command = VerbergeHilfe) def NaechstenStudentEinlesen(): label1.config(text = "Name", font = "Arial 10") label2.config(text = "Matrikelnummer", font = "Arial 10") entry1.delete(0,END) entry2.delete(0,END) entry1.insert(10,"Max_Mustermann") entry2.insert(10,"9999999") for i in range(zaehler): entries[i].delete(0,END) entries[i].insert(10,PunkteProAufgabe[i]) button1.config(text = "Hilfe", fg = "green", command = ZeigeHilfe) button2.config(text = "Uebernehmen", command = UebernehmeStudent) def UebernehmeStudent(): global Studenten global StudentenPunkte tmpStudentenDaten = [] tmpPunkte = [] tmpStudentenDaten.append(int(entry2.get())) tmpStudentenDaten.append(entry1.get()) Studenten.append(tmpStudentenDaten) tmpPunkte.append(int(entry2.get())) for i in range(zaehler): if float(entries[i].get()) <= float(PunkteProAufgabe[i]) and 0.0 <= float(entries[i].get()): tmpPunkte.append(float(entries[i].get())) else: tmpPunkte.append(0.0) StudentenPunkte.append(tmpPunkte) label1.config(text = "Waren das alle", font = "Arial 12 bold") label2.config(text = "Studenten?", font = "Arial 12 bold") button1.config(text = "Ja", fg = "black", command = root.destroy) button2.config(text = "Nein", command = NaechstenStudentEinlesen) global PunkteProAufgabe root = Tk() root.title("Studentendaten") label1 = Label(root, text = "Name", font = "Arial 10") label2 = Label(root, text = "Matrikelnummer", font = "Arial 10") label1.grid(row = 0, column = 0) label2.grid(row = 1, column = 0) Label(root, text = "Aufgabe").grid(row = 2, column = 0) Label(root, text = "Erreichte Punkte").grid(row = 2, column = 1) entry1 = Entry(root) entry2 = Entry(root) entry1.grid(row = 0, column = 1, pady = 4) entry2.grid(row = 1, column = 1, pady = 4) entry1.insert(10,"Max_Mustermann") entry2.insert(10,"9999999") entries = [] for i in range(zaehler): tmp = str(i+1) Label(root, text = tmp).grid(row = 3+i, column = 0) entries.append(Entry(root)) entries[i].grid(row = 3+i, column = 1, pady = 4) entries[i].insert(10,PunkteProAufgabe[i]) button1 = Button(root, text = "Hilfe", fg = "green", command = ZeigeHilfe) button2 = Button(root, text = "Uebernehmen", command = UebernehmeStudent) button1.grid(row = 0, column = 2) button2.grid(row = 1, column = 2) root.mainloop() PunkteProAufgabe = [] # Berechnung der Noten anhand der Punkte fuer jeden Studenten def GesamtNoteBerechnen(): global Summe global Studenten global StudentenPunkte global minEins global minZwei global minDrei global BestehPunkte for i in range(len(Studenten)): tmpSumme = 0 for j in range(1,len(StudentenPunkte[i])): tmpSumme += StudentenPunkte[i][j] if tmpSumme < BestehPunkte: Studenten[i].append(5.0) elif tmpSumme < minDrei: Studenten[i].append(4.0 + 1 - float(int(10 * ((tmpSumme - BestehPunkte) / (minDrei - BestehPunkte)))) / 10.0) elif tmpSumme < minZwei: Studenten[i].append(3.0 + 1 - float(int(10 * ((tmpSumme - minDrei) / (minZwei - minDrei)))) / 10.0) elif tmpSumme < minEins: Studenten[i].append(2.0 + 1 - float(int(10 * ((tmpSumme - minZwei) / (minEins - minZwei)))) / 10.0) else: Studenten[i].append(1.0 + 1 - float(int(10 * ((tmpSumme - minEins) / (Summe - minEins)))) / 10.0) Summe = 0 minEins = 0 minZwei = 0 minDrei = 0 BestehPunkte = 0 # Berechnung der Notenverteilung def Notenspiegel(): global Notenverteilung global Studenten for i in range(41): Notenverteilung.append(0) for j in range(len(Studenten)): Vergleich = Studenten[j][2] Notenverteilung[int(10*(Vergleich-1))] += 1 # Ausgabe des Notenspiegels def NotenspiegelAusgabe(): global Notenverteilung root = Tk() root.title("Notenspiegel") for i in range(41): farbe = "#{:s}".format(str(999999-2390*i).zfill(6)) tmp = 1.0 + float(i)/10.0 Label(root, text = tmp).grid(row = i, column = 0) Label(root, width = int(float(Notenverteilung[i])/float(len(Studenten))*128), background = farbe).grid(row = i, column = 1, sticky = W, pady = 4) Button(root, text = "Beenden", command = root.destroy).grid(row = 0, column = 2) root.mainloop() Notenverteilung = [] # Daten an das gewaehlte Speicherformat anpassen, sodass es spaeter nicht zu # Problemen beim wiederholten Bearbeiten, durch zu lange Namen kommt def DatenAnpassen(): for i in range(len(Studenten)): if Studenten[i][0] >= 10**15: Studenten[i][0] = Studenten[i][0] - (Studenten[i][0] / 10**15) * 10**15 if len(Studenten[i][1]) >= 16: Studenten[i][1] = Studenten[i][1][0:15] # Die Daten im Tabellenformat: # | Matr.Nr. | Name | Note | # abspeichern def TextdateiErstellen(): global Studenten global StudentenPunkte Datei = open(name, "w") Datei.write("Name der Klausur:\t%s\n" % (name)) Datei.write("Datum der Klausur:\t%s\n" % (date)) Datei.write("|\tMatr.-Nr.\t|\t\tName\t\t|\tNote\t|\n\n") for i in range(len(Studenten)): Datei.write("|\t%8d\t|\t%16s\t|\t%4.1f\t|\n" % (Studenten[i][0], Studenten[i][1], Studenten[i][2])) Datei.close() Studenten = [] StudentenPunkte = [] # ueberprueft ob die Datei im aktuellen Ordner vorhanden ist def ExistenzPruefung(): global name foldercontent = os.listdir(".") if name in foldercontent: return True else: return False # liest eine existierende Klausurendatei fuer die weitere Verarbeitung aus def DatenAuslesen(): Datei = open(name,"r") Datei.readline() Datei.readline() Datei.readline() Datei.readline() while True: line = Datei.readline() if not line: break tmp = line.split("|") tmp = "".join(tmp) tmp = tmp.split("\t") tmp = "".join(tmp) tmp = tmp.split() Student = [] Student.append(int(tmp[0])) Student.append(tmp[1]) Student.append(float(tmp[2])) Studenten.append(Student) Datei.close() # Warnhinweis ausgeben def NichtExistenzVerkuenden(): root = Tk() root.title("Keine Datei gefunden") Label(root, text = "Die Datei existiert noch gar nicht!").grid() Button(root, text = "Weiter", command = root.destroy).grid() root.mainloop() # Warnhinweis ausgeben def BereitsVorhandenseinVerkuenden(): root = Tk() root.title("Datei existiert bereits") Label(root, text = "Die Datei existiert bereits!").grid() Button(root, text = "Weiter", command = root.destroy).grid() root.mainloop() # manuelle Aenderungen an existierender Klausurendatei vornehmen def Aenderungen(): def WerteUebernehmen(): for i in range(len(Studenten)): if float(entries[i].get()) <= 5 and 1.0 <= float(entries[i].get()): Studenten[i][2] = float(entries[i].get()) root.destroy() root = Tk() root.title("Studentendaten aendern") entries = [] for i in range(len(Studenten)): Label(root, text = Studenten[i][0]).grid(row = i, column = 0) Label(root, text = Studenten[i][1]).grid(row = i, column = 1) entries.append(Entry(root)) entries[i].grid(row = i, column = 2) entries[i].insert(10,Studenten[i][2]) Button(root, text = "Uebernehmen", command = WerteUebernehmen).grid(row = 0, column = 3) root.mainloop() # Hauptmenue aufrufen def Hauptmenue(): def NeueKlausur(): mainroot.destroy() SchluesselDatenAbfragen() if not ExistenzPruefung(): AufgabenPunkteAbfragen() MindestPunktzahlAbfragen() BewertungsSpiegelBerechnen() StudentenMaskeGenerieren() GesamtNoteBerechnen() Notenspiegel() NotenspiegelAusgabe() DatenAnpassen() TextdateiErstellen() else: BereitsVorhandenseinVerkuenden() Hauptmenue() def AlteKlausurErweitern(): mainroot.destroy() SchluesselDatenAbfragen() if ExistenzPruefung(): AufgabenPunkteAbfragen() MindestPunktzahlAbfragen() BewertungsSpiegelBerechnen() StudentenMaskeGenerieren() GesamtNoteBerechnen() DatenAuslesen() Notenspiegel() NotenspiegelAusgabe() DatenAnpassen() TextdateiErstellen() else: NichtExistenzVerkuenden() Hauptmenue() def AlteKlausurBearbeiten(): mainroot.destroy() SchluesselDatenAbfragen() if ExistenzPruefung(): DatenAuslesen() Aenderungen() DatenAnpassen() Notenspiegel() NotenspiegelAusgabe() TextdateiErstellen() else: NichtExistenzVerkuenden() Hauptmenue() mainroot = Tk() mainroot.title("Hauptmenue") button1 = Button(mainroot, text = "Neue Klausur", command = NeueKlausur) button2 = Button(mainroot, text = "Alte Klausur erweitern", command = AlteKlausurErweitern) button3 = Button(mainroot, text = "Alte Klausur bearbeiten", command = AlteKlausurBearbeiten) button4 = Button(mainroot, text = "Beenden", command = mainroot.destroy) button1.grid(row = 0, column = 0) button2.grid(row = 0, column = 1) button3.grid(row = 0, column = 2) button4.grid(row = 0, column = 3) mainroot.mainloop() # Hauptprogramm Hauptmenue()