Zdravím :)
Mám za úkol naprogramovat jednoduchý program bankomatu, ale protože náš učitel neumí učit, potřebovala bych poradit, jak to vůbec udělat. Probrali jsme cykly, ukázali si pár věcí, jako třeba jak v programu udělat menu. Nic víc.
Zároveň sháním někoho, kdo C# rozumí a kdo by mohl doučovat.
Ten bankomat by měl být nějak takto:
Seznam jmen s číslem karty, pinem a částkou na účtě. Při spuštění programu, zadat pin a číslo karty, zkontrolovat, zda všechno sedí (když ne nějaké upozornění) a pak zobrazit kolik je na účtě. Po zadání částky a po "vybrání" z původní částky odebrat. + takové ty okecávačky jako "dobrý den" "váš zůstatek" a "děkujeme, nashledanou"
Zkoušela jsem i nějaké učebnice, ale jako začátečník úplně nevím co mám hledat. Je mi hloupé to sem takto napsat, aby to někdo naprogramoval za mě, nehledě na to, že se to potřebuji naučit a kopírováním mi to do hlavy nenaleze, ale stačilo by, kdyby mi někdo poradil, čím jednotlivé části toho programování udělat např. "ten seznam udělám přes tento příkaz, odečítání částky přes tento příkaz" a já už si to nějak dohledám.
Programujeme ve Visual Studiu 2012
Budu vděčná za jakoukoliv radu :)
C# jednoduchý program alá bankomat
C# jednoduchý program alá bankomat
Je lepší se zeptat a být pět minut hlupákem, než se nezeptat vůbec a být jím od konce života.
Winter is coming!
Winter is coming!

Re: C# jednoduchý program alá bankomat
Hledej struct: http://physics.ujep.cz/~jkrejci/vyuka/p ... Csharp.pdf
"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- domitea
- Tvůrce článků
-
Level 4.5
- Příspěvky: 1971
- Registrován: červen 09
- Bydliště: Královehradecký kraj
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: C# jednoduchý program alá bankomat
Faraon: Jazyk z Javy a struct ? Tak dobře, ale mému učiteli se to nelíbilo (za 4
)
Já bych to udělal přes třídu ( Objetové orientované programování), to je obvyklý postup dnešního světa. Ale v letech 70. a 80. frčel faraonův postup ( strukturální programování - struct ), který mimo jiné je používán dodnes, ale ne na tyhle věci pod úroveň
Nicméně v rámci jednoduchosti se to dá udělat i přes pár polí
, což ukážu, až to napíšu 
// jdem na to: čistě popisně, ale funguje
Mějme tabulku:
Není moc hezká, aspoň ty svislice označují, co ke komu paří (vždycky oddělují sloupec). Takže tam máme možnost udělat pole, ale každý sloupec má jiný typ proměnné, takže nemůžeme udělat dvourozměrné, to nám ale nebrání udělat několik jednorozměrných o různých typech
Dá se tedy udělat několik jednorozměrných polí, které budou zastávat určité věci a budou pro nás představovat různé tabulky, !!! MUSÍ ALE MÍT STEJNOU DÉLKU !!!, pak by to už nefungovalo jak chceme
(takže bodou pole jmena, ucty, piny a castky -- vše to tam je naznačené a budou mít délku 10 --> může být i víc)
Vyhledávání uživatele:
Znáš cykly ? Pokud ano máš vyhráno. Uživatel zadá číslo účtu a prohledá pole ucty, pokud najde, zapíše si index účtu (bude se hodit) a ukončí se (break), když nic nenajde, vypíše chybovou hlášku. Pak už jen vezme pin uložený podle indexu (piny[index] == nacteny_pin) a porovná, pokud je shodný, můžeme vybírat, pokud ne, dáme facku a vyluxujeme konto
Výpis jména:
Použijeme zapsaný index z předchozího hledání a pouze načteme uložené hodnoty (textbox1.text = jmena[index];)
Strhnutí částky z účtu:
Získáme vyžadovanou částku od uživatele a zase pomocí indexu nalezneme částku a pomocí odečítání (
cože ?
) odečteme částku (castky[index] = castky[index] - potrebny_obnos)
Tak a to je asi tak všechno. potom na různé chybové hlášky se ti bude Message box, MSDN řekne více

Já bych to udělal přes třídu ( Objetové orientované programování), to je obvyklý postup dnešního světa. Ale v letech 70. a 80. frčel faraonův postup ( strukturální programování - struct ), který mimo jiné je používán dodnes, ale ne na tyhle věci pod úroveň

Nicméně v rámci jednoduchosti se to dá udělat i přes pár polí


// jdem na to: čistě popisně, ale funguje

