Naloga z razredi - Denarnica

Naloga z razredi - Denarnica

Avtor: Poboljšaj Nina

Opis problema in ideja rešitve

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 lastnika denarnice Napiši vsaj dva konstruktorja:
  • prazen konstruktor, ki količino evrov in centov v denarnici postavi na 0 in ime lastnika na »NEZNANO«
  • konstruktor, ki sprejme koliko evrov in centov naj bo v denarnici in ime lastnika Napiši metode get in set. V set metodi za evre in cente preveri smiselnost podatka – če je količina denarja, ki naj bo v denarnici manjša od 0, naj se vrednost komponente ne spremeni. Napiši tudi 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 osebe v tabeli objektov tipa 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 EUR in 245 centov, ima sedaj 8 EUR in 45 centov.
  • izpiši imena vseh tistih oseb, ki si lahko privoščijo nakup banjice sladoleda, ki stane 4 EUR in 45 centov. Seveda so vse osebe, ki to lahko, opravile nakup. Pazi da bo njihova denarnica odražala to stanje.
  • Božiček je vsem lastnikom denarnic prinesel 6 EUR in 55 centov. Ustrezno popravi stanje vseh denarnic.
  • Pretvori evre v cente.

Razlaga algoritma

Naredimo razred denarnica. Napišemo prazen konstruktor, ki količino evrov in centov v denarnici postavi na 0 in vse lastnike na »neznano«. Potem naredimo konstruktor, ki sprejme koliko evrov in centov naj bo v denarnici in ime lastnika.

 class Denarnica
    {
        public int evri;
        public int centi;
        public string lastnik;

        public Denarnica()//prazen konstruktor
        {
            evri = 0;
            centi = 0;
            lastnik = "NEZNANO";
        }
        public Denarnica(int eur, int cent, string ime)//neprazen konstruktor
        {
            evri = eur;
            centi = cent;
            lastnik = ime;
        }

Razlaga algoritma

V set metodi nastavimo količino denarja v denarnici. Preverimo če so nove vrednosti v denarnici manjše od 0, se podatki ne spremenijo. V drugi set nastavimo kdo je lastnik denarnice. V get metodah vrnemo količino evrov in centov v denarnici in ime lastnika.

  public void set(int eur, int cent)
        {//nastavi kolicino denarja v denarnici
            if (eur >= 0) evri = eur;//ce so nove vrednosti manjse od 0 se podatki ne spremenijo
            if (cent >= 0) centi = cent;
        }
        public void set(string ime)
        {//nastavi kdo je lastnik denarnice
            lastnik = ime;
        }
        public int getEuro()
        {//vrne kolicino evrov v denarnici
            return evri;
        }
        public int getCents()
        {//vrne kolicino centov v denarnici
            return centi;
        }
        public string getName()
        {//vrne ime lastnika denarnice
            return lastnik;
        }

Razlaga algoritma

Napišemo metodo opis, ki vrne v denarnici, katere lastnik je #ime_lastnika je #st_evrov evrov in #st_centov centov.

  public string Opis()
        {
            return "V denarnici, katere lastnik je " + lastnik + ", je " + evri + " evrov in " + centi + " centov.";
        }

Razlaga algoritma

Potem pa podatke dodamo na datoteko. Najprej odpremo datoteko. Za dodajanje teksta in zapišemo novo vrstico, ki vsebuje evre, cente in lastnika. Datoteko zapremo.

 public void DodajNaDatoteko(string imeDatoteke)//doda podatke na datoteko
        {
            StreamWriter sw;
            sw = File.AppendText(imeDatoteke);//odprem datoteko v nacinu za dodajanje teksta
            sw.WriteLine(evri + ";" + centi + ";" + lastnik);//napisem novo vrstico
            sw.Close();//zaprem datoteko
        }

Razlaga algoritma

Nato preberemo podatke vseh denarnic iz datoteke in vrne tabelo novih denarnic. Število vseh denarnic postavimo na 0, ker je to sedaj še neznano. Odpremo datoteko in preberemo novo vrstico. Datoteko zapremo. Sedaj ko poznamo število vseh denarnic lahko zgradimo novo tabelo. Odpremo novo datoteko in preberemo novo vrstico. Z while zanko naredimo prehod čez celo datoteko, preštejemo denarnice. Povečamo število vseh denarnic in preberemo novo vrstico. Datoteko zapremo.

 public static Denarnica[] PreberiZDatoteke(string imeDatoteke)
        {//prebere podatke vseh denarnic iz datoteke in vrne tabelo novih denarnic
            StreamReader sr;
            int stVseh = 0; //stevilo vseh denarnic (sedaj je se neznano)
            sr = File.OpenText(imeDatoteke);//odprem datoteko
            string s = sr.ReadLine();//preberem novo vrstico
            while (s != null)//en prehod cez celo datoteko (prestejem denarnice)
            {
                stVseh = stVseh + 1;//povecam stevilo vseh denarnic
                s = sr.ReadLine();//preberem novo vrstico
            }
            sr.Close();//zaprem datoteko

Razlaga algoritma

Sedaj, ko poznamo število vseh denarnic lahko zgradimo novo tabelo. Ponovno odpremo novo datoteko in preberemo novo vrstico. Ponovno pregledamo celo datoteko. Naredimo tri nize, ki predstavljajo število evrov, število centov in ime lastnika denarnice. Na začetku beremo evre. S ter zanko pregledamo celoten niz. Če je trenutni znak ';' začnemo gledati naslednji element. Drugače pa znak dodamo evrom, ali pa znak dodamo centom, ali znak dodamo imenu lastnika. Potem niz, ki opisuje število evrov in centov spremenimo v celo število. Ustvarimo novo denarnico in jo shranimo v tabelo. Postavimo se na naslednjo denarnico in preberemo novo vrstico. Sedaj smo pregledali celoten niz, zato vrnemo tabelo.

            Denarnica[] tabela = new Denarnica[stVseh];

            sr = File.OpenText(imeDatoteke);//ponovno odprem datoteko
            s = sr.ReadLine();//preberem novo vrstico
            int i = 0;
            while (s != null)//ponovno pregledam celo datoteko
            {
                string Seur = "";//v ta niz bomo shranjevali znake niza, ki predstavljajo stevilo evrov
                string Scent = "";//v ta niz bomo shranjevali znake niza, ki predstavljajo stevilo centov
                string ime = "";//v ta niz bomo shranjevali znake niza, ki predstavljajo ime lastnika
                //stevilo element pove kateri podatek trenutno beremo:
                //ce je element=1 ->beremo evre
                //ce je element=2 ->beremo cente
                //ce je element=3 ->beremo ime lastnika
                int element = 1;//na zacetku beremo evre
                for (int j = 0; j < s.Length; j++)//pregledamo celoten niz
                {
                    char znak = s[j];//trenutni znak v nizu
                    //ce je trenutni znak podpicje, zacnemo gledati naslednji element
                    if (znak.CompareTo(';') == 0) element = element + 1;
                    else
                    {
                        if (element == 1) Seur = Seur + znak;//znak dodamo evrom
                        else if (element == 2) Scent = Scent + znak;//znak dodamo centom
                        else ime = ime + znak;//znak dodamo imenu lastnika
                    }
                }
                int eur = int.Parse(Seur);//niz, ki opisuje stevilo evrov, spremenimo v celo stevilo
                int cent = int.Parse(Scent);//niz, ki opisuje stevilo centov, spremenimo v celo stevilo
                tabela[i] = new Denarnica(eur, cent, ime);//ustvarimo novo denarnico in jo shranimo v tabelo
                i = i + 1;//prestavimo se na naslednjo denarnico
                s = sr.ReadLine();//preberem novo vrstico
            }

            return tabela;//pregledali smo celotni niz, vrnem tabelo
        }
    }
}

