Wikiknihy
cswikibooks
https://cs.wikibooks.org/wiki/Wikiknihy:Hlavn%C3%AD_strana
MediaWiki 1.46.0-wmf.26
first-letter
Média
Speciální
Diskuse
Uživatel
Diskuse s uživatelem
Wikiknihy
Diskuse k Wikiknihám
Soubor
Diskuse k souboru
MediaWiki
Diskuse k MediaWiki
Šablona
Diskuse k šabloně
Nápověda
Diskuse k nápovědě
Kategorie
Diskuse ke kategorii
TimedText
TimedText talk
Modul
Diskuse k modulu
Podujatie
Diskusia k podujatiu
Jak postupovat při tvorbě webu
0
9767
55309
2026-04-28T13:13:34Z
~2026-25884-96
11634
nové
55309
wikitext
text/x-wiki
=== 1. Základy (C#) – Cyklus a podmínka ===
C#
<code>string[] jmena = { "Petr", "Jana", "Eva" };
foreach (var jmeno in jmena) {
if (jmeno.StartsWith("J"))
Console.WriteLine($"Nalezeno: {jmeno}");
}</code>
=== 2. OOP – Třída, Vlastnost a Dědičnost ===
C#
<code>public class Zvire { public virtual void Zvuk() => Console.WriteLine("..."); }
public class Pes : Zvire {
public string Jmeno { get; set; } // Vlastnost
public override void Zvuk() => Console.WriteLine("Haf!"); // Polymorfismus
}</code>
=== 3. WinForms – Událost a Messagebox ===
C#
<code>private void btnPozdrav_Click(object sender, EventArgs e) {
string jmeno = txtJmeno.Text;
if (!string.IsNullOrWhiteSpace(jmeno))
MessageBox.Show($"Ahoj {jmeno}!", "Pozdrav", MessageBoxButtons.OK);
}</code>
=== 4. Práce s daty – Čtení textového souboru ===
C#
<code>try {
string obsah = File.ReadAllText("data.txt");
Console.WriteLine(obsah);
} catch (IOException ex) {
Console.WriteLine("Chyba při čtení: " + ex.Message);
}</code>
=== 5. GDI+ – Kreslení obdélníku a textu ===
C#
<code>protected override void OnPaint(PaintEventArgs e) {
Graphics g = e.Graphics;
g.DrawRectangle(Pens.Red, 10, 10, 100, 50); // Obrys
g.FillEllipse(Brushes.Blue, 10, 70, 50, 50); // Výplň
g.DrawString("GDI+", Font, Brushes.Black, 10, 130);
}</code>
=== 6. ASP.NET Core (Controller) – Akce v MVC ===
C#
<code>public class HomeController : Controller {
public IActionResult Index(string jmeno) {
ViewBag.Zprava = $"Vítej, {jmeno}!";
return View();
}
}</code>
=== 7. SQL – Základní DML a DDL ===
SQL
<code>-- Vytvoření tabulky (DDL)
CREATE TABLE Uzivatele (ID int PRIMARY KEY, Jmeno varchar(50));
-- Manipulace s daty (DML)
INSERT INTO Uzivatele VALUES (1, 'Admin');
SELECT * FROM Uzivatele WHERE Jmeno = 'Admin';</code>
=== 8. Web (JS) – Manipulace s DOM ===
JavaScript
<code>// Změna textu prvku po kliknutí
document.querySelector('#tlacitko').addEventListener('click', () => {
document.querySelector('#nadpis').textContent = 'Změněno JavaScriptem!';
document.body.style.backgroundColor = 'lightgray';
});</code>
= Příprava na praktickou maturitní zkoušku z IT =
== 1. Základy programování ==
Základní stavební kameny pro práci s daty a řízení toku programu v C#.<syntaxhighlight lang="csharp">
string[] jmena = { "Petr", "Jana", "Eva" };
foreach (var jmeno in jmena) {
if (jmeno.StartsWith("J"))
Console.WriteLine($"Nalezeno: {jmeno}");
}
</syntaxhighlight>
== 2. Objektově orientované programování (OOP) ==
Práce se třídami, dědičností a polymorfismem.<syntaxhighlight lang="csharp">
public class Zvire { public virtual void Zvuk() => Console.WriteLine("..."); }
public class Pes : Zvire {
public string Jmeno { get; set; } // Vlastnost
public override void Zvuk() => Console.WriteLine("Haf!"); // Polymorfismus
}
</syntaxhighlight>
== 3. Grafické uživatelské rozhraní (Windows Forms) ==
Základy event-driven programování v desktopových aplikacích.<syntaxhighlight lang="csharp">
private void btnPozdrav_Click(object sender, EventArgs e) {
string jmeno = txtJmeno.Text;
if (!string.IsNullOrWhiteSpace(jmeno))
MessageBox.Show($"Ahoj {jmeno}!", "Pozdrav", MessageBoxButtons.OK);
}
</syntaxhighlight>
== 4. Práce s daty ==
Čtení ze souborů a základní ošetření chyb.<syntaxhighlight lang="csharp">
try {
string obsah = File.ReadAllText("data.txt");
Console.WriteLine(obsah);
} catch (IOException ex) {
Console.WriteLine("Chyba při čtení: " + ex.Message);
}
</syntaxhighlight>
== 5. GDI+ Grafika ==
Vykreslování na plátno (Canvas) pomocí objektu Graphics.<syntaxhighlight lang="csharp">
protected override void OnPaint(PaintEventArgs e) {
Graphics g = e.Graphics;
g.DrawRectangle(Pens.Red, 10, 10, 100, 50); // Obrys
g.FillEllipse(Brushes.Blue, 10, 70, 50, 50); // Výplň
g.DrawString("GDI+", Font, Brushes.Black, 10, 130);
}
// Příklad koláčového grafu
private void DrawPieChart(Graphics g) {
float[] hodnoty = { 30, 20, 50 };
Color[] barvy = { Color.Red, Color.Green, Color.Blue };
float soucet = hodnoty.Sum();
float startAngle = 0;
for (int i = 0; i < hodnoty.Length; i++) {
float sweepAngle = (hodnoty[i] / soucet) * 360;
using (Brush brush = new SolidBrush(barvy[i])) {
g.FillPie(brush, 50, 50, 200, 200, startAngle, sweepAngle);
}
startAngle += sweepAngle;
}
}
</syntaxhighlight>
== 6. Tvorba webových stránek v .NET (MVC) ==
Architektura Model-View-Controller v ASP.NET Core.<syntaxhighlight lang="csharp">
public class HomeController : Controller {
public IActionResult Index(string jmeno) {
ViewBag.Zprava = $"Vítej, {jmeno}!";
return View();
}
}
</syntaxhighlight>
== 7. MS-SQL ==
Práce s databází pomocí jazyků DDL a DML.<syntaxhighlight lang="sql">
-- Vytvoření tabulky (DDL)
CREATE TABLE Uzivatele (
ID int PRIMARY KEY,
Jmeno varchar(50) NOT NULL
);
-- Manipulace s daty (DML)
INSERT INTO Uzivatele VALUES (1, 'Admin');
SELECT * FROM Uzivatele WHERE Jmeno = 'Admin';
</syntaxhighlight>
== 8. Základy webových technologií ==
=== HTML5 Struktura ===
Základní šablona dokumentu.<syntaxhighlight lang="html">
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Maturitní projekt</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Tělo stránky</h1>
<script src="script.js"></script>
</body>
</html>
</syntaxhighlight>
=== CSS3 Selektory a Flexbox ===
<syntaxhighlight lang="css">
.rodic {
display: flex;
justify-content: space-between;
align-items: center;
gap: 15px;
}
.polozka:hover {
background-color: #ffeb3b;
transition: 0.3s;
}
</syntaxhighlight>
=== JavaScript (DOM a Fetch) ===
Asynchronní komunikace se serverem.<syntaxhighlight lang="javascript">
async function ziskejData() {
try {
const response = await fetch('https://api.priklad.cz/data');
if (!response.ok) throw new Error("Chyba sítě");
const data = await response.json();
console.log(data);
} catch (error) {
console.error("Chyba:", error.message);
}
}
</syntaxhighlight>
== 9. Backend (Node.js & Express) ==
Ukázka vrstvené architektury serveru.<syntaxhighlight lang="javascript">
import express from 'express';
const app = express();
app.use(express.json());
app.get('/api/studenti', async (req, res) => {
// Volání servisní vrstvy
const studenti = await studentsService.getAll();
res.json(studenti);
});
app.listen(3000, () => console.log('Server běží na portu 3000'));
</syntaxhighlight>
Konec Webů ted práci se soubory a databázemi
== 4. Práce se soubory a daty (System.IO) ==
V .NET používáme pro manipulaci se soubory jmenný prostor `System.IO`. Nejdůležitějšími nástroji jsou `StreamWriter` pro zápis a `StreamReader` pro čtení.
=== Zápis do souboru (StreamWriter) ===
Slouží k ukládání textových dat na disk. Konstruktor umožňuje nastavit, zda se má soubor přepsat nebo data přidat na konec.<syntaxhighlight lang="csharp">
using System.IO;
string cesta = "data.txt";
// false = přepsat soubor, true = připsat data na konec
using (StreamWriter sw = new StreamWriter(cesta, false))
{
sw.WriteLine("První řádek");
sw.WriteLine("Druhý řádek");
}
</syntaxhighlight>
=== Čtení ze souboru (StreamReader) ===
Umožňuje načítat data řádek po řádku, což je šetrné k operační paměti u velkých souborů.<syntaxhighlight lang="csharp">
using (StreamReader sr = new StreamReader("data.txt"))
{
string radek;
while ((radek = sr.ReadLine()) != null)
{
Console.WriteLine(radek);
}
}
</syntaxhighlight>
=== Ošetření výjimek (try-catch) ===
Práce se soubory je riziková operace (soubor může chybět nebo být zamčený). Vždy používáme blok `try-catch`.<syntaxhighlight lang="csharp">
try
{
string text = File.ReadAllText("data.txt");
}
catch (FileNotFoundException)
{
MessageBox.Show("Soubor nebyl nalezen!");
}
catch (Exception ex)
{
MessageBox.Show("Nastala obecná chyba: " + ex.Message);
}
</syntaxhighlight>
== 5. Práce s databází (Entity Framework) ==
Pro moderní přístup k databázím (ORM) se používá Entity Framework Core. Ten mapuje databázové tabulky přímo na C# třídy.
=== AppDbContext a Mapování ===
<syntaxhighlight lang="csharp">
// Definice tabulky jako C# třídy
[Table("Students")]
public class Student {
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
// Konfigurace připojení (DbContext)
public class AppDbContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Connection string obsahuje adresu, jméno DB a přihlášení
string conn = "server=localhost;database=moje_db;user=root;password=heslo;";
optionsBuilder.UseMySQL(conn);
}
}
</syntaxhighlight>
=== Použití v kódu ===
<syntaxhighlight lang="csharp">
using (var db = new AppDbContext())
{
// Načtení všech dat do Listu
var seznamStudentu = db.Students.ToList();
}
</syntaxhighlight>
== 6. Oddělení dat od vizuálu (DataTable a Grid) ==
Pokud nepotřebujeme databázi, používáme `DataTable` jako dočasnou tabulku v paměti. Tato technika odděluje data (logiku) od jejich zobrazení (`DataGridView`).
=== Vytvoření DataTable a napojení na Grid ===
<syntaxhighlight lang="csharp">
DataTable dt = new DataTable();
// 1. Definice struktury (sloupce)
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Jmeno", typeof(string));
// 2. Přidání dat (řádky)
dt.Rows.Add(1, "Jan Novák");
dt.Rows.Add(2, "Petr Svoboda");
// 3. Zobrazení v UI (DataGridView)
dataGridView1.DataSource = dt;
</syntaxhighlight>
=== Praktický příklad: Načtení CSV do tabulky ===
Ukázka, jak zkombinovat čtení souboru s vizuálním zobrazením v gridu.<syntaxhighlight lang="csharp">
DataTable dt = new DataTable();
dt.Columns.Add("Jmeno");
dt.Columns.Add("Vek");
string[] radky = File.ReadAllLines("uzivatele.csv");
foreach (string radek in radky)
{
string[] bunky = radek.Split(';'); // Rozdělení podle středníku
dt.Rows.Add(bunky[0], bunky[1]);
}
dgvData.DataSource = dt;
dalsi kod
static void Main()
{
// 1. Vytvořit spojení s databází
AutobazarDbContext context = new AutobazarDbContext();
// 2. Vyhledat auta dražší než 200 000 Kč a seřadit od nejdražšího
List<Auto> drahaAuta = context.Auta
.Where(a => a.Cena > 200000)
.OrderByDescending(a => a.Cena)
.ToList();
// 3. Vypsat auta do konzole
foreach (Auto auto in drahaAuta)
{
Console.WriteLine($"{auto.Znacka} {auto.Model} - {auto.Cena} Kč");
}
}
using MaturitaNightmare.Data;
using MaturitaNightmare.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
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;
namespace MaturitaNightmare.Forms
{
public partial class MainForm : Form
{
private AppDbContext DbContext { get; set; }
private BindingList<Question> Questions { get; set; }
public MainForm()
{
InitializeComponent();
//Pozor, je potřeba vytvořit DbContext
DbContext = new AppDbContext();
//1. Načteme otázky do List<Question>
List<Question> dataFromDb = DbContext.Questions.ToList();
//2. Vytvořím si BindingList z Listu
Questions = new BindingList<Question>(dataFromDb);
//3. Nastavit DataSource
dataGridView_Questions.DataSource = Questions;
}
private void button_Start_Click(object sender, EventArgs e)
{
MessageBox.Show("ahoj");
}
private void button_Add_Click(object sender, EventArgs e)
{
QuestionAddForm form = new QuestionAddForm();
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
//vzít data a narvat je do DB + BindingList
string subject = form.GetQuestionSubject();
string text = form.GetQuestionText();
bool choiceOption = form.GetQuestionChoiceOption();
Question question = new Question()
{
Subject = subject,
Text = text,
IsMultipleChoice = choiceOption
};
Questions.Add(question);
DbContext.Questions.Add(question);
DbContext.SaveChanges();
}
}
private void button_Delete_Click(object sender, EventArgs e)
{
//GUARD CLAUSES
if (dataGridView_Questions.CurrentRow == null)
{
return;
}
DialogResult result = MessageBox.Show(
"Doopravdy chcete smazat tuto otázku?",
"Potvrzení smazání",
MessageBoxButtons.OKCancel);
if (result != DialogResult.OK)
{
return;
}
int index = dataGridView_Questions.CurrentRow.Index;
Question question = Questions[index];
//smažeme z BindingListu
Questions.Remove(question);
DbContext.Questions.Remove(question);
DbContext.SaveChanges();
}
private void button_Update_Click(object sender, EventArgs e)
{
if (dataGridView_Questions.CurrentRow == null)
{
return;
}
int index = dataGridView_Questions.CurrentRow.Index;
Question question = Questions[index];
QuestionEditForm form = new QuestionEditForm(question);
DialogResult result = form.ShowDialog();
if (result != DialogResult.OK)
{
return;
}
question.Subject = form.GetQuestionSubject();
question.Text = form.GetQuestionText();
question.IsMultipleChoice = form.GetQuestionChoiceOption();
//DbContext.Questions.Update(question); // <--- není potřeba
DbContext.SaveChanges();
Questions.ResetBindings();
}
private void button_OpenGraphSummary_Click(object sender, EventArgs e)
{
GraphSummaryForm form = new GraphSummaryForm();
form.ShowDialog();
}
private void dataGridView_Questions_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void MainForm_Load(object sender, EventArgs e)
{
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MaturitaNightmare.Entities
{
[Table("Questions")]
public class Question
{
public static readonly IEnumerable<string> AvailableSubjects = ["MAT", "PRG", "NEJ", "FYZ", "TEV", "ČJ"];
[Key]
[Column("id")]
[Browsable(false)]
public int Id { get; set; }
[Column("subject")]
[DisplayName("Předmět")]
public string Subject { get; set; }
[Column("text")]
[DisplayName("Text")]
public string Text { get; set; }
[Column("is_multiple_choice")]
[DisplayName("Je multiple choice?")]
public bool IsMultipleChoice { get; set; }
//Navigační vlastnost (je potřeba buďto lazyloading nebo .Include)
public List<Answer> Answers { get; set; } = new List<Answer>();
}
}
</syntaxhighlight>
l23wu8e0tds7j9r3yf8wtkc4fvdn2w0
55310
55309
2026-04-28T13:14:54Z
~2026-25884-96
11634
a
55310
wikitext
text/x-wiki
<syntaxhighlight lang="csharp">
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
int[] hodnoty = { 10, 40, 25, 60 };
int sirkaSloupce = 40;
int mezera = 20;
int maxVyska = 200;
int maxHodnota = hodnoty.Max();
for (int i = 0; i < hodnoty.Length; i++)
{
int vyska = (hodnoty[i] * maxVyska) / maxHodnota;
int x = 50 + i * (sirkaSloupce + mezera);
int y = 300 - vyska;
g.FillRectangle(Brushes.Blue, x, y, sirkaSloupce, vyska);
}
}
</syntaxhighlight>
=== 1. Základy (C#) – Cyklus a podmínka ===
C#
<code>string[] jmena = { "Petr", "Jana", "Eva" };
foreach (var jmeno in jmena) {
if (jmeno.StartsWith("J"))
Console.WriteLine($"Nalezeno: {jmeno}");
}</code>
=== 2. OOP – Třída, Vlastnost a Dědičnost ===
C#
<code>public class Zvire { public virtual void Zvuk() => Console.WriteLine("..."); }
public class Pes : Zvire {
public string Jmeno { get; set; } // Vlastnost
public override void Zvuk() => Console.WriteLine("Haf!"); // Polymorfismus
}</code>
=== 3. WinForms – Událost a Messagebox ===
C#
<code>private void btnPozdrav_Click(object sender, EventArgs e) {
string jmeno = txtJmeno.Text;
if (!string.IsNullOrWhiteSpace(jmeno))
MessageBox.Show($"Ahoj {jmeno}!", "Pozdrav", MessageBoxButtons.OK);
}</code>
=== 4. Práce s daty – Čtení textového souboru ===
C#
<code>try {
string obsah = File.ReadAllText("data.txt");
Console.WriteLine(obsah);
} catch (IOException ex) {
Console.WriteLine("Chyba při čtení: " + ex.Message);
}</code>
=== 5. GDI+ – Kreslení obdélníku a textu ===
C#
<code>protected override void OnPaint(PaintEventArgs e) {
Graphics g = e.Graphics;
g.DrawRectangle(Pens.Red, 10, 10, 100, 50); // Obrys
g.FillEllipse(Brushes.Blue, 10, 70, 50, 50); // Výplň
g.DrawString("GDI+", Font, Brushes.Black, 10, 130);
}</code>
=== 6. ASP.NET Core (Controller) – Akce v MVC ===
C#
<code>public class HomeController : Controller {
public IActionResult Index(string jmeno) {
ViewBag.Zprava = $"Vítej, {jmeno}!";
return View();
}
}</code>
=== 7. SQL – Základní DML a DDL ===
SQL
<code>-- Vytvoření tabulky (DDL)
CREATE TABLE Uzivatele (ID int PRIMARY KEY, Jmeno varchar(50));
-- Manipulace s daty (DML)
INSERT INTO Uzivatele VALUES (1, 'Admin');
SELECT * FROM Uzivatele WHERE Jmeno = 'Admin';</code>
=== 8. Web (JS) – Manipulace s DOM ===
JavaScript
<code>// Změna textu prvku po kliknutí
document.querySelector('#tlacitko').addEventListener('click', () => {
document.querySelector('#nadpis').textContent = 'Změněno JavaScriptem!';
document.body.style.backgroundColor = 'lightgray';
});</code>
= Příprava na praktickou maturitní zkoušku z IT =
== 1. Základy programování ==
Základní stavební kameny pro práci s daty a řízení toku programu v C#.<syntaxhighlight lang="csharp">
string[] jmena = { "Petr", "Jana", "Eva" };
foreach (var jmeno in jmena) {
if (jmeno.StartsWith("J"))
Console.WriteLine($"Nalezeno: {jmeno}");
}
</syntaxhighlight>
== 2. Objektově orientované programování (OOP) ==
Práce se třídami, dědičností a polymorfismem.<syntaxhighlight lang="csharp">
public class Zvire { public virtual void Zvuk() => Console.WriteLine("..."); }
public class Pes : Zvire {
public string Jmeno { get; set; } // Vlastnost
public override void Zvuk() => Console.WriteLine("Haf!"); // Polymorfismus
}
</syntaxhighlight>
== 3. Grafické uživatelské rozhraní (Windows Forms) ==
Základy event-driven programování v desktopových aplikacích.<syntaxhighlight lang="csharp">
private void btnPozdrav_Click(object sender, EventArgs e) {
string jmeno = txtJmeno.Text;
if (!string.IsNullOrWhiteSpace(jmeno))
MessageBox.Show($"Ahoj {jmeno}!", "Pozdrav", MessageBoxButtons.OK);
}
</syntaxhighlight>
== 4. Práce s daty ==
Čtení ze souborů a základní ošetření chyb.<syntaxhighlight lang="csharp">
try {
string obsah = File.ReadAllText("data.txt");
Console.WriteLine(obsah);
} catch (IOException ex) {
Console.WriteLine("Chyba při čtení: " + ex.Message);
}
</syntaxhighlight>
== 5. GDI+ Grafika ==
Vykreslování na plátno (Canvas) pomocí objektu Graphics.<syntaxhighlight lang="csharp">
protected override void OnPaint(PaintEventArgs e) {
Graphics g = e.Graphics;
g.DrawRectangle(Pens.Red, 10, 10, 100, 50); // Obrys
g.FillEllipse(Brushes.Blue, 10, 70, 50, 50); // Výplň
g.DrawString("GDI+", Font, Brushes.Black, 10, 130);
}
// Příklad koláčového grafu
private void DrawPieChart(Graphics g) {
float[] hodnoty = { 30, 20, 50 };
Color[] barvy = { Color.Red, Color.Green, Color.Blue };
float soucet = hodnoty.Sum();
float startAngle = 0;
for (int i = 0; i < hodnoty.Length; i++) {
float sweepAngle = (hodnoty[i] / soucet) * 360;
using (Brush brush = new SolidBrush(barvy[i])) {
g.FillPie(brush, 50, 50, 200, 200, startAngle, sweepAngle);
}
startAngle += sweepAngle;
}
}
</syntaxhighlight>
== 6. Tvorba webových stránek v .NET (MVC) ==
Architektura Model-View-Controller v ASP.NET Core.<syntaxhighlight lang="csharp">
public class HomeController : Controller {
public IActionResult Index(string jmeno) {
ViewBag.Zprava = $"Vítej, {jmeno}!";
return View();
}
}
</syntaxhighlight>
== 7. MS-SQL ==
Práce s databází pomocí jazyků DDL a DML.<syntaxhighlight lang="sql">
-- Vytvoření tabulky (DDL)
CREATE TABLE Uzivatele (
ID int PRIMARY KEY,
Jmeno varchar(50) NOT NULL
);
-- Manipulace s daty (DML)
INSERT INTO Uzivatele VALUES (1, 'Admin');
SELECT * FROM Uzivatele WHERE Jmeno = 'Admin';
</syntaxhighlight>
== 8. Základy webových technologií ==
=== HTML5 Struktura ===
Základní šablona dokumentu.<syntaxhighlight lang="html">
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Maturitní projekt</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Tělo stránky</h1>
<script src="script.js"></script>
</body>
</html>
</syntaxhighlight>
=== CSS3 Selektory a Flexbox ===
<syntaxhighlight lang="css">
.rodic {
display: flex;
justify-content: space-between;
align-items: center;
gap: 15px;
}
.polozka:hover {
background-color: #ffeb3b;
transition: 0.3s;
}
</syntaxhighlight>
=== JavaScript (DOM a Fetch) ===
Asynchronní komunikace se serverem.<syntaxhighlight lang="javascript">
async function ziskejData() {
try {
const response = await fetch('https://api.priklad.cz/data');
if (!response.ok) throw new Error("Chyba sítě");
const data = await response.json();
console.log(data);
} catch (error) {
console.error("Chyba:", error.message);
}
}
</syntaxhighlight>
== 9. Backend (Node.js & Express) ==
Ukázka vrstvené architektury serveru.<syntaxhighlight lang="javascript">
import express from 'express';
const app = express();
app.use(express.json());
app.get('/api/studenti', async (req, res) => {
// Volání servisní vrstvy
const studenti = await studentsService.getAll();
res.json(studenti);
});
app.listen(3000, () => console.log('Server běží na portu 3000'));
</syntaxhighlight>
Konec Webů ted práci se soubory a databázemi
== 4. Práce se soubory a daty (System.IO) ==
V .NET používáme pro manipulaci se soubory jmenný prostor `System.IO`. Nejdůležitějšími nástroji jsou `StreamWriter` pro zápis a `StreamReader` pro čtení.
=== Zápis do souboru (StreamWriter) ===
Slouží k ukládání textových dat na disk. Konstruktor umožňuje nastavit, zda se má soubor přepsat nebo data přidat na konec.<syntaxhighlight lang="csharp">
using System.IO;
string cesta = "data.txt";
// false = přepsat soubor, true = připsat data na konec
using (StreamWriter sw = new StreamWriter(cesta, false))
{
sw.WriteLine("První řádek");
sw.WriteLine("Druhý řádek");
}
</syntaxhighlight>
=== Čtení ze souboru (StreamReader) ===
Umožňuje načítat data řádek po řádku, což je šetrné k operační paměti u velkých souborů.<syntaxhighlight lang="csharp">
using (StreamReader sr = new StreamReader("data.txt"))
{
string radek;
while ((radek = sr.ReadLine()) != null)
{
Console.WriteLine(radek);
}
}
</syntaxhighlight>
=== Ošetření výjimek (try-catch) ===
Práce se soubory je riziková operace (soubor může chybět nebo být zamčený). Vždy používáme blok `try-catch`.<syntaxhighlight lang="csharp">
try
{
string text = File.ReadAllText("data.txt");
}
catch (FileNotFoundException)
{
MessageBox.Show("Soubor nebyl nalezen!");
}
catch (Exception ex)
{
MessageBox.Show("Nastala obecná chyba: " + ex.Message);
}
</syntaxhighlight>
== 5. Práce s databází (Entity Framework) ==
Pro moderní přístup k databázím (ORM) se používá Entity Framework Core. Ten mapuje databázové tabulky přímo na C# třídy.
=== AppDbContext a Mapování ===
<syntaxhighlight lang="csharp">
// Definice tabulky jako C# třídy
[Table("Students")]
public class Student {
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
// Konfigurace připojení (DbContext)
public class AppDbContext : DbContext
{
public DbSet<Student> Students { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Connection string obsahuje adresu, jméno DB a přihlášení
string conn = "server=localhost;database=moje_db;user=root;password=heslo;";
optionsBuilder.UseMySQL(conn);
}
}
</syntaxhighlight>
=== Použití v kódu ===
<syntaxhighlight lang="csharp">
using (var db = new AppDbContext())
{
// Načtení všech dat do Listu
var seznamStudentu = db.Students.ToList();
}
</syntaxhighlight>
== 6. Oddělení dat od vizuálu (DataTable a Grid) ==
Pokud nepotřebujeme databázi, používáme `DataTable` jako dočasnou tabulku v paměti. Tato technika odděluje data (logiku) od jejich zobrazení (`DataGridView`).
=== Vytvoření DataTable a napojení na Grid ===
<syntaxhighlight lang="csharp">
DataTable dt = new DataTable();
// 1. Definice struktury (sloupce)
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Jmeno", typeof(string));
// 2. Přidání dat (řádky)
dt.Rows.Add(1, "Jan Novák");
dt.Rows.Add(2, "Petr Svoboda");
// 3. Zobrazení v UI (DataGridView)
dataGridView1.DataSource = dt;
</syntaxhighlight>
=== Praktický příklad: Načtení CSV do tabulky ===
Ukázka, jak zkombinovat čtení souboru s vizuálním zobrazením v gridu.<syntaxhighlight lang="csharp">
DataTable dt = new DataTable();
dt.Columns.Add("Jmeno");
dt.Columns.Add("Vek");
string[] radky = File.ReadAllLines("uzivatele.csv");
foreach (string radek in radky)
{
string[] bunky = radek.Split(';'); // Rozdělení podle středníku
dt.Rows.Add(bunky[0], bunky[1]);
}
dgvData.DataSource = dt;
dalsi kod
static void Main()
{
// 1. Vytvořit spojení s databází
AutobazarDbContext context = new AutobazarDbContext();
// 2. Vyhledat auta dražší než 200 000 Kč a seřadit od nejdražšího
List<Auto> drahaAuta = context.Auta
.Where(a => a.Cena > 200000)
.OrderByDescending(a => a.Cena)
.ToList();
// 3. Vypsat auta do konzole
foreach (Auto auto in drahaAuta)
{
Console.WriteLine($"{auto.Znacka} {auto.Model} - {auto.Cena} Kč");
}
}
using MaturitaNightmare.Data;
using MaturitaNightmare.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
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;
namespace MaturitaNightmare.Forms
{
public partial class MainForm : Form
{
private AppDbContext DbContext { get; set; }
private BindingList<Question> Questions { get; set; }
public MainForm()
{
InitializeComponent();
//Pozor, je potřeba vytvořit DbContext
DbContext = new AppDbContext();
//1. Načteme otázky do List<Question>
List<Question> dataFromDb = DbContext.Questions.ToList();
//2. Vytvořím si BindingList z Listu
Questions = new BindingList<Question>(dataFromDb);
//3. Nastavit DataSource
dataGridView_Questions.DataSource = Questions;
}
private void button_Start_Click(object sender, EventArgs e)
{
MessageBox.Show("ahoj");
}
private void button_Add_Click(object sender, EventArgs e)
{
QuestionAddForm form = new QuestionAddForm();
DialogResult result = form.ShowDialog();
if (result == DialogResult.OK)
{
//vzít data a narvat je do DB + BindingList
string subject = form.GetQuestionSubject();
string text = form.GetQuestionText();
bool choiceOption = form.GetQuestionChoiceOption();
Question question = new Question()
{
Subject = subject,
Text = text,
IsMultipleChoice = choiceOption
};
Questions.Add(question);
DbContext.Questions.Add(question);
DbContext.SaveChanges();
}
}
private void button_Delete_Click(object sender, EventArgs e)
{
//GUARD CLAUSES
if (dataGridView_Questions.CurrentRow == null)
{
return;
}
DialogResult result = MessageBox.Show(
"Doopravdy chcete smazat tuto otázku?",
"Potvrzení smazání",
MessageBoxButtons.OKCancel);
if (result != DialogResult.OK)
{
return;
}
int index = dataGridView_Questions.CurrentRow.Index;
Question question = Questions[index];
//smažeme z BindingListu
Questions.Remove(question);
DbContext.Questions.Remove(question);
DbContext.SaveChanges();
}
private void button_Update_Click(object sender, EventArgs e)
{
if (dataGridView_Questions.CurrentRow == null)
{
return;
}
int index = dataGridView_Questions.CurrentRow.Index;
Question question = Questions[index];
QuestionEditForm form = new QuestionEditForm(question);
DialogResult result = form.ShowDialog();
if (result != DialogResult.OK)
{
return;
}
question.Subject = form.GetQuestionSubject();
question.Text = form.GetQuestionText();
question.IsMultipleChoice = form.GetQuestionChoiceOption();
//DbContext.Questions.Update(question); // <--- není potřeba
DbContext.SaveChanges();
Questions.ResetBindings();
}
private void button_OpenGraphSummary_Click(object sender, EventArgs e)
{
GraphSummaryForm form = new GraphSummaryForm();
form.ShowDialog();
}
private void dataGridView_Questions_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void MainForm_Load(object sender, EventArgs e)
{
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MaturitaNightmare.Entities
{
[Table("Questions")]
public class Question
{
public static readonly IEnumerable<string> AvailableSubjects = ["MAT", "PRG", "NEJ", "FYZ", "TEV", "ČJ"];
[Key]
[Column("id")]
[Browsable(false)]
public int Id { get; set; }
[Column("subject")]
[DisplayName("Předmět")]
public string Subject { get; set; }
[Column("text")]
[DisplayName("Text")]
public string Text { get; set; }
[Column("is_multiple_choice")]
[DisplayName("Je multiple choice?")]
public bool IsMultipleChoice { get; set; }
//Navigační vlastnost (je potřeba buďto lazyloading nebo .Include)
public List<Answer> Answers { get; set; } = new List<Answer>();
}
}
</syntaxhighlight>
5luhdrbneegn33miwamtixfstwtlo2i