OO1PP2 – DZ5                                                                                   Rok za izradu: 03.06.2010.

PRAKTIKUM IZ PROGRAMIRANJA 2

- domaći zadatak broj 5 -

Sastaviti program na programskom jeziku C kojim se vrši konverzija tekst datoteka sa podacima o kontaktima (engl. address book) iz jednog formata u drugi, uz određenu vrstu obrade nad podacima. Program treba da pročita ulaznu datoteku, smesti podatke u odgovarajuću listu, izvrši odgovarajuću obradu nad ulaznim podacima, upiše rezultat u odgovarajuće datoteke i dealocira svu alociranu dinamičku memoriju.

Zavisno od rednog broja problema, sastaviti jedan od sledećih programa, koji vrši konverziju:

0.   iz Microsoft Address Book Comma Separated Values (.CSV) datoteke u Mozilla Thunderbird LDAP Data Interchange Format (.LDIF) datoteku;

1.   iz Mozilla Thunderbird Comma Separated Values (.CSV) datoteke u vCard Format (.VCF) datoteku;

2.   iz Eudora address book (.TXT) datoteke u vCard Format (.VCF) datoteku;

3.   iz Eudora address book (.TXT) datoteke u Microsoft Address Book Comma Separated Values (.CSV) datoteku;

4.    iz Eudora address book (.TXT) datoteke u Mozilla Thunderbird LDAP Data Interchange Format (.LDIF) datoteku;

5.   iz Mozilla Thunderbird Comma Separated Values (.CSV) datoteke u Microsoft Address Book Comma Separated Values (.CSV) datoteku;

Glavni program treba da poziva funkcije koje obavljaju iznad navedene radnje. Sve funkcije smestiti u odgovarajuće .c datoteke (prema donjem spisku), a prototipove svih funkcija smestiti u zajedničku .h datoteku. Svaku obradu koja se ponavlja više od jednom smestiti u zasebnu funkciju. Nije dozvoljeno korišćenje globalnih promenljivih, sva razmena podataka između funkcija mora ići preko liste argumenata i povratne vrednosti funkcija. Opisi odgovarajućih formata ulaznih i izlaznih datoteka su dati u datoteci u prilogu.

U zavisnosti od rednog broja problema koji se rešava osmisliti sopstvenu strukturu/strukture za smeštanje podataka iz ulazne datoteke. Element liste koja sadrži podatke iz ulazne/ulaznih datoteka treba realizovati kao strukturu koja ima tačno tri polja – pokazivače na prethodni i sledeći element, i pokazivač na strukturu koja sadrži podatke. Voditi računa o pravilnoj alokaciji i dealokaciji dinamičke memorije.

U zavisnosti da li je definisana simbolička konstanta CMD_LINE, omogućiti da se ime ulazne i izlazne datoteke unosi preko argumenata komandne linije ili preko glavnog ulaza, što se određuje uslovnim prevođenjem, u zavisnosti od trenutne aktivne konfiguracije za prevođenje programa. U slučaju rada preko glavnog ulaza, pre prepisivanja omogućiti brisanje kontakta koji u imenu (bilo koje name polje) sadrži određeni string, koji korisnik unosi sa glavnog ulaza. Ukoliko postoji više kontakata koji zadovoljavaju dati kriterijum, ispisati/obrisati ih sve.

U slučaju bilo kakve greške (poziv programa sa neodgovarajućim brojem argumenata komandne linije, neuspešna dodela dinamičke memorije, greška pri radu sa datotekom), kod za grešku proslediti do glavnog programa preko povratne vrednosti funkcije, ispisati odgovarajuću poruku i prekinuti izvršavanje. Ispisivanje poruke o greškama vršiti samo iz glavnog programa.

Ako nešto u postavci zadatka nije dovoljno precizno definisano ili ako su neki od zahteva međusobno suprotstavljeni, usvojiti razumnu pretpostavku i rešiti zadatak korišćenjem te pretpostavke. Na samoj odbrani obavestiti demonstratora o usvojenoj pretpostavci/pretpostavkama.

Sugeriše se studentima da kao pomoć prilikom izrade i testiranja svojih rešenja pogledaju aplikacije MS Address Book i Mozilla Thunderbird, pošto one podržavaju većinu navedenih formata, a biće korišćene prilikom testiranja domaćih zadataka na samoj odbrani.

Materijal sa primerima formata je dostupan na stranici predmeta.

Napomene:

1.   Odbrana petog domaćeg zadatka je u četvrtak, 03.06.2010. po rasporedu dostupnom putem sistema WebLab.

2.   Primeri ulaznih i izlaznih datoteka za gornje probleme će biti dostupni na sajtu predmeta najkasnije nekoliko dana pred odbranu domaćeg zadatka

3.   Formula za redni broj problema i koji treba rešavati je sledeća (R – redni broj indeksa, G – poslednje dve cifre godine upisa): i = (R + G) mod 6

4.   Kao rešenje domaćeg zadatka potrebno je na odbrani pokazati sledeće datoteke:

·      dz5.h, koja sadrži prototipe svih funkcija opisanih u postavci zadatka;

·      dz5.c, koja sadrži izvorni tekst osnovnog programa na programskom jeziku C;

·      dz5_load.c, dz5_save.c, dz5_process.c, koje sadrže izvorne tekstove funkcija potrebnih za inicijalizaciju programa, čitanje, snimanje i obradu kontakata;

·      dz5.vcproj, koja sadrži informacije o projektu koji sadrži sve potrebno za osnovni program;

·      dz5.sln, koja sadrži informacije o svim projektima relevatnim za ovaj zadatak;

·      dz5_test1.ext, dz5_test2.ext, dz5_test3.ext koje sadrže nekoliko test primera koje su kandidati sami osmislili (.ext treba zameniti sa .txt, .csv, .vcf ili .ldif, zavisno od varijante).

20.05.2010. godine                                                                                                  sa predmeta