Razlaga algoritma

Nato naredimo tabelo v kateri shranimo 20 imen lastnikov. Naredimo generator naključnih števil, ki naredi 20 naključnih denarnic. V denarnici izberemo naključno število med 1 in 100 za evre in cente. V novo denarnico damo evre, cente in lastnika. Denarnico zapišemo na datoteko.

 class UstvariObjekte
    {
        static void Main(string[] args)
        {
            string[] imena = new string[20];//tabela v kateri hranim imena vseh lastnikov
            imena[0] = "Branko";
            imena[1] = "Tine";
            imena[2] = "Marina";
            imena[3] = "Stane";
            imena[4] = "Marjeta";
            imena[5] = "Eva";
            imena[6] = "Polona";
            imena[7] = "Goran";
            imena[8] = "Simon";
            imena[9] = "Polde";
            imena[10] = "Gorazd";
            imena[11] = "Zvone";
            imena[12] = "Sanja";
            imena[13] = "Brina";
            imena[14] = "Jana";
            imena[15] = "Anja";
            imena[16] = "Ana";
            imena[17] = "Sandra";
            imena[18] = "Matej";
            imena[19] = "David";

            Random rand = new Random();//Generator nakljucnih stevil
            for (int i = 0; i < 20; i++)//naredimo 20 novih denarnic
            {
                int evri = rand.Next(1, 100);//Izbere nakljucno stevilo med 1 in 100
                int centi = rand.Next(1, 1000);//Izbere nakljucno stevilo med 1 in 1000
                string lastnik = imena[i];//ime lastnika denarnice
                Denarnica d = new Denarnica(evri, centi, lastnik);//nova denarnica
                d.DodajNaDatoteko("primeri.txt");//denarnico dodam na datoteko
            }
        }
    }