Mějme tabulku:
Kód: Vybrat vše
index Jmeno = string | Ucet = int | Pin = int | Castka = double
0 karel novak | 123456 | 1234 | 20000
1 jan hynek | 569874 | 9857 | 50000000
2 chuck norris | 254412 | 2563 | 36666666666
3 brad pitt | 522367 | 7420 | 1564864
4 tony agelo | 243545 | 1125 | 3576354
5 spejbl | 577411 | 2542 | 35435453
6 George Bool | 100101 | 1110 | 1000101000011
7 Jaroslav hasek | 752214 | 1255 | 8787878287
8 Miroslav simek | 983325 | 1146 | 2872724278
9 Oscar Boelke | 111111 | 3547 | 27287222284
Není moc hezká, aspoň ty svislice označují, co ke komu paří (vždycky oddělují sloupec). Takže tam máme možnost udělat pole, ale každý sloupec má jiný typ proměnné, takže nemůžeme udělat dvourozměrné, to nám ale nebrání udělat několik jednorozměrných o různých typech

Dá se tedy udělat několik jednorozměrných polí, které budou zastávat určité věci a budou pro nás představovat různé tabulky, !!! MUSÍ ALE MÍT STEJNOU DÉLKU !!!, pak by to už nefungovalo jak chceme

Vyhledávání uživatele:
Znáš cykly ? Pokud ano máš vyhráno. Uživatel zadá číslo účtu a prohledá pole ucty, pokud najde, zapíše si index účtu (bude se hodit) a ukončí se (break), když nic nenajde, vypíše chybovou hlášku. Pak už jen vezme pin uložený podle indexu (piny[index] == nacteny_pin) a porovná, pokud je shodný, můžeme vybírat, pokud ne, dáme facku a vyluxujeme konto

Výpis jména:
Použijeme zapsaný index z předchozího hledání a pouze načteme uložené hodnoty (textbox1.text = jmena[index];)
Strhnutí částky z účtu:
Získáme vyžadovanou částku od uživatele a zase pomocí indexu nalezneme částku a pomocí odečítání (


Tak a to je asi tak všechno. potom na různé chybové hlášky se ti bude Message box, MSDN řekne více

Naposledy upravil(a) domitea dne 04 led 2013 20:14, celkem upraveno 2 x.
Re: C# jednoduchý program alá bankomat
Když už tvůj učitel učil takové sr[PÍP]ky, tak se aspoň mohl podívat do M$DN
Ale určitě neuškodí zabalení toho pole struktur i s metodami které s ním přímo pracují do jedné třídy, bude se k tomu všemu jednodušeji přistupovat, samotný hlavní program se zjednoduší na volání těch metod a vyhodnocení jejich odpovědí.
Pozor na terminologii, strukturální (strukturované) programování nemá s datovými strukturami nic společného kromě shody jednoho slova v názvu, v něm jde o strukturu řízení běhu programu, tedy rozhodování kterou cestou se dát, zatímco pro složenou datovou strukturu by se hodil spíš název z Pascalu - record (česky záznam). To Céčkové pojmenování je fakt trochu matoucí.
Osobně bych si pro tak jednoduchou úlohu vystačil také jen s několika poli (kdyby tam byla jen čísla, tak dokonce jen s jedním dvourozměrným), ale já jsem se holt naučil programovat v prehistorickém BASICu, kde nic složitějšího nebylo k dispozici

Kód: Vybrat vše
public struct Point
{
public int x, y;
public Point(int p1, int p2)
{
x = p1;
y = p2;
}
}
Ale určitě neuškodí zabalení toho pole struktur i s metodami které s ním přímo pracují do jedné třídy, bude se k tomu všemu jednodušeji přistupovat, samotný hlavní program se zjednoduší na volání těch metod a vyhodnocení jejich odpovědí.
Pozor na terminologii, strukturální (strukturované) programování nemá s datovými strukturami nic společného kromě shody jednoho slova v názvu, v něm jde o strukturu řízení běhu programu, tedy rozhodování kterou cestou se dát, zatímco pro složenou datovou strukturu by se hodil spíš název z Pascalu - record (česky záznam). To Céčkové pojmenování je fakt trochu matoucí.
Osobně bych si pro tak jednoduchou úlohu vystačil také jen s několika poli (kdyby tam byla jen čísla, tak dokonce jen s jedním dvourozměrným), ale já jsem se holt naučil programovat v prehistorickém BASICu, kde nic složitějšího nebylo k dispozici

"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
- domitea
- Tvůrce článků
-
Level 4.5
- Příspěvky: 1971
- Registrován: červen 09
- Bydliště: Královehradecký kraj
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: C# jednoduchý program alá bankomat
Aktualizace předchozího příspěvku :)
Jak jsem mohl vědět, že faraon odepíše ?
Faraon: učitel vše řešil přes třídu, vše !
Jak jsem mohl vědět, že faraon odepíše ?

Faraon: učitel vše řešil přes třídu, vše !

