Auto_Main
- Zadání: Deklarujte nestatickou třídu Auto v rámci jmenného prostoru Trida, která bude obsahovat následující nestatické datové složky:
- pocetKol – počet kol auta (konstantní volně přístupný atribut)
- kapacitaNadrze – kapacita nádrže auta (pouze pro čtení)
- sPZ – státní poznávací značka auta
- stavNadrze – aktuální stav objemu paliva v nádrži auta
- ujetoKm – aktuální stav počtu ujetých kilometrů
- spotreba – průměrná spotřeba litrů paliva na 100 km
Deklarujte statickou celočíselnou datovou složku delkaGrafUkazatele. Deklarujte veřejnou metodu bez návratu s názvem UjedTrasu ve třídě Auto, která simuluje jízdu auta. Tato metoda přijímá jako vstupní reálný formální parametr pocetKm, který vyjadřuje počet km, které má auto ujet. V rámci této metody je volána další metoda SpotrebujPalivo, která zajistí spotřebu paliva pro jízdu auta (datová složka stavNadrze). Je zároveň nutné zvýšit počet ujetých kilometrů auta (datová složka ujetoKm). Deklarujte metodu StavNadrzeGraficky pro zobrazení grafického prvku, který ukazuje aktuální stav paliva v nádrži (návrat metody ve formě textového řetězce). Grafický ukazatel stavu paliva budou reprezentovat znaky "#" uzavřené v hranatých závorkách. Vytvořte novou instanci třídy autoOctavia nestatické třídy Auto pomocí vlastního konstruktoru. Konstruktor bude přijímat jako formální parametry kapacitaNadrze, stavNadrze, spotreba (datové typy těchto parametrů jsou shodné s datovými typy datových složek třídy Auto). Nastavte délku grafického ukazatele paliva (nádrž je plná) na 20 znaků. Počáteční stav najetých km (najetoKm) je 0. V hlavní metodě vytvořte instanci třídy Auto s názvem autoOctavia se skutečnými parametry 55, 50, 0 (kapacitaNadrze, stavNadrze, spotreba). Vypište v Main kapacitu nádrže, stav ujetých km, objem nádrže a zobrazte objem nádrže pomocí grafického prvku. Ujeďte s autem 100 km a proveďte znovu všechny výpisy
- Řešení:
//Deklarace třídy namespace Trida { //Deklarace třídy 'Auto' class Auto { //Značka začátku oblasti s datovými složkami #region Deklarace datových složek třídy //Deklarace konstantní datové složky public const int pocetKol = 4; //Deklarace datové složky pouze pro čtení readonly double kapacitaNadrze = 60; //Deklarace privátních datových složek string sPZ; double stavNadrze; double ujetoKm; double spotreba; //Deklarace statické datové složky static int delkaGrafUkazatele; //Značka konce oblasti s datovými složkami #endregion //Deklarace veřejné metody pro ujetí určité trasy public void UjedTrasu(double pocetKm) { //Volání metody pro spotřebu paliva this.SpotrebujPalivo(pocetKm); //Zvýšení celkového počtu ujetých kilometrů this.ujetoKm += pocetKm; } //Deklarace vlastního konstruktoru třídy public Auto(double kapacitaNadrze, double stavNadrze, double spotreba) { //Inicializace soukromých datových složek this.stavNadrze = stavNadrze; this.ujetoKm = 0; this.spotreba = spotreba; //Inicializace statické datové složky delkaGrafUkazatele = 20; //Inicilazace datové složky (readonly) pomocí parametru this.kapacitaNadrze = kapacitaNadrze; } //Deklarace soukromé metody pro výpočet spotřeby a snížení množství paliva private void SpotrebujPalivo(double pocetKm) { //Výpočet spotřebovaného paliva double spotrebovanePalivo = pocetKm / 100 * this.spotreba; //Odebrání spotřebovaného paliva z nádrže this.stavNadrze -= spotrebovanePalivo; } //Deklarace veřejné metody pro grafiku zobrazující aktuální stav paliva v nádrži public string StavNadrzeGraficky() { //Deklarace grafického výstupu - textový řetězec - počátek hranaté závorky string grafickyUkazatel = "["; /*Výpočet procentruálního objemu paliva v nádrži a výpočet počtu dílků * v grafickém ukazateli, tj. počet znaků # uvnitř hranaté závorky*/ double pocetDilku = Math.Round((this.stavNadrze / this.kapacitaNadrze) * Auto.delkaGrafUkazatele); //Cyklus na připojení znaků do grafického výstupu for (int i = 0; i < pocetDilku; i++) grafickyUkazatel += "#"; //Doplnění mezer do celkové délky grafického ukazatele grafickyUkazatel = grafickyUkazatel.PadRight(Auto.delkaGrafUkazatele + 1); //Návrat grafického textového ukazatele stavu paliva v nádrži return (grafickyUkazatel += "]"); } //Deklarace hlavní metody static void Main(string[] args) { /*Vytvoření instance třídy Auto pomocí volání vlastního konstruktoru * včetně předání skutečného parametru*/ Auto autoOctavia = new Auto(55, 50, 5); Console.WriteLine("Kapacita nádrže: {0}", autoOctavia.kapacitaNadrze); Console.WriteLine("Ujeto km: {0}", autoOctavia.ujetoKm); Console.WriteLine("Stav nádrže: {0}", autoOctavia.stavNadrze); Console.WriteLine("Stav nádrže: {0}", autoOctavia.StavNadrzeGraficky()); autoOctavia.UjedTrasu(100); Console.WriteLine("Auto Octavia:"); Console.WriteLine("Ujeto km: {0}", autoOctavia.ujetoKm); Console.WriteLine("Stav nádrže: {0}", autoOctavia.stavNadrze); Console.WriteLine("Stav nádrže: {0}", autoOctavia.StavNadrzeGraficky()); //Čekání na stisk klávesy -> ukončení programu Console.ReadKey(); } } }
- Výstup programu:
Kapacita nádrže: 55
Ujeto km: 0
Stav nádrže: 50
Stav nádrže: [################## ]
Auto Octavia:
Ujeto km: 100
Stav nádrže: 45
Stav nádrže: [################ ]