#----------OPPGAVE 4A---------- # Ganske rett frem, dette burde v?re veldig enkelt og greit n? class Student: def __init__(self, brukernavn): self._emner = [] self._brukernavn = brukernavn def hentBrukernavn(self): return self._brukernavn #----------OPPGAVE 4B---------- # Ganske rett frem, dette burde ogs? v?re veldig enkelt og greit n? class Emne: def __init__(self, emnekode): self._aktiviteter = [] self._emnekode = emnekode def leggTilAktivitet(self, aktivitet): self._aktiviteter.append(aktivitet) def hentEmnekode(self): return self._emnekode def __eq__(self, annen): return self._emnekode == annen._emnekode #----------OPPGAVE 4C---------- class Dato: def __init__(self, dag, maaned, aar): # Hvis du har mye tid til overs for finpussing og vil legge inn en ekstra innsats kan du ha med denne if-sjekken # Hvis ikke gj?r det ingenting om den ikke er med og du bare setter instansvariablene til parameterne uansett hva if maaned >= 9 and maaned <= 12: self._dag = dag self._maaned = maaned self._aar = aar else: print("Ugyldig maaned! Kun september til desember er gyldige m?neder") # Hvis vi skulle ha tatt h?yde for alle m?neder, hadde det v?rt enklere ? bruke en liste, men dato minus en som indeks # Men siden vi kun skal ta h?yde for sep-des er det enklere ? bruke en ordbok med dato som n?kkel og streng som innhold self._ordbok = {9: "september", 10: "oktober", 11: "november", 12: "desember"} # Det finnes sikkert en enklere og raskere m?te ? gj?re dette p?, men det var det f?rste jeg kom p? # Ikke bruk massevis av tid p? ? finne fram til den "beste" l?sningen p? oppgavene p? eksamen # Bare bruk den f?rste l?sningen du finner og dobbeltsjekk at den oppfyller kravene til oppgaven def absoluttDato(self): dato = "" if len(str(self._aar)) == 1: dato += "0" + str(self._aar) else: dato += str(self._aar) if len(str(self._maaned)) == 1: dato += "0" + str(self._maaned) else: dato += str(self._maaned) if len(str(self._dag)) == 1: dato += "0" + str(self._dag) else: dato += str(self._dag) return dato # Bruk eksemplene i oppgaveteksten til ? bestemme hvordan koden din skal se ut def __str__(self): dato = "" dato += str(self._dag) + ". " dato += str(self._ordbok[self._maaned]) + " " dato += "20" + str(self._aar) return dato # Her er bare en rask test av de mest kompliserte metodene i Dato-klassen # NB!!! DETTE ER IKKE N?DVENDIG S? IKKE BRUK TID P? DET P? EKSAMEN!!! # Det er kun for ? sjekke om koden fungerer eller ikke # Det er ikke n?dvendig ? teste veldig enkle konstrukt?rer og metoder # Det verste som kan skje er at du har en skrivefeil og det har ingen uttelling # Det viktigste er at logikken og tenkem?ten din er riktig dato1 = Dato(9, 9, 20) dato2 = Dato(11, 11, 20) print(dato1.absoluttDato()) print(dato2.absoluttDato()) print(dato1) print(dato2) #----------OPPGAVE 4D---------- # Ganske rett frem, dette burde ogs? v?re veldig enkelt og greit n? class Aktivitet: def __init__(self, emne, dato, nummer): self._emne = emne self._dato = dato self._nummer = nummer self._oppmeldt = [] self._mott_opp = [] def leggTilRegistrertStudent(self, student): self._oppmeldt.append(student) def registrerOppmote(self, student): self._mott_opp.append(student) def skrivUtOppmotteStudenter(self): for student in self._mott_opp: print(student.hentBrukernavn()) def absoluttDato(self): return self._dato.absoluttDato() def oppmote(self): return len(self._mott_opp) # Litt mer tricky kanksje, dobbeltsjekk grensesnittet til de andre klassene def __str__(self): resultat = "" resultat += self._emne.hentEmnekode() + "\n" resultat += str(self._dato) + "\n" resultat += str(self.oppmote())+ "\n" return resultat #Alternativ l?sning #return self._emne.hentEmnekode() + "\n" + str(self._dato) + "\n " + str(self.oppmote()) + "\n" # Her er bare en rask test av metodene i Aktivitet-klassen # NB!!! DETTE ER IKKE N?DVENDIG S? IKKE BRUK TID P? DET P? EKSAMEN!!! # Det er kun for ? sjekke om koden fungerer eller ikke aktivitet1 = Aktivitet(Emne("IN1000"), Dato(12, 11, 20), 1) aktivitet1.leggTilRegistrertStudent(Student("yuegu")) print(aktivitet1._oppmeldt) aktivitet1.registrerOppmote(Student("yuegu")) print(aktivitet1._mott_opp) aktivitet1.skrivUtOppmotteStudenter() aktivitet1.absoluttDato() aktivitet1.oppmote() print(aktivitet1) #----------OPPGAVE 4E---------- class Undervisnigsadministrasjon: def __init__(self): self._emner = {} self._datoer = {} self._studenter = {} #----------OPPGAVE 4F---------- # NB!!! DENNE METODEN HAR IKKE BLITT TESTET ENDA. # DET KAN HENDE DEN BLIR FORANDRET SENERE, S? BRUK # KUN KODEN FRA DEN NYESTE VERSJONEN!!! def les_inn_fil(self, filnavn): fil = open(filnavn) for linje in fil: biter = linje.strip().split() # biter[0] er emnekoden # biter[1] er aktivitetsnavn # biter[2-4] er dato # F?rst m? vi sjekke om emnet finnes fra f?r av if self._emner[biter[0]] == None: # Hvis det ikke gj?r det, oppretter vi et Emne-objekt # i tillegg til et Dato-objekt og Aktivitet-objekt # s? legger vi dem til i de riktige ordb?kene emne = Emne(biter[0]) dato = Dato(biter[4], biter[3], biter[2]) aktivitet = Aktivitet(emne, dato, 1) self._emner[biter[0]] = emne self._datoer[dato.absoluttDato()] = dato else: # Hvis det gj?r det, oppretter vi ikke et Emne-objekt # istedenfor bruker vi bare det eksisterende objektet # som allerede ligger i ordboka fra f?r av dato = Dato(biter[4], biter[3], biter[2]) aktivitet = Aktivitet(emne, dato, 1) emne.leggTilAktivitet(aktivitet) self._datoer[dato.absoluttDato()] = dato #----------OPPGAVE 4G----------