Lai snieg!

Palīdzēsim Ziemassvētku vecītim kopā!

Draugiem Group konkurss

Tev ir divi lieli uzdevumi – aizmugursistēmā (angļu v. back-end) ir jāizveido 4 PHP funkcijas, kuras iegūst datus no MySQL datubāzes, savukārt priekšgalsistēmā (angļu v. front-end) jāizveido reaģējoša tīmekļa vietne! Darba ir daudz, bet laiks – tikai 4 astronomiskās stundas, tāpēc izvērtē kārtīgi, ko darīsi, bet ko iespējams izlaidīsi.

Datubāze

Ziemassvētku vecītis bērnu atsūtītās vēstules glabā MySQL datubāzē. Tomēr kurš katrs nevar saņemt dāvanas, tāpēc datubāzē tiek glabātas arī bērnu sekmes. Tā Ziemassvētku vecītis var izvērtēt, kurš ir bijis centīgs, bet kurš – ne tik ļoti.

Piekļuve datubāzei

  • Datubāzes serveris (host): server43.areait.lv
  • Lietotājvārds: jekabsar_reader
  • Parole: Christmas2022
  • Datubāzes nosaukums: jekabsar_christmas

Datubāzes uzbūve

Tabula children

Kolonnas nosaukumsKolonnas apraksts
idPrimārā atslēga
firstnameVārds
middlenameOtrais vārds, ja ir
surnameUzvārds
ageVecums

Tabula gifts

Kolonnas nosaukumsKolonnas apraksts
idPrimārā atslēga
nameDāvanas nosaukums
count_availablePieejamais dāvanu skaits

Tabula grades

Kolonnas nosaukumsKolonnas apraksts
idPrimārā atslēga
student_idĀrējā atslēga uz tabulu children
subjectMācību priekšmets
grade1. semestra vērtējums ballēs

Tabula letters

Kolonnas nosaukumsKolonnas apraksts
idPrimārā atslēga
sender_idĀrējā atslēga uz tabulu children
letter_textVēstules teksts

Aizmugursistēma (back-end)

Šo uzdevumu pildi skola.hex.lv, ielogojoties ar savu lietotājvārdu un paroli. Vispirms jaunā failā (nosaukums nav būtisks) izveido savienojumu ar datubāzi, tad izpildi turpmāk prasīto! Kad uzdevums pabeigts, nokopē visu savu PHP kodu lokāli failā back-end.php (vairāk informācijas skatīt 5. punktā).

1. Funkcija gifts_to_array($id)

Ir zināms, ka ikkatra atsūtītā vēstule beidzas ar tekstu dāvanas:, pēc kā seko dāvanu saraksts, kuras sūtītājs vēlas saņemt svētkos. Tāpat ir zināms, ka katrs sūtītājs ir iesūtījis tikai vienu vēstuli. Tavs uzdevums ir izveidot funkciju gifts_to_array($id), kura:

  • saņem vienu argumentu – vēstules sūtītāja id (sender_id);
  • atgriež masīvu ar dāvanām, kuras vēstules sūtītājs vēlas saņemt.

Vari pārbaudīt, vai funkcija darbojas, kā nākas. Ja tavā kodā ieraksta rindiņu

echo implode(", ", gifts_to_array(18));

, tad skola.hex.lv konsolē parādās rezultāts:

kluči, lelle, ragavas, cimdi

2. Funkcija has_been_good($id)

Vēstuļu sūtītāji ir skolas vecuma bērni. Ikkatram no viņiem ir ne tikai Ziemassvētku vēlmes, bet arī šajā semestrī skolā saņemtās atzīmes. Ir uzskatāms, ka skolēns bijis centīgs bērns un saņems dāvanas, ja viņa vidējā atzīme ir 5 vai vairāk. Pretējā gadījumā dāvanas skolēns nesaņems*. Tavs uzdevums ir izveidot funkciju has_been_good($id), kura:

  • saņem vienu argumentu – skolēna id (student_id);
  • atgriež patiesumvērtību (boolean): true, ja skolēns ir nopelnījis dāvanas, turpretim false, ja dāvanas nepienākas.

Vari pārbaudīt, vai funkcija darbojas, kā nākas. Ja tavā kodā ieraksta rindiņu

echo has_been_good(19) ? "true" : "false";

, tad skola.hex.lv konsolē parādās rezultāts:

true

* Šis ir vienkāršots uzdevums. Reālajā dzīvē tikai atzīmes vien nevar noteikt to, cik centīgs un labestīgs ir cilvēks.

3. Funkcija summarize_children($offset, $count)

Lai Ziemassvētku vecīša darbu atvieglotu, datus par bērniem ir nepieciešams attēlot konsolē sakopotā veidā. Tavs uzdevums ir izveidot funkciju summarize_children($offset, $count), kura:

  • saņem divus argumentus:

    • $offset – bērni tiek sakārtoti alfabēta secībā pēc uzvārda un $offset norāda, no kura ieraksta pēc kārtas rādīt rezultātus konsolē (ja rādīt no paša pirmā ieraksta, tad $offset = 0),
    • $count – cik ierakstus (bērnus, rindiņas) parādīt konsolē;
  • skola.hex.lv konsolē izvada sarakstu, kur katrā rindiņā (rindiņas atdalīt var ar echo "\n";) redzams:

    • bērna vārds (arī otrs vārds, ja tāds ir),
    • bērna uzvārds,
    • tas, vai bērns saņems dāvanas (jā vai nē),
    • bērna atsūtītajā vēstulē minētais vēlamo dāvanu saraksts, kur dāvanas viena no otras atdalītas ar komatu.

