Spam-Mail-Versand Hausarbeit

egaal

Mitglied
Hallo, das hier ist mein erster Beitrag hier und ich brauche eure Hilfe.
Ich muss für eine Hausarbeit ein Programm erstellen, welches den Versand von Spam-Mails plant und dann einen Zeitplan ausgibt. Das Grundgerüst habe ich schon fertig, jedoch hapert es bei mir dabei, die Tage durch zu zählen. Ich habe erst versucht, alle Monate von selbst zu definieren - 30 Tage, 31 Tage, Schaltjahre etc. - komme aber an diesem Punkt nicht weiter.
Als Tipp haben wir bekommen, es mit JavaUtil.GregorianCalendar zu probieren, aber das habe ich auch noch nicht so ganz hinbekommen. Dann habe ich ein bisschen im Internet gesucht und bin auf JodaTime gestoßen. Vielleicht kann mir ja jemand verraten, was die beste vorgehensweise ist. Ich bin blutiger Anfänger was Java angeht, beherrsche aber die Basics einigermaßen, hab nur mit der Struktur immer meine Probleme.
Ich würde mal meinen Versuch als Anhang hochladen, sowie die Aufgabenstellung.
Vielen Dank schon mal im Vorraus.Java.PNG
 

Anhänge

  • Spamversand.txt
    3,6 KB · Aufrufe: 9

VfL_Freak

Top Contributor
Moin und Willkommen :)
zuerst mal: poste Code bitte immer in Code-Tags (siehe meine Signatur).
Er ist dann besser lesbar und vor allen auch besser zitierbar!
Außerdem öffnen viele heir nicht gerne unbekannte Dokumnte!

Ich habe erst versucht, alle Monate von selbst zu definieren - 30 Tage, 31 Tage, Schaltjahre etc. - komme aber an diesem Punkt nicht weiter
Was genau heißt? An welcher Stelle denn ?

Lies Dir auch bitte mal dies hier durch, dass DIR und UNS weiterhilft :
http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html

So ganz auf die Schnelle ist mir an Deinem Code nichts aufgefallen ... ;)

VG Klaus

EDIT:
>> System.out.println("Der Februar hat nur 28 Tage wenn kein Schaltjahr ist!");
hier sollte besser 29 stehen :cool:
 

egaal

Mitglied
Vielen Dank erstmal für deine schnelle Antwort!
Also für die Benutzergruppe Agestellte und Beamte sollen die Mails ja nur an Werktagen versendet werden.
Über GregorianCalendar würde ich ja an den Wochentag kommen, aber wie addiere ich dann einen oder zwei Tage? Also je nachdem ob es ein Samstag oder Sonntag ist. Wenn ich mit der Kalender Klasse arbeite muss ich die Ausgabe wahrscheinlich auch anders gestalten oder?
 

egaal

Mitglied
Den Code füge ich dann an dieser Stelle nochmal ein wie gewünscht!
Java:
//import java.util.GregorianCalendar;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Zeitplan {
   
    /* Empfaenger=0 Privat , Empfaenger=1 Firmen , Empfaenger=2 Behörden

    /*    Datum muss das Format tt.mm.jjjj haben */
   
    public boolean erstelleZeitplan(int empfaenger, String datum) {
       
        if (empfaenger<0 || empfaenger>2)
        {    System.out.println("Da lief was schief");
            return false;
        }
       
        String[] meinDatum = datum.split("\\.");
       
       
       
        if(meinDatum.length!=3) {
            System.out.println("Da lief was falsch");
            return false;
        }
       
        int tag   = Integer.parseInt(meinDatum[0]);
        int monat = Integer.parseInt(meinDatum[1]);
        int jahr  = Integer.parseInt(meinDatum[2]);
        GregorianCalendar calendar = new GregorianCalendar(jahr, monat, tag);
       
        //int i = calendar.get(calendar.DAY_OF_WEEK);
           
        if(tag<1 || tag>31) {
            System.out.println("Falscher Tag");
            return false;
        }
       
        if(monat<1 || monat>12) {
            System.out.println("Falscher Monat");
            return false;
        }
       
        if(jahr<2010 || jahr>2050) {
            System.out.println("Das Jahr muss zwichen 2010 und 2050 liegen");
            return false;
        }
       
       
        //Monate mit 30 Tagen pruefen
        if((monat==4 || monat==6 || monat==9 || monat==11) && tag>30) {
            System.out.println("Dieser Monat hat nur 30 Tage!");
            return false;
        }
       
       
        //Schaltjahr pruefen
        if (monat==2 && jahr%4==0 && tag>28 )    {
            System.out.println("Der Februar hat nur 28 Tage wenn kein Schaltjahr ist!");
            return false;
        }
       
       
        /*
         Ab hier muessen jetzt die Personen uberprueft werden
         */
       
        int aktMonat=monat;
        int aktTag = tag;
        int aktJahr= jahr;
       
        //private Benutzer
       
        if(empfaenger==0) {
           
        do {   
            /* Nur 30 Tage */
            if (aktMonat==4 || aktMonat==6 || aktMonat==9 || aktMonat==11)
            {
                while(aktTag<31) {
                    System.out.println("Tag: "+aktTag +"  Monat: "+aktMonat+"  Jahr: "+ aktJahr + "   Empfaenger: privat");
                    aktTag+=8;
                }
                           
                aktTag=aktTag-30;
               
            }
            //Februar
            else if (aktMonat==2)
            {
                if(jahr%4==0)        //Schaltjahr
                {
                    while(aktTag<30) {
                        System.out.println("Tag: "+aktTag +"  Monat: "+aktMonat+"  Jahr: "+ aktJahr + "\t Empfaenger: privat");
                        aktTag+=8;
                    }
                   
                    aktTag= aktTag-29;
                }
               
                else  {    //kein Schaltjahr
                    while(aktTag<29) {
                        System.out.println("Tag: "+aktTag +"  Monat: "+aktMonat+"  Jahr: "+ aktJahr + "\t Empfaenger: privat");
                        aktTag+=8;
                    }
                   
                    aktTag=aktTag-28;
                }
            }
           
           
            else {
                while(aktTag<32) {
                    System.out.println("Tag: "+aktTag +"  Monat: "+aktMonat+"  Jahr: "+ aktJahr + "\t Empfaenger: privat");
                    aktTag+=8;
                }
                           
                aktTag=aktTag-31;
            }
           
           
           
           
           
            if(aktMonat==12)
                aktMonat=1;
           
            else
                aktMonat++;   
        }while(aktMonat!=monat);    //Hoere auf wenn ein Jahr vorbei
       
        return true;
        }
       
       
        return false;
    }
   
   
   
   
   
   
   
   
   
   
   
   
   
    public static void main(String args[]) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       
       
        while(true) {
            Zeitplan zeitPlan = new Zeitplan();
           
            System.out.println("Geben Sie den Empfaenger ein: 0 fuer Privat, 1 fuer Firma, 2 fuer Behoerde");
            int empf= Integer.parseInt(reader.readLine());
           
            System.out.println("Geben Sie das Datum ein ab dem der Zeitplan erstellt werden soll");
            String datum = reader.readLine();
           
           

           
           
            zeitPlan.erstelleZeitplan(empf, datum);
           
           
        }
    }
}
 

egaal

Mitglied
Ja, Gregorian Calendar wurde uns sogar empfohlen, weiss nur nicht recht damit umzugehen, ich könnte ja dann den ganzen code, in dem ich die Monate einzeln definiert habe, ersetzen können richtig? Habe als alternative auch JodaTime gefunden, ist das evtl einfacher als GregorianCalendar oder eher nicht so?
 

VfL_Freak

Top Contributor

Flown

Administrator
Mitarbeiter
Joda wird gar nicht mehr weiterentwickelt? Sie verweisen jetzt darauf, dass man die Java datetime api verwenden sollte.
 

egaal

Mitglied
Gibt es vielleicht eine Seite die mir Jede Zeile erklärt? Ich denke so wäre es einfacher für mich zu verstehen wo ich was zu tun habe. Den Anfang habe ich mit einem Freund gemacht, der aber leider jetzt im Urlaub ist.
 

egaal

Mitglied
Ich bin ein erhebliches Stück weiter gekommen und stehe jetzt vor der nächsten aufgabe:
Ich möchte die Anweisungen genau für ein Jahr durchlaufen lassen damit sich der Zeitplan für ein Jahr ergibt.

Meine Anweisungen für eine Empfängergruppe sieht bis jetzt so aus.
Code:
if(empfaenger==1)
        {
           
            if(calendar.get(calendar.DAY_OF_WEEK)==1)
                {
                calendar.add((GregorianCalendar.DAY_OF_YEAR),1);
                System.out.println("Spam versand an diesem Tag:"+calendar.getTime());
                calendar.add((GregorianCalendar.DAY_OF_YEAR), 16);
                }
            else if(calendar.get(calendar.DAY_OF_WEEK)==7)
                {
                calendar.add((GregorianCalendar.DAY_OF_YEAR), 2);
                System.out.println("Spam versand an diesem Tag:"+calendar.getTime());
                calendar.add((GregorianCalendar.DAY_OF_YEAR),16);
                }
            else
            {
                System.out.println("Spam versand an diesem Tag:"+calendar.getTime());
                calendar.add((GregorianCalendar.DAY_OF_YEAR),16);
            }

hier soll der versand alle 16 Tage stattfinden und an wochenenden auf den folgenden Montag verschoben werden, da Mitarbeiter in einer Firma.
Ich muss diese Anweisungen jetzt nur noch genau ein Jahr in schleife laufen lassen.
 

Flown

Administrator
Mitarbeiter
@egaal Ich wiederhole: Kannst du auch hier die Auszüge (also Beispiel für Ein-/Ausgabe) hier posten? Anders ausgedrückt, wie sollte das Ergebnis aussehen?
 

Neue Themen


Oben