Autor Beitrag
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Mi 13.01.16 21:43 
Hallo ihr Experten. Ich habe schon wieder mal eine Frage.
Mein Problem: wie ihr vielleicht wisst, bin ich gerade dabei eine Finanzverwaltungssoftware für mich selbst zu schreiben. Bei mir ist es so, dass mir meine Eltern jeden Monat einen bestimmten Betrag (Taschengeld) auf mein Konto überweisen. Dies erledigt der Server der Bank. Ich möchte nun in meinem Programm einstellen können, dass jeden Monat (Woche/Tag) ein bestimmter Betrag hinzugefügt wird.

Meine Idee: Bei jedem schließen der Anwendung, dass derzeitige Datum speichern und beim Start das aktuelle Datum mit dem gespeicherten Wert subtrahieren. So bekomme ich eine Zeitspanne (TimeSpan). Aber wenn ich jetzt z.B. eingestellt habe, dass jeden Monat 20€ gutgeschrieben werden und ich nun 2 Monate nicht online war, die Anwendung dann diesen Betrag nachbucht.

Leider kenne ich mich mit der TimeSpan- Klasse überhaupt nicht aus und hoffe deswegen auf eure Hilfe. Ich hoffe ihr versteht mein Problem :)
Mfg :D

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 13.01.16 21:52 
Möglichkeiten

