2022. április 12., kedd

Nobel-díj (prog.), Tour de Hongrie (AB) - Megoldás

using System;

using System.Collections.Generic;
using System.Linq;
using System.IO;

namespace OrvosiNobeldijasok
{
    class Elethossz
    {
        private int Tol { get; set; }
        private int Ig { get; set; }
        public int ElethosszEvekben => Tol == -1 || Ig == -1 ? -1 : Ig - Tol;

        public bool IsmertAzElethossz => ElethosszEvekben != -1;

        public Elethossz(string SzuletesHalalozas)
        {
            string[] m = SzuletesHalalozas.Split('-');
            try
            {
                Tol = int.Parse(m[0]);
            }
            catch (Exception)
            {
                Tol = -1;
            }
            try
            {
                Ig = int.Parse(m[1]);
            }
            catch (Exception)
            {
                Ig = -1;
            }
        }
    }
    class Díjazott // 2. feladathoz
    {
        public int Év { get; private set; }
        public string Név { get; private set; }
        public string SzületésHalálozás { get; private set; }
        public string Országkód { get; private set; }


        public Díjazott(string sor)
        {
            string[] m = sor.Split(';');
            Év = int.Parse(m[0]);
            Név = m[1];
            SzületésHalálozás = m[2];
            Országkód = m[3];
        }

    }
    class OrvosiNobeldijasok
    {
        static void Main()
        {
            // 2. feladat:
            List<Díjazott> díjazottak = new List<Díjazott>();
            foreach (var i in File.ReadAllLines("../../orvosi_nobeldijak.txt").Skip(1))
            {
                díjazottak.Add(new Díjazott(i));
            }

            // 3. feladat
            Console.WriteLine($"3. feladat: Díjazottak száma: {díjazottak.Count} fő");

            // 4. feladat
            int utolsóÉv = díjazottak.First().Év;
            foreach (var i in díjazottak.Skip(1))
            {
                if (i.Év > utolsóÉv) utolsóÉv = i.Év;
            }
            Console.WriteLine($"4. feladat: Utolsó év: {utolsóÉv}");

            Console.Write("5. feladat: Kérem adja meg egy ország kódját: ");
            string inputOrszágkód = Console.ReadLine().ToUpper();
            List<Díjazott> inputOrszágDíjazottjai = new List<Díjazott>();
            foreach (var i in díjazottak)
            {
                if (i.Országkód == inputOrszágkód) inputOrszágDíjazottjai.Add(i);
            }

            if (inputOrszágDíjazottjai.Count == 0)
            {
                Console.WriteLine("\tA megadott országból nem volt díjazott!");
            }
            if (inputOrszágDíjazottjai.Count == 1)
            {
                Console.WriteLine($"\tA megadott ország díjazottja:");
                Console.WriteLine($"\tNév: {inputOrszágDíjazottjai.First().Név}");
                Console.WriteLine($"\tÉv: {inputOrszágDíjazottjai.First().Év}");
                Console.WriteLine($"\tSz/H: {inputOrszágDíjazottjai.First().SzületésHalálozás}");
            }
            if (inputOrszágDíjazottjai.Count > 1)
            {
                Console.WriteLine($"\tA megadott országból {inputOrszágDíjazottjai.Count} fő díjazott volt!");
            }

            Console.WriteLine("6. Statisztika");
            Dictionary<string, int> stat = new Dictionary<string, int>();
            foreach (var i in díjazottak)
            {
                if (stat.ContainsKey(i.Országkód)) stat[i.Országkód]++;
                else stat.Add(i.Országkód, 1);
            }
            foreach (var i in stat)
            {
                if (i.Value > 5) Console.WriteLine($"\t{i.Key} - {i.Value} fő");
            }

            // 7. feladat
            int élethosszÖsszeg = 0;
            int ismertÉlethosszFő = 0;
            foreach (var i in díjazottak)
            {
                Elethossz aktDíjazottÉletkora = new Elethossz(i.SzületésHalálozás);
                if (aktDíjazottÉletkora.IsmertAzElethossz)
                {
                    élethosszÖsszeg += aktDíjazottÉletkora.ElethosszEvekben;
                    ismertÉlethosszFő++;
                }
            }
            Console.WriteLine($"7. feladat: A keresett átlag: {(double)élethosszÖsszeg / ismertÉlethosszFő:f1} év");

            Console.ReadKey();
        }
    }
}

using System.IO;
using System.Windows;
using System.Collections.Generic;

namespace OrvosiNobeldijasokGUI
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void BtnMentés_Click(object sender, RoutedEventArgs e)
        {
            if (TbÉv.Text != "" && TbNév.Text != "" && TbSzH.Text != "" && TbOrszág.Text != "")
            {
                if (int.Parse(TbÉv.Text) <= 1989)
                {
                    MessageBox.Show("Hiba! Az évszám nem megfelelő!", "Mentés");
                    return;
                }
                try
                {
                    List<string> ki = new List<string>();
                    ki.Add("Év;Név;SzületésHalálozás;Országkód");
                    ki.Add($"{TbÉv.Text};{TbNév.Text};{TbSzH.Text};{TbOrszág.Text}");
                    File.WriteAllLines("../../uj_dijazott.txt", ki);
                    TbÉv.Text = "";
                    TbNév.Text = "";
                    TbSzH.Text = "";
                    TbOrszág.Text = "";
                }
                catch (System.Exception)
                {
                    MessageBox.Show("Hiba az állomány írásánál!");
                }
            }
            else MessageBox.Show("Töltsön ki minden mezőt!", "Mentés");
        }
    }
}

<Window x:Class="OrvosiNobeldijasokGUI.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:OrvosiNobeldijasokGUI"
        mc:Ignorable="d"
        Title="Orvosi Nobel-díjasok" Height="250" Width="320">
    <Grid>
        <Label Content="Év:" HorizontalAlignment="Left" Margin="20,20,0,0" VerticalAlignment="Top"/>
        <Label Content="Név:" HorizontalAlignment="Left" Margin="20,50,0,0" VerticalAlignment="Top"/>
        <Label Content="Sz/H:" HorizontalAlignment="Left" Margin="20,80,0,0" VerticalAlignment="Top"/>
        <Label Content="Ország:" HorizontalAlignment="Left" Margin="20,110,0,0" VerticalAlignment="Top"/>
        <TextBox x:Name="TbÉv" HorizontalAlignment="Left" Height="23" Margin="80,20,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="50"/>
        <TextBox x:Name="TbNév" HorizontalAlignment="Left" Height="23" Margin="80,50,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200"/>
        <TextBox x:Name="TbSzH" HorizontalAlignment="Left" Height="23" Margin="80,80,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="100"/>
        <TextBox x:Name="TbOrszág" HorizontalAlignment="Left" Height="23" Margin="80,110,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="50"/>
        <Button x:Name="BtnMentés" Content="Adatok mentése" HorizontalAlignment="Left" Margin="100,170,0,0" VerticalAlignment="Top" Width="100" Click="BtnMentés_Click" />

    </Grid>
</Window>



-- A feladatok megoldására elkészített SQL parancsokat illessze be a feladat sorszáma után!

-- 9. feladat:
CREATE DATABASE tdhongrie
  DEFAULT CHARACTER SET utf8
  COLLATE utf8_hungarian_ci;

-- 11. feladat:
DELETE FROM
  csapat
WHERE
  id = 21;

-- 12. feladat:
SELECT
  nev
FROM
  versenyzo
WHERE
  nemzetiseg = "HUN"
ORDER BY
  nev ASC;

-- 13. feladat:
SELECT
  nemzetiseg,
  COUNT(id) AS indulokSzama
FROM
  versenyzo
GROUP BY
  nemzetiseg
ORDER BY
  2 DESC;

-- 14. feladat:;
SELECT
  eredmeny.szakasz,
  eredmeny.ido
FROM
  eredmeny INNER JOIN versenyzo
    ON eredmeny.versenyzoId = versenyzo.id
WHERE
  versenyzo.nev = "Valter Attila";
 
-- 15. feladat:
SELECT
  csapat.csapatNev,
  COUNT(versenyzo.id) AS magyarokSzama
FROM
  versenyzo INNER JOIN csapat
    ON versenyzo.csapatId = csapat.id
WHERE
  versenyzo.nemzetiseg = "HUN"
GROUP BY
  csapat.csapatNev
HAVING
  COUNT(*) > 1;


Nincsenek megjegyzések:

Megjegyzés küldése