Általánosságban

  • A vizsga 240 perces, ennyi ideig intnezíven figyelni rendkívül fárasztó. Igyekezz pihenten megérkezni!
  • Inkább jelenj meg 10 perccel korábban, mint egy perccel később.
  • Figyelj a vizsgaszervezőre. Minden vizsgahelyen fontos a szabályok betartása.
  • Ha megkaptad a feladatot, figyelmesen olvasd végig! Ha valami nem érthető célszerű azonnal jelezned!
  • Nagyon fontos, hogy minden általad készített fájlt beadj. Javaslom jelölj ki magadnak egy mappát - ha a vizsgaszervező nem jelölte ki - és hozz létre az adott helyen mappát
    
    mkdir vizsga
    cd vizsga
    mkdir forras  
  • Ellenőrízd le, hogy a feladatleírásban szereplő források valóban a rendelkezésedre állnak!
  • Indítsd el a megoldáshoz szükséges programokat és ellenőrízd a verziószámukat!
    • XAMPP
      • Apache
      • MySql
    • Visual Studio Community
    • Visual Studio Code
    • node.js

1. konzolos asztali alkalmazásfejlesztés C# nyelven 15 pont

A kapott forrás felhasználásával elemi algoritmus alkalmazásával egyszerű statisztikai mutatókat kell meghatározni és megjeleníteni egy mintának megfelelően.


dotnet new sln -n SajatMegoldas
dotnet new console --use-program-main -n SajatProjekt
dotnet sln SajatMegoldas.sln add "SajatProjekt\SajatProjekt.csproj"

  

2. grafikus asztali alkalmazásfejlesztés C# nyelven 10 pont

Grafikus felületen kell a kapott adatforrásban valamilyen változást végrehajtani. Létrehozhatsz új solution-t vagy a meglévőhöz hozzáadhatsz egyet.

Hozzáadhasz WinForm-os projectet:


dotnet new winforms -n MyGuiApp.WinForms
dotnet sln add "MyGuiApp.WinForms\MyGuiApp.WinForms.csproj"

  

vagy WPF-es projectet is:


dotnet new wpf -n MyGuiApp.WPF
dotnet sln add "MyGuiApp.WPF\MyGuiApp.WPF.csproj"

  

3. reszponzív viselkedésű weboldal készítés és formázás 10 pont

A feladat leírástól függően kérhetik külön statikus weblapok készítését, vagy a létrehozandó frontend alkalmazás formázására kaphatod meg ezt a 10 pontot.

4. backend programozás 15 pont

Adatbázis lekérdezést is végző, néhány végpontot tartalmazó REST API kiszolgáló létrehozása