Re: C# jednoduchý program alá bankomat
No bodejť bych neodepsal, hádáme se tu spolu ode dne kdy jsem se tady poprvé objevil
A takhle bych na to šel já:
Je to scénář hlavního programu, který by měl běžet v nekonečné smyčce. A jestli si to ty metody budou řešit přes pole, struktury, nebo třeba databázi běžící podle poslední módy v nějakém cloudu na druhém konci světa, je úplně jedno.
P.S. Akorát doufám že ten "třídní" učitel nebyl tvůj třídní...
P.P.S. Proč já, proč zrovna já jsem musel mít třídního tělocvikáře?
A takhle bych na to šel já:
Kód: Vybrat vše
zobrazit(uvítání);
zadat(karta);
zadat(pin);
if (existuje(karta,pin))
{
zobrazit(zůstatek);
zadat(castka);
if (vybrat(karta,castka))
{
zobrazit(potvrzení);
vydat(castka);
}
else
zobrazit(málo peněz!);
}
else
zobrazit(chybná identifikace!);
Je to scénář hlavního programu, který by měl běžet v nekonečné smyčce. A jestli si to ty metody budou řešit přes pole, struktury, nebo třeba databázi běžící podle poslední módy v nějakém cloudu na druhém konci světa, je úplně jedno.
P.S. Akorát doufám že ten "třídní" učitel nebyl tvůj třídní...
P.P.S. Proč já, proč zrovna já jsem musel mít třídního tělocvikáře?

"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: C# jednoduchý program alá bankomat
Nevím jak Visual Studiu 2012 C# (kdysi jsem několik prográmků psal v VC++ 6),ale v Delphi (i v VC++ 6) bych na to šel jinak.Ono záleží jak přesně by měl ten program vypadat.Pokud se do nějakýho editačního pole (Edit) zadávají z klávesnice nějaký hodnoty -kontroloval bych pole v události OnKeyUp(v Delphi),pokud tam budou nějaký tlačítka,tak zase na událost stisku tlačítka se provede něco.Je to primitivní záležitost...
- CZechBoY
- Master Level 9.5
- Příspěvky: 8813
- Registrován: srpen 08
- Bydliště: Brno
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: C# jednoduchý program alá bankomat
Sender: a co když dám pravej klik->vložit? tam žádnou klávesu nemačkám 

PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
Re: C# jednoduchý program alá bankomat
Sender píše:pokud tam budou nějaký tlačítka,tak zase na událost stisku tlačítka se provede něco
Však tohle klidně může být v té metodě zadat(), když si tam namaluješ numerickou klávesnici, tak si všechna ta čísla naklikáš. Ale hlavní program to nijak neovlivní, je to pouze věc uživatelského rozhraní.
V nejdůležitější části programu - rozhodování - žádné takové věci nikdy být nesmí, to by byla stejná debilita jako grafické služby v jádře Window$, což je neodstranitelná bezpečnostní díra (ostatně jedna z mnoha podobných), kvůli které ten systém nikdy nebude možné úplně zabezpečit. Vždycky zůstanou nějaké boční kanály, jako součást WinAPI.
Co tedy dělá bankomat?
1. Slušně pozdraví.
2. Čeká na zadání čísla karty.
3. Čeká na zadání PIN.
4. Zeptá se databáze jestli údaje platí.
5. Když ne, pošle tě do (_!_) a skončí.
6. Když ano, zobrazí zůstatek.
7. Čeká na zadání částky.
8. Zkusí částku vybrat (a nebo jí nejdřív porovná se zůstatkem, ale takhle je to jednodušší).
9. Metoda vyber() zkontroluje zůstatek a buď částku v databázi odečte a potvrdí výběr vrácením True, nebo vrátí False.
10. Když byl zůstatek menší než požadovaná částka, vynadá zákazníkovi.
11. Když se výběr podařil, tak oznámí vydání peněz, a může třeba nasimulovat výčetku bankovek a mincí, jak je zákazník dostane, s tím si může hrát metoda vyber().
12. A na závěr, když se všechny větve zase spojí, se rozloučí, to v tom mém scénáři už není.
Takže hlavní program zůstává pod dvacet řádků a při změně nebo úpravách uživatelského rozhraní se nijak nemění. Je mu úplně jedno jestli tam bude dotykový displej, nebo čtečka děrných štítků, to se řeší úpravou jen příslušné metody, která se pak důkladně otestuje a odladí samostatně. A podle toho bude zvenku ten program vypadat, i když se v jádře vůbec nic nezmění, upraví se pouze třída User, která načítá čísla a zobrazuje zprávy. Naopak se úpravy nesmí dotknout třídy Card, která se stará o operace s kartou, a která obsahuje databázi bankovních účtů, ke které nikdo jiný z jiné části programu nemůže a nesmí přistupovat. A ve třídě Machine se bude provádět vydávání peněz samotným strojem, to už je věc konstruktéra hardwaru toho bankomatu.
Takhle by se to mělo líbit i třídnímu domitey