Vari pārbaudīt, vai funkcija darbojas, kā nākas. Ja tavā kodā ieraksta rindiņu

summarize_children(6, 3);

, tad skola.hex.lv konsolē parādās rezultāts:

Ivanda Kandava. Saņems dāvanas? Jā! Vēlas: kluči, lelle, ragavas, cimdi

Marija Guna Kriščo. Saņems dāvanas? Jā! Vēlas: lego, kāmītis

Anna Liepiņa. Saņems dāvanas? Nē! Vēlas: kaķēns

4. Funkcija not_enough()

Arī Ziemassvētku vecīša dāvanu krājumi ir ierobežoti, un var gadīties, ka dāvanu ir mazāk nekā nepieciešams. Ir zināms, ka katrs bērns vēlas tikai tādas dāvanas, kuras ir Ziemassvētku vecīša sarakstā (tabulā gifts), kā arī nav itin nevienas kļūdas dāvanu nosaukumos, kurus bērni minējuši savās vēstulēs. Ja bērns atzīmju dēļ dāvanas nesaņems, tad viņa vēlmes nav jāņem vērā (dāvanas nav jāskaita). Tavs uzdevums ir izveidot funkciju not_enough(), kura:

  • nesaņem nevienu argumentu;
  • skola.hex.lv konsolē izvada tās dāvanas, kuras vēl trūkst, kā arī skaitu, cik šādas dāvanas vēl nepieciešams sagatavot pirms svētkiem (katra dāvana jaunā rindiņā, rindiņas var atdalīt ar \n).

Vari pārbaudīt, vai funkcija darbojas, kā nākas. Ja tavā kodā ieraksta rindiņu

not_enough();

, tad skola.hex.lv konsolē parādās vairākas rindiņas (neatklāšu, cik), no kurām divas ir:

Skandas => trūkst 1

Ragavas => trūkst 2

5. Koda sagatavošana iesniegšanai

Tas arī aizmugursistēmai viss! Savu izveidoto PHP kodu gan neatstāj skola.hex.lv, bet izpildi turpmāk aprakstīto, citādi kods netiks ņemts vērā.

  1. Mapē Documents izveido apakšmapi christmas.
  2. Atver mapi christmas ar IDE Visual Studio Code.
  3. Izveido failu back-end.php.
  4. Pārkopē visu savu kodu no skola.hex.lv uz failu back-end.php.
  5. Saglabā izmaiņas, vēlāk, pašās darba beigās mapi christmas saarhivētā formātā tu iesūtīsi Skolo.lv.

Priekšgalsistēma (front-end)

Ziemassvētku vecītis, lai atvieglotu savu darbu, ir nolēmis izveidot tīmekļa vietni Vēstule Ziemassvētku vecītim. Paredzēts, ka tajā ikviens var nosūtīt Ziemassvētku vecītim vēstuli ar vēlmju sarakstu, izpildot 3 vienkāršus soļus. Un nu pati labākā daļa – šīs vietnes izveidi Ziemassvētku vecītis ir uzticējis tieši tev!

Prasības

  • Fonts visam tekstam: Josefin Sans.
  • Izmantojamās krāsas:
    • #165b33
    • #146b3a
    • #f8b229
    • #ea4630
    • #bb2528
    • melna, balta un pelēka pēc izvēles.
  • Lapai ir jābūt reaģējošai (angļu v. responsive) – tai labi jāizskatās kā uz iPhone SE ekrāna, tā arī uz MacBook Air 13'' ekrāna.
  • Pēc iespējas jāizmanto HTML Semantic Elements.
  • Jāseko labajai praksei – jaātdala HTML, CSS, JavaScript, nevajadzētu lietot inline styles, CSS atslēgvārdu !important u.c.
  • Kad tiek nospiesta poga Sūtīt!, konsolē parādās:

    Vārds: [lapas lietotāja ierakstītais vārds]

    Uzvārds: [lapas lietotāja ierakstītais uzvārds]

    Vēstules teksts: [lapas lietotāja ievadītais vēstules teksts]

    Izvēlētās dāvanas: [lapas lietotāja izvēlēto dāvanu nosaukumi, atdalīti ar komatu]

  • Zemāk ir dots video, kurā redzams, kā jāizskatās gala vietnei.

Paraugs

Resursi

Šeit vari iegūt nepieciešamos attēlus. Spied ar labo peles pogu un lejuplādē!

Book
Write
Ball
Choose
Lego Robot Sled Toy
Send

Darba iesniegšana

Lūdzu, visus failus – back-end.php, HTML, CSS, JavaScript, attēlus – saarhivē vienā .zip arhīvā un iesniedz Skolo.lv uzdevumā Draugiem Group konkurss.

Vērtēšanas kritēriji

Kopā par darbu var iegūt 88 punktus: 40 par aizmugursistēmu, 48 par priekšgalsistēmu. Detalizētu vērtēšanas kritēriju apskatu vari atrast šeit vai arī Skolo.lv uzdevumā Draugiem Group konkurss