» »

[C#] Preprost račun

[C#] Preprost račun

Cvenemir ::

Lep pozdrav. Izdelal sem razred Racun, z metodami za dvig, polog denarja in metodo za informacijo o trenutnem stanju računa.

Problem nastane ko poženem program, izberem željeno akcijo in vnesem znesek.
Javi mi napako: "Make sure your method arguments are in right format". Glede na to, da v metodah nimam podanih argumentov, ne vem kako naj rešim problem.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Racun
    {   
        //Definiramo atribut(e) razreda
        public double trenutnoStanje = 1500;
        /// <summary>
        /// Metoda zahteva vnos zneska za dvig. Če je zahtevan znesek višji
        /// od trenutnega stanja na računu, nam javi napako, da zneska ni možno izplačati
        /// </summary>
        public void DvigDenarja()
        {
            double znesekDviga, stanjePoDvigu;

            Console.WriteLine("\nVnesite znesek, ki ga želite dvigniti: ");
            znesekDviga = double.Parse(Console.ReadLine());

            if (znesekDviga > trenutnoStanje)//Preverimo, če je višina dviga veljavna
            {
                Console.WriteLine("Zneska ni mogoče izplačati!");
            }
            else
            {
                stanjePoDvigu = trenutnoStanje - znesekDviga;
                Console.WriteLine("\nNovo stanje na računu je: {}", stanjePoDvigu);
                trenutnoStanje = stanjePoDvigu;
            }
        }

        /// <summary>
        /// Metoda od nas zahteva vnos zneska za polog. Znesek
        /// pologa nato prišteje prejšnjemu trenutnemu stanju, in stanje po pologu shrani
        /// kot trenutno stanje.
        /// </summary>
        public void PologDenarja()
        {
            double znesekPologa, stanjePoPologu;
            Console.WriteLine("\nVnesite znesek pologa: ");
            znesekPologa = double.Parse(Console.ReadLine());
            stanjePoPologu = this.trenutnoStanje + znesekPologa;
            Console.WriteLine("\nNovo stanje na računu je: {}", stanjePoPologu);
            trenutnoStanje = stanjePoPologu;
        }
        /// <summary>
        /// Metoda izpiše trenutno stanje.
        /// </summary>
        public void TrenutnoStanje()
        {
            Console.WriteLine("\nTrenutno stanje vašega računa je: {} EUR", trenutnoStanje);
        }
}



    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Za dvig denarja pritisnite tipko 1.\nZa polog denarja pritisnite tipko 2.\nZa izpis trenutnega stanja na računu pritisnite tipko 3.");
            
            //Ustvarimo nov objekt racun
            Racun racun = new Racun();
            
            char znak = Console.ReadKey(true).KeyChar;
            //Pogojni stavki za izbiro željene akcije
            if (znak == '1')
            {
                racun.DvigDenarja();                
            }

            else if (znak == '2')
            {
                racun.PologDenarja();
            }
            else if (znak == '3')
            {
                racun.TrenutnoStanje();
            }

            Console.ReadKey(true);
        }
    }
}

^TMS^ ::

Uporabi kvečjemu Double.Parse(), trenutno uporabljaš malo začetnico, ali Convert.ToDouble().
To iterate is human, to recurse divine.

Cvenemir ::

Nič od tega ne reši problema :)

^TMS^ ::

Nadomesti:
Console.WriteLine("\nNovo stanje na računu je: {}", stanjePoDvigu);

bodisi z:
Console.WriteLine("\nNovo stanje na računu je: {0}", stanjePoDvigu);

bodisi z:
Console.WriteLine("\nNovo stanje na računu je: {" + stanjePoDvigu+ "}")


Stori to vsepovsod in bi moralo delati.
To iterate is human, to recurse divine.

fiction ::

Pri tebi je pomoje problem {} namesto {0} v format stringu WriteLina. Definitvno dobiš FormatException, katerega Message je mogoče malo dvomljiv, vprašanje je samo kje. Ampak zaboga sej imaš debugger in točno vidiš kje se vse skupaj zalomi, ne samo brati sporočila o napaki. Če bi bil kakšen problem v zvezi s parametri tvojih metod, se zadeva zelo verjetno niti ne bi prevedla.

V C# za razliko od Jave med Double in double ni prav nobene razlike.

Sej razumem da gre za demo projekt, ampak vseeno ne bi škodilo, če bi zadevo naredil malo bolj robustno. Pri double.Parse() moraš računati na to, da boš dobil FormatException, ker vzameš vhod od uporabnika, ta pa lahko vpiše karkoli. Tudi negativnega dviga (ter negativnega pologa) najbrž ne bi smel spustiti skozi. Za demonstracijske namene tudi ne bi bilo slabo, če bi uporabnik lahko v enem zagonu izvedel več različnih akcij... O težavah, ki bi lahko nastale zaradi sočasnega izvajanja metod v večih nitih niti ne bom zgubljal besed, ker je to verjetno izven scopa naloge.

Cvenemir ::

Seveda bom še dopolnil nalogo. Sam prej sm se hotu tega znebit :) Hvala za pomoč.

Spura ::

+1 na fictionov post, plus se te pripombe:
- funkcija, ki zajema uporabnikov vnos, naj bo locena od logike izracuna. Ubistvu naj bo locena od razreda racun, ker branje vrednosti od uporabnika in interpretiranje njegovih ukazov nimajo veze z logiko racuna.
Ce imas class poln void no-argument metod, potem najverjetneje delas narobe.
-
if (znesekDviga > trenutnoStanje)//Preverimo, če je višina dviga veljavna 

mislim da lahko clovek dvigne tudi toliko kot je na racunu, ne samo manj

Cvenemir ::

Hvala za nasvete. Bom upošteval pri naslednjih vajah. Za to je žal že prepozno :)

darkkk ::

Tko fyi, če nočeš exceptionov metat zaradi castov, ima c# metode TryParse, rezultat je bool (ali cast uspe), noter daš pa string, referenco na spremenljivko + celega boga dodatnih parametrov(optional).

npr:
string str = "2.15";
double num;
if(double.TryParse(str, out num)){
//do smthing
}else{
//cast ni uspel
}



Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[FRI Seminarska] Pomoč

Oddelek: Programiranje
71327 (1086) mladec
»

[c#] Ustvarjanje objekta v drugem razredu

Oddelek: Programiranje
81578 (1523) Cvenemir
»

Sode ter Lihe(C Sharp)

Oddelek: Programiranje
161550 (1348) detroit
»

[C#] Klicanje metod

Oddelek: Programiranje
141581 (1349) Cvenemir
»

[C#] Reševanje domačih nalog

Oddelek: Programiranje
173049 (2553) krastača

Več podobnih tem