Währungsrechner für die Europäische Union

1. Aufgabe

Seit dem 1. Januar 2002 besitzen wir, ungeachtet dessen, welche Meinung wir zu diesem Umstand haben, den Euro (€) als Bargeld. Er ist das Zahlungsmittel in der Europäischen Wirtschafts- und Währungsunion. Im Vorfeld der Währungsumstellung wurde für alle Länder, die den Euro als Währung eingeführt haben, durch die EU-Finanzminister über den endgültigen Umtauschkurs entschieden. Vielleicht sind Sie wie ich auch etwas sentimental und trauern immer noch der guten alten Deutschen Mark nach. Inwieweit die Währungsumstellung tatsächlich zu einer Stärkung der Europäischen Union beigetragen hat, können wir auch mit dieser Übungsaufgabe nicht eruieren. Zumindest trägt ein Währungsrechner dazu bei, dass die alten Umrechnungskurse nicht in Vergessenheit geraten.

Erstellen Sie, unter Verwendung geeigneter WPF-Standard-Steuerelemente und -Container, einen Euro-Währungsrechner. Die Oberfläche des Rechners könnte so aussehen (Abbildung 1):

Währungsrechner für die Europäische Union.

Abbildung 1. Währungsrechner für die Europäische Union.


Von den 27 Mitgliedsländern der Europäischen Union haben zum Zeitpunkt der Erstellung dieses Kapitels 17 Länder den Euro als Währung eingeführt (Tabelle 1):

Land

Wechselkurs: 1 Euro sind

Vorgängerwährung

Belgien

40.3399

Belgische Franc

Deutschland

1.95583

Deutsche Mark

Finnland

5.94573

Finnmark

Frankreich

6.55957

Französische Franc

Griechenland

340.750

Griechische Drachmen

Niederlande

2.20371

Holländische Gulden

Irland

0.787564

Irische Pfund

Italien

1936.27

Italienische Lire

Luxemburg

40.3399

Luxemburgische Franc

Malta

0.429300

Maltesische Lira

Österreich

13.7603

Österreichische Schilling

Portugal

200.482

Portugiesische Escudo

Slowenien

239.640

Slowenische Tolar

Spanien

166.386

Spanische Peseten

Zypern

0.585274

Zyprische Pfund

Slowenien

30.1260

Slowakische Kronen

Estland

15.6466

Estnische Kronen

Tabelle 1. Offizielle Umtauschkurse der Vorgängerwährungen in Euro.

2. Lösung

Die Umsetzung der Aufgabe enthält keine verborgenen Stolperfallen. In den beiden nachfolgenden Codelistings Listing 1 und Listing 2 finden Sie unmittelbar aufeinanderfolgend die XAML-Direktiven zur Gestaltung der Oberfläche und den Code-Behind-Anteil für die Logik des Währungsrechners vor:

01: <Window x:Class="WpfCurrencyCalculator.MainWindow"
02:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
03:         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
04:         Title="Euro Currency Calculator (Stand: 1.1.2012)" Height="250" Width="650">
05:     <DockPanel LastChildFill="True">
06: 
07:         <UniformGrid Columns="2" DockPanel.Dock="Top" >
08:             <TextBlock Margin="12, 3, 1, 1">Ausgangswährung:</TextBlock>
09:             <TextBlock Margin="8, 3, 1, 1">Zielwährung:</TextBlock>
10:         </UniformGrid>
11: 
12:         <Button Name="Clear_Button" DockPanel.Dock="Bottom"
13:             Margin="10, 3, 10, 3" Click="Button_Click"
14:             Content="Eingabe zurücksetzen">
15:         </Button>
16: 
17:         <DockPanel  DockPanel.Dock="Bottom" LastChildFill="True">
18:             <TextBlock DockPanel.Dock="Left" Margin="10, 3, 3, 3"
19:                 VerticalAlignment="Center">Betrag:</TextBlock>
20:             <TextBox DockPanel.Dock="Left"  Name="Input_TextBox" Margin="3"
21:                 Width="70" IsEnabled="True" Background="LightGray"></TextBox>
22:             <TextBlock DockPanel.Dock="Left" Margin="3"
23:                 VerticalAlignment="Center">Ergebnis:</TextBlock>
24:             <TextBox  Name="Output_TextBox" Margin="3, 3, 10, 3"
25:                 IsEnabled="True" Background="LightGray"></TextBox>
26:         </DockPanel>
27: 
28:         <Button Name="Calc_Button" DockPanel.Dock="Bottom"
29:             Margin="10, 3, 10, 3" Click="Button_Click"
30:             Content="Umrechnung durchführen">
31:         </Button>
32: 
33:         <UniformGrid Columns="2">
34:             <ListBox Name="Source_ListBox"  Margin="10, 0, 3, 6"  >
35:             </ListBox>
36:             <ListBox Name="Target_ListBox"  Margin="3, 0, 10, 6" >
37:             </ListBox>
38:         </UniformGrid>
39:     </DockPanel>
40: </Window>

Beispiel 1. XAML-Markup zur Gestaltung der Währungsrechner-Oberfläche


001: public partial class MainWindow : Window
002: {
003:     // Umrechnungstabelle der alten Währungen in Euro 
004:     private double[] translation;
005: 
006:     private String[] currencies;
007: 
008:     public MainWindow()
009:     {
010:         // http://de.wikipedia.org/wiki/Euro
011:         this.translation = new double[] 
012:         {
013:             1.0,        //  Euro
014:             40.3399,    //  Belgische Franc 
015:             1.95583,    //  Deutsche Mark 
016:             5.94573,    //  Finnmark 
017:             6.55957,    //  Französische Franc 
018:             340.750,    //  Griechische Drachmen 
019:             2.20371,    //  Holländische Gulden 
020:             0.787564,   //  Irische Pfund 
021:             1936.27,    //  Italienische Lire 
022:             40.3399,    //  Luxemburgische Franc 
023:             0.429300,   //  Maltesische Lira 
024:             13.7603,    //  Österreichische Schilling 
025:             200.482,    //  Portugiesische Escudo 
026:             239.640,    //  Slowenische Tolar 
027:             166.386,    //  Spanische Peseten 
028:             0.585274,   //  Zyprische Pfund 
029:             30.1260,    //  Slowakische Kronen
030:             15.6466,    //  Estnische Kronen
031:         };
032: 
033:         this.currencies = new String[] 
034:         {
035:             "Euro (EUR)",
036:             "Belgische Franc (BFR)",
037:             "Deutsche Mark (DM)",
038:             "Finnmark (FIM)",
039:             "Französische Franc (FRF)",
040:             "Griechische Drachmen (DGR)",
041:             "Niederländische Gulden (NLG)",
042:             "Irische Pfund (IEP)",
043:             "Italienische Lire (ITL)",
044:             "Luxemburgische Franc (LUF)",
045:             "Maltesische Lira (MTL)",
046:             "Österreichische Schilling (ATS)",
047:             "Portugiesische Escudo (PTE)",
048:             "Slowenische Tolar (SKK)",
049:             "Spanische Peseten (ESP)",
050:             "Zyprische Pfund (CYP)",
051:             "Slowakische Kronen (SKK)",
052:             "Estnische Kronen (EEK)"
053:         };
054: 
055:         this.InitializeComponent();
056: 
057:         this.FillListBox(this.Source_ListBox);
058:         this.FillListBox(this.Target_ListBox);
059:     }
060: 
061:     private void Button_Click(Object sender, RoutedEventArgs e)
062:     {
063:         Button b = (Button) sender;
064: 
065:         if (b == this.Calc_Button)
066:         {
067:             if (this.Source_ListBox.SelectedIndex < 0)
068:             {
069:                 this.Output_TextBox.Text = "Keine Ausgangswährung selektiert !";
070:                 return;
071:             }
072: 
073:             if (this.Target_ListBox.SelectedIndex < 0)
074:             {
075:                 this.Output_TextBox.Text = "Keine Zielwährung selektiert !";
076:                 return;
077:             }
078: 
079:             this.Output_TextBox.Text = "";
080: 
081:             double value = 0.0;
082:             try
083:             {
084:                 String s = this.Input_TextBox.Text;
085:                 value = Double.Parse(s);
086:             }
087:             catch (FormatException)
088:             {
089:                 this.Output_TextBox.Text = "Eingabe hat falsches Format";
090:             }
091: 
092:             int from = this.Source_ListBox.SelectedIndex;
093:             int to = this.Target_ListBox.SelectedIndex;
094: 
095:             // convert from foreign currency to euros
096:             double result = value;
097:             if (from != 0)
098:                 result = this.ConvertToEuro(value, from);
099: 
100:             // convert from euro to foreign currency
101:             if (to != 0)
102:                 result = this.ConvertFromEuro(result, to);
103: 
104:             // display result
105:             String s1 = (String) this.Source_ListBox.Items[from];
106:             String s2 = (String) this.Target_ListBox.Items[to];
107: 
108:             this.Output_TextBox.Text =
109:                 String.Format("{0:.#####} {1} sind {2:.#####} {3}", value, s1, result, s2);
110: 
111:         }
112:         else if (b == this.Clear_Button)
113:         {
114:             this.Input_TextBox.Text = "";
115:             this.Output_TextBox.Text = "";
116:         }
117:     }
118: 
119:     // private helper methods
120:     private double ConvertToEuro(double foreign, int index)
121:     {
122:         return foreign / this.translation[index];
123:     }
124: 
125:     private double ConvertFromEuro(double euros, int index)
126:     {
127:         return euros * this.translation[index];
128:     }
129: 
130:     private void FillListBox(ListBox lb)
131:     {
132:         for (int i = 0; i < this.currencies.Length; i ++)
133:             lb.Items.Add (this.currencies[i]);
134:     }
135: }

Beispiel 2. Code-Behind-Datei des Währungsrechners