nclasses = 0;
        $this->scheduleName = $n; 
    }
	//--------------------------------------------------
	// Mutators and Accessors
	//--------------------------------------------------
	public function getName()
	{
		return $this->scheduleName;
	}    
	//--------------------------------------------------
	// Adds a new class to the schedule.
	//--------------------------------------------------
	function addClass($n)
    {
        $this->classStorage[$this->nclasses] = new Classes($n);
        $this->nclasses++;
    }
	//--------------------------------------------------
	// Adds a section to the desired class.
	//--------------------------------------------------
    function addSection($n, $l, $s, $e, $d)
    {
        $found = false;
        $counter = 0;
      
        while(!$found && ($counter < $this->nclasses))
        {
			$temp = $this->classStorage[$counter]->getName();
			
			if((strcmp($temp,$n)) == 0)
            {
				$found = true;
            } else {
				$counter++;
			}
		}
		
		if($counter == $this->nclasses)
		{
			echo "Could not find class: " . $n . "
";
        } else {
			$p = "unknown prof";
            $this->classStorage[$counter]->addSection($l, $p, $s, $e, $d);
        }
    }
	//--------------------------------------------------
	// Finds all of the possible permutations and stores
	// the results in the storage array.
	//--------------------------------------------------
	function findPossibilities()
	{
        $this->possiblePermutations = 1;
		$position = 0;
		$counter = 0;
        for($i = 0; $i < $this->nclasses; $i++)
        {
			$this->possiblePermutations = $this->possiblePermutations * $this->classStorage[$i]->getnsections();
			$cs[$i] = 0;	// Sets the counter array to all zeroes.
        }
        
		// Checks for conflicts in given classes, stores if none found
        do
        {
			$conflict = false;
			$upCounter = 0;
         
			// Get first class to compare
			while($upCounter < $this->nclasses)
			{
				$downCounter = $this->nclasses-1;
				while($downCounter > $upCounter)
				{
					$start1 = $this->classStorage[$upCounter]->getSection($cs[$upCounter])->getStartTime();
					$end1 = $this->classStorage[$upCounter]->getSection($cs[$upCounter])->getEndTime();
					$start2 = $this->classStorage[$downCounter]->getSection($cs[$downCounter])->getStartTime();
					$end2 = $this->classStorage[$downCounter]->getSection($cs[$downCounter])->getEndTime();
					
					// If the two times overlap, then check if days overlap.
					if(!$conflict && ((($start1 >= $start2) && ($start1 <= $end2)) || (($start2 >= $start1) && ($start2 <= $end1))))
					{
						// Monday
						if(!$conflict && ($this->classStorage[$upCounter]->getSection($cs[$upCounter])->getM() == $this->classStorage[$downCounter]->getSection($cs[$downCounter])->getM()))
						{
							$conflict = true;
						}
						
						// Tuesday
						if(!$conflict && ($this->classStorage[$upCounter]->getSection($cs[$upCounter])->getTu() == $this->classStorage[$downCounter]->getSection($cs[$downCounter])->getTu()))
						{
							$conflict = true;
						}
						
						// Wednesday
						if(!$conflict && ($this->classStorage[$upCounter]->getSection($cs[$upCounter])->getW() == $this->classStorage[$downCounter]->getSection($cs[$downCounter])->getW()))
						{
							$conflict = true;
						}
						
						// Thursday
						if(!$conflict && ($this->classStorage[$upCounter]->getSection($cs[$upCounter])->getTh() == $this->classStorage[$downCounter]->getSection($cs[$downCounter])->getTh()))
						{
							$conflict = true;
						}
						
						// Friday
						if(!$conflict && ($this->classStorage[$upCounter]->getSection($cs[$upCounter])->getF() == $this->classStorage[$downCounter]->getSection($cs[$downCounter])->getF()))
						{
							$conflict = true;
						}
					}
               
					$downCounter--;
				}
				
				$upCounter++;
            }
            
			// Store to storage if no conflict is found.
			if(!$conflict)
			{
				for($i = 0; $i < $this->nclasses; $i++)
				{
					$this->storage[$this->nPermutations][$i] = $cs[$i];
				}
				$this->nPermutations++;
			}
			
			// Increase the counter by one to get the next combination of class sections.
			$cs[$position] = $cs[$position] + 1;
			
			// Check to make sure the counter is still valid.
			$valid = false;
			while(!$valid)
			{
				if($cs[$position] == $this->classStorage[$position]->getnsections())
				{
					$cs[$position] = 0;
					$position++;
					
					// This is for the very last permutation. Even 
					// though the combination is not actually true
					// the larger while loop will end before any 
					// new combinations are performed.
					if($position == $this->nclasses)
					{
						$valid = true;
					} else {
						$cs[$position]++;
					}
				} else {
					$valid = true;
					$position = 0;
				}
            }
            
			$counter++;
		} while($counter < $this->possiblePermutations);
	}
    
	//--------------------------------------------------
	// Prints out the possible permutations in tables.
	//--------------------------------------------------
	function writeoutTables()
	{
		$table = "";
		$header = "";
		$footer = "";
		$M = -1;
		$Tu = -1;
		$W = -1;
		$Th = -1;
		$F = -1;
		$filled = false;
		$time = array(700,730,800,830,900,930,1000,1030,1100,1130,1200,1230,1300,1330,1400,1430,1500,1530,1600,1630,1700,1730,1800,1830,1900,1930,2000,2030,2100,2130, 2200);
		// Reminder:
		// border-style:top right bottom left
		$header .= "
There were a total of " . $this->possiblePermutations . " possible permutations. Only " . $this->nPermutations . " permutations had no class conflicts.
". "\n\n| " . ($i+1) . " | \n\t\tMonday | \n\t\tTuesday | \n\t\tWednesday | \n\t\tThursday | \n\t\tFriday | \n\t||||||||||||||||||||
| " . $this->prettyTime($time[$r]) . " | "; //---------------MONDAY--------------- for($j = 0; $j < $this->nclasses; $j++) { if($M == -1) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getM()) { if(($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() >= $time[$r]) && ($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() < $time[$r+1])) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1]) { $table .= "\n\t\t" . $this->classStorage[$j]->getName() . " " . $this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter() . " | "; $M = $j; $filled = true; } else { $table .= "\n\t\t" . $this->classStorage[$j]->getName() . " " . $this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter() . " | "; $filled = true; } } } } else { if($j == $M) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1]) { $table .= "\n\t\t"; $filled = true; } else { $table .= "\n\t\t | "; $M = -1; $filled = true; } } } } // If the cell was not filled, fill it with an empty cell. if(!$filled) { $table .= "\n\t\t | "; } $filled = false; //---------------TUESDAY--------------- for($j = 0; $j < $this->nclasses; $j++) { if($Tu == -1) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getTu()) { if(($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() >= $time[$r]) && ($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() < $time[$r+1])) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1]) { $table .= "\n\t\t | " . $this->classStorage[$j]->getName() . " " . $this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter() . " | "; $Tu = $j; $filled = true; } else { $table .= "\n\t\t" . $this->classStorage[$j]->getName() . " " . $this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter() . " | "; $filled = true; } } } } else { if($j == $Tu) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1]) { $table .= "\n\t\t"; $filled = true; } else { $table .= "\n\t\t | "; $Tu = -1; $filled = true; } } } } // If the cell was not filled, fill it with an empty cell. if(!$filled) { $table .= "\n\t\t | "; } $filled = false; //---------------WEDNESDAY--------------- for($j = 0; $j < $this->nclasses; $j++) { if($W == -1) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getW()) { if(($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() >= $time[$r]) && ($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() < $time[$r+1])) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1]) { $table .= "\n\t\t | " . $this->classStorage[$j]->getName() . " " . $this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter() . " | "; $W = $j; $filled = true; } else { $table .= "\n\t\t" . $this->classStorage[$j]->getName() . " " . $this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter() . " | "; $filled = true; } } } } else { if($j == $W) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1]) { $table .= "\n\t\t"; $filled = true; } else { $table .= "\n\t\t | "; $W = -1; $filled = true; } } } } // If the cell was not filled, fill it with an empty cell. if(!$filled) { $table .= "\n\t\t | "; } $filled = false; //---------------THURSDAY--------------- for($j = 0; $j < $this->nclasses; $j++) { if($Th == -1) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getTh()) { if(($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() >= $time[$r]) && ($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() < $time[$r+1])) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1]) { $table .= "\n\t\t | " . $this->classStorage[$j]->getName() . " " . $this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter() . " | "; $Th = $j; $filled = true; } else { $table .= "\n\t\t" . $this->classStorage[$j]->getName() . " " . $this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter() . " | "; $filled = true; } } } } else { if($j == $Th) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1]) { $table .= "\n\t\t"; $filled = true; } else { $table .= "\n\t\t | "; $Th = -1; $filled = true; } } } } // If the cell was not filled, fill it with an empty cell. if(!$filled) { $table .= "\n\t\t | "; } $filled = false; //---------------FRIDAY--------------- for($j = 0; $j < $this->nclasses; $j++) { if($F == -1) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getF()) { if(($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() >= $time[$r]) && ($this->classStorage[$j]->getSection($this->storage[$i][$j])->getStartTime() < $time[$r+1])) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1]) { $table .= "\n\t\t | " . $this->classStorage[$j]->getName() . " " . $this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter() . " | "; $F = $j; $filled = true; } else { $table .= "\n\t\t" . $this->classStorage[$j]->getName() . " " . $this->classStorage[$j]->getSection($this->storage[$i][$j])->getLetter() . " | "; $filled = true; } } } } else { if($j == $F) { if($this->classStorage[$j]->getSection($this->storage[$i][$j])->getEndTime() > $time[$r+1]) { $table .= "\n\t\t"; $filled = true; } else { $table .= "\n\t\t | "; $F = -1; $filled = true; } } } } // If the cell was not filled, fill it with an empty cell. if(!$filled) { $table .= "\n\t\t | "; } $filled = false; // End of row $table .= "\n\t | 
There are no possible schedules. Please try again.
'; } } //-------------------------------------------------- // Changes the title of the page. //-------------------------------------------------- function changeTitle($t) { $this->title = $t; } //-------------------------------------------------- // Make the time "pretty." //-------------------------------------------------- function prettyTime($t){ if($t > 1259) { $t = ($t-1200); return substr($t, 0, strlen($t)-2) . ":" . substr($t, strlen($t)-2, strlen($t)) . " PM"; } else { return substr($t, 0, strlen($t)-2) . ":" . substr($t, strlen($t)-2, strlen($t)) . " AM"; } } } ?>