Description
به نام خداوند رنگینکما ن
تمرین برنامه نویسی شماره 01
عنوان: پروژهبرنامهنویس ی-شماره01 درس: شبک ههایکامپیوتر ی
استاد راهنما: دکترناصریزدان ی1
رشته: مهند سیکامپیوت ر
دستیاران آموزشی: اسامهایراندوست2،پارمیداضرغام ی3 نیمسال دوم سال تح صیلی 02-1401
1نشانیپستالکترونیکی:yazdani@ut.ac.ir
osameh.irandoust@ut.ac.ir:نشانیپستالکترونیکی2 parmida.zarghami@ut.ac.ir:نشانیپستالکترونیک3
أ
فهرست مطالب
عنوانپروژه)Hotel Management System(…………………………………………………………………………………………………………………………………………………………..1 اینپروتکلچگونهکارمیکند؟…………………………………………………………………………………………………………………………………………………………………………………………….1 1- مقدمه…………………………………………………………………………………………………………………………………………………………………………………………….1
2- JSONفایلها……………………………………………………………………………………………………………………………………………………………………2
1- 2……………………………………………………………………………………………………………………………………………………………………………………………………….config.json-2
2- 2………………………………………………………………………………………………………………………………………………………………………………………………..UsersInfo.json-2
3- 3…………………………………………………………………………………………………………………………………………………………………………………………….RoomsInfo.json-2
3- سرور………………………………………………………………………………………………………………………………………………………………………………………………4
4- احرازهویتومدیریتدسترسی………………………………………………………………………………………………………………………………………………….4
5- رزرواسیون……………………………………………………………………………………………………………………………………………………………………………………..5
1- 5…………………………………………………………………………………………………………………………………………………………)View user information(گزینهاول-5
2- 5……………………………………………………………………………………………………………………………………………………………………………)View all users(گزینهدوم-5
3- 5………………………………………………………………………………………………………………………………………………….)View Rooms Information(گزینهسوم-5
4- 5-گزینهچهارم)Booking(…………………………………………………………………………………………………………………………………………………………………………………….5
5- 6………………………………………………………………………………………………………………………………………………………………………………….)Canceling(گزینهپنجم-5
6- 7…………………………………………………………………………………………………………………………………………………………………………………….)Pass day(گزینهششم-5
7- 7……………………………………………………………………………………………………………………………………………………………………)Edit information(گزینههفتم-5
8- 7………………………………………………………………………………………………………………………………………………………………………..)Leaving room(گزینههشتم-5
9- 5-گزینهنهم)Rooms(……………………………………………………………………………………………………………………………………………………………………………………………8
10- 5-گزینهصفر)Logout(……………………………………………………………………………………………………………………………………………………………………………………….8
9…………………………………………………………………………………………………………………………………………)Error handling(مدیریتخطاها -6
7- مدیریتLogها…………………………………………………………………………………………………………………………………………………………………………10
8- بونسوبخشهایامتیازی)Bonus(……………………………………………………………………………………………………………………………………..10
9- جمعبندیونکاتپایانی………………………………………………………………………………………………………………………………………………………….11
ب
)Hotel Management System( عنوان پروژه
دراینپروژهشمابهپیادهسازییکورژنسادهشدهیرزرواسیونهتلمیپردازید.اینبرنامهازدوبخشکلاینت)Client(وسرور)Server(تشکیلشدهاستکهسروروظیفهیخدماترسانیرابهکلاینتدارد.اینپروژهشاملچندفایلJsonبهعنوانورودیبهسرورخواهدبود.)کههمراهتمرینپیوستشدهاست(
این پروتکل چگونه کار میکند؟
هدفازانجاماینتمرینآشناییباSocket programmingاست.سوکتبهترکیبیکآدرسماشین)آیپییاIP(یانامهاست)HostName(ویکشمارهدرگاه)پورتیاPort(گفتهمیشود.دربرقراریارتباطبینکامپیوترهادریکشبکه،دوچیزبسیارمهماست: 1-آدرسماشینیکهمیخواهیماطلاعاتیازآنبگیریمیابهآنارسالکنیم.
2-برنامهایازآنماشینکهدرخواستاطلاعاتکرده؛ویااینکهمیخواهیماطلاعاتیازآنبرنامهکسبکنیم.
ایندو،یعنیآدرسماشینوشمارهبرنامه،بهوسیلهیسوکتدرشبکهمشخصمیشوند.سوکتیکارتباطقابلاطمینانجهتانتقالدادههابیندوماشینمجزامیباشد.سوکت،برنامهنویسانراازپیچیدگیهایفرآیندبرقراریارتباطبیندوماشینمانندجزئیاتکدکردنبستهها،فرآیندارسالدادههادرشبکه،ارسالمجددبستههایخرابو…دورساختهوبرنامهنویسان،بهراحتیقادربهتوسع هیبرنامههایتحتشبکهمیباشند.
1- مقدمه
دراینپروژهازشماخواستهشدهکهیکسامانهرزرواسیونهتلرابااستفادهازSocket programming پیادهسازیکنید.پروژهشاملدونوعکاربر)ادمینوکاربرعادی(میباشد. ادمیندسترسیکاملبهتمامیامکاناتسامانهراخواهدداشتاماکاربرعادیدسترسیمحدودتریخواهدداشت.کاربرعادیبهعنوانکلاینتبهسرورمتصلمیشودودرسامانهپسازورودیاثبتناماقدامبهرزرویالغوویامشاهدهوضعیتاتا قهایهتلمینماید.ادمیننیزمیتواندتماماطلاعاتمجازکاربر)بهغیرازپسورد(واطلاعاتاتا قهارامشاهدهوهمچنینمیتواندرزرواتاقیرالغونماید.سامانهبراساستاریخرزرووتاریخخروجازاتاقطراحیمیشود.
شمابایددراینپروژهیکبرنامهیسروربایککانالارتباطیایجادکنید.اینکانالارتباطیمیتواندروییکپورتدلخواهکهازطریقفایلکانفیگ)config.json(بهبرنامهیسروردادهمیشوداجراشود.سپسشمابهپیادهسازییککلاینتکهازطریقاینپورتدلخواهبهاینکانا لمتصلمیشودمیپردازید.توجهداشتهباشیدکهسروروظیفهسروکردنفایلهایکامپیوتریکهدرآندرحالاجراسترادارد.همینطورمحل یکهبرنامهقرارداردواجرامیشودبهعنواندایرکتوریاولیهدرنظرگرفتهمیشود.
2- JSON فایلها
تمامیاطلاعاتسامانهدر3فایلJSONکنارپروژهپیوستشدهاست.اینفایلهاوظیفهنگهداریاطلاعاتموردنیازبرنامهرادارند.درنظرداشتهباشیدکهتمامیاینفایلهاsampleبودهوانتظارمیرودکهشماباتوجهبهسیستمطراحیشدهخودتاناینفایلهاراتغییردادهواستفادهکنید.
config.json -2-1
اینفایلشاملپورتموردنیازبرایارتباطباسروردرکانالارتباطیاست.
UsersInfo.json -2-2
اینفایلشاملاطلاعاتکاربرانمیباشد.دراینفایلادمینوکاربرعادیمشخصمیشود.بهعنوانمثال:
همانطورکهمشاهدهمیکنیدکاربرادمینصرفامشخصاتفوقرادارددرصورتیکهکاربرعادیدارایشناسهیکتا،اسمکاربر،رمزعبور،موجودیپولکاربر،شمارهتلفنوآدرسمحلزندگیاست.برنامهشمابایدحداقلداراییککاربرادمینو3کاربرعادیباشد.
RoomsInfo.json -2-3
همانطورکهمشاهدهمیکنیدهراتاقدارایمشخصاتیازقبیل:شمارهاتاق،وضعیتپریاخالیبودناتاق)0یعنیاتاقخالیو1یعنیاتاقپر(،قیمتاتاقبهازایهرنفر،ظرفیتکلاتاق،ظرفیتخالیاستوهمچنیناطلاعاتکاربرانیکهاتاقرارزروکردهاندکهشاملشناسهیکاربر،تعدادرزرو،تاریخرزرووتاریختحویلاتاقاست.
3- سرور
سامانهداراییکسرورباپورتدریافتیخواهدبودکهوظیفهسرورمدیریتکلاینتهااست.آدرسوپورتازطریقفایلکانفیگبهسروردادهمیشود.همچنیناطلاعاتکاربرانواطلاعاترزرواسیوننیزدراختیارسرورقرارمیگیرد. پسازراهاندازیسروروبالاآمدنسرور،بایدتاریخشروعسامانهخودراواردکنیدتادرسرورذخیرهشود.
درصورتبروزهرگونهخطادرواردکردندستوراتارور503)دربخش 6بهاجمالتوضیحدادهشدهاست(نمایشدادهمیشود.درصورتیکهتاریخدرفرمتنادرستیواردشودارور401بهکاربرنمایشدادهمیشود.
4- احراز هویت و مدیریت دسترسی
اینبخششامل3دستورخواهدبود.برایاحرازهویتدرسروربایدازفایلUserInfoسرور،اطلاعاتکاربرانسیستمراخواندهوبااستفادهازپسوردآ نهاراشناساییواحرازهویتکنند.
برایورودبهبرنامهطبقدستورفوقوبااستفادهازcommandدادهشدهکاربرمیتواندواردسامانهشود.درصورتبروزخطادرورودکاربرخطای430بهکاربرنمایشدادهمیشودودرصورتورودموفقیتآمیزپیغام230بهکاربرنمایشدادهمیشود. درصورتیکهکاربریجدیدبخواهددرسامانهثبتنامکندازدستورزیراستفادهخواهیمکرد.
توجهداشتهباشیدبعدازثبتنامکاربرجدید،درصورتیکهاسمکاربروجودداشتهباشدخطای451بهکاربرنمایشدادهمیشود.درصورتثبتنامکاربروموجودنبودنusernameپیغام311نمایشدادهمیشودوبعدازآنکاربربهترتیبسایرمقادیرخواستهشدهراواردمیکند.درصورتبروزهرگونهخطاییدرواردکردنمقادیرخطای503نمایشدادهخواهدشدوثبتنامکاربرنیزلغومیشود.درصورتموفقیتآمیزبودنثبتنامنیزپیغام231بهکاربرنمایشدادهخواهدشد.
5- رزرواسیون
بخشاصلیوهستهبرنامهبخشرزرواسیوناست.)صفحه اصلی(دراینبخشابتدااطلاعاتموردنیازبهکاربرنمایشدادهمیشود.
درمحیطکنسول)کلاینت(اطلاعاتفوقنمایشدادهمیشودوسپسکاربرگزینهیموردنظرخودراانتخابمیکند.درصورتبروزهرگونهخطایااشتباهواردکردنگزینهخطای503بهکاربرنمایشدادهمیشودودوبارهایناطلاعاتبهنمایشدرخواهدآمد.
)View user information (گزینه اول -5-1
ایندستوربرایهردونوعکاربرقابلدسترسیاست.اینبخشتماماطلاعاتکاربررانمایشمیدهد.)نحوهنمایشاطلاعاتوخلاقیتدرآنبرعهدهدانشجواست(سپسکاربربهصفحهاصلیهدایتمیشود.
)View all users (گزینه دوم -5-2
ایندستورصرفابرایکاربرادمینقابلدسترسیاستواگرکاربرعادیایندستورراواردکندباخطای403مواجهمیشودودوبارهبهصفحهاصلیسامانهبرمیگردد.دراینبخشاطلاعاتتمامیکاربرانبهغیرازرمزعبوربهادمیننمایشدادهمیشود.)نحوهنمایشاطلاعاتوخلاقیتدرآنبرعهدهدانشجواست(سپسکاربربهصفحهاصلیهدایتمیشود.
) View Rooms Information (گزینه سوم -5-3
ایندستوربرایهردونوعکاربرقابلدسترسیاست.اینبخشتماماطلاعاتتماماتا قهارااعمازپریاخالینمایشمیدهد.)نحوهنمایشاطلاعاتوخلاقیتدرآنبرعهدهدانشجواست(سپسکاربربهصفحهاصلیهدایتمیشود.
اگراتاقیپریانصفهپرباشدکاربرانحاضردراتاقرانیزنمایشدهدکهاینبخشصرفابایدبرایادمینقابلمشاهدهباشد.
4-5- گزینه چهارم )Booking (
ایندستوربرایکاربرعادیاستفادهمیشود.دراینبخشکاربرمیتوانداتاقیباظرفیتمشخصوتاریخدقیقشروعاقامتوپایاناقامترزروکند. دقتداشتهباشیددراینپروژهازشماخواستهشدهاسترزروهاراطوریمدریتکنیدکهتداخلبینزمانهانباشد. برایمثالاگریکاتاقدرتاریخ25امپرباشد)ظرفیتآنکاملباشد(دیگرامکانرزرودر25اموجودنداردامااگرنیمهخالیباشدبستهبهتعدادتختهاییکهکاربردرخواستکردهبایدبرسیشودکهبهاندازهیظرفیتباقیماندهیاتا قمیباشدیاخیر. همچنینانتظارمیرودکهبعدازرزروکردنتعدادظرفیتاتاقوهمچنینکیفپولکاربرتغییرکردهباشد.
درابتداموجودیکاربرباتوجهبهقیمتاتاقبرسیشده )دقتشودکهقیمتهراتاقبهازاییکنفراستاگرکاربرتعدادبیشتریبخواهدقسمتاتاقدرتعدادضربمیشود(وبعدپربودناتاقدرتاریختایینشدهبرسیمیشود.
• درصورتنداشتنموجودیکافیخطای108نمایشدادهشود.
• درصورتیکهساختاردستورنادرستبودخطای503نمایشدادهشود
• درصورتیکهاتاقیباشمارهموردنظریافتنشدخطای101نمایشدادهشود.
• درصورتیکهامکانرزروبهدلیلپربودناتاقنبودخطای109نمایشدادهشود.
)Canceling (گزینه پنجم -5-5
ایندستورزمانیبکارمیرودکهکاربربخواهدرزروخودرازودترازCheckoutلغوکنددراینصورترزروکاربرپاکشدهونصفپولبهکاربربرگرداندهمیشود.
بعدازواردکردنشمارهپنجممیبایستلیستیازرزروهایکاربرنمایشدادهشودکهطریقهینمایشآنبرعهدهدانشجواست.سپسبااستفادهازدستورفوقشمارهاتاقmبهتعدادnنفرراکنسلکنید.
چنانچهاتاقموردنظریافتنشدخطایشماره101وچنانچهرزرویباکاربرموردنظرباآنتعدادیابیشتردراتاقموردنظرموجودنبودخطایشماره102رانمایشدهیدواگرشکلدستورنادرستبودخطای401نمایشدادهمیشود. درصورتموفقیتامیزبودندستور110نمایشدادهشود.
دقت شود که سیستم باید زمانی که تقویم سامانه برابر با Checkout هر رزروی شد آن رزرو را پاک کند .
)Pass day (گزینه ششم -5-6
ایندستورصرفابرایکاربرادمینقابلدسترسیاستواگرکاربرعادیایندستورراواردکندباخطای403مواجهمیشودودوبارهبهصفحهاصلیسامانهبرمیگردد.دراینبخشادمینمیتواندتعدادروزهاییکهگذشتهاستراواردکند.بهعنوانمثالتاریخواردشدهدرسرور10اسفندمیباشدوادمینباواردکردندستورزیرومقدار2میتواندتاریخرابه12اسفندتغییردهد.
) Edit information (گزینه هفتم -5-7
ایندستوربرایهردونوعکاربرقابلدسترسیاست.دراینبخشکاربرمیتوانداطلاعاتواردشدهخودراتغییردهد.درنظرداشتهباشیدادمیننیزمانندسایرکاربرانتنهااطلاعاتشخصیخودکهفقطرمزعبورمیباشدرامیتواندتغییردهدوبهاطلاعاتسایریننمیتوانددسترسیداشتهباشد.)نحوهنمایشاطلاعاتوخلاقیتدرآنبرعهدهدانشجواست(سپسکاربربهصفحهاصلیهدایتمیشود.درصورتبروزهرگونهخطایااشتباهواردکردناطلاعاتخطای503بهکاربرنمایشدادهمیشودوبهصفحهاصلیهدایتمیشودودرصورتموفقیتآمیزبودنپیغام312نمایشدادهمیشود.
) Leaving room (گزینه هشتم -5-8
ایندستوربرایهردونوعکاربرقابلدسترسیاست.کاربرعادیمیتواندپیشازموعداتاقراتحویلدهدوازاتاقخارجشود.
درصورتیکهکاربردراتاقسکونتداشتهباشدپیغام413ودرصورتیکهاتاقاشتباهیواردشودخطای503ودرصورتیکهاتاقیکهکاربردرآنسکونتنداشتهباشدواردگرددنیزخطای102بهکاربرنمایشدادهمیشود.تغییراتنیزبعدازخروجکاربرذخیرهمیشود.
)امتیازی(دراینبخشادمینمیتواندهراتاقیکهبخواهدراخالیکندوStatusاتاقراتغییردهد.درمواردیکهفردیکهاتاقیرارزرومیکنددرصورتتخطیازقوانینهتلمدیریتمجبوربهحذفرزرووخالیکردناتاقمیشود.
درصورتیکهشمارهاتاقاشتباهواردشودخطای101ودرصورتیکهظرفیتواردشدهتوسطکاربربیشترازظرفیتمجازاتاقباشدخطای412بهکاربرنمایشدادهمیشودودرصورتموفقیتآمیزبودنکار،بعدازذخیرهتغییراتپیغام413بهکاربرنمایشدادهمیشود.
9-5- گزینه نهم) Rooms(
ایندستورصرفابرایکاربرادمینقابلدسترسیاستواگرکاربرعادیایندستورراواردکندباخطای403مواجهمیشودودوبارهبهصفحهاصلیسامانهبرمیگردد.دراینصفحهادمینمیتواندبااستفادهازسهدستوراتاقیرااضافهکندیاتغییردهدویاحذفکند. دستوارتبهصورتزیرمیباشند:
• درصورتوجودنداشتنشمارهیاتاقخطای101رانمایشدهید
• درصورتوجودداشتنشمارهاتاقدردستورAddخطای111رانمایشدهید.
• درصورتموفقیتدراضافهکردناتاقپیام104ودرتغییراتاقپیام105وپاککردناتاقپیام106رانمایشدهید.
دقتداشتهباشیدکهدرصورتپربودناتاقامکانحذفاتاقوهمینطورکمکردنظرفیتاتاقوجودنداشتهوبرایادمینبایدخطای109نمایشدادهشود.
10-5- گزینه صفر) Logout(
ایندستوربرایهردونوعکاربرقابلدسترسیاست.بازدنایندستورکاربرازبرنامهخارجمیشودوارتباطهمانکلاینتباسرورقطعمیشود.درصورتموفقیتآمیزبودنخروجکاربرپیغام201نمایشدادهخواهدشد.
نکته 1: در تمامی قسمت ها انتظار میرود بعد از چاپ پیام مناسب هر دستور کاربر به صفحه اصلی باز گردد.
نکته 2: بعد از پایان برنامه باید تمامی فایل های Json بهروزرسانی شوند.
)Error handling ( مدیریت خطاها-6
دراینبخشکدخطاهاوپیغامهاباذکرجزئیاتتوضیحدادهشدهاست.
7- مدیریت Log ها
سرورشمادرزماناجرابایدیکفایلlogدرکنارخودایجادکندوتمامیاطلاعاتراباتاریخوساعتوقوعدرآنذخیرهکند.اطلاعاتیمانندافرادیکهواردسیستمشدهاند؛رزروهاییکهانجامشدهوتمامیمواردیکهدربخش5وجوددارد.هرکاربریکهدستوریواردمیکندبایدلاگآننیزذخیرهشود.همچنینبهازایهرکاربریکفولدردرClientبرنامههماسمکاربرساختهمیشودولاگهایمربوطبههرکاربردرفولدرمربوطهذخیرهمیشود.
دقتکنیدباهرباراجرایسروراگرفایلlogوجودنداشتآنرابسازیدودرصورتیکهازقبلاینفایلوجودداشتهباشد،درادامهیآنشروعبهنوشتنکنید.
8- بونس و بخشهای امتیازی )Bonus(
بونسهایاینتمرینحداکثر10نمره)از100(خواهدبود.
• )Room filtering(فیلتراتا قها
دربخش3-5شمامیتوانیدباافزودندوگزینهدیگربهکاربراینامکانرابدهیدکهصرفااتا قهایخالیراببیندیابتواندتمامیاتا قهارامشاهدهکند.)5نمره(
• بخش8-5نیزقسمتادمینامتیازیاست.نحوهنمایشآننیزدرهمانبخشتوضیحدادهشدهاست.)5نمره(
9- جمع بندی و نکات پایانی
• مهلتتحویل:21 اسفند
• پروژهدرگروههای2نفرهانجاممیشود.)گروهبندیدرسامانهایلرننیزانجاممیشودوتحویلتمرینبهصورتگروهیخواهدبود(
• برنامهشمابایددرخواس تهارابهصورتهمزمانپاسخدهدوچندینکلاینتبتوانندباکاربرانمختلفبهسروروصلشوند.)میتوانیدازthreadیاselect() system callبهدلخواهخودتاناستفادهکنید.درضمنتوجهداشتهباشیدکه2سروربرروییکپورتبهصورتهمزمانبالانیاید!(
• هر2نفرمیبایستکارراتقسیمکنند.همچنینازGitبرایساختنbranchوتقسیمissueهااستفادهنمایید.)بااستفادهازcommitها و تعیینissueها میزان مشارکت هر نفر مشخص میشود(. بعد از انجام این کار کدها را در یکrepositoryبه نام1_CN_CHomeworksدراکانتهایGitHub/GitLabخودقراردهید)بهصورتprivate(.همچنیندریکفایلREADME.mdمیتوانیدreportوداکیومنتخودراکاملکنیدودرکنارrepositoryقراردهید.درنهایتلینکاینrepositoryرادرمحلپاسختمرینقراردهید.)ازفرستادنفایلبهصورتزیپجداخوددارینمایید(.اکانتتیایهایاینتمرینروبهRepoخودتونبهعنوان
Maintainerبهپروژهاضافهکنید.
Git Accounts:
@osameh15
@pzarghami
• برایپیادهسازیاینتمرینازCیاC++استفادهکنید.)میتوانیدازمحیطتوسعهQTوتمامیکتابخون ههایآننیزاستفادهکنید(
• سیستمعاملترجیجاLinuxباشد.
• دقتکنیدگزارشنهاییشمامیبایستهمانندیکDocumentباشدوشاملتوضیحکدوساختارکد،همچنیننتیجهنهاییاجرایکدواسکرینشا تهایدقیقازتماممراحلباشد.)درفایلReadme.mdکنارفایلاصلیخودودرRepoمربوطهقراردهید(.ایننکتهحائزاهمیتاستکهفایلPDFبههیچعنوانموردپذیرشقرارنخواهدگرفت.
• ساختارصحیحوتمیزیکدبرنامه،بخشیازنمرهیاینپروژهشماخواهدبود.بنابرایندرطراحیساختاربرنامهدقتبهخرجدهید.
• برایهرقسمتکد،گزارشدقیقوشفافبنویسید.کدهایضمیمهشدهبدونگزارشمربوطهنمرهاینخواهندداشت.
• هدفاینتمرینیادگیریشماست.لطفاتمرینراخودتانانجامدهید.درصورتمشاهدهیمشابهتبینکدهایدوگروه،مطابقتسیاستدرسباگروهمتقلبوتقلبدهندهبرخوردخواهدشد.
• سؤالاتخودراتاحدممکندرفرومدرسمطرحکنیدتاسایردانشجویاننیزازپاسخآنبهرهمندشوند.درصورتیکهقصدمطرحکردنسؤالخاصتریدارید،ازطریقایمیلزیرارتباطبرقرارکنید.توجهداشتهباشیدکهسایرشبکههایاجتماعیراهارتباطیرسمیبادستیارانآموزشینیستودستیارانآموزشیمؤظفبهپاسخگوییدرمحیطهایغیررسمینیستند.
o Osameh.irandoust@ut.ac.ir
o Parmida.zarghami@ut.ac.ir
موفقباشید
Reviews
There are no reviews yet.