تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 2 از 2 اولاول 12
نمايش نتايج 11 به 13 از 13

نام تاپيک: تقویم

  1. #11
    در آغاز فعالیت
    تاريخ عضويت
    Mar 2008
    پست ها
    14

    پيش فرض

    براي اين كه چنين تقويمي بسازيم، لازم است كار را به دو بخش تقسيم كنيم:
    يكي بخش هسته و ديگري بخش پوسته
    بخش هسته وظيفه دارد محاسبات مربوط به روزهاي ماه را انجام دهد؛ اين كه هر روز چند شنبه است و چندم ماه است و آيا تعطيل است يا خير
    بخش پوسته نيز وظيفه دارد تا تقويم بدست آمده را به شكل مناسبي روي صفحه نمايش دهد.
    ( اين كه چرا كار را به دو بخش تقسيم كرديم در انتها بيشتر مشخص خواهد شد)

    ابتدا به سراغ بخش هسته مي‌رويم.
    در اين بخش، يك آرايه تعريف مي‌كنيم كه هر خانه از آن، مشخص‌كننده‌ي يك روز از روزهاي ماه است.

    اين آرايه بايد چند خانه داشته باشد؟
    اگر تقويم شمسي طراحي مي‌كنيد، پاسخ 31 است. زيرا هر ماه شمسي حداكثر 31 روز دارد.
    اگر ماه مورد نظر كم‌تر از 31 روز داشته باشد،‌طبيعي است كه خانه‌هاي انتهايي آرايه خالي خواهد ماند.

    اين آرايه از چه نوعي بايد باشد؟
    در نگاه اول به نظر مي‌رسد كه آرايه بايد از نوع عددي باشد و تاريخ آن روز را نگه دارد يا اين كه از نوع رشته‌اي باشد تا مشخص كند كه هر روز از ماه، چند شنبه است. اما من اين پاسخ را پيشنهاد مي‌كنم:
    آرايه را از نوع ركورد انتخاب كنيد.
    مي‌دانيد كه ركورد يك نوع داده‌ي مركب است. كافي است ركوردي تعريف كنيد كه شامل بخش‌هاي زير باشد:
    يك نوع عددي كه نشان دهد آن روز، چندم ماه است (فرض كنيم اسم آن curr_date باشد)
    يك نوع عددي كه نشان دهد آن روز چندشنبه است (فرض كنيم اسم آن day_of_week باشد)
    يك نوع بولين كه مشخص كند آن روز تعطيل است يا خير (فرض كنيم اسم آن isclosed باشد)
    يك نوع بولين اضافي كه نشان مي‌دهد آيا آن روز جزو ماه جاري است يا خير (فرض كنيم اسم آن isincurr_month باشد).

    اميدوارم تا اينجا واضح گفته باشم.
    حالا ببينيم كه اين آرايه رو چه طوري بايد مقداردهي كنيم.
    شما گفتيد كه كاربر خودش مشخص مي كند كه هر ماه چند روزه است و روز اول ماه چندشنبه است.
    بسيار خوب، براي پر كردن آرايه از يك حلقه استفاده مي‌كنيم و 1 تا 31 را درون بخش‌هاي curr_date آرايه قرار مي‌دهيم. فعلا كاري نداريم كه اين ماه چند روزه است...
    براي پر كردن بخش‌هاي day_of_week نيز ابتدا بايد روزهاي هفته را شماره‌گذاري كنيم. مثلا شنبه = 0 و يكشنبه = 1 و دوشنبه = 2 و ...
    حالا در بخش day_of_week در اولين خانه، مقداري كه معادل اولين روز ماه است را قرار مي‌دهيم. مثلا اگر كاربر بگويد كه اولين روز ماه، سه شنبه است، در بخش day_of-week از اولين خانه، عدد 3 را قرار مي‌دهيم. براي خانه‌هاي بعدي آرايه نيز اين عدد را به ترتيب افزايش مي‌دهيم و هر بار كه از شش گذشتيم، در خانه‌ي بعدي از صفر شروع مي‌كنيم.
    در بخش isclosed نيز تكليف مشخص است. براي همه‌ي خانه‌ها false است مگر خانه‌هايي كه بخش day_of_week آن‌ها برابر با شش (يعني جمعه) باشد. كه در اين خانه‌ها بايد مقدار true گذاشت.
    و اما بخش آخر كه isincurr_month است. در اين بخش نيز همه‌ي خانه‌ها true خواهند بود مگر خانه‌هايي كه از روزهاي ماه جاري بزرگ‌تر باشند. مثلا اگر كاربر بگويد كه ماه جاري 29 روزه است، در بخش isincurr_month در خانه‌هاي 30 و 31 مقدار false قرار خواهد گرفت.

    حالا آرايه اي در اختيار داريم كه با نگاه كردن به هر خانه از آن، مي‌توانيم بفهميم كه آن خانه، چندمين روز ماه است، چندشنبه است و آيا تعطيل است يا خير.

    بخش هسته به پايان رسيد. نوبت به بخش پوسته مي‌رسد كه بايد اين آرايه را تحويل بگيرد و تقويم را روي صفحه نمايش دهد. انتخاب نحوه‌ي نمايش به خود شما بستگي دارد. مي توانيد از 31 button استفاده كنيد يا از 31 groupbox استفاده كنيد يا از 31 rectangle استفاده كنيد يا ...
    اگر مي‌خواهيد دردسر كمتري داشته باشيد، توصيه مي‌كنم از groupbox استفاده كنيد. طوري كه هر groupbox شامل 3 برچسب يا label باشد. يكي نشان ميدهد كه آن خانه، چندشنبه است. ديگري نشان مي‌دهد كه آن خانه چندم ماه است و آخري نيز مشخص مي‌كند كه آن تاريخ آيا تعطيل است يا خير.

    نوع بولين اضافي اين جا به درد مي‌خورد. هنگام رسم groupbox ها براي هر خانه‌ي آرايه، لازم است مقدار isin_curr_month براي آن خانه را بررسي كنيد. اگر مقدار آن true باشد، بايد groupbox نمايش داده شود و اگر مقدار آن false باشد، groupbox مربوطه بايد مخفي شود و نمايش نيابد.

    و اما اين كه بخش هسته و پوسته را از هم جدا كرديم اين جا به درد مي‌خورد. به اين ترتيب، نحوه‌ي نمايش كاملا قابل انعطاف خواهد بود و ديگر براي تغيير نمايش تقويم، مجبور نيستيم كل تقويم را از ابتدا محاسبه كنيم.

    شايد اين نوشته ها كمي مبهم به نظر برسد اما واقعا كد كردن اين ها خيلي آسان است. اگر در كد نويسي مشكلي داشتيد بگوييد تا اگر اطلاعات به درد بخوري داشتم كمكتان كنم.

  2. #12
    در آغاز فعالیت
    تاريخ عضويت
    Mar 2008
    پست ها
    14

    پيش فرض

    برنامت رو در اختیار ما نمیذاری؟ :(
    اين برنامه با وجود امكانات نسبتا خوبي كه داره متاسفانه هنوز تكميل نشده. در ضمن چون يك كار مشتركه فعلا اجازه ندارم اون رو پخش كنم. اميدوارم بتونم در آينده‌ي نزديك يك نسخه‌ي نمايشي رو در اختيار دوستان بذارم. اما اگر اطلاعاتي راجع به نحوه‌ي ساختنش خواستين بفرمايين تا تقديم كنم.

  3. #13
    داره خودمونی میشه tikzahraaran's Avatar
    تاريخ عضويت
    Feb 2008
    محل سكونت
    زبلخان اينجا زبلخان اونجا زبلخان همه جا
    پست ها
    86

    12

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

    Last edited by tikzahraaran; 09-03-2008 at 22:06.

صفحه 2 از 2 اولاول 12

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •