/* Napisati program u C-u kojim se sa standardnog ulaza učitava godina i oznaka ispitnog roka, a zatim se za svako uspešno polaganje u tom roku ispisuje „može“ ili „ne može“ u zavisnosti od toga da li je student položio sve uslovne predmete za taj predmet. Izdvojiti indeks, naziv predmeta i dobijenu ocenu. */ #include #include /* ukljucujemo strukturu koja omogucava rad sa BP */ EXEC SQL INCLUDE SQLCA; /* deklaracija promenljivih kojima pristupa SQL * to su tzv host-promenljive */ EXEC SQL BEGIN DECLARE SECTION; long d_indeks; long d_id_predmeta; char d_naziv[201]; short d_ocena; short d_godina_roka; char d_oznaka_roka[6]; short d_ukupno; EXEC SQL END DECLARE SECTION; /* funkcija za obradu greske */ int iserr(char err[]){ if (SQLCODE < 0){ printf("SQLCODE %ld %s\n\n", SQLCODE, err); EXEC SQL ROLLBACK; return 1; } return 0; } /* za poziv funkcije greske koristice se makro */ #define CHECKERR(s) if (iserr(s)) exit(1); int main(){ /* povezujemo se na BP */ EXEC SQL CONNECT TO vstud user student using abcdef; CHECKERR("Connect"); /* ucitavamo oznaku i godinu ispitnog roka sa standardnog ulaza */ printf("Unesite oznaku ispitnog roka:\n"); scanf("%s", &d_oznaka_roka); getchar(); printf("Unesite godinu ispitnog roka:\n"); scanf("%d", &d_godina_roka); /* deklarisemo kursor koji izdvaja imena i prezimena studenata koji zadovoljavaju uslov zadatka */ EXEC SQL DECLARE moze_ne_moze CURSOR FOR select indeks, i.id_predmeta, naziv, ocena from ispit i join predmet p on i.id_predmeta=p.id_predmeta where i.godina_roka = :d_godina_roka and i.oznaka_roka = :d_oznaka_roka and status_prijave = 'o' and ocena > 5; CHECKERR("Declare moze_ne_moze"); /* otvaramo kursor moze_ne_moze */ EXEC SQL OPEN moze_ne_moze; CHECKERR("Open moze_ne_moze"); while(1){ EXEC SQL FETCH moze_ne_moze INTO :d_indeks, :d_id_predmeta, :d_naziv, :d_ocena; CHECKERR("Fetch moze_ne_moze"); /* ako smo naisli na kraj kursora zavrsavamo obradu */ if (SQLCODE == 100) break; /* proverava se da li su polozeni svi uslovni predmeti za taj predmet */ EXEC SQL select count(*) into :d_ukupno from uslovni_predmet where id_predmeta = :d_id_predmeta and not exists(select * from ispit where indeks = :d_indeks and id_predmeta = id_uslovnog and ocena > 5 and status_prijave = 'o'); /* vrsi se ispis procitanih vrednosti */ printf("Student - indeks = %d naziv = %s ocena = %d ", d_indeks, d_naziv, d_ocena); if (d_ukupno) printf("ne moze\n"); else printf("moze\n"); } EXEC SQL CLOSE moze_ne_moze; CHECKERR("Close moze_ne_moze"); EXEC SQL CONNECT RESET; CHECKERR("Connect reset"); return 0; }