Prosek učenika
RAD SA FAJLOVIMA
Klase koje se koriste za rad sa datotekama definsane su u imenskom prostoru System.IO.
Klase pomoću kojih se jednostavno ostvaruju operacije čitanja podataka iz datoteke i upisa podatka u datoteku su StreamReader(čitanje) i StreamWriter(upis).
Pri definisanju objekata ovih klasa tim objektima je potrebno dodeliti neku datoteku nad kojom će se obaviti odgovarajuća operacija. Za to koristimo odgovarajuće konstruktore StreamReader i StreamWriter koje kao prvi argument imaju putanju do datoteke.
KLASA ZA ČITANJE PODATAKA IZ DATOTEKE (StreamReader)
Ako datoteka čija je putanja navedena kao argument konstruktora ne postoji javiće se izuzetak.
Primer definisanja objekta klase StreamReader:
StreamReader sr = new StreamReader("C:\Moji\Projekti\proba.txt");
StreamReader sr = new StreamReader("..\..\proba.txt");
Osnovne metode za čitanje podataka klase StreamReader
public override int Read () – ova funkcija vraća sledeći znak koji je predstavljen kao ceo broj (ASCII) koji je pročitan iz datoteke ili -1 ako je dostignut kraj datoteke.
StreamReader sr = new StreamReader("proba.txt");
int x;
char c;
x= sr.Read();
while(x!=-1)
{
ch = (char)x;
Console.WriteLine(ch);
x= sr.Read();
}
Sr.Close();public override string ReadLine () – ova funkcija služi za čitanje jedne linije odnosno niza znakova na čijem se kraju nalazi znak za prelazak u novi red. Kao vrednost vraća pročitani string ili null ako je dostignut kraj datoteke.
Osnovne metode za čitanje podataka klase StreamReader
StreamReader sr = new StreamReader("proba.txt");
int x;
string s;
s= sr.ReadLine();
while(s!=null)
{
Console.WriteLine(s);
s= sr.ReadLine();
}
Sr.Close();Osnovne metode za čitanje podataka klase StreamReader
public override string ReadToEnd ()- ova funkcija služi za čitanje datoteke od trenutne pozicije do kraja. Ova funkcija vraća string koji sadrži pročitan sadržaj. Ako je trenutna pozicija kraj datoteke onda funkcija vraća prazan string ("").
string s= sr.ReadToEnd();
Console.WriteLine(s);
Sr.Close();Osnovne metode za čitanje podataka klase StreamReader
public override int Peek () – pomoću ove funkcije se vrši provera narednog karaktera u datoteci bez njegovog čitanja (pomeranja pozicije). Ova funkcija vraća sledeći znak iz datoteke (ASCII) ili -1 ako je dostignut kraj datoteke.
StreamReader sr = new StreamReader("proba.txt");
char c;
if(sr.Peek() != -1)
{
c = (char) sr.Read();
Console.WriteLine(c);
}
Sr.Close();public override void Close ()– ova funkcija služi za zatvaranje datoteke
KLASA ZA UPIS PODATAKA U DATOTEKU(StreamWriter)
Primer definisanja objekta klase StreamWriter:
StreamWriter sw = new StreamWriter("C:\Moji\Projekti\proba.txt");
StreamWriter sw = new StreamWriter(""..\..\proba.txt");Korišćenjem konstruktora StreamWriter koji kao argument ima samo putanju do datoteke uvek se formira nova prazna datoteka bez obzira na to da li datoteka čija je putanja navedena postoji ili ne.
Pri pozivu konstruktora StreamWriter može da se navede posle putanje datoteke logička vrednost kojom se određuje da li će se kreirati nova ili će se podaci nadodavati na već postojeću datoteku. Ako datoteka ne postoji bez obzira na logičku vrednost kreira se nova.
//Primer1:
//Ova dva primera poziva konstruktora StreamWriter su ekvivalentna.
//U oba slučaja se formira nova datoteka.
StreamWriter sw = new StreamWriter("proba.txt");
StreamWriter sw = new StreamWriter("proba.txt", false);
//Primer 2:
//U ovom primeru se formira nova datoteka samo ako navedena ne postoji.
StreamWriter sw = new StreamWriter("proba.txt", true);Osnovne metode za pisanje podataka klase StreamWriter
public override void Write (string value) – ovom funkcijom se upisuje niz znakova u datoteku ali bez dodavanja znaka za novi red. Ukoliko se navede neki drugi tip podatka ukoliko je moguće obavlja se konverzija tog tipa u tip string.
StreamWriter sw = new StreamWriter("proba.txt");
string s = "Proba";
sw.Write(s);
sw.Close();Osnovne metode za pisanje podataka klase StreamWriter
public override void WriteLine (string value)– ovom funkcijom se upisuje niz znakova u datoteku sa dodavanjem znaka za novi red.
StreamWriter sw = new StreamWriter("proba.txt");
string s = "Proba";
sw.WriteLine(s);
sw.Close();public override void Close ()– ova funkcija služi za zatvaranje datoteke odnosno oslobađanje resursa vezanih za korišćenje datoteke
Zadatak: Napisati deo koda kojim se ukoliko fajl postoji ispisuje sadržaj fajla na ekran (sadržaj fajla čine celi brojevi tako da je svaki broj smešten u novi red). Potom korisnik treba da unese novi niz celih brojeva. Posle toga treba pitati korisnika da li želi da se uneti brojevi nadodaju brojevima u istoimenom fajlu ili da prebrišu stare u tom istom fajlu.
static void Main(string[] args)
{
int[] niz=null;
try
{
CitanjeFajla();
}
catch(FileNotFoundException)
{
Console.WriteLine("Fajl ne postoji!!!");
}
UnosElemenataUNiz(out niz);
Console.WriteLine("1)Uneti niz se nadodaje na postojeci");
Console.WriteLine("2)Uneti niz je novi niz");
Console.Write("Odaberite opciju:");
char odg = Console.ReadKey().KeyChar;
UpisUFajl(niz,odg=='1');
Console.ReadKey();
}static void UnosElemenataUNiz(out int [] niz)
{
Console.WriteLine("Unesite broj elemenata niza:");
int n = Convert.ToInt32(Console.ReadLine());
niz = new int[n];
for(int i=0;i<niz.Length;i++)
{
Console.Write("Unesite {0}. clan niza:",i+1);
niz[i] = Convert.ToInt32(Console.ReadLine());
}
}
static void UpisUFajl(int[] niz,bool nadodaj)
{
StreamWriter sw = new StreamWriter("proba.txt",nadodaj);
foreach (int el in niz)
sw.WriteLine(el);
sw.Close();
}static void CitanjeFajla()
{
StreamReader sr = new StreamReader("proba.txt");
string br= sr.ReadLine();
Console.WriteLine("Clanovi niza iz datoteke su:");
while(br!=null)
{
Console.WriteLine(br);
br = sr.ReadLine();
}
sr.Close();
}Zadatak 1:
Prepraviti prethodni zadatak tako da postoje dve datoteke u jednoj se čuva niz brojeva u drugoj najveći broj iz niza brojeva. Na početku programa se sadržaj obe ispisuje na ekran. Ukoliko prilikom čitanja ne postoji datoteka u kojoj se nlazi najveći broj pronaći taj broj iz datoteke gde se nalazi taj niz brojeva. Prilikom upisa upisati u posebnu datoteku najveći broj.
Zadatak 2:
Prepraviti prvi zadatak tako da brojevi koji se čuvaju u datoteci su sortirani u rastućem redosledu. Prilkom svakog novog upisa potrebno je sortirati podatke. Na početku programa kada se pročita sadržaj datoteke potrebno je obaviti binarnu pretragu da li se broj nalazi ili ne nalazi u datoteci.
Zadatak 3:
U datoteci je potrebno da se čuva niz stringova koji predstavljaju prezimena učenika. Prilikom čitanja je potrebno da se izvrši sekvencijalna pretraga datoteke. Posle je potrebno da se unese novi niz prezimena koje na osnovu odabira korisnika je potrebno nadodati na već postojeći niz u datoteku ili upisati kao novi niz u istoimenu datoteku.
Napisati program koji računa prosek ocena učenika pet predmeta. Predmeti treba da budu Srpski, Matematika, Engleski, Programiranje i Fizičko i treba ih definisati kao statičan niz stringova unutar klase Učenik. Program realizovati uz pomoć 5 klasa. Prva klasa je Predmet. Obavezni atributi članovi klase su: naziv, i zaključna ocena. Napraviti parametrizovani konstruktor. Druga klasa je Ucenik. Obavezni atributi članovi klase su: prezime, niz od pet predmeta i statički niz naziva predmeta. Napraviti parametrizovani konstruktor. Napravite metode za unos zaključnih ocena (ovu metodu pozvati unutar konstruktora), računanje proseka učenika, ispis zaključnih ocena, za računanje broja nedovoljnih ocena.
Treća klasa (naziv joj je baza podataka) je singleton klasa u okviru nje napraviti metode: unos liste učenika, ispis liste učenika (prezime i prosek). Ukoliko učenik ima ocenu jedan iz nekog predmeta ispisati nedovoljan i u zagradi broj nedovoljnih ocena. Izmena prezimena učenika i njegovih zaključnih ocena na osnovu rednog broja, brisanje učenika iz liste na osnovu prezimena.
Četvrta klasa za manipulaciju fajlovima: CitanjeUcenikaIzFajl, UpisUcenikaUFajl, UpisVrloDobrihUcenika(uspis svih vrlodobrih učenika (u okviru ove funckije upisati vrlodobre učenike u fajl Vrlodobri.txt). Ovo je statična klasa.
Peta klasa je klasa Meni. Ovo je statična klasa koja ima dve metode. U okviru ove klase testirati rad programa kroz sledeći sistem menija1) nadovavanje novog broja ucenika 2) Prikaz ucenika(ispis). Odabirom rednog broja učenika ispisuje se njegove zaključne ocene 3) Izmena parametara učenika 4) Brisanje učenika 5) Prikaz vrlo dobrih učenika 6) kraj programa. Pre i posle brisanja i izmene prikazati listu učenika. Na početku programa je potrebno da se ukoliko postoji iz fajla Ucenika.txt učitaju podaci u listu učenika a ako ne o tome obavestiti korisnika i takođe na kraju programa je potrebno da se iz liste učenika sačuvaju podaci u fajl Ucenik.txt. Takođe je potrebno da se prilikom odabira 5 opcije u fajl Vrlodobri.txt sačuvaju učenici sa vrlodobrim prosekom.
Format podataka u fajlu Ucenik.txt je:
Prezime|Ocena1|Ocena2
...
Format podataka u fajlu Vrlodobri.txt je:
Prezime:prosek
....
Console.WriteLine("\t\t Program za rad racunanje proseka ucenika");
Console.WriteLine("1) Unos ucenika");
Console.WriteLine("2) Ispis ucenika i proseka");
Console.WriteLine("3) Izmena podataka ucenika");
Console.WriteLine("4) Brisanje ucenika");
Console.WriteLine("5) Prikaz vrlo dobrih ucenika");
Console.WriteLine("6) Kraj programa");
Console.Write("Izaberite jednu od ponudjenih opcija:");3itsProgramiranje - VezbeOOP1
By lanik
3itsProgramiranje - VezbeOOP1
- 983