Mein erster Taschenrechner in c#

04/18/2013 20:33 IchkenneDICH#1
Hi Leute ich hab da ne Frage :D
Undzwar hab ich vor kurzem meinen ersten taschenrechner programmiert und
1. Was haltet ihr von dem Code ?
2. In dem folgenden Code hab ich eine try catch Anweisung benutzt die einmal komplett checkt , aber ich möchte für jede Rechenart einzeln kontrollieren.
Hier ein Screen von der Form falls jemand wissen will wie´s aussieht:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication10
{
    public partial class Mein_erster_Taschenrechner : Form
    {
        public Mein_erster_Taschenrechner()
        {
            InitializeComponent();
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Eingabefeld2.Text = string.Empty;//<-Entweder so 
            Ergebnisfeld.Text = "";//<-oder so
            Eingabefeld1.Text = "";
            Addition.Checked = false;
            Subtraktion.Checked = false;
            Multiplikation.Checked = false;
            Division.Checked = false;
        }

        private void button9_Click(object sender, EventArgs e)
        {
            if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 0;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 0;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {

            if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 1;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 1;
            }
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
            }
            catch (Exception)
            {
                throw;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
           [B]try
            {
                double zahl1 = Convert.ToDouble(Eingabefeld1.Text);
                double zahl2 = Convert.ToDouble(Eingabefeld2.Text);
                if (Addition.Checked == true)
                {
                    double ergebnis = zahl1 + zahl2;
                    Ergebnisfeld.Text = Convert.ToString(ergebnis);
                }
                else if (Subtraktion.Checked == true)
                {
                    double ergebnis = zahl1 - zahl2;
                    Ergebnisfeld.Text = Convert.ToString(ergebnis);
                }
                else if (Multiplikation.Checked == true)
                {
                    double ergebnis = zahl1 * zahl2;
                    Ergebnisfeld.Text = Convert.ToString(ergebnis);
                }
                else if (Division.Checked == true)
                {
                    double ergebnis = zahl1 / zahl2;
                    Ergebnisfeld.Text = Convert.ToString(ergebnis);
                }
            }
            catch
            {
                Ergebnisfeld.Text = "Ungültig";
            }[/B]
        }

        private void button4_Click(object sender, EventArgs e)
        {
            if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 2;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 2;
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 3;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 3;
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 4;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 4;
            }
        }

        private void button8_Click(object sender, EventArgs e)
        {
            if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 5;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 5;
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 6;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 6;
            }
        }

        private void button12_Click(object sender, EventArgs e)
        {
            if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 7;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 7;
            }
        }

        private void button11_Click(object sender, EventArgs e)
        {
            if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 8;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 8;
            }
        }

        private void button10_Click(object sender, EventArgs e)
        {
            if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 9;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 9;
            }
        }

        private void Division_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void Subtraktion_CheckedChanged(object sender, EventArgs e)
        {

        }


    }
}
04/18/2013 20:43 Schlüsselbein#2
Benutz einfach Double.TryParse und check den Rückgabewert.
Ausserdem ist '== true' redundant.

Was mir noch auffällt: Benutz für die Buttons 0-9 besser nur einen Eventhandler und check das aufrufende Objekt.
04/18/2013 20:45 IchkenneDICH#3
Ja das mit == true , dass man das auch ohne das machen kann hab ich erst später dazugelernt und dachte mir ist ja jetzt auch egal :D
Aber man sieht dass ich dort auch schon ohne das ==true und ==false was gemacht hab :P
Achja und das mit dem Try catch kann ich mir nicht aussuchen das muss ich so machen :D Ich bin momentan im Praktikum und hab vorgestern mit c# angefangen.
Ich soll try und catch für jede Rechenart einzeln nochma machen , aber irgendwie klappt das nicht so ganz. Ein Beispiel wäre hilfreich
04/18/2013 20:50 Twist'#4
PHP Code:
   Ergebnisfeld.Text "Ungültig"
Du kannst auch
PHP Code:
MessageBox.Show("DEIN TEXT"); 
benutzen das sieht ein stück besser aus wenn man versehentlich einen Buchstaben eingibt ;)

P.s bin auch noch neu in C#
04/18/2013 20:50 P3enguin#5
Hey ichkenneDich,

grundsätzlich ist dein Code ganz Okay.

Worauf du meines Erachtens nach schauen solltest wäre
1.) Die Variablen benennung würde ich nochmal überdenken ist in so kleinen sachen nicht so schlimm aber z.b. eine Double var mit dem namen DouZahl1 oder DouZahl2 bennenen

2.) C# ist nicht umsonst objektorientiert du hättest eine Funktion schrieben können der du Die Paramter beim Buttonclick mitgeben hättest können dann hättest dur dir das sparen können

Code:
if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
            {
                Eingabefeld1.Text += 5;
            }
            else if (Addition.Checked || Subtraktion.Checked || Multiplikation.Checked || Division.Checked)
            {
                Eingabefeld2.Text += 5;
            }
bzw. nur einmal schreiben müssen ;)

sonst immer weiter machen das kommt mit der zeit ;)
04/18/2013 20:59 Schlüsselbein#6
Quote:
1.) Die Variablen benennung würde ich nochmal überdenken ist in so kleinen sachen nicht so schlimm aber z.b. eine Double var mit dem namen DouZahl1 oder DouZahl2 bennenen
Die Variablennamen würde ich auch nochmal überdenken, allerdings nicht so. Variablen beginnen (unter C#) klein.

Quote:
2.) C# ist nicht umsonst objektorientiert du hättest eine Funktion schrieben können der du Die Paramter beim Buttonclick mitgeben hättest können dann hättest dur dir das sparen können
Man benötigt keine OOP für Funktionen.
Wie schonmal angesprochen, kann der TS ja über die Parameter des Handlers herausbekommen, welcher Button gedrückt wurde.




Gruß
04/18/2013 21:12 snow#7
Das hier:
Code:
if (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked)
kannst du auch durch eine eigene Funktion ersetzen:

Code:
private bool firstBox() {

 return (!Addition.Checked && !Subtraktion.Checked && !Multiplikation.Checked && !Division.Checked);
}
und dann mit if (firstBox()) aufrufen. Für die 2. Abfrage ebenso eine Funktion schreiben.
Finde ich persönlich viel angenehmer, als die ganze Zeit solche riesigen Abfragen zu erstellen.

Code:
else if (Division.Checked == true) {
                double ergebnis = zahl1 / zahl2;
          }
Was machst du, wenn zahl2 == 0 ist?
04/18/2013 21:22 IchkenneDICH#8
Quote:
Was machst du, wenn zahl2 == 0 ist?
Bisher bin ich zufrieden wie der Taschenrechner es ohnehin schon macht. Er gibt als Ergebnis "+unendlich" aus. Sofern er nicht abschmiert war mir das erstmal egal und hab deswegen auch nix gegen gemacht. :D
Aber ich weiß , dass man eine DivideByZero Ausnahme einfügen kann.
Das nehm ich mir mal für später vor
04/18/2013 21:32 Schlüsselbein#9
Quote:
Er gibt als Ergebnis "+unendlich" aus.
Was falsch ist :D
Quote:
Aber ich weiß , dass man eine DivideByZero Ausnahme einfügen kann.
Das nehm ich mir mal für später vor
Ist ja sowieso nur ne Sache von paar Minuten.

Jedenfalls lässt sich das Programm für n Anfänger schon sehen, also immer weiter so. Leg deinem Vorgesetzten trotzdem mal eine 2. Version mit Double.TryParse usw. vor. Eigeninitiative kommt immer gut!
04/18/2013 22:44 dready#10
Wurd ja schon das meiste zu gesagt.
Da das mit der Variablenbennenung schon angesprochen wurde.

[Only registered and activated users can see links. Click Here To Register...]

Hier nochmal ausführlich :)
Lerns am anfang und du sparst dir ne Menge graue Haare wenn du es dann tatsächlich so machen musst.

Ansonsten kann ich mich dem Rest nur anschliessen, kann sich sehen lassen und ist erfrischend mal jemanden hier zu sehen der versucht das ganze strukturiert von Grundauf zu lernen ;D
04/19/2013 12:25 IchkenneDICH#11
€: Kann geclosed werden , Hab mein Feedback erhalten