Razred Študent

Razred Študent

Avtor: Sabina Oražem

Besedilo naloge - Prvi del

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.
(student.png)
Simbolična slika študenta

Besedilo naloge - Drugi del

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

Napišite razred Student, s katerim predstavite vse smiselne lastnosti in metode za študente (ime, priimek, spol, letnik, vpisna številka, ...). Rešite naslednje probleme:

  • Vrnite novo tabelo, ki naj vsebuje le tiste študente, ki niso v zadnjem letniku.
  • Vrnite tabelo tistih študentov, ki so v zadnjem letniku.
  • Vsi študenti v tabeli naj "napredujejo" v višji letnik. Prej tiste, ki so v zadnjem, 4. letniku, pa izločite (glejte prejšnjo metodo).
  • Vrnite tabelo, ki vsebuje število študentov posameznega letnika.
  • Koliko je deklet v tabeli študentov?

Opis problema in ideja rešitve

Naloga od nas zahteva sestavo razreda v jeziku C#. S tem razredom bomo lahko predstavili objekt, ki bo posamezen študent oziroma združene lastnosti študenta. Objekt oziroma študent bo imel naslednje lastnosti:

  • Ime
  • Priimek
  • Spol
  • Letnik, ki ga trenutno obiskuje
  • Vpisna številka

Radi bi hranili evidenco o študentih, kar na datoteki. Torej bomo za delo s študenti in njihovimi podatki potrebovali tudi tekstovne datoteke.

Kaj vse bomo potrebovali za spodobno vodenje evidence? Na primer, da se na fakulteto vpiše nov študent, takrat ga bomo na novo vnesli v evidenco. Kaj pa, če nas zanima, koliko študentov je vpisanih v 4. letnik, ali pa, koliko jih v 4. letnik ni vpisanih? Morda nas bo zanimalo, koliko deklet je na naši fakulteti. Morda, koliko študentov je vpisanih v posamezen letnik. Kaj pa po končanem študijskem letu, ko študentje napredujejo v višji letnik? Takrat bi radi vsem študentom spremenili lastnost kateri letnik obiskujejo.

Razlaga algoritma

Definirati je potrebno knjižnico z razredom Student. Tu definiramo konstruktor z petimi lastnostmi.

Lastnosti najprej definiramo kot zaseben (private) spremenljivke, zatem pa se kot javne (public) in so tako dostopne tudi v drugih projektih in ne samo za rabo v kjižnici.

V javno definiranih lastnostih so potrebne tudi get in set metode. Lastnosti objekta so trije nizi in dve števili. O številih vemo kar veliko. Lastnost 'letnik' mora biti celo število med 1 in 4. Lastnost 'vpisna številka' pa mora biti celo osem mestno število. Tako že pri set metodi lahko poskrbimo, da bomo skozi spustili le ustrezen številke. Pri nizih žal ne poznamo omejitev, tako lahko sprejmemo tudi »smešne« nize, kot naprimer ime »Sa444iona«. Lahko bi se naprimer omejili na določitev, da mora biti prva črka imena in priimka velika začetnica, a se sama za to ne odločim, saj bi uporabnika s tem le zmedla.

Za tem dafiniram prazni konstruktor, ki lastnostim določa privzete vrednosti. Kasneje je definiran tudi polni konstruktor.

Razlaga algoritma

Metode, ki jih potrebujemo za delovanje objektov za neše potrebe so:

  • Izpis študenta, kot niz
  • Obratna metoda zgornji, to je, ko je študent podan kot niz, iz njega razberemo lastnosti, ki sestavijo objekt
  • Zapis objekta na datoteko
  • Branje objekta z datoteke
  • Branje vseh objektov v datoteke, le te hranimo v seznamu
  • Tvorba datoteke z nekaj (i) naključnih študentov Metoda ToString() Objekt oziroma njegove lastnosti izpišemo v niz, tako da vsako lastnost zapišemo v niz in jih med seboj ločimo z znakom podpičje - ';'.

Metoda Student(string nizstudent)

Je obratna metoda zgornji. Torej v metodo vstopi niz, ki predstavlja objekt, le tega razdelimo glede na znak podpičje in razberemo vseh pet lastnosti objekta. Ko niz razdelimo v tabelo lastnosti, zahtevamo da je tabela dolžine pet, kar pomeni da smo uspešno razbrali vseh pet lstnoati objekta. Nadalje zahtevamo, da sta zadnja dva elementa celi števili. Ali sta res, preverimo tako, da ju poskusimo pretvoriti v celi števili. Ostale omejitve pa prestreže konstruktor, oziroma sama definicija lastnosti.

Metoda PisiNaDatoteko(string ime_datoteke)

Metoda sprejme ime datoteke, torej mesto kamor naj bi objekt zapisali. Preden objekt zapišemo ga ustrezno pretvorimo v niz, metoda, ki smo jo definirali sami.

Metoda BeriZDatoteke(string ime_datoteke, int indeks = 0)

Metoda sprejme ime datoteke, s katere naj bi brali in pa indeks vrstice, ki naj jo metoda vrača.

Testni primeri

Program bi rada temeljito pretestirala, saj si pri vodenju evidence ne moremo privoščiti napak.

Testni primeri- Ustvarjanje novega študenta

Poskusimo ustvariti objekt z ustreznimi podatki. Ustrezni podatki so: prve tri lastnosti morajo biti nizi, četrta lastnost, torej letnik naj bo število med 1 in 4, vpisna številka pa naj bi bilo osem mestno število.

Prvič ustvarimo objekt s podajanjem lastnosti, drugič pa z nizom. V obeh primerih se mora ustvariti ustrezen objekt. Za tem namerno popačimo lastnosti objekta, tako da le te niso sprejemljive. Program bi moral sprožiti izjemo in objekta z neprimernimi lastnostmi ne ustvariti. Prestrežemo lahko žal le napačen vnos letnika in vpisne številke, saj so prve tri lastnosti nizi, kjer pa se lahko skriva karkoli (celo število, decimalno število, niz s števili,...).

Napačen vnos podatkov testiramo z vnosom posameznih lastnosti in tudi z vnosom niza, ki predstavlja lastnosti objekta.

Ustvarjanje novega študenta

(test_1.png)
Koda testiranja, ko želimo ustvariti nov objekt
(test_2.png)
Izpis na konzoli, ko zaženemo test ustvarjanja novega objekta

Testni primeri- Branje z datoteke

Kaj vse se lahko »zgodi«, ko se lotimo branja podatkov z datoteke. Morda datoteke sploh ne obstaja. Morda se niz, ki predstavlja zapis študenta neustrezen. Morda datoteka ne vsebuje toliko vrstic, kot je bil velik podan indeks vrstice. Morda je površni uporabnik vnesel negativen indeks vrstice. To so napake, ki jih bo program prestregel.

Poskusili bomo tudi ustvariti objekt, ko so podani podatki ustrezni, torej bomo z datoteke prebrali niz in ustvarili nov objekt z danimi lastnostmi.

Izjema je negativen indeks vrstice -1, ki ga program razume, kot branje zadnje vrstice na datoteki.

Branje z datoteke

(test_3.png)
Koda testiranja, ko želimo brati z datoteke
(test_4.png)
Izpis na konzoli, ko zaženemo test branja z datoteke

Testni primeri- Zapis na datoteko

Nove podatke bi radi zapisali kar na že obstoječo datoteko. Na datoteko poskusimo zapisati oba primera, enkrat, ko je objekt podan z lastnostmi in enkrat, ko je podan kar z nizom.

Zapis na datoteko

(test_5.png)
Koda testiranja, ko želimo pisati na datoteko
(test_6.png)
Izpis na konzoli, ko zaženemo test pisanja na datoteko

Testni primeri- Metode razreda

Testirati je potrebno vse metode, ki so definirane v razredu. Testiramo jih tako na obstoječi in ustrezno napisani datoteki, kot tudi datoteki, ki sploh ne obstaja in pa datoteki, s »čudnimi« podatki.

Metode razreda

(test_7.png)
Koda testiranja, ko želimo z datoteke prebrati vse podatke
(test_8.png)
Izpis na konzoli, ko zaženemo test branja vse podatkov z datoteke

Metode razreda

Naprej bi radi preverili metode:

  • Izpiši študente, ki so v zadnjem letniku
  • Izpiši študente, ki niso v zadnjem letniku
  • Napredek študentov v višji letnik
  • Koliko študentov obiskuje posamezni letnik
  • Koliko je na fakulteti deklet

Za te metode potrebujemo seznam vseh objektov. Zato predhodno z datoteke preberemo vse objekte in jih shranimo v seznam List<Student>.

Metode razreda

(test_9.png)
Izpis na konzoli, ko zaženemo test metod

Filmček testiranje

0%
0%