A txt-t megkaptad Teamsben.
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Linq;
namespace _20210426
{
//A program neve legyen: barlangok.
//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 forrás fájlt megkapod, annak tartalmát kell feldolgoznod.
//A fájl most 183 sort tartalmaz, amelyből az elsőt nem kell feldolgoznod.
//A programod készüljön fel arra, hogy hosszabb, és más tartalmú fájlt is fel tudjon dolgozni.
//Minden feladat előtt írd ki a képernyőre, melyik feladat megoldása következik.
//Az adatok sorrendben a következők:
//nev: a barlang neve
//hossz: a barlang hossza méterben
//kiterjedes: a barlang kiterjedése méterben
//melyseg: a barlang mélysége méterben
//magassag: a barlang magassága a bejárathoz képest méterben
//telepules: településnév, amelyhez a barlang tartozik
class Barlang
{
public string nev;
public double hossz;
public double kiterjedes;
public double melyseg;
public double magassag;
public string telepules;
public Barlang(string sor)
{
List<string> atmeneti = sor.Split('\t').ToList();
nev = atmeneti[0];
hossz = Convert.ToDouble(atmeneti[1]);
kiterjedes = Convert.ToDouble(atmeneti[2]);
melyseg = Convert.ToDouble(atmeneti[3]);
magassag = Convert.ToDouble(atmeneti[4]);
telepules = atmeneti[5];
}
public override string ToString()
{
return $"Település neve:{telepules}\nBarlang neve:{nev}\nHossza:{hossz} m";
}
}
class Program
{
static void Main(string[] args)
{
//1.feladat:
//Olvasd be a fájlt, és tárold a tartalmat egy osztálypéldányokat tartalmazó listában a tanult módon.
List<Barlang> barlangok = new List<Barlang>();
foreach (var i in File.ReadAllLines("barlang.txt").Skip(1))
{
barlangok.Add(new Barlang(i));
}
//2.feladat:
// Írd ki a képernyőre a települések nevét, mellé a barlang nevét, és a hosszát.
//Ehhez virtuális metódust használj a tanult módon: ToString().
Console.WriteLine("\n2. feladat");
for (int i = 0; i < barlangok.Count; i++)
{
Console.WriteLine(barlangok[i].ToString());
}
//Másik megoldás:
//Ez is működik, mivel a virtuális metódus "eredetijét", a ToString()-et
//automatikusan futtatja a fordító a WriteLine() használatakor
//(mert megpróbálja értelmezni, hogyan lehetne a paraméterből stringet csinálni)
//(ezért is volt jó felülírni a ToStringet)
Console.WriteLine("\n2. feladat-másik megoldás");
for (int i = 0; i < barlangok.Count; i++)
{
Console.WriteLine(barlangok[i]);
}
//3.feladat:
// Jelenítsd meg a képernyőn a 100 méternél hosszabb barlangok nevét.
//Ehhez paraméteres metódust használj.
Console.WriteLine("\n3. feladat");
_100meter(barlangok);
//4.feladat:
// Írd ki a képernyőre a leghosszabb barlang nevét.
//A feladatot lehetőleg paraméteres függvénnyel valósítsd meg.
//Ha nem függvénnyel valósítod meg, kaphatsz részpontokat.
Console.WriteLine("\n4. feladat");
Console.WriteLine($"Leghosszabb barlang neve: {leghosszabbBarlang(barlangok)}");
//5.feladat:
// Van-e 50 méternél rövidebb barlang?
//Ha van, írd ki a nevét és a települést a képernyőre.
//Ha nincs, írj ki hibaüzenetet.
//Ha a választ meg tudod adni, ne keress tovább.
//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("\n5. feladat");
Console.WriteLine(_50nelRovidebb(barlangok));
//6.feladat:
//Kérd meg a felhasználót a főprogramban, hogy adja meg egy barlang nevét.
//Írd ki a képernyőre azoknak a barlangoknak a nevét - soronként egyet -
//amik ugyanazon a településen vannak, mint amelyik településen a bekért nevű barlang van.
//Ha nincs ilyen, írj ki hibaüzenetet.
//A feladatot paraméteres metódussal oldd meg.
//Ha nem sikerül így, akkor is kaphatsz részpontokat.
Console.WriteLine("\n6. feladat");
Console.Write("Kérem a barlang nevét: ");
string be = Console.ReadLine();
barlangkeres(barlangok, be);
//7. feladat:
//Írj ki egy új fájlba soronként egy 1-től kezdődő sorszámot,
//mellé abc-ben a 100 méternél mélyebb barlangok nevét.
Console.WriteLine("\n7. feladat");
fajliras(barlangok);
Console.WriteLine("Fájlbaírás kész.");
//Emelt szintű feladat:
//Írd ki településenként a barlangok nevét.
//A település neve csak egyszer jelenjen meg.
Console.WriteLine("\nEmelt feladat");
Console.WriteLine(felsorolas(barlangok));
Console.ReadLine();
}
#region Metódusok
static void _100meter(List<Barlang> lista)
{
Console.WriteLine("Barlangok neve: ");
for (int i = 0; i < lista.Count; i++)
{
if (lista[i].hossz > 100)
{
Console.WriteLine(lista[i].nev);
}
}
}
static string leghosszabbBarlang(List<Barlang> lista)
{
List<double> hosszok = new List<double>();
for (int i = 0; i < lista.Count; i++)
{
hosszok.Add(lista[i].hossz);
}
double max = hosszok.Max(); //megadja a maximális értéket
int index = hosszok.IndexOf(max); //megadja a maximális érték indexét
string maxNeve = lista[index].nev; //kinyerjük a nagy listából az annyiadik elemből a nev mezőértékét
return maxNeve;
//ugyanez egy sorban (emelt szinten kell tudni így):
//return lista[hosszok.IndexOf(hosszok.Max())].nev;
}
//Ez itt a hab a tortán, ezt nem volt kötelező írni, de mintapéldája annak,
//hogyan kell metóduson belül új metódust hívni.
static string kiirNevTelepules(List<Barlang> lista, int index)
{
return $"A barlang neve: {lista[index].nev}\nA település neve: {lista[index].telepules}";
}
static string _50nelRovidebb(List<Barlang> lista)
{
int i = 0;
bool van = false;
while (i < lista.Count && !van)
{
if (lista[i].hossz < 50)
{
van = true;
}
i++;
}
//Mint látjuk, itt két return van, de egymást kizáró szelekciós ágakban
//tehát csak az egyik tud egyszerre megvalósulni.
if (lista.Count == i)
{
return "50 méternél nincs rövidebb barlang";
}
else
{
return kiirNevTelepules(lista,i-1);
}
}
static void barlangkeres(List<Barlang> lista, string be)
{
int i = 0;
while (i < lista.Count && lista[i].nev != be)
{
i++;
}
//ha rosszul adta meg, hibás lesz az eredmény, de nem volt feladat ellenőrizni
bool van = false;
for (int j = 0; j < lista.Count; j++)
{
if (lista[i].telepules == lista[j].telepules)
{
if (lista[j].nev != be) //azért, hogy ne írja ki ugyanazt a barlangnevet, amit bekértünk
{
Console.WriteLine(lista[j].nev);
van = true;
}
}
}
if (!van)
{
Console.WriteLine("Nincs másik barlang az adott településen.");
}
}
static void fajliras(List<Barlang> lista)
{
StreamWriter sw = new StreamWriter("melyebbarlangok.txt");
List<string> nevekABC = new List<string>();
for (int i = 0; i < lista.Count; i++)
{
if (lista[i].melyseg > 100)
{
nevekABC.Add(lista[i].nev);
}
}
nevekABC.Sort();
for (int i = 0; i < nevekABC.Count; i++)
{
sw.WriteLine($"{i + 1}. {nevekABC[i]}");
}
sw.Close();
}
static string felsorolas(List<Barlang> lista)
{
List<string> telepulesek = new List<string>();
for (int i = 0; i < lista.Count; i++)
{
telepulesek.Add(lista[i].telepules);
}
//a lista egyforma elemei közül egyet őrzünk meg a Distinct segítségével
telepulesek = telepulesek.Distinct().ToList();
telepulesek.Sort();
//foreach (var item in telepulesek)
//{
// Console.WriteLine(item);
//}
string text = string.Empty;
for (int i = 0; i < telepulesek.Count; i++)
{
text += telepulesek[i].ToUpper() + '\n';
for (int j = 0; j < lista.Count; j++)
{
if (telepulesek[i] == lista[j].telepules)
{
text += '\t'+ lista[j].nev + '\n' ;
}
}
text += '\n';
}
return text;
}
#endregion
}
}