a.) Windows hat einen Taskplaner. Müßtest deinem Programm nur eine Kommandozeilen Schnittstelle mitgeben so das man damit eine Gutschrift absetzen kann. EInfach den Taskplaner dann deine Software starten lassen um die Gutschrift durchzuführen.
b.) Diese Regel )(Betrag, von wann bis wann, zu welchem Zeitpunkt) und nicht die Gutschrift ablegen. Die eigentlichen Buchungen kannst du ja dann immer schnell ausrechnen und zur Ansicht hinzufügen. Dann müß man nie zum richtigen Zeitpunkt reagieren.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Mi 13.01.16 22:12 
Ich wäre für Variante B. Man muss ja nur analysieren, wie viel Buchungen man durchführen muss. Je nach dem kann das Programm die Buchungen hinzufügen.

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 17.01.16 14:00 
Hallo. Ich werde die Funktion dann einfach weglassen, wenn es zu schwer ist. Hab auch auf Google nichts gefunden :(

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 17.01.16 18:07 
Zitat:
Hallo. Ich werde die Funktion dann einfach weglassen, wenn es zu schwer ist.


Was heißt zu schwer? Was hast du denn versucht? Wenn dir der Plan mit den Regeln gefällt hast du es den versucht das zu programmieren?
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: So 17.01.16 21:14 
Naja ich hatte folgende Idee: Wenn man das Programm schließt, wird das aktuelle Datum (mit Uhrzeit) in eine XML- Datei gespeichert. Beim nächsten Programmstart wird das aktuelle Datum mit dem gespeicherten Datum subtrahiert. Dann bekommt man als Wert eine TimeSpan.
Bis dahin funktioniert es ja, aber nun muss ich diese TimeSpan noch auswerten. Also angenommen ich habe eingestellt - alle 2 Wochen 10 Euronen. Ich starte nun nach 4 Wochen das Programm, dann müssen 20 Euronen gutgeschrieben werden. Aber dieses Auswerten der TimeSpan finde ich schwer.

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 17.01.16 21:36 
Du solltest diese Regel unabhängig davon gestalten wann du das Programm mal gestartet hattest und wann nicht. Der Gedanke den Zeitpunkt des letzten Startens/Schließens da zu verwursten ist nicht hilfreich.

Ein Regelsatz wäre zum Beispiel :
von-bis (z.B. 01.01.2015-31.12.2017)
Rhythmus (alle 14 Tage Montags, hier kannst du dir auch was anderes für dich passendes überlegen)
Betrag (5€)

In einer solchen Regel taucht nirgendwo die letzte Startzeit auf. Man berechnet einfach alle Buchungen zwischen dem genannten "von" bis zum genanten "bis" oder wenn "bis" in der Zukunft liegt oder nicht explizit gesetzt dann eben bis "jetzt". und fügt die denn fixen Buchungen hinzu die die du irgendwo abgelegt hast.

Es gibt sicher viele Wege aus einer solchen Regel die konkreten Zeitpunkte auszurechnen.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Mo 18.01.16 17:14 
Hallo Ralf. Mir gefällt diese Idee, jedoch hätte ich nicht gedacht, dass diese Klasse automatisch in einer bestimmten Zeitspanne Anweisungen ausführt.
Wie sieht der Code dafür aus. Ich habe absolut noch nie mit der TimeSpan Klasse gearbeitet.

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 18.01.16 17:35 
Zitat:
Hallo Ralf. Mir gefällt diese Idee, jedoch hätte ich nicht gedacht, dass diese Klasse automatisch in einer bestimmten Zeitspanne Anweisungen ausführt.
Wie sieht der Code dafür aus. Ich habe absolut noch nie mit der TimeSpan Klasse gearbeitet.


Wieso sollte sie automatisch was ausführen? Die Klasse ist eine Regel aus der du Datensätze berechnest an diesen Datensätzen hängt dann ein Zeitpunkt. Wie man den Zeitpunkt berechnet hängt davon ab wie genau man die festlegt (wie man die Regel designt) ob man Timespan dafür braucht ist da völlig offen und nur ein klitzkleines Detail. Insofern kann ich keinen Code dafür liefern.

Versuch doch erstmal eine Klasse zu definieren die diese Regel beschreibt. Und dann eine Methode die aus der Regel die Zeitpunkte berechnet. Wenn du die hast dann kann man sich diese Methode ansehen und überlegen ob man da einen Timespan braucht oder es anders (besser) geht.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Sa 23.01.16 21:30 
Sorry user profile iconRalf Jansen,
aber ich weiß absolut überhaupt nicht, wie ich an diese Sache rangehen soll.
Könnten Sie mir vielleich irgendwelche Codeausschnitte zeigen, die irgendeine Zeitspanne berechnen?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 23.01.16 23:10 
Zitat:
Könnten Sie mir vielleich irgendwelche Codeausschnitte zeigen, die irgendeine Zeitspanne berechnen?

Verstehe nicht wobei dir das helfen soll aber wenn du meinst.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
static void Main(string[] args)
{
    DateTime today = DateTime.Today;
    DateTime christmas = new DateTime(today.Year, 1224);

    TimeSpan timespan = christmas - today;

    Console.WriteLine(string.Format("{0} days until christmas.", timespan.Days));
    Console.ReadLine();
}
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Fr 29.01.16 23:38 
Vielen Dank. Jetzt bekomme ich ja die Tage der Zeitspanne. Wie werte ich diese aus? Also wenn es 13 Tage zum Beispiel sind und alle 2 Wochen ein Betrag x eingezahlt werden soll, wüssen in diesem Fall hier 2x hinzugefügt werden. Wie mache ich sowas?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 30.01.16 13:49 
Zitat:
Also wenn es 13 Tage zum Beispiel sind und alle 2 Wochen ein Betrag x eingezahlt werden soll, wüssen in diesem Fall hier 2x hinzugefügt werden.


Die Regel "alle 2 Wochen Betrag x" ist unvollständig du brauchst schon ein Ausgangsdatum. Und von einem Datum +14 zu rechnen und zu schauen ob das Ergebnis im zu prüfenden Zeitraum liegt oder nicht un dann weiter zu rechnen oder abzubrechen sollte einfach sein? Ich tu mich da gerade schwer dir zu helfen. Das kommt mir so einfach vor (oder ich habe immer noch nicht verstanden woran du hängst) das Hilfe bedeuten würde ich mach es für dich. So sollte es ja ja eigentlich nicht laufen oder ;)

Ich probiers mal theoretisch.
- Für deine Verwaltungssoftware hast du irgendeinen Startpunkt (ein Datum genannt START) und ein Zieldatum (nehmen wir an das wäre das jeweilige Heute genannt ENDE) und einen Startbetrag. Das wäre der Zeitraum für den du rausfinden willst ob es da irgendwelche Vorgänge gab.
- Einen Menge von Vorgängen willst du durch die Regel "alle 2 Wochen ein Betrag X ab Datum D" beschreiben.

Das grobe Vorgehen wäre also ungefähr ... schaue nach ob D zwischen START und ENDE liegt, wenn ja erstelle einen Vorgang und verschiebe das Datum entsprechende den beschriebenen Regeln (hier +14 Tage) und wiederhole die Prüfung bis D aus dem Zeitraum START-ENDE fällt.