Autor Beitrag
master147
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: So 04.03.12 13:06 
Hallo,

ich möchte in c# ein Problem zur Feiertagsberechnung schreiben. Dazu habe ich eine Klasse Feiertag zu Übungszwecken aus dem Internet genommen. Jetzt kommt bei Aufruf aber der Fehler, dass ein Objektverweis erforderlich ist. Leider weiß ich nicht wo der Fehler sitzt.
Hier die Klasse:
ausblenden volle Höhe 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:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Feiertagsberechnung1
{
    class Feitertag
    {
        /// <summary>
        /// Teste das übergeben Datum auf einen Feiertag
        /// </summary>
        /// <param name="DateTime">Das Datum, daß auf einen Beweglichen Feiertag geprüft werden soll</param>
        /// <returns>Wenn das übergebene Datum auf einen Feriertag fällt dan wird dieser Feiertag zurückgegeben</returns>
        public string GetFeiertag(DateTime myDatum)
        {
            string feierTag = "";

            // Datum zerlegen und für den Test eines FEsten Feiertages zusammenbauen
            String testDate = (myDatum.Day.ToString() + "/" + myDatum.Month.ToString());

            switch (testDate)
            {
                case "1/1":
                    feierTag = "Neujahr";
                    break;
                case "1/5":
                    feierTag = "Tag der Arbeit";
                    break;
                case "15/8":
                    feierTag = "Mariae Himmelfahrt";
                    break;
                case "3/10":
                    feierTag = "Tag der dt. Einheit";
                    break;
                case "1/11":
                    feierTag = "Allerheiligen";
                    break;
                case "25/12":
                    feierTag = "1. Weihnachtstag";
                    break;
                case "26/12":
                    feierTag = "2. Weihnachtstag";
                    break;
                default:
                    feierTag = GetMovFeierTag(myDatum);
                    break;
            }

            return feierTag;
        }

        /// <summary>
        /// Teste das übergeben Datum auf einen Beweglichen Feiertag
        /// </summary>
        /// <param name="DateTime">Das Datum, daß auf einen Beweglichen Feiertag geprüft werden soll</param>
        /// <returns>Der bewegliche Feiertag oder halt nichts</returns>
        private String GetMovFeierTag(DateTime myDatum)
        {
            int Jahr = myDatum.Year;
            DateTime Ostersonntag = GetOstersonntag(Jahr);

            if (myDatum == Ostersonntag.AddDays(0))
            {
                return "OsterSonntag";
            }
            if (myDatum == Ostersonntag.AddDays(-2))
            {
                return "Karfreitag";
            }
            if (myDatum == Ostersonntag.AddDays(1))
            {
                return "Ostermontag";
            }
            if (myDatum == Ostersonntag.AddDays(39))
            {
                return "Christi Himmelfahrt";
            }
            if (myDatum == Ostersonntag.AddDays(49))
            {
                return "Pfingstsonntag";
            }
            if (myDatum == Ostersonntag.AddDays(50))
            {
                return "Pfingstmontag";
            }
            if (myDatum == Ostersonntag.AddDays(60))
            {
                return "Fronleichnam";
            }

            return "";
        }

        /// <summary>
        /// Errechnet das Datum des Ostersonntags aus dem übergebenen Jahr
        /// </summary>
        /// <param name="int">Das Jahr in YYYY Schreibweise</param>
        /// <returns>Das Datum des Ostersonntags in dem Übergebe Jahr</returns>
        private DateTime GetOstersonntag(int jahr)
        {
            DateTime OsterSonntag;

            int c;
            int i;
            int j;
            int k;
            int l;
            int n;
            int OsterTag;
            int OsterMonat;

            c = jahr / 100;
            n = jahr - 19 * ((int)(jahr / 19));
            k = (c - 17) / 25;
            i = c - c / 4 - ((int)(c - k) / 3) + 19 * n + 15;
            i = i - 30 * ((int)(i / 30));
            i = i - (i / 28) * ((int)(1 - (i / 28)) * ((int)(29 / (i + 1))) * ((int)(21 - n) / 11));
            j = jahr + ((int)jahr / 4) + i + 2 - c + ((int)c / 4);
            j = j - 7 * ((int)(j / 7));
            l = i - j;

            OsterMonat = 3 + ((int)(l + 40) / 44);
            OsterTag = l + 28 - 31 * ((int)OsterMonat / 4);

            return Convert.ToDateTime(OsterTag.ToString() + "." + OsterMonat + "." + jahr);
        }
    }
}


und hier mein Aufruf wenn ich auf den Button klicke:
ausblenden 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:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Feiertagsberechnung1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            DateTime myDate = new DateTime(2003126);
            textbox1.text = Feiertagsberechnung1.Feitertag.GetFeiertag(myDate);
        }
    }
}


Ich hoffe, dass ihr mir helfen könnt.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 04.03.12 14:59 
:welcome: in der EE!

Da hat sich der Autor der Klasse beim Klassendesign wohl nicht viel Mühe gegeben - markiere alle Methoden darin als static, dann kannst du sie genau wie gewünscht aufrufen. Und lies dann noch einmal nach, warum es so funktioniert ;) .

_________________
>λ=
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 04.03.12 19:15 
master147 hat folgendes geschrieben:

ausblenden C#-Quelltext
1:
class Feitertag					


;-)