2022. március 24., csütörtök

2022.03.24. Atlétika megoldás

Még nem fejeztük be.  Legközelebb ellenőrizzük.

1.feladat:

CREATE DATABASE `atletika_eb` DEFAULT CHARACTER SET utf8 COLLATE utf8_hungarian_ci;

3.feladat:
UPDATE eredmenyek
SET helyezes=3
WHERE versID=6 AND helyID=10;

4.feladat:
SELECT nev, neme
FROM versenyzo
ORDER BY nev;

5.feladat:
SELECT helyszin.orszag AS "Ország", helyszin.varos AS "Helyszín", helyszin.ev AS "Év"
FROM helyszin
WHERE helyszin.orszag LIKE "%ország%"
ORDER BY helyszin.ev DESC;

6.feladat:
SELECT versenyzo.nev AS "Többszörös magyar érmes"
FROM versenyzo, eredmenyek
WHERE versenyzo.versID = eredmenyek.versID
AND eredmenyek.helyezes BETWEEN 1 AND 3
GROUP BY versenyzo.versID
HAVING COUNT(versenyzo.versID) > 1;

-- vagy
SELECT versenyzo.nev AS "Többszörös magyar érmes"
FROM versenyzo
INNER JOIN eredmenyek
ON versenyzo.versID = eredmenyek.versID
WHERE eredmenyek.helyezes BETWEEN 1 AND 3
GROUP BY versenyzo.versID
HAVING COUNT(versenyzo.versID) > 1;

7.feladat:
SELECT helyszin.varos AS "Helyszín", COUNT(eredmenyek.versID) AS "Létszám (fő)"
FROM helyszin, eredmenyek
WHERE helyszin.helyID = eredmenyek.helyID
AND eredmenyek.helyezes IS NOT NULL
GROUP BY helyszin.varos
ORDER BY COUNT(eredmenyek.versID) DESC;

-- vagy

SELECT helyszin.varos AS "Helyszín", COUNT(eredmenyek.versID) AS "Létszám (fő)"
FROM helyszin
INNER JOIN eredmenyek
ON helyszin.helyID = eredmenyek.helyID
WHERE eredmenyek.helyezes IS NOT NULL
GROUP BY helyszin.varos
ORDER BY COUNT(eredmenyek.versID) DESC;



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace atletikaVB
{
    class Program
    {          
        static List<Versenyszam> adatok = new List<Versenyszam>();

        static void Befejezes()
        {
            //Console.WriteLine("\nENTER-re várunk");
            Console.ReadLine();
        }

        static void Beolvas() //2. feladat
        {
            StreamReader sr = new StreamReader("atletikaVB2017.csv", Encoding.Default);
            while (!sr.EndOfStream)
            {
                string sor = sr.ReadLine();
                Versenyszam vszam = new Versenyszam(sor);
                adatok.Add(vszam);
                //Console.WriteLine(vszam.versenyzo); - próba jó-e a beolvasás
            }
            sr.Close();
        }

        static void USA_ermek() //4. feladat
        {
            Console.WriteLine("\n4. feladat:");
            int arany=0, db = 0;
            foreach (var adat in adatok)
            {
                if (adat.nemzet == "Egyesült Államok")
                {
                    if (adat.helyezes == 1)
                    {
                        arany++;
                    }
                    db++;
                }
            }
            double szazalek = arany * 100 / Convert.ToDouble(db);
            Console.WriteLine($"\tAz amerikai érmek {Math.Round(szazalek,1)}%-a arany.");
        }

        static void OrszagDobogosok() //5-6. feladat
        {
            Console.WriteLine("\n5. feladat:");
            Console.Write("\tAdja meg a nemzet nevét: ");
            string nemzet = Console.ReadLine();
            Console.Write("\tAdja meg a helyezést (1-3 egész szám): ");
            byte hely = Convert.ToByte(Console.ReadLine());
            string erem = "";
            switch (hely)
            {
                case 1: erem = "arany";
                    break;
                case 2: erem = "ezüst";
                    break;
                case 3: erem = "bronz";
                    break;
            }

            Console.WriteLine("\n6. feladat:");
            int i = 0;
            while (i < adatok.Count && !(adatok[i].nemzet == nemzet && adatok[i].helyezes == hely))
            {
                i++;
            }
            if (i < adatok.Count)
            {
                Console.WriteLine($"\t{nemzet} egyik {erem}érmet szerző versenyzője:\n\t{adatok[i].versenyzo} {adatok[i].vszNev} versenyszámban.");
            }
            else
            {
                Console.WriteLine($"\t{nemzet} nem szerzett {erem}érmet a VB-n.");
            }        
        }

        static void Statisztika() //7. feladat
        {

            Console.WriteLine("\n7. feladat:\n\tnői csúcsok a fájlba írva.");
            StreamWriter sw = new StreamWriter("noi_csucsok.txt");
            sw.WriteLine("név\tversenyszám\tnemzet");
            for (int i = 0; i < adatok.Count; i++)
            {
                if (!adatok[i].ferfi && adatok[i].csucs.Length != 0)
                {
                    sw.WriteLine($"{adatok[i].versenyzo}\t{adatok[i].vszNev}\t{adatok[i].nemzet}");
                }
            }
            sw.Close();
        }

        static void Main(string[] args)
        {
            Beolvas();
              //3. feladat
            Console.WriteLine("3.feladat:");
            Console.WriteLine($"\tA 2017-es londoni VB-n összesen {adatok.Count} érmet osztottak ki a {(adatok.Count-1)/3} versenyszámban.");
            USA_ermek();
            OrszagDobogosok();
            Statisztika();

            Befejezes();
        }
    }
}



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace atletikaVB
{
    class Versenyszam
    {
        public string vszNev  { get; set; } // A versenyszám neve
        public bool ferfi { get; set; } //  true-férfi; false-női;
        public string nemzet { get; set; } // Mely nemzet színeiben indult a dobogós
        public string versenyzo { get; set; } // A versenyző neve                        
        public string eredmeny { get; set; } // elért eredmény
        public string csucs { get; set; } // ért-e el valamilyen csúcsot az adott versenyző
        public byte helyezes { get; set; } // 1-arany; 2-ezüst; 3-bronz

        public Versenyszam(string sor)
        {
            string[] seged = sor.Split(';');
            vszNev = seged[0];
            if (seged[1] == "F") ferfi = true;
            else ferfi = false;                
            nemzet = seged[2];
            versenyzo = seged[3];
            eredmeny = seged[4];
            csucs = seged[5];
            helyezes = Convert.ToByte(seged[6]);
        }

    }
}




