courses.py
courses.db
Tietokantaan voidaan lisätä opettajia, kursseja, opiskelijoita, suorituksia ja ryhmiä. Kurssilla voi olla useampia opettajia. Ryhmässä on jokin joukko opettajia ja opiskelijoita. Suunnittele tietokanta niin, että siinä on sopivat taulut tietojen tallentamista varten. Seuraa tietokannan suunnittelussa kurssimateriaalin luvun 6 ohjeita.
Funktiossa create_tables tulee olla SQL-komennot, jotka luovat taulut. Muut create-funktiot lisäävät tietoa tauluihin INSERT-komennoilla, ja niiden tulee palauttaa lisätyn rivin id-numero. Muut funktiot hakevat tietoa tauluista SELECT-komennoilla.
create_tables
create
Seuraavassa on pohja moduulin courses.py toteutukselle:
import os import os.path import sqlite3 # poistaa tietokannan alussa (kätevä moduulin testailussa) if os.path.exists("courses.db"): os.remove("courses.db") db = sqlite3.connect("courses.db") db.isolation_level = None # luo tietokantaan tarvittavat taulut def create_tables(): pass # lisää opettajan tietokantaan def create_teacher(name): pass # lisää kurssin tietokantaan def create_course(name, credits, teacher_ids): pass # lisää opiskelijan tietokantaan def create_student(name): pass # antaa opiskelijalle suorituksen kurssista def add_credits(student_id, course_id, date, grade): pass # lisää ryhmän tietokantaan def create_group(name, teacher_ids, student_ids): pass # hakee kurssit, joissa opettaja opettaa (aakkosjärjestyksessä) def courses_by_teacher(teacher_name): pass # hakee opettajan antamien opintopisteiden määrän def credits_by_teacher(teacher_name): pass # hakee opiskelijan suorittamat kurssit arvosanoineen (aakkosjärjestyksessä) def courses_by_student(student_name): pass # hakee tiettynä vuonna saatujen opintopisteiden määrän def credits_by_year(year): pass # hakee kurssin arvosanojen jakauman (järjestyksessä arvosanat 1-5) def grade_distribution(course_name): pass # hakee listan kursseista (nimi, opettajien määrä, suorittajien määrä) (aakkosjärjestyksessä) def course_list(): pass # hakee listan opettajista kursseineen (aakkosjärjestyksessä opettajat ja kurssit) def teacher_list(): pass # hakee ryhmässä olevat henkilöt (aakkosjärjestyksessä) def group_people(group_name): pass # hakee ryhmissä saatujen opintopisteiden määrät (aakkosjärjestyksessä) def credits_in_groups(): pass # hakee ryhmät, joissa on tietty opettaja ja opiskelija (aakkosjärjestyksessä) def common_groups(teacher_name, student_name): pass
main.py
import courses courses.create_tables() t1 = courses.create_teacher("Erkki Kaila") t2 = courses.create_teacher("Antti Laaksonen") t3 = courses.create_teacher("Matti Luukkainen") t4 = courses.create_teacher("Emilia Oikarinen") t5 = courses.create_teacher("Leena Salmela") c1 = courses.create_course("Laskennan mallit", 5, [t1]) c2 = courses.create_course("Ohjelmistotuotanto", 5, [t2, t4, t5]) c3 = courses.create_course("Ohjelmoinnin perusteet", 5, []) c4 = courses.create_course("Tietokantojen perusteet", 5, [t3, t5]) c5 = courses.create_course("Tietokoneen toiminta", 5, [t1]) s1 = courses.create_student("Heikki Lokki") s2 = courses.create_student("Liisa Marttinen") s3 = courses.create_student("Otto Nurmi") s4 = courses.create_student("Esko Ukkonen") s5 = courses.create_student("Arto Wikla") courses.add_credits(s1, c2, "2020-06-01", 5) courses.add_credits(s1, c3, "2021-01-08", 3) courses.add_credits(s2, c5, "2022-03-23", 2) courses.add_credits(s4, c3, "2022-01-27", 4) courses.add_credits(s4, c4, "2021-05-05", 4) courses.add_credits(s4, c2, "2021-10-03", 5) courses.add_credits(s4, c5, "2021-10-04", 5) courses.add_credits(s5, c2, "2020-12-24", 1) courses.create_group("Basic-koodarit", [t2, t3], [s1, s2, s3]) courses.create_group("Cobol-koodarit", [t1], [s2, s4]) courses.create_group("Fortran-koodarit", [t1, t2, t3, t4, t5], [s1, s2, s3, s4, s5]) courses.create_group("PHP-koodarit", [t4, t5], [s3]) print(courses.courses_by_teacher("Leena Salmela")) print(courses.credits_by_teacher("Leena Salmela")) print(courses.courses_by_student("Esko Ukkonen")) print(courses.credits_by_year(2020)) print(courses.credits_by_year(2021)) print(courses.credits_by_year(2022)) print(courses.grade_distribution("Ohjelmoinnin perusteet")) print(courses.grade_distribution("Tietokoneen toiminta")) print(courses.course_list()) print(courses.teacher_list()) print(courses.group_people("Basic-koodarit")) print(courses.credits_in_groups()) print(courses.common_groups("Antti Laaksonen", "Otto Nurmi"))
['Ohjelmistotuotanto', 'Tietokantojen perusteet'] 20 [('Ohjelmistotuotanto', 5), ('Ohjelmoinnin perusteet', 4), ('Tietokantojen perusteet', 4), ('Tietokoneen toiminta', 5)] 10 20 10 {1: 0, 2: 0, 3: 1, 4: 1, 5: 0} {1: 0, 2: 1, 3: 0, 4: 0, 5: 1} [('Laskennan mallit', 1, 0), ('Ohjelmistotuotanto', 3, 3), ('Ohjelmoinnin perusteet', 0, 2), ('Tietokantojen perusteet', 2, 1), ('Tietokoneen toiminta', 1, 2)] [('Antti Laaksonen', ['Ohjelmistotuotanto']), ('Emilia Oikarinen', ['Ohjelmistotuotanto']), ('Erkki Kaila', ['Laskennan mallit', 'Tietokoneen toiminta']), ('Leena Salmela', ['Ohjelmistotuotanto', 'Tietokantojen perusteet']), ('Matti Luukkainen', ['Tietokantojen perusteet'])] ['Antti Laaksonen', 'Heikki Lokki', 'Liisa Marttinen', 'Matti Luukkainen', 'Otto Nurmi'] [('Basic-koodarit', 15), ('Cobol-koodarit', 25), ('Fortran-koodarit', 40), ('PHP-koodarit', 0)] ['Basic-koodarit', 'Fortran-koodarit']
courses_by_teacher
Tehtävään liittyviä videoita:
import courses courses.create_tables() t1 = courses.create_teacher("Erkki Kaila") t2 = courses.create_teacher("Antti Laaksonen") t3 = courses.create_teacher("Matti Luukkainen") t4 = courses.create_teacher("Emilia Oikarinen") t5 = courses.create_teacher("Leena Salmela") c1 = courses.create_course("Laskennan mallit", 7, [t1, t3]) c2 = courses.create_course("Ohjelmistotuotanto", 9, [t1, t2, t5]) c3 = courses.create_course("Ohjelmoinnin perusteet", 8, [t2, t5]) c4 = courses.create_course("Tietokantojen perusteet", 4, [t3, t4]) c5 = courses.create_course("Tietokoneen toiminta", 6, [t5]) s1 = courses.create_student("Heikki Lokki") s2 = courses.create_student("Liisa Marttinen") s3 = courses.create_student("Otto Nurmi") s4 = courses.create_student("Esko Ukkonen") s5 = courses.create_student("Arto Wikla") courses.add_credits(s1, c1, "2020-01-10", 1) courses.add_credits(s1, c2, "2021-05-02", 2) courses.add_credits(s1, c4, "2021-04-20", 5) courses.add_credits(s2, c1, "2021-03-10", 5) courses.add_credits(s2, c2, "2022-09-08", 5) courses.add_credits(s3, c3, "2022-09-10", 3) courses.add_credits(s4, c3, "2022-11-01", 3) courses.add_credits(s4, c4, "2020-11-29", 5) courses.create_group("Basic-koodarit", [t1, t2], [s1, s2, s3, s5]) courses.create_group("Cobol-koodarit", [t4], [s2, s4, s5]) courses.create_group("Fortran-koodarit", [], [s5]) courses.create_group("PHP-koodarit", [t1, t2, t3], [s2, s3, s4, s5]) print(courses.courses_by_teacher("Leena Salmela")) print(courses.credits_by_teacher("Leena Salmela")) print(courses.courses_by_student("Esko Ukkonen")) print(courses.credits_by_year(2020)) print(courses.credits_by_year(2021)) print(courses.credits_by_year(2022)) print(courses.grade_distribution("Ohjelmoinnin perusteet")) print(courses.grade_distribution("Tietokoneen toiminta")) print(courses.course_list()) print(courses.teacher_list()) print(courses.group_people("Basic-koodarit")) print(courses.credits_in_groups()) print(courses.common_groups("Antti Laaksonen", "Otto Nurmi"))
The deadline for this task has passed but you can still check your answers