Kolo (razred kolo v programskem jeziku C#)

Kolo (razred kolo v programskem jeziku C#)

Avtor: Alenka Bernard

Besedilo naloge

Napišite razred Kolo, s katerim predstavite kolesa. Vsako kolo ima neko število prestav, barvo, tip (gorsko, cestno, treking), leto izdelave, in za koliko ljudi je namenjeno. Napišite osnovni konstruktor (sami določite privzete vrednosti), dva dodatna konstruktorja, ustrezne get/set metode. Rešite naslednje probleme:

  • Izpišite koliko koles posamezne barve je v tabeli koles.
  • Vsa kolesa rumene barve prebarvajte v rdeče.
  • Koliko ljudi se lahko hkrati pelje s cestnimi kolesi, ki so v tabeli?
  • Ostranite vsa kolesa, ki so starejša od 12 let.
  • Preberite datoteko koles in podatke zapišite na več datotek, ločenih po letu izdelave koles.

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 z 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).

Konstruktor

Razredu Kolo moramo najprej ustvariti konstruktor, ki vsebuje lastnosti kolesa. V spremenljivki, ki se začne s podčrtajem shranimo lastnost, do katere pa ne moremo dostopati neposredno. Do nje dostopamo z istoimensko spremenljivko (brez podčrtaja), kateri nastavimo get metodo, ki vrne shranjeno lastnost in set metodo, ki lastnost ponastavi.

Če želimo kolesu nastaviti manj kot eno ali več kot 40 prestav, sprožimo napako, saj ima kolo vsaj eno prestavo (stalno). Kolesa imajo običajno do okoli 30 prestav, zato predpostavimo, da kar je več kot 40, ni smiselno.

Pri barvi ni omejitve, ker so lahko tudi večbarvna.

(razred1.jpg)

Tip kolesa je lahko samo gorsko, cestno ali treking.

Ni smiselno imeti starejšega kolesa, kot iz leta 1990, saj drugače ne konkurirajo ostalim. Nemogoče je pa imeti kolo, ki bi bilo mlajše od letošnjega leta.

(razred2.jpg)

Če kolo ni cestno, ni smiselno, da bi bilo namenjeno večim osebam. Običajno pa so cestna kolesa za več ljudi namenjena dvema ali največ trem ljudem.

(razred3.jpg)

Konstruktor

Ustvarimo minimalni konstruktor, ki ustvari kolo s privzetimi nastavitvami.

(razred4.jpg)

Potrebujemo še konstruktor, kateremu podamo lastnosti, ki želimo, da jih ustvarjeno kolo ima.

(razred5.jpg)

Ustvarimo tudi konstruktor, ki dobi niz, v katerem so zapisane lastnosti kolesa, ločene s podpičjem. Niz ločimo po podpičjih in priredimo lastnosti kolesa. Zaplete se lahko, če niz ni pravilno zapisan.

(razred6.jpg)

Pisanje na datoteko

Za pisanje na datoteko potrebujemo funkcijo, ki bo podatke o kolesu shranila v niz. Zato priredimo metodo ToString(), ki vrne niz podatkov o kolesu, ločenih s podpičjem.

Ko želimo podatke o kolesu zapisati na datoteko, odpremo datoteko z željenim imenom za pisanje. Če datoteka še ne obstaja, jo ustvari, drugače piše na že obstoječo. Potem pokličemo metodo ToString(), da dobimo niz in ga zapišemo na datoteko, kot novo vrstico.

(razred7.jpg)

Branje z datoteke

Če želimo prebrati datoteko in vsebovana kolesa shraniti v tabelo koles, moramo najprej preveriti, če datoteka obstaja. Če ne, vržemo izjemo. Drugače odpremo datoteko za branje in naenkrat preberemo celotno vsebino. Potem vsebino ločimo po vrsticah in jih shranimo v tabelo. Predpostavimo, da datoteko ustvarimo samo s pomočjo tega razreda, zato zadnje vrstice ne upoštevamo, saj je prazna. Ustvarimo novo tabelo koles, ki vsebuje eno kolo manj, kot je vrstic v datoteki. Iz vsake vrstice poskusimo ustvariti kolo iz niza in ga shraniti v tabelo. Če kolesa ne moremo ustvariti, vržemo izjemo.

(razred8.jpg)

Lahko pa tudi samo izpišemo celotno vsebino datoteke. To naredimo tako, da odpremo željeno datoteko, če ta obstaja. Nato preberemo njeno celotno vsebino in jo zapremo. Vrnemo vsebino.

(razred9.jpg)

Tvorjenje datotek

Za funkcijo, ki tvori datoteko z naključnimi kolesi, potrebujemo generator, s katerim lahko naključno izbiramo med danimi elementi.

Potrebujemo tabele podatkov, da lahko izbiramo med ustreznimi podatki za sestavljanje smiselnih kombinacij koles. S pomočjo generatorja vsaki lastnosti nastavimo ustrezno vrednost. Paziti moramo samo, če je kolo cestno. V tem primeru mu lahko nastavimo, da je lahko namenjeno večim ljudem. Kolo z nastavljenimi vrednostmi zapišemo na datoteko s pomočjo funkcije za posanje na datoteko.

(razred10.jpg)

Lep izpis koles iz tabele

Za izspis tabele dobimo tabelo, iz katere po vrsti beremo lastnosti koles, ki jih shranimo v pregleden niz. Vsak niz kolesa je posamezna vrstica, ki jih shranimo v skupen niz, ki ga vrnemo.

(razred11.jpg)

Testiranje

Da lahko testiramo funkcije iz razreda, najprej ustvarimo kolo s privzetimi vrednostmi. S pomočjo tega kolesa ustvarimo datoteko z dvanajstimi kolesi. To datoteko preberemo in v tabelo shranimo kolesa. Tabelo še lepo izpišemo.

Sedaj moramo prešteti, koliko koles posamezne barve je v tabeli. To naredimo tako, da preverjamo kolesa v tabeli. Če se barva trenutnega kolesa še ne nahaja v nizu, kjer so shranjene že preštete barve, od tega kolesa dalje preštejemo, koliko koles je enake barve. Nizu dodamo to barvo in izpišemo, koliko koles je trenutne barve. Potem nadaljujemo z naslednjim kolesom od prvega, ki je imel barvo, ki smo jo šteli.

(test1.jpg)

Testiranje

Želimo prebarvati vsa kolesa iz tabele, ki so rumene barve, v rdečo. To naredimo tako, da pregledamo vse barve koles in če je barva rumena, jo spremenimo v rdečo.

(test2.jpg)

Ko štejemo, koliko ljudi se lahko hkrati pelje s cestnimi kolesi, preverimo, če je kolo cestno in potem seštevku prištejemo, za koliko ljudi je namenjeno.

(test3.jpg)

Testiranje

Pri odstranjevanju koles, starejših od 12 let, najprej preštejemo, koliko koles ni starejših od 12 let. Potem ustvarimo novo tabelo, velikosti tega števila. Nato pa po vrsti prepisujemo iz dane tabele v novo tabelo, če kolo ustreza pogoju. Paziti moramo, ker indeksi ne tečejo v obeh tabelah enako.

(test4.jpg)

Testiranje

Preberemo datoteko, da bi njena kolesa prepisali v različne datoteke glede na letnice. Najprej vsa kolesa shranimo v tabelo. Postopek je podoben, kot pri štetju barv. Pregledujemo vsa kolesa v tabeli in če je neka letnica že bila uporabljena, jo dodamo v niz, da bomo kasneje vedeli, katere letnice smo uporabili. Potem vsako kolo zapišemo na datoteko njegove letnice. Za izpis datotek ločimo letnice iz niza in nato shranimo vsebino vsake datoteke v svojo tabelo in jo izpišemo.

Na koncu prejšnjo (predelano) tabelo koles zapišemo na isto datoteko, s katere smo prebrali podatke.

(test5.jpg)

Testiranje

Na koncu testiramo še, kako se program odzove, če želimo ustvariti kolo z napačnimi podatki. Testiramo na primerih:

  • če želimo kolesu nastaviti -5 prestav
  • če mu želimo nastaviti neustrezen tip
  • če mu želimo nastaviti neustrezno leto izdelave
  • če bi radi ustvarili kolo, ki bi ga lahko vozile več kot 3 osebe
  • če bi radi ustvarili kolo iz niza z neustreznimi podatki
  • če bi radi ustvarili koli iz niza neustrezne oblike

    (test6.jpg) (test7.jpg)

Testiranje razreda

0%
0%