Frage von Julian110996, 26

C# Kalenderblatt Problem?

Hallo Community, ich habe ein kleines Problem. Wir müssen für die Schule einen Kalnder erstellen, der dir nach eingabe des Datums das dazugehörige Kalenderblatt anzeigt. Soweit so gut, den Wochentag errechnen klappt, die Tage des Monats errechnen auch, nur den Starttag des Monats wählen, klappt nicht. Er nimmt immer meinen Tag den ich eingegeben habe und zählt ab dem +1 hoch, bis halt zur maximalen Tage Anzahl des Monats. Gebe ich beispielsweise den 26.04.2016 eingebe kommt mit dem Julianischen Wochentag eine 2 raus, was für einen Dienstag steht und da fängt das Problem an: er fängt immer an dem eingegeben Tag an.

 for (int zähler = 1; zähler < 8; zähler++)
            {
                if (zähler == tag)
                    Console.ForegroundColor = ConsoleColor.Blue;
                else
                    Console.ForegroundColor = ConsoleColor.White;     //Wenn Tag nicht zwischen 0 und 6 ist, dann wird Tag weiß makiert

                if (zähler == (wochentag) || (wochentag == 0 && zähler == 7)) //wenn zähler ist gleich wochentag oder wochentag gleich 0 und zähler = 7 dann
                {
                    Console.Write(1 + "\t");

                    if (wochentag > 0 && wochentag < 7)  //wenn wochentag größer ist als 0 und wochentag kleiner ist als 7, dann wochentag + 1 rechnen
                        wochentag = wochentag + 1;
                    else
                        wochentag = 1;   //wenn nicht dann wochentag = 1

                    break;
                }
                else

                Console.Write("\t");
            }

            for (int i = 2; i <= tagemonat; i++)  // deklarieren Variable i mit dem Wert 2, solange i kleiner gleich tagemonat, dann i + 1
            {
                if (i == tag)  //wenn i gleich tag (das was einglesen wurde), dann blau makieren
                    Console.ForegroundColor = ConsoleColor.Blue;
                else
                    Console.ForegroundColor = ConsoleColor.White; //wenn nicht, dann weiß makieren


                if (wochentag == 1)  //wenn Wochentag gleich 1, dann n=Zeilenwechsel und r=Wagenrücklauf
                    Console.Write("\n\r");

                Console.Write(i + "\t");  // i und horizontalen tabulator ausgeben

                if (wochentag < 7) //wenn wochentag < 7, dann wochentag + 1
                    wochentag = wochentag + 1;
                else  //wenn nicht dann wochentag gleich 1
                    wochentag = 1;

Jetzt mal ein bisschen Code:

Antwort
von CrystalixXx, 7

In deinem geposteten Programmcode kann ich keinen Fehler entdecken. Bei mir funktioniert er, wenn ich die Variablendeklarationen hinzufüge.

Wie liest du denn das Datum ein? Vermutlich liegt da ein Fehler vor.

Kommentar von CrystalixXx ,

Ich habe mal eben selbst so ein Programm geschrieben. Du kannst es ja mit deinem Code vergleichen. Vielleicht findest du den Fehler. Es könnte an der Berechnung des Wochentags für den ersten Tag im Monat liegen (das hatte ich anfangs auch falsch). : )

using System.Globalization;

public static void ShowCalendar()
{
// Variablen deklarieren
string s = string.Empty;
DateTime d = DateTime.Now;
DateTimeFormatInfo calendarInfo = new DateTimeFormatInfo();

Console.WriteLine("Bitte ein Datum eingeben:");
s = Console.ReadLine();

// Eingabe parsen und bei Fehlschlag Methode beenden
if (!DateTime.TryParse(s, out d))
{
Console.WriteLine("Der eingegebene Wert ist kein gültiges Datum.");
return;
}

// Ersten Tag der Woche auf Montag festlegen (dadurch stellt "Montag" den Wert 1
// dar und Sonntag den Wert 7) und den Wochentag des ersten Tags im Monat ermitteln
calendarInfo.FirstDayOfWeek = DayOfWeek.Monday;
int weekDay = Convert.ToInt32(calendarInfo.Calendar.GetDayOfWeek(d.AddDays(1 - d.Day)));

// Erzeugt einen Einschub, damit der erste Tag an entsprechender Position steht
Console.Write(new string(' ', (weekDay - 1) * 4));

// Schleife von 1 bis Monatsende
for (int i = 1; i <= System.DateTime.DaysInMonth(d.Year, d.Month); i++)
{
// Tag ausgeben und auf 4 Zeichen links auffüllen
Console.ForegroundColor = (i == d.Day) ? ConsoleColor.Red : ConsoleColor.White;
Console.Write(i.ToString().PadLeft(4));

// Zeilenumbruch, wenn Wochenende erreicht
if ((i + weekDay - 1) % 7 == 0)
Console.Write(System.Environment.NewLine);
}
}

Keine passende Antwort gefunden?

Fragen Sie die Community