mkdir backend
cd backend
npm i express mysql2 cors
npm pkg set type=module
echo import express from 'express'; > index.js
echo import cors from 'cors'; >> index.js
echo import mysql from 'mysql2'; >> index.js
echo. >> index.js
echo const app = express(); >> index.js
echo app.use(cors()); >> index.js
echo app.use(express.json()); >> index.js
echo. >> index.js
echo const db = mysql.createConnection(^{ >> index.js
echo     host: 'localhost', >> index.js
echo     user: 'root', >> index.js
echo     password: '', >> index.js
echo     database: '', >> index.js
echo     port: 3306 >> index.js
echo }); >> index.js
echo. >> index.js
echo // vegpontok >> index.js
echo. >> index.js

  echo app.get('/api/vegpontok', (req, res) =^> { >> index.js
  echo     db.query('SELECT * FROM vegpontok', (err, results) =^> { >> index.js
  echo         if (err) { >> index.js
  echo             console.error(err); >> index.js
  echo             res.status(500).send('Error retrieving vegpontok'); >> index.js
  echo         } else { >> index.js
  echo             res.json(results); >> index.js
  echo         } >> index.js
  echo     }); >> index.js
  echo }); >> index.js
  echo; >> index.js
  echo app.get('/api/vegpontok/:id', (req, res) =^> { >> index.js
  echo     const id = req.params.id; >> index.js
  echo     db.query('SELECT * FROM vegpontok WHERE id = ?', [id], (err, results) =^> { >> index.js
  echo         if (err) { >> index.js
  echo             console.error(err); >> index.js
  echo             res.status(500).send('Error retrieving vegpont'); >> index.js
  echo         } else if (results.length === 0) { >> index.js
  echo             res.status(404).send('Vegpont not found'); >> index.js
  echo         } else { >> index.js
  echo             res.json(results[0]); >> index.js
  echo         } >> index.js
  echo     }); >> index.js
  echo }); >> index.js
  echo; >> index.js
  echo app.post('/api/vegpontok', (req, res) =^> { >> index.js
  echo     const vegpont = req.body; >> index.js
  echo     db.query('INSERT INTO vegpontok SET ?', vegpont, (err, results) =^> { >> index.js
  echo         if (err) { >> index.js
  echo             console.error(err); >> index.js
  echo             res.status(500).send('Error creating vegpont'); >> index.js
  echo         } else { >> index.js
  echo             res.status(201).json({ id: results.insertId, ...vegpont }); >> index.js
  echo         } >> index.js
  echo     }); >> index.js
  echo }); >> index.js
  echo; >> index.js
  echo app.put('/api/vegpontok/:id', (req, res) =^> { >> index.js
  echo     const id = req.params.id; >> index.js
  echo     const vegpont = req.body; >> index.js
  echo     db.query('UPDATE vegpontok SET ? WHERE id = ?', [vegpont, id], (err, results) =^> { >> index.js
  echo         if (err) { >> index.js
  echo             console.error(err); >> index.js
  echo             res.status(500).send('Error updating vegpont'); >> index.js
  echo         } else if (results.affectedRows === 0) { >> index.js
  echo             res.status(404).send('Vegpont not found'); >> index.js
  echo         } else { >> index.js
  echo             res.json({ id, ...vegpont }); >> index.js
  echo         } >> index.js
  echo     }); >> index.js
  echo }); >> index.js
  echo; >> index.js
  echo app.delete('/api/vegpontok/:id', (req, res) =^> { >> index.js
  echo     const id = req.params.id; >> index.js
  echo     db.query('DELETE FROM vegpontok WHERE id = ?', [id], (err, results) =^> { >> index.js
  echo         if (err) { >> index.js
  echo             console.error(err); >> index.js
  echo             res.status(500).send('Error deleting vegpont'); >> index.js
  echo         } else if (results.affectedRows === 0) { >> index.js
  echo             res.status(404).send('Vegpont not found'); >> index.js
  echo         } else { >> index.js
  echo             res.status(204).send(); >> index.js
  echo         } >> index.js
  echo     }); >> index.js
  echo }); >> index.js
  echo; >> index.js

  echo db.connect((err) =^> { >> index.js
  echo     if (err) { >> index.js
  echo         console.error('Nem sikerült kapcsolódni az adatbázishoz:', err.message); >> index.js
  echo         process.exit(1); // Kilép a program, ha hiba van >> index.js
  echo     } >> index.js
  echo; >> index.js
  echo     console.log('Sikeres adatbázis kapcsolat.'); >> index.js
  echo; >> index.js

  echo     app.listen(3000, () =^> { >> index.js
  echo          console.log('Server is running on http://localhost:3000'); >> index.js
  echo     }); >> index.js
  echo }); >> index.js
  


echo Kesz! A backend projekt elkeszult.
echo Inditas: node index.js
  

5. frontend programozás 15 pont

HTML / CSS /JavaScript / REST API kliens


npm create vite@latest frontend -- --template react
y
cd frontend
npm install
npm pkg set type=module
npm install axios react-router-dom
npm install react-bootstrap bootstrap  bootstrap-icons 

  

src/App.jsx


import { BrowserRouter } from 'react-router-dom'
import 'bootstrap/dist/css/bootstrap.min.css'
import 'bootstrap/dist/js/bootstrap.bundle.min'
import 'bootstrap-icons/font/bootstrap-icons.css'
import {  Routes, Route, Link } from 'react-router-dom'
import Home from './pages/Home'
import About from './pages/About'
import CRUD from './pages/CRUD'

export default function App() {
  return (
    <BrowserRouter>

      <div>
        <nav className="navbar navbar-expand-lg navbar-light bg-light">
          <div className="container-fluid">
            <Link className="navbar-brand" to="/">Weboldalam</Link>
            <button
              className="navbar-toggler"
              type="button"
              data-bs-toggle="collapse"
              data-bs-target="#navbarNav"
              aria-controls="navbarNav"
              aria-expanded="false"
              aria-label="Toggle navigation"
            >
              <span className="navbar-toggler-icon"></span>
            </button>
            <div className="collapse navbar-collapse" id="navbarNav">
              <ul className="navbar-nav">
              <li className="nav-item">
                  <Link className="nav-link" to="/">Főoldal</Link>
                </li>
                <li className="nav-item">
                  <Link className="nav-link" to="/crud">CRUD</Link>
                </li>
                <li className="nav-item">
                  <Link className="nav-link" to="/about">Rólunk</Link>
                </li>
              </ul>
            </div>
          </div>
        </nav>

        <div className="container mt-4">
          <Routes>
            <Route path="/" element={<Home />} />
            <Route path="/about" element={<About />} />
            <Route path="/crud" element={<CRUD />} />
            <Route path="*" element={<h1 className="text-danger">404 - Az oldal nem található!</h1>} />
          </Routes>
        </div>
      </div>
    </BrowserRouter>
  )
}

src/pages/Home.jsx

 
const Home = () => {
  return (
    <div>
      <h1>Főoldal</h1>
      <p>Ez itt a főoldal tartalma.</p>
    </div>
  )
}

export default Home

src/pages/About.jsx

 
const About = () => {
    return (
        <div>
        <h1>Rólunk</h1>
        <p>Ez egy példa weboldal, amely bemutatja a React Router használatát.</p>
        <p>Használja a navigációs menüt a különböző oldalak közötti navigáláshoz.</p>
        </div>
    )
    }
export default About

src/pages/CRUD.jsx

    
import React, { useEffect, useState } from 'react'
import axios from 'axios'

const API_URL = 'http://localhost:3000' // Vagy a sajat API-d

export default function CRUD() {
  const [emberek, setEmberek] = useState([])
  const [ujEmber, setUjEmber] = useState({ nev: '', kor: '' })
  const [szerkesztesId, setSzerkesztesId] = useState(null)
  const [szerkesztett, setSzerkesztett] = useState({ nev: '', kor: '' })

  useEffect(() => {
    lekertEmberek()
  }, [])

  const lekertEmberek = async () => {
    try {
      const res = await axios.get(API_URL)
      setEmberek(res.data)
    } catch (err) {
      console.error('Lekérési hiba:', err)
    }
  }

  const hozzaadas = async () => {
    try {
      await axios.post(API_URL, ujEmber)
      setUjEmber({ nev: '', kor: '' })
      lekertEmberek()
    } catch (err) {
      console.error('Hozzáadási hiba:', err)
    }
  }

  const mentes = async (id) => {
    try {
      await axios.put(`${API_URL}/${id}`, szerkesztett)
      setSzerkesztesId(null)
      setSzerkesztett({ nev: '', kor: '' })
      lekertEmberek()
    } catch (err) {
      console.error('Frissítési hiba:', err)
    }
  }

  const torles = async (id) => {
    try {
      await axios.delete(`${API_URL}/${id}`)
      lekertEmberek()
    } catch (err) {
      console.error('Törlési hiba:', err)
    }
  }

  return (
    <div>
      <h1>Emberek kezelése</h1>

      {/* Új ember hozzáadása */}
      <div>
        <h3>Új ember</h3>
        <input
          placeholder="Név"
          value={ujEmber.nev}
          onChange={(e) => setUjEmber({ ...ujEmber, nev: e.target.value })}
        />
        <input
          placeholder="Kor"
          type="number"
          value={ujEmber.kor}
          onChange={(e) => setUjEmber({ ...ujEmber, kor: e.target.value })}
        />
        <button
          style={{ backgroundColor: 'green', color: 'white' }}
          onClick={hozzaadas}
        >
          Hozzáadás
        </button>
      </div>

      <hr />

      {/* Emberek listázása */}
      {emberek.map((ember) => (
        <div key={ember.id} style={{ border: '1px solid gray', margin: '10px', padding: '10px' }}>
          {szerkesztesId === ember.id ? (
            <div>
              <input
                value={szerkesztett.nev}
                onChange={(e) => setSzerkesztett({ ...szerkesztett, nev: e.target.value })}
              />
              <input
                type="number"
                value={szerkesztett.kor}
                onChange={(e) => setSzerkesztett({ ...szerkesztett, kor: e.target.value })}
              />
              <button
                style={{ backgroundColor: 'orange', color: 'white' }}
                onClick={() => mentes(ember.id)}
              >
                Mentés
              </button>
              <button
                style={{ backgroundColor: 'gray', color: 'white' }}
                onClick={() => setSzerkesztesId(null)}
              >
                Mégse
              </button>
            </div>
          ) : (
            <div>
              <h3>{ember.nev}</h3>
              <p>Kor: {ember.kor}</p>
              <button
                style={{ backgroundColor: 'blue', color: 'white' }}
                onClick={() => {
                  setSzerkesztesId(ember.id)
                  setSzerkesztett({ nev: ember.nev, kor: ember.kor })
                }}
              >
                Szerkesztés
              </button>
              <button
                style={{ backgroundColor: 'red', color: 'white', marginLeft: '10px' }}
                onClick={() => torles(ember.id)}
              >
                Törlés
              </button>
            </div>
          )}
        </div>
      ))}
    </div>
  )
}