from fag import Fag
from student import Student
class Studentsystem:
def __init__(self):
self._alleStudenter = []
self._alleFag = []
def lesFraFil(self, filnavn):
# Lese fra fil
fil = open(filnavn, "r")
fag = None
for linje in fil:
# Fjerner linjeskift
linje = linje.strip()
# Sjekker om forste tegn er * - da er det navnet p? et fag
if linje[0] == "*":
# Fjerner * fra fagnavnet
fagnavn = linje.strip("*")
# Oppretter et fag med fagnavnet
fag = Fag(fagnavn)
# Legger til faget i listen over fag
self._alleFag.append(fag)
else:
studentnavn = linje
# Sjekker om det allerede finnes en student med samme
# navn i studentsystemet
student = self.finnStudent(studentnavn)
# Hvis det ikke finnes en student med samme navn fra f?r
# s? oppretter vi en student med det navnet
if student is None:
# Opprett student
student = Student(studentnavn)
# Legg til student i listen over studenter
self._alleStudenter.append(student)
# Legg til faget hos studenten og studenten hos faget
fag.leggTilStudent(student)
student.leggTilFag(fag)
def finnStudent(self, studentnavn):
for student in self._alleStudenter:
# Sjekk om student har samme navn som parameteren
if student.hentStudentNavn() == studentnavn:
# I saa fall returnerer vi studenten (Student-objekt)
return student
# Hvis vi ikke finner en student med samme navn returnerer vi None
return None
def finnFag(self, fagnavn):
for fag in self._alleFag:
if fag.hentFagNavn() == fagnavn:
return fag
return None
def skrivStudent(self):
studentnavn = input("Hva heter studenten du vil se oversikten til? ")
student = self.finnStudent(studentnavn)
if student is None:
print(studentnavn + " finnes ikke i studentsystemet.")
else:
student.skrivFagPaaStudent()
def skrivFag(self):
navn = input("Hva heter faget du vil se oversikt over?")
fag = self.finnFag(navn)
if fag == None:
print(navn + " finnes ikke i studentsystemet.")
else:
fag.skrivStudenterVedFag()
def finnStudentMedFlestFag(self):
studMFlest = None
antallFlest = 0
for stud in self._alleStudenter:
if stud.hentAntallFag() > antallFlest:
studMFlest = stud
antallFlest = stud.hentAntallFag()
print("Student med flest fag: " + studMFlest.hentStudentNavn() + ", har " + str(antallFlest) + " fag.")
def finnFagMedFlestStudenter(self):
fagMFlest = None
antallFlest = 0
for fag in self._alleFag:
if fag.hentAntallStudenter() > antallFlest:
fagMFlest = fag
antallFlest = fag.hentAntallStudenter()
print("Fag med flest studenter: " + fagMFlest.hentFagNavn() + ", har " + str(antallFlest) + " studenter.")
def leggTilStudent(self):
navn = input("Hva heter studenten du vil legge til? ")
if self.finnStudent(navn) == None:
self._alleStudenter.append(Student(navn))
print(navn + " lagt til.")
else:
print(navn + " finnes allerede.")
def leggTilFag(self):
navn = input("Hva heter faget du vil legge til? ")
if self.finnFag(navn) == None:
self._alleFag.append(Fag(navn))
print(navn + " lagt til.")
else:
print(navn + " finnes allerede.")
def leggTilStudentIFag(self):
navn = input("Hva heter studenten du vil legge til i faget? ")
stud = self.finnStudent(navn)
# Sjekker om studenten finnes
if stud == None:
print(navn + " finnes ikke. Registrer studenten forst for aa legge til i fag.")
return
fagNavn = input("I hvilket fag vil du legge til " + navn +"? ")
fag = self.finnFag(fagNavn)
# Sjekker om faget finnes
if fag == None:
print(fagNavn + " finnes ikke. Registrer faget foer du legger til t(!)")
# Sjekker om studenten allerede tar faget/er registrert
if stud.tarFag(fag):
print(navn + " tar allerede " + fagNavn)
else:
# Hvis studenten finnes, faget finnes, og studenten ikke allerede er registrert, saa legger vi den til!
stud.leggTilFag(fag)
fag.leggTilStudent(stud)
print(navn + " er lagt til i " + fagNavn)
def fjernStudentFraFag(self):
navn = input("Hva heter studenten du vil fjerne fra faget? ")
stud = self.finnStudent(navn)
if stud == None:
print(navn + " finnes ikke.")
return
fagNavn = input("Fra hvilket fag vil du fjerne " + navn +"? ")
fag = self.finnFag(fagNavn)
if fag == None:
print(fagNavn + " finnes ikke.")
return
if not stud.tarFag(fag):
print(navn + " tar ikke " + fagNavn)
else:
stud.fjernFag(fag)
fag.fjernStudent(stud)
print(navn + " fjernet fra " + fagNavn)
def ordrelokke(self):
inntast = ""
while inntast != "q":
self.skrivMeny()
inntast = input("Skriv inn ditt valg: ")
if inntast == "1":
self.leggTilStudent()
elif inntast == "2":
self.leggTilFag()
elif inntast == "3":
self.leggTilStudentIFag()
elif inntast == "4":
self.skrivFag()
elif inntast == "5":
self.skrivStudent()
elif inntast == "6":
self.finnFagMedFlestStudenter()
elif inntast == "7":
self.finnStudentMedFlestFag()
elif inntast == "8":
self.fjernStudentFraFag()
elif inntast == "9":
self.skrivAlt()
else:
print("Ugylig input.\n")
print("Avslutter programmet")
def skrivMeny(self):
print("--Meny--")
print("1 - Legg til ny student")
print("2 - Legg til nytt fag")
print("3 - Legg til student i fag")
print("4 - Skriv ut studenter ved fag")
print("5 - Skriv ut alle fag til student")
print("6 - Finn fag som blir tatt av flest")
print("7 - Finn student som tar flest fag")
print("8 - Fjern student fra fag")
print("9 - Fullstendig oversikt")
print("q - Avslutt")
def skrivAlt(self):
for fag in self._alleFag:
fag.skrivStudenterVedFag()