fel
le

Diák és könyvespolc

Az előzőek (property, lista) felül a konsruktorok használatát kell gyakorolni. A példányok mezőit ugyan random segítségével kell inicializálni, de a random használata a főprogramban van, nem a konstruktorokban! Ezen felül fel kell hívni a figyelmet arra,hogy a konstruktorok nem kérnek be adatot billentyűzetről, ha a feladat azt mondja ki, hogy a mezők értékét billentyűzetről kell beolvasni, azt akkor sem a konstruktor végzi, hanem a főprogram (vagy annak egy segédfüggvénye).

  • csak olvasható property, ahol a mező értékét a konstruktoron keresztül lehet beállítani
  • ez esetben a kezdőérték helyességét maga a konstruktor ellenőrzi le
  • vagy kevert védelmi szintű property készítése (get az public, a set az protected) mely esetben a konstruktor használhatja a set-et, a külvilág eközben mégsem
  • olyan objektumosztály (konténer) készítése, amely más objekutmokból készített listát kezel
  • a lista nem lehet publikus, a legszükségesebb listakezelő függvényeket definiálni szükséges (add, find, remove)
  • a listába nem kerülhet null értéke
  • a listába nem kerülhet bele egy objektum kétszer is
  • a listában valamiféle limit van (elemszámra, elemek tulajdonságainak összegére), mely limitet nem szabad átlépni (pl. munkások fizetésének összege nem haladhat meg egy limitet, utána új munkás nem kerülthet a listába, stb)

Diákok az iskolában

Egy diákról nyilvántartjuk a

  • életkorát, egész, 18..60 közötti érték,
  • szak (enum, matek, pti, web, stb)
  • neve, string, min 3 kar, max 50 kar hosszú,
  • tanulmányi átlagát, tört szám, 1.0 .. 5.0 közötti,
  • általa felvett tárgyak listája, stringek (tárgynevek), nem szerepelhet a listán null, és egy tárgynév maximum egyszer szerepelhet a listán.
  • konstruktor (neve, életkora, szak, átlaga)
  • konstruktor (neve, életkora, szak, átlaga, 2 tárgy neve)
  • konstruktor (neve, életkora, szak, átlaga, 1 tárgy neve)
  • konsruktor (neve, szak), az életkora ilyenkor fixen 18, átlaga 3.0, nincs tárgy felvéve

Készítsünk egy konténer osztályt, iskola

  • diákok listája,
  • a listára nem kerülhet fel null érték, egy diák csak egyszer szerepelhet,
  • lehet diákot hozzáadni és törölni (függvények)
  • megadja a diákok aktuális létszámát (csak olvasható property)
  • megadja diákok átlag életkorát (csak olvasható property)

Főprogram:

  • véletlen adatokkal feltölt egy iskolát 30 diákkal,
  • kiírja az iskola létszámát, átlag életkorát

HF: Könyvek a könyvespolcon

Egy könyvnek van:

  • írója (string), min 3 betű, max 50 betű
  • címe (string), min 3 betű, max 50 betű
  • kiadási éve, egész szám, min 1910, max az aktuális év,
  • ára, egész szám, maximum 15e Ft, 5-el osztható
  • műfaja, enum: mese, regény, történelem, szakkönyv, külföldi

A könyveket egy könyvespolcon tároljuk, amelynek:

  • tárol könyvek egy listáját, melyen nem szerepelhet null érték, és egy könyv maximum egyszer lehet rajta,
  • fv hozzáad(...), paramétere egy könyv, amelyet a könyvespolc listán kívánunk tárolni.
  • összár csak olvasható property, megadja a könyvespolcon tárolt könyvek összértékét,
  • fv keres(...) egy paramétere egy string, egy író neve, visszatér könyvek egy listájával, amelyek a könyvespolcon vannak tárolva, és amelyeknek az írója a megadott. ha nem talál ilyen könyvet, akkor 0 elemű listával tér vissza.

