I have created a basic form with 2 inputs and 1 output with 4 buttons that have the addition, subtracting, multiple and divide. I have a class (CRational) made where it does all the calculation and reducing for me. Now the issue is I have to use what is there and now have it perform some advance calculations. For example:

(a+bi) + (c+di) = (a+c) +(b+d)i for adding
(a+bi) - (c+di) = (a-c) +(b-d)i for subtracting
(a+bi) * (c+di) = (ac-bd) +(ad+bc)i for multiplying
(a+bi)/(c+di) = (ac+bd/c2 +d2)/(bc-ad/c2+d2)i for dividing

In this case i have to use fractions in replace of the letters.
(3/4 + 1/2i) * (1/4 -2i)
would return 19/16 - 11/8i

Now the one other thing is i have to use another class to make this work or that is what I've been told. Here is my code up to now:

Code:
namespace Rational
{
    class CRational
    {
        #region Fields

        private int fiNum;
        private int fiDenom;
        private bool fbValid;

        #endregion
        #region Constructors

        public CRational()
        {
            fiNum = 0;
            fiDenom = 1;
            fbValid = true;
        }
        public CRational(string strRat)
        {
            Parse(strRat);
        }

        #endregion
        #region Methods

        public override string ToString()
        {
            string strRat;
            if (!fbValid)
                strRat = "NaN";
            else
            {
                strRat = fiNum.ToString();
                if (fiDenom > 1)
                    strRat += "/" + fiDenom.ToString();
            }
            return strRat;
        }

        public void Parse(string strRat)
        {
            bool bSlash = false, bLegal = true, bNeg = false;
            string strNum = "0", strDenom = "0";
            if (strRat != "")
            {
                for (int i = 0; i < strRat.Length; i++)
                {
                    if (!char.IsDigit(strRat[i]))
                    {
                        if ((i == 0 && strRat[i] == '-'))
                            bNeg = true;
                        else if ((i > 0 && strRat[i] == '/' && !bSlash))
                            bSlash = true;
                        else
                            bLegal = false;
                    }
                    else
                    {
                        if (bSlash)
                            strDenom += strRat[i];
                        else
                            strNum += strRat[i];
                    }
                }
                if (bLegal)
                {
                    fiNum = int.Parse(strNum);
                    if (bNeg)
                        fiNum *= -1;
                    fiDenom = int.Parse(strDenom);
                    if (!bSlash)
                        fiDenom = 1;
                    if (fiDenom == 0)
                        fbValid = false;
                    else
                        fbValid = true;
                }
                else
                    fbValid = false;
            }
            else
                fbValid = false;
        }

        public void Reduce()
        {
            if (fbValid)    //Reduce only if valid CRational
            {
                if (fiNum == 0) //To avoid things like 0/8
                    fiDenom = 1;
                else
                {
                    if (fiDenom < 0)    //Handles the possibility of negative
                    {                   //fiDenom from / overload
                        fiNum *= -1;
                        fiDenom *= -1;
                    }
                    int iGCD = 1;
                    for (int i = 1; i <= fiDenom; i++)
                        if (fiNum % i == 0 && fiDenom % i == 0)
                            iGCD = i;   //GCD when loop is exited
                    fiNum = fiNum / iGCD;
                    fiDenom = fiDenom / iGCD;   //Reduced!
                }
            }
        }

        #endregion
        #region Overloaded Operators

        public static CRational operator +(CRational ratNum1, CRational ratNum2)
        {
            CRational ratSum = new CRational();

            if (ratNum1.fbValid && ratNum2.fbValid)
            {
                ratSum.fiNum = ratNum1.fiNum * ratNum2.fiDenom + ratNum2.fiNum * ratNum1.fiDenom;
                ratSum.fiDenom = ratNum1.fiDenom * ratNum2.fiDenom;
                ratSum.fbValid = true;
            }
            else
                ratSum.fbValid = false;
            return ratSum;
        }
        public static CRational operator -(CRational ratNum1, CRational ratNum2)
        {
            CRational ratDiff = new CRational();

            if (ratNum1.fbValid && ratNum2.fbValid)
            {
                ratDiff.fiNum = ratNum1.fiNum * ratNum2.fiDenom - ratNum2.fiNum * ratNum1.fiDenom;
                ratDiff.fiDenom = ratNum1.fiDenom * ratNum2.fiDenom;
                ratDiff.fbValid = true;
            }
            else
                ratDiff.fbValid = false;
            return ratDiff;
        }
        public static CRational operator *(CRational ratNum1, CRational ratNum2)
        {
            CRational ratProd = new CRational();

            if (ratNum1.fbValid && ratNum2.fbValid)
            {
                ratProd.fiNum = ratNum1.fiNum * ratNum2.fiNum;
                ratProd.fiDenom = ratNum1.fiDenom * ratNum2.fiDenom;
                ratProd.fbValid = true;
            }
            else
                ratProd.fbValid = false;
            return ratProd;
        }
        public static CRational operator /(CRational ratNum1, CRational ratNum2)
        {
            CRational ratQuot = new CRational();
            //Handles division by zero
            if (ratNum1.fbValid && ratNum2.fbValid && ratNum2.fiNum != 0)
            {
                ratQuot.fiNum = ratNum1.fiNum * ratNum2.fiDenom;
                ratQuot.fiDenom = ratNum1.fiDenom * ratNum2.fiNum;
                ratQuot.fbValid = true;
            }
            else
                ratQuot.fbValid = false;
            return ratQuot;
        }

        #endregion
    }
}
This is my simple form that i have also:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Rational
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {

        }
        
        private void btnSub_Click(object sender, EventArgs e)
        {
            
        }

        private void btnTime_Click(object sender, EventArgs e)
        {

        }

        private void btnDivd_Click(object sender, EventArgs e)
        {

        }      
    }
}
So any helpful this all made sense message me if you have questions