Zum Inhalt springen

C# Anfänger - Hilfe!


Empfohlene Beiträge

Geschrieben

Hey,

bin seit 01. September FIAE und habe in der Schule C# - habe leider bereits schon die ein oder anderen Probleme beim Versuch zu programmieren :(

Ich möchte gerne eine Konsolenanwendung schreiben, welche als erstes nach einer Kundenkarte fragt. Wenn ja, dann bekommt man auf die Endsumme 5% Rabatt. Wenn nein, dann bekommt man kein Rabatt und er rechnet die Zwischensummen normal zusammen und gibt einen Endbetrag aus.

Nach der Frage, sollte man so viel beliebige Zahlen wie möglich eingeben können, welche addiert werden, bis man eine bestimmt Ziffer eingibt.

Hier mal mein Anfang:


namespace ConsoleApplication2

{

    class Program

    {

        static void Main(string[] args)

        {


            Console.WriteLine("#######################");

            Console.WriteLine("## Kassenapplikation ##");        //Erstellen der Überschrift "Kassenapplikation"

            Console.WriteLine("#######################");

            Console.WriteLine();                                //Leere Zeile aus Übersichtszwecken



            Console.WriteLine("Besitzen Sie eine Kundenkarte? (ja/nein)"); 

            string eingabe = Console.ReadLine();                //Erstellen des Strings "Eingabe" & Zuweisen und Lesen der Benutzereingabe


            if (eingabe == "ja")                                //if-Bedingung mit entsorechenden Anweisungen


                Console.WriteLine("Bitte geben Sie den Betrag ein: ");





            else

                Console.WriteLine("Bitte geben Sie den Betrag ein: ");

                Console.ReadLine();

Wäre echt dankbar für eure Hilfe!

Grüße g1x

Geschrieben

Dass Du nicht hingehst und den Code zuende geschrieben hast :D

also wirklich! wie kannst du nur! =O

du solltest zwar überprüfen, ob "ja" eingegeben wurde, allerdings wäre es vielleicht besser, wenn du es in einer Variable zwischenspeicherst und nach der Eingabe der ganzen Daten zur Berechnung verwendest

so wiederholst du nicht den gleichen Code immer und immer wieder, das Programm wird übersichtlicher und lässt sich dadurch leichter lesen und bearbeiten (DRY - Don't Repeat Yourself!)

das eigentlich Problem, was du anscheinend hast, ist, dass du nicht weißt, was du machen musst

was in der Aufgabe genannt wurde, ist, dass man immer wieder einzelne Beträge eingeben können soll und das auch in beliebiger Anzahl

somit müsste dir sofort klar sein, dass dafür nur eine Schleife in Frage kommt (keine Zählschleife/for-Schleife und keine anderne Kontrollstrukturen, wie Fallunterscheidungen/if's oder switch's)

in jedem Schleifendurchlauf muss der Benutzer gebeten werden, einen Betrag einzugeben, der dann in einer Variablen gespeichert wird

sollte die ganz bestimmte Zahl eingegeben werden, die das Ende kennzeichnet, brichst du aus der Schleife aus

eigentlich solltest du alleine auf diese Lösung kommen, weshalb dir, auch wenn du eine richtige Frage formuliert hättest, vermutlich niemand geholfen hätte

den Code zu dem, was ich jetzt geschrieben habe, musst du aber alleine schreiben, da auch ich dir da nicht mehr helfen werde

immerhin musst du eine solche Übung später meistern können, ohne jemanden deswegen fragen zu müssen (allerdings dürftest du das Schreiben des Codes jetzt schaffen, da du die sprachlichen Elemente dafür größtenteils schon verwendet hast)

  • 2 Wochen später...
Geschrieben

Uiuiuiui *schiebt der Katze vorsichtig die Krallen wieder ein*

Gerade am Anfang ist es immer gut, wenn man das Problem in Ruhe durchdenkt und sich einen schriftlichen Ablaufplan (Grafik mit vielen Formen und Pfeilen/Strichen) erstellt. Hierbei gilt immer: Focus on function not form. Natürlich sind solche Darstellungen DINitisiert oder Schlimmeres, aber das lernst Du irgendwann später in Deiner Ausbildung.

Die entstehende Grafik trägt enorm zum Verständnis des Problems und zum Auffinden von etwailigen Denkfehlern bei... Frei nach dem Motto: Ein Bild sagt mehr als tausend Worte. Wenn man dann irgendwann mit dem Ergebnis zufrieden ist, geht es an die Umsetzung in eine Programmiersprache. Im Idealfall kennt man bereits deren Möglichkeiten und kann dadurch seinen Plan schnell umsetzen. Fast alle Sprachen unterstützen die bereits angesprochenen Schleifen und Kontrollstrukturen, so dass man hier eigentlich nur noch die Schreibweise in Erfahrung bringen muss.

Sacaldur hat ja bereits das Problem analysiert und auch erklärt, wie man es lösen würde. Nimm einfach mal die Vorgehensweise und setze die in einen Ablaufplan um. Diesen kannst Du ja mit evtl. auftretenden Verständnisproblemen hier posten und hoffen, dass die Katze ihn nicht gleich zerfetzt *rennt schnell weg und versteckt sich*

Geschrieben

oO man wir ja wohl Fragen dürfen...

Habe das Programm erweitert und das Ganze folgendermaßen gelöst - äußerst easy:



using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace ConsoleApplication3

{

    class Program

    {


        static void Main(string[] args)

        {

            double zwischensumme = 1;

            double endsumme = 0;

            double eingabe;


            Console.WriteLine("#####################");

            Console.WriteLine("##Kassenapplikation##");

            Console.WriteLine("#####################");

            Console.WriteLine("");


            Console.WriteLine("Besitzen Sie eine Kundenkarte? (1=ja/2=nein)");

            eingabe = Convert.ToDouble(Console.ReadLine());






            while (eingabe != 1 & eingabe != 2)

            {

                Console.WriteLine("Besitzen Sie eine Kundenkarte? (1=ja/2=nein)");

                eingabe = Convert.ToDouble(Console.ReadLine());

            }



            if (eingabe == 1)

            {

                endsumme = endsumme * 0.95;

            }



            while (zwischensumme != 0)

            {

                Console.WriteLine("Bitte geben Sie die entsprechende Summe ein: ");

                zwischensumme = Convert.ToDouble(Console.ReadLine());

                endsumme += zwischensumme;

            }



            Console.WriteLine("Ihre zu zahlende Gesamtsumme beträgt:" + endsumme);

            Console.WriteLine("Wie möchten Sie den Betrag bezahlen? Wählen Sie eine der folgenden Möglichkeiten aus:");

            Console.WriteLine("Barzahlung (1)");

            Console.WriteLine("EC-Karte (2)");

            Console.WriteLine("Kreditkarte (3)");

            double eingabe2 = Convert.ToDouble(Console.ReadLine());


            while (eingabe2 != 1 & eingabe2 != 2 & eingabe2 != 3)

            {


                Console.WriteLine("Bitte überprüfen Sie Ihre Eingabe nocheinmal!");

                eingabe2 = Convert.ToDouble(Console.ReadLine());

            }


            if (eingabe2 == 1)

            {

                Console.WriteLine("Sie wollen also Bar bezahlen? - Vielen Dank!");

            }


            if (eingabe2 == 2)

            {

                Console.WriteLine("Sie wollen also per EC-Karte zahlen? - Dankeschön!");

                Console.WriteLine("Bitte geben Sie den PIN-Code ein:");

                double pincodeec = Convert.ToDouble(Console.ReadLine());

                Console.WriteLine("Bitte geben Sie den PIN-Code ein zweites mal ein:");

                double pincodeec2 = Convert.ToDouble(Console.ReadLine());


                if (pincodeec == pincodeec2)

                {

                    Console.WriteLine("Transaktion war erfolgreich!");

                }

                else

                {

                    Console.WriteLine("Transaktion konnte nicht durchgeführt werden - Bitte überprüfen Sie Ihre Eingabe!");

                    Console.WriteLine("Bitte geben Sie den PIN-Code ein:");

                    pincodeec = Convert.ToDouble(Console.ReadLine());

                    Console.WriteLine("Bitte geben Sie den PIN-Code ein zweites mal ein:");

                    pincodeec2 = Convert.ToDouble(Console.ReadLine());


                    if (pincodeec == pincodeec2)

                    {

                        Console.WriteLine("Transaktion war erfolgreich!");

                    }


                    if (pincodeec != pincodeec2)

                    {

                        Console.WriteLine("Transaktion konnte erneut nicht durchgeführt werden! - Der Vorgang wurde abgebrochen!");

                    }

                }

            }


            if (eingabe2 == 3)

            {

                Console.WriteLine("Sie wollen also per Kreditkarte zahlen? - Danke!");

                Console.WriteLine("Bitte geben Sie den PIN-Code ein:");

                double pincodekredit = Convert.ToDouble(Console.ReadLine());

                Console.WriteLine("Bitte geben Sie den PIN-Code ein zweites mal ein:");

                double pincodekredit2 = Convert.ToDouble(Console.ReadLine());


                if (pincodekredit == pincodekredit2)

                {

                    Console.WriteLine("Transaktion war erfolgreich!");

                }

                else

                {

                    Console.WriteLine("Transaktion konnte nicht durchgeführt werden - Bitte überprüfen Sie Ihre Eingabe!");

                    Console.WriteLine("Bitte geben Sie den PIN-Code ein:");

                    pincodekredit = Convert.ToDouble(Console.ReadLine());

                    Console.WriteLine("Bitte geben Sie den PIN-Code ein zweites mal ein:");

                    pincodekredit2 = Convert.ToDouble(Console.ReadLine());


                    if (pincodekredit == pincodekredit2)

                    {

                        Console.WriteLine("Transaktion war erfolgreich!");

                    }


                    if (pincodekredit != pincodekredit2)

                    {

                        Console.WriteLine("Transaktion konnte erneut nicht durchgeführt werden! - Der Vorgang wurde abgebrochen!");

                    }

                }


                Console.ReadLine();


            }


        }

    }

}

Unter anderem hab ich heute meine Klassenarbeit zurückbekommen - und siehe da 1,2 :) - man muss sich nur mit der Thematik außeinandersetzen.

Geschrieben
Uiuiuiui *schiebt der Katze vorsichtig die Krallen wieder ein*

war das, was ich geschrieben habe, denn so schlimm? (es ist ja so lange her, dass ich das geschrieben habe... x) )

ich hätte mich vielleicht ein wenig mehr in die Zeit versetzen sollen, als ich mit dem Programmieren angefangen habe...

und eigentlich wollte ich eher aussagen, dass du das später, wenn du mehr Erfahrungen in Sachen Programmierung gesammelt hast, automatisch das von mir beschriebene machst

es ist also nicht so schlimm, dass du nicht sofort auf den Lösungsweg gekommen bist ;)

(und ich bitte um Entschuldigung für die doch ... ungünstige Formulierung)

el_pollo hat einen guten Ansatz gegeben:

für das, was du programmieren willst/sollst kannst du dir eine grafische Ansicht machen, damit du eine Übersicht hast, was dein Programm genau machen muss

da das völlig unabhängig von der Programmiersprache läuft, ist die Erstellung dieser Darstellung wesentlich einfacher

auch das Implementieren der Darstellung sollte dann sehr einfach sein ;)

