Feladatmegoldás
Valósítsa meg az alábbi feladatot a tanult programozási nyelven:
Megoldás megvalósítása PHP nyelven
adatszerkezet.php
<?
/* 1. FELADAT: Adatszerkezet kialakítása */
/* Raktar nevű osztály (igazából szinte ez csak egy rekord) definiálása */
class Raktar
{
public $rkod ;
public $rnev ;
public $rar ;
public $rdb ;
/* Raktar konstruktora: eredménye egy új rekord az adatokkal */
function __construct( $sz )
{
$tomb = explode( ";" , $sz ) ;
$this->rkod = $tomb[0] ;
$this->rnev = $tomb[1] ;
$this->rar = $tomb[2] ;
$this->rdb = $tomb[3] ;
}
}
/* Megrendeles nevű osztály definiálása */
class Megrendeles
{
public $mdatum ;
public $mazon ;
public $mmail ;
/* Megrendeles konstruktora: eredménye egy új rekord az adatokkal */
function __construct( $sz )
{
$tomb = explode( ";" , $sz ) ;
$this->mdatum = $tomb[1] ;
$this->mazon = $tomb[2] ;
$this->mmail = $tomb[3] ;
}
}
/* Tetel nevű osztály definiálása */
class Tetel
{
public $tazon ;
public $tkod ;
public $tdb ;
/* Tetel konstruktora: eredménye egy új rekord az adatokkal */
function __construct( $sz )
{
$tomb = explode( ";" , $sz ) ;
$this->tazon = $tomb[1] ;
$this->tkod = $tomb[2] ;
$this->tdb = $tomb[3] ;
}
}
?>
beolvasas.php
<?
/* Adatszerkezet */
include("adatszerkezet.php") ;
/* 1. FELADAT (folytatás): Adatok beolvasása */
/* raktar.csv beolvasása táblázatba - ezt is meg lehetne osztályként csinálni */
$raktar[] = array() ;
$fp = fopen("../forras/raktar.csv" , "r") ;
$rsordb = 0 ;
while( $adatsor=fgets($fp) )
{
$rsordb++ ;
$raktar[$rsordb] = new Raktar( $adatsor ) ;
}
fclose( $fp ) ;
/* rendeles.csv beolvasása: soronként a megfelelő táblázatba */
$megrendeles[] = array() ;
$tetel[] = array() ;
$fp = fopen("../forras/rendeles.csv" , "r") ;
$msordb = 0 ;
$tsordb = 0 ;
while( $adatsor=fgets($fp) )
{
if( substr($adatsor,0,1)=="M" )
{
$msordb++ ;
$megrendeles[$msordb] = new Megrendeles( $adatsor ) ;
}
if( substr($adatsor,0,1)=="T" )
{
$tsordb++ ;
$tetel[$tsordb] = new Tetel( $adatsor ) ;
}
}
fclose( $fp ) ;
?>
beolvasott_adatok.php (ez a megjelenítés nem része az eredeti feladatnak)
<link href='megjelenites.css' type='text/css' rel='stylesheet'>
<?
/* Adatbeolvasás */
include("beolvasas.php") ;
/* Táblázatok listázása (nem része a vizsgafeladatnak) */
print "<table class=adat>" ;
for( $i=1 ; $i<=$rsordb ; $i++ )
{
print "
<tr>
<td> " . $raktar[$i]->rkod . " </td>
<td> " . $raktar[$i]->rnev . " </td>
<td> " . $raktar[$i]->rar . " Ft </td>
<td> " . $raktar[$i]->rdb . " db </td>
</tr>
";
}
print "</table>" ;
print "<table class=adat>" ;
for( $i=1 ; $i<=$msordb ; $i++ )
{
print "
<tr>
<td> " . $megrendeles[$i]->mdatum . " </td>
<td> " . $megrendeles[$i]->mazon . " </td>
<td> " . $megrendeles[$i]->mmail . " </td>
</tr>
";
}
print "</table>" ;
print "<table class=adat>" ;
for( $i=1 ; $i<=$tsordb ; $i++ )
{
print "
<tr>
<td> " . $tetel[$i]->tazon . " </td>
<td> " . $tetel[$i]->tkod . " </td>
<td> " . $tetel[$i]->tdb . " db </td>
</tr>
";
}
print "</table>" ;
?>
levelek.php - eredményei: levelek.csv és beszerzes.csv
<link href='megjelenites.css' type='text/css' rel='stylesheet'>
<table class='adat'>
<?
/* Adatbeolvasás */
include("beolvasas.php") ;
/* 2-3. FELADAT: Rendelések feldolgozása */
$fp = fopen( "levelek.csv" , "w") ;
$mazon = 1 ; // megrendelésazonosító
$teljesitheto = true ;
$x = 0 ; // fizetendő összeg
for( $t=1 ; $t<=$tsordb ; $t++ ) /* Végnézzük a tételeket */
{
/* Kiválasztás progr. tétellel megkeressük a raktárban */
$i=1 ;
while( $tetel[$t]->tkod != $raktar[$i]->rkod )
{
$i++ ;
}
/* Levononjuk a készletből */
$raktar[$i]->rdb -= $tetel[$t]->tdb ;
/* Megnézzük, teljesíthető-e */
if( $raktar[$i]->rdb >= 0 ) $x += $tetel[$t]->tdb * $raktar[$i]->rar ;
else $teljesitheto = false ;
print "
<tr>
<td>$mazon.</td>
<td>$t.</td>
<td>". $raktar[$i]->rnev . "</td>
<td>" . $tetel[$t]->tdb . " db</td>
<td>(marad: " . $raktar[$i]->rdb . ")</td>
</tr>
";
/* Ha a megrendelés végéhez értünk */
if( $t==$tsordb || $tetel[$t+1]->tazon != $mazon )
{
/* kiértékelünk, kiírunk */
if($teljesitheto)
{
$szoveg = "A rendelését két napon belül szállítjuk. " ;
$szoveg .= "A rendelés értéke: $x Ft\r\n" ;
$statusz = "Szállítható. Értéke: <b>$x Ft</b>." ;
}
else
{
$szoveg = "A rendelés függő állapotba került. " ;
$szoveg .= "Hamarosan értesítjük a szállítás időpontjáról.\r\n" ;
$statusz = "<i>A rendelés függő állapotba került.</i>" ;
}
fwrite( $fp , str_replace("\r\n","",$megrendeles[$mazon]->mmail) . ";" . $szoveg ) ;
print "<tr><td colspan=5><b>" . $megrendeles[$mazon]->mmail . "</b></td></tr>" ;
print "<tr><td colspan=5>$statusz</td></tr>" ;
print "<tr><td colspan=5><hr></td></tr>" ;
/* előkészítjük a változókat a következő megrendelés feldolgozásához */
$mazon++ ;
$teljesitheto = true ;
$x = 0 ;
}
}
fclose( $fp ) ;
/* 4. FELADAT: beszerzes.csv elkészítése */
$fp = fopen( "beszerzes.csv" , "w") ;
for( $r=1 ; $r<=$rsordb ; $r++ ) /* Végnézzük a rakrtárt */
{
if( $raktar[$r]->rdb < 0 )
{
fwrite( $fp , $raktar[$r]->rkod . ";" . -1*$raktar[$r]->rdb . "\r\n" ) ;
}
}
fclose( $fp ) ;
?>
</table>