oseba/račun ( kopija )

oseba/račun ( kopija )

Avtor: Alisa Ibrahimović

Razred oseba/račun

  • Navodilo Sestavi razred Oseba in razred Racun s komponentama (Oseba lastnik in double stanje), konstruktorji in objektnimi metodami za dostop do komponent, Dvig, Polog in Prenos denarja. Za vsakega lastnika poznaš njegovo ime, priimek, naslov, starost in davčno številko.
  • Izpiši ime in priimek osebe v tabeli računov, ki ima največ denarja.
  • Izračunaj, koliko denarja imajo skupaj osebe v tabeli objektov tipa Račun.
  • Izračunaj, koliko denarja imajo skupaj osebe stare med x in y let (parametra) v tabeli objektov tipa Račun.
  • V tabeli objektov tipa Račun imamo zbrane osebe, ki jim bomo nakazali vsakemu po 1500€. Spremeni njihova stanja in na zaslon izpiši naslove teh oseb skupaj z novim stanjem.
  • Vsaj en (zaželjeno pa več) problem po vaši izbiri ... (opišite jih!)

Celoten program


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        class Racun
        {
            double stanje;
            string stevilkaRacuna;
            public Racun(string StevilkaRacuna, double Stanje)
            {
                //konstruktor
                this.stanje = Stanje;
                this.stevilkaRacuna=StevilkaRacuna;
            }

            public double Stanje()
            {
                return this.stanje;
            }

            public string StR()
            {
                return this.stevilkaRacuna;
            }

            public double Dvig(double znesek)
            {
                this.stanje -= znesek;   //ko denar dvignemo z računa, se prejšnje stanje zmanjša za ta znesek
                return this.stanje;
            }
            public double Polog(double znesek)
            {
                this.stanje += znesek;  //ko denar položimo na račun, se prejšnje stanje poveča za vloženi znesek
                return this.stanje;
            }

            public Racun(string niz)
            {
                string[] tab = niz.Split(';'); // v tabelo dodamo lastnosti objekta
                this.stevilkaRacuna= tab[0];
                this.stanje= double.Parse(tab[1]);
            }

            public override string ToString()
            {
                //izpis s podpičji
                string niz = stevilkaRacuna + ";" + stanje.ToString();
                return niz;
            }

            public void DodajNaDatoteko(string imeDatoteke)
            {
                StreamWriter f = File.AppendText(imeDatoteke); //odpremo za branje
                f.WriteLine(this.ToString()); //prebeeremo
                f.Close();  //zapremo
            }

            public static Racun[] PreberiZDatoteke(string imeDatoteke)
            {
                //če se omejimo na velikost tabele, moramo imeti pomožno tabelo (dovolj veliko)
                //ali pa 2 prehoda skozi dat. v 1. preštejemo vrstice, 2. tvorimo ustrezno veliko tab in vpisujemo podatke
                StreamReader f = File.OpenText(imeDatoteke);
                int st = 0; //števec vrstic
                while (!f.EndOfStream) //dokler ni konec datoteke
                {
                    st++;
                    f.ReadLine();  //beremo vrstice
                }
                f.Close();

                Racun [] tabela = new Racun[st];
                f = File.OpenText(imeDatoteke);
                st = -1;  //zato, da začnemo v tabeli šteti od 0!
                while (!f.EndOfStream)
                {
                    st++;

                    tabela[st] = new Racun(f.ReadLine()); //v tab dodamo vrstico iz dat
                }
                f.Close();


                return tabela;
            }

        }
        class Oseba
        {
            string ime;
            string priimek;
            string naslov;
            int starost;
            string stRacuna;
            long davcna;

            public Oseba(string i, string p, string n,int s, string stR, long d)
            {//konstruktor
                this.ime = i;
                this.priimek = p;
                this.naslov = n;
                this.starost = s;
                this.stRacuna = stR;
                this.davcna = d;
            }

            public string Ime()
            {
                return this.ime;
            }
            public string Priimek()
            {
                return this.priimek;
            }
            public string Naslov()
            {
                return this.naslov;
            }
            public int Starost()
            {
                return this.starost;
            }
            public string StR()
            {
                return this.stRacuna;
            }
            public long Davcna()
            {
                return this.davcna;
            }

            public Oseba(string niz)
            {
                string[] tab = niz.Split(';'); // v tabelo dodamo lastnosti objekta
                this.ime = tab[0];
                this.priimek = tab[1];
                this.naslov = tab[2];
                this.starost=int.Parse(tab[3]);
                this.stRacuna = tab[4];
                this.davcna = long.Parse(tab[5]);

            }
            public override string ToString()
            {
                //izpis s podpičji
                string niz = (ime) + ";" + priimek + ";" + naslov + ";" + starost + ";" + stRacuna + ";" + davcna.ToString();

                return niz;

            }

            public void DodajNaDatoteko(string imeDatoteke)
            {
                StreamWriter f = File.AppendText(imeDatoteke); //odpremo za branje
                f.WriteLine(this.ToString()); //prebeeremo
                f.Close();  //zapremo
            }

            public static Oseba[] PreberiZDatoteke(string imeDatoteke)
            {
                //če se omejimo na velikost tabele, moramo imeti pomožno tabelo (dovolj veliko)
                //ali pa 2 prehoda skozi dat. v 1. preštejemo vrstice, 2. tvorimo ustrezno veliko tab in vpisujemo podatke
                StreamReader f = File.OpenText(imeDatoteke);
                int st = 0; //števec vrstic
                while (!f.EndOfStream) //dokler ni konec datoteke
                {
                    st++;
                    f.ReadLine();  //beremo vrstice
                }
                f.Close();

                Oseba [] tabela = new Oseba [st];
                f = File.OpenText(imeDatoteke);
                st = -1;  //zato, da začnemo v tabeli šteti od 0!
                while (!f.EndOfStream)
                {
                    st++;

                    tabela[st] = new Oseba(f.ReadLine()); //v tab dodamo vrstico iz dat
                }
                f.Close();

                return tabela;
            }




        }


        static void Main(string[] args)
        {
            Racun racun1 = new Racun("SI56 1234 5678 9112 431", 1000);
            Racun racun2 = new Racun("SI56 1334 5678 9112 431", 2700);
            Racun racun3 = new Racun("SI56 1234 5888 9112 431", -3000);
            Racun racun4 = new Racun("SI56 1563 5338 9812 888", 1456.3);
            Racun racun5 = new Racun("SI56 1563 5338 9812 801", 274.24);

            Oseba os1 = new Oseba("Alisa", "Ibrahimovic", "Naslov 1", 21,"SI56 1234 5678 9112 431", 11234319);
            Oseba os2 = new Oseba("Mitja", "Kunec", "Naslov 2",34, "SI56 1334 5678 9112 431", 34218983);
            Oseba os3 = new Oseba("Cvetka", "Kunec", "Naslov 4", 42,"SI56 1234 5888 9112 431", 21218974);
            Oseba os4 = new Oseba("Klara", "Samec", "Naslov 3", 19,"SI56 1563 5338 9812 888", 27988909);
            Oseba os5 = new Oseba("Peter", "Kobal", "Naslov 3", 68,"SI56 1563 5338 9812 801", 27988909);

            os1.DodajNaDatoteko("osebe.txt");
            os2.DodajNaDatoteko("osebe.txt");
            os3.DodajNaDatoteko("osebe.txt");
            os4.DodajNaDatoteko("osebe.txt");
            os5.DodajNaDatoteko("osebe.txt");


            racun1.DodajNaDatoteko("racuni.txt");
            racun2.DodajNaDatoteko("racuni.txt");
            racun3.DodajNaDatoteko("racuni.txt");
            racun4.DodajNaDatoteko("racuni.txt");
            racun5.DodajNaDatoteko("racuni.txt");

            Oseba[] osebe = Oseba.PreberiZDatoteke("osebe.txt");
            Racun[] racun = Racun.PreberiZDatoteke("racuni.txt");

            //osebe:
            Console.WriteLine("Poglejmo si stanja v tabeli računi: ");



            //kdo ima največ denarja

           double najvecji = racun[0].Stanje();  //na začetku definiramo, da je prvo stanje največje
           Console.WriteLine(najvecji);
           string stevilkaracunaNajbogatejsega = racun[0].StR();

           for (int i = 1; i < racun.Length; i++)
           {
               Console.WriteLine(racun[i].Stanje());
               if (racun[i].Stanje() > najvecji)
               {
                   najvecji = racun[i].Stanje();
                   stevilkaracunaNajbogatejsega = racun[i].StR();
               }

           }


            string stevRa;
            Console.WriteLine("Najbogatejši je ");
            for (int j = 0; j < osebe.Length; j++)
            {
                stevRa = osebe[j].StR();
                if (stevRa == stevilkaracunaNajbogatejsega)
                {
                    Console.Write(osebe[j].Ime() + " ");
                    Console.WriteLine(osebe[j].Priimek() + ", ki ima " + najvecji + " eur.");
                }
            }


            //koliko denarja imajo vsi skupaj
            double vs = 0;
            for (int k = 0; k < racun.Length; k++)
            {
                vs += racun[k].Stanje();
            }
            Console.WriteLine("Vsi skupaj imajo " + vs + " eur.");
            Console.WriteLine();

            //nakažimo vsakemu po 1500 eur
            Console.WriteLine("Nakažimo vsakemu po 1500 eur. Nova stanja na računih ter naslovi oseb: ");
            for (int z = 0; z < racun.Length; z++)
            {
                double s = racun[z].Stanje();
                string naslov = osebe[z].Naslov();
                s+= 1500;
                Console.WriteLine("Znesek: " + s + " naslov: " + naslov );

            }
            Console.WriteLine();


            //koliko denarja imajo skupaj osebe, stare med 19 in 40 let?
            double vsotaa = 0.0;
            int starostt;
            double vmesnoStanje;

            for (int u = 0; u < racun.Length; u++)
            {
                starostt = osebe[u].Starost();
                vmesnoStanje = racun[u].Stanje();

                if (starostt >= 19 && starostt <= 40)
                {
                    vsotaa += vmesnoStanje;
                }
            }

            Console.WriteLine("Osebe med 19 in 40 let imajo " + vsotaa + " eur");


            //kdo je v minusu?
            double st;
            for (int l = 0; l < racun.Length; l++)
            {
                st = racun[l].Stanje();
                if (st < 0)
                {
                    string i = osebe[l].Ime();
                    string p = osebe[l].Priimek();
                    Console.WriteLine("V minusu je " + i + " " + p);
                }
            }

            //dvignimo nekaj denarja s prvega računa (lastnik Alisa Ibrahimović):
            Console.WriteLine("Alisa Ibrahimovic dvigne s svojega računa 200 eur.");
            double znesek = racun1.Dvig(200);
            Console.WriteLine("Po dvigu je novo stanje " + znesek + " eur.");

            //položimo 950 eur na račun, katerega lastnik je Cvetka Kunec
            double pol = racun3.Polog(950);
            Console.WriteLine("In ko položimo 950 eur na Cvetkin račun, je novo stanje " + pol + " eur.");
            Console.ReadLine();
        }
    }
}

Razlaga programa

Napisala sem razreda z imenom Oseba ter Racun. Oseba ima podatke: ime, priimek, naslov, starost, št.računa, davčna št. Racun ima podatke: št. računa, stanje

Napisala sem tudi funkcije, ki vračajo te podatke:


 public double Stanje()
            {
                return this.stanje;
            }

            public string StR()
            {
                return this.stevilkaRacuna;
            }
public string Ime()
            {
                return this.ime;
            }
            public string Priimek()
            {
                return this.priimek;
            }
            public string Naslov()
            {
                return this.naslov;
            }
            public int Starost()
            {
                return this.starost;
            }
            public string StR()
            {
                return this.stRacuna;
            }
            public long Davcna()
            {
                return this.davcna;
            }

Kdo ima največ denarja

  • Kdo ima največ denarja? Zanima nas torej maksimalno stanje v tabeli računov.


Racun racun1 = new Racun("SI56 1234 5678 9112 431", 1000);
            Racun racun2 = new Racun("SI56 1334 5678 9112 431", 2700);
            Racun racun3 = new Racun("SI56 1234 5888 9112 431", -3000);
            Racun racun4 = new Racun("SI56 1563 5338 9812 888", 1456.3);
            Racun racun5 = new Racun("SI56 1563 5338 9812 801", 274.24);


            Oseba os1 = new Oseba("Alisa", "Ibrahimovic", "Naslov 1", 21,"SI56 1234 5678 9112 431", 11234319);
            Oseba os2 = new Oseba("Mitja", "Kunec", "Naslov 2",34, "SI56 1334 5678 9112 431", 34218983);
            Oseba os3 = new Oseba("Cvetka", "Kunec", "Naslov 4", 42,"SI56 1234 5888 9112 431", 21218974);
            Oseba os4 = new Oseba("Klara", "Samec", "Naslov 3", 19,"SI56 1563 5338 9812 888", 27988909);
            Oseba os5 = new Oseba("Peter", "Kobal", "Naslov 3", 68,"SI56 1563 5338 9812 801", 27988909);


            os1.DodajNaDatoteko("osebe.txt");
            os2.DodajNaDatoteko("osebe.txt");
            os3.DodajNaDatoteko("osebe.txt");
            os4.DodajNaDatoteko("osebe.txt");
            os5.DodajNaDatoteko("osebe.txt");


            racun1.DodajNaDatoteko("racuni.txt");
            racun2.DodajNaDatoteko("racuni.txt");
            racun3.DodajNaDatoteko("racuni.txt");
            racun4.DodajNaDatoteko("racuni.txt");
            racun5.DodajNaDatoteko("racuni.txt");

