Dostal jsem za úkol udělat jednoduchej automat na jízdenky, asi jako každej na začátek. Ale trochu si s ním nevím rady, nedělal už ho někdo z vás a nepodělil by se se mnou o poznatky? Abych se měl aspon čeho chytit, docela dost tápu
C# Automat
- techstep
- Nováček

-
- Registrován: 18. črc 2010
C# Automat
Zdravim,
Dostal jsem za úkol udělat jednoduchej automat na jízdenky, asi jako každej na začátek. Ale trochu si s ním nevím rady, nedělal už ho někdo z vás a nepodělil by se se mnou o poznatky? Abych se měl aspon čeho chytit, docela dost tápu
Dostal jsem za úkol udělat jednoduchej automat na jízdenky, asi jako každej na začátek. Ale trochu si s ním nevím rady, nedělal už ho někdo z vás a nepodělil by se se mnou o poznatky? Abych se měl aspon čeho chytit, docela dost tápu
- Exp
- Začátečník

-
- Registrován: 24. črc 2004
- Bydliště: Tábor
- Kontaktovat uživatele:
Re: C# Automat
Co ti není jasný? Na začátku automat vyzve k volbě jízdenky za určitou hodnotu, uživatel vybere jízdenku, vhodí peníze, jakmile je dostatek peněz, automat tiskne. Pokud je co, automat vrátí.
- techstep
- Nováček

-
- Registrován: 18. črc 2010
Re: C# Automat
Tak volbu jízdenky a cenu mám, ale ted nevím jak udělat to vhození, příčtení a vrácení peněz
- Exp
- Začátečník

-
- Registrován: 24. črc 2004
- Bydliště: Tábor
- Kontaktovat uživatele:
Re: C# Automat
Pokud to má bejt uplně nejjednodušší (takže mj. bez GUI), pak bych zvolil čísla 1-6 pro 1Kč, 2Kč, 5Kč, 10Kč, 20Kč a 50Kč. Uživatel by tak zadal třeba 5, stisknul enter a automat by vložil "do banku" 20Kč. Automat musí mít ve výchozím stavu určitý počet mincí od každého druhu. K těm se přičtou vhozené mince a podle aktuálního stavu vrátí mince v takových hodnotách, aby to vyšlo co nejlíp (takže třeba 12Kč nebude vracet šesti dvoukorunama, ale desetikorunou a dvoukorunou - pokud je má). Nejlepší je po vhození dostatečné sumy pro tisk lístu provést kontrolu, jestli má automat dost mincí na vrácení, pokud by neměl, stornuje objednávku a vhozené peníze vrátí.
- techstep
- Nováček

-
- Registrován: 18. črc 2010
Re: C# Automat
Tak ta kontrola a to stornování tam být nemusí..takhle to právě vím taky, ten postup v hlavě mám ale nedokážu to zapsat, ten zásobník na mince mám a počet mincí tam mám taky, ale tam jsem skončim, nedokážu příčíst ty nově vhozené mince do zásobníku automatu a odečítat je od ceny jízdenky.
- PiranhaGreg
- Nováček

-
- Registrován: 02. led 2013
Re: C# Automat
Kdysi jsem napsal něco podobnýho pro kámoše (ten mi za to koupil flašku
). Tehdy mi prográmko ještě tak nešlo, takže to není nic extra, ale myslím si že to právě chceš
.
Kód: Vybrat vše
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Automat
{
class Program
{
static void Main(string[] args)
{
Automat automat = new Automat("Automat");
string akce;
while (true)
{
Console.Clear();
Console.WriteLine(automat.Jmeno + " \n");
Console.WriteLine("Vhozeno: " + automat.Vhozeno + " Kč");
Console.WriteLine("Cena jízdenek: " + automat.AktualniCena + " Kč\n\n");
Console.WriteLine("(M) Vhodit mince");
Console.WriteLine("(J) Vybrat jízdenky");
Console.WriteLine("(S) Storno objednávky a vrácení peněz");
Console.WriteLine("(P) Potvrzení objednávky");
Console.Write("\nAkce: ");
akce = Console.ReadLine();
akce.ToUpper();
if (akce == "M")
{
Mince mince;
do
{
mince = vratPolozku(automat.AkceptovatelneMince) as Mince;
if (mince != null)
automat.NovaMince(mince.Hodnota);
} while (mince != null);
}
else if (akce == "J")
{
Jizdenka jizdenka;
do
{
jizdenka = vratPolozku(automat.DruhyJizdenek) as Jizdenka;
if (jizdenka != null)
automat.ObjednejJizdenku(jizdenka);
} while (jizdenka != null);
}
else if (akce == "S")
{
Console.WriteLine("\n" + automat.Storno());
Console.ReadLine();
}
else if (akce == "P")
{
Console.WriteLine("\n" + automat.Potvrdit());
Console.ReadLine();
}
}
}
static object vratPolozku(object[] menu)
{
Console.CursorVisible = false;
ConsoleKeyInfo klavesa = new ConsoleKeyInfo();
int index = 0;
do
{
Console.Clear();
vykreslyMenu(menu, index);
klavesa = Console.ReadKey(true);
if (klavesa.Key == ConsoleKey.DownArrow)
index++;
else if (klavesa.Key == ConsoleKey.UpArrow)
index--;
if (index < 0)
index = menu.Length;
else if (index > menu.Length)
index = 0;
} while (klavesa.Key != ConsoleKey.Enter);
Console.Clear();
Console.CursorVisible = true;
if (index == menu.Length)
return null;
else
return menu[index];
}
static void vykreslyMenu(object[] menu, int index)
{
int maxDelka = 0;
foreach(object polozkaMenu in menu)
if (maxDelka < polozkaMenu.ToString().Length)
maxDelka = polozkaMenu.ToString().Length;
for (int i = 0; i <= menu.Length; i++)
{
if (i == index)
Console.BackgroundColor = ConsoleColor.Blue;
if (i < menu.Length)
Console.WriteLine(menu[i].ToString() + new String(' ', maxDelka - menu[i].ToString().Length));
else
Console.WriteLine("Zpět" + new String(' ', maxDelka - "Zpět".Length));
Console.BackgroundColor = ConsoleColor.Black;
}
}
}
/// <summary>
/// Třída obsahující informace o prodejním automatu
/// </summary>
class Automat
{
int prebytek = 0;
string jmeno;
List<Mince> mince = new List<Mince>();
List<Jizdenka> jizdenky = new List<Jizdenka>();
List<Jizdenka> pozadovaneJizdenky = new List<Jizdenka>();
/// <summary>
/// Vytvoří nový automat
/// </summary>
/// <param name="jmeno">Jméno automatu</param>
public Automat(string jmeno)
{
this.jmeno = jmeno;
// Podporované mince
mince.Add(new Mince("Padesát korun", 50, 5));
mince.Add(new Mince("Dvacet korun", 20, 5));
mince.Add(new Mince("Deset korun", 10, 10));
mince.Add(new Mince("Pět korun", 5, 10));
mince.Add(new Mince("Dvě koruny", 2, 10));
mince.Add(new Mince("Koruna", 1, 20));
// Podporované jízdenky
jizdenky.Add(new Jizdenka("Obyčejná", 14));
jizdenky.Add(new Jizdenka("Dětská", 8));
jizdenky.Add(new Jizdenka("Celodenní", 50));
jizdenky.Add(new Jizdenka("Celodenní dětská", 30));
}
/// <summary>
/// Vrátí všechny druhy jízdenek, které dokáže automat vydávat
/// </summary>
public Jizdenka[] DruhyJizdenek
{
get { return this.jizdenky.ToArray(); }
}
/// <summary>
/// Jméno automatu
/// </summary>
public string Jmeno
{
get { return this.jmeno; }
}
/// <summary>
/// Vypíše seznam mincí, které automat podporuje
/// </summary>
public Mince[] AkceptovatelneMince
{
get { return this.mince.ToArray(); }
}
/// <summary>
/// Přidá do automatu novou minci
/// </summary>
/// <param name="hodnota">Hodnota mince</param>
public string NovaMince(int hodnota)
{
if (vratMinci(hodnota) != null)
{
vratMinci(hodnota).Pocet++;
prebytek += hodnota;
return "Mince přijata";
}
else
{
return "Tuto minci automat nepodporuje!";
}
}
/// <summary>
/// Vrátí mince, které automatu nepatří
/// </summary>
/// <returns>Textový výpis mincí</returns>
private string VratMince()
{
string mince = "Vráceno:\n\n";
for (int i = prebytek; i > 0; i--)
{
if (vratMinci(i) != null)
{
mince += "\n" + vratMinci(i).Jmeno;
vratMinci(i).Pocet--;
prebytek -= vratMinci(i).Hodnota;
i = prebytek + 1;
}
}
return mince;
}
/// <summary>
/// Vrátí minci podle hodnoty
/// </summary>
/// <param name="hodnota">Hodnota mince</param>
/// <returns>Pokud mince vložené hodonty neexistuje, vrátí null</returns>
private Mince vratMinci(int hodnota)
{
foreach (Mince mince in this.mince)
if (mince.Hodnota == hodnota)
return mince;
return null;
}
/// <summary>
/// Přidání nové jízdenky
/// </summary>
/// <param name="jizdenka">Jízdenka</param>
/// <returns>Vrátí potvrzení přijmutí volby jízdenky</returns>
public string ObjednejJizdenku(Jizdenka jizdenka)
{
pozadovaneJizdenky.Add(jizdenka);
return jizdenka.Jmeno + " byla přidána na seznam";
}
/// <summary>
/// Stornuje objednávku a vrátí peníze
/// </summary>
/// <returns>Vrátí textový výpis vrácených peněz (pokud nějaké jsou)</returns>
public string Storno()
{
pozadovaneJizdenky.Clear();
if (prebytek > 0)
return VratMince();
else
return "Stornováno";
}
/// <summary>
/// Koupit požadované jízdenky
/// </summary>
/// <returns>Vrátí výpis koupených jízdenek a vrácených peněz</returns>
public string Potvrdit()
{
string vypis = "Objednávka vyřízena\n\nVrácené jízdenky:";
for (int i = 0; i < pozadovaneJizdenky.Count; i++)
{
if (prebytek >= pozadovaneJizdenky[i].Cena)
{
vypis += "\n" + pozadovaneJizdenky[i].Jmeno + " (" + pozadovaneJizdenky[i].Cena + " Kč)";
prebytek -= pozadovaneJizdenky[i].Cena;
}
}
pozadovaneJizdenky.Clear();
if (prebytek > 0)
{
vypis += "\n\n" + VratMince();
}
return vypis;
}
/// <summary>
/// Kolik korun bylo do automatu vhozeno
/// </summary>
public int Vhozeno
{
get { return this.prebytek; }
}
/// <summary>
/// Aktuální celková cena koupených jízdenek
/// </summary>
public int AktualniCena
{
get
{
int cena = 0;
foreach (Jizdenka jizdenka in this.pozadovaneJizdenky)
cena += jizdenka.Cena;
return cena;
}
}
}
/// <summary>
/// Obsahuje informace o minci
/// </summary>
class Mince
{
int hodnota, pocet;
string jmeno;
/// <summary>
/// Vytvoří nový typ mince
/// </summary>
/// <param name="jmeno">Jméno mince</param>
/// <param name="hodnota">Hodnota mince</param>
/// <param name="pocet">Počet mincí v automatu</param>
public Mince(string jmeno, int hodnota, int pocet)
{
this.jmeno = jmeno;
this.hodnota = hodnota;
this.pocet = pocet;
}
/// <summary>
/// Jméno mince
/// </summary>
public string Jmeno
{
get { return this.jmeno; }
}
/// <summary>
/// Hodnota mince
/// </summary>
public int Hodnota
{
get { return this.hodnota; }
}
/// <summary>
/// Počet mincí v automatu
/// </summary>
public int Pocet
{
get { return this.pocet; }
set
{
if (value > 0)
this.pocet = value;
else
this.pocet = 0;
}
}
/// <summary>
/// Přepsání metody ToString()
/// </summary>
/// <returns>Vrátí název mince</returns>
public override string ToString()
{
return this.jmeno;
}
}
/// <summary>
/// Obsahuje informace o jízdence
/// </summary>
class Jizdenka
{
string jmeno;
int cena;
/// <summary>
/// Vytvoří nový druh jízdenky
/// </summary>
/// <param name="jmeno">Jméno jízdenky</param>
/// <param name="cena">Cena jízdenky</param>
public Jizdenka(string jmeno, int cena)
{
this.jmeno = jmeno;
this.cena = cena;
}
/// <summary>
/// Jméno jízdenky
/// </summary>
public string Jmeno
{
get { return this.jmeno; }
}
/// <summary>
/// Cena jízdenky
/// </summary>
public int Cena
{
get { return this.cena; }
}
/// <summary>
/// Přepsání metody ToString()
/// </summary>
/// <returns>Vrátí jméno jízdenky</returns>
public override string ToString()
{
return this.jmeno + " (" + this.cena + " Kč)";
}
}
}
Nemáte oprávnění prohlížet přiložené soubory.
- techstep
- Nováček

-
- Registrován: 18. črc 2010
Re: C# Automat
Díky díky díky moc, taky bych ti klidně koupil flašku, klidně i dvě 