class createProjectFiles { private $createMinParts; private $createMaxParts; private $uniqueCarsCount; private $manufacturers; private $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; private $parts = array(); private $vehicles = array(); private $vehicleNumbers = array(); private $uniquePartNumbers = array(); private $uniqueCars = array(); private $partTransactions;
public function __construct() { $this->createMinParts = 500; $this->createMaxParts = 5000; $this->uniqueCarsCount = 50; $this->partTransactions = 10; $this->manufacturers = array ( 'Toyota', 'General Motors', 'Volkswagen', 'Hyundai', 'Ford', 'Nissan', 'Honda', 'PSA', 'Suzuki', 'Renault', 'Fiat', 'Darnier AG', 'Chrysler', 'BMW', 'Mazda', 'Mitsubishi', 'Tata', 'FAW', 'Geely', 'Cherry', 'Fuji' ); } public function setMinParts( $min ) { $this->createMinParts = $min; } public function setMaxParts( $max ) { $this->createMaxParts = $max; } public function setMaxCarCount( $count ) { $this->uniqueCarsCount = $count; } public function createPartTransactions( $partTransactions ) { $this->partTransactions = $partTransactions; } public function generateFiles() { $this->generateStock(); $this->addSubstitutePartsToStock(); $this->writeStockFile(); $this->writeVehicleFile(); sort( $this->uniquePartNumbers ); sort( $this->uniqueCars ); sort( $this->vehicleNumbers ); sort( $this->vehicles ); $this->writeTransFile(); } private function generateVehicleNumber() { if( $this->uniqueCarsCount > 0 ) { // create random car $vehicleNumber = rand( 10000 , 99999 ); $this->uniqueCars[] = $vehicleNumber; $this->uniqueCarsCount--; return sprintf( "%05s" , $vehicleNumber ); } else { // pick random existing car $vehicleNumber = $this->uniqueCars[ rand( 0 , count( $this->uniqueCars ) -1 ) ]; return sprintf( "%05s" , $vehicleNumber ); } } private function generatePartNumber() { $randomLetter1 = $this->chars[ rand( 0 , 25 ) ]; $randomLetter2 = $this->chars[ rand( 0 , 25 ) ]; $partNumber = rand( 1 , 99999 ); return $randomLetter1 . $randomLetter2 . sprintf( "%05s" , $partNumber ); } private function getExistingPartNumber() { $randError = rand( 0 , 5 ); if( $randError == 3 ) { //bogus part return "AA00000"; } else { return $this->uniquePartNumbers[ rand( 0 , count( $this->uniquePartNumbers ) - 1 ) ]; } } private function getExistingVehicleNumber() { $randError = rand( 0 , 5 ); if( $randError == 3 ) { //bogus car return "00000"; } else { $vehicleNumber = $this->uniqueCars[ rand( 0 , count( $this->uniqueCars ) -1 ) ]; return sprintf( "%05s" , $vehicleNumber ); } } private function generateStock() { for( $i = 0; $i < rand( $this->createMinParts , $this->createMaxParts ); $i++ ) { $partNumber = $this->generatePartNumber(); $vehicleNumber = $this->generateVehicleNumber(); $description = "--------dont care--------"; $quatity = rand( 0 , 99999 ); $price = rand( 10 , 999999 ); $reorderL = rand( 0 , 999 ); $reorderQ = rand( 0 , 99999 ); $numparts = rand( 0 , 10 ); if( in_array( $partNumber , $this->uniquePartNumbers ) ) { continue; } else { $part = array ( "partNumber" => $partNumber, "vehicleNumber" => $vehicleNumber, "description" => $description, "quatity" => sprintf( "%05s" , $quatity ), "price" => sprintf( "%06s" , $price ), "reorderL" => sprintf( "%03s" , $reorderL ), "reorderQ" => sprintf( "%05s" , $reorderQ ), "numSubparts" => sprintf( "%02s" , $numparts ), "part1" => '', "part2" => '', "part3" => '', "part4" => '', "part5" => '', "part6" => '', "part7" => '', "part8" => '', "part9" => '', "part10" => '' ); $this->parts[] = $part; if( !in_array( $vehicleNumber , $this->vehicleNumbers ) ) { $this->vehicleNumbers[] = $vehicleNumber; $this->vehicles[ $vehicleNumber ] = array( $vehicleNumber , "-- vehicle description --" , sprintf( "%20s" , $this->manufacturers[ rand ( 0 , count( $this->manufacturers ) - 1 ) ] ) ); } $this->uniquePartNumbers[] = $partNumber; } } } private function addSubstitutePartsToStock() { // add substitute parts to the parts from the parts for( $t=0; $t < count( $this->parts ); $t++ ) { $thepart = $this->parts[ $t ]; $numofsubparts = $thepart[ 'numSubparts' ]; $ignoreDuplicates = array(); for( $y =0; $y < $numofsubparts; $y++ ) { $rand = rand( 0 , count( $this->parts ) -1 ); if( in_array( $this->parts[ $rand ][ 'partNumber' ], $ignoreDuplicates ) ) { $y = $y -1; continue; } else { $index = "part" . ( $y + 1 ); $this->parts[ $t ][ $index ] = $this->parts[ $rand ][ 'partNumber' ]; $ignoreDuplicates[] = $this->parts[ $rand ][ "partNumber" ]; } } } } private function writeStockFile() { // bang out the stock master file $fp = fopen( "INAUTO-SMF.DAT" , 'w' ); if( $fp ) { foreach( $this->parts as $part ) { fwrite( $fp , sprintf( "%-128s" , $part[ 'partNumber' ] . $part[ 'vehicleNumber' ] . $part[ 'description' ] . $part[ 'quatity' ] . $part[ 'price' ] . $part[ 'reorderL' ] . $part[ 'reorderQ' ] . $part[ 'numSubparts' ] . $part[ 'part1' ] . $part[ 'part2' ] . $part[ 'part3' ] . $part[ 'part4' ] . $part[ 'part5' ] . $part[ 'part6' ] . $part[ 'part7' ] . $part[ 'part8' ] . $part[ 'part9' ] . $part[ 'part10' ] ) . "\r\n" ); } fclose( $fp ); } } private function writeVehicleFile() { $fp = fopen( "INAUTO-VEHICLE.DAT" , 'w' ); if( $fp ) { ksort( $this->vehicles ); foreach( $this->vehicles as $vehicle ) { fwrite( $fp , sprintf( "%-49s" , $vehicle[ 0 ] . $vehicle[ 1 ] . $vehicle[ 2 ] ) . "\r\n" ); } fclose( $fp ); } } private function writeTransFile() { $fp = fopen( "INAUTO-TRANS.DAT" , 'w' ); if( $fp ) { $partNumberTransactions = $this->createOrderedPartNumberlist(); for( $partTrans = 0; $partTrans < count( $partNumberTransactions ); $partTrans++ ) { $i = 0; $records = array(); $p = rand( 1 , 5 ); while( $i < $p ) { $type = rand( 1 , 5 ); switch( $type ) { case 1: $records[ "$type" ] = $this->createInsertion( $partNumberTransactions[ $partTrans ] ); break; case 2: $records[ "$type" ] = $this->createDeletion( $partNumberTransactions[ $partTrans ] ); break; case 3: $records[ "$type" ] = $this->createQuantity( $partNumberTransactions[ $partTrans ] ); break; case 4: $records[ "$type" ] = $this->createAddSub( $partNumberTransactions[ $partTrans ] ); break; case 5: $records[ "$type" ] = $this->createRemoveSub( $partNumberTransactions[ $partTrans ] ); break; } $i++; } ksort( $records ); foreach( $records as $key => $val ) { fwrite( $fp , sprintf( "%-129s" , $val ) . "\r\n" ); } } fclose( $fp ); } } private function createOrderedPartNumberlist() { $list = array(); for( $i = 0; $i < $this->partTransactions; $i++ ) { if( $i % 5 > 0 ) { // choose existing part number $list[] = $this->uniquePartNumbers[ rand( 0 , count( $this->uniquePartNumbers ) - 1 ) ]; } else { $list[] = $this->generatePartNumber(); } } sort( $list ); return $list; } private function createDeletion( $part ) { return "2" . $part; } private function createQuantity( $part ) { return "3" . $part . sprintf( "%05s" , rand( 0 , 99999 ) ); } private function createAddSub( $part ) { return "4" . $part . $this->getExistingPartNumber(); } private function createRemoveSub( $part ) { return "5" . $part . $this->getExistingPartNumber(); } private function createInsertion( $part ) { $partNumber = $part; $vehicleNumber = $this->generateVehicleNumber(); $description = "--------dont care--------"; $quatity = rand( 0 , 99999 ); $price = rand( 10 , 999999 ); $reorderL = rand( 0 , 999 ); $reorderQ = rand( 0 , 99999 ); $numparts = rand( 0 , 10 ); $part = array ( "partNumber" => $partNumber, "vehicleNumber" => $vehicleNumber, "description" => $description, "quatity" => sprintf( "%05s" , $quatity ), "price" => sprintf( "%06s" , $price ), "reorderL" => sprintf( "%03s" , $reorderL ), "reorderQ" => sprintf( "%05s" , $reorderQ ), "numSubparts" => sprintf( "%02s" , $numparts ), "part1" => '', "part2" => '', "part3" => '', "part4" => '', "part5" => '', "part6" => '', "part7" => '', "part8" => '', "part9" => '', "part10" => '' ); $ignoreDuplicates = array(); for( $y =0; $y < $numparts; $y++ ) { $randSubPart = $this->getExistingPartNumber(); if( in_array( $randSubPart , $ignoreDuplicates ) ) { $y = $y -1; continue; } else { $index = "part" . ( $y + 1 ); $part[ $index ] = $randSubPart; $ignoreDuplicates[] = $randSubPart; } } return "1" . $part[ 'partNumber' ] . $part[ 'vehicleNumber' ] . $part[ 'description' ] . $part[ 'quatity' ] . $part[ 'price' ] . $part[ 'reorderL' ] . $part[ 'reorderQ' ] . $part[ 'numSubparts' ] . $part[ 'part1' ] . $part[ 'part2' ] . $part[ 'part3' ] . $part[ 'part4' ] . $part[ 'part5' ] . $part[ 'part6' ] . $part[ 'part7' ] . $part[ 'part8' ] . $part[ 'part9' ] . $part[ 'part10' ]; }
}
$creator = new createProjectFiles(); $creator->setMinParts( 500 ); // minimum amount of parts $creator->setMaxParts( 5000 ); // maximum amount of parts $creator->setMaxCarCount( 50 ); // after X cars, no new one will be gnerated and the old car numbers reused $creator->createPartTransactions( 120 ); // number of parts, may contain up to 3 transations per part $creator->generateFiles();