Začetna stanja

(zacetnaStanja.jpg)

Kdo ima največ denarja

Ustvarila sem 5 objektov tipa Racun ter 5 objektov tipa Oseba. Le-te sem prepisala na datoteki osebe.txt in racuni.txt. Uporabila sem tudi funkcijo PreberiZDatoteke, preko katere dostopamo do podatkov.


double najvecji = racun[0].Stanje();  //na začetku definiramo, da je prvo stanje največje
           Console.WriteLine(najvecji);
           string stevilkaracunaNajbogatejsega = racun[0].StR();

           for (int i = 1; i < racun.Length; i++)
           {
               Console.WriteLine(racun[i].Stanje());
               if (racun[i].Stanje() > najvecji)
               {
                   najvecji = racun[i].Stanje();
                   stevilkaracunaNajbogatejsega = racun[i].StR();
               }

           }

 string stevRa;
            Console.WriteLine("Najbogatejši je ");
            for (int j = 0; j < osebe.Length; j++)
            {
                stevRa = osebe[j].StR();
                if (stevRa == stevilkaracunaNajbogatejsega)
                {
                    Console.Write(osebe[j].Ime() + " ");
                    Console.WriteLine(osebe[j].Priimek() + ", ki ima " + najvecji + " eur.");
                }
            }

