Entwickler-Ecke

C# - Die Sprache - C# Kalenderblatt


Smokee - Do 09.12.10 15:51
Titel: C# Kalenderblatt
Hallo,

ich bin Newbie in Sachen C# und soll nun ein Kalenderblatt programmieren welches nach Eingabe des Jahres und des Monats, ein Kalenderblatt für zum Beispiel März 2018 ausgibt. Ich bin auch schon ziemlich weit nur weis ich jetzt nicht weiter. Hier der Auszug aus dem Quellcode:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
short getWochentag(int uTag,int uMonat,int uJahr, int gt,int lt,int _ASSERT)
{
// ungült Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez
int[] arrMonatsOffset = new int[] {0143614625035};

int cbJahrhundertOffset = 0;
[b]
_ASSERT(uTag >) 0;
_ASSERT(uTag <) 31;
_ASSERT(uMonat >) 0;
_ASSERT(uMonat <) 12;
_ASSERT(uJahr >) 1600;[/b]

//"_ASSERT" wurde ja oben mit int deklariert, VS gibt mir aber den Fehler aus das //es eine Variable sei und wie eine Methode verwendet wird

// Wir können erst ab 1. März 1600 rechnen.
// Monat / Tag - Plausi prüfen:
[b]if ( uTag >) 31; || (uMonat >) 12) || (uMonat == 0)
    || (uTag == 0) || (uJahr <) 1600);
return -1;

if (uJahr == 1600) (uMonat <) 2);
return -1;