Főprogram:

  • véletlen értékekkel inicializál egy könyvespolcot, 40 könyvvel,
  • a könyv íróit egy listáról választja ki, a címet random állítja elő, a műfajt is random választja,
  • kiírja a könyvespolc összértékét,
  • kiírja besorszámozva a képernyőre az írók listáját, a felhasználó a sorszám beírásával választ írót
  • kilistázza a választott íróhoz tartozó könyvek címeit


Diák (picit más feladat, másik kód, megoldás)

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            diak L = new diak();
            L.setAtlag(2);
            L.setOsztondij(30000);
            Console.WriteLine("Átlag: {0} ,Ösztöndíj: {1}",L.getAtlag(),L.getOsztondij());
            Console.ReadLine();
           

        }
    }
    class diak
    {
        protected double atlag;
        protected int osztondij;

        public void setAtlag(double ertek)
        {
            if (ertek>=1 && ertek <=5)
            {
                if (osztondij > 0 && ertek == 1) throw new Exception("Hibás érték");
                else atlag = ertek;
            }
            else throw new Exception("Hibás érték");

        }

        public double getAtlag()
        {
            return atlag;
        }
        public void setOsztondij(int ertek)
       
        {
            if (ertek == 0 || ertek >= 10000 && ertek <= 60000)
            {
                if (atlag == 1 && ertek > 0) throw new Exception("Hibás érték");
                else osztondij = ertek;
            }
            else throw new Exception("Hibás érték");
        }
        public int getOsztondij()
        {
            return osztondij;
        }

    }
}
 

Diák (picit más feladat, másik kód, megoldás)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication3
{
    class diak
    {
        protected int _eletkora; // 0
        protected string _neve; // null
        protected double _atlag; // 0.0
        protected List<string> _targyak;
        // .......
        public int eletkora
        {
            set
            {
                if (value < 18 || value > 60) throw new Exception("nem jo eletkor ertek!");
                else _eletkora = value;
            }
            get { return _eletkora; }
        }
        // .....
        public string neve
        {
            get
            {
                return _neve;
            }
            set
            {
                if (value == null || value.Length < 5 || value.Length > 40)
                    throw new Exception("nem jo nev erteknek!");
                else _neve = value;
            }
        }
        // .................
        public double atlag
        {
            get { return _atlag; }
            set
            {
                if (value < 1.0 || value > 5.0) throw new Exception("nem jo atlag!");
                else _atlag = value;
            }
        }
        // ...................
        public void targyHozzaad(string nev)
        {
            if (nev == null) throw new Exception("null nem hozzaadhato!");
            foreach (string s in _targyak)
            {
                if (s == nev) throw new Exception("ez mar szerepel!");
            }
            _targyak.Add( nev );
        }
        // ...................
        public diak(int pEletkor, string pNeve, double pAtlag)
        {
            eletkora = pEletkor;
            neve = pNeve;
            atlag = pAtlag;
            _targyak = new List<string>();
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            List<diak> L = new List<diak>();
            for (int i = 0; i < 10; i++)
            {
                int e = rnd.Next(18, 61);
                double a = rnd.Next(100, 501)/100.0;
                string neve = String.Format("Lajos {0}",rnd.Next(10, 90));
                diak d = new diak(e,neve,a);
                L.Add(d);
            }
            // ------------
            int sum = 0;
            foreach (diak p in L)
            {
                sum = sum + p.eletkora;
            }
            double atlag = (double)sum / L.Count;
            Console.WriteLine("atlag eletkora = {0}", atlag);
            Console.ReadLine();
        }
    }
}
 

Könyvespolc (hasonló feladat, megoldás)

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

namespace ConsoleApplication1
{
    class Program
    {
        static Random r = new Random();
        static void kiir(List<konyv> L)
        {
            foreach (konyv x in L)
            {
                Console.WriteLine("Író: {0}, Cím:{1}, Ár:{2}, év:{3} műfaj:{4}",x.iro_nev,x.cim,x.ar,x.ev,x.mufajok);
            }
 
        }
       
