Entwickler-Ecke

C# - Die Sprache - Fragen, Tipps und Optimierungen zu Währungsrechner


Disastro - Do 12.02.09 13:43
Titel: Fragen, Tipps und Optimierungen zu Währungsrechner
Hi all,

Ich habe mir ein Buch gekauft und wende gewiesse Übungen gleich an. Ich habe nun mit einem
simplen und kleinen Währungsrechner begonnen, der die Möglichkeit bieten solle CHF in Euro und Dollar umzurechnen.

Der Code sieht folgendermassen aus:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Umrechner
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Wählen Sie eine Option\n\n1.Euro in CHF\n2.Dollar in CHF\n");
            string Optiongo = Console.ReadLine();
            int Option = System.Convert.ToInt16(Optiongo);
            switch(Option) 
            {
            case 1:
                Console.WriteLine("Geben Sie den Betrag in EUR ein");
                string BetragEUR;

                BetragEUR = Console.ReadLine();
                double BetragEURCHF = System.Convert.ToDouble(BetragEUR)*1.50;
                Console.WriteLine("Das ergibt " +BetragEURCHF+ " Schweizer Franken");
                Console.ReadLine();
                break;
            case 2:
                Console.WriteLine("Geben Sie den Betrag in Dollar ein");
                string BetragDollar;
                BetragDollar = Console.ReadLine();
                double BetragDollarCHF = System.Convert.ToDouble(BetragDollar) * 1.15;
                Console.WriteLine("Das ergibt " + BetragDollarCHF + " Schweizer Franken");
                Console.ReadLine();
                break;
            }
        }
    }
}


Nun meine Fragen:

1. Wie kann ich die Möglichkeit bieten, in den einzelnen Cases zurück zum Menü zu kehren?
2. Wie könnte ich mein Code optmieren und was zum Beispiel besser machen? Ich bin irgendwie der Meinung, dass ich das convertieren der Variabeln in diesem Skript nicht zwingend benötige.
3. Ein Ziel wäre es, die Wechselkurse direkt über das Internet zu aktualisieren. Ist das bei Konsolenanwendungen auch machbar, oder wäre hier die Variante Windows Form doch geeigneter? Wie realisiere ich das? Ich habe eine leichte Ahnung von PHP und vermute, dass ich dies via XML realisieren kann.

Vielen Dank im Voraus für eure Antworten.

Gruss
Disastro

Moderiert von user profile iconKha: Code- durch C#-Tags ersetzt


Console.Beep() - Do 12.02.09 13:55

Es wäre angebracht ,dass du die Umberechnungen als extra methoden schreibst und dann einfach im case die methode aufrufst (sieht ordendlicher aus und du findest dich besser im Code zurecht).

C#-Quelltext
1:
2:
3:
4:
5:
...
case 1:                
Umrechnen_in_Franken();
break;
...



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
//Methode um in Franken umzurechnen
static void Umrechnen_in_Franken()
{
      Console.WriteLine("Geben Sie den Betrag in EUR ein");                
      string BetragEUR;                
      BetragEUR = Console.ReadLine();                
      double BetragEURCHF = System.Convert.ToDouble(BetragEUR)*1.50;                
      Console.WriteLine("Das ergibt " +BetragEURCHF+ " Schweizer Franken");
      Console.ReadLine();
}


zu frage 1: mach ne do-while schleife rum und frage einfach immer ab ob der user beenden will.


Console.Beep() - Do 12.02.09 14:23

zu 2. ja, du kannst es etwas vereinfachen

statt:

C#-Quelltext
1:
2:
string Optiongo = Console.ReadLine();            
int Option = System.Convert.ToInt16(Optiongo);

schreib:

C#-Quelltext
1:
int Option=Convert.ToInt32(Console.ReadLine());                    

Schon hast du eine Zeile gespart^^
Und bei der Umrechnung solltest du selbst gucken was du da vereinfachen kannst.

Vorsicht: du solltest noch try/catch einbauen sonst schmeist das Programm den Benutzer bei einer Ausnahme raus

siehe http://openbook.galileocomputing.de/csharp/kap04.htm für Infos


JüTho - Do 12.02.09 15:33

user profile iconConsole.Beep() hat folgendes geschrieben Zum zitierten Posting springen:
Vorsicht: du solltest noch try/catch einbauen sonst schmeist das Programm den Benutzer bei einer Ausnahme raus

Mein Standardvorschlag ist, dass anstelle von Convert.ToXxx möglichst Parse, ParseExact, TryParse, TryParseExact verwendet werden sollte. Das erspart die Prüfung nach Exceptions:


C#-Quelltext
1:
2:
int Option = 0;
if (int.TryParse(Console.ReadLine(), out Option)) {...}


Ansonsten habe ich keine Einwände gegen Beeps Vorschläge. Eher würde ich empfehlen, das Ganze als WinForms-Anwendung zu erstellen, was ja auch für die praktische Nutzung viel schöner wäre.

Gruß Jürgen