falls du es noch nicht gemacht hast, kannst du eine solche Darstellung für den Code jetzt noch anfertigen

wie el_pollo schon geschrieben hat, gibt es bereits standardisierte Darstellungsformen, die ihr in der Berufsschule aber noch als Thema haben werdet

... und hoffen, dass die Katze ihn nicht gleich zerfetzt *rennt schnell weg und versteckt sich*

@el_pollo: du solltest dich schon ein wenig mehr in Acht nehmen, denn das ist ein Kater! ein _KATER_!

meintest du mit "DINisiert" sowas wie "von der DIN normiert" (oder allgemein "normiert")?

@g1x:

der Code den du geschrieben hast, sieht schon gut aus ;)

wird die Endsumme denn richtig berechnet, wenn eine Kundenkarte vorhanden ist?

die Variablennamen sind schon recht gut gewählt, da sie ihren Zweck erkennen lassen (wie endsumme oder eingabe)

allerdings meine ich behaupten zu können, dass Variablennamen mit einer Nummerierung (eingabe, eingabe2) sich auch durch andere Namen vermeiden lassen

in dem Fall scheint es, als wäre die 2. Variable nicht notwendig, da die 1. weiter verwendet werden könnte

allerdings sind das vorerst Feinheiten, die noch nicht so relevant sind

Geschrieben

@Sacaldur, den Kater: Generell fand ich Deinen Text nicht so schlimm, wollte aber einfach die Anspannung aus dem Thread entfernen und verhindern, dass ein Neuling schon vor Halloween Saures bekommt :-) Mit "DINisiert" habe ich den, zugegeben plumpen, Versuch unternommen kurz vor Jahresende noch schnell ein Buzzwort und/oder Unwort des Jahres zu generieren...

Geschrieben

@Sacaldur:

die Endsumme wird richtig berechnet (also es werden bei vorhandener Kundenkarte immer 5% Rabatt abgezogen und demnach auch ausgegeben). Die Variablennamen hätte ich sorgfältiger auswählen können, da man irgendwann den Überblick verliert :)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...