5.3. Struktúra (rekord)
Különböző típusú adatok tárolására a rekord adattípust használhatjuk, amelyek egy adattáblához hasonlítanak, ahol sorok és oszlopok vannak. A C#-ban az adatokat struktúra segítségével számunkra megfelelő szerkezetbe, rendszerbe szervezhetjük. Eddig csak azonos típusú adatokat tudtunk tárolni a memóriában egy adatszerkezeten belül, mivel a tömbben csak azonos típusú adatok lehetnek.
Ha struktúrába szervezzük az adatokat, akkor először megadjuk a struktúra nevét, amelyet típusként használunk a későbbiekben, majd az oszlopok típusát és nevét. Szükség lesz egy tömbre is, amely az adattábla sorszámát adja meg.
51. feladat
Hozzunk létre egy adattáblát, amelynek maximum 500 sora lehet, az oszlopok neve pedig név, osztály és átlag legyen! Kérjük be az adatsorok számát és ennek megfelelően az adatokat, majd írjuk ki a háttértárolóra a programunk BIN/DEBUG könyvtárába adatok.txt néven!
Név: Rekord
Megoldás:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace Rekord
{
class Program
{
struct tanulo
{
public string nev;
public string osztaly;
public double atlag;
// Konstruktor a struktúrához
public tanulo(string nev, string osztaly, double atlag)
{
this.nev = nev;
this.osztaly = osztaly;
this.atlag = atlag;
}
}
static void Main(string[] args)
{
string fajlNev = "Tanulok_adatai.txt";
StreamWriter kiirtxt = null;
tanulo[] tanulok = new tanulo[500];
int i = 0, n = 0;
Console.Write(" Adatsorok száma: ");
n = Convert.ToInt32(Console.ReadLine());
for (i = 0; i < n; i++)
{
Console.Write(" Név: ");
tanulok[i].nev = Console.ReadLine();
Console.Write(" Osztály: ");
tanulok[i].osztaly = Console.ReadLine();
Console.Write(" Átlag: ");
tanulok[i].atlag = Convert.ToDouble(Console.ReadLine());
}
try
{
kiirtxt = new StreamWriter(fajlNev);
for (i = 0; i < n; i++)
{
if (i == 0)
{
kiirtxt.WriteLine("{0,11} {1,12} {2}", "Név", "Osztály", "Átlag");
}
kiirtxt.WriteLine("{0,15} {1,8} {2:0.00}", tanulok[i].nev, tanulok[i].osztaly, tanulok[i].atlag);
}
kiirtxt.Close();
Console.WriteLine("\n Sikeres mentés!");
}
catch (IOException)
{
Console.WriteLine(" I/O hiba történt a fájl írásakor");
}
Console.ReadKey();
}
}
}
A struct után megadtuk a rekord szerkezetét, azaz az oszlopok nevét és típusát. Ezzel egy úgynevezett „saját típust” hoztunk létre, amelyet a tanulok nevű tömb deklarációjánál használunk, ahol az adattábla sorainak számát adtuk meg. Az adatsorok értékét az n változó veszi fel, majd egy for ciklusban bekérjük az adatokat egy másikban pedig kiírjuk "Tanulók adatai" néven a háttértárolóra.