Razlaga algoritma

Ustvarimo tri nove objekte in jih dodamo na datoteko. Preberemo vse podatke z datoteke v tabelo.

 //Ustvarite vsaj en objekt in ga dodajte v datoteko
            Denarnica den1 = new Denarnica(3, 15, "Boris");
            Denarnica den2 = new Denarnica(5, 4, "Dalibor");
            Denarnica den3 = new Denarnica(4, 55, "Iva");
            den1.DodajNaDatoteko("primeri.txt");
            den2.DodajNaDatoteko("primeri.txt");
            den3.DodajNaDatoteko("primeri.txt");

Razlaga algoritma

Tabelo pregledno izpišemo; evre, cente in lastnika.

 //Tabelo potem pregledno izpišite.
            Console.WriteLine("Evri, centi in osebe na začetku:");
            for (int i = 0; i < tabela.Length; i++)
            {
                Console.WriteLine(tabela[i].evri+";"+tabela[i].centi+";"+tabela[i].lastnik);
            }

Razlaga algoritma

Nato kličemo metode, da rešimo zastavljene probleme. Potem na novo tabelo zapišemo na datoteko rezultati.


            //1.) Izračunaj, koliko denarja imajo skupaj osebe v tabeli objektov tipa Denarnica.
            kolikoDenarja(tabela);

            //2.) Vsi v tabeli pretopijo svoje cente v evre.
            Console.WriteLine("Vsi v tabeli pretopijo svoje cente v evre:");
            centeVevre(tabela);
            Console.WriteLine();

            //3.) Nakup sladoleda
            nakupSladoleda(tabela);
            Console.WriteLine();

            //4.) Božiček je vsem lastnikom denarnic prinesel 6€ in 55 centov.
            Console.WriteLine("Božiček je vsem lastnikom denarnic prinesel 6 evrov in 55 centov:");
            bozicek(tabela);

            //5.) Vsi v tabeli pretopijo svoje evre v cente(po 1 cent).
            Console.WriteLine("Vsi v tabeli pretopijo svoje evre v cente(po 1 cent):");
            EvreVCente(tabela);
            Console.WriteLine();


            //Novo tabelo zapisem na datoteko
            StreamWriter sw;
            sw = File.AppendText("rezultati.txt");//odprem datoteko v nacinu za dodajanje teksta
            for (int i = 0; i < tabela.Length; i++)//grem cez celo tabelo
            {
                sw.WriteLine(tabela[i].evri + ":" + tabela[i].centi + ":" + tabela[i].lastnik);//napisem novo vrstico
            }
            sw.Close();//zaprem datoteko

            Console.ReadLine();
        }

Razlaga algoritma

Napišemo program, ki izračuna, koliko denarja imajo skupaj osebe v tabeli objektov tipa Denarnica. Na začetku evre in cente nastavimo na 0. S for zanko pregledamo vse denarnice v tabeli. Dodamo toliko evrov in centov, kot jih je v trenutni denarnici. Cente spremenimo v evre tako, da jih delimo s 100 in jih prištejemo k evrom. Ostanejo še centi, ki jih ne moremo spremeniti v evre. Na koncu rezultate izpišemo.

 //1.) Izračunaj, koliko denarja imajo skupaj osebe v tabeli objektov tipa Denarnica.
        public static void kolikoDenarja(Denarnica[] tabela)
        {
            int vsiEvri = 0;//na zacetku imamo 0 evrov in 0 centov
            int vsiCenti = 0;
            for (int i = 0; i < tabela.Length; i++)//pregledamo vse denarnice v tabeli
            {
                vsiEvri = vsiEvri + tabela[i].evri;//dodamo toliko evrov, kot jih je v trenutni denarnici
                vsiCenti = vsiCenti + tabela[i].centi;//dodamo toliko centov, kot jih je v trenutni denarnici
            }
            int dodajEvre = vsiCenti/100;//vse cente spremenimo v evre v kolikor je mogoce
            vsiEvri=vsiEvri+dodajEvre;//in jih dodam k evrom
            int ostanekCentov = vsiCenti % 100;//centi, ki jih nisem mogel spremeniti v evre

            Console.WriteLine("Vse osebe v tabeli imajo skupaj "+vsiEvri+" evrov in "+ostanekCentov+ " centov.");
            Console.WriteLine();//izpisem prazno vrstico
        }

Razlaga algoritma

Naredimo program, ki pretopi evre v cente. S for zanko se sprehodimo po tabeli in pregledamo denarnice. Če so centi večji od 100, cente delimo s 100 in jih prištejemo evrom.

//2.) Vsi v tabeli pretopijo svoje cente v evre.
        public static void centeVevre(Denarnica[] tabela)
        {
            for (int i = 0; i < tabela.Length; i++)//pregledamo vse denarnice v tabeli
            {
                int centi = tabela[i].centi;
                if (centi >= 100)
                {
                    tabela[i].evri = tabela[i].evri + centi / 100;
                    tabela[i].centi = centi % 100;
                    Console.WriteLine(tabela[i].evri + ";" + tabela[i].centi+";"+tabela[i].lastnik);
                }
            }
        }

Razlaga algoritma

Naredimo program tistih oseb, ki si lahko privoščijo nakup banjice sladoleda. Predpostavimo, da preden kličemo to metodo, so že vsi pretopili svoje cente v evre. Sladoled stane 4 EUR in 45 centov. Če je v denarnici vsaj 5 evrov, plačamo s petimi evri in nazaj dobimo 55 centov. Nato cente pretvorimo v evre in shranimo rezultate v trenutno denarnico. Če imamo v denarnici 4 EUR in več kot 45 centov, kupimo sladoled. Ostane nam 0 evrov, centom pa odštejemo 45.

//3.) Nakup sladoleda
        //Predpostavimo, da preden klicemo to metodo, so ze vsi pretopili vse svoje cente v evre
        public static void nakupSladoleda(Denarnica[] tabela)
        {//sladoled stane 4 evre in 45 centov
            Console.WriteLine("Sladoled, ki stane 4 evre in 45 centov, si lahko privoscijo:");

            for (int i = 0; i < tabela.Length; i++)
            {
                int evri = tabela[i].evri;//evri v trenutni denarnici
                int centi = tabela[i].centi;//centi v trenutni denarnici
                if (evri >= 5)//v denarnici je vsaj 5 evrov
                {
                    //kupimo sladoled
                    evri = evri - 5;//placamo s 5 evri
                    centi = centi + 55;//55 centov dobimo nazaj
                    //cente pretvorimo v evre
                    evri = evri + centi / 100;
                    centi = centi % 100;
                    //shranimo rezultate v trenutno denarnico
                    tabela[i].evri = evri;
                    tabela[i].centi = centi;
                    Console.WriteLine(tabela[i].lastnik);
                }
                else if (evri == 4)//ce imamo v denarnici 4 evre
                {
                    if (centi >= 45)//in dovolj centov
                    {
                        //kupimo sladoled
                        tabela[i].evri = 0;
                        tabela[i].centi = centi - 45;
                        Console.WriteLine(tabela[i].lastnik);
                    }
                }
            }
        }

Razlaga algoritma

Napišemo program, ki v denarnici popravi stanje. Vsakemu lastniku doda 6 EUR in 55 centov. S for zanko se sprehodimo po tabeli. Evrom v trenutni denarnici dodamo 6 EUR in 55 centov. Nato cente pretvorimo v evre in shranimo rezultate v trenutno denarnico.

 //4.) Božiček je vsem lastnikom denarnic prinesel 6€ in 55 centov.
        public static void bozicek(Denarnica[] tabela)
        {
            for (int i = 0; i < tabela.Length; i++)
            {
                int evri = tabela[i].evri;//evri v trenutni denarnici
                int centi = tabela[i].centi;//centi v trenutni denarnici
                //dodamo podarjeni denar
                evri = evri + 6;
                centi = centi + 55;
                //cente pretvorimo v evre
                evri = evri + centi / 100;
                centi = centi % 100;
                //shranimo rezultate v trenutno denarnico
                tabela[i].evri = evri;
                tabela[i].centi = centi;
                Console.WriteLine(tabela[i].evri + ";" + tabela[i].centi + ";" + tabela[i].lastnik);
            }
        }

Razlaga algoritma

Pretvorimo vse evre v cente(po en cent). Naredimo program, ki pretopi evre v cente. S for zanko se sprehodimo po tabeli in pregledamo denarnice. Evre pomnožimo s sto in jih prištejemo k cenotm.

//5.) Vsi v tabeli pretopijo svoje evre v cente(po 1 cent).
        public static void EvreVCente(Denarnica[] tabela)
        {
            for (int i = 0; i < tabela.Length; i++)//pregledamo vse denarnice v tabeli
            {
                    tabela[i].evri = tabela[i].evri;
                    int centi = tabela[i].centi;
                    tabela[i].centi = tabela[i].evri*100 +  tabela[i].centi;
                    Console.WriteLine(tabela[i].centi + ";" + tabela[i].lastnik);

            }
        }

Testni program

V prvem testnem programu sem naredila 20 lastnikov denarnic. Imena sem izberala poljubno. Naredila sem generator naključnih števil. Dobimo 20 novih denarnic, v denarnicah pa so evri izbrani naključno med 1 in 100, centi pa med 1 in 100. V novi denarnici imamo sedaj evre, cente in lastnika. Denarnico zapišemo na datoteko. V razredu test sem naredila še tri nove denarnice. Evre, cente in lastnika si izberemo poljubno.

Rezultat

Ko zaženemo program dobimo naslednje rezultate:

Izračunaj, koliko denarja imajo skupaj osebe v tabeli objektov tipa Denarnica.

(1primer.png)

Rezultat

Vsi v tabeli pretopijo svoje cente v evre.

(2primer.png)

Rezultat

Nakup sladoleda.

(3primer.png)

Rezultat

Božiček je vsem lastnikom denarnic prinesel 6€ in 55 centov.

(4primer.png)

Rezultat

Vsi v tabeli pretopijo svoje evre v cente(po 1 cent).

(5primer.png)

Posnetek

0%
0%