Jen takový zábavný příklad: budeš mít v programu dvacet vstupních údajů a podle nich dvacet různých větvení. Pokud je všechny nacpeš do jedné kupy hnoje (jinak se takovému programu říkat nedá), tak budeš muset otestovat 2^20 kombinací vstupních údajů, v případě že zadáváš pouze ANO/NE. Jestli tam budou číslice 0-9, bude to už 10^20 kombinací! Ale když každý ten vstupní údaj budeš řešit v samostané metodě, tak těch testů bude potřeba 2x20 nebo 10x20. Udělat 200 testů není takový problém, ale chtěl bych tě vidět jak čekáš na výsledek 100000000000000000000 testů a hledáš v takovém programu skrytou chybu

"Král Lávra má dlouhé oslí uši, král je ušatec!
(pravil K. H. Borovský o cenzuře internetu)
(pravil K. H. Borovský o cenzuře internetu)
Re: C# jednoduchý program alá bankomat
CZechBoY píše:Sender: a co když dám pravej klik->vložit? tam žádnou klávesu nemačkám
Změnou obsahu Editačního pole nastane událost OnChange -bez ohledu na to,jestli byl obsah vkládán pomocí klávesnice,nebo vkládáním ze schránky. V čistém WinAPI nejsem moc v obraze,je to už řada let co jsem v tom psal.C# nedovedu poradit ,zamrznul jsem na Pascalu -hlavně Delphi (C,C++ velmi vyjímečně)
- domitea
- Tvůrce článků
-
Level 4.5
- Příspěvky: 1971
- Registrován: červen 09
- Bydliště: Královehradecký kraj
- Pohlaví:
- Stav:
Offline
- Kontakt:
Re: C# jednoduchý program alá bankomat
Faraon: Třídní byla matikářka
. "Třídnímu" by to připadalo moc komplexní řešení na tak jednoduché zadání
. Hádka navíc vytváří příjemné konkurenční prostředí. Navíc mé řešení testuje postupně (když je to dobře, jdu dál) , takže jen 3 kontroly 
Sender: Naše návrhy jsou tak vymyšlené, že je můžeš ovládat i přes příkazovou řádku. Záleží jak to tazatelka potřebuje, jestli hezky "Metroidní", nebo hezky Unixácké



Sender: Naše návrhy jsou tak vymyšlené, že je můžeš ovládat i přes příkazovou řádku. Záleží jak to tazatelka potřebuje, jestli hezky "Metroidní", nebo hezky Unixácké

Re: C# jednoduchý program alá bankomat
Téda takovou odezvu jsem nečekala
Takže něco jako podklad tu mám, už to jenom dát dohromady :/
dala by se ta pole od Domitea sloučit s postupem programu, co navrhuje Faraon? Protože jeho návrh je dost podobný tomu, o co jsem se snažila já, i když to nefunguje :)
A protože bohužel příliš nechápu, o co se tu hádáte, k poslednímu Domiteovu příspěvku můžu říct jen že, čím jednodušší, polopatičtější a blbuvzdornější, tím lepší :) Jenom aby to fungovalo.
Omlouvám se že vím odepisuji až teď, ale po včerejším odpoledni jsem myslela že přidávání příspěvků skončilo s prvním Faraonovým a víc se tím nebude nikdo zabývat :)

Takže něco jako podklad tu mám, už to jenom dát dohromady :/

A protože bohužel příliš nechápu, o co se tu hádáte, k poslednímu Domiteovu příspěvku můžu říct jen že, čím jednodušší, polopatičtější a blbuvzdornější, tím lepší :) Jenom aby to fungovalo.
Omlouvám se že vím odepisuji až teď, ale po včerejším odpoledni jsem myslela že přidávání příspěvků skončilo s prvním Faraonovým a víc se tím nebude nikdo zabývat :)
Je lepší se zeptat a být pět minut hlupákem, než se nezeptat vůbec a být jím od konce života.
Winter is coming!
Winter is coming!

-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
-
Program na hledání poškozených souborů JPG Příloha(y)
od Rosta_Kolmix » 09 lis 2024 11:01 » v Design a grafické editory - 2
- 4511
-
od Minapark
Zobrazit poslední příspěvek
15 lis 2024 11:04
-
-
-
Jaký program pro zpracování videa je nejlepší?
od zuzana3 » 13 kvě 2025 08:48 » v Programy ke stažení - 7
- 5771
-
od buchtik
Zobrazit poslední příspěvek
14 kvě 2025 12:20
-
-
- 4
- 3378
-
od RostislavC
Zobrazit poslední příspěvek
14 lis 2024 17:37
Zpět na “Programování a tvorba webu”
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů