Wednesday, October 30, 2013

WPF applicarion Evening

.Here is the windows form XML

<Window x:Class="MileageApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Name="MPGWindow">
    <Grid>
        <Label Content="Enter Beginning Mileage" HorizontalAlignment="Left" Margin="40,30,0,0" VerticalAlignment="Top"/>
        <TextBox x:Name="txtBeginMiles" HorizontalAlignment="Left" Height="23" Margin="208,30,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <Label Content="Enter Ending Mileage" HorizontalAlignment="Left" Margin="40,74,0,0" VerticalAlignment="Top"/>
        <TextBox x:Name="txtEndingMiles" HorizontalAlignment="Left" Height="23" Margin="208,74,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <Label Content="Enter Gallons" HorizontalAlignment="Left" Margin="50,116,0,0" VerticalAlignment="Top"/>
        <TextBox x:Name="txtGallons" HorizontalAlignment="Left" Height="23" Margin="208,119,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
        <Button x:Name="btnCalculate" Content="Calculate" HorizontalAlignment="Left" Margin="50,157,0,0" VerticalAlignment="Top" Width="75" Click="btnCalculate_Click"/>
        <Label x:Name="lblResult" Content="Label" HorizontalAlignment="Left" Margin="208,177,0,0" VerticalAlignment="Top" Width="131" Height="56"/>
        <Button x:Name="btnExit" Content="Exit" HorizontalAlignment="Left" Margin="50,213,0,0" VerticalAlignment="Top" Width="75" RenderTransformOrigin="-0.507,0.1" Click="btnExit_Click"/>

    </Grid>
</Window>


Here is the code behind the form

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace MileageApplication
{
    /// 
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            MPGWindow.Background = new LinearGradientBrush(Colors.BlueViolet,
                Colors.AliceBlue, 45);
        }

        private void btnCalculate_Click(object sender, RoutedEventArgs e)
        {
            int bMiles;
            Mileage m = new Mileage();

            bool isGoodBegMiles = int.TryParse(txtBeginMiles.Text, out bMiles);
            if (isGoodBegMiles)
            {
                m.BeginMileage = bMiles;
            }
            else
            {
                MessageBox.Show("Enter a valid integer for beginning Miles");
                return;
            }

            m.EndMileage = int.Parse(txtEndingMiles.Text);
            m.Gallons = double.Parse(txtGallons.Text);
            double mpg = m.CalculateGasMileage();
            lblResult.Content = mpg.ToString();

            if (mpg > 40)
                lblResult.Background = new SolidColorBrush(Colors.Green);
            else if (mpg > 30)
                lblResult.Background = new SolidColorBrush(Colors.GreenYellow);
            else if (mpg > 20)
                lblResult.Background = new SolidColorBrush(Colors.Yellow);
            else
                lblResult.Background = new SolidColorBrush(Colors.Red);





        }

        private void btnExit_Click(object sender, RoutedEventArgs e)
        {
            Application.Current.Shutdown();
        }
    }
}


Here is the Mileage Class, the same as we had before with one change: the Namespace was changed to match the rest of the application.

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

namespace MileageApplication
{
    class Mileage
    {
        //class variables or fields
        //fields should be private
        private int beginMileage;
        private int endMileage;
        private double pricePerGallon;
        private double gallons;

        //constructors are ways of constructing
        //the class, they set the initial values
        //a constructor always has the same name
        //as the the class and no return type
        //A class can have several "overloaded" constructors
        //only one is used per instance of the class
        //the user chooses which constructor he or she
        //wants to use by the signature (what parameters it takes)

        //this is a default constructor. It has no arguments
        //and sets all the properties to their minumum value;
        //If you write no constructor at all this is what you get
        //if you do write a constructor it is up to you to 
        //provide the initial values
        public Mileage()
        {
            PricePerGallon = 0;
            BeginMileage = 0;
            EndMileage = 0;
            Gallons = 0;
        }

        //this is an overloaded constructor that takes three
        //values. A user could choose to do this rather than
        //set the values using the properties
        public Mileage(int begin, int end, double gal)
        {
            BeginMileage = begin;
            EndMileage = end;
            Gallons = gal;
            PricePerGallon = 0;

        }

        //this constructor takes four values
        public Mileage(int begin, int end, double gal, double price)
        {
            BeginMileage = begin;
            EndMileage = end;
            Gallons = gal;
            PricePerGallon = price;
        }


        //public properties are ways 
        //to expose the fields in a 
        //controlled way
        //you can do some validation
        //and testing in a property
        public double PricePerGallon
        {
            get { return pricePerGallon; }
            set { pricePerGallon = value; }
        }
        

      
        public double Gallons
        {
            get { return gallons; }
            set { gallons = value; }
        }
      

      
        public int BeginMileage
        {
            get { return beginMileage; }
            set { beginMileage = value; }
        }

        public int EndMileage
        {
            get { return endMileage; }
            set { endMileage = value; }
        }

        //a class can contain both private (internal)
        //methods and public methods
        private int TotalMiles()
        {
            return EndMileage - BeginMileage;
        }

        //public method accessible from other
        //classes
        public double CalculateGasMileage()
        {
            int total = TotalMiles();
            double milesPerGallon = total / Gallons;
            return milesPerGallon;
        }

        //this is an overloaded method. It has the same
        //name but a different signature than the previous method
        //again it gives a user of the class another option
        //of how to use the class and call the method
        public double CalculateGasMileage(int bMiles, int eMiles, double gals)
        {
            BeginMileage = bMiles;
            EndMileage = eMiles;
            Gallons = gals;
            int total = TotalMiles();
            double milesPerGallon = total / Gallons;
            return milesPerGallon;


        }

        //this is "overriding" the ToString method
        //which every class inherits from Object
        //the parent of all classes in .NET
        //the combination of overloading and overwriting is 
        //what constitutes the object oriented principle of
        //polymorphism--the ability of a class
        //to behave differently in different environments
        public override string ToString()
        {
            double mpg = CalculateGasMileage();
            return "Your gas mileage is" + mpg.ToString("##.##");
        }


    }
}

Here is a picture of the application running


No comments:

Post a Comment