Megnéztük a két példaprogramot és befejeztük az atlétikát. Ellenőriztünk mindent. A többség elkezdte a Magyarország városait (annak a megoldása eleve adott, önállóan ellenőrizhető).
[ide pótolni kell még egy wpf-es megoldást]
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;
Ez egy Windows formos megoldás:
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();
}
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;
}
}
}
}
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.Threading.Tasks;
using System.IO;
using System.Text;
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();
}
}
}
Nincsenek megjegyzések:
Megjegyzés küldése