Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Bitte um Hilfe...

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Bitte um Hilfe...

    Hallo Leute,
    habe es gestern schon gepostet, doch jetzt versuch ichs nochmal!
    Habe eine Aufgabe vor mir liegen und schaffe es nicht ganz.....
    Die Aufgabe lautet:
    Es soll folgendes Programm erstellt werden. Benutzen Sie dazu HTML und PHP (Klassen).
    Beim Drücken der "Start"-Taste wird eines von 10 Lieder per Zufall gewählt und angezeigt. Alle 3 Lieder muss neues Geld (25Cent) reingesteckt werden (pro Tastendruck werden 10Cent eingeworfen). Das Restgeld wird als Guthaben gemerkt und kann beim nächsten Mal wieder verwendet werden.

    Danke schon mal für eure Hilfe!
    lena888

  • #2
    Hallo lena888, es tut uns leid aber der Hausaufgaben-Service ist bis 22.12.2015 offline, da er sich einer größeren Wartung ( wird enfernt ) unterwirft.

    Es wird dir also nichts anderes übrig bleiben als einen eigenen Ansatz mit dem dir zur Verfügung stehenden Wissen zu erstellen, sodass wir dir bei diesem Ansatz helfen können.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Habe ja schon etwas gemacht aber weiß nicht so recht was mir noch fehlt... was ich bisher habe wäre das hier...


      PHP-Code:
      class Musicbox {
         
        private 
      $arrSongs = array ();
        private 
      $strCurrentSong '';
        private 
      $intCash 0;
        private 
      $intCredit 0;
        private 
      $intLastSongs 0;
        
        
        public function 
      getMoney (){
          
      $this->intCash=  $this->intCash+10;
         return 
      $this->intCash;  
        }
      public function 
      start(){
         
            
      $this->strCurrentSong array_rand($this->arrSongs);
            if (
      $this->intLastSongs<4){
              
      $this->intLastSongs++;
            }
            else {
              
      $this->intLastSongs=0;
            }
            return 
      $this->strCurrentSong;
            }
        
             
        public function 
      getCurrentSong (){
          return 
      $this->strCurrentSong;
        }
        
        
        public function 
      getSongs (){
          
      $this->arrSongs = (array (KingladeJubel=>'Key1',
                                    
      MilkyChanceStolenDance=>'Key2',
                                    
      MartinGarrixAnimals=>'Key3',
                                    
      AviciiHeyBrother=>'Key4',
                                    
      AviciiWakeMeUp=>'Key5',
                                    
      RobinThickeBlurredLines=>'Key6',
                                    
      SportfreundeStillerApplausApplaus=>'Key7',
                                    
      DaftPunktFeat.PharrelWilliamsGetLucky=>'Key8',
                                    
      SportfreundeStillerNewYorkRioRosenheim=>'Key9',
                                    
      TheOffspringSelfEsteem=>'Key10'));
           }
        
           
        public function 
      emptyCashbox (){
        
          
      $this->intCredit=0;
          
      $this->intCash=0;
        } 


      und meine Ausgabe..

      Code:
      <?php
      session_start();
      
      include ('musicbox.php');
      
      //unset($_SESSION['musicbox']);
      
      $objMusicbox = new Musicbox();
      
      $objMusicbox->getSongs();
      $objMusicbox->start();
      ?>
      
      
      <ul>
          <div style="text-align:left; padding:25px; border:thin solid black; margin:55px">
            <h2>Übersicht:</h2>
        <body>
          <table>
          <tr>
            <th> Aktuelles Lied: <?php print_r ($objMusicbox->getCurrentSong());?></th>
         </tr>
         <tr>
           <th> Geld in der Kasse:<?php print_r ($objMusicbox->getMoney());?></th>
         </tr>
         <tr>
           <th> Guthaben:</th>
         </tr>
         </ul>
      
      
       <img src='MusicBox.jpg' width="271" height="265" border="1" align='right'>
      </table>
      
      
      <br><br><br>
      <form action="" method="post">
      <input type='submit' value='Start' name=""></form>
      
      <form action='' method='post'>
      <input type='submit' value='Geld einwerfen' name=""></form>
      
      <form action='' method='post'>
      <input type='submit' value='Geldbox leeren' name=""></form>
      
      
       </body></div>

      Kommentar


      • #4
        Murks:
        - HTML invaldie, worst practice, unvollständig.
        - Vor OOP sollte man schon verstanden haben, das man PHP von HTML trennen sollte: Templating
        - Wozu 3 Formulare wenn ein Formular den selben zweck erfüllen kann.
        - Armageddon 4.0 Coding Standard
        - Deaktiviertes Error-Reporting
        - Klassen die privates definieren vermindern erweiterbarkeit, besser protected nutzen wenn private nicht unbedingt erzwingt werden muss.
        - Sprachkonstrukte benötigen keine Klammerung der Argument(e).

        Ideen:
        - Erzeuge einen Song-Stack von dem du über getRandomSong() einen Song abholen und den du über reset() zurücksetzen kannst.
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          Hi Lena,

          funktioniert im Prinzip. Ist bestimmt nicht perfekt. Aber kannst ja mal gucken, was Du für Dich übernehmen willst.
          Irgendwie müßte man jetzt noch einen Dialog machen mit Geld nachwerfen und so ...

          PHP-Code:
          <!DOCTYPE html>
          <html>
              <head>
                  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                  <title>jukebox</title>
              </head>
              <body>
                 <?php
                      $songs 
          = array(
                          
          'Cluster one',
                          
          'The Messiah will come again',
                          
          'Thru the eyes of Ruby',
                          
          'Valleys of Neptune',
                          
          'Been down so long',
                          
          'Sons of the silent age',
                          
          'Don\'t go to strangers',
                          
          'Crime in the city',
                          
          'No quarter',
                          
          'On a clear day',
                      );
                              
                      
          $jukebox = new jukebox($songs);
                      
                      
          $jukebox->setMoney();
                      
          $jukebox->setMoney();
                      
          $jukebox->setMoney();
                      
                      
          $jukebox->setMoney();
                      
          $jukebox->setMoney();
                      
          $jukebox->setMoney();
                      
                      
          $jukebox->setMoney();
                      
          $jukebox->setMoney();
                      
          $jukebox->setMoney();
                      
                      while (
          $jukebox->getMoney() >= 25) {
                          echo 
          '<p>Guthaben: ' $jukebox->getMoney() . '</p>';
                          
                          foreach (
          $jukebox->getSongs() as $song) {
                              echo 
          '<p>Currently playing: <i>' $song '!</i></p>';
                          }
                      }
                 
          ?>
              </body>
          </html>

          <?php
              
          class jukebox {
                  private 
          $money;
                  private 
          $songs = array();
                  
                  public function 
          __construct($songs) {
                      
          $this->money 0;
                      foreach(
          $songs as $song) {
                          
          $this->songs[] = $song;
                      }
                  }
                  
                  public function 
          setMoney() {
                      
          $this->money += 10;           
                  }
                  
                  public function 
          getMoney() {
                      return 
          $this->money;
                  }
                      
                  public function 
          getSongs() {
                      
                      if (
          $this->money >= 25) {
                          
          $this->money -= 25;
                          
          $ret = array();
                          
                          for (
          $i 0$i <= 2$i++) {
                              
          $song_no rand(09);
                              
                              
          $ret[$i] = $this->songs[$song_no];
                          }
                          
                          return 
          $ret;
                      } else {
                          
          $ret[] = false;
                          
                          return 
          $ret;
                      }
                  }
              }
          ?>

          Kommentar


          • #6
            Und ändere den threadtitel, "Bitte um Hilfe ... " ist ja ausser nichtssagend nur nichtssagend.
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              @mizech: Danke für deine Antwort! Aber habe es jetzt folgendermaßen gemacht, es würde so gesehen funktionieren wenn ich noch ein 'if' bei meiner Ausgabe Datei einfüge für meine function setStart, setMoney und setEmptyCash.. aber was genau muss da rein?

              PHP-Code:
              <?php

              class Musicbox {
                 
                private 
              $arrSongs = array ();
                private 
              $strCurrentSong '';
                private 
              $intCash 0;
                private 
              $intCredit 0;
                private 
              $intLastSongs 0;
                
                
                public function 
              getMoney (){
                 return 
              $this->intCash;  
                }

                public function 
              setMoney (){
                  
              $this->intCash=  $this->intCash+10;
                  
              $this->intCredit$this->intCredit+10;
                }
                
                public function 
              getCredit (){
                  return 
              $this->intCredit;
                }

                public function 
              setStart(){
                    if (
              $this->intCredit >= 25){
                    
                    if (
              $this->intLastSongs<4){
                      
              $this->strCurrentSong array_rand($this->arrSongs);
                      
              $this->intLastSongs++;    
                      }
                    else {
                      
              $this->intCredit-25;
                      
              $this->intLastSongs=0;
                    }}}
                
                     
                public function 
              getCurrentSong (){
                  return 
              $this->strCurrentSong;
                }

                public function 
              setSongs (){
                  
              $this->arrSongs = (array (KingladeJubel=>'Key1',
                                            
              MilkyChanceStolenDance=>'Key2',
                                            
              MartinGarrixAnimals=>'Key3',
                                            
              AviciiHeyBrother=>'Key4',
                                            
              AviciiWakeMeUp=>'Key5',
                                            
              RobinThickeBlurredLines=>'Key6',
                                            
              SportfreundeStillerApplausApplaus=>'Key7',
                                            
              DaftPunktFeat.PharrelWilliamsGetLucky=>'Key8',
                                            
              SportfreundeStillerNewYorkRioRosenheim=>'Key9',
                                            
              TheOffspringSelfEsteem=>'Key10'));
                   }
                
                   
                public function 
              setEmptyCashbox (){
                  
              $this->intCash=0;
                }
              }
              Code:
              <?php
              
              include ('musicbox.php');
              session_start();
              
              
              //unset($_SESSION['musicbox']);
              
              if (isset($_SESSION['musicbox'])) {
                 $objMusicbox = $_SESSION['musicbox'];}
              else {
                $objMusicbox = new Musicbox ();
                $_SESSION['musicbox'] = $objMusicbox;}
                
               
              if (isset($_POST['setMoney'])){
                $objMusicbox->setMoney();
                $_SESSION['musicbox']=serialize($objMusicbox);
              }
              
              if (isset($_POST['setEmptyCashbox'])){
                $objMusicbox->setEmptyCashbox();
                $_SESSION['musicbox']=serialize($objMusicbox);
              }
              
              ?>
              <ul>
                  <div style="text-align:left; padding:25px; border:thin solid black; margin:55px">
                    <h2>&Uuml;bersicht:</h2>
                <body>
                  <table>
                  <tr>
                    <th> Aktuelles Lied: <?php print_r ($objMusicbox->getCurrentSong());?></th>
                 </tr>
                 <tr>
                   <th> Geld in der Kasse:<?php print_r ($objMusicbox->getMoney());?> Cent</th>
                 </tr>
                 <tr>
                   <th> Guthaben: <?php print_r($objMusicbox->getCredit());?> Cent</th>
                 </tr>
                 </ul>
              
              
               <img src='MusicBox.jpg' width="271" height="265" border="1" align='right'>
              </table>
              <br><br><br>
              <form action="" method="post">
              <input type='submit' value='Start' name=''></form>
              
              <form action='' method='post'>
              <input type='submit' value='Geld einwerfen'></form>
              
              <form action='' method='post'>
              <input type='submit' value='Geldbox leeren'></form>
              </body></div>

              Mfg lena888

              Kommentar


              • #8
                das wäre mein Ansatz, wenn hier schon mizeh postet.. dann darf ich das auch

                PHP-Code:
                <?php
                session_start
                ();

                class 
                JukeBox {

                    protected 
                $avaliableSongs = array();
                    protected 
                $currentSong 0;
                    protected 
                $costsPerRound 0.25;
                    protected 
                $songsPerRound 3;
                    protected 
                $currentFreeSongs 0;
                    protected 
                $moneyPerInsert 0.10;
                    protected 
                $currentMoney 0;

                    public function 
                __construct(array $avaliableSongs) {
                        
                $this->avaliableSongs $avaliableSongs;
                    }

                    private function 
                setRandomSong() {
                        
                $this->currentSong rand(0count($this->avaliableSongs) - 1);
                    }

                    private function 
                hasEnoughtMoney() {
                        return 
                $this->currentMoney $this->costsPerRound && $this->currentMoney 0;
                    }

                    private function 
                hasFreeSongs() {
                        return 
                $this->currentFreeSongs 0;
                    }

                    private function 
                payRound() {
                        
                $this->currentMoney -= $this->costsPerRound;
                    }

                    private function 
                setFreeSongs() {
                        
                $this->currentFreeSongs $this->songsPerRound;
                    }

                    public function 
                play() {

                        if (
                $this->hasFreeSongs()) {
                            
                $this->setRandomSong();
                            
                $this->currentFreeSongs--;
                        }
                        if (
                $this->hasEnoughtMoney() && !$this->hasFreeSongs()) {
                            
                $this->payRound();
                            
                $this->setFreeSongs();
                        }
                    }

                    public function 
                getCurrentSong() {
                        return 
                $this->avaliableSongs[$this->currentSong];
                    }

                    public function 
                getCurrentMoney() {
                        return 
                $this->currentMoney;
                    }

                    public function 
                getRestSongs() {
                        return 
                $this->currentFreeSongs;
                    }

                    public function 
                insertMoney() {
                        
                $this->currentMoney += $this->moneyPerInsert;
                    }

                }

                $avaliableSongs array_fill(010'Song');
                array_walk($avaliableSongscreate_function('&$val,$index''$val = $val.($index+1);'));

                setlocale(LC_MONETARY'de_DE');
                if (isset(
                $_SESSION['jukebox'])) {
                    
                $jukeBox $_SESSION['jukebox'];
                } else {
                    
                $jukeBox = new JukeBox($avaliableSongs);
                }

                if (isset(
                $_GET['play'])) {
                    
                $jukeBox->play();
                    
                $_SESSION['jukebox'] = $jukeBox;
                }

                if (isset(
                $_GET['insertMoney'])) {
                    
                $jukeBox->insertMoney();
                    
                $_SESSION['jukebox'] = $jukeBox;
                }
                ?>
                <!DOCTYPE html>
                <html>
                    <head>
                        <meta charset="utf-8">
                        <title>My JukeBox</title>
                    </head>
                    <body>
                        <h3>JukeBox</h3>
                        <table>
                            <tbody>
                                <tr>
                                    <th>Aktuelles Lied:</th><td><?= $jukeBox->getCurrentSong() ?></td>  
                                </tr>
                                <tr>
                                    <th>Aktuelles Guthaben:</th><td><?= money_format("%.2n"$jukeBox->getCurrentMoney()) ?></td>
                                </tr>
                                <tr> 
                                    <th> Freie Songs :</th><td><?= $jukeBox->getRestSongs() ?></td>
                                </tr>
                            </tbody>
                        </table>
                        <hr/>
                        Aktionen: <a href="?play">Song abspielen</a> | <a href="?insertMoney">10 Cent einwerfen</a> 
                    </body>
                </html>
                apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                Kommentar


                • #9
                  Zitat von tr0y Beitrag anzeigen
                  Murks:
                  - Klassen die privates definieren vermindern erweiterbarkeit, besser protected nutzen wenn private nicht unbedingt erzwingt werden muss.
                  Wenn es keinen absolut logischen Grund dafür gibt, sollte man die Eigenschaften einer Klasse immer private halten. Kapselung hat immer Priorität vor Erweiterbarkeit. Der Zugriff auf Eigeschaften sollte nur ueber Methoden moeglich sein.

                  Kommentar


                  • #10
                    Zitat von rkr Beitrag anzeigen
                    Meeep. Wenn es keinen absolut logischen Grund dafür gibt, sollte man die Eigenschaften einer Klasse immer private halten. Kapselung hat immer Priorität vor Erweiterbarkeit.
                    der Logische grund ist Open Close prinzip

                    http://en.wikipedia.org/wiki/SOLID_%...nted_design%29
                    apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                    Kommentar


                    • #11
                      Zitat von BlackScorp Beitrag anzeigen
                      der Logische grund ist Open Close prinzip
                      Nicht Methoden und Eigenschaften verwechseln.

                      Kommentar


                      • #12
                        Zitat von rkr Beitrag anzeigen
                        Nicht Methoden und Eigenschaften verwechseln.
                        Es macht aber wenig sinn, wenn eigenschaften Private sind und es keinen direkten Getter und Setter für die Eigenschaft vorhanden ist, kann man die klasse nur durch die Modifikation des Quellcodes anpassen, nicht durch ableitung. Private eigenschaften machen nur in wenigen fällen sinn und meist auch bei finalen klassen.
                        apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                        Kommentar


                        • #13
                          Zitat von BlackScorp Beitrag anzeigen
                          das wäre mein Ansatz, wenn hier schon mizeh postet.. dann darf ich das auch
                          Oh, mann ...
                          Macht euren Schrott alleine.
                          Danke und Goodbye!

                          Kommentar


                          • #14
                            Zitat von rkr Beitrag anzeigen
                            Wenn es keinen absolut logischen Grund dafür gibt, sollte man die Eigenschaften einer Klasse immer private halten. Kapselung hat immer Priorität vor Erweiterbarkeit. Der Zugriff auf Eigeschaften sollte nur ueber Methoden moeglich sein.
                            Auf Eigenschaften die protected gehalten werden hast du keinen direkten Zugriff, der ist wie bei private auch nur über Methoden möglich.
                            So wie es tr0y formuliert ist es korrekt.

                            Kommentar


                            • #15
                              Zitat von BlackScorp Beitrag anzeigen
                              Es macht aber wenig sinn, wenn eigenschaften Private sind und es keinen direkten Getter und Setter für die Eigenschaft vorhanden ist, kann man die klasse nur durch die Modifikation des Quellcodes anpassen, nicht durch ableitung. Private eigenschaften machen nur in wenigen fällen sinn und meist auch bei finalen klassen.
                              Hm, dann hast du das OpenClosed Prinzip nicht verstanden. Es heisst nicht, Implementationsdetails offenzulegen, sondern zu abstrahieren.

                              Kommentar

                              Lädt...
                              X