Kdo ima največ denarja

  • Na začetku definiramo, da je prvo stanje največje
  • nato se sprehodimo po računih in preverjamo ali je katero stanje večje. Če je, je to nov maksimum.
  • torej stanje imamo, zanima nas kdo je lastrnik tega računa
  • to pa preverimo tako, da se sprehodimo po osebah ter poiščemo tisto osebo, ki ima številno računa enako spremenljivki stevilkaracunaNajbogatejsega
  • Ko najdemo ustrezen račun, z metodama Ime() in Priimek() dobimo željene podatke

Koliko denarja imajo vsi skupaj

Problem je enostaven - seštejemo vsa stanja v datoteki racuni.txt


//koliko denarja imajo vsi skupaj
            double vs = 0;
            for (int k = 0; k < racun.Length; k++)
            {
                vs += racun[k].Stanje();
            }
            Console.WriteLine("Vsi skupaj imajo " + vs + " eur.");
            Console.WriteLine();

Nakažimo vsakemu po 1500 eur


//nakažimo vsakemu po 1500 eur
            Console.WriteLine("Nakažimo vsakemu po 1500 eur. Nova stanja na računih ter naslovi oseb: ");
            for (int z = 0; z < racun.Length; z++)
            {
                double s = racun[z].Stanje();
                string naslov = osebe[z].Naslov();
                s+= 1500;
                Console.WriteLine("Znesek: " + s + " naslov: " + naslov );

            }
            Console.WriteLine();

Torej vsakemu zapisu v datoteki racuni.txt povečamo stanje za 1500 eur. Naloga zahteva tudi izpis naslovov oseb ter njihova nova stanja (slika kasneje).

Kdo je v minusu?

To lahko preverimo v Main-u.


double st;
            for (int l = 0; l < racun.Length; l++)
            {
                st = racun[l].Stanje();
                if (st < 0)
                {
                    string i = osebe[l].Ime();
                    string p = osebe[l].Priimek();
                    Console.WriteLine("V minusu je " + i + " " + p);
                }
            }

Sprehodimo se po računih in pogledamo stanje. Če je manjše od 0, v spremenljivki i in p shranimo ime ter priimek te osebe, ki je v minusu.


//dvignimo nekaj denarja s prvega računa (lastnik Alisa Ibrahimović):
            double znesek = racun1.Dvig(200);
            Console.WriteLine("Po dvigu je novo stanje " + znesek + " eur.");

Ker je oseb le 5, lahko takoj vidimo, kateri račun je od Alise Ibrahimović. Vidimo, da je to racun1. Ob klicu metode Dvig, se stanje na računu zmanjša za tisti parameter, ki je podan v metodi, tj. 200 eur (slika kasneje).



            //položimo 950 eur na račun, katerega lastnik je Cvetka Kunec
            double pol = racun3.Polog(950);
            Console.WriteLine("Novo stanje na računu Cvetke je " + pol + " eur.");
            Console.ReadLine();

Podobno je pri pologu. Kličemo fnkcijo Polog, z nekim parametrom in račun, na katerega nalagamo, se poveča za ta znesek.

Končni rezultat ob zagodu programa

(osebaKrog.jpg)
0%
0%