from student import Student from fag import Fag #Koden vi gikk igjennom i timen #Jeg har lagt til noen finere utskrifter, og en full ordreløkke. #Det er også en alternativ lesInfo() #1.1 class Studentsystem: def __init__(self): self._studentliste = [] self._fagliste = [] #1.2 def lesInfo(self,filnavn): fila = open(filnavn,"r") linjer = fila.readlines() fag = None #opprettes her for å kunne referere til det for linje in linjer: if linje[0] == "*": fag = Fag(linje[1:-1]) self._fagliste.append(fag) else: student = self.finnStudent(linje[:-1]) if student == None: #ikke lagt til fra før nyStudent = Student(linje[:-1]) fag.leggTilStudent(nyStudent) nyStudent.leggTilFag(fag) self._studentliste.append(nyStudent) #hvis studenten finnes fra før, må vi #bare legge til fag. else: fag.leggTilStudent(student) student.leggTilFag(fag) fila.close() #husk å lukke fila #1.2, men med read(), bare for illustrasjon #vi bruker den ikke videre def lesInfo2(self,filnavn): fila = open(filnavn,"r") splitta = fila.read().split("\n") #splitter på linjeskift fag = None for linje in splitta: if linje != "": #passe på så vi ikke får tomme strenger if linje[0] == "*": fag = Fag(linje[1:]) self._fagliste.append(fag) else: student = self.finnStudent(linje[:1]) if student == None: #ikke lagt til fra før nyStudent = Student(linje[:-1]) fag.leggTilStudent(nyStudent) nyStudent.leggTilFag(fag) self._studentliste.append(nyStudent) else: fag.leggTilStudent(student) student.leggTilFag(fag) fila.close() #1.3 finne studentobjekt eller returnere None def finnStudent(self, navn): for student in self._studentliste: if student.hentStudentNavn() == navn: return student return None #1.4 finne fagobjekt eller returnere None def finnFag(self, navn): for fag in self._fagliste: if fag.hentFagnavn() == navn: return fag return None #2.1 tar inn navn fra brukeren og skriver hvilke #fag en student tar ved å bruke metode fra Student def hentInfoStudent(self): studentnavn = input("Skriv navnet på en student.\n") studenten = self.finnStudent(studentnavn) if studenten != None: studenten.skrivFagPaaStudent() else: print("Studenten er ikke registrert i systemet.\n") #2.2 tar inn navn fra brukeren og skriver hvilke #studenter et fag har ved å bruke metode fra Fag def hentInfoFag(self): fagnavn = input("Skriv navnet på faget\n") faget = self.finnFag(fagnavn) if faget != None: faget.skrivStudenterVedFag() else: print("Faget er ikke registrert i systemet.\n") #2.3 def studentMedFlestFag(self): #Det lønner seg som regel å begynne med det første #elementet i ei liste. flest = self._studentliste[0] for student in self._studentliste: if student.hentAntallFag() > flest.hentAntallFag(): flest = student print(flest.hentStudentNavn(), "tar flest fag.\n") #2.4 def fagMedFlestStudenter(self): flest = self._fagliste[0] for fag in self._fagliste: if fag.hentAntallStudenter() > flest.hentAntallStudenter(): flest = fag print(flest.hentFagnavn(), "har flest studenter.\n") #3.1 #I oppgaveteksten kommer det ikke så tydelig fram, #men vi bør ta inn input fra brukeren her. def leggTilStudent(self): navn = input("Hva heter studenten du vil legge til?\n") if self.finnStudent(navn) == None: self._studentliste.append(Student(navn)) print("Studenten", navn, "ble lagt til.\n") else: print(navn,"er allerede registrert.\n") #3.2 #I oppgaveteksten kommer det ikke så tydelig fram, #men vi bør ta inn input fra brukeren her. def leggTilFag(self): navn = input("Hva heter faget du vil legge til?\n") if self.finnFag(navn) == None: self._fagliste.append(Fag(navn)) print("faget", navn,"ble lagt til.\n") #4.1 def registrerStudentVedFag(self): navn = input("Hva er navnet på studenten du vil registrere?\n") fagnavn = input("Hvilket fag vil du registrere studenten på?\n") studenten = self.finnStudent(navn) faget = self.finnFag(fagnavn) if studenten != None and faget != None: if not studenten.tarFag(faget): faget.leggTilStudent(studenten) studenten.leggTilFag(faget) print(navn, "er nå regisrert på", fagnavn) else: print("Studenten",navn, "tar allerede faget\n") else: print("Studenten",navn,"og/eller faget",fagnavn,"er ikke registrert\n") #7 def fjernStudentFraFag(self): navn = input("Hvilken student vil fjerne?\n") fagnavn = input("Hvilket fag vil du fjerne studenten fra?\n") studenten = self.finnStudent(navn) faget = self.finnFag(fagnavn) #Vi sjekker om studenten og faget er registrert if studenten != None and faget != None: if studenten.tarFag(faget): #vi må implementere to nye metoder (en i Student, en i Fag) faget.fjernStudent(studenten) studenten.fjernFag(faget) print(navn, "fjernet fra", fagnavn) else: print("Studenten",navn,"tar ikke faget",fagnavn) #5. en ordreloekke er en metode som holder styr på #hva som skal skje def ordreloekke(self): inntast = "" while inntast != "q": self.skrivMeny() inntast = input("Skriv ditt valg:\n") if inntast == "1": #vi bruker tall, men konverterer ikke til heltall self.leggTilStudent() elif inntast == "2": self.leggTilFag() elif inntast == "3": self.registrerStudentVedFag() elif inntast == "4": self.hentInfoFag() elif inntast == "5": self.hentInfoStudent() elif inntast == "6": self.studentMedFlestFag() elif inntast == "7": self.fagMedFlestStudenter() elif inntast == "8": self.fjernStudentFraFag() print("Avslutter programmet") def skrivMeny(self): print("--Meny--") print("1 - legg til ny student") print("2 - legg til nytt fag") print("3 - registrer en student ved et fag") print("4 - skriv info om et fag) print("5 - skriv info om en student") print("6 - skriv student med flest fag") print("7 - skriv fag med flest studenter") print("8 - fjern en student ")