using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace atletikaGUI
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace atletikaGUI
{
    public partial class Form1 : Form
    {
        static List<Versenyszam> adatok = new List<Versenyszam>();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            StreamReader sr = new StreamReader("ferfiAtletika2017.txt", Encoding.Default);
            while (!sr.EndOfStream)
            {
                string sor = sr.ReadLine();
                Versenyszam vszam = new Versenyszam(sor);
                adatok.Add(vszam);
                lBoxVszam.Items.Add(vszam.vszNev);
            }
            sr.Close();
        }
Ebben a megoldásban nem figyelik azt, hogy csak az arany érmesek jelenjelenek meg:
        private void btArany_Click(object sender, EventArgs e)
        {
            foreach (var adat in adatok)
            {
                if (!lBoxNemzet.Items.Contains(adat.nemzet))
                {
                    lBoxNemzet.Items.Add(adat.nemzet);
                }
            }
            btArany.Visible = false;
        }

        private void btKeres_Click(object sender, EventArgs e)
        {
            lbEr.Text = "";  //ez nem volt elvárás
            lbNev.Text = ""; //ez nem volt elvárás
            lbNemz.Text = ""; //ez nem volt elvárás
            int vszam = lBoxVszam.SelectedIndex;
            int erem = Convert.ToInt32(nmErem.Value);
            if (vszam < 0)
            {
                MessageBox.Show("Nem választott ki versenyszámot!", "Hiba");
            }
            else if ((erem < 1) || (erem > 3))
            {
                MessageBox.Show("Csak érmes helyezéseket tartalmaz a statisztika!", "Hiba");
            }
            else
            {
                int i = 0;
                while (adatok[i].vszNev != Convert.ToString(lBoxVszam.SelectedItem) || adatok[i].helyezes != erem)
                {
                    i++;
                }
                lbEr.Text = adatok[i].eredmeny;
                lbNev.Text = adatok[i].versenyzo;
                lbNemz.Text = adatok[i].nemzet;
            }
        }
    }
}









Nincsenek megjegyzések:

Megjegyzés küldése