C# :: Aufgabe #206

3 Lösungen Lösungen öffentlich

Kilometerrechner mit Erstattungsbetrag

Anfänger - C# von syneex - 15.05.2018 um 16:30 Uhr
Guten Tag,

die heutige Aufgabe ist:
einen "Kilometerrechner" zu programmieren, der Die Differenz zwischen Anfangs-, und Endstand eines Tachos ausgeben kann und pro Kilometer dem Fahrer einen gewissen Betrag erstattet.

Design:
Wie im Anhang beigefügt sollen Sie ein Windows Forms Programm erstellen, welches jeweils einem numericupdown Element für den Anfangsstand und den Enstand eines Tachos besitzt. Sie können sich an dem im Screenshot gezeigten Design orientieren.

Funktion:
Im numericupdown1 soll der Anfangsstand und im numericupdown2 der Endstand eingetragen werden. Drückt man auf den Button "Berechnen", bekommt man den Erstattungsbetrag für die gesamte Strecke heraus (fester Satz liegt für diese Aufgabe bei 0.39 Euro pro Kilometer). Drückt man auf "Kilometer anzeigen", werden die gefahrenen Kilometer angezeigt (Die gefahrenen Kilometer zwischen Anfangs-, und Endstand).

Zum Probieren:
Sie könnten versuchen den Erstattungsbetrag pro gefahrenen Kilometer ebenfalls in die Form einzubauen und die Berechnung dann mit diesem eingegebenen Betrag durchführen

Viel Spaß und Viel Erfolg :)

PS: Sorry für die schlechte Qualität meines Screenshots :(

Lösungen:

vote_ok
von julian (140 Punkte) - 16.05.2018 um 15:30 Uhr
Quellcode ausblenden C#-Code
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            nud_StartKm.Maximum = 1000000;
            nud_FinishKm.Maximum = 1000000;
            nud_Cent.Maximum = 1000000;
        }

        //Button zur Berechnung des Erstattungsbetrages
        private void btn_calc_Money_Click(object sender, EventArgs e)
        {           
            //Ermitteln der Differenz des Kilometerstandes
            decimal diff = nud_FinishKm.Value - nud_StartKm.Value;

            //Berechnen der Erstatteten €
            decimal result = diff * (nud_Cent.Value / 100);
            
            lbl_result.Text = "Du bekommst insgesamt " + result.ToString() + "€ erstattet.";
        }

        //Button zur Berechnung der Differenz der Kilometerstände
        private void btn_calc_km_Click(object sender, EventArgs e)
        {
            //Ermitteln der Differenz des Kilometerstandes
            decimal diff = nud_FinishKm.Value - nud_StartKm.Value;

            lbl_result.Text = "Du bist insgesamt " + diff.ToString() + " Kilometer gefahren.";
        }
    }


Für die Windows Form siehe Bild.

Die Controls:

Quellcode ausblenden C#-Code
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.NumericUpDown nud_StartKm;
        private System.Windows.Forms.NumericUpDown nud_FinishKm;
        private System.Windows.Forms.NumericUpDown nud_Cent;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.Button btn_calc_Money;
        private System.Windows.Forms.Button btn_calc_km;
        private System.Windows.Forms.Label lbl_result;
vote_ok
von hollst (10290 Punkte) - 17.05.2018 um 09:34 Uhr
Quellcode ausblenden C#-Code
using System.Windows;

/*
        Install NuGet  
        Open your Visual Studio.  
        Open your solution/project.  
        Open Tools menu, select Library Package Manager and select Package Manager Console
        Run the following command "Install-Package Extended.Wpf.Toolkit" 
 */

namespace aufgabe_206
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();           
        }

        struct GUI
        {
            public int km_start;
            public int km_end;
            public int cent_pro_km;
        }

        GUI gui_state = new GUI();

        void update_gui_state()
        {
            gui_state.km_start = (int)this.ud_1.Value;
            gui_state.km_end = (int)this.ud_2.Value;
            gui_state.cent_pro_km = (int)this.ud_3.Value;
        }

        private void ValueChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            if (!bo_is_loaded)  return;

            update_gui_state();
            string erstattung = ((gui_state.km_end - gui_state.km_start) * gui_state.cent_pro_km * 0.01).ToString("n2") + " €";
            this.textBlock.Text = erstattung;
        }

        bool bo_is_loaded = false;
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            bo_is_loaded = true;
            button_Click(null, null);
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            this.ud_1.Value = this.ud_2.Value;
            update_gui_state();
            ValueChanged(null, null);
        }
    }
}


Quellcode ausblenden C#-Code
<Window x:Class="aufgabe_206.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:aufgabe_206"
            xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
        mc:Ignorable="d"
        Title="Kilometerrechner mit Erstattungsbetrag" Height="200" Width="725" FontFamily="Courier New" FontWeight="Bold" Background="{DynamicResource {x:Static SystemColors.ActiveCaptionBrushKey}}" BorderThickness="5" BorderBrush="Blue" WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize" Loaded="Window_Loaded">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="60"/>
            <RowDefinition Height="1*"/>
        </Grid.RowDefinitions>
        <StackPanel Margin="10,20,10,0" Orientation="Horizontal">
            
            <Label x:Name="lb_1" Content="km-START" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,0,0,0"/>
            <xctk:IntegerUpDown x:Name="ud_1" Width="75" Margin="10,0,0,0" Value="5000" Background="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" ValueChanged="ValueChanged" BorderThickness="5"/>

            <Label x:Name="lb_2" Content="   km-STOP" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,0,0,0"/>
            <xctk:IntegerUpDown x:Name="ud_2" Width="75" Margin="10,0,0,0" Value="5000" Background="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" ValueChanged="ValueChanged" BorderThickness="5"/>

            <Label x:Name="lb_3" Content="   CENT/km" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,0,0,0"/>
            <xctk:IntegerUpDown x:Name="ud_3" Width="75" Margin="10,0,0,0" Value="39" Background="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" ValueChanged="ValueChanged" BorderThickness="5"/>
            
            <Button x:Name="button" Content=" take END -> START " Margin="10,0,0,0" Click="button_Click"/>

        </StackPanel>
        <TextBlock x:Name="textBlock" Margin="0" Grid.Row="1" TextWrapping="Wrap" FontSize="72" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Blue"/>

    </Grid>
</Window>
vote_ok
von Jodsalz (40 Punkte) - 24.10.2018 um 11:04 Uhr
Quellcode ausblenden C#-Code
//  Ist zwar in der Console aber vom Prinzip her das selbe.
// statt Console.WriteLine muss man halt   txt_GefahreneKm.Text = txt_neueKM.Text - txt_alteKM. txt_Erstattung.Text = (txt_neueKM.Text - 
   txt_alteKM)*0.39

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

namespace kmStand
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("AlteKM: ");
            int altKm = Convert.ToInt32(Console.ReadLine());


            Console.WriteLine("NeueKM: ");
            int neueKM = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Gefahrene KM: " + (neueKM - altKm));

            Console.WriteLine("Erstattung: " + ((neueKM - altKm) * 0.39) + "Euro");

            Console.ReadKey();
        }
    }
}