// Jahrhundertoffset berechnen:
if ( (uJahr < 1700)
|| ((uJahr == 1700) (uMonat <= 2)) )
{
// 01.03.1600 - 28.02.1700
cbJahrhundertOffset = 6;
}
else if ( (uJahr < 1800)
|| ((uJahr == 1800)  (uMonat <)) 2;
{
// 01.03.1700 - 28.02.1800
cbJahrhundertOffset = 4;
}
else if ( (uJahr < 1900)
|| ((uJahr == 1900) && (uMonat <= 2)) )
{
// 01.03.1800 - 28.02.1900
cbJahrhundertOffset = 2;
}
else if ( (uJahr < 2000)
|| ((uJahr == 2000) && (uMonat <= 2)) )
{
// 01.03.1900 - 29.02.2000
cbJahrhundertOffset = 0;
}
else if ( (uJahr < 2100)
|| ((uJahr == 2100) && (uMonat <= 2)) )
{
// 01.03.2000 - 28.02.2100
cbJahrhundertOffset = 6;
}
else if ( (uJahr < 2200)
|| ((uJahr == 2200) && (uMonat <= 2)) )
{
// 01.03.2100 - 28.02.2200
cbJahrhundertOffset = 4;
}
else if ( (uJahr < 2300)
|| ((uJahr == 2300) && (uMonat <= 2)) )
{
// 01.03.2200 - 28.02.2300
cbJahrhundertOffset = 2;
}
else if ( (uJahr < 2400)
|| ((uJahr == 2400) && (uMonat <= 2)) )
{
// 01.03.2400 - 29.02.2400
cbJahrhundertOffset = 0;
}
[/b]
UINT uLocalJahr = uJahr;



So wenn noch fragen sind oder wenn ich was vergessen habe. Entschuldigt bitte werde das dann schnellst möglich nachholen.

Mfg Smokee :wink:


traceurmicha - Do 09.12.10 16:10

Hallo Smokee und :welcome:,

Wo liegt denn dein Problem? Wenn du uns nicht sagst wo der Schuh drückt können wir dir auch nicht helfen.
Und, ist das ne Forms, ASP oder Consolen Anwendung?

Gruß Micha


c#surfer - Do 09.12.10 17:22

user profile iconSmokee hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,

ich bin Newbie in Sachen C# und soll nun ein Kalenderblatt programmieren welches nach Eingabe des Jahres und des Monats, ein Kalenderblatt für zum Beispiel März 2018 ausgibt. Ich bin auch schon ziemlich weit nur weis ich jetzt nicht weiter. Hier der Auszug aus dem Quellcode:

[cs]short getWochentag(int uTag,int uMonat,int uJahr, int gt,int lt,int _ASSERT)
{
// ungült Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez
int[] arrMonatsOffset = new int[] {0, 1, 4, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};

int cbJahrhundertOffset = 0;

_ASSERT(uTag &gt) 0;
_ASSERT(uTag &lt) 31;
_ASSERT(uMonat &gt) 0;
_ASSERT(uMonat &lt) 12;
_ASSERT(uJahr &gt) 1600;


//"_ASSERT" wurde ja oben mit int deklariert, VS gibt mir aber den Fehler aus das //es eine Variable sei und wie eine Methode verwendet wird

VS sagt genau wie es ist. _ASSERT ist eine integer Variable aber du verwendest es wie eine Methode. Was möchtest du denn mit der Zeile
_ASSERT(uTag &gt) 0;
erreichen?
Nebenbei: Schau dir mal die DateTime Klasse an.


Smokee - Do 09.12.10 17:34

Hallo,

Es soll eine Consolen Anwendung werden.

Die Fehler hab ich in den Quellcode mit reingeschrieben.

In Zeile 14 steht dieser beschrieben. Sry das ich es nicht schon eher dazu geschrieben habe ^^.


Mfg und einen schönen abend noch Smokee :wink:

Moderiert von user profile iconKha: Komplettzitat entfernt


Ralf Jansen - Do 09.12.10 17:57

Zitat:
Was möchtest du denn mit der Zeile
_ASSERT(uTag &gt) 0;
erreichen?


Du solltest diese Frage beantworten. Wir haben festgestellt das das Unsinn ist genauso wie der Compiler. Aber irgendwas wirst du dir ja dabei gedacht haben .... wenn denn der Code tatsächlich so von dir stammt. Es sieht eher nach schlecht geklaut aus C++ aus.

Edit : Von hier [http://www.techniker-forum.de/informatik-55/tageszaehler-in-c-prgrammieren-2727.html]? Dann solltest du vielleicht nochmal einen Schritt zurück machen und dir das in C# überlegen. Sonst müsstest du erst C verstehen um es dann richtig in C# übernehmen zu können.


Smokee - Do 09.12.10 18:01

user profile iconc#surfer hat folgendes geschrieben Zum zitierten Posting springen:
VS sagt genau wie es ist. _ASSERT ist eine integer Variable aber du verwendest es wie eine Methode. Was möchtest du denn mit der Zeile
_ASSERT(uTag &gt) 0;
erreichen?
Nebenbei: Schau dir mal die DateTime Klasse an.


Hi,

DataTime darf ich nicht verwenden. Wenn dann hätte ich es schon gemacht. Aber trotzdem danke für deine Hilfe.

Mfg Smokee

Moderiert von user profile iconKha: Komplettzitat entfernt


Trashkid2000 - Do 09.12.10 21:31

Hallo,

also ich kenne das Wort "Assert" von Unit-Tests. Dort ist es eine Klasse, die prüft, ob Zustände an einem Objekt wie erwartet entsprechen. Nehme die Asserts doch einfach mal aus dem Code raus, es wird doch nie verwendet.
Dass Du Code von einer anderen Seite nimmst ist ja nicht schlimm. Aber verstehen musst Du ihn!
Und dass Du dann hier Code postest, in dem ">" als "&gt;", "<" als "&lt;" und ein "&&" als "&amp;&amp;" drin stehen, das ist schon schlimm. Und auch peinlich für die Seite, von der Du den Code hast!

Hier mal die bereinigte Version (zum besseren Verständnis):

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
short getWochentag(int uTag, int uMonat, int uJahr, int gt, int lt, int _ASSERT)
{
  // ungült Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez
  int[] arrMonatsOffset = new int[] {0143614625035};

  int cbJahrhundertOffset = 0;
        
  //_ASSERT(uTag >) 0;
  //_ASSERT(uTag <) 31;
  //_ASSERT(uMonat >) 0;
  //_ASSERT(uMonat <) 12;
  //_ASSERT(uJahr >) 1600;[/b]

  // Wir können erst ab 1. März 1600 rechnen.
  // Monat / Tag - Plausi prüfen:
  if ( uTag > 31 || uMonat > 12 || uMonat == 0 || uTag == 0 || uJahr < 1600)
    return -1;

  if (uJahr == 1600 || uMonat < 2)
    return -1;

  // Jahrhundertoffset berechnen:
  if (uJahr < 1700 || uJahr == 1700 && uMonat <= 2)
  {
    // 01.03.1600 - 28.02.1700
    cbJahrhundertOffset = 6;
  }
  else if (uJahr < 1800 || uJahr == 1800 && uMonat <= 2)
  {
    // 01.03.1700 - 28.02.1800
    cbJahrhundertOffset = 4;
  }
  else if (uJahr < 1900 || uJahr == 1900 && uMonat <= 2)
  {
    // 01.03.1800 - 28.02.1900
    cbJahrhundertOffset = 2;
  }
  else if (uJahr < 2000 || uJahr == 2000 && uMonat <= 2)
  {
    // 01.03.1900 - 29.02.2000
    cbJahrhundertOffset = 0;
  }
  else if (uJahr < 2100 || uJahr == 2100 && uMonat <= 2)
  {
    // 01.03.2000 - 28.02.2100
    cbJahrhundertOffset = 6;
  }
  else if (uJahr < 2200 || uJahr == 2200 && uMonat <= 2)
  {
    // 01.03.2100 - 28.02.2200
    cbJahrhundertOffset = 4;
  }
  else if (uJahr < 2300 || uJahr == 2300 && uMonat <= 2)
  {
    // 01.03.2200 - 28.02.2300
    cbJahrhundertOffset = 2;
  }
  else if (uJahr < 2400 || uJahr == 2400 && uMonat <= 2)
  {
    // 01.03.2400 - 29.02.2400
    cbJahrhundertOffset = 0;
  }
  int uLocalJahr = uJahr;

  //...

//edit musste den Code nochmal nachbessern
Marko


Trashkid2000 - Fr 10.12.10 08:02

Hmm, wenn Du mal den Link ganz oben auf der Seite, von der Du den Code vermutlich hast, angeklickt hättest, dann wärst Du auf der Seite gelandet, von der der Code mal ganz ursprünglich kam. Und dort ist er erstens richtig formatiert, besser und vor allem auch viel kürzer geschrieben.
Der Link: http://www.a-m-i.de/tips/datetime/datetime.php

Marko