پارس‌کدرز چگونه کار می‌کند؟

از پارس‌کدرز بیشترین بهره را ببرید و رویای کاری خود را زندگی کنید.

پارس‌کدرز خریداران یا کارفرمایان را به مجری‌ها /فریلنسرهای خبره‌ای متصل می‌کند که برای انجام پروژه آماده هستند.

طراحی برنامه ای برای مدیریت سفرهای یک آژانس مسافرتی

پنج سال پیش منتشر شده

تعداد بازدید: 784

کد پروژه: 72048


شرح پروژه

می خواهیم برنامه ای برای مدیریت سفرهای یک آژانس مسافرتی طراحی کنیم.

کلاس Trip
* خصوصیتها:
برای این کار لازم است ابتدا کلاس Trip را برای تعریف دادهها و عملیات مربوط به سفرها )بلیطها( تعریف کنید. این کلاس دارای
خصوصیتهای کد سفر، تاریخ حرکت )از نوع کلاس Date که خودتان تعریف میکنید(، ساعت حرکت )از نوع کلاس Time که
خودتان تعریف میکنید(، ظرفیت )تعداد کل بلیط قابل فروش(، تعداد بلیط فروخته شده، قیمت بلیط، مبدا و مقصد سفر )بصورت
رشتهای که آرایهای از کاراکترها میباشد(، و مدت سفر )مدت زمانی که رفتن از مبدا به مقصد طول میکشد، به واحد ساعت( می
باشد که بصورت دسترسی private تعریف شدهاند و برای به روز رسانی و نمایش هرکدام نیاز به توابع setter و getter میباشد
)مجموعا 18 تابع برای 9 خصوصیت(. تابع setter خصوصیت کد سفر متفاوت است که توضیح آن در ادامه آمده است.
* سازندهها:
1 . برای این کلاس ابتدا سازندهای تعریف کنید که با 7 ورودی، 7 مشخصه مربوط به سفر )به جز کد سفر و تعداد بلیط فروخته شده(
را دریافت کرده و آنها را مقداردهی میکند. خصوصیت کد سفر بایستی به صورت افزایشی و خودکار تعیین شده و تعداد بلیط
فروخته شده را نیز در ابتدا صفر قرار دهید. برای تعیین خودکار کد سفر، یک متغیر static داخل کلاس تعریف کنید و داخل setter
خصوصیت کد سفر، مقدار این متغیر static را یک واحد افزایش و سپس خصوصیت کد سفر را با آن مقدار دهی کند. سپس با کمک
تابع SaveInFile() )که جلوتر معرفی میگردد(، اطلاعات سفر را در فایل ذخیره کنید.
2 . همچنین سازندهای تعریف کنید که در ورودی تنها کد سفر را دریافت نماید و سپس خصوصیت کد سفر را مقدار دهی کند. سپس
این سازنده، با کمک تابع LoadFromFile() )که جلوتر معرفی می گردد( اطلاعات سفر را از فایل خوانده و آن را در خصوصیتهای
دادهای کلاس قرار میدهد.
لذا توجه فرمایید که هدف از سازنده اول، ایجاد و ذخیره اطلاعات یک سفر جدید و سازنده دوم برای خواندن اطلاعات سفر از فایل
است.
* توابع عضو:
سپس در این کلاس توابع زیر را نیز پیادهسازی کنید:
1 . تابع چاپ اطلاعات سفر: PrintTravelInfo() : چاپ خصوصیتهای سفر روی صفحه نمایش
2 . تابع ذخیره اطلاعات سفر در فایل Travels.dat بصورت باینری: SaveInFile() : این تابع اطلاعات سفر را به اطلاعات ذخیره
شده سفرهای قبلی append میکند. این تابع در سازندهای که 7 پارامتر دارد فراخوانی میگردد.
3. تابع خواندن اطلاعات سفر از در فایل Travels.dat : LoadFromFile() : این تابع با کمک خصوصیت کد سفر، در فایل جستجو
کرده و اطلاعات سفر متناظر را از فایل پیدا کرده و اطلاعات متناظر را در خصوصیتهای دادهای کلاس قرار میدهد. اگر اطلاعات
سفر پیدا نشد، یک خطای جدید TravelNotFount تولید کنید. توجه فرمایید که بعد از خواندن اطلاعات سفر از فایل، برای تنظیم
مقادیر خصوصیتهای کلاس سفر، صرفا از توابع setter خصوصیتها استفاده نمایید و از سازندهای که 7 پارامتر ورودی میگیرد
استفاده نکنید؛ زیرا این سازنده برای تعریف و افزودن یک سفر جدید است.
4. تابع لود کردن اطلاعات سفرها: LoadTravelsInContainer() : در این تابع، اطلاعات کلیه سفرها از فایل Travels.dat خوانده
و در یک vector یا deque از نوع Trip ذخیره میشود. اینکه اطلاعات در vector یا deque ذخیره شود را استفاده کننده از تابع
به کمک template ها تعیین میکند.
5 . تابع چاپ اطلاعات تمام سفرها: PrintAllTravelsFromContainers() . این تابع ابتدا با کمک تابع
LoadTravelsInContainer() اطلاعات سفرها را در یک vector یا deque بارگزاری کرده و سپس با پیمایش آن، اطلاعات سفرها
را چاپ میکند.
6. تابع بارگزاری و چاپ اطلاعات سفرها: LoadPrintTravelsInLinkedList() : در این تابع، اطلاعات کلیه سفرها از فایل خوانده
شده به ترتیب در عناصر یک لیست پیوندی که خودتان تعریف میکنید قرار میگیرد. سپس لیست پیوندی از ابتدا به انتها پیمایش
شده و اطلاعات سفرها چاپ میگردد. در انتهای سند، یک مثال کوچک در مورد چگونگی ایجاد اشیاء جدید از یک کلاس و قرار
دادن در لیست پیوندی آورده شده است.
7. تابع بروزرسانی اطلاعات سفر: UpdateTravelInfo() : هدف این تابع، بروزرسانی اطلاعات سفر در فایل سفرها میباشد. لذا این
تابع محتوای فایل Travels.dat را پیمایش کرده و محل اطلاعات سفر را بر اساس خصوصیت کد سفر پیدا میکند. سپس خصوصیت
های سفر شئ جاری را با اطلاعات قبلی سفر جایگزین میکند )به کمک seekp و write (. زیرا مثلا ممکن است برخی خصوصیتهای
سفر مانند تعداد بلیط فروخته شده، قیمت و ... تغییر کرده باشد و نیاز باشد که اطلاعات سفر در فایل بروزرسانی شود.
7 . لب شورف عبات ی ط SellTicket() که virtual تعریف شده و شامل یک پارامتر نام مسافر میباشد. در این تابع، تعداد بلیط فروخته
شده آن سفر یک واحد افزایش یافته و محتویات Travels.dat بروزرسانی میشود. همچنین اطلاعات بلیط )کد سفر و نام مسافر( را
در فایل دیگری به نام PurchasedTickets.dat که بصورت باینری است ذخیره کنید. در صورتی که تعداد بلیطهای فروخته شده
بیشتر از ظرفیت سفر بود، یک exception جدید به نام InvalidTicketCount تولید گردد. کلاس این استثناء جدید را خودتان
تعریف کنید. برای این سوال، بهتر است کلاس جدیدی تعریف کنید که شامل خصوصیتهای کد سفر و نام مسافر بصورت رشته
آرایهای از کاراکترها باشد.
8 . تابع چاپ لیست مسافرهای سفر: PrintCustomers() : در این تابع، اطلاعات فایل PurchasedTickets.dat خوانده شده و نام
مسافرانی که کد سفر آن ها برابر با خصوصیت کد سفر شئ باشد، چاپ میشود.
* عملگرها:
همچنین عملگرهای زیر را در این کلاس سربارگذاری کنید:
1 . عملگر void Trip+int جهت افزایش ظرفیت سفر. با افزایش ظرفیت سفر، بایستی اطلاعات را داخل یک فایل بروز رسانی کنید.
2. عملگر void Trip++ : افزایش یک واحدی تعداد بلیطهای فروخته شده. در صورتی که تعداد بلیطهای فروخته شده بیشتر از
ظرفیت سفر بود، یک exception جدید به نام InvalidTicketCount تولید گردد. در نهایت اگر خطایی رخ نداد، اطلاعات جدید
سفر را در فایل بروزرسانی کنید.
2. عملگر void Trip-- : کاهش یک واحدی تعداد بلیطهای فروخته شده. در صورتی که تعداد بلیطهای فروخته شده کمتر از 0 شد،
یک exception جدید به نام InvalidTicketCount تولید گردد. در نهایت اگر خطایی رخ نداد، اطلاعات جدید سفر را در فایل
بروزرسانی کنید.
کلاس Trip_Rail
این کلاس از کلاس Trip به صورت public ارث بری میکند.
کلاس Trip_Rail را تعریف نموده و خصوصیت شماره خط راه آهن و ظرفیت یک کوپه )تعداد صندلیهای یک کوپه( را بصورت
private تعریف کنید. برای هرکدام از این خصوصیتها توابع setter و getter مناسب را تعریف کنید. توجه نمایید که ظرفیت کوپخ
حداقل 1 و حداکثر 10 است. در غیر اینصورت یک خطای invalid_argument تولید کنید.
سازندهای با نه پارامتر تعریف کنید که هفت تای آنها مانند سازنده کلاس Trip باشد و دو تای آخر نیز عدد صحیح که شماره خط
راه آهن و ظرفیت کوپه است. داخل این سازنده همراه با سازنده پدر، خصوصیت شماره خط راه آهن هم مقدار دهی شود.
در این کلاس، توابع زیر را نیز پیادهسازی کنید:
1 . تابع چاپ اطلاعات سفر PrintTravelInfo() را بازنویسی کنید و خصوصیتهای جدید را نیز چاپ کنید. توجه کنید که برای
چاپ اطلاعات سفر، نیازی به خواندن اطلاعات از فایل نیست، زیرا خصوصیتهای کلاس را خودتان مقدار دهی میکنید.
2 . تابع فروش بلیط را بازنویسی کنید، بدین صورت که فرض میکنیم خریدار بایستی یک کوپه را کامل خریداری کند. لذا تعداد
بلیط فروخته شده بایستی به اندازه ظرفیت کوپه افزایش یابد. بروزرسانی اطلاعات و تولید خطا را همچون تابع فروش بلیط در تابع
اصلی تعریف نمایید.
در نهایت در تابع main ، از تمام امکانات بیان شده استفاده کنید و یک نمونه کامل تولید کنید. بدین صورت که در عملیات قابل
انجام توسط برنامه شماره گذاری شده و کاربر بتواند با وارد کردن شمارههای مد نظر از امکانات موجود استفاده کند. مثلا گزینه 1
برای ایجاد یک سفر معمولی جدید. سپس اطلاعات سفر را از کاربر بگیرید. گزینه 2 برای تغییر اطلاعات یکی از سفرها. گزینه 3
برای تعریف یک سفر ریلی جدید. گزینه 4 برای فروش یک بلیط سفر معمولی. گزینه 5 برای اجرای عملگر ++ و ...
تذکر: کلاسها را در فایل هدر جداگانه تعریف و در فایل .cpp مربوط به خودش پیادهسازی کنید.

مهارت ها و تخصص های مورد نیاز


بودجه

5,000 تومان تا 100,000 تومان

مهلت برای انجام

2روز

وضعیت مناقصه

انجام شده


درباره کارفرما

عضویت پنج سال پیش

1 پروژه ثبت شده ،
0 پروژه در حال انجام ،
0 پروژه آماده دریافت پیشنهاد ،
نرخ پذیرش پیشنهاد 100%

برای پیدا کردن پروژه‌های مشابه ثبت نام کنید و پروفایل خود را بسازید.

ورود با گوگل
یا
نام نباید خالی باشد.
نام خانوادگی نباید خالی باشد.

نیاز به استخدام فریلنسر یا سفارش پروژه مشابه دارید؟

سفارش پروژه مشابه

قادر به انجام این پروژه هستید؟

ثبت نام کنید

مهلت ارسال پیشنهاد قیمت برای این پروژه تمام شده است

سری به پروژه‌های مشابه بزنید

روش کار در پارس‌کدرز

به رایگان یک حساب کاربری بسازید

مهارت‌ها و تخصص‌های خود را ثبت کنید، رزومه و نمونه‌کارهای خود را نشان دهید و سوابق کاری خود را شرح دهید.

به شیوه‌ای که دوست دارید کار کنید

برای پروژه‌های دلخواه در زمان دلخواه پیشنهاد قیمت خود را ثبت کنید و به فرصت‌های شغلی منحصر به فرد دسترسی پیدا کنید.

با اطمینان دستمزد دریافت کنید

از زمان شروع کار تا انتهای کار به امنیت مالی شما کمک خواهیم کرد. وجه پروژه را از ابتدای کار به امانت در سایت نگه خواهیم داشت تا تضمین شودکه بعد از تحویل کار دستمزد شما پرداخت خواهد شد.

می‌خواهید شروع به کار کنید؟

یک حساب کاربری بسازید


بهترین مشاغل فریلنسری را پیدا کنید
رشد شغلی شما به راحتی ایجاد یک حساب کاربری رایگان و یافتن کار (پروژه) متناسب با مهارت‌های شما است.

پیدا کردن کار (پروژه)

تماشای دمو روش کار