NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Zdeněk Koutský:25.5.2017 16:05

Ahoj,
jsem v programování totální začátečník. Řekněme, že ani samotný Bůh, jestli existuje, ani neví, jak jsem mohl dojít až do třeťáku se svými znalostmi ohledně tohoto předmětu. Ve škole jsme dostali za úkol vytvořit evidenční systém v jazyku C#. Vůbec nevím, jak začít, co a jak. Připadám si jako malomocný na trampolíně. Mohl byste mi někdo poradit prosím?

Nemám zájem o to, aby někdo za mě úkol udělal, spíš mi jde o to, abych danou problematiku prochopil. Příští rok mě čeká maturita a jestli si vytáhnu programování, tak se picnu. Potřeboval bych se na to tedy připravit, každopádně teď úspěšně dokončit ročníkové testy. Kdybyste měl někdo nějaké odkazy, díky kterým bych mohl úkol zpracovat a pochopit to z toho, budu vám všem zavázán. Předem díky moc za komentáře! :-)

 
Odpovědět
25.5.2017 16:05
Avatar
Zdeněk Kundrát:25.5.2017 17:05

To je jasný úkol pro SQL. Měl by sis přečíst něco odtud (Databáze ADO.NET). Dál už budeš muset sám a jelikož studuješ IT školu, tak ti ve tvém vlastním zájmu doporučuji se naučit programovat. Myslím, že pro tvou budoucnost (např. na vysoké škole) to bude žádoucí. ;-)

Nahoru Odpovědět
25.5.2017 17:05
Když ti něco nefunguje, zkus nejdříve použít internet.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Zdeněk Kundrát
Jan Vargovský:25.5.2017 20:25

V zadání není nic o perzistenci, takže ta databáze není tak nutná. Mnohem jednodušší už má si udělat nějakou in-memory "databázi" a neučit se kvůli tomu SQL.

K autorovi: neřekl jsi jak moc jsi zdatný, takže se blbě radí.

 
Nahoru Odpovědět
25.5.2017 20:25
Avatar
David Dostal
Tvůrce
Avatar
Odpovídá na Zdeněk Koutský
David Dostal:25.5.2017 21:11

Nějak takto si představuji základní strukturu programu, snad Ti to pomůže začít:

  • Třída Kniha reprezentující knihu a evidované informace o ní.
  • Zamestnanec bude reprezentovat evidovaného zaměstnance.
  • ManazerKnih bude uchovávat list evidovaných knih a bude mít metody pro přidání, vypsání, upravení, vypsání celkového počtu knih.
  • Podobně ManazerZamestnan­cu bude pracovat se zaměstnanci.
  • Třída EvidencniSystem bude komunikovat s uživatelem a pro různé akce bude volat metody ManazeruKnih a ManazeruZamestancu.
 
Nahoru Odpovědět
25.5.2017 21:11
Avatar
Odpovídá na Jan Vargovský
Zdeněk Koutský:25.5.2017 21:20

SQL ještě navíc ani neděláme, hehe.
Zdatný nejsem vůbec. Například, jakmile mi příklad ukáže učitel na projektoru, pochopím to. Pochopím, co daná funkce dělá. Jenomže to nedokážu sestavit tak, aby z toho byl program. Jako kdyby mi v tom bránila 90 % část mozku.

 
Nahoru Odpovědět
25.5.2017 21:20
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Zdeněk Koutský
Petr Nymsa:25.5.2017 22:29

A zkoušíš si doma dělat nějaké menší prográmky? Jen opisováním / chápáním z cicích příkladů se to opravdu naučit nelze.

Nahoru Odpovědět
25.5.2017 22:29
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Zdeněk Koutský:25.5.2017 22:31

Vždy se snažím probranou látku doma zopakovat a pochopit ji. Takže ano, zkouším...ale víme jak, je to bída z mé strany.

 
Nahoru Odpovědět
25.5.2017 22:31
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Zdeněk Koutský
Jan Vargovský:26.5.2017 21:52

No zkus dát nějaký nástřel jak bys to řešil (klidně v kódu) a my tě nějak usměrníme :)

 
Nahoru Odpovědět
26.5.2017 21:52
Avatar
Zdeněk Koutský:28.5.2017 23:07

