123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- # 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()
|