37 lines
3.5 KiB
Markdown
37 lines
3.5 KiB
Markdown
Prenesite si datoteko students.csv v kateri se nahaja seznam študentov. V datoteki je v vsaki posamezni vrstici zapisan študent v obliki id,name,surname,dateOfBirth,street,post,country. Datum je zapisan v formatu day.month.year.
|
|
|
|
Primer ene vrstice:
|
|
|
|
100432031,Simon,Novak,3.4.2001,Partizanska cesta 1,1000 Ljubljana,Slovenija
|
|
|
|
Napišite razred Address, ki ima:
|
|
instančne spremenljivke street, post, country in vse naj bodo tipa string
|
|
konstruktor s 3 parametri (za vsako instančno spremenljivko)
|
|
metodo toString
|
|
|
|
Uporabite razred Date iz predhodnih nalog. Razred naj ima:
|
|
instančne spremenljivke day, month, year in vse naj bodo tipa int
|
|
konstruktor s tremi paramteri (za vsako instančno spremenljivko)
|
|
metode get za vsako instančno spremenljivko
|
|
metodo toString ter dodatno:
|
|
razredo metodo (static) GetDateFromString, ki kot edini parameter prejme datum v obliki niza in ga vrne kot Date. V metodi prožite/vržite (throw) izjemo (UnparseableDateException), če podan niz, ki vsebuje datum, ni v pravem formatu. Izjemo npr. prožite, če datum ne vsebuje točno dve piki in če je namesto številke zapisana črka.
|
|
|
|
Napišite razred Student, ki ima:
|
|
instančne spremenljivke id (unsigned int), name (string), surname (string), dateOfBirth (Date), address (Address)
|
|
konstruktor s 4 parametri (za vsako instančno spremenljivko)
|
|
metodo toString
|
|
razredno (static) metodo std::vector<std::shared_ptr<Student>> LoadFromFile(const std::string &filename), ki iz datoteke prebere seznam študentov, jih shrani v vektor in le-tega vrne. Pri branju posameznega študenta iz datoteke v primeru napačnega formata datuma ulovite izjemo UnparseableDateException (try - catch blok)
|
|
razredno (static) metodo void SaveToFile(const std::vector<std::shared_ptr<Student>> &students, const std::string &fileName), ki v datoteko zapiše prejeti seznam študentov. Pri tem zapišite v formatu, da boste lahko z LoadFromFile prebrali.
|
|
|
|
Napišite izjemo (razred) UnparseableDateException, ki naj deduje iz sistemskega razreda std::exception. Potrebno je povoziti (angl. override) metodo const char* what() const noexcept iz nadrazreda exception. Razredu UnparseableDateException dodajte še lastnost std::string message in konstruktor, ki kot parameter prejme (napačen) datum v obliki niza in v spremenljivko message shranimo npr. niz Unparseable date: "21.5a.2020".
|
|
|
|
Pomagajte si z naslednjo povezavo: http://www.cplusplus.com/doc/tutorial/exceptions/.
|
|
|
|
V glavnem programu najprej iz datoteke preberite študente in vektor s študenti izpišite v konzolo.
|
|
|
|
V nalogi uporabljate pametne kazalce za ustvarjanje objektov shared_ptr iz standarda C++11. (https://en.cppreference.com/w/cpp/memory/shared_ptr)
|
|
|
|
Pomoč za delo z datotekami:
|
|
Za delo z datotekami si pomagajte z naslednjo povezavo: http://www.cplusplus.com/doc/tutorial/files/. Glede na to, da so podatki shranjeni v csv (angl. comma-separated values) formatu, si lahko pomagate z metodo getline(istream &is, string &str, char delim), kjer parameter is predstavlja objekt istream, iz katerega preberemo podatke, parameter str je spremenljivka, v katero se shrani prebran niz in parameter delim predstavlja ločilo, do katerega bo (trenutni) niz prebran. V vašem primeru bo prvi parameter predstavljal vhodno datoteko, drugi parameter bo spremenljivka, v katero boste shranili prebrano vrednost, tretja vrednost pa bo znak vejica (,).
|
|
|
|
students.csv |