Laden...

Wie kann ich diesen WinForms Code verbessern?

Erstellt von Holyfuture vor 5 Jahren Letzter Beitrag vor 5 Jahren 4.119 Views
H
Holyfuture Themenstarter:in
3 Beiträge seit 2018
vor 5 Jahren
Wie kann ich diesen WinForms Code verbessern?

Hallo,

verzeiht, wenn ich hier im falschen Forum frage. Ich bin noch neu hier im Forum ^^

Aktuell beschäftige ich mich mit der Programmiersprache C# die mir auch viel Spaß macht. Als kleines Einstiegsprojekt habe ich mich für ein Programm entschieden, dass den Notendurchschnitt berechnet. Ich bin selber nicht zufrieden mit meinem geschriebenen Programmier-Code, aber ich weiß nicht wie ich ihn verbessern kann. Ich hatte an einer Alternativlösung mit arrays gedacht, um die variablen übersichtlicher zu halten, dennoch konnte ich mir nichts schlüssiges zusammenreimen. Ich hoffe ihr könnt mir helfen meinen Code zu verbessern. Tipps und Verbesserungsvorschläge sind also gerne gesehen =)

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 WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btn_calc_Click(object sender, EventArgs e)
        {
            string[] note = new string[6];
            string[] eingabe = new string[6] { note1.Text, note2.Text, note3.Text, note4.Text, note5.Text, note6.Text };
            int n;

            for (int i = 0; i < 6; i++)
            {
                note[i] = eingabe[i];

                if (i == 5)
                {
                    if (String.IsNullOrEmpty(note[i]))
                    {
                        MessageBox.Show("Bitte fülle alle Felder aus!");
                    }
                    else if(int.TryParse(note[i], out n))
                    {
                        double teilnehmer = 0, gesamtnote = 0, durchschnitt = 0;
                        int nr = 1;

                        for (int j = 0; j < 6; j++)
                        {                        
                            teilnehmer += Convert.ToInt32(note[j]);
                            gesamtnote += (nr++ * Convert.ToInt32(note[j]));
                        }

                        durchschnitt = gesamtnote / teilnehmer;

                        MessageBox.Show("Der Notendurchschnitt von " + Convert.ToString(teilnehmer) + " Schülern lautet " + Convert.ToString(String.Format("{0:0.00}", durchschnitt)));
                    }

                }

            }    

        }

        private void btn_close_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}


1.029 Beiträge seit 2010
vor 5 Jahren

Hi,

ich denke das würde viel besser aussehen, wenn du Logik von Ansicht trennen würdest und entsprechend DataBinding einsetzt.

Ist aufgrund fehlender Komplexität hier zwar nicht wirklich erforderlich - aber man sollte es zum Lernen definitiv gleich richtig machen.

Was du noch einbauen könntest wäre ein etwas dynamischeres Notensystem im Sinne von:
Es gibt nicht nur Noten von 1-6 - sondern von 1-x. Wenn du's richtig machst kannst du dir einige Code-Dopplungen sparen (Double.TryParse - sollte eigentlich aber sicher eher int.TryParse ?) und machst eine dynamische Oberfläche.

LG

M
368 Beiträge seit 2006
vor 5 Jahren

Und beim Anlegen und Bearbeiten der Form-Elemente kann man etwas eleganter vorgehen: https://stackoverflow.com/questions/10771048/how-to-define-an-array-of-textboxes-in-c

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

H
Holyfuture Themenstarter:in
3 Beiträge seit 2018
vor 5 Jahren

Ich habe den obrigen Code verbessert und im Startbeitrag editiert. Danke an Th69 für die Verlinkung des Guides. Komisch, dass ich darauf selber nicht gekommen bin, obwohl ich das im abgespeckten Umfang schon in C++ gemacht habe, mh. Beilegend kann ich folgenden Beitrag empfehlen, wenn man noch recht unsicher auf den Beinen ist -> https://stackoverflow.com/questions/10771048/how-to-define-an-array-of-textboxes-in-c - danke dafür an M.L!

@Taipi88
Danke für deinen Tipp. Weitere Noten dynamisch vom Benutzer hinzuzufügen betrachte ich jetzt als nicht wirklich sinnvoll, da es ja schließlich nur ein einfacher Durchschnittsberechner sein soll. Ich werde es allerdings zu Übungszwecken ausprobieren. Für einen besseren Code werde ich mich nun in WPF einarbeiten!

16.806 Beiträge seit 2008
vor 5 Jahren

Ich habe den obrigen Code verbessert und im Startbeitrag editiert.

Bitte nicht. So funktioniert ein Forum nicht.
Wenn Du den historischen Verlauf des Threads kaputt machst, werden die Beiträge sinnfrei.
Das sollte logisch sein.

Bitte poste Deinen korrigierten Code einfach in einen neuen Beitrag, den Du ja nun ohnehin geschrieben hast.
Danke.

H
Holyfuture Themenstarter:in
3 Beiträge seit 2018
vor 5 Jahren

Das war leider unüberlegt. Ich habe den alten Code verworfen und nirgendswo abgespeichert. Ich hatte gehofft, dass ich die Editierungs-Historie des Startbeitrags als Referenz nutzen könnte, doch scheint diese Steinalte WBB Version dies noch nicht zu unterstützen ~ sorry

Hinweis von MrSparkle vor 5 Jahren

Bitte keine Full Quotes. Und beachte bitte [Hinweis] Wie poste ich richtig?

M
368 Beiträge seit 2006
vor 5 Jahren

und nirgendswo abgespeichert.

Aus solchen Gründen könnte man ein Versionsverwaltungssystem verwenden, am Beispiel Python & Git: https://realpython.com/python-git-github-intro/

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