مقدمه
در دنیای توسعه وب، ساختن یک سیستم مدیریت مواد غذایی برای رستورانها، به ویژه با استفاده از زبان برنامهنویسی PHP و الگوی شیگرایی (OOP)، امری حیاتی و مهم محسوب میشود. این سیستمها، امکان نگهداری، ویرایش و مدیریت مواد غذایی، منوها، قیمتها و وضعیت موجودی را فراهم میآورند. در ادامه، به صورت کامل و جامع، مفاهیم، ساختارها و جزئیات مربوط به پیادهسازی مواد غذایی در یک کد منبع PHP بر پایه OOP را شرح میدهیم، تا درک عمیقی از این موضوع کسب کنید.
ساختار کلی سیستم مدیریت مواد غذایی در PHP/OOP
در ابتدا، باید توجه داشت که سیستم مدیریت مواد غذایی در یک رستوران، نیازمند چندین کلاس اصلی است که هر یک وظایف خاصی دارند. این کلاسها، شامل کلاس مواد غذایی (FoodItem یا Ingredient)، کلاس دستهبندی (Category)، کلاس مدیریت موجودی (Inventory) و کلاس مربوط به عملیات مربوط به منو و سفارشها هستند. این ساختار، به صورت منطقی و قابل توسعه طراحی میشود، تا در آینده بتوان به راحتی ویژگیهای جدید را اضافه کرد یا تغییرات لازم را ایجاد کرد.
کلاس مواد غذایی (FoodItem)
کلاس FoodItem، هسته اصلی هر سیستم است. این کلاس، اطلاعات مرتبط با هر نوع ماده غذایی را نگهداری میکند؛ از جمله نام، کد، قیمت، واحد اندازهگیری، وضعیت موجودی، تاریخ انقضا و دستهبندی مربوطه. در این کلاس، متدهای متعددی برای عملیاتهای مختلف وجود دارد؛ مثلاً، متدهای برای بروزرسانی قیمت، تغییر وضعیت موجودی، یا بازگرداندن اطلاعات مربوط به هر ماده غذایی. این کلاس، به عنوان نمونه، میتواند به شکل زیر تعریف شود:
php
class FoodItem {
private $id;
private $name;
private $categoryId;
private $price;
private $unit;
private $quantity;
private $expirationDate;
public function __construct($id, $name, $categoryId, $price, $unit, $quantity, $expirationDate) {
$this->id = $id;
$this->name = $name;
$this->categoryId = $categoryId;
$this->price = $price;
$this->unit = $unit;
$this->quantity = $quantity;
$this->expirationDate = $expirationDate;
}
public function updatePrice($newPrice) {
$this->price = $newPrice;
}
public function updateQuantity($amount) {
$this->quantity += $amount;
}
public function isExpired() {
return (strtotime($this->expirationDate) < time());
}
public function getDetails() {
return [
'id' => $this->id,
'name' => $this->name,
'category' => $this->categoryId,
'price' => $this->price,
'unit' => $this->unit,
'quantity' => $this->quantity,
'expiration' => $this->expirationDate,
];
}
}
کلاس دستهبندی (Category)
در کنار کلاس مواد غذایی، کلاس دستهبندی نقش مهمی دارد. این کلاس، دستههای مختلف مواد غذایی را تعریف میکند؛ از جمله سبزیجات، لبنیات، گوشت، میوه و غیره. این کار، کمک میکند تا مواد غذایی به صورت منطقی و سازمان یافته دستهبندی شوند، و عملیاتهایی مانند فیلتر کردن یا جستجو بر اساس دستهبندی، آسانتر انجام شود.
php
class Category {
private $id;
private $name;
public function __construct($id, $name) {
$this->id = $id;
$this->name = $name;
}
public function getId() {
return $this->id;
}
public function getName() {
return $this->name;
}
}
مدیریت موجودی (Inventory)
یکی دیگر از قسمتهای مهم، کلاس مدیریت موجودی است. این کلاس، نقش نگهداری و کنترل میزان مواد غذایی در انبارها را دارد. با کمک این کلاس، میتوان موجودی هر ماده غذایی را بروزرسانی کرد، کمبودها را شناسایی و هشدارهای لازم را صادر نمود، و گزارشهای دقیق درباره وضعیت انبار تهیه کرد.
php
class Inventory {
private $items = [];
public function addItem(FoodItem $item) {
$this->items[$item->getId()] = $item;
}
public function updateItemQuantity($id, $newQuantity) {
if (isset($this->items[$id])) {
$this->items[$id]->updateQuantity($newQuantity);
}
}
public function getItem($id) {
return isset($this->items[$id]) ? $this->items[$id] : null;
}
public function getAllItems() {
return $this->items;
}
}
نقش ارتباط بین کلاسها
در این ساختار، کلاس FoodItem به عنوان هسته اصلی، با کلاس Category ارتباط برقرار میکند. این ارتباط، از طریق شناسه دستهبندی انجام میشود، تا بتوان بر اساس دستهبندیها، عملیاتهای مختلف را پیادهسازی کرد. همچنین، کلاس Inventory، مجموعهای از اشیای FoodItem را در بر میگیرد، و عملیاتهای مربوط به مدیریت موجودی را بر روی آنها انجام میدهد.
پیادهسازی عملیاتهای عملیاتی
در کنار ساختارهای پایه، باید عملیاتهای عملیاتی مانند افزودن ماده غذایی جدید، بروزرسانی قیمت، حذف مواد منقضی شده، و گزارشگیری را پیادهسازی کرد. این عملیاتها، اغلب در قالب متدهای کلاسهای مختلف یا در کنترلرهای PHP قرار میگیرند.
مثال عملی
فرض کنید، میخواهید یک ماده غذایی جدید را به سیستم اضافه کنید. ابتدا باید یک شیء از کلاس FoodItem بسازید، سپس آن را به کلاس Inventory اضافه کنید:php
$apple = new FoodItem(1, "سیب", 2, 3000, "کیلوگرم", 50, "2023-12-31");
$inventory = new Inventory();
$inventory->addItem($apple);
در نتیجه، این سیستم، به صورت کامل و داینامیک، قادر است تا مواد غذایی، دستهبندیها، میزان موجودی، قیمتها و وضعیت انقضا را مدیریت کند. این کار، علاوه بر افزایش کارایی، موجب کاهش خطاهای انسانی و بهبود فرآیندهای کاری در رستوران میشود.