Laden...

Jahr Angabe - Hilfe für einen Beginner

Erstellt von specialist vor 2 Jahren Letzter Beitrag vor 2 Jahren 417 Views
S
specialist Themenstarter:in
2 Beiträge seit 2021
vor 2 Jahren
Jahr Angabe - Hilfe für einen Beginner

Hallo,
ich bin noch sehr unerfahren ein Beginner und bitte um Hilfe.
Ich habe eine Abfrage erstellt wo das Jahr und auch der aktuelle Monat in zahlen abgefragt werden.

Als Ausgabe bekomme ich nach den zwei Abfragen als Beispiel den folgenden Text " Wir haben April 2020.

  1. Nun möchte ich aber dass das Jahr auch als 2020 ausgegeben wird auch wenn der User nur 20 eintippt.
  2. Als zweites habe ich die folgende Ausgabe erstellt wenn der User nach der Monatsabfrage 13 eintippt "Den Monat gibt es gar nicht, bitte gib den Monat in Zahl richtig ein: "

Nur weiß ich den Schleifen Befehl nicht oder genauer gesagt weiß ich nicht wie ich den Befehl richtig ansetzen kann so das das Programm danach wieder von Anfang an beginnt.

Ich hoffe Ihr könnt mir helfen. Ich habe lange nach einer Lösung gesucht aber ich bin noch sehr neu und brauche hier Eure Hilfe. Das ist hier kein Test oder eine Hausaufgabe für die Schule. Ich will nur Erfahrung sammeln und brauche deshalb Eure Hilfe. Über ein paar Vorschläge wäre ich sehr dankbar.
Vielen Dank und viele Grüße.

Hier ist der Code:


namespace Switch_Monat
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Bitte gib diesen Monat in Zahl ein:  ");
            string eingabe = Console.ReadLine();
            Console.Write("Bitte gib das Jahr ein:    ");
            string eingabe2 = Console.ReadLine();

            int monat = Convert.ToInt32(eingabe);
            int jahr = Convert.ToInt32(eingabe2); 
            
            
            Console.WriteLine();
            switch (monat)
            {
                case 1:
                    Console.Write("Wir haben Januar "); Console.WriteLine(jahr);
                break;

                case 2:
                    Console.Write("Wir haben Februar "); Console.WriteLine(jahr);
                break;

                case 3:
                    Console.Write("Wir haben März "); Console.WriteLine(jahr);
                break;

                case 4:
                    Console.Write("Wir haben April "); Console.WriteLine(jahr);
                break;

                case 5:
                    Console.Write("Wir haben Mai "); Console.WriteLine(jahr);
                break;

                case 6:
                    Console.Write("Wir haben Juni "); Console.WriteLine(jahr);
                break;

                case 7:
                    Console.Write("Wir haben Juli "); Console.WriteLine(jahr);
                break;

                case 8:
                    Console.Write("Wir haben August "); Console.WriteLine(jahr);
                break;

                case 9:
                    Console.Write("Wir haben September "); Console.WriteLine(jahr);
                break;

                case 10:
                    Console.Write("Wir haben Oktober "); Console.WriteLine(jahr);
                break;

                case 11:
                    Console.Write("Wir haben November "); Console.WriteLine(jahr);
                break;

                case 12:
                    Console.Write("Wir haben Dezember "); Console.WriteLine(jahr);
                break;

                default:
                    Console.Write("Den Monat gibt es gar nicht, bitte gib den Monat in Zahl richtig ein: ");
                break;
                    
            }
            Console.ReadKey();
        } 
    }
}

Hinweis von gfoidl vor 2 Jahren

Bitte die entsprechenden Code-Tags verwenden.
Siehe Wie poste ich richtig? Punkt 6.

6.911 Beiträge seit 2009
vor 2 Jahren

Hallo specialist,

schau mal:


using System;

#nullable enable

