jak poprzednio, zgodnie z obietnicą egzamin przykładowy, mający pomóc Wam przygotowaniu się do egzaminu. Mam nadzieję, że będzie on pomocny w powtarzaniu materiału! Nie traktujcie go jednak jako wyznacznika zakresu, a jedynie przykład czego możecie się spodziewać.
Przed przystąpieniem do rozwiązywania zadań przeczytaj poniższe wskazówki
- Stwórz fork repozytorium z zadaniami.
- Sklonuj repozytorium na swój komputer. Użyj do tego komendy
git clone adres_repozytorium
Adres repozytorium możesz znaleźć na stronie repozytorium po naciśnięciu w guzik "Clone or download". - Rozwiąż zadania i skomituj zmiany do swojego repozytorium. Użyj do tego komend
git add nazwa_pliku
. Jeżeli chcesz dodać wszystkie zmienione pliki użyjgit add .
Pamiętaj że kropka na końcu jest ważna! Następnie skommituj zmiany komendągit commit -m "nazwa_commita"
- Wypchnij zmiany do swojego repozytorium na GitHubie. Użyj do tego komendy
git push origin master
- Stwórz pull request do oryginalnego repozytorium, gdy skończysz wszystkie zadania.
- podczas egzaminu możesz korzystać z notatek, kodu napisanego wcześniej, internetu i prezentacji,
- zabroniona jest jakakolwiek komunikacja z innymi kursantami oraz osobami na zewnątrz.
Powodzenia!
Odpowiedzi wpisz w pliku answers.txt.
(1,5 pkt) Dlaczego warto przechowywać dane w bazie danych?
(2 pkt) Jakie są zalety programowania obektowego? W jaki sposób się je osiąga?
Kod wpisz w odpowiednim pliku, zgodnie z poleceniem zadania. Utwórz bazę danych exam2, tam rozwiązuj wszystkie zadania.
(4,5 pkt) W bazie danych chcemy mieć następujące tabele(notatnik pewnego privat bankiera):
* Contacts: id : autonumerowany (klucz główny), name : varchar(60), email : varchar(60), company : varchar(60)
* Addresses: id : autonumerowany (klucz główny), street : varchar(40), city: varchar(40), house_number: decimal(4), description : text
* Todos: id : autonumerowany (klucz główny), prio: int, description: text
* Notes: id : autonumerowany (klucz główny), user_id: int, note_text : text
Zajrzyj do pliku exercise_1.py, znajdziesz tam zdefiniowane zmienne: query_1, query_2 ... query_9. W zmiennych umieść następujące zapytania SQL:
- sql_1: Tworzące tabelę
Contacts
(email ma być unikatowy). - sql_2: Tworzące tabelę
Notes
(pamiętaj o relacji jeden do wielu z tabelą Contacts). - sql_3: Tworzące tabelę
Address
. - sql_4: Tworzące tabelę
Todos
. - sql_5: Stworzenie relacji wiele do wielu między tabelami
Contacts
aTodos
(tabela ma się nazywaćContactsTodos
, a pola relacjicontact_id
itodo_id
). - sql_6: Wybranie wszystkich addresses z ulicy
Polna
. - sql_7: Włożenie do tabeli
Todos
nowego adresu o opisie "przykładowy opis" i prio 10. - sql_8: Usuniecie kontaktu o id
7
. - sql_9: Wybranie wszystkich
kontaktów
z tabeliContacts
, którzy mają przypisaną jakąś notatkę w tabeli Notes.
Za każde zapytanie przysługuje pół punktu.
(3 pkt) Napisz funkcję notes(id), która zwróci wszystkie notatki dla kontaktu o identyfikatorze przekazanym jako parametr funkcji. Pamiętaj o poprawnym połączeniu do bazy danych i jego zamknięciu. Następnie używając Flaska, utwórz stronię pod adresem /show_note/{nid} wyświetlającą zadaną notatkę.
(4 pkt) Używając Flaska, napisz stronę udostępnioną pod adresem /add_address, która spełni następujące założenia:
-
Po wejściu metodą GET wyświetli pusty formularz, który będzie zawierał następujące pola:
- street,
- city,
- house_number,
- description Pamiętaj: nazwij pola dokładnie tak, jak w poleceniu (ustaw odpowiednio atrybut name taga )
-
Po wejściu metodą POST:
- zweryfikuje poprawność danych(długość napisów powinna wynosić minimum 3 znaki, numer domu powinien być liczbą naturalną, większą od zera)
- zapisze te dane do bazy danych do odpowiedniej tabeli i wyświetli komunikat "Dodano",
- jeśli którakolwiek dana będzie błędna, zamiast zapisywania do bazy, wyświetli na stronie komunikat "Błędne dane".
Pamiętaj o poprawnym połączeniu do bazy danych i jego zamknięciu.
(5 pkt) Napisz program w Pythonie klasy TrustedCustomer. Klasa ma spełniać następujące właściwości:
- Dziedziczyć po klasie Customer (zajrzyj do modułu exam) oraz mieć dodatkowy atrybut: discount_value.
- Mieć konstruktor, który przyjmuje następujące dane:
nazwa
,mail
,wartość zniżki
. Nazwa i mail mają być przekazywane do konstruktora klasy nadrzędnej. Konstruktor ma sprawdzać, czy podana zniżka jest poprawna. Jeżeli jest – to go nastawiać, jeżeli nie – to wartość ma być ustawiona na 0.0. - Mieć prywatną metodę check_discount(value) – zniżka poprawna jeśli jest z przedziału <0.03;0.25>. Funkcja ma zwracać wartość logiczną.
- Mieć publiczną metodę use_discount() – ciało metody może zostać puste (lub zwrócić wartość None).
- Mieć publiczną funkcję set_discount_value(new_discount_value) i get_discount_value(). Funkcja set ma nastawiać zmienną discount_value (jeżeli podana nowa wartość spełnia założenia), a funkcja get – ją zwracać.
- Naspisać publiczną funkcję get_total_price() w sposób uwzględniający zniżkę