2022.05.27. Városok régebbi példaprogram OOP megoldása

  Ez a megoldás mindenkinek megvan a digifüzetében. Itt most közzéadom olyan optimalizált verzióját, amiben mindenre találsz példát.

using System;

using System.IO;

using System.Linq;

using System.Collections.Generic;

namespace VarosKereso

{

    class Varos

    {

        public string Varosnev;

        public int Lakosokszama;

        public int Tavolsag;

        public string Megyeszekhely;

        public Varos(string sor)

        {

            List<string> atmeneti = sor.Split(" ").ToList();

            Varosnev = atmeneti[0];

            Lakosokszama = Convert.ToInt32(atmeneti[1]);

            Tavolsag = Convert.ToInt32(atmeneti[2]);

            if (atmeneti.Count < 4)

            {

                Megyeszekhely = "Igen";

            }

            else

            {

                Megyeszekhely = "Nem"//feltételeztük, hogy jó volt a fájl tartalma

            }

        }

        public string kiiras() //ez egyetlen várost tud kezelni egyszerre

        {

            string ki = $"Település neve: {Varosnev}, Lakosok száma: {Lakosokszama} fő, Budapesttől való távolság: {Tavolsag} km, Megyeszékhely? {Megyeszekhely}";

            return ki;

        }

    }

    class Program

    {

        static string legtavolabbi(List<Varos> v)

        {

            int max = v[0].Tavolsag;

            int index = 0;

            for (int i = 1; i < v.Count; i++)

            {

                if (max < v[i].Tavolsag)

                {

                    max = v[i].Tavolsag;

                    index = i;

                }

            }

            return v[index].Varosnev;

        }

        static string lakszamFelett(List<Varos> v, int b)

        {

            string lakFelettKiir = String.Empty;

            bool van = false;

            for (int i = 0; i < v.Count; i++)

            {

                if (b < v[i].Lakosokszama)

                {

                    lakFelettKiir += v[i].kiiras() + "\n" ;

                    van = true;

                }

            }

            if (!van)

            {

                lakFelettKiir = "Nincs az ön által megadott lakosságszámnál nagyobb lakosszámmal rendelkező település.";

            }

            return lakFelettKiir;

        }

        static void fajlkiiras(List<Varos> a)

        {

            StreamWriter sw = new StreamWriter("Varos1.txt");

            for (int i = 0; i < a.Count; i++)

            {

                if (a[i].Megyeszekhely == "Nem")

                {

                    sw.WriteLine($"{a[i].Varosnev.ToUpper()},Nem megyeszékhely");

                }

                else

                {

                    sw.WriteLine($"{a[i].Varosnev.ToUpper()},Megyeszékhely");

                }

            }

            sw.Close();

        }

     

        static void Main(string[] args)