        static void konyvespolcfeltolt(List<konyv> k, konyvespolc p)
        {
            foreach (konyv i in k)
            {
                p.hozzaad(i);
            }
        }

        static void Main(string[] args)
        {
            List<konyv> books = new List<konyv>();
       
            for (int i = 0; i < 10; i++)
            {
                konyv k = new konyv("iro " + r.Next(10, 50).ToString(), String.Format("címe:{0}", r.Next(10, 90)), r.Next(600, 1600) * 5, (mufaj)r.Next(0, 5), r.Next(1960, DateTime.Now.Year + 1));
                books.Add(k);
            }
           
           kiir(books);
           Console.WriteLine();
           konyvespolc valami=new konyvespolc();
           konyvespolcfeltolt(books, valami);
           kiir(valami.book);
           Console.WriteLine(valami.osszar);
           Console.WriteLine();
           List<konyv> L=new List<konyv>();
            L=valami.keres("iro 21");
            kiir(L);
           Console.ReadLine();
            }
        }
    }
    public enum mufaj { mese, regény, történelem, szakkönyv, külföldi }
    class konyv
    {
        protected string _iro_nev;
        protected string _cim;
        protected int _ev;
        protected int _ar;
        public mufaj mufajok;
     

        public string iro_nev
        {
            get
            {
                return _iro_nev;
            }
            set
            {
                if (value == null ||value.Length >= 5 && value.Length <= 50) _iro_nev = value;
                else throw new Exception("Hiba");
            }
        }
        public string cim
        {
            get
            {
                return _cim;
            }
            set
            {
                if (value == null || value.Length >= 5 && value.Length <= 50) _cim = value;
                else throw new Exception("Hiba");
            }
        }
        public int ev
        {
            get
            {
                return _ev;
            }
            set
            {
                if (value >= 1100 && value <= DateTime.Now.Year) _ev = value;
                else throw new Exception("Hiba");
            }
        }
        public int ar
        {
            get
            {
                return _ar;
            }
            set
            {
                if (value >= 0 && value <= 15000 && value%5==0) _ar = value;
                else throw new Exception("Hiba");
            }
        }

        public konyv(string pIro_nev, string pCim, int pAr, mufaj pMufajok , int pEv)
        {
            iro_nev = pIro_nev;
            cim = pCim;
            ev = pEv;
            ar = pAr;
            mufajok = pMufajok;
        }
        public konyv(string pIro_nev, string pCim, int pAr, mufaj pMufajok)
            :this( pIro_nev,  pCim, pAr, pMufajok,DateTime.Now.Year) {}

       

    }

    class konyvespolc
    {
        protected List<konyv> _book = new List<konyv>();
        public List<konyv> book
        {
            get
            {
                return _book;
            }
       
        }

        public void hozzaad(konyv x)
        {
            if (x.ev !=0 && x.ar != 0 && x.cim != null && x.iro_nev != null)
               
            {
                bool joe = true;

                for (int i = 0; i < _book.Count; i++)
                {
                    if (x.ev == book[i].ev && x.ar == book[i].ar && x.cim == book[i].cim && x.iro_nev == book[i].iro_nev && x.mufajok == book[i].mufajok)
                    {
                        joe = false;
                        break;
                    }
                   
                }

                if (joe) _book.Add(x);
            }
            else throw new Exception("Hiba");
           
        }

        public int osszar
        {
            get
            {
                int summ=0;
                foreach (konyv x in _book)
                {
                    summ += x.ar;
                }
                return summ;
            }
        }

        public List<konyv> keres(string x)
        {
            List<konyv> k=new List<konyv>();
            for (int i = 0; i <_book.Count ; i++)
            {
                if (_book[i].iro_nev == x) k.Add(_book[i]);
            }
            return k;
        }
    }
 
Hernyák Zoltán
2013-04-30 17:53:03