OO2/Lab 3 2021

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

V1

Zadatak se pojavio na junskoj trećoj laboratorijskoj vežbi u prve dve grupe, i postavka osnovnog zadatka je dostupna na stranici predmeta.

  • Ukus se stvara sa zadatim nazivom, cenom po 20ml i bojom (Color). Svi parametri mogu da se dohvate. Moguće je uporediti dva ukusa na jednakost. Dva ukusa su jednaka ukoliko su im imena jednaka. Moguće je sastaviti tekstualni opis ukusa u obliku [ime].
  • Sladoled u čaši se sastoji od proizvoljnog broja ukusa. Za svaki ukus se pamti i količina u mililitrima. Sladoled se stvara prazan sa zadatom veličinom čaše u mililitrima. Moguće je dodati zadatu količinu zadatog ukusa. Ukoliko bi se takvim dodavanjem prevazišla veličina čaše, dodaje se odgovarajuća količina do pune čaše. Dodavanjem već postojećeg ukusa ažurira se samo njegova količina u sladoledu. Tekstualni opis sladoleda je u obliku ukusi, gde su ukusi svi sadržani ukusi i njihove količine, razdvojeni razmacima, u obliku količinamlukus. Moguće je izračunati cenu sladoleda. Moguće je uporediti dva sladoleda na jednakost, čime se porede svi ukusi i njihove količine. Moguće je postaviti veličinu čaše.
  • Narudžbina sadrži sladoled. (?)
  • Generator narudžbina ima mogućnost da generiše sladoled nasumične veličine (jedne od 100, 200 ili 400ml), sa nasumičnim brojem ukusa (od 1 do 3) i nasumičnim ukusima (od raspoloživih u aparatu), tako da zbir količina ukusa bude jednak veličini čaše.[1]
  • Aktivni spisak narudžbina generiše po narudžbinu na svakih 4 sekunde. Stvara se sa maksimalnim brojem narudžbina na spisku, i dok je spisak pun ne generišu se dalje narudžbine. Moguće je dodati i obrisati narudžbinu sa spiska. Pri dodavanju narudžbine na spisak, dodaje se u tekstualni spisak narudžbina kao i u listu narudžbina.
  • Mesto za točenje sladoleda je aktivno platno (Canvas). Stvara se sa zadatim aparatom za točenje (videti niže) koji je vlasnik mesta za točenje i sadrži sladoled koji može da se dohvati. Mesto za točenje ciklično iscrtava progres točenja ukusa u sladoled na svakih 0.5 sekundi. U svakoj iteraciji iscrtava se pravougaonik u boji ukusa koji se trenutno toči u sladoled, dodaje se količina od 20ml tog ukusa u sladoled i postavlja se tekst natpisa (labele) u aparatu (videti niže). Pravougaonici se iscrtavaju od donje ka gornjoj ivici platna jedni iznad drugih. Visina pravougaonika se dobija kao procentualni deo visine platna koji odgovara količini od 20ml u odnosu na veličinu čaše. Točenje se završava kada se iscrta celokupan progres točenja do vrha i tada se aparatu za točenje omogućava prodaja (videti niže). Moguće je pokrenuti točenje pri čemu se tada kreira sladoled od zadate veličine. Moguće je privremeno zaustaviti, nastaviti ili završiti točenje. Moguće je ispitati da li je točenje u toku. Moguće je postaviti trenutni ukus koji se toči u sladoled.
  • Aparat za točenje je panel koji sadrži mesto za točenje, panel sa proizvoljnim brojem dostupnih ukusa, dugme za prodaju sladoleda koje je inicijalno neaktivno, dugme za brisanje sladoleda koje je inicijalno neaktivno, dugmad za biranje veličine sladoleda (100ml, 200ml i 400ml) i labelu za prikaz sladoleda iz mesta za točenje, čiji je tekst moguće postaviti. Panel sa dostupnim ukusima sadrži dugmad u formatu rešetke. Natpis dugmeta odgovara tekstu ukusa. Moguće je dodati novo dugme za zadati ukus u panel sa dostupnim ukusima. Greška je ukoliko ukus već postoji. Pritiskom tastera miša na dugme dostupnog ukusa, mestu za točenje se postavlja trenutni ukus na osnovu pritisnutog dugmeta i pokreće točenje ukoliko nije pokrenuto, odnosno nastavlja već započeto točenje. Otpuštanjem tastera miša privremeno se zaustavlja točenje. Moguće je omogućiti prodaju sladoleda i tada dugme za prodaju postaje aktivno. Pritiskom na dugme za prodaju, završava se točenje i briše crtež na mestu za točenje (kanvasu), sladoled na mestu za točenje se ispisuje na standardnom izlazu i dugme za prodaju postaje ponovo neaktivno. Ukoliko se prodati sladoled poklapa sa jednom od narudžbina, narudžbina se uklanja iz liste narudžbina i omogućava se generisanje sledeće. Pritiskom na dugme za brisanje sladoleda odbacuje se trenutni sladoled na mestu za točenje. Biranjem veličine sladoleda menja se veličina čaše trenutnog sladoleda u mestu.
  • Sladoleddžinica je glavni prozor aplikacije (sa slike) koji sadrži aparat za točenje, lista u kojoj se se prikazuju narudžbine koje pristižu (maksimalno 4 narudžbine), labela koja prikazuje trenutnu količinu novca zarađenog od prodaje sladoleda koja se ažurira pri svakoj prodaji sladoleda, dugme za otvaranje i zatvaranje sladoledžinice kojim se pokreće generisanje narudžbina i panel za dodavanje novog ukusa u aparat za točenje sa zadatim nazivom, bojom i cenom na 20ml i u kome se takođe nalazi dugme za početak generisanja narudžbina. Boja ukusa koji se dodaje se zadaje u heksadecimalnom formatu. Prelaskom miša preko jednog dugmeta za biranje veličine sladoleda na njemu treba da se poveća veličina fonta i podeblja i vrati na prethodno stanje kada miš više ne prelazi preko dugmeta.