        {

            //A program neve legyen: varosok.

            //A tanult objektum-orientált programszerkezetet használd a megoldásnál.

            //Minden képernyőre író feladat előtt írjuk ki a főprogramban a feladat sorszámát.

            //A fájl most 5 sort tartalmaz, de a programod készüljön fel arra,

            //hogy hosszabb, és más tartalmú fájlt is fel tudjon dolgozni.

            //A programban városok adatait tároljuk.

            //Az adatok soronként: a város neve, lakosainak száma, Budapesttől mért távolsága,

            //illetve amelyik város nem megyeszékhely, ott még ez is szerepel: NO.

            //Ez legyen a varosok.txt tartalma:

            /*

            Békéscsaba 59000 210

            Szolnok 72000 119

            Kecskemét 112000 93

            Nyíregyháza 118000 230 NO

            Miskolc 164000 182

            */

            //1.feladat:

            Console.WriteLine("1. feladat\nBeolvasás");

            //Olvasd be a fájlt, és tárold a tartalmát egy osztálypéldányokat tartalmazó listában.

            List<Varos> varosok = new List<Varos>();

            foreach (var item in File.ReadAllLines("varosok.txt"))

            {

                varosok.Add(new Varos(item));

            }

            //2.feladat:

            //Írd ki az adatokat a képernyőre, egy sorba egy város adatait. 

            Console.WriteLine("2. feladat\nÖsszes adat kiírása");

            for (int i = 0; i < varosok.Count; i++)

            {

                Console.WriteLine(varosok[i].kiiras());

            }

            //3.feladat:

            Console.WriteLine("3. feladat\nNem megyeszékhelyek neve, népessége");

            //Írd ki a képernyőre annak a városnak a nevét, és a népességét, amely nem megyeszékhely.

            //(Ha több ilyen lenne, mindet ki kéne írni.) Ha nincs ilyen, írj ki hibaüzenetet.

            bool megyeszhely = false;

            for (int i = 0; i < varosok.Count; i++)

            {

                if (varosok[i].Megyeszekhely == "Nem")

                {

                    Console.WriteLine($"{varosok[i].Varosnev}{varosok[i].Lakosokszama}");

                    megyeszhely = true;

                }

            }

            if (megyeszhely == false)

            {

                Console.WriteLine("Nincs olyan település a listában, amely nem megyeszékhely!");

            }

            //4.feladat:

            //Írd ki a Budapesttől legtávolabbi város nevét a képernyőre. A feladatot lehetőleg függvénnyel valósítsd meg.

            //Ha nem függvénnyel valósítod meg, kaphatsz részpontokat.        

            Console.WriteLine("4. feladat\nLegtávolabbi város nevének kiíratása...");

            Console.WriteLine(legtavolabbi(varosok));

            //vagy szájbarágósabban:

            Console.WriteLine("4. feladat\nLegtávolabbi város nevének kiíratása once more...");

            string nev = legtavolabbi(varosok);

            Console.WriteLine(nev);

            //5.feladat:

            //Írd ki a legkevesebb lakosú város nevét a képernyőre. Nem kötelező metódust használni.

            Console.WriteLine("5. feladat\nLegkevesebb lakosú város nevének kiíratása...");

            int min = varosok[0].Lakosokszama;

            int index = 0;

            for (int i = 0; i < varosok.Count; i++)

            {

                if (min > varosok[i].Lakosokszama)

                {

                    min = varosok[i].Lakosokszama;

                    index = i;

                }

            }

            Console.WriteLine(varosok[index].Varosnev);

            //6.feladat:

            //Kérd meg a felhasználót a főprogramban, hogy adjon meg egy lakosságszámot.

            //Írd ki a felhasználó által beírt értéknél nagyobb lakosságú városok adatait, soronként egyet.

            //Ha nincs ilyen, írj ki hibaüzenetet.

            Console.WriteLine("6. feladat\nBekért értéknél nagyobb lakosságú városok összes adata");

            Console.Write("Kérek egy értéket: ");

            int bekert = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine(lakszamFelett(varosok, bekert));

            //7.feladat:

            //Döntsd el, hogy van-e 180 km-nél távolabbi város. Ha találsz ilyet,

            //írd ki az elsőnek a nevét és a hozzá tartozó km-t.

            //Ha nincs ilyen, írj ki hibaüzenetet.

            Console.WriteLine("7. feladat\n180 km-nél távolabbi városok kilistázása...");

 

            bool megfelel = false;

            int k = 0;

            while (k < varosok.Count && !megfelel)

            {

                if (varosok[k].Tavolsag > 180)

                {

                    megfelel = true;

                }

                k++;

            }

            if (megfelel)

            {

                Console.WriteLine($"{varosok[k - 1].Varosnev} az az első település amely Budapesttől 180 kilométeren túl helyezkedik el! A távolság {varosok[k - 1].Tavolsag} kilométer.");

            }

            else

            {

                Console.WriteLine($"HIBA! Nincsen olyan település az adatok között, amely Budapesttől messzebb lenne, mint 180 kilométer");

            }

            //8. feladat:

            //Írd ki egy új fájlba a városok neveit nagybetűsen,

            //mögéjük vesszővel elválasztva azt a szót,

            //hogy megyeszékhely/nem megyeszékhely

            //(a valóságnak megfelelően).

            Console.WriteLine("8. feladat\nVárosok kiíratása fájlba...");

            fajlkiiras(varosok);

            Console.WriteLine("A program bezárásához nyomjon meg egy billentyűt...");

            Console.ReadLine();

        }

    }

}


2023.04.26. Javító feladatsor