tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
853
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jul 2011
    Beiträge
    9
    Hi liebe Programmierer Community,
    ich habe folgendes Problem.
    Von der Hochschule wurde mir eine Aufgabe gestellt für die ich entweder einfach zu doof oder zu kompliziert denke hier einmal die Aufgabenstellung:

    Aufgabe 6.1
    Optimieren Sie die in Aufgabe 5 angelegte Klasse Ferienwohnung, indem Sie
    - Einen Konstruktor anlegen.
    - Die Attribute private setzen und den Zugriff über getter/setter-Methoden regeln.
    Aufgabe 6.2
    Die Ferienwohnungen müssen gebucht werden können. Dazu sollen die Buchungen in einer
    geordneten Liste an die jeweilige Wohnung angeheftet werden.
    - Legen Sie hierzu eine neue Klasse „Buchung“ an, in der Anfangsdatum und
    Endedatum gespeichert werden, sowie eine Buchungsnummer incl. der notwendigen
    Methoden.
    - Jede Ferienwohnung enthält ein Array oder einen Vector (Ihre Wahl) und kann dort
    beliebig viele Buchungen speichern
    Überschneidungen sind dabei auszuschließen und bedingen eine Fehlermeldung.
    Erweitern Sie Buchen entsprechend und fügen Sie eine Funktion Stornieren und
    showBuchungen hinzu (optional auch weitere zum Bearbeiten der Buchung).

    Desweiteren Soll das ganze so Aufgebaut sein das das Hauptrogramm eine verbindung zu Ferienwohnung hat(nicht bidirektional), die Ferienwohnung über ein Array oder Vektor auf die Buchung zugreift und die Buchung auf die Datumsklasse.

    Mein Problem ist das ich das ganze nicht richtig verstehe und wenn ich versuche eine Datumsüberprüfung zu machen dann geht wieder garnichts. Und die FUnktion für den Mengenrabatt scheint auch nicht mehr zu stimmen. Ich bin inzwischen total verwirrt und frage mich ob ich das ganze überhaupt richtig angegangen bin.

    Im moment ist es mir wichtig das das letzte erzeugte Elemnt nich mehr auftaucht, da sich dort die Buchung überschneidet und an dieser Stelle verstehe ich nicht was falsch ist.....

    Hier habe ich schonmal die geschriebenen Codes
    Code :
    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
    
     
    public class Hauptprogramm {
        private static Ferienwohnung w1;
        private static String name;
        private static double basispreis;
        private static int bettenzahl;
        private static String adresse;
        private static int sterne;
        private static int mengengrundrabatt;
        
        
        public static void main (String[]args){
            w1 = new Ferienwohnung();
            w1.buchen(new Datum (1,1,2012),10);
            //wähleFerienwohnung(1);
            w1.buchen(new Datum (2,2,2012),3);
            //wähleFerienwohnung(3);
            w1.buchen(new Datum (6,1,2012),6);
            //wähleFerienwohnung(1);
        }
        public static void wähleFerienwohnung(int zahl){
            switch(zahl){
            case 1:
                name = "Abstellkammer";
                basispreis = 23.00;
                bettenzahl = 1;
                adresse= "Hinterhof 17";
                sterne =2;
                mengengrundrabatt = 40;
                break;
            case 2:
                name = "Abendruh";
                basispreis = 56.70;
                bettenzahl = 4;
                adresse= "Sonnenweg 3";
                sterne =4;
                mengengrundrabatt = 12;
                break;
            case 3:
                name = "Schwarzwaldpalast";
                basispreis = 79.90;
                bettenzahl = 3;
                adresse= "Baumallee 1";
                sterne =5;
                mengengrundrabatt = 10;
                break;
                
            default:
                System.out.println("Bitte eine Zahl zwischen 1 und 3 eingeben!");
                System.exit(0);
            }
        }
        
     
    }
    Code :
    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
    
    import java.util.Vector;
     
     
    public class Ferienwohnung{
        private Buchung buchen;
        private Vector b=new Vector();
        private double bruttopreis;
        private double endpreis1;
        private double nettopreis;
        private double endpreis2;
        private double steuern=7;
        private double mengenrabatt;
        private int anzahl;
        private double basispreis=23.00;
        private double mengengrundrabatt=40;
        private String name="Abstellkammer";
        private int bettenzahl=1;
        private String adresse= "Hinterhof 17";
        private int sterne=2;
        
        public void buchen(Datum datum, int uebernacht) {
            buchen = new Buchung(datum,uebernacht);
            anzahl = uebernacht;
            
            int grösse=b.size();
            System.out.println(grösse);
            
            if(grösse!=0){
                for(int i=0;i<grösse;i++){
                        Buchung buchen2=(Buchung) b.get(i);
                        boolean gebucht = buchen.prüfeBuchung(buchen2);
                        if (gebucht==true){
                            b.addElement(buchen);
                            brutto(basispreis);
                            netto(basispreis);
                            mengenrabatt(anzahl,mengengrundrabatt, basispreis);
                            show(name,bettenzahl,adresse,sterne);
                        }
                        else{
                            System.out.println("Buchungen überschneiden sich!");
                        }
                }
            }
            else if (grösse == 0){
            b.addElement(buchen);
            brutto(basispreis);
            netto(basispreis);
            mengenrabatt(anzahl,mengengrundrabatt, basispreis);
            show(name,bettenzahl,adresse,sterne);
            }
        }
        
        public double brutto(double basispreis){
            bruttopreis = anzahl*basispreis;
            endpreis1 = this.runden(bruttopreis);
            return(endpreis1);
        }
        
        
        public double netto (double basispreis){
            nettopreis = ((endpreis1/100)*steuern)+endpreis1;
            endpreis2 = this.runden(nettopreis);
            return(endpreis2);
        }   
        
        public double runden(double preis){
            double endpreis=Math.rint(preis*100)/100;
            return(endpreis);
        }
        public int getUebernachtung(){
            int n = anzahl;
            return(n);
        }
        
        public double mengenrabatt(int n, double rabatt, double basispreis){
            switch(n){
            
            case 0:
                System.out.println("Sie müssen mindestens 1 Übernachtung angeben");
                break;
            case 1:
                break;
            default:
                    n=n-1;
                    mengenrabatt =((1.00-((rabatt/n)/100))*basispreis)+(mengenrabatt(n,rabatt,basispreis));
                    brutto(basispreis);
                break;
            }
            mengenrabatt =runden(mengenrabatt);
            return (mengenrabatt);
        }
        
        public void show(String name, int bettenzahl, String adresse,int sterne){
            System.out.println("Anreisedatum: "+buchen.getAnLong());
            System.out.println("Abreisedatum: "+buchen.getAbLong());
            System.out.println("Ferienwohnung: "+name+", "+bettenzahl+" Betten, "+sterne+" Sterne");
            System.out.println("Adresse: "+adresse);
            System.out.println("Bruttopreis: "+endpreis1);
            System.out.println("Nettopreis: "+endpreis2);
            System.out.println("Endpreis: "+mengenrabatt);
            
        }
    }
    Code :
    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
    
     
    public class Buchung {
        private Datum aktuell;
        private Datum anreise;;
        private Datum abreise;
     
        public Buchung(Datum datum, int uebernachtungen) {
            aktuell = new Datum(15,12,2011);
            anreise = datum;
            abreise = berechenAbreise(uebernachtungen);
        }
     
        public Datum berechenAbreise(int uebernachtungen) {
            int btag = anreise.getTag();
            int bmonat = anreise.getMonat();
            int bjahr = anreise.getJahr();
            Datum date = new Datum(btag,bmonat,bjahr);
            for (int i=1;i<=uebernachtungen;i++){
                date = date.getNextTag();
            }
            return (date);
        }
        public boolean prüfeBuchung (Buchung buchen){
            int pTag;
            int pMonat;
            int pJahr;
            boolean gebucht =true;
            int altAn =buchen.getAnLong();
            int altAb =buchen.getAbLong();
            int dif = altAb-altAn;
            int angesamtzahl = anreise.getLong();
            int abgesamtzahl = abreise.getLong();
            
            if(altAn ==angesamtzahl||altAb==abgesamtzahl){
                gebucht=false;
            }
            
            for (int i=1;i<=dif;i++){
                altAn = ++altAn;
                if(angesamtzahl ==altAn){
                    gebucht =false;
                }
            }
            
            return (gebucht);
            
        }
     
        public boolean getIsSchaltjahr(int pJahr) {
            boolean isSchaltjahr=abreise.isSchaltjahr(pJahr);
            return (isSchaltjahr);
        }
     
        public int getMaxTage(int pMonat, int pJahr) {
            int maxTage = abreise.getMaxTage(pMonat, pJahr);
            return (maxTage);
        }
     
        public int getAnLong() {
            int angesamtzahl=anreise.getLong();
            return (angesamtzahl);
        }
     
        public int getAbLong() {
            int abgesamtzahl = abreise.getLong();
            return (abgesamtzahl);
        }
        
     
    }
    Code :
    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
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    
     
    public class Datum {
        private int tag;
        private int monat;
        private int jahr;
     
        public Datum(int pTag, int pMonat, int pJahr) {
            tag =pTag;
            monat = pMonat;
            jahr = pJahr;
            
            boolean pruefung=pruefeDatum();
            if (pruefung ==false){
                tag=15;
                monat=12;
                jahr=2012;
            }
        }
        
        public int getTag(){
            int gTag=tag;
            return(gTag);
        }
        public int getMonat(){
            int gMonat=monat;
            return(gMonat);
        }
        public int getJahr(){
            int gJahr=jahr;
            return(gJahr);
        }
        public int getLong (){
            int gesamtzahl = tag + monat*100 +jahr*10000;
            return(gesamtzahl);
        }   
        
        public static boolean isSchaltjahr(int einJahr){
             int jahr1=einJahr%4;
             int jahr2 = einJahr%100;
             if(jahr1!=0||jahr2==0){
                 boolean schaltjahr=false;
                 return(schaltjahr);
             }
             else{
                 boolean schaltjahr=true;
                 return(schaltjahr);
             }
            
        }
        public static int getMaxTage(int einMonat, int einJahr){
            int maxTage=0;
            
            switch(einMonat){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                maxTage =31;
                break;
            case 4:
            case 6:
            case 9:
            case 11: 
                    maxTage =30;
                break;
            case 2:
                  boolean schaltjahr= isSchaltjahr(einJahr);
                   if(schaltjahr==false){
                     maxTage=28;
                   }
                 else{
                    maxTage=29;
                 } 
               break;
            default:   
                System.out.println("Bitte machen Sie korrekte Angaben");
        }
            return (maxTage);
            
        }
        public Datum getNextTag(){
            switch (monat){
            
               case 1:
               case 3:
               case 5:
               case 7:
               case 8:
               case 10:
               case 12:
                   if(tag<=30){
                       tag++;
                   }
                   else{
                       tag = 1;
                       if(monat<=11){
                           monat++;
                       }
                       else{
                           monat = 1;
                           jahr++;
                       }
                   }
                   break;
               case 4:
               case 6:
               case 9:
               case 11: 
                   if(tag<=29){
                   tag++;
                   }
                   else{
                   tag = 1;
                        if(monat<=11){
                       monat++;
                        }
                        else{
                       monat = 1;
                       jahr++;
                        }
                   }
                   break;
               case 2:
                   int schaltjahr=jahr%4;
                   int jahr2 = jahr%100;
                   if(schaltjahr!=0||jahr2==0){
                       if(tag<=27){
                           tag++;
                           }
                           else{
                           tag = 1;
                                if(monat<=11){
                                    monat++;
                                } 
                                else{
                                    monat = 1;
                                    jahr++;
                                }
                           }
                 }
                 else{
                     if(tag<=28){
                           tag++;
                     }
                     else{
                         tag = 1;
                         if(monat<=11){
                            monat++;
                          } 
                          else{
                            monat = 1;
                            jahr++;
                        }
                       
                   }
                 }   
               break;
               default:   
                   System.out.println("Bitte machen Sie korrekte Angaben");
            }
            return (new Datum(tag,monat,jahr));
        }
        public boolean pruefeDatum(){
            boolean b;
        switch (monat){
        
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            if(tag>=1&&tag<=31){
                b=true;
            }
            else{
                System.out.println("Bitte machen Sie korrekte Angaben!");
                b=false;
                System.exit(0);
            }
            break;
        case 4:
        case 6:
        case 9:
        case 11: 
                if(tag>=1&&tag<=30){
                    b=true;
                }
                else{
                    System.out.println("Bitte machen Sie korrekte Angaben!");
                    b=false;
                    System.exit(0);
                }
            break;
        case 2:
              boolean schaltjahr= isSchaltjahr(jahr);
               if(schaltjahr==false){
                   if(tag>=1&&tag<=28){     
                       b=true;
                   }
                   else{
                       System.out.println("Bitte machen Sie korrekte Angaben!");
                       b=false;
                       System.exit(0);
                   }
             }
             else{
                 if(tag>=1&&tag<=29){
                     b=true;
                 }
                    else{
                     System.out.println("Bitte machen Sie korrekte Angaben!");
                    b=false;
                    System.exit(0);
                    }
                } 
               break;
            default:   
                System.out.println("Bitte machen Sie korrekte Angaben!");
                b=false;
                System.exit(0);
            }
            return(b);
        }
     
    }
    Geändert von FutureProgrammer (12.12.11 um 20:44 Uhr)
     

  2. #2
    Registriert seit
    Jul 2011
    Beiträge
    9
    Okay das mit dem Datum überprüfen habe ich jetzt doch hinbekommen da war ein kleiner Fehler bei der If abfrage.

    Aber Mir fehlt noch der Mengenrabatt und die möglichkeit hardcodiert eine der Ferienwohnungen auszuwählen wenn mir da jemand helfen könnte wäre super

    Dankeschön
     

  3. #3
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.490
    Hi

    zuerst mal Aufgabe 6.1:
    Private hast du ja gemacht, aber die Getter/Setter?
    Zu
    Code java:
    1
    
    private double bruttopreis;
    das:
    Code java:
    1
    2
    3
    4
    5
    6
    
    public double getBruttopreis() {
        return bruttopreis;
    }
    public void setBruttopreis(double newPreis) {
        bruttopreis = newPreis;
    }
    Sowas in der Art.
    Und zwar für jede Variable in der Ferienwohnung.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  4. #4
    Avatar von j2se
    j2se j2se ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    94
    Blog-Einträge
    1
    Ebenfalls zu 6.1: Der Konstruktor fehlt. Sowas in der Art

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    public Ferienwohnung(double basispreis, double mengenrabatt, String name, int bettenzahl, String adresse, int sterne) {
            b =new Vector();
            this.basispreis = basispreis;
            this.mengengrundrabatt = mengenrabatt;
            this.name = name;
            this.bettenzahl = bettenzahl;
            this.adresse = adresse;
            this.sterne = sterne;
        }

    erlaubt, Ferienwohnungen mit verschiedenen Basispreisen, Bettenzahlen etc. zu instantieren.

    Zur Buchung: Sollen nur ganze Tage buchbar sein? Theoretisch könnte ein Kunde am Mittag auschecken und ein neuer am gleichen Tag am Nachmittag einchecken.
    Geändert von j2se (13.12.11 um 11:50 Uhr)
     

  5. #5
    Registriert seit
    Jul 2011
    Beiträge
    9
    Danke für die Antworten werde Versuchen das alles so schnell wie geht in die Tat umzusetzen.
    Ähm Buchungen sollen nur für ganze Tage gelten.
     

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 15.03.09, 16:43
  2. Antworten: 0
    Letzter Beitrag: 01.05.08, 13:38
  3. Antworten: 1
    Letzter Beitrag: 17.02.07, 18:39
  4. COM4J eine alternative Java - COM Bridge mit Java 5 Mitteln
    Von Thomas Darimont im Forum Java Technology News
    Antworten: 0
    Letzter Beitrag: 10.10.06, 17:49
  5. Java is Hot! Java News - Java Polis 2005
    Von Thomas Darimont im Forum Java
    Antworten: 0
    Letzter Beitrag: 03.12.05, 16:23