Denarnica

Denarnica

Avtor: Urška Pikl

Učni cilji: opis problema in ideja rešitve, razlaga algoritma, testni primeri in filmček.

Navodila

  • Vsi razredi naj obvezno vsebujejo

    • Minimalni (tj. prazni) kontruktor public Razred(), ki tvori objekt s privzetimi (smiselnimi!) vrednostmi.
    • Metodo public override string ToString(), ki vse podatke v objektu zapiše v obliki niza. Podatki naj bodo med seboj ločeni z znakom ';'.
    • Polni konstruktor public Razred(string s), ki s klicem Razred(niz) generira tak objekt Razred r, za katerega velja niz = r.ToString().
    • Metodo DodajNaDatoteko(string imeDatoteke), ki objekt this zapiše (oz. doda; glej metodo File.AppendText()) kot vrstico this.ToString() v tekstovni datoteki.
    • Metodo PreberiZDatoteke(string imeDatoteke), ki vrne tabelo objektov, kjer posamezni objekt vsebuje podatke, ki so zapisani v posamezni vrstici tekstovne datoteke.
    • Metodo IzpisiDatoteko(string imeDatoteke), ki izpiše vsebino datoteke.
    • Metodo TvoriDatoteke(string imeDatoteke, int stElementov), ki tvori naključno datoteko.
    • Če je potrebno, napišite še metodo, ki izpiše tabelo elementov tega razreda.
  • Vsi razredi morajo biti robustni – vsi konstruktorji in metode morajo biti taki, da objekta ne spravijo v nesmiselno stanje. Če je potrebno, pri klicu metode s nedopustnimi parametri sproži izjemo. Razred je potrebno napisati kot 'class library' v ločenem projektu v isti rešitvi. Pri sestavljanju razredov si prej oglejte probleme, ki jih rešujete, da boste vedeli, kako mora biti razred zgrajen (katere podatke in metode naj vsebuje). V testnem programu, s katerim prikažete ključne funkcionalnosti razreda, naredite naslednje:

    • Napišite ustrezne metode za reševanje zastavljenih problemov.
    • V programu samem pa po vrsti
    • Pokličite metodo, ki na datoteko zapiše ducat objektov.
    • Preberite vse podatke z datoteke v tabelo.
    • Tabelo pregledno izpišite.
    • Nato kličite metode, ki so potrebne, da rešite zastavljene probleme in pregledno izpišite rezultate.
    • Na koncu na isto datoteko ponovno zapišite vseh objektov (ne glede na to, ali so jih zgornje metode spremenile ali ne).
  • Sestavi razred Denarnica, ki vsebuje tri komponente:

    • celoštevilsko spremenljivko, ki predstavlja količino evrov v njej
    • celoštevilsko spremenljivko, ki predstavlja količino centov v njej
    • spremenljivko tipa string, ki vsebuje ime lastnika denarnice.
    • Napiši metode get in set.
    • Napiši metodo Opis(), ki vrne niz V denarnici, katere lastnik je #ime_lastnika, je #st_evrov evrov in #st_centov centov.
    • Izračunaj, koliko denarja imajo skupaj osebe v tabeli Denarnica[].
    • Cela skupina (beri vsi v tabeli) lastnikov denarnic se je odpravila v banko. Tam so vse svoje cente "pretopili" v evre (kolikor je šlo, seveda). Če je nekdo imel prej 6€ in 245 centov, ima sedaj v denarnici 8€ in 45 centov.
    • Izpiši imena vseh tistih oseb, ki si lahko privoščijo nakup banjice sladoleda, ki stane 4€ 45 centov. Seveda so vse osebe, ki to lahko, opravile nakup. Pazi, da bodo njihove denarnice odražale to stanje.
    • Iz dane datoteke denarnic izbriši vse, v katerih je vsaj X in ne več kot Y denarja.
    • Nekatere osebe imajo več denarnic. Tvori novo datoteko s podatki o denarnicah tako, da se v njej vseka oseba pojavi le enkrat. Praznih denarnic ne beleži.

Opis problema in ideja rešitve

Razlaga algoritma

Razred

  • Najprej smo definirali spremenljivke, v katerih so shranjeni evri, centi v denarnici ter ime lastnika. Vsaki spremenljivki smo določili tudi get in set metodo. Pri set metodah pri določanju števila evrov in centov preverimo, če slučajno ni vnešeno število negativno in v tem primeru sprožimo izjemo.
  • V praznem konstruktorju naredimo denarnico z lastnikom, ki je prazen niz. V denarnici sta vrednosti evrov in centov nastavljeni na 0.
  • V polnem konstruktorju določimo vse vrednosti s pomočjo set metod.
  • V funkciji ToString() vrnemo ime lastnika, število evrov in centov v enem nizu, podatki pa so med seboj ločeni s podpičjem.
  • Konstruktor, ki iz niza oblike ime_lastnika;evri;centi naredi objekt tipa denarnica najprej razbije niz z metodo split, kjer je separator podpičje. Nato preverimo, če je bilo vnešenih podatkov dovolj in sprožimo izjemo, če je podatkov premalo. Nato poskusimo še pretvoriti evre in cente v število in če ne gre, sprožimo izjemo.
  • V funkciji DodajNaDatoteko zapišemo objekt this na dano datoteko v parametru funkcije. Najprej moramo seveda preveriti, če datoteka obstaja, nato pa napisati podatke o denarnici na datoteko. Dodamo z ukazom File.AppendText().
  • Funkcija, ki prebere denarnice z datoteke in jih vrne v tabeli najprej preveri, če dana datoteka obstaja, nato pa prebere vsako vrstico v datoteki in niz pretvori v objekt tipa denarnica, ter ga shrani v tabelo. Ker iz niza tvorimo objekte tipa denarnica s konstruktorjem, ki smo ga že definirali, se nam ob nepravilnih podatkih sproži izjema sama od sebe.
  • Funkcija za izpis datoteke prebere celo datoteko, in izpiše vsako vrstico na konzolo.
  • V funkciji, v kateri želimo napisati nekaj naključnih denarnic na datoteko, najprej odpremo datoteko za pisanje, nato pa naključno generiramo niz za ime lastnika denarnice, ter naključni celi števili za število evrov in centov shranjenih v denarnici. Naredimo objekt tipa denarnica in ga zapišemo na datoteko.
  • V funkciji Opis poskrbimo, da se nam na konzolo lepo izpiše objekt this.

Testni

Za potrebe testiranja razreda, smo napisali naslednje funkcije:

  • KolikoDenarjaJeVTabeli(Denranica[] tabelaDenarnic), ki izračuna, koliko evrov in centov je v denarnicah v tabeli skupaj. Rezultat izpiše na konzolo.
  • Funkcija VBanko iz dane tabele denarnic pretopi v vsaki denarnici cente v ustrezno število evrov.
  • Nakup v tabeli denarnic odšteje vsaki denarnici dano število evrov in centov. Vsaki denarnici, ki ima dovolj denarja za nakup, odšteje dan znesek in izpiše lastnika na konzolo.
  • Funkcija Izbriši() iz dane datoteke izbriše denarnice, ki imajo denarja med danimi vrednostimi evrov in centov.

    • Najprej pretvorimo mejne vrednosti centov, če jih je več kot 100 v ustrezno število evrov.
    • Preverimo in vrnemo izjemo, če je spodnja meja večja od zgornje meje.
    • Preberemo z datoteke denarnice in jih shranimo v tabelo (To naredimo z funkcijo v razredu, ki nam že sama preverja pravilnost podatkov).
    • Definiramo nov seznam denarnic, v katerega bomo shranjevali ustrezne denarnice.
    • Vsaki denarnici v tabeli preverimo, če je vrednost zunaj določene meje, in denarnico dodamo v seznam.
    • Na koncu iz seznama shrnaimo dnarnice na datoteko.
  • Funkcija Nova() iz dane datoteke denarnic istim lastnikom prenese denar iz večih denarnic na eno samo in prazne denarnice ignorira. Potem polne denarnice shrani na novo datoteko.

    • V tabelo shrnaimo vse denarnice z datoteke. Generiramo tudi nov seznam, v katerega bomo dodajali nove denarnice.
    • Za vsako denarnico v tabeli preverimo če je denarnica s tem lastnikom že v seznamu. Če je še ni, jo dodamo v seznam. Če je v seznamu že denarnica tega lastnika, potem damo denar iz denarnice v tabeli v denarnico v seznamu.
    • Na koncu odpremo novo datoteko za pisanje in nanjo napišemo denarnice iz seznama.

Algoritem


Testni primeri

V testni funkciji najprej tvorimo datoteko z anključnimi denarnicami. To datoteko nato preberemo in podatke shranimo v tabelo in denarnice s podatki izpišemo na konzolo.

Nato s pomočjo funkcije KolikoDenarjaJeVTabeli() izračunamo skupni znesek denarja v tabeli in ga izpišemo na konzolo.

Viri

0%
0%