• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Sitzplan

Caelus

Neues Mitglied
Hallo, ich habe für meine Klasse einen Sitzplan mit PHP + MySQL erstellt.

Das funktioniert folgendermaßen: Die Schüler werden aus einer MySQL Tabelle ausgelesen und einem Array zugewiesen. Danach werden zwei zufällig asugewählte Schüler nebeneinander platziert, ein platzierter Schüler wird aus dem Array entfernt. Die Tische müssen natürlich auch erstellt werden. Was ich bis jetzt habe, befindet sich im Anhang.

Nun ergibt sich aber das folgende Problem: Nehmen wir an, ich habe eine bestimmte Anzahl von Tischen (natürlich mehr als Schüler) und ich will, dass immer zwei Schüler nebeneinander sitzen und die restlichen Tische (welche ich bestimmen können möchte) leer bleiben. Wie ist das realisierbar? Und gibt es generell vielleicht eine "elegantere" Möglichkeit das Ganze zu machen?

Danke im Voraus...
 

Anhänge

Zuletzt bearbeitet:
Es ist hier üblich, Code (wenn er nicht überlang ist) direkt zu posten, um den Lesern den umständlichen Download zu ersparen. Dazu kannst unter Erweitert dann die Option PHP wählen, das steht auch irgendwo in der Anleitung zu dieser Seite.
PHP:
$personen[]= $row['vorname']." ".$row['nachname'];
Hast du 2x den Karl Maier, dann kannst am Plan nicht mehr unterscheiden, welcher wo sitzt. Du mischst hier irgendwie die Tischanordnung (quadratisch) und die Auswahl der Schüler. Ich würde das trennen und erst mal die Tische (von 1..n) füllen und danach die Tische geeignet anordnen. Dann kannst die m <= n besetzten Tische auf die verfügbaren Stellplätze verteilen und bestimmen, wo die freien Tische hinkommen. Dein eigentliches Problem habe ich noch nicht so recht verstanden :-).

Das Ganze erinnert etwas an das http://de.wikipedia.org/wiki/Schweizer_System. Da versucht man, immer Paare mit gleicher Punktezahl auszulosen. Bei dir ist es der Spezialfall, dass alle Schüler die gleiche Punktzahl haben.
 
Zuletzt bearbeitet:
Ok, danke für dein Feedback.
Ich weiß, dass man PHP-Code mittels BBCode einbindet, aber irgendwas hat da bei mir nicht hingehauen, deshalb hab ichs in den Anhang getan.
 
Hier mal der Code, für inhaltliche Aussagen reicht es gerade nicht mehr bei mir. ;)

PHP:
<?php
class tables{
    var $width = 200;
    var $height = 100;
    var $x_pos = 50;
    var $y_pos = 50;
	var $id = 0;

    

    function show(){
	
		$dbm = new DatabaseManager();
		
		//Personenliste aus Datenbank laden
		$result = $dbm->query('select * from schueler');
		while($row = mysql_fetch_array($result)){
			$personen[]= $row['vorname']." ".$row['nachname'];
		}
		
		$res = '<div id="container">';
        for ($i=0; $i<4; $i++){
            for ($j=0; $j<4; $j++){
				//Tische erstellen
				$this->x_pos= $i * 250 ;
				$this->y_pos= $j * 150 ;
				$res.= '<div style="width: '.$this->width.'px; height: '.$this->height.'px; position: absolute; left: '.$this->x_pos.'px; top: '.$this->y_pos.'px; border-style: solid;">';
				//Erste Person
				if (count($personen)>0){
					$this->id= $this->id + 1;
					$p = rand(0,count($personen)-1);
					$res.= '<div id="'.$this->id.'" style="margin-left: 0px; margin-top: 0px; width: 100px; height: 100px;" onclick="swap(this.id)">';
					$res.= $personen[$p];//Person in box einfuegen
					$res.= '</div>';
					unset($personen[$p]);//Zufallsperson aus liste entfernen
					$personen = array_values($personen);//Liste neu ordnen
				}
				//Zweite Person
				if (count($personen)>0){
					$p = rand(0,count($personen)-1);
					$this->id= $this->id + 1;
					$res.= '<div id="'.$this->id.'" style="margin-left: 100px; margin-top: -100px; width: 100px; height: 100px;" onclick="swap(this.id)">';
					$res.= $personen[$p];//Person in div box einfuegen
					$res.= '</div>';
					unset($personen[$p]);//Zufallsperson aus Liste entfernen
					$personen = array_values($personen);//Liste neu ordnen
				}
				$res.= '</div>';
			}
        }
		$res .= '</div>';
        return $res;
    }
}
?>
 
Zurück
Oben