while (true)
{
    Console.Write("Bitte gib diesen Monat in Zahl ein: ");
    string? monthInput = Console.ReadLine();

    if (!int.TryParse(monthInput, out int month) || (month < 1 || month > 12))
    {
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("Ungültiger Wert für einen Monat eingegeben. Erlaubt sind Zahlen 1 bis 12.");
        Console.ResetColor();
        continue;   // Schleife wieder von vorne beginnen
    }

    Console.Write("Bitte gib das Jahr ein: ");
    string? yearInput = Console.ReadLine();

    if (!int.TryParse(yearInput, out int year))
    {
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine(@"Ungültiger Wert für ein Jahr eingegeben. Erlaubt sind Zahlenwerte, wobei eine zwei Ziffern Eingabe
wie folgt behandelt wird:
jj <  50 -> 20jj
jj >= 50 -> 19jj");
        Console.ResetColor();
        continue;   // Schleife wieder von vorne beginnen
    }

    year += year switch
    {
        < 50 => 2000,
        >= 50 and < 100 => 1900,
        _ => 0
    };

    DateTime dateTime = new DateTime(year, month, 1);

    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine($"Wir haben {dateTime:MMMM yyyy}");
    Console.ResetColor();
}

Davon ausgehend kannst du es beliebit erweitern bzw. das dir Unbekannte nachlesen (in der Doku). Wenn du dann irgendwo hängst, so frag einfach nach.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

T
2.219 Beiträge seit 2008
vor 2 Jahren

Für das jahr Problem kannst du ja einfach prüfen ob das Jahr kleiner als 1000 ist.
Wenn ja, dann kannst du einfach + 2000 drauf rechnen und hast das entsprechende Jahr.
Z.b. bei 20 würde er dann automatisch 2020 berechnen.

Dein Schleifen Problem würde ich mit der do while Schleife lösen.
Da du das Jahr erst nach dem ersten Durchlauf prüfen kannst.

Dies würde dann grob so aussehen.


int monat = 0;
int jahr = 0;

do
{
    Console.Write("Bitte gib diesen Monat in Zahl ein:  ");
    string eingabe = Console.ReadLine();
    Console.Write("Bitte gib das Jahr ein:    ");
    string eingabe2 = Console.ReadLine();

    monat = Convert.ToInt32(eingabe);
    jahr = Convert.ToInt32(eingabe2);
    ...
} while(monat < 1 || monat > 12)


T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

6.911 Beiträge seit 2009
vor 2 Jahren

Hallo T-Virus,

Für das jahr Problem kannst du ja einfach prüfen ob das Jahr kleiner als 1000 ist.
Wenn ja, dann kannst du einfach + 2000 drauf rechnen und hast das entsprechende Jahr.

Kommt darauf an welches Regelwark gelten soll. Ist 50 2050 od. 1950? Je nachdem sollte ein präzisere Unterscheidung (siehe oben) durchgeführt werden.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

463 Beiträge seit 2009
vor 2 Jahren

Man kann sich auch im Jahr 2021 den Y2K-Bug wieder einbauen... Muss man nicht verstehen - geht aber 🙂
Warum nicht aus Fehlern lernen? Mit nur 2 Zahlen ist es nun mal nicht möglich die genau Jahreszahl zu erraten/bekommen...

S
specialist Themenstarter:in
2 Beiträge seit 2021
vor 2 Jahren

Dies war mein erster Post, schon wurde mir geantwortet und das am Feiertag.
Vielen vielen Dank und schöne Feiertage.

Viele Grüße

specialist ( irgendwann hoffentlich 😁 )

T
50 Beiträge seit 2014
vor 2 Jahren

und als Zusatz kannste die case/switch bissl entschlanken:

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Monatszahl)

190 Beiträge seit 2012
vor 2 Jahren

Was spricht gegen diese Variante?:


            string date = "21";
            DateTimeOffset dateTime;
            var r = DateTimeOffset.TryParseExact(date,new string[] { "yy", "yyyy" }, new CultureInfo("de-DE"), DateTimeStyles.AllowWhiteSpaces,out dateTime);

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

6.911 Beiträge seit 2009
vor 2 Jahren

Hallo Wilfried,

ist eine schöne Lösung!
Nur wenn in die Zukunft (z.B. 2030) gegangen werden soll, so klappt das nicht, da 1930 herauskommen würde.

Daher sollte der Hinweis von Stefan.Haegele unbedingt berücksichtigt werden.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

190 Beiträge seit 2012
vor 2 Jahren

Welches Jahrhundert richtig ist, kann nur der Entwickler oder sogar nur der Nutzer entscheiden. Wenn es das Geburtsjahr ist oder der Zeitraum fest steht, dann kann es der Entwickler entscheiden. Ansonsten kann man dem Nutzer eine Auswahl anbieten oder er muss 4 Stellen eingeben.
Und mit DateTimeOffset kann man ja gut rechnen. 😉

  • Wer lesen kann, ist klar im Vorteil
  • Meistens sitzt der Fehler vorm Monitor
  • "Geht nicht" ist keine Fehlermeldung!
  • "Ich kann programmieren" != "Ich habe den Code bei Google gefunden"

GidF

3.825 Beiträge seit 2006
vor 2 Jahren

Das erinnert mich an eine Frage an eine Software Firma nach einem Vortrag im Jahr 1990 :

"Wir schreiben Software für Krankenhäuser und da haben wir ab und zu Patienten mit Geburtstag vor dem 1.1.1900. Das kann man nicht eingeben !"

Antwort : "Das Problem löst sich mit der Zeit von alleine !"

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3