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();
}
}
}