פרק 3: שמירת מצבבניית פיצריה: חישוב המחירsub calcTotal() #calculate pizza cost based on current parameters { %sizelabels=('small'=>'small (8",$5)', 'medium'=>'medium (12",$8)', 'large'=>'large (16",$10)', 'xlarge'=>'x-large (18",$12)'); %sizeprices=('small'=>5, 'medium'=>8, 'large'=>10, 'xlarge'=>12); %toppingsprices=('small'=>.50, 'medium'=>.75, 'large'=>1.00, 'xlarge'=>1.25); $baseCost=$sizeprices{$size}; @allToppings=$cgiobject->param("order_toppings"); $toppingsCost=($#allToppings+1)*($toppingsprices{$size}); return $baseCost+$toppingsCost; } השגרה calcTotal בודקת את הערכים הנשלחים מהשדות הרלוונטים, ומחשבת את המחיר הסופי. בהתחלה מגדירים שלושה האשים. ההאש הראשון, sizetables%, ישמש בשגרת ה output_form ליצירת תגיות ל"כפתורי הבחירה" שישמשו לבחירת גודל הפיצה. השתמשנו כאן בהאש, מכיוון שנוח לשמור את מידע המחירים במקום אחד, כך שאם הם יתעדכנו יהיה כל יותר לבצע את העדכון בפועל. שני ההאשים האחרים, sizeprices% ו toppingsprices% מייחסים גדלים של פיצות לערכי הדולר ($), כך שפיצה קטנה, מקבלת ערך 5 ב sizeprices% וערך 0.5 ב toppingsprices%. אלו הם מחירי הבסיס לגדלים ולתוספות בהתאמה. השלב הבא הוא חישוב מחיר הפיצה בהינתן הגודל, השמור במשתנה size$. לאחר מכן מחשבים את מספר התוספות, ע"י יצירת המערך allToppings@, אשר לוקח רשימה של כל התוספות שנשלחו בעזרת הפרמטר order_topping. המבנה allToppings#$ מייצג את האינדקס הגבוה ביותר במערך, כך שאם ערכו הוא אפס משמעותו – תוספת אחת ברשימה. כך שאנו מוסיפים אחד לערך הזה ומכפילים במחיר התוספת לפיצה בגודל הנ"ל. לבסוף, אנו יכולים להוסיף את baseCost$ ואת toppingCost$ ולהחזיר את התוצאה כמחיר הכולל של הפיצה. בניית פיצריה: לקיחת
הזמנה
|