V2

Zadatak se pojavio na junskoj trećoj laboratorijskoj vežbi u druge dve grupe, i postavka osnovnog zadatka je dostupna na stranici predmeta.

  • Generator slučajnih celih brojeva generiše slučajne cele brojeve na zahtev. Moguće je zahtevati jedan slučajan ceo broj ili niz od n elemenata u zadatom opsegu donje i gornje granice. Zadate granice su inkluzivne.
  • Generator jedinstvenih celih brojeva je generator koji generiše niz sa jedinstvenim brojevima pomoću heš seta(HashSet).
  • Polje je platno (Canvas) koje se stvara sa zadatom dvodimenzionom mrežom (videti niže) kojoj pripada i zadatom celobrojnom vrednošću (broj) koja predstavlja natpis (labelu) na polju i koja može da se dohvati. Polje može imati jedan od sledećih statusa: SLOBODNO, IZABRANO, OZNACENO, POGODJENO i PROMASENO, koji se može postaviti i dohvatiti. Podrazumevano, polje ima status SLOBODNO, a širina i visina su mu 75 piksela, boja pozadine mu je narandžasta, a broj je ispisan crnom bojom na sredini polja i zauzima jednu trećinu manje dimenzije polja (potrebno je obezbediti promenu veličine sadržaja polja pri promeni veličine prozora). Polje statusa IZABRANO unutar celog polja iscrtava elipsu popunjenu plavom bojom, a broj je ispisan belom bojom. Polje statusa OZNACENO unutar celog polja iscrtava elipsu popunjenu belom bojom, a broj je ispisan crnom bojom. Polje statusa POGODJENO unutar celog polja iscrtava elipsu popunjenu zelenom bojom, a broj je ispisan crnom bojom. Polje statusa PROMASENO unutar celog polja iscrtava elipsu popunjenu crvenom bojom, a broj je ispisan crnom bojom. Klikom levog tastera miša na polje menja se njegov status (ukoliko je status polja SLOBODNO ono postaje IZABRANO i obrnuto) i polje prosleđuje mreži informaciju da se njegov status promenio.
  • Mreža je panel koji sadrži pravougaonu matricu polja i listu (ArrayList) polja koja imaju status IZABRANO i koja može da se dohvati. Stvara se sa zadatim celobrojnim dimenzijama (podrazumevano 4 h 5) i igrom (videti niže) kojoj pripada. Prilikom stvaranja mreže, polja se dodaju u mrežu redom po vrstama, pri čemu se poljima zadaju sukcesivne celobrojne vrednosti, a numeracija kreće od vrednosti 0. Polja su razmaknuta jedna od drugih za 3 piksela, a boja pozadine mreže je crna, tako da se postigne efekat polja raspoređenih u mreži. Moguće je dohvatiti skup (HashSet) koji čine svi celi brojevi polja mreže sa statusom IZABRANO. Promenom statusa nekog njenog polja, mreža ažurira listu polja sa statusom IZABRANO i prosleđuje igri informaciju da je polje promenilo status. Moguće je zaključati polja mreže, čime ta polja ne reaguju na pritiske miša. Moguće je promeniti poljima čiji se brojevi nalaze u zadatoj listi status na IZABRANO, dok se ostalima menja na SLOBODNO.
  • Aktivan rulet je klasa koja animira izbor brojeva. Stvara se sa zadatom mrežom. Sadrži niz brojeva polja koja se animiraju koji se nasumično generišu i ne moraju biti jedinstveni. Veličina niza je slučajno generisana vrednost između 30% i 70% veličine mreže. Može se dohvatiti poslednji animirani broj, čime se pozivajuća nit blokira ukoliko rulet nije završio (ovo služi samo za proveru pogodtka broja). Animacija treba biti sledeća za svaki član niza: počinje tako što se polje koje predstavlja taj član niza postavi na status OZNACENO, zatim se čeka određeno vreme čekanja (inicijalno 200ms, a svake sledeće iteracije se povećava 10%) i zatim vratiti prethodni status polju.
  • Aktivno izvlačenje je klasa koja izvlači broj s ruleta. Stvara se sa zadatom igrom i brojem rundi. Potrebno je implementirati tako da pri pokretanju ova klasa ponovi isti ciklus koliko ima rundi. Ciklus se sastoji od toga da pokrene rulet, pokupi s ruleta poslednji animirani broj i obavesti igru da je izvučen broj. Ako je broj koji je izvučen bi izabran, potrebno je postaviti status tog polja na POGODJENO u suprotnom status je PROMASENO. Zatim treba čekati 1000ms posle čega treba povratiti stari status polja. Dok traje izvlačenje, nije moguće birati polja, odnosno mreža treba biti onemogućena. Moguće je dohvatiti trenutni broj runde, kao i ukupan broj rundi.
  • Istorija izvlačenja je panel koji sadrži listu stavki (videti sliku) i stvara se sa maksimalnim kapacitetom. Stavke su objekti klase TextArea bez vertikalnog i horizontalnog skrol bara. Moguće je dodati stavku. U slučaju da se dodaje stavka koja bi prešla maksimalni kapacitet, potrebno je izbaciti najraniju stavku. Stavka treba da sadrži broj runde, izvučen broj, ulog i dobitak.
  • Igra je glavni prozor aplikacije (sa slike) koji sadrži jednu mrežu podrazumevane veličine (u centru), koja može da se dohvati, jedan panel za istoriju izvlačenja (sa leve strane), jedan panel za upravljanje (sa desne strane) i statusnu traku (na dnu). Igru je moguće započeti samo ukoliko se izabere barem jedno polje. Ulog ima podrazumevanu vrednost 100. Broj rundi ima podrazumevanu vrednost 4. Izborom polja (promenom njegovog statusa) ili izmenom vrednosti uloga vrši se ažuriranje vrednosti kvote i dobitka koji se prikazuju u prozoru aplikacije. Vrednost kvote se računa kao količnik ukupnog broja polja i broja polja sa statusom IZABRANO. Vrednost dobitka se računa kao proizvod kvote i uloga. Igra se započinje klikom na dugme Igraj nakon čega se pokreće izvlačenje. Generisani broj ispisuje se u statusnoj traci na dnu prozora, koja se boji zelenom bojom ukoliko je generisani broj jedan od brojeva na izabranim poljima mreže (broj je pogođen), odnosno crvenom bojom u suprotnom (broj je promašen). Ukoliko je generisani broj pogođen, vrši se dodavanje vrednosti dobitka na vrednost balansa, dok se, ukoliko je broj promašen, vrši oduzimanje vrednosti uloga od vrednosti balansa. Bez obzira na pogodak, sa balansa se dodatno oduzima vrednost uloga. Inicijalna vrednost balansa je 0. Inicijalno, boja statusne trake je tamno-siva. Glavni prozor sadrži meni sa opcijama Par (bira sve parne brojeve mreže), Nepar (bira sve neparne brojeve mreže), Pola (izabere nasumično pola mreže) i opciju Brisi koja svim poljima stavlja status SLOBODNO. Treba onemogućiti ove opcije dok traje proces izvlačenja.

V3

Zadatak se pojavio na julskoj trećoj laboratorijskoj vežbi, i postavka osnovnog zadatka je dostupna na stranici predmeta.

  • Broj telefona se stvara sa zadatim kodom države, pozivnim brojem i brojem pretplatnika. Moguće je proveriti da li su dva zadata broja registrovana u istoj državi (da li imaju isti kod države). Moguće je proveriti da li su dva zadata broja u istoj mreži (da li imaju isti kod države i pozivni broj). Moguće je proveriti da li je broj telefona jednak drugom zadatom broju telefona. Moguće je sastaviti tekstualni opis broja telefona u obliku +kod_države pozivni_broj broj_pretplatnika. Broj telefona je moguće stvoriti i sa zadatom niskom karaktera koja je u istom formatu kao i tekstualni opis bez znakova razmaka, pri čemu se smatra da je kod države dužine 3 karaktera, pozivni broj 2 karaktera, a preostali karakteri predstavljaju broj pretplatnika.
  • Stavka je panel koji sadrži dva natpisa (labele) koji se prikazuju jedan ispod drugog. Prvi natpis predstavlja naslov i prikazan je podebljanim slovima, dok drugi natpis predstavlja tekst. Naslov i tekst se zadaju prilikom stvaranja stavke. Moguće je naknadno promeniti naslov stavke.
  • Lista stavki je panel koji sadrži proizvoljan broj stavki. Stvara se prazna nakon čega se stavke dodaju pojedinačno. Stavke se prikazuju u jednoj koloni i potrebnom broju redova.
  • Kontakt je stavka koja se stvara sa zadatim imenom korisnika i njegovim brojem telefona. Ime korisnika predstavlja naslov stavke, a broj telefona tekst stavke.
  • Imenik je lista stavki u koje je moguće dodati samo kontakte. Moguće je dohvatiti ime korisnika sa zadatim brojem telefona. Greška je (GNePostoji) ukoliko se zadati broj telefona ne nalazi u imeniku. Moguće je dohvatiti broj telefona korisnika sa zadatim imenom. Greška je (GNePostoji) ukoliko se zadato ime ne nalazi u imeniku.
  • Poruka je stavka koja se stvara sa zadatim brojem telefona pošiljaoca, brojem telefona primaoca i tekstom. Broj telefona pošiljaoca je naslov stavke, a tekst poruke je tekst stavke. Primaoca poruke je moguće naknadno promeniti. Moguće je dohvatiti realnu cenu poruke.
  • SMS je poruka. Ukoliko se SMS šalje u inostranstvo njegova cena je 10. Ukoliko se SMS šalje unutar zemlje, ali u drugu mrežu njegova cena je 6. Ukoliko se SMS šalje unutar zemlje, unutar iste mreže njegova cena je 3.
  • Izveštaj o slanju je poruka koja se stvara sa zadatom SMS porukom na koju se odnosi i statusom slanja (DOSTAVLJENO, NEMA_KREDITA, KORISNIK_NIJE_REGISTROVAN). Broj telefona pošiljaoca izveštaja je jednak broju telefona primaoca poruke. Broj telefona primaoca izveštaja je jednak broju telefona pošiljaoca poruke. Tekst izveštaja je jednak tekstualnoj reprezentaciji statusa slanja. Cena izveštaja je 0.
  • Sanduče je lista stavki u koju je moguće dodati samo poruke.
  • Telefon je panel koji se stvara sa zadatim brojem telefona, operaterom (videti niže) i bojom. Može da se dohvati broj telefona. Telefon sadrži sanduče za prijem poruka (podrazumevano prazno), imenik i tastaturu (videti niže). Prilikom kreiranja telefon se registruje kod operatera. Imenik telefona pri stvaranju ima samo jedan kontakt i to broj telefona operatera sa imenom korisnika "OPERATER". Telefon može da primi zadatu poruku, pri čemu se poruka ubacuje u sanduče za prijem poruka. Ukoliko se radi o SMS poruci, dodatno se operateru šalje izveštaj sa statusom DOSTAVLJENO. Prilikom prikaza prispelih poruka, ukoliko se broj telefona pošiljaoca nalazi u imeniku telefona, u naslovu stavke se prikazuje ime korisnika, a ne broj telefona. Moguće je poslati SMS poruku tako što se pomoću tastature telefona unese broj telefona primaoca poruke i tekst poruke SMS poruka se prosleđuje operateru koji je dalje obrađuje. Moguće je dodati novi kontakt u imenik tako što se pomoću tastature unese broj telefona, a zatim i ime korisnika. Telefon je moguće uključiti i isključiti. Kada je telefon isključen, odgovarajuće dugme je crvene boje sa tekstom „Uključi telefon“. Ukoliko je telefon isključen, operacija primanja poruke blokira pozivaoca dok se telefon ne uključi.
  • Aktivna tastatura je panel koji se stvara sa zadatim natpisom čiji tekst se menja kucanjem po tastaturi. Natpis je moguće naknadno promeniti. Tastatura se sastoji od 12 dugmadi poređanih u mrežu 4 x 3. Tastatura ima dva režima rada. U prvom režimu se unosi broj telefona i na dugmadima su prikazani brojevi 0-9 i znakovi * i + (videti sliku). U drugom režimu se unosi tekst i na dugmadima su prikazana slova alfabeta i znak za razmak (videti sliku). Režim rada tastature je moguće promeniti. Prilikom unosa teksta jedno dugme se odnosi na više različitih slova. Ukoliko nakon pritiska dugmeta protekne više od jedne sekunde, uneto slovo ostaje sačuvano u otkucanom tekstu. Takođe, uneto slovo ostaje sačuvano i ukoliko protekne manje od jedne sekunde, ali se pritisne drugo dugme tastature. Ukoliko se isto dugme pritisne ponovo u roku od jedne sekunde, menja se trenutno slovo u sledeće slovo po kružnom redosledu slova na dugmetu koje je pritisnuto. Primer: da bi se otkucala reč CAO potrebno je pritisnuti dugme na kojem je ispisano ABC tri puta kako bi se došlo do slova C (interval između pritisaka treba da bude manji od 1s), zatim sačekati da protekne jedna sekunda, pritisnuti ponovo dugme na kojem je ispisano ABC kako bi se ispisalo slovo A, a zatim tri puta pritisnuti dugme na kojem je ispisano MNO kako bi se ispisalo slovo O. Nakon slova A nije potrebno čekati jednu sekundu.
  • Aktivni Operater je zadužen za praćenje registrovanih korisnika i prosleđivanje poruka. Stvara se sa zadatim brojem telefona koji koristi za broj pošiljaoca kada šalje korisnicima izveštaje i ponavljajuće poruke (+38164000000 u video snimku). Korisnik se kod operatera registruje zadatim telefonom. Prilikom registracije svaki korisnik dobija kredit u iznosu od 10. Operater čuva informacije o iznosima kredita svojih korisnika. Kredit se koristi za slanje poruka. Operateru je moguće dostaviti poruku koja se šalje. Obrada i slanje svake poruke se vrši u zasebnoj niti. Trajanje obrade se simulira čekanjem 2 sekunde. Nakon toga operater proverava da li su i pošiljalac i primalac poruke registrovani kod njega. Ukoliko barem jedan nije, šalje se pošiljaocu poruke izveštaj sa statusom KORISNIK_NIJE_REGISTROVAN. Ukoliko pošiljalac nema dovoljno kredita za slanje poruke, šalje mu se izveštaj sa statusom NEMA_KREDITA. Ukoliko su ispunjeni svi uslovi za slanje poruke, poruka se dostavlja telefonu primaoca, a kredit pošiljaoca se umanjuje za cenu poruke. Ukoliko je telefon primaoca poruke isključen, nit za slanje poruke se blokira dok se telefon ne uključi. Operater mora biti sve vreme na raspolaganju korisnicima. Operateru je moguće postaviti ponavljajuću poruku koja se šalje svim korisnicima na zadati vremenski interval. Prilikom postavljanja ponavljajuće poruke zadaje se tekst poruke i interval u milisekundama. Radnja operatera se sastoji u slanju zadate ponavljajuće poruke svim korisnicima na zadati vremenski interval. U primeru prikazanom na slici operater na 75 sekundi šalje svim svojim korisnicima poruku "Hello'"

Napomene

  1. Na laboratorijskoj vežbi je napomenuto da svaki ukus mora minimalno da ima 20ml.