16. tétel: Statisztika fájlból (2.)

Feladat: Írjon egy programot szöveges környezetben, mely beolvas az ERETTS.TXT fájlból adatsorokat. 1 adatsor 1 sorból olvasható. Minden adatsor a következőket tartalmazza: tanuló neve, magyar jegy, matematika jegy, történelem jegy, angol jegy, D.K. jegy. Az egyes adatok vesszővel vannak elválasztva.
Írja ki a képernyőre, hogy hány tanulót olvasott be és minden tárgyhoz írja ki az átlagot!
Feltételezheti, hogy a fájl létezik, legalább 1 sor van benne, maximum 20 adatsor várható. Az adatok valódiságát nem kell ellenőriznie. A működő programot és a kódot mutassa be tanárának!

Egy lehetséges megoldás Visual C# nyelven:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;            //Ez kell a fájlműveletekhez

namespace 16tetel
{
    class Program
    {
        struct tanulo       //Így könnyebb lesz eltárolni a beolvasott adatokat
        {
            public string nev;
            public int magyar;
            public int matek;
            public int tori;
            public int angol;
            public int dk;
        }

        static void Main(string[] args)
        {
            // 16. tétel: Statisztika fájlból (2.)
            StreamReader bevisz = new StreamReader("ERETTS.TXT");
            tanulo[] ember = new tanulo[20];
            tanulo osszes;      //Összesítéshez használt változó
            osszes.magyar = 0;
            osszes.matek = 0;
            osszes.tori = 0;
            osszes.angol = 0;
            osszes.dk = 0;
            string s;               //Beolvasáshoz segédváltozó
            int szamol=0;           //Adatsorokat számolja meg. 
            string[] reszek = new string[6];        //Tördeléshez ideális segítség
            do
            {
                szamol++;
                s = bevisz.ReadLine();
                reszek = s.Split(',');
                ember[szamol].nev = reszek[0];
                ember[szamol].magyar = Convert.ToInt32(reszek[1]);
                osszes.magyar += ember[szamol].magyar;
                ember[szamol].matek = Convert.ToInt32(reszek[2]);
                osszes.matek += ember[szamol].matek;
                ember[szamol].tori = Convert.ToInt32(reszek[3]);
                osszes.tori += ember[szamol].tori;
                ember[szamol].angol = Convert.ToInt32(reszek[4]);
                osszes.angol += ember[szamol].angol;
                ember[szamol].dk = Convert.ToInt32(reszek[5]);
                osszes.dk += ember[szamol].dk;
            }   
            while (!bevisz.EndOfStream);
     bevisz.Close();
            Console.WriteLine("Beolvasott tanulók száma: {0}",szamol);
            Console.WriteLine("Tantárgyak és átlagok:");
            Console.WriteLine("Magyar átlag: {0,4:.00}", (float)osszes.magyar/szamol);
            Console.WriteLine("Matematika átlag: {0,4:.00}", (float)osszes.matek/szamol);
            Console.WriteLine("Történelem átlag: {0,4:.00}", (float)osszes.tori/szamol);
            Console.WriteLine("Angol átlag: {0,4:.00}", (float)osszes.angol/szamol);
            Console.WriteLine("D.K. átlag: {0,4:.00}", (float)osszes.dk/szamol);
            Console.WriteLine("\n\nA program futása véget ért!");
        }
    }
}

Az ERETTS.TXT fájl egy lehetséges tartalma:
Lásd a 15. tételnél!