Já právě skončím tady. Dál si nevím prostě rady :(


using System;
using System.Collec­tions.Generic;
using System.Linq;
using System.Text;
using System.Threadin­g.Tasks;

namespace Kniha
{
class Knihovna
{
static void Main(string[] args)
{

public string Zamestnanci { get; set }
public int Vek { get; set }
public double Jmeno { get; set }
}
}
}

 
Nahoru Odpovědět
28.5.2017 23:07
Avatar
HONZ4
Člen
Avatar
Odpovídá na Zdeněk Koutský
HONZ4:28.5.2017 23:26
namespace ProjektEvidence
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }

    class Kniha
    {
        public string titul;
        public string autor;
        public string vydavatel;
    }

    class Zamestnanec
    {
        public string jmeno;
        public string prijmeni;
    }
}

ps, evidovat věk číslem je nesmysl! Eviduj datum narození (věk si pak můžeš spočítat s aktuálního data).

Editováno 28.5.2017 23:28
 
Nahoru Odpovědět
28.5.2017 23:26
Avatar
HONZ4
Člen
Avatar
HONZ4:28.5.2017 23:34

(z aktuálního data)

nechceš se raději podívat na nějaký tutoriál než začneš?

 
Nahoru Odpovědět
28.5.2017 23:34
Avatar
Petr Rympler
Člen
Avatar
Petr Rympler:29.5.2017 20:12

K tomudle vůbec SQL nepotřebuješ. Pochybuju, že tam budeš ukládat statisíce záznamů a mezi nimi provádět fulltext apod.

Vytvoř si třídy dle toho, co napsali ti nahoře. Pak si projdi tutoriály jak číst vstup z Console. Console.ReadLine apod. V nekonečném cyklu while(true) budeš zobrazovat menu aplikace, které bude díky Console.ReadLine číst volbu, kterou uživatel zadá. Do cyklu si dej ifíky nebo switch pro jednotlivé volby (1. - 10.).

V programu v Main() si udělej nějaké pole, třeba:

var arrZamestnanec = new List<Zamestna­nec>();

a po zadání volby 1. uděláš

Console.Write("Za­dejte jméno: ");

Pak si přečteš vstup a uložíš jej do nějaké proměnné a naplníš objekt

arrZamestnanec­.Add(new Zamestnanec(){ Jmeno = "xxxx", ....});

Musíš se naučit práci s polem, třídou, cykly a půjde to.

Tyto SPŠ pamatuju, jak přišla nějaká výuka programování ASP.NET a během 15ti minut i u nás zaregistrovalo ASP.NET Freehosting (https://www.aspify.com) asi 30 lidí :-).

 
Nahoru Odpovědět
29.5.2017 20:12
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:5.6.2017 12:47

Začal bych tím, že si nabouchám datové typy Kniha a Zamestnanec. Ty budou obsahovat příslušné vlastnosti a konstruktory. Také přetěžují ToString(), aby se při výpisu do konzole ukázaly lidsky. Např.:

class Zamestnanec
{
        public enum epozice { Knihovnik, Reditel, Urednik, Vedouci, ITSpravce}

        public string Jmeno { get; private set; }
        public string Prijmeni { get; private set; }
        public decimal Plat { get; private set; }
        public epozice Pozice { get; private set; }
        public DateTime DatumNarozeni {get; private set; }
        public int Vek
        {
                get
                {
                        int vek = DateTime.Today.Year - DatumNarozeni.Year;
                        if (DatumNarozeni.AddYears(vek) < DateTime.Today) vek--;
                }
        }

        public Zamestnanec(string jmeno, string prijmeni, decimal plat, epozice pozice, DateTime datum)
        {
                Jmeno = jmeno;
                Prijmeni = prijmeni;
                Plat = plat;
                Pozice = pozice;
                DatumNarozeni = datum;
        }

        public override string ToString() { return Jmeno + Prijmeni; }
}

class Kniha
{
        public string Jmeno { get; private set; }
        public string Autor { get; private set; }
        public int RokVydani { get; private set; }

        public Kniha(string jmeno, string autor, int rok)
        {
                Jmeno = jmeno;
                Autor = autor;
                RokVydani = rok;
        }

        public override string ToString() { return Autor + ": " + Jmeno; }
}

Dále ve třídách naimplementuješ editační metody, které vždy upraví danou vlastnost, to budeš používat k položkám editace knihy, editace změstnance.

Další třída, kterou budeš potřebovat, je Databaze. Ta bude obsahovat dva Listy (List<Kniha> a List<Zamestnanec>) a metody na přidání a odebrání položek obou Listů (implementace List.Add() a List.RemoveAt()). Dále ještě metody, které vrátí položku z Listu dle indexu, to aby byl přístup k položkám na editaci. Podle zdejšího tutoriálu na soubory si ještě uděláš ukládání a čtení do souborů (jak je libo, asi buď klasický CSV nebo do XMLček).

Poslední třída bude Komunikator, která bude pracovat s konzolí, komunikovat s uživatelem, zobrazovat meníčka, atd.

Při spuštění v Mainu inicializuješ Databázi a Komunikátor, kterému databázi předáš, odtud on bude zobrazovat data. Na datábazi dále zavoláš načtení dat ze souboru. Pak už jen komunikátor pracuje ve smyčce a zobrazuje uživateli co se po něm chce

Nahoru Odpovědět
5.6.2017 12:47
Programátor je stroj k převodu kávy na kód.
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:6.6.2017 19:37

Ahoj, tak jsem si to zkusil sám, jen tak cvičně :D
Musím říct, že je to moc pěkná úloha :)

