برنامه سازی پیشرفته نیمسال اول 94-93 دانشکده مهندسی کامپیوتر تمرین دوم پ پیمان دودانگه زمان تحویل 3:آذر .1موعد ارسال تمرین ساعت 95:32روز دوشنبه مورخ 1525/9/3است. .9تمرین باید به صورت حضوری تحویل داده شود و استفاده از کامنت ،و ساختار کد نمره خواهد داشت. بنابراین نمره کامل از سیستم داوری به معنای نمره کامل نبوده و فقط بخشی از نمره شما خواهد بود. .5در صورت داشتن هرگونه مشکل ،سوال خود را با تگ مناسب در Piazzaمطرح کنید. .4با هر گونه تقلب برخورد جدی خواهد شد. .3در این تمرین نیازی به زدن تابع mainنیست و صرفا باید کالس ها پیاده سازی شوند. .6شما می توانید غیر از توابع نام برده شده هر فیلد و یا تابعی که خواستید اضافه کنید اما توجه کنید که تمام موارد مضاف (اعم از فیلد یا تابع) باید privateباشند. رستوران بین المللی آقای شایسته به تازگی صاحب ثروت بزرگی شده است و از آنجایی که عالقه ی زیادی به غذا دارد تصمیم گرفته است تعدادی رستوران بین المللی در کشورهای مختلف تاسیس کند .او پس از عقد قرارداد با پیمان کاران ساختمان های رستوران ها را آماده کرده است .او برای هر رستوران مقدار 01111دالر بودجه اولیه درنظر گرفته و آن را به صندوق مربوط به آن واریز کرده است .با توجه به عالیق آقای شایسته قرار است در هرکدام از این رستوران ها 5نوع غذا (چینی ،ایتالیایی ،فرانسوی ،هندی و ایرانی) و از هرکدام 01مدل سرو شود( .در نتیجه 011مدل غذا در رستوران سرو می شود) برای باالبردن کالس رستوران و سطح رضایت مشتریان از خدمات ،در هر شعبه 31گارسون استخدام نموده است. این گارسون ها در دسته های 5تایی قرار می گیرند و هر دسته به یک زبان زنده دنیا مسلط است( .چینی، ایتالیایی ،فرانسوی ،هندی ،ایرانی و انگلیسی) که گارسون های انگلیسی فقط به مشتریانی که از 5ملیت نام برده شده نیستند سرویس می دهند. یک قانون نانوشته در این رستوران هست که همه مشتریانی که غذا خورده اند رعایت می کنند: صرف نظر از قیمت غذایی که خورده اند به گارسون 3دالر انعام می دهند .هر گارسون به ازای سرویس دادن به هر 01مشتری 01 ،دالر هم حقوق می گیرد. با توجه به شرایط سرآشپزان قرار شده است غذاها سری به سری پخته شود؛ یعنی هر وقت کل غذاهای مربوط به یک ملیت تمام شد آشپز می آید ،موجودی غذاهای ملیت خودش را به مقدار اولیه ( 01تا از هر مدل) می رساند و می رود. اگر مشتری وارد رستوران شود و جا نباشد ،به طور اتوماتیک خمس مشتریان موجود در رستوران تسویه حساب کرده و مشتری مذکور وارد می شود( .بنابراین مشتری بدون جا نمی ماند) هر مشتری هنگام تسویه حساب برگه نظر سنجی که به وی داده شده و پر کرده است را تحویل می دهد .طبق رای داده شده (عدد صحیحی بین 0و )01کیفیت غذا تعیین می گردد( .جزء صحیح میانگین رای مشتریان در هر خرید) (هربار که میانگین می گیرند جزء صحیح را حساب می کنند و رای بعدی با همین جزء صحیح ،میانگین گرفته می شود) همچنین هر مشتری منوی مخصوص به خود دارد .بدین صورت که مشتری میزان پول درون جیبش ،عادت غذاییش (گیاهخوار بودن یا نبودن) ،ملیتش و غذای ملیتی که میخواهد بخورد ،می گوید و طبق این موارد برای او یک منو تشکیل داده می شود که عالوه بر رعایت نوع غذایی ،غذایی که توانایی خریدش را ندارد از منو حذف می گردد. غذاهای این منو بر حسب کیفیتشان مرتب شده اند توجه کنید عالوه بر هزینه غذا پول گارسون هم باید داده شود غذاهایی که تمام شده اند در منو نباید باشند مشتری هایی که گیاهخوار نیستند ،گیاه هم میخورند! مشتری همیشه اولین غذا را در منوی مخصوصش انتخاب می کند. تخفیف :اگر مشتری قبال حتی یکبار به این رستوران آمده باشد 0دالر تخفیف می گیرد. اداره ی این رستوران ها کامال آقای شایسته را مشغول کرده است ،به طوری که دیگر وقت لذت بردن از ثروتش را ندارد .بنابراین حاضر است به ازای مبلغ قابل توجهی برنامه نویسی استخدام کند تا برنامه ای برای کنترل رستوران و همچنین باال بردن رضایت مشتریان (به خاطر الکترونیکی شدن کارها) بنویسد. بشتابید! بشتابید! چنین فرصت هایی کم پیش می آید. در این برنامه شما باید کالس ها و توابع زیر را پیاده سازی کنید: public class restaurant ;)public restaurant(String name, int capacity کالس را با گرفتن نام رستوران و ظرفیت آن می سازد. ;)public restaurant(String name کالس را با نام گرفته شده می سازد و ظرفیت آن را به طور پیش فرض 51قرار می دهد. ;)(public String getName نام رستوران را برمیگرداند. ;)(public int getFund مقدار موجودی فعلی صندوق را برمیگرداند. ;)(public int getCapacity ظرفیت فعلی رستوران را برمیگرداند. ;)(public Food[] getFoods کل غذاهای رستوران ( 011مدل) را در یک آرایه برمیگرداند( .غذاها در آرایه به ترتیب ملیت های داده شده است و 5مدل آخر از هر ملیت مخصوص گیاهخواران است) ;)(public Customer[] getCustomers مشتری های نشسته در سالن را در یک آرایه بر میگرداند. ;)(public Waiter[] getWaiters تمام گارسون های مشغول به کار در رستوران را در یک آرایه برمیگرداند. ;)public void setCapacity(int capacity مقدار ورودی را به عنوان ظرفیت فعلی رستوران قرار می دهد. ;)public void cooking(char nationality سرآشپز ملیت ورودی می آید و موجودی غذاها را تکمیل می کند. ;)public void settlement(Customer customer مشتری داده شده به تابع ،تسویه حساب کرده و رستوران را ترک می کند. public void CustomerEntry(char nationality, char foodType, char menuType, ;)int money, int vote مشتری با مشخصات ورودی وارد رستوران می شود .پس از تشکیل منو برای او اگر sadنباشد ،سر جای خود میرود و انعام گارسون را همین ابتدا می دهد. class Customer public Customer(int id, char nationality, char foodType, char menuType, ;)int money, int vote کالس را با گرفتن خصوصیات مربوط به مشتری می سازد( .توجه :برای سادگی فکر می کنیم که مشتری در همان ابتدا رای خود به غذا را می داند) ;)(public char getNationality ملیت مشتری را برمیگرداند. ;)(public char getFoodType نوع غذایی مشتری از لحاظ گیاهخواری را برمیگرداند. ;)(public int getId شماره اشتراک مشتری را بر میگرداند( .عددی صحیح مثبت که از 0شروع می شود) ;)(public int getMoney میزان پول مانده در جیب مشتری در هر لحظه را می دهد. ;)(public int getVote رای مشتری را بر میگرداند. ;)(public Menu getMenu منوی مخصوص به مشتری را برمیگرداند. ;)public void setMenu(Menu menu منوی ورودی را به مشتری اختصاص می دهد. ;)public void setVote(int vote رای ورودی را به مشتری اختصاص می دهد. ;)(public boolean sad اگر منوی اختصاص داده شده به مشتری تهی باشد (یعنی هیچ غذایی مطابق میل او در لیست نیست) مشتری ناراحت می شود و بدون اینکه عضو مشتریان رستوران به شمار رود آنجا را ترک می کند. ;)(public int leaving مشتری به غذا رای می دهد ،هزینه اش را خودش حساب می کند و روی میز می گذارد .آماده میشود که رستوران او را تسویه حساب کند( .عدد برگردانده شده همان هزینه محاسبه شده است که قرار است به صندوق رود) class Waiter ;)public Waiter(int id, char nationality کالس گارسون را با گرفتن شماره استخدامی و ملیت آن می سازد. ;)(public int getId شماره استخدامی گارسون را بر میگرداند( .عددی صحیح و مثبت که از 0شروع می شود) ;)(public char getNationality ملیت گارسون را برمیگرداند. ;)(public int getSalary کل پول بدست آورده شده توسط گارسون را تا آن لحظه برمیگرداند. ;)(public int getCustomers تعداد مشتریانی که تا به حال به آنان سرویس داده است برمیگرداند. ;)public void incrementCustomers(int customers تعداد مشتریان سرویس داده شده را یکی زیاد می کند. ;)public void setSalary(int salary پول گارسون را به اندازه مقدار ورودی زیاد می کند. class Food public Food(int id, int quality, int internationalQuality , char nationality ;) , char foodType کالس را با گرفتن شماره غذا ،نوع و ملیتش و کیفیت های اولیه اش می سازد. کیفیت های اولیه برای غذاهای هر ملیت 05 ،تای اول در دسته های 5تایی به ترتیب 5-7-01 ،است. 5تای آخر که مربوط به گیاهخواران است کیفیت 8دارند. کیفیت بین الملل از نظرات مشتریانی با ملیت های متفاوت با غذا تعیین می شود و کیفیت معمولی را مشتریان خود آن کشور تعیین می کنند. ;)(public char getNationality ملیت غذا را برمیگرداند. ;)(public int getId شماره شناسایی غذا را برمیگرداند. ;)(public int getQuality کیفیت معمولی غذا را برمیگرداند. ;)(public int getInternationalQuality کیفیت بین المللی غذا را برمیگرداند. ;)(public int getNumber تعداد موجودی غذا در این لحظه را برمیگرداند. ;)(public char getFoodType نوع غذا را برمیگرداند. ;)public void setNumber(int number تعداد غذا را برابر مقدار ورودی می کند. ;)public void setQuality(int quality کیفیت معمولی غذا را برابر مقدار ورودی می کند. ;)public void setInternationalQuality(int internationalQuality کیفیت بین المللی غذا را برابر مقدار ورودی می کند. ;)(public boolean isFinished اگر غذا تمام شده باشد true ،برمیگرداند. class Menu ;)public Menu(Food[] retaurantFoods,Customer myCustomer کالس را با گرفتن لیست غذاهای رستوران و مشتری موردنظرش می سازد. ;)(public Food[] getMenuFoods غذاهای موجود در منوی ساخته شده را در یک آرایه برمیگرداند. ;)(public Customer getMyCustomer مشتری که صاحب منو است برمیگرداند. ;)public void setMyCustomer(Customer myCustomer مشتری صاحب منو را تغییر داده و برابر مشتری ورودی می کند. Nationality = ‘c’: china ‘i’: Italian ‘f’: French ‘h’: Indian ‘p’: Iranian ‘e’: English Food type = ‘v’: Vegetarian or ‘n’: non-vegetarian غذاهای منو مربوط به کدام ملیت می شود = Menu type افراد می توانند از هر ملیتی باشند ،میتوانید هر کاراکتری که خارج از این ها بود ملیت انگلیسی فرض کنید. شرور ها و قهرمان ها در دنیایی اف سانه ای ،چندین شهر وجود دارد .مردم هر شهر از لحاظ دا شتن نیروی اف سانه ای ،به چند د سته تقسیم میشوند :ابر قهرمان ها ،شرور ها و مردم معمولی .ابر قهرمان ها و شرور ها ،در زمانی که از قدرت هایشان استفاده نمیکنند ،مانند مردم معمولی زندگی میکنند و کار مشخصی دارند .هر شهر میتواند به دالیل مختلف ،به شهههر دیگری حمله کند در این جنگ ،هر شهههر ،ابر قهرمان هایش را برای حمله و دفاع میفرسههتد .در هر جنگ فقط یک شهر پیروز میشود و شهر دیگر از بین میرود .قهرمان های شهر بازنده ،یا میمیرند ،یا به مردم معمولی تبدیل می شوند و شرور هایش ،جزو قهرمان های شهر پیروز می شوند .مردم شهر بازنده نیز به مردم شهر اول میپیوندند و تمام منابع شهر اول ،مانند ساختمان های شهر اول ،به شهر دوم میرسد. در این دنیا ،گاهی حوادثی طبیعی رخ میدهد که باعث میشههود افراد ،یا نیرو های افسههانه ای به دسههت آورند ، نیروهایشان را از دست بدهند ،نیرو هایشان ضعیف یا قوی شود و یا کشته شوند . در این برنامه شما باید کالس ها و توابع زیر را پیاده سازی کنید: public class Town ;) public Town(String name کالس را با گرفتن نام شهر میسازد. )public void addBuilding(Building building یک ساختمان میگیرد و آن را به ساختمان های شهر اضافه میکند . ;)(public String printVillainsNames نام شرور های شهر را با یک فاصله بر میگرداند. )(public void printHeroNames نام قهرمان های شهر را با یک فاصله چاپ میکند. )public Town defend(Town town,Hero hero با گرفتن شهر حمله کننده ،و قهرمانی که آن شهر برای حمله استفاده کرده است ،باید با توجه به نیرویی که قهرمان آن شهر دارد ،از میان قهرمان های خودش ،قهرمانی با آن نیرو را انتخاب کند( نیرویی که اسم یکسان با آن نیرو داشته باشد) و به جنگ بفرستد .در این جنگ ،قهرمانی پیروز است که قدرت نیرویش بیشتر است .اگر شهر دوم ،قهرمانی با آن قدرت خاص را نداشته باشد ،باید قهرمانی را به جنگ بفرستد که نیرویی دارد که حاصل ضرب قدرت و مرتبه اش maximumباشد .در این حالت ،پیروز جنگ ،کسی است که حاصل ضرب قدرت و مرتبه ی نیرویش بیشتر باشد .بدیهی است که شهر قهرمان پیروز ،پیروز میشود و شهر قهرمان دیگر ،باتوجه به توضیحات سوال ،باید خالی شود. ;)public void addHero(Hero hero یک قهرمان را به قهرمان های شهر اضافه میکند . ;)public void addVillain(Villain villain یک شرور میگیرد و به شرور های شهر اضافه میکند . ;class People ;) public People(String name , String job , Town town , Building position این کالس ،مردم شهر را با گرفتن نام ،شغل ،شهر آنها و ساختمانی که در آن قرار دارند میسازد. . ;)(public String getInfo نام و شغل شخص را با یک فاصله بر میگرداند. ;)public void changePosition(Building newPosition یک ساختمان میگیرد و جای فرد را عوض میکند و به آن ساختمان میبرد. , ;class Hero public Hero(String name , String job , Town town , Building position ;)List<Superpower> superpowers این کالس یک قهرمان را با گرفتن نام ،شغل ،شهر ،محلی که در آن قرار دارد و لیست نیرو های او میسازد. )public void addSuperpower(Superpower superpower یک نیرو میگیرد و آن را به نیرو های قهرمان اضافه میکند . ;)(public List getSuperpowers نیرو های قهرمان را برمیگرداند . ;)(public String getInfo رشته ای شامل نام و شغل و تعداد نیرو ها را با یک فاصله از همدیگر بر میگرداند. class Villain; public Villain(String name , String job , Town town , Building position List<Superpower> superpowers); , . محلی که در آن قرار دارد و لیست نیرو های او میسازد، شهر، شغل، این کالس یک شرور را با گرفتن نام public void addSuperpower(Superpower superpower) . یک نیرو میگیرد و آن را به نیرو های شرور اضافه میکند public List getSuperpowers(); . نیرو های شرور را برمیگرداند public String getInfo(); .رشته ای شامل نام و شغل را با یک فاصله از همدیگر بر میگرداند class Superpower; public Superpower(String name , int strength, int level); یک نیرو را با گرفتن نام و امتیاز و مرتبه ی آن میسازد ;)(public String returnName نام نیرو را باز میگرداند. ;)setStrength(int newStrength public void یک عدد جدید میگیرد و به جای قدرت نیرو میگذارد. ;)(getStrength public int قدرت نیرو را باز میگرداند. ;class Building ;)public Building(String name , int height , Town town ساختمان را باگرفتن نام و ارتفاع و شهر آن میسازد. ;)(public String getPopulation نام آدم های داخل ساختمان را ،هر کدام را در یک خط ،بر میگرداند. ;)(public String getInfo رشته ای شامل نام ساختمان ،ارتفاع آن و نام شهر آن که با یک فاصله از هم قرار دارند را برمیگرداند. class NaturalDisaster )public NaturalDisaster(Building position, int strength , Superpower superpower این کالس ،بالیای طبیعی را با گرفتن مکان نزول بال و قدرت آن و ابر قدرتی که میتواند بدهد ،شبیه سازی میکند .این ابر قدرت میتواند nullباشد. )(attack public void زمانی که این تابع اجرا شود ،اگر superpowerکالس مربوط به آن null ،باشد ،تمام مردم عادی کشته میشوند .تمام قهرمان ها و یا اشرار داخل ساختمان ،به اندازه ی قدرت بال ،از قدرت تمام نیرو هایشان کاسته میشود و اگر قدرت نیرو هایشان ،منفی یا صفر شود ،آن نیرو را از دست میدهند .اگر یک قهرمان یا شرور ، تمام نیرو هایش را از دست بدهد ،به یک فرد عادی تبدیل میشود . اگر superpowerوجود داشته باشد ،آن superpowerبه تمام افراد اضافه میشود و اگر قهرمان یا شروری ، آن superpowerرا داشته باشد ،به اندازه ی قدرت آن superpowerبه قدرت superpowerخودش اضافه میشود .توجه داشته باشید که اگر مردم عادی قدرت بگیرند ،به قهرمان تبدیل میشوند. class LightningHit public LightningHit(Building position, int strength , SuperPower superpower , int ;)minHeight این کالس ،نوعی از بالیای طبیعی را شبیه سازی میکند که درآن ،صاعقه به یکی از ساختمان ها برخورد میکند و اگر ارتفاع ساختمان مساوی یا بیشتر از مقدار minHightباشد ، )(attack public void زمانی که این تابع اجرا شود ،اگر superpowerکالس مربوط به آن null ،باشد ،تمام مردم عادی کشته میشوند .تمام قهرمان ها و یا اشرار داخل ساختمان ،به اندازه ی قدرت بال ،از قدرت تمام نیرو هایشان کاسته میشود و اگر قدرت نیرو هایشان ،منفی یا صفر شود ،آن نیرو را از دست میدهند .اگر یک قهرمان یا شرور ، تمام نیرو هایش را از دست بدهد ،به یک فرد عادی تبدیل میشود . اگر superpowerوجود داشته باشد ،آن superpowerبه تمام افراد اضافه میشود و اگر قهرمان یا شروری ، آن superpowerرا داشته باشد ،به اندازه ی قدرت آن superpowerبه قدرت superpowerخودش اضافه میشود .توجه داشته باشید که اگر مردم عادی قدرت بگیرند ،به قهرمان تبدیل میشوند. در این تمرین باید تا حد امکان ،از مفاهیم وراثت استفاده کنید. موفق باشید
© Copyright 2025 Paperzz