Program zde (ne neboj, není to virus):
https://www.dropbox.com/…Knihovny.zip?dl=0

Chceš-li zdroják, napiš, rád zašlu :D

Editováno 6.6.2017 19:39
Nahoru Odpovědět
6.6.2017 19:37
Programátor je stroj k převodu kávy na kód.
Avatar
Zdeněk Koutský:6.6.2017 19:43

Ahoj všichni, mockrát vám děkuju za odpovědi a rady. Myslím si, že už protokol mám skoro hotový. Co na to říkáte? :-)

 
Nahoru Odpovědět
6.6.2017 19:43
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:6.6.2017 19:59

Proč sakra implementuješ zvlášť string Zamestnanec.Vy­pisCeleJmeno()? Vždyť objektově správnější a jednodušší způsob by byl jednoduše override string Zamestnanec.ToS­tring()!

A pracovní pozici by možná bylo lepší skladovat jako enum, tak jsem to řešil i já :D

Editováno 6.6.2017 20:00
Nahoru Odpovědět
6.6.2017 19:59
Programátor je stroj k převodu kávy na kód.
Avatar
David Dostal
Tvůrce
Avatar
Odpovídá na krepsy3
David Dostal:6.6.2017 20:05

S tou pracovní pozicí jako enum bych si nebyl jistý. Co když Bude potřeba přidat novou pracovní pozici, to má člověk upravit zdrojový kód a znovu si to zkompilovat?

 
Nahoru Odpovědět
6.6.2017 20:05
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:6.6.2017 20:06

A teď koukám že máš jednotlivé proměnné zaměstnance (jméno atd.) jen jako private fieldy, proč nemáš normálně vlastnost která je public get a private set? V zadání jste měli "nejlepší možný objektový návrh" :D

Editováno 6.6.2017 20:06
Nahoru Odpovědět
6.6.2017 20:06
Programátor je stroj k převodu kávy na kód.
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na David Dostal
krepsy3:6.6.2017 20:08

Myslím, že je enum velice vhodný. Možná by nejsprávnější bylo mít externí texťák s možnými pracovními pozicemi, ze kterých by program enum za běhu vytvořil :D

Nahoru Odpovědět
6.6.2017 20:08
Programátor je stroj k převodu kávy na kód.
Avatar
David Dostal
Tvůrce
Avatar
Odpovídá na krepsy3
David Dostal:6.6.2017 20:16

Enum by se imo měl používat na výčty, které se nikdy nemění (například dny v týdnu apod.) a jsou v něčem velmi podobné statickým konstantám. Asi by přes reflexi nějak šlo přidávat a ubírat typy pracovních pozic, ale byl by v tom zbytečně zmatek. Na věci, které může zadat uživatel (například i formou textového souboru) se podle mě mnohem lépe hodí pole nebo nějaká kolekce.

 
Nahoru Odpovědět
6.6.2017 20:16
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na David Dostal
krepsy3:6.6.2017 22:51

Dobře, tak možná ne přímo enum, ale rozhodně nějaký List s možnými pracovními pozicemi ve formě stringu, ne aby se bral přímo uživatelem zadaný string. Díky enumu či listu (něco s charakterem kolekce) je možné pozici ukládat jako číslo, předejít tak upper-lower case duplicitám, překlepům apod. a mít možnost porovnávat pracovníky na stejné pozici snadno :)

Nahoru Odpovědět
6.6.2017 22:51
Programátor je stroj k převodu kávy na kód.
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na David Dostal
Petr Čech:7.6.2017 0:38

Enum je jen syntaktický cukr pro konstantu.
třeba:

enum Align
{
    Left, Right
}

se přeloží na:

class Align
{
    const int Left = 0;
    const int Right = 1;
}
Editováno 7.6.2017 0:40
Nahoru Odpovědět
7.6.2017 0:38
the cake is a lie
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 22 zpráv z 22.