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


مبحث 1.3: نرم افزار سیستم

مبحث 1.4: نرم افزار سرویس و مبانی الگوریتمی

مقدمه ای بر انفورماتیک اقتصادی

1.3. نرم افزار سیستم کامپیوتر

1.3.1. ساختار نرم افزار کامپیوتر

مجموعه ای از برنامه هایی که برای حل مشکلات روی کامپیوتر طراحی شده اند، نرم افزار نامیده می شوند. ترکیب نرم افزار رایانه شخصی را پیکربندی نرم افزار می گویند.

نرم افزارها را می توان به سه دسته تقسیم کرد:

  1. نرم افزار سیستم (برنامه های استفاده عمومی) که عملکردهای کمکی مختلفی را انجام می دهد، مانند ایجاد کپی از اطلاعات استفاده شده، ارائه اطلاعات کمکی در مورد رایانه، بررسی عملکرد دستگاه های رایانه ای و غیره.
  2. نرم افزار کاربردی که کار لازم را بر روی رایانه شخصی فراهم می کند: ویرایش اسناد متنی، ایجاد نقشه ها یا تصاویر، پردازش آرایه های اطلاعات و غیره.
  3. نرم افزار ابزار (سیستم های برنامه نویسی) که توسعه برنامه های کامپیوتری جدید را در یک زبان برنامه نویسی تضمین می کند.


برنج. 1.

سیستم نرم افزار

این برنامه‌های عمومی با یک برنامه رایانه شخصی خاص مرتبط نیستند و عملکردهای سنتی را انجام می‌دهند: زمان‌بندی و مدیریت وظایف، مدیریت ورودی/خروجی و غیره.

به عبارت دیگر، برنامه های سیستم عملکردهای کمکی مختلفی را انجام می دهند، به عنوان مثال، ایجاد کپی از اطلاعات استفاده شده، ارائه اطلاعات کمکی در مورد رایانه، بررسی عملکرد دستگاه های رایانه ای و غیره.

نرم افزار سیستم شامل:

  • سیستم عامل (این برنامه با روشن شدن رایانه در RAM بارگیری می شود).
  • برنامه های پوسته (راهی راحت تر و بصری برای برقراری ارتباط با رایانه نسبت به استفاده از خط فرمان DOS، به عنوان مثال، Norton Commander) ارائه می دهد.
  • پوسته های عامل - سیستم های رابطی که برای ایجاد رابط های گرافیکی، چندبرنامه نویسی و غیره استفاده می شوند.
  • درایورها (برنامه‌هایی که برای کنترل پورت‌های دستگاه جانبی طراحی شده‌اند که معمولاً هنگام راه‌اندازی رایانه در RAM بارگذاری می‌شوند).
  • ابزارهای کمکی (برنامه های کمکی یا ابزاری که تعدادی خدمات اضافی را در اختیار کاربر قرار می دهند).

امکانات عبارتند از:

  • فایل منیجر یا مدیر فایل؛
  • ابزار فشرده سازی پویا داده ها (به شما امکان می دهد مقدار اطلاعات روی دیسک را به دلیل فشرده سازی پویا آن افزایش دهید).
  • ابزارهای مشاهده و پخش؛
  • ابزارهای تشخیصی؛ ابزارهای کنترلی به شما امکان می دهند پیکربندی رایانه را بررسی کنید و عملکرد دستگاه های رایانه ای، در درجه اول هارد دیسک ها را بررسی کنید.
  • ابزارهای ارتباطی (برنامه های ارتباطی) برای سازماندهی تبادل اطلاعات بین رایانه ها طراحی شده اند.
  • ابزارهای امنیتی کامپیوتر (پشتیبان گیری، نرم افزار آنتی ویروس).

لازم به ذکر است که برخی از ابزارها در سیستم عامل گنجانده شده اند، در حالی که بخش دیگر به طور مستقل عمل می کند. اکثر نرم افزارهای عمومی (سیستم) در سیستم عامل گنجانده شده است. برخی از نرم افزارهای عمومی در خود کامپیوتر گنجانده شده است (برخی از برنامه های سیستم عامل و تست های کنترلی در ROM یا PROM نصب شده روی مادربرد نوشته شده است). برخی از نرم افزارهای رایج، برنامه های مستقل هستند و به صورت جداگانه ارائه می شوند.

نرم افزار کاربردی

برنامه های کاربردی را می توان به طور مستقل یا به عنوان بخشی از سیستم ها یا بسته های نرم افزاری استفاده کرد.

نرم افزار کاربردی - برنامه هایی که مستقیماً کار لازم را بر روی رایانه شخصی انجام می دهند: ویرایش اسناد متنی، ایجاد نقشه ها یا تصاویر، ایجاد صفحات گسترده و غیره.

بسته‌های نرم‌افزار کاربردی، سیستمی از برنامه‌ها هستند که با توجه به دامنه کاربردشان، به بسته‌های مشکل‌مدار، همه‌منظوره و بسته‌های یکپارچه تقسیم می‌شوند. بسته های مدرن یکپارچه شامل حداکثر پنج جزء کاربردی هستند: پردازشگر تست و صفحه گسترده، DBMS، ویرایشگر گرافیکی، ابزارهای مخابراتی.

به عنوان مثال، نرم افزارهای کاربردی شامل:

  1. مجموعه نرم افزارهای آفیس MS OFFICE.
  2. سیستم های حسابداری
  3. سیستم های تحلیلی مالی
  4. بسته های مدیریت اداری یکپارچه
  5. CAD - سیستم ها (سیستم های طراحی به کمک کامپیوتر).
  6. ویرایشگرهای HTML یا وب
  7. مرورگرها ابزاری برای مشاهده صفحات وب هستند.
  8. ویرایشگر گرافیکی
  9. سیستم های خبره.

نرم افزار ابزار

نرم افزار ابزار یا سیستم های برنامه نویسی سیستم هایی برای خودکارسازی توسعه برنامه های جدید در یک زبان برنامه نویسی هستند.

در کلی ترین حالت، برای ایجاد یک برنامه در زبان برنامه نویسی انتخاب شده (زبان برنامه نویسی سیستم)، باید اجزای زیر را داشته باشید:

  1. ویرایشگر متن برای ایجاد یک فایل با متن منبع برنامه.
  2. کامپایلر یا مفسر. متن مبدأ با استفاده از یک برنامه کامپایلر به کد شیء میانی ترجمه می شود. کد منبع یک برنامه بزرگ از چندین مورد تشکیل شده است ماژول ها(فایل های منبع). هر ماژول در یک فایل جداگانه با کد شی کامپایل می شود، که سپس باید در یک فایل ترکیب شود.
  3. یک ویرایشگر یا اسمبلر پیوند که پیوند ماژول های شی را انجام می دهد و یک برنامه کاربردی به عنوان یک خروجی - کد اجرایی تولید می کند. کد اجرایی یک برنامه کامل است که می تواند بر روی هر کامپیوتری که دارای سیستم عاملی باشد که برنامه برای آن ساخته شده است اجرا شود. به عنوان یک قاعده، فایل حاصل دارای پسوند EXE یا .COM است.
  4. اخیراً روش های برنامه نویسی بصری (با استفاده از زبان های اسکریپت نویسی) با هدف ایجاد برنامه های کاربردی ویندوز رواج یافته است. این فرآیند در محیط های طراحی سریع به صورت خودکار انجام می شود. در این مورد از اجزای بصری آماده استفاده می شود که با استفاده از ویرایشگرهای ویژه پیکربندی می شوند.

محبوب ترین ویرایشگرها (سیستم های برنامه نویسی با استفاده از ابزارهای بصری) برای طراحی بصری:

  1. Borland Delphi - برای حل تقریباً هر مشکل برنامه نویسی برنامه طراحی شده است.
  2. Borland C++ Builder یک ابزار عالی برای توسعه برنامه های DOS و Windows است.
  3. Microsoft Visual Basic یک ابزار محبوب برای ایجاد برنامه های ویندوز است.
  4. Microsoft Visual C++ - این ابزار به شما امکان می دهد هر برنامه ای را که در یک محیط سیستم عامل مانند Microsoft Windows اجرا می شود توسعه دهید.

مجموعه ای از برنامه هایی که برای حل مشکلات روی کامپیوتر طراحی شده اند، نرم افزار نامیده می شوند. ترکیب نرم افزار رایانه شخصی را پیکربندی نرم افزار می گویند. نرم افزارها را می توان به سه دسته تقسیم کرد (شکل 1):

شکل 1. طبقه بندی نرم افزار

    نرم افزار سیستم (برنامه های استفاده عمومی) که عملکردهای کمکی مختلفی را انجام می دهد، مانند ایجاد کپی از اطلاعات استفاده شده، ارائه اطلاعات کمکی در مورد رایانه، بررسی عملکرد دستگاه های رایانه ای و غیره.

    نرم افزار کاربردی که کار لازم را بر روی رایانه شخصی فراهم می کند: ویرایش اسناد متنی، ایجاد نقشه ها یا تصاویر، پردازش آرایه های اطلاعات و غیره.

    نرم افزار ابزار (سیستم های برنامه نویسی) که توسعه برنامه های کامپیوتری جدید را در یک زبان برنامه نویسی تضمین می کند.

سیستم نرم افزارمجموعه‌ای از برنامه‌ها است که مدیریت مؤثر اجزای سیستم کامپیوتری مانند پردازنده، رم، دستگاه‌های ورودی/خروجی، تجهیزات شبکه را ارائه می‌کند که به‌عنوان یک «واسط لایه‌ای» عمل می‌کند که در یک طرف آن سخت‌افزار قرار دارد و در طرف دیگر، برنامه های کاربردی کاربر بر خلاف نرم افزارهای کاربردی، نرم افزار سیستم مشکلات کاربردی خاصی را حل نمی کند، بلکه تنها عملکرد سایر برنامه ها را تضمین می کند، منابع سخت افزاری سیستم کامپیوتری را مدیریت می کند و غیره.

این برنامه‌های عمومی با یک برنامه رایانه شخصی خاص مرتبط نیستند و عملکردهای سنتی را انجام می‌دهند: زمان‌بندی و مدیریت وظایف، مدیریت ورودی/خروجی و غیره. به عبارت دیگر، برنامه های سیستم عملکردهای کمکی مختلفی را انجام می دهند، به عنوان مثال، ایجاد کپی از اطلاعات استفاده شده، ارائه اطلاعات کمکی در مورد رایانه، بررسی عملکرد دستگاه های رایانه ای و غیره. نرم افزار سیستم شامل:

    سیستم عامل (این برنامه با روشن شدن کامپیوتر در RAM بارگذاری می شود)

    برنامه های پوسته (راهی راحت تر و بصری برای برقراری ارتباط با رایانه نسبت به استفاده از خط فرمان DOS، به عنوان مثال، Norton Commander فراهم می کند)

    پوسته های عامل سیستم های رابطی هستند که برای ایجاد رابط های گرافیکی، چندبرنامه نویسی و غیره استفاده می شوند.

    درایورها (برنامه‌هایی که برای کنترل پورت‌های دستگاه جانبی طراحی شده‌اند که معمولاً هنگام راه‌اندازی رایانه در RAM بارگذاری می‌شوند)

    ابزارهای کمکی (برنامه های کمکی یا ابزاری که تعدادی خدمات اضافی را در اختیار کاربر قرار می دهند)

امکانات عبارتند از:

    فایل منیجر یا مدیر فایل

    ابزارهای فشرده سازی دینامیک داده ها (به شما امکان می دهد مقدار اطلاعات روی دیسک را به دلیل فشرده سازی پویا آن افزایش دهید)

    ابزارهای مشاهده و پخش

    ابزارهای تشخیصی؛ ابزارهای کنترل به شما امکان می دهد پیکربندی رایانه را بررسی کنید و عملکرد دستگاه های رایانه ای، در درجه اول هارد دیسک ها را بررسی کنید.

    ابزارهای ارتباطی (برنامه های ارتباطی) برای سازماندهی تبادل اطلاعات بین رایانه ها طراحی شده اند

    ابزارهای امنیتی کامپیوتر (پشتیبان گیری، نرم افزار آنتی ویروس).

Utilities برنامه هایی هستند که برای حل طیف محدودی از وظایف کمکی طراحی شده اند.

گاهی اوقات برنامه های کاربردی به عنوان نرم افزارهای خدماتی طبقه بندی می شوند

از ابزارهای کاربردی برای موارد زیر استفاده می شود:

    نظارت بر شاخص‌های سنسور و عملکرد تجهیزات - نظارت بر دمای پردازنده و آداپتور ویدیویی؛ خواندن S.M.A.R.T. دیسکهای سخت؛

    مدیریت پارامترهای تجهیزات - محدود کردن حداکثر سرعت چرخش درایو CD. تغییر سرعت فن

    شاخص های نظارت - بررسی یکپارچگی ارجاع. صحت ثبت داده ها

    قابلیت های گسترده - قالب بندی و/یا پارتیشن بندی مجدد دیسک در حین ذخیره داده ها، حذف بدون امکان بازیابی.

انواع تاسیسات:

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

      یکپارچه سازها

      اسکن دیسک - جستجو برای فایل ها و مناطق دیسک که به روش های مختلف به اشتباه ضبط شده یا آسیب دیده اند و حذف بعدی آنها برای استفاده کارآمد از فضای دیسک.

      پاکسازی دیسک - حذف فایل های موقت، فایل های غیر ضروری، خالی کردن سطل بازیافت.

      پارتیشن بندی دیسک تقسیم یک دیسک به دیسک های منطقی است که می توانند سیستم های فایل متفاوتی داشته باشند و توسط سیستم عامل به عنوان چندین دیسک مختلف درک شوند.

      پشتیبان گیری - ایجاد نسخه های پشتیبان از کل دیسک ها و فایل های جداگانه و همچنین بازیابی از این کپی ها.

      فشرده سازی دیسک - فشرده سازی اطلاعات روی دیسک ها برای افزایش ظرفیت هارد دیسک ها.

      • ابزارهای رجیستری

        تاسیسات نظارت بر تجهیزات

        تست های تجهیزات

شکل 2. محل نرم افزار منبع باز در ساختار چند سطحی یک کامپیوتر

لازم به ذکر است که برخی از ابزارها در سیستم عامل گنجانده شده اند، در حالی که بخش دیگر به طور مستقل عمل می کند. بیشتر نرم افزارهای عمومی (سیستم) در سیستم عامل گنجانده شده است (شکل 2). برخی از نرم افزارهای عمومی در خود کامپیوتر گنجانده شده است (برخی از برنامه های سیستم عامل و تست های کنترلی در ROM یا PROM نصب شده روی مادربرد نوشته شده است). برخی از نرم افزارهای رایج، برنامه های مستقل هستند و به صورت جداگانه ارائه می شوند.

          نرم افزار کاربردی. برنامه های کاربردی را می توان به طور مستقل یا به عنوان بخشی از سیستم ها یا بسته های نرم افزاری استفاده کرد. نرم افزارهای کاربردی - برنامه هایی که مستقیماً از انجام کارهای ضروری در رایانه شخصی پشتیبانی می کنند: ویرایش اسناد متنی، ایجاد نقشه ها یا تصاویر، ایجاد صفحات گسترده و غیره. بسته های نرم افزار کاربردی سیستمی از برنامه ها هستند که با توجه به دامنه کاربرد آنها به دو دسته تقسیم می شوند. قرار ملاقات های بسته های مشکل محور و بسته های یکپارچه. بسته های مدرن یکپارچه شامل حداکثر پنج جزء کاربردی هستند: پردازشگر تست و صفحه گسترده، DBMS، ویرایشگر گرافیکی، ابزارهای مخابراتی. به عنوان مثال، نرم افزارهای کاربردی شامل:

    مجموعه نرم افزارهای آفیس MS OFFICE

    سیستم های حسابداری

    سیستم های تحلیلی مالی

    بسته های مدیریت اداری یکپارچه

    سیستم های CAD (سیستم های طراحی به کمک کامپیوتر)

    ویرایشگرهای HTML یا وب

    مرورگرها – ابزاری برای مشاهده صفحات وب

    ویرایشگر گرافیکی

    سیستم های خبره.

          نرم افزار ابزار. نرم افزار ابزار یا سیستم های برنامه نویسی سیستم هایی برای خودکارسازی توسعه برنامه های جدید در یک زبان برنامه نویسی هستند. در کلی ترین حالت، برای ایجاد یک برنامه در زبان برنامه نویسی انتخاب شده (زبان برنامه نویسی سیستم)، باید اجزای زیر را داشته باشید: 1. ویرایشگر متن برای ایجاد یک فایل با متن منبع برنامه. 2. کامپایلر یا مفسر. متن مبدأ با استفاده از یک برنامه کامپایلر به کد شیء میانی ترجمه می شود. کد منبع یک برنامه بزرگ از چندین مورد تشکیل شده است ماژول ها(فایل های منبع). هر ماژول در یک فایل جداگانه با کد شی کامپایل می شود، که سپس باید در یک کل ترکیب شود. یک ویرایشگر یا اسمبلر پیوند که پیوند ماژول های شی را انجام می دهد و یک برنامه کاربردی به عنوان یک خروجی - کد اجرایی تولید می کند. کد اجرایی یک برنامه کامل است که می تواند بر روی هر کامپیوتری که دارای سیستم عاملی باشد که برنامه برای آن ساخته شده است اجرا شود. به عنوان یک قاعده، فایل حاصل دارای پسوند EXE یا .COM.4 است. اخیراً روش های برنامه نویسی بصری (با استفاده از زبان های اسکریپت نویسی) با هدف ایجاد برنامه های کاربردی ویندوز رواج یافته است. این فرآیند در محیط های طراحی سریع به صورت خودکار انجام می شود. در این مورد از اجزای بصری آماده استفاده می شود که با استفاده از ویرایشگرهای ویژه پیکربندی می شوند. محبوب ترین ویرایشگرها (سیستم های برنامه نویسی با استفاده از ابزارهای بصری) برای طراحی بصری:

    Borland Delphi - برای حل تقریباً هر مشکل برنامه نویسی برنامه طراحی شده است

    Borland C++ Builder یک ابزار عالی برای توسعه برنامه های DOS و Windows است

    Microsoft Visual Basic یک ابزار محبوب برای ایجاد برنامه های ویندوز است

    Microsoft Visual C++ - این ابزار به شما امکان می دهد هر برنامه ای را که در یک محیط سیستم عامل مانند Microsoft Windows اجرا می شود توسعه دهید

سوالات کنترلی:

    تعریف سیستم عامل

    چه نرم افزاری نرم افزار سیستمی محسوب می شود؟

    نرم افزار کاربردی را نام ببرید.

    چه نرم افزاری نرم افزار کاربردی محسوب می شود؟

    هدف نرم افزار چیست؟

    کلاس های اصلی برنامه ها کدامند؟ از برنامه های هر کلاس با توجه به هدفشان مثال بزنید.

نمودارهای ساختاری و عملکردی برنامه

نمودار ساختاری مجموعه ای از پیوندهای ابتدایی یک شی و ارتباطات بین آنها است که یکی از انواع مدل های گرافیکی است. پیوند ابتدایی به عنوان بخشی از یک شی، سیستم کنترل و غیره درک می شود که یک تابع ابتدایی را پیاده سازی می کند. در شکل 2.1 بلوک دیاگرام برنامه توسعه یافته را نشان می دهد.

شکل 2.1 - نمودار بلوک برنامه

نمودار عملکردی سندی است که فرآیندهای رخ داده در مدارهای عملکردی جداگانه یک محصول (نصب) یا محصول را به عنوان یک کل توضیح می دهد. نمودار عملکردی توضیحی از انواع خاصی از فرآیندهایی است که در بلوک ها و مدارهای عملکردی یکپارچه یک دستگاه اتفاق می افتد. شکل 2.2 نمودار عملکردی برنامه توسعه یافته را نشان می دهد.

شکل 2.2 - نمودار عملکردی برنامه

شرح رویه ها، توابع و ماژول ها

اعلامیه ماژول:

هر فایل منبع باید حاوی یک اعلان ماژول باشد. کلمه واحد یک کلمه کلیدی است، بنابراین باید با حروف کوچک نوشته شود. نام ماژول می تواند دارای حروف بزرگ و کوچک باشد و باید همان نامی باشد که سیستم عامل برای این فایل استفاده می کند.

ماژول های استاندارد زبان دلفی محیط دلفی شامل مجموعه ای عالی از ماژول ها است که توانایی های آنها حتی برنامه نویس سخت افزاری را نیز راضی می کند. همه ماژول ها را می توان به دو گروه تقسیم کرد: ماژول های سیستم و ماژول های اجزای بصری.

ماژول های سیستم عبارتند از System، SysUtils، ShareMem، Math. آنها حاوی متداول ترین نوع داده های مورد استفاده در برنامه ها، ثابت ها، متغیرها، رویه ها و توابع هستند. ماژول System قلب محیط دلفی است. زیرروال های موجود در آن عملکرد تمام ماژول های دیگر سیستم را تضمین می کند. ماژول System به طور خودکار در هر برنامه گنجانده شده است و نیازی به مشخص شدن در عبارت use ندارد.

ماژول های مؤلفه بصری (VCL - Visual Component Library) برای توسعه بصری برنامه های کاربردی رابط کاربری گرافیکی با ویژگی های کامل - برنامه هایی با رابط کاربر گرافیکی (رابط کاربری گرافیکی) استفاده می شود. این ماژول ها با هم یک کتابخانه شی گرا سطح بالا با انواع عناصر رابط کاربری را نشان می دهند: دکمه ها، برچسب ها، منوها، پانل ها و غیره. علاوه بر این، ماژول های این کتابخانه حاوی ابزارهای ساده و کارآمد برای دسترسی به پایگاه های داده است. این ماژول ها به طور خودکار زمانی که اجزا بر روی فرم قرار می گیرند متصل می شوند.

شرح رویه ها:

این روش صفحه عنوان و صفحه را بسته و از برنامه خارج می شود.

روش TForml.Button2Click(فرستنده: TObject);

این روش منوی اصلی برنامه را باز می کند و صفحه عنوان را از صفحه حذف می کند.

رویه TForm2.Button1Click(فرستنده: TObject);

این روش پنجره ای را با انتخاب روش برای حل مشکل حمل و نقل باز می کند و پنجره منو را از روی صفحه حذف می کند.

این روش پنجره ای را باز می کند که حاوی اطلاعاتی در مورد برنامه توسعه یافته است و پنجره منو را از روی صفحه حذف می کند.

این رویه پنجره ای را با اطلاعات راهنما برای برنامه باز می کند که کار کاربر را آسان کرده و پنجره منو را حذف می کند.

این روش پنجره ای را در مورد توسعه دهنده باز می کند و پنجره منو را حذف می کند.

رویه TForm2.Button5Click(فرستنده: TObject);

این روش پنجره منو را بسته و از برنامه خارج می شود.

رویه TForm3.Button1Click(فرستنده: TObject);

این روش به منوی اصلی خارج می شود و پنجره را با انتخاب روش برای حل مشکل حمل و نقل می بندد:

روش TForm3.Button3Click(فرستنده: TObject);

این روش با استفاده از سه روش پنجره را با راه حل های مسئله حمل و نقل می بندد و فرمی را با حل مسئله با استفاده از روش حداقل هزینه نمایش می دهد:

این روش با استفاده از سه روش، پنجره را با راه حل های مشکل حمل و نقل می بندد و فرمی را با راه حل مسئله با استفاده از روش اولویت دوگانه نمایش می دهد:

روش TForm2.Button2Click(فرستنده: TObject);

روش TForm2.Button3Click(فرستنده: TObject);

روش TForm2.Button4Click(فرستنده: TObject);

این رویه ها به کاربر اجازه می دهد تا از منوی اصلی به هر موردی در برنامه برود: "فرم راه حل"، "راهنمای کاربر"، "اطلاعات توسعه دهنده"، "خروج".

روش گام به گام؛

این یک روش برای انجام محاسبات گام به گام در برنامه است، شما می توانید هر مرحله از پر کردن جدول را دنبال کنید. پس از انجام یک محاسبه، رویه محاسبه را قطع می کند و منتظر دستورات کاربر می ماند.

رویه TForm4.Label2Click(فرستنده: TObject);

رویه TForm4.Label3Click(فرستنده: TObject);

رویه TForm4.Label4Click(فرستنده: TObject);

رویه TForm4.Label5Click(Sender: TObject);

این رویه‌ها بسته به آیتم منوی انتخاب شده، قسمت متن یادداشت را با محتوای یک سند متنی بارگیری می‌کنند. اسناد متنی حاوی اطلاعاتی در مورد استفاده از برنامه است.

رویه TForm1.Button8Click(فرستنده: TObject);

این روش محاسبات را با استفاده از فرمول ها انجام می دهد، مقادیر وارد شده را جایگزین می کند و در نهایت نتیجه را روی یک متغیر می نویسد.

رویه TForm1.Button9Click(فرستنده: TObject);

این روش پاسخ را در یک فیلد متنی نمایش می دهد.

روش TForm1.Button2Click(فرستنده: TObject);

این روش فیلدهای ورودی را با داده های اولیه مطابق با تکلیف پروژه دوره پر می کند.

رویه TForm3.Button4Click(فرستنده: TObject);

رویه TForm4.Button1Click(فرستنده: TObject);

این مراحل پنجره را بسته و فرمی را با انتخاب آیتم های منو نمایش می دهد.

روش تمیز کردن؛

این روش فیلدهای ورودی و خروجی را پاک می کند و متغیرها را از مقداری که نگه می دارند آزاد می کند.


توسعه بلوک دیاگرام برنامه (معماری) یکی از مهمترین مراحل در فرآیند توسعه نرم افزار به دلایل زیر است:

  • انتخاب اشتباه معماری منجر به خطر شکست کل پروژه در آینده می شود.

  • این مرحله برای کل فرآیند توسعه اساسی است.

  • یک معماری سنجیده، اصلاح محصول نرم افزاری را در صورت تغییر الزامات آن آسان می کند.
معماری به عنوان مجموعه ای از اجزای برنامه و همچنین ارتباطات و روش های سازماندهی تبادل اطلاعات بین آنها درک می شود. اولین وظیفه ای که باید در هنگام توسعه نمودار ساختاری یک سیستم حل شود، شناسایی اجزای تشکیل دهنده آن است.

بر اساس تجزیه و تحلیل الزامات سیستم، مجموعه ای از تمام توابع تعیین می شود که برنامه باید از آنها پشتیبانی کند. در مرحله بعد، توابع به دست آمده در گروه های منطقی به هم پیوسته ترکیب می شوند. هر یک از این گروه ها می توانند به یکی از اجزای سیستم نرم افزار تبدیل شوند. شما باید برای این واقعیت آماده باشید که نسخه اول مجموعه اجزای کامل نخواهد بود. در طول فرآیند تحلیل ویژگی و در مراحل اولیه طراحی معماری، ممکن است ویژگی های اضافی شناسایی شود که باید در برنامه در حال توسعه گنجانده شوند. در بیشتر موارد، این عملکردها برای انجام فرآیندهای تکنولوژیکی برای حفظ سیستم در حالت دست نخورده و عملیاتی ضروری خواهند بود. کاملاً طبیعی است که فرض کنیم این ویژگی های کاربردی را نمی توان برای مشتری سیستم نرم افزاری و توسعه دهندگان در اولین مراحل توسعه شناخت.

اول از همه، معماری برنامه باید شامل یک توصیف کلی از سیستم باشد. بدون چنین توصیفی، ایجاد یک تصویر منسجم از بسیاری از جزئیات کوچک یا حداقل دوازده کلاس جداگانه بسیار دشوار است. معماری باید شامل شواهدی باشد مبنی بر اینکه گزینه های جایگزین در طول توسعه آن در نظر گرفته شده و انتخاب سازمان سیستم نهایی را توجیه کند.

معماری باید به وضوح وظایف هر جزء را مشخص کند. یک جزء باید دارای یک حوزه مسئولیت باشد و تا حد امکان کمتر از حوزه مسئولیت سایر اجزا اطلاع داشته باشد. با به حداقل رساندن میزان اطلاعاتی که مؤلفه‌های اطلاعات در مورد سایر مؤلفه‌ها می‌دانند، می‌توانید به راحتی اطلاعات طراحی برنامه را به اجزای جداگانه بومی‌سازی کنید.

معماری باید قوانین ارتباط بین اجزای برنامه را به وضوح تعریف کند و توضیح دهد که یک مؤلفه معین می تواند از کدام مؤلفه ها به طور مستقیم، کدام یک به طور غیرمستقیم و کدام مؤلفه اصلاً استفاده کند.

رابط کاربری اغلب در مرحله نیازمندی ها طراحی می شود. اگر اینطور نیست، باید در مرحله طراحی معماری مشخص شود. معماری باید عناصر اصلی قالب صفحه وب، رابط گرافیکی (GUI) و غیره را توصیف کند. قابلیت استفاده از رابط می تواند در نهایت محبوبیت یا شکست یک برنامه را تعیین کند.

معماری برنامه ماژولار است به طوری که می توان رابط گرافیکی را بدون تأثیر بر منطق اصلی برنامه تغییر داد.

برنامه پردازش پرسشنامه های نظرسنجی دانشجویان را می توان به دو بخش با عملکردها و سطوح دسترسی متفاوت برای کاربران تقسیم کرد:


  • سامانه نظرسنجی دانش آموزی؛

  • سیستم پردازش نتایج نظرسنجی؛

  • سیستم کنترل.
همه بخش ها توسط یک پایگاه داده مشترک به یک برنامه متصل می شوند.



شکل 2.1. - ساختار سیستم


سیستم نظرسنجی شامل توابع زیر است:

  • صدور یک سوال از پرسشنامه؛

  • بررسی خودکار نوع و صحت داده های وارد شده؛

  • ذخیره داده ها در پایگاه داده
سیستم پردازش نتایج نظرسنجی به شما امکان می دهد:

  • نمایش یا چاپ گزارش های نظرسنجی؛

  • مشاهده اطلاعات مربوط به نظرسنجی از یک دانش آموز خاص؛

  • نتایج نظرسنجی های فعلی و قبلی را با سوالات مشابه مقایسه کنید.
سیستم کنترل اجازه می دهد:

  • کنترل انجام نظرسنجی؛

  • مدیریت داده ها - اضافه کردن، حذف و تغییر.
به نوبه خود، هر یک از سیستم ها را می توان بر اساس محیطی که در آن اجرا می شود به دو زیر سیستم تقسیم کرد:

  • قسمت سرور که به زبان برنامه نویسی PHP نوشته شده و روی سرور اجرا می شود.

  • بخش مشتری، با زبان نشانه گذاری HTML و زبان برنامه نویسی جاوا اسکریپت با استفاده از کتابخانه jQuery نوشته شده و در مرورگر کاربر اجرا می شود.
با
بخش سرور برنامه در ساختار آن با معماری MVC (Model-View-Controller) یا مدل-view-controller مطابقت دارد. MVC یک معماری نرم‌افزاری است که در آن مدل داده‌های برنامه، رابط کاربری و منطق کنترل به سه مؤلفه مجزا از هم تفکیک شده‌اند تا تغییر در یک جزء کمترین تأثیر را بر سایر مؤلفه‌ها داشته باشد.
شکل 2.2. – معماری Model-View-Controller
این رویکرد به شما امکان می دهد داده ها، ارائه و پردازش اقدامات کاربر را به سه جزء مجزا جدا کنید.

  • مدل(مدل) -ماژولی که مسئول محاسبه مستقیم چیزی بر اساس داده های دریافتی از کاربر است. نتیجه به‌دست‌آمده توسط این ماژول باید به کنترل‌کننده منتقل شود و نباید حاوی چیزی مرتبط با خروجی مستقیم باشد (یعنی باید در قالب داخلی سیستم ارائه شود). هدف اصلی این است که مدل را کاملاً مستقل از سایر قسمت ها کنیم و تقریباً هیچ چیز در مورد وجود آنها ندانیم که امکان تغییر کنترلر و نمای مدل را بدون دست زدن به خود مدل فراهم می کند و حتی امکان عملکرد چندین نمونه از آن را فراهم می کند. نماها و کنترلرها با یک مدل به طور همزمان. در نتیجه، تحت هیچ شرایطی یک مدل نمی‌تواند حاوی ارجاعاتی برای مشاهده یا اشیاء کنترل‌کننده باشد.

  • چشم انداز- ماژول خروجی اطلاعات مسئولیت های View شامل نمایش داده های دریافتی از مدل است. به طور معمول، view به مدل دسترسی آزاد دارد و می‌تواند داده‌ها را از آن بگیرد، اما این دسترسی فقط خواندنی است؛ View از تغییر هر چیزی در مدل یا حتی فراخوانی روش‌هایی که منجر به تغییر در وضعیت داخلی آن می‌شود، ممنوع است. برای تعامل با یک کنترلر، یک view معمولاً یک رابط شناخته شده برای کنترلر را پیاده سازی می کند، که اجازه می دهد نماها به طور مستقل تغییر کنند و هر کنترل کننده چندین نما داشته باشد.

  • کنترل کننده- ماژول کنترل ورودی و خروجی داده وظایف کنترل کننده شامل پاسخ دادن به رویدادهای خارجی و تغییر مدل و/یا نمای مطابق با منطق تعبیه شده در آن است. یک کنترلر می تواند بسته به موقعیت با چندین نما کار کند و از طریق یک رابط (از پیش شناخته شده) خاص که این نماها پیاده سازی می کنند با آنها تعامل داشته باشد. نکته مهم - در نسخه کلاسیک MVC، کنترلر داده ها را از مدل به نمای منتقل نمی کند.

    کنترلر داده ها را از کاربر دریافت کرده و به مدل ارسال می کند. علاوه بر این، پیام هایی را از مدل دریافت می کند و آنها را به view ارسال می کند. توجه به این نکته مهم است که هم view و هم کنترلر به مدل وابسته هستند. با این حال، مدل به کنترل کننده یا رفتار بستگی ندارد. این یکی از مزایای کلیدی چنین تقسیم بندی است. این به شما امکان می دهد یک مدل مستقل از نمایش بصری بسازید و همچنین چندین نمایش مختلف برای یک مدل ایجاد کنید.
مزایای معماری MVC نسبت به مدل سنتی:

  • شفافیت سیستم؛

  • تنها نقطه ورود به سیستم؛

  • استفاده مجدد از کد؛;

  • توسعه سریع؛

  • در دسترس بودن راه حل های آماده؛

  • سهولت پشتیبانی؛

  • آسان برای ایجاد تغییرات
بنابراین، استفاده از معماری MVC مزایای ملموسی را در طراحی و توسعه برنامه ای برای پردازش پرسشنامه های نظرسنجی برای دانشجویان دپارتمان فراهم می کند که هم بر سرعت خود توسعه و هم بر کیفیت نتیجه نهایی تأثیر مثبت دارد.

2. توسعه ساختار پایگاه داده برنامه

سازماندهی ساختار پایگاه داده بر اساس ملاحظات زیر شکل می گیرد:

  • کفایت به شی توصیف شده - در سطح یک مدل مفهومی و منطقی؛

  • سهولت استفاده برای حسابداری و تجزیه و تحلیل داده ها - در سطح به اصطلاح مدل فیزیکی.
با توجه به مدل ارائه داده ها، مدل های اصلی سلسله مراتبی، شبکه ای و مدل های رابطه ای هستند؛ بر این اساس، برای کار با هر یک از پایگاه های داده فوق، از DBMS خود استفاده می کنند.

در این مورد، مدل داده های رابطه ای مناسب ترین است، زیرا تمام اطلاعات را می توان به راحتی در قالب جداول ارائه کرد. مدل داده های رابطه ای یک مدل داده منطقی است که جنبه ساختاری، جنبه یکپارچگی و جنبه پردازش داده پایگاه های داده رابطه ای را توصیف می کند.

جنبه ساختاری- داده ها در پایگاه داده مجموعه ای از روابط هستند.

جنبه صداقت- روابط دارای شرایط یکپارچگی خاصی هستند.

جنبه پردازش- عملگرهای دستکاری رابطه پشتیبانی می شوند.

یکی از جنبه های مهم طراحی پایگاه داده عادی سازی است - فرآیند تبدیل پایگاه داده به فرمی که با فرم های معمولی مطابقت دارد. عادی سازی به محافظت از پایگاه داده شما در برابر مشکلات منطقی و ساختاری به نام ناهنجاری داده ها کمک می کند. به عنوان مثال، هنگامی که چندین رکورد یکسان در یک جدول وجود دارد، خطر نقض یکپارچگی داده ها هنگام به روز رسانی جدول وجود دارد. جدولی که عادی سازی شده است کمتر در معرض چنین مشکلاتی است، زیرا ساختار آن شامل تعریف روابط بین داده ها است که نیاز به رکوردهایی با اطلاعات تکراری را از بین می برد.

سیستم مدیریت پایگاه داده رایگان MySQL به عنوان DBMS انتخاب شد. انعطاف‌پذیری MySQL DBMS با پشتیبانی از تعداد زیادی از انواع جدول تضمین می‌شود: کاربران می‌توانند هم جداول MyISAM را انتخاب کنند که از جستجوی متن کامل پشتیبانی می‌کنند و هم جداول InnoDB که از تراکنش‌ها در سطح رکورد فردی پشتیبانی می‌کنند. با تشکر از معماری باز و مجوز GPL (مجوز عمومی عمومی گنو - یک مجوز نرم افزار رایگان، که هدف آن ارائه حقوق کپی، تغییر و توزیع برنامه ها به کاربر و همچنین اطمینان از اینکه کاربران همه برنامه های مشتق شده دریافت می کنند حقوق فوق)، MySQL DBMS دائماً انواع جدیدی از جداول ظاهر می شود.

یک مزیت مهم MySQL DBMS این است که به تعداد زیادی پلتفرم مانند AIX، FreeBSD، HP-UX، GNU/Linux، Mac OS X، NetBSD، OpenBSD، Solaris و Windows منتقل شده است. توجه داشته باشید که MySQL AB نه تنها کدهای منبع DBMS، بلکه ماژول های اجرایی آماده را که برای سیستم عامل های خاص کامپایل و بهینه شده اند، برای دانلود رایگان فراهم می کند.

MySQL دارای یک رابط برنامه نویسی کاربردی (API) برای زبان هایی مانند دلفی، سی، سی پلاس پلاس، جاوا، پرل، پی اچ پی، پایتون و روبی، کتابخانه هایی برای زبان های پلت فرم دات نت و همچنین پشتیبانی از ODBC از طریق درایور ODBC (Open) DataBase Connectivity یک رابط برنامه برای دسترسی به پایگاه های داده) MyODBC است.

نوع MyISAM به عنوان نوع جدول اصلی انتخاب شد. جداول MyISAM به طور ایده‌آل برای استفاده در ارتباط با برنامه‌های کاربردی وب بهینه‌سازی شده‌اند که عبارت‌های خواندنی غالب هستند. جداول مانند MyISAM نتایج عملکرد بسیار خوبی را در کوئری های SELECT نشان می دهد. دلیل این امر تا حد زیادی عدم پشتیبانی از تراکنش ها و کلیدهای خارجی است. با این حال، هنگام اصلاح و اضافه کردن رکوردها، کل جدول برای مدت کوتاهی قفل می شود، که می تواند منجر به تاخیرهای جدی تحت بارهای سنگین شود. اما در مورد برنامه ای برای تجزیه و تحلیل پرسشنامه های نظرسنجی، این یک مشکل جدی نیست، زیرا بار زیادی روی سیستم برنامه ریزی نشده است.

یکی دیگر از مزایای جداول مانند MyISAM استقلال پلت فرم است. فایل های جدول را می توان بین کامپیوترهای با معماری های مختلف و سیستم عامل های مختلف بدون هیچ گونه تبدیلی جابه جا کرد.

جداول MyISAM می توانند رکوردهای ثابت، پویا یا فشرده داشته باشند. انتخاب بین قالب ثابت و پویا توسط تعاریف ستون دیکته می شود.

ساختار پایگاه داده در شکل 2.4 نشان داده شده است.

آر

شکل 2.3. – ساختار پایگاه داده


روابط بین جداول سازماندهی شده در پایگاه داده به شما امکان می دهد تا حذف آبشاری و به روز رسانی داده ها را انجام دهید. استفاده از جداول پیوند باعث شد تا افزونگی داده ها به حداقل ممکن کاهش یابد.

جدول it_students حاوی داده هایی در مورد دانش آموزانی است که نظرسنجی را تکمیل کردند.

جدول 2.1 - جدول داده های "it_students".


رشته

تایپ کنید

طول

شرح

شناسه

عددی

11

فهرست مطالب

تعداد

عددی

11

شماره شناسنامه دانشجویی

نام

نمادین

100

نام

نام دوم

نمادین

100

نام خانوادگی

نام خانوادگی

نمادین

100

نام خانوادگی

تولد

تاریخ

-

تاریخ تولد

year_postupl

سال

-

سال پذیرش

نشانی

نمادین

500

نشانی

phone_h

نمادین

15

تلفن منزل

phone_m

نمادین

15

تلفن همراه

پست

نمادین

250

آدرس ایمیل

icq

عددی

10

شماره ICQ

جدول it_answers_var شامل گزینه هایی برای پاسخ به سوالات نظرسنجی است.

جدول 2.2 - جدول داده ها "it_answers_var"

جدول it_questions حاوی سوالات نظرسنجی است.

جدول 2.3 - جدول داده "it_questions".

جدول it_tests_cfg سوالات نظرسنجی را به یک پرسشنامه خاص مرتبط می کند.

جدول 2.4 - جدول داده ها "it_tests_cfg"

جدول it_tests حاوی اطلاعات مربوط به تمام پرسشنامه ها و تاریخ های نظرسنجی است.

جدول 2.5 - جدول داده ها "it_tests".

جدول it_text_answers حاوی داده‌هایی درباره پاسخ‌های دانش‌آموز است که به صورت دستی وارد شده‌اند.

جدول 2.6 - جدول داده ها "it_text_answers"

جدول it_students_answers حاوی داده هایی در مورد پاسخ های دانش آموزان است.

جدول 2.6 - جدول داده ها "it_students_answers"

3. توسعه یک مدل جریان اطلاعات پایگاه داده

از آنجایی که برنامه تجزیه و تحلیل پرسشنامه های نظرسنجی دانشجویان بر اساس اصل MVC ساخته شده است، جریان های اطلاعاتی را می توان به صورت زیر نشان داد. هنگامی که درخواستی از کاربری دریافت می شود که یک مرورگر را به سرور وب می فرستد، کنترل کننده با پیروی از الگوریتم های برنامه ریزی شده، درخواست دریافت شده را واجد شرایط می کند، آن را تغییر داده و به مدل ارسال می کند. مدل که رابط بین کنترل کننده و DBMS است، درخواست را تفسیر می کند و تماس مناسب را با MySQL DBMS برقرار می کند و نتایج را به کنترل کننده برمی گرداند.

قابل توجه است که برای کنترلر پنهان می ماند که با چه نوع یا پیاده سازی DBMS کار می کند؛ همه فراخوانی ها به پایگاه داده از طریق مدل انجام می شود که وظیفه اصلی آن انتزاع کار با داده است. به جای پایگاه داده، حتی می توانید از یک فایل متنی یا XML استفاده کنید؛ این برای کنترل کننده مهم نیست. به موازات آن، کنترلر درخواستی را به کامپوننت view ارسال می کند که قالب نهایی را می سازد و آن را به کنترل کننده برمی گرداند. همچنین این امکان وجود دارد که تبادل داده مستقیماً بین مدل و نما رخ دهد. کنترلر انتخاب از پایگاه داده و قالب view را ترکیب کرده و به مرورگر کاربر ارسال می کند.



شکل 2.4. - طرح جریان اطلاعات معماری MVC

4. توسعه پشتیبانی الگوریتمی

پشتیبانی الگوریتمی برای همه اجزای برنامه دارای تفاوت های قابل توجهی است، زیرا آنها عملکردهای متفاوتی دارند.

هنگامی که یک دانش آموز برای اولین بار وارد سیستم نظرسنجی می شود، یک شناسه جلسه جدید ایجاد می شود. یک جلسه یا جلسه به سرور اجازه می دهد تا کاربر را با استفاده از یک شماره خاص شناسایی کند که منحصر به فرد است و در هنگام تعامل کاربر با سرور اختصاص داده می شود. علاوه بر این، جلسات به شما این امکان را می دهد که متغیرها را به آن کاربر متصل کرده و آن متغیرها را در سرور ذخیره کنید. به عبارت دیگر، جلسات به شما این امکان را می دهند که متغیرها را برای همه اجزای برنامه جهانی کنید. بنابراین، سیستم نظرسنجی می تواند بدون ابهام تعیین کند که داده های خاص از کدام کاربر کار می کند.

D
در مرحله بعد، دانشجو به یک سری سوالات نظرسنجی پاسخ می دهد و تنها پس از تکمیل نظرسنجی، تمام داده ها در پایگاه داده ذخیره می شود. الگوریتم عملکرد سیستم نظرسنجی در شکل 2.5 نشان داده شده است.

شکل 2.5. – الگوریتم عملکرد سیستم نظرسنجی

یکی از مهمترین نکات امنیتی برای یک برنامه وب، بررسی تمام داده های دریافتی است، بنابراین همیشه باید داده های وارد شده توسط کاربر در فرم های جستجو، پر کردن فیلدهای ثبت نام و غیره را برای وجود داده های "خطرناک" بررسی کنید. این می تواند کدهای مخرب جاوا اسکریپت، دستورات PHP یا PERL یا (خطرناک ترین) دستورات به سرور باشد.

همیشه باید به خاطر داشته باشید که مطلقاً هر کاربری برای یک برنامه وب محافظت نشده یک خطر است، بنابراین همیشه ارزش بررسی درخواست ها و متغیرهای دریافتی از کاربر را دارد.


  • تجزیه و تحلیل متغیرهای POST و GET و آرایه های ابرجهانی.

  • جداسازی متغیرها؛

  • فیلتر کردن متغیرهای رشته
بررسی متغیرهای ورودی در همان ابتدای برنامه ضروری است تا از کارکردن داده های تایید نشده و بالقوه خطرناک کاربران با توابع و پرس و جوها به پایگاه داده جلوگیری شود. بنابراین، تمام عملکردهای لازم برای محافظت در یک مکان یا حتی فایل خاص قرار می گیرند. در مورد برنامه پردازش پرسشنامه های نظرسنجی دانشجویی، فیلتر داده ها در سطح چارچوب CodeIgniter در حالت خودکار انجام می شود، زیرا خط $config["global_xss_filtering"] = درست است.

مطلقاً هر متغیر در یک برنامه باید در مرحله طراحی نوع خاص خود را داشته باشد، خواه یک عدد باشد یا یک رشته. این مشکل به ویژه برای زبان های برنامه نویسی با تایپ ضعیف یا غایب، که شامل PHP و جاوا اسکریپت است، شدیدتر است. بنابراین، در بحرانی ترین مناطق برنامه، متغیرها از نظر انطباق نوع بررسی می شوند.

متغیرهای متن به ویژه خطرناک هستند، به عنوان مثال یک فیلد برای وارد کردن پاسخ به یک سؤال نظرسنجی. آنها فقط باید برای کدهای مخرب بررسی شوند. برای از بین بردن خطر، برخی از عناصر از متن حذف می شوند یا با نمادهای دیگر جایگزین می شوند. الگوریتم پردازش داده های ورودی در چارچوب CodeIgniter در شکل 2.6 نشان داده شده است.

آر
شکل 2.6. – الگوریتم پردازش داده های دریافتی در چارچوب CodeIgniter

2.5 توسعه رابط برنامه

یکی از مهمترین مسائل در توسعه یک سیستم نرم افزاری، توسعه رابط کاربری است. هر سیستمی که از ابزارهای فنی در عملیات خود استفاده می کند به کلاس سیستم های "انسان- ماشین" تعلق دارد. درست است که الزامات زیر را برای رابط سیستم های آزمایشی مطرح کنیم:


  • رابط کاربری باید واضح، ساده و آسان برای استفاده باشد

  • کاربر نباید با اقداماتی که مربوط به کار در حال انجام است پریشان شود.
رابط کاربری به زبان نشانه گذاری HTML با استفاده از جاوا اسکریپت و کتابخانه jQuery ساخته شده است که امکان ساخت یک رابط کاربری تعاملی برای برنامه را فراهم می کند.

به

به عنوان مثال، یک فیلد متنی برای وارد کردن تاریخ با استفاده از jQuery به یک تقویم فشرده تبدیل شد که وظیفه بررسی خودکار صحت تاریخ وارد شده را دارد (شکل 2.7 را ببینید).

شکل 2.7. – رابط تقویم برای انتخاب تاریخ تولد
رابط کاربری موجود برای دانش آموزانی که در نظرسنجی شرکت می کنند تا حدودی مینیمالیستی است. در نتیجه، حواس دانش‌آموزان با گرافیک‌های زیبا پرت نمی‌شوند و به فکر کردن در مورد پاسخ سؤال تمرکز می‌کنند. رابط با یکی از

بررسی ها در شکل 2.8 نشان داده شده است.

شکل 2.8. - رابط برای پاسخ به یک سوال نظرسنجی


اگر به دلایلی دانش‌آموزی هیچ یک از پاسخ‌های یک سؤال را انتخاب نکند، اما سعی کند به سؤال بعدی برود، سیستم نظرسنجی به طور خودکار یک پیام خطا نشان می‌دهد و پیشنهاد می‌کند دوباره به سؤال فعلی پاسخ دهد (شکل 2.9 را ببینید).

شکل 2.9. - پیغام خطای ورود اطلاعات



سیستم پردازش نتایج نظرسنجی می تواند نتایج را در چندین حالت - متن، گرافیک و حالت چاپ نمایش دهد. رابط نمایش نتایج نظرسنجی به صورت گرافیکی در شکل 2.10 نشان داده شده است.

شکل 2.10. - رابط برای نمایش نتایج نظرسنجی



مرورگری که در رابطه با سرور یک کلاینت است و برای پردازش یک صفحه وب درخواستی برای آن ارسال می کند، می تواند پیاده سازی به اصطلاح تین کلاینت ها باشد. مرورگر قادر به نمایش صفحات وب است و به عنوان یک قاعده، بخشی از سیستم عامل است و وظایف به روز رسانی و نگهداری آن بر عهده تامین کننده سیستم عامل است. منطق برنامه بر روی سرور متمرکز است و عملکرد مرورگر عمدتاً نمایش اطلاعات دانلود شده از طریق شبکه از سرور و انتقال داده های کاربر به عقب است. یکی از مزیت های این رویکرد این واقعیت است که کلاینت ها مستقل از سیستم عامل خاص کاربر هستند و برنامه های کاربردی وب در نتیجه خدمات بین پلتفرمی هستند.

مزیت مهم ساخت برنامه های کاربردی وب برای پشتیبانی از عملکرد استاندارد مرورگر این است که عملکرد باید مستقل از سیستم عامل مشتری اجرا شود. به جای نوشتن نسخه های مختلف برای Microsoft Windows، Mac OS X، GNU/Linux و سایر سیستم عامل ها، برنامه یک بار ساخته شده و بر روی هر پلتفرمی مستقر می شود.

3. بخش فن آوری

3.1 فناوری توسعه برنامه

3.1.1 اصول اولیه وب سرور

نحوه عملکرد یک وب سرور: مشخص است که وب سرورها اطلاعات را به صورت فایل های متنی ذخیره می کنند که به آنها صفحات نیز می گویند. علاوه بر متن، چنین صفحاتی ممکن است حاوی پیوندهایی به صفحات دیگر (واقع در سرور مشابه یا متفاوت)، پیوندهایی به تصاویر گرافیکی، اطلاعات صوتی و تصویری، اشیاء مختلف ورودی داده ها (فیلدها، دکمه ها، فرم ها، و غیره) باشند. و همچنین سایر اشیاء و برنامه های اجرا شده بر روی سرور. در واقع، صفحات نوعی پیوند ارتباطی بین اشیا از انواع مختلف را نشان می دهند. آنها با استفاده از یک زبان نشانه گذاری فرامتنی خاص، زبان نشانه گذاری HyperText یا به اختصار HTML طراحی شده اند. برای دسترسی به اطلاعات موجود در وب سرورها، کاربران از برنامه های مشتری ویژه - مرورگرها استفاده می کنند. در حال حاضر ده ها مرورگر مختلف وجود دارد، اما تنها تعداد کمی از آنها در حال حاضر محبوب ترین هستند:


  • مایکروسافت اینترنت اکسپلورر؛

  • اپرا؛

  • موزیلا فایرفاکس

  • گوگل کروم.
هر صفحه وب سرور به اصطلاح آدرس منبع جهانی خود را دارد - Universal Resource Locator (URL). برای دسترسی به یک صفحه خاص، کاربر باید URL خود را در اختیار مرورگر قرار دهد. به عنوان یک قاعده، هر وب سرور دارای یک صفحه اصلی است که حاوی پیوندهایی به تمام صفحات دیگر در این سرور است. بنابراین، مشاهده محتویات یک وب سرور معمولاً با صفحه اصلی (شاخص) آن شروع می شود.

3.1.2 وب سرورهای غیرفعال و فعال

وب سرورهای غیرفعال و فعال وجود دارد. اگر صفحات سرور فقط حاوی متن ایستا و اطلاعات چند رسانه ای و همچنین لینک های فرامتن به صفحات دیگر باشد، سرور غیرفعال نامیده می شود. هنگامی که صفحات سرور مانند پنجره های برنامه های کاربردی تعاملی معمولی رفتار می کنند و با کاربر وارد گفتگو می شوند، با یک سرور فعال روبرو هستیم.


3.1.3 رویکرد شی گرا

در حال حاضر، استفاده از یک رویکرد شی گرا در هنگام توسعه برنامه های کاربردی وب به طور فزاینده ای محبوب شده است. و اگرچه مزایای این رویکرد به اندازه زبان های برنامه نویسی مانند C++ یا جاوا آشکار نیست، تعداد فزاینده ای از کتابخانه ها و برنامه های آزادانه توزیع شده در زبان برنامه نویسی PHP به سمت یک رابط شی گرا حرکت می کنند. . با این کار توسعه دهندگانی که از آنها استفاده می کنند مجبور می کنند به قابلیت های شی گرا PHP روی آورند. معرفی پشتیبانی کامل از مدل شی گرا در نسخه پنجم مفسر PHP باعث افزایش علاقه به این روش می شود.

اغلب، استفاده از یک رویکرد شی گرا برای مکان و نه مکان باعث موفقیت پروژه می شود. برنامه نویسی به عنوان یک مبتدی در سبک برنامه نویسی شی گرا اغلب شبیه پیمایش در یک میدان مین است - اگر ندانید مین ها کجا هستند، رسیدن به پایان پروژه غیرممکن است. برنامه نویسی شی گرا به خودی خود یک نوش دارو نیست - این یک فناوری کارآمد است که به شما امکان می دهد:


  • افزایش درصد کد منبع استفاده مجدد؛

  • هنگام برنامه نویسی، به جای اصطلاحات رایانه ای سطح پایین (فایل، خط و غیره) با مفاهیم و اشیاء دنیای واقعی (دانشجو، گروه، دوره و غیره) کار کنید، که به شما امکان می دهد پروژه های بزرگتر با خطاهای کمتر و کمتر ایجاد کنید. زمان کوتاه کارآمدتر
توسعه فناوری های برنامه نویسی، همانطور که دایکسترا خاطرنشان کرد، توسط تز "تفرقه و تسخیر" دیکته می شود. هر فناوری موفق فرض می‌کند که هر چه کد منبع یک برنامه کوتاه‌تر باشد، ایجاد، اشکال‌زدایی و نگهداری آن آسان‌تر است، و یک برنامه ساده نسبت به برنامه‌های پیچیده بسیار کمتر مستعد خطا است.

در آغاز عصر کامپیوتر، یک برنامه یک رشته واحد بود که یک آرایه از داده ها را پردازش می کرد. با گذشت زمان، پیچیدگی برنامه ها و الزامات اعمال شده بر روی آنها افزایش یافت و این روش سازماندهی داده ها غیرقابل قبول بود. یک رویکرد ساختاری پیشنهاد شد که در آن آرایه داده از هر نقطه برنامه قابل دسترسی بود، اما جریان اصلی برنامه به چندین رویه تقسیم شد. یک رویه کوچک جداگانه، حتی اگر از داده های رایج استفاده کند، بسیار آسان تر از مقدار زیادی کد منبع است.

هر روش دارای یک متغیر محلی است که طول عمر آن بر اساس مدت زمان انجام عمل تعیین می شود. برخی از رویه‌ها می‌توانند دیگران را فراخوانی کنند، اما آرایه داده در برنامه برای همه رویه‌ها مشترک و قابل دسترسی است. این رویکرد در برنامه نویسی رویه ای در PHP استفاده می شود و به شما امکان می دهد مجتمع های نرم افزاری بزرگ ایجاد کنید. اما توسعه، اشکال زدایی و پشتیبانی از برنامه هایی که با حجم زیادی از داده ها (مانند پایگاه داده دپارتمان) کار می کنند، همچنان پیچیده است و به مهارت و تجربه قابل توجهی نیاز دارد.

پاسخ به افزایش پیچیدگی ظهور یک رویکرد شی گرا برای برنامه نویسی بود: یک برنامه به چندین آرایه داده تقسیم می شود که هر یک دارای رویه های خاص خود هستند و همچنین رویه هایی که با آرایه های داده دیگر تعامل دارند.

در نتیجه، یک کار پیچیده به تعدادی زیرکار ساده‌تر تقسیم می‌شود و توسعه‌دهندگان راه انعطاف‌پذیرتری برای مدیریت پروژه پیدا می‌کنند - ویرایش یک بلوک عظیم یکپارچه کد بسیار دشوارتر از مجموعه‌ای از بلوک‌های کوچک و بدون اتصال است.

صرف نظر از اتصال به یک زبان برنامه نویسی، رویکرد شی گرا دارای تعدادی اصول کلی است که عبارتند از:


  • توانایی ایجاد انواع داده های انتزاعی، که به همراه انواع داده های از پیش تعریف شده (مانند عدد صحیح، رشته، و غیره)، اجازه می دهد تا انواع داده های خود (کلاس ها) را معرفی کنید و "متغیرهای" این نوع داده ها (اشیاء) را اعلام کنید. با ایجاد انواع داده های خود، برنامه نویس نه با اصطلاحات ماشینی (متغیر، تابع)، بلکه با اشیاء دنیای واقعی عمل می کند، در نتیجه به سطح جدیدی از انتزاع می رسد.

  • کپسوله‌سازی، که تعامل کاربر انواع داده‌های انتزاعی را فقط به رابط آنها محدود می‌کند و اجرای داخلی شی را پنهان می‌کند و از تأثیر بر وضعیت داخلی آن جلوگیری می‌کند. حافظه انسان محدود است و نمی تواند شامل تمام جزئیات یک پروژه عظیم باشد، در حالی که استفاده از کپسوله سازی به شما این امکان را می دهد که یک شی را طراحی کنید و بدون نگرانی در مورد اجرای داخلی و متوسل شدن به تعداد کمی از روش های رابط، از آن استفاده کنید.

  • وراثت، که به شما امکان می دهد با ایجاد یک کلاس جدید بر اساس آن، یک نوع داده انتزاعی موجود - یک کلاس را توسعه دهید. در این حالت، کلاس جدید به طور خودکار قابلیت های یک نوع داده انتزاعی موجود را به دست می آورد. اغلب، انواع داده های انتزاعی بیش از حد پیچیده هستند، بنابراین به توسعه متوالی خود متوسل می شوند و سلسله مراتبی از کلاس ها را از عمومی به خاص می سازند.

  • پلی مورفیسم، امکان ساخت زنجیره های کامل و درختان شاخه ای را می دهد که انواع داده های انتزاعی (کلاس ها) را از یکدیگر به ارث می برند. در این حالت، کل مجموعه کلاس‌ها تعدادی متد با نام‌های یکسان خواهند داشت: هر یک از کلاس‌های این درخت تضمین می‌شود که متدی با همان نام داشته باشند. این اصل به پردازش خودکار مجموعه داده ها از انواع مختلف کمک می کند.

3.1.4 ویژگی های چارچوب CodeIgniter

چارچوب CodeIgniter مورد استفاده با استفاده از رویکرد شی گرا نوشته شده است. تمام کلاس های کنترلرها، نماها و مدل های معرفی شده توسط برنامه نویس، کلاس های اصلی معرفی شده در خود فریم ورک را به ارث می برند. این امکان نوشتن کد منبع کوچکتر را فراهم می کند، زیرا تمام عملکردهای اساسی ضروری بلافاصله در دسترس هستند.

علاوه بر کلاس‌های کنترلر، نماها و مدل‌های موجود در اختیار برنامه‌نویس، فریم ورک CodeIgniter همچنین دارای پلاگین‌ها و توابع کمکی در دسترس برنامه‌نویس است. کمک کننده ها، همانطور که از نام آن پیداست، برای کمک به انجام برخی عملکردهای جزئی طراحی شده اند. به عنوان مثال، کمک هایی برای ساخت فرم های وب، دانلود فایل ها یا کار با جلسات وجود دارد. بر خلاف سایر عناصر اصلی چارچوب، کمک‌کننده‌ها مجموعه‌ای از توابع ابتدایی هستند که حتی بدون استفاده از رویکرد شی گرا نوشته می‌شوند. هر تابع یک کار کوچک و کاملا محدود را انجام می دهد. با این حال ، مجموعه بسیار بزرگ است و چنین "ریزه کاری" در کار بسیار مفید می شود.

پلاگین ها تقریباً همان کمک کننده ها هستند، به جز تفاوت اصلی: آنها مجموعه ای از توابع نیستند، آنها یک تابع هستند. علاوه بر این، می توانید به این واقعیت توجه کنید که کمک کننده ها بیشتر بخشی از هسته سیستم هستند، در حالی که افزونه ها چیزی خارجی هستند که توسط برنامه نویسان شخص ثالث توسعه یافته اند. در واقعیت، اینگونه معلوم می شود. حتی افزونه هایی که با کیت اصلی ارائه می شوند توسط کاربران CodeIgniter در جامعه نوشته شده اند.


3.1.5 Eclipse IDE

هنگام توسعه برنامه ای برای پردازش پرسشنامه های نظرسنجی برای دانشجویان دپارتمان، ما همچنین از ابزار برنامه نویس مهم و مفیدی به عنوان یک محیط توسعه یکپارچه (IDE - Integrated Development Environment) یعنی Eclipse استفاده کردیم. Eclipse یک فریمورک رایگان برای توسعه برنامه های کاربردی متقابل پلت فرم مدولار است. توسعه و نگهداری توسط بنیاد Eclipse.

شناخته شده ترین برنامه های کاربردی مبتنی بر پلت فرم Eclipse، "IDE های Eclipse" مختلف برای توسعه نرم افزار به زبان های مختلف هستند (به عنوان مثال، محبوب ترین "Java IDE" که در ابتدا پشتیبانی می شد). در این مورد، پسوندها برای برنامه نویسی در زبان های برنامه نویسی PHP (ماژول PDT) و جاوا اسکریپت (ماژول JSEclipse) و همچنین چیدمان با استفاده از زبان نشانه گذاری HTML استفاده شد.

3.2 فناوری تست برنامه

تست برنامه فرآیند شناسایی خطاها در نرم افزار است. در حال حاضر، روش‌های زیادی برای آزمایش برنامه‌ها وجود دارد، اما آنها تضمینی برای شناسایی و رفع تمام نقص‌ها و خطاها یا ایجاد عملکرد صحیح برنامه تجزیه‌وتحلیل‌شده ندارند. بنابراین، تمام روش‌های تست موجود در چارچوب یک فرآیند تأیید رسمی برای نرم‌افزار در حال تحقیق یا توسعه عمل می‌کنند.

این فرآیند تأیید رسمی می تواند ثابت کند که هیچ خطایی فقط از نظر روش مورد استفاده وجود ندارد، اما عدم وجود کامل آنها را تضمین نمی کند.

یک تست اطلاعاتی است که شامل داده های اولیه ویژه ای است که برای برنامه در حال اشکال زدایی انتخاب شده و نتایج مرجع مربوطه برای نظارت بر عملکرد صحیح برنامه استفاده می شود.

کنترل برنامه به انتخاب تست هایی خلاصه می شود که دریافت نتایج صحیح آنها عملکرد صحیح برنامه را برای بقیه داده های ورودی از کل محدوده مجاز مقادیر تضمین می کند.

این سیستم با استفاده از چندین روش آزمایش شد:


  • تست استرس؛

  • اشکال زدایی دستی و ردیابی برنامه با استفاده از پسوند XDebug.

  • تست واحد با phpUnit.
هنگام آزمایش برنامه های نوشته شده با PHP، باید بررسی کنید که آیا داده های نمایش داده شده در صفحه کاربر مطابق انتظارات هستند یا خیر. مشکلات اصلی زیر ممکن است:

  • هیچ چیزی روی صفحه نمایش داده نمی شود یا یک خطای سیستم با کد مربوطه نمایش داده می شود (خطای مجوز، خرابی وب سرور و غیره).

  • هنگام کار با پایگاه داده یک شکست رخ داد و یک گزارش خطا ایجاد می شود.

  • خرابی سرور به دلیل بار زیاد روی برنامه یا پایگاه داده؛

  • یک خطای اجرای برنامه رخ داده است که در نتیجه داده های نادرست یا گزارش خطا نمایش داده می شود.

3.2.1 تست بارگذاری برنامه

یکی از مهم ترین تست ها تست بار است که به شما امکان می دهد گلوگاه ها را در کد منبع یا تماس های پایگاه داده پیدا کنید.

ابزارهای زیادی وجود دارد که کار افزایش تعداد درخواست ها و فراخوانی چندین عملیات روی سرور را ساده می کند. آزمایش محدودیت بار باید طوری طراحی شود که حجم کاری مورد انتظار برنامه را به دقت تکرار کند.

برای تست بار برنامه پردازش پرسشنامه های نظرسنجی برای دانشجویان گروه از برنامه کرل لودر استفاده شد. Curl-loader یک ابزار تست عملکرد برنامه های تحت وب است که به زبان برنامه نویسی C نوشته شده است. این ابزار قادر به شبیه سازی صدها و حتی هزاران تماس سرور از طریق پروتکل های HTTP و HTTPS است و از کتابخانه libcurl استفاده می کند که به شما امکان می دهد به راحتی برنامه های کاربردی را آزمایش کنید. نیاز به مجوز و پشتیبانی از پروتکل HTTPS به شما امکان می دهد از ابزار curl-loader برای آزمایش بارگذاری برنامه های کاربردی وب که از طریق مکانیسم های انتقال رمزگذاری شده SSL (لایه سوکت های امن) و TLS (امنیت لایه حمل و نقل) کار می کنند، استفاده کنید.

3.2.2 اشکال زدایی با استفاده از ابزارهای داخلی PHP

رفتار استاندارد یک برنامه کاربردی که در پی اچ پی نوشته شده است در هنگام بروز خطا در کد به شدت به تنظیمات پیکربندی بستگی دارد. به عنوان یک قاعده، آنها در فایل پیکربندی php.ini تنظیم می شوند:

  • پارامتر display_errors که روی روشن یا خاموش تنظیم شده است، مشخص می کند که آیا پیام های خطا باید به کاربر نشان داده شود یا پنهان بماند.

  • پارامتر log_errors که روی روشن یا خاموش تنظیم شده است، باعث می‌شود مفسر PHP پیام‌هایی را در فایل گزارش رویداد بنویسد.

  • دستورالعمل error_reporting تعیین می کند که در چه مواردی یک هشدار باید تولید شود و در چه مواردی می توان آن را نادیده گرفت.
هنگام توسعه و اشکال زدایی یک برنامه در یک سرور آزمایشی، باید پارامتر display_errors را فعال کنید و پارامتر log_errors را غیرفعال کنید. این به برنامه نویس اجازه می دهد تا در سریع ترین زمان ممکن به وقوع یک موقعیت خطا واکنش نشان دهد و تعداد "سوئیچ ها بین پنجره ها" را به حداقل برساند.

در یک نسخه فعال برنامه، برعکس، باید پارامتر display_errors را غیرفعال کنید، اما log_errors را فعال کنید. از یک طرف، این امر زندگی مهاجمانی را که دیگر نمی توانند اطلاعات اشکال زدایی را ببینند، دشوارتر می کند. از سوی دیگر، در شرایط بحرانی، به شما کمک می کند تا متوجه شوید دقیقا چه اتفاقی افتاده و خطا را برطرف کنید، حتی اگر در محیط تست قابل تکرار نباشد.

در هر دو مورد، تنظیم پارامتر error_reporting به جزئی ترین حالت - E_ALL راحت است، که PHP را مجبور می کند تا کوچک ترین خطاها را در کد گزارش کند.

3.2.3 اشکال زدایی یک برنامه با استفاده از XDebug

در حالی که زبان برنامه نویسی PHP می تواند برای ایجاد اسکریپت های خط فرمان برای کارهایی مانند مدیریت سیستم و پردازش سنتی داده ها استفاده شود، قدرت این زبان به ویژه در برنامه های کاربردی وب مشهود است.

با توجه به مدت زمان کوتاه برنامه های کاربردی وب و طراحی لایه ای آنها (برنامه مشتری، شبکه، وب سرور، کد برنامه و پایگاه داده زیربنایی)، تشخیص خطاها در کد منبع می تواند دشوار باشد. حتی اگر فرض کنیم که همه لایه‌ها به جز کد PHP بدون نقص کار می‌کنند، ردیابی به یک خطای برنامه می‌تواند دشوار باشد، به خصوص اگر برنامه از تعداد زیادی کلاس استفاده کند.

عبارت echo PHP و توابعی مانند var_dump()، debug_zval_dump() و print_r() ابزارهای رایج و بسیار محبوب اشکال زدایی هستند که می توانند به حل مشکلات جزئی مختلف کمک کنند. با این حال، به عنوان ابزارهای آزمایش و اشکال زدایی، این عبارات (و حتی ابزارهای قابل اطمینان تر، به عنوان مثال، بسته PEAR Log) کمک چندانی نمی کنند و نه همیشه.

علاوه بر این، این نوع اشکال زدایی یک رویکرد brute force است. اگر اطلاعات لازم وجود ندارد، باید کد منبع را دوباره انجام دهید، مراحل قبلی را تکرار کنید و دوباره جستجوی خطا را شروع کنید. یک استراتژی بسیار مؤثرتر این است که برنامه را در حین اجرا آزمایش کنید. می توانید پارامترهای پرس و جو را فهرست بندی کنید، پشته فراخوانی های رویه را مشاهده کنید، و مقدار هر متغیر یا شی را بیابید. می توانید به طور موقت اجرای برنامه را قطع کنید و اعلان تغییرات در مقدار یک متغیر را دریافت کنید.

این کاوش "زنده" یا تعاملی توسط یک برنامه کاربردی خاص به نام دیباگر ارائه می شود. یک دیباگر یک فرآیند را اجرا می کند یا به آن متصل می شود تا آن را دستکاری کرده و حافظه آن را بررسی کند. یا در مورد زبان های تفسیر شده، دیباگر می تواند به طور مستقیم کد را تفسیر کند. یک دیباگر معمولی مدرن می تواند کد منبع را نمایه و مشاهده کند، ساختارهای داده پیچیده را به شکلی قابل خواندن نمایش دهد، و همزمان وضعیت برنامه، پشته تماس، خروجی برنامه و مقادیر همه متغیرها را نمایش دهد. برای مثال، معمول است که یک دیباگر ویژگی‌ها و متدهای یک کلاس را فهرست‌بندی و نمایش دهد.

به جای اضافه کردن دستی عملکردهای خروجی اشکال زدایی مختلف، می توانید از XDebug برای ایجاد یک گزارش ردیابی استفاده کنید. Trace log فهرستی از فراخوانی توابع و متدهای یک کلاس در طول اجرای برنامه است. مزیت آن این است که مطلقاً هر تماسی در لاگ منعکس می شود.

گزارش ردیابی معمولاً از اجرا به اجرا متفاوت است زیرا به داده های ورودی بستگی دارد که از درخواستی به درخواست دیگر متفاوت است.

ردیابی گزارش به شما کمک می کند تا بفهمید یک برنامه چگونه اجرا می شود، اما تجسم تمام شاخه های ممکن بسیار دشوار است مگر اینکه برنامه بسیار ساده باشد. به همین دلیل است که آزمایش برنامه های بزرگ بسیار دشوار است: مسیرهای توسعه بسیار زیادی وجود دارد و هر یک باید آزمایش شود.

ابزار اشکال زدایی برنامه XDebug همانطور که از نامش پیداست چندین قابلیت برای نمایش وضعیت برنامه ارائه می دهد و یک ابزار تحقیقاتی بسیار ارزشمند است. پس از نصب، XDebug برای جلوگیری از بازگشت بی نهایت مداخله می کند، اطلاعات پشته و ردیابی تابع را به پیام های خطا اضافه می کند، تخصیص حافظه را نظارت می کند و چندین عملکرد دیگر را انجام می دهد. Xdebug همچنین شامل مجموعه‌ای از توابع است که می‌توانند به کد منبع اضافه شوند تا داده‌های تشخیصی زمان اجرا را به دست آورند.

نتایج ماژول XDebug را می توان با استفاده از برنامه KCachegrind مشاهده کرد، که به شما امکان می دهد فرآیندهای رخ داده در کد منبع را تجسم کنید (شکل 3.1 را ببینید).

به طور خلاصه، XDebug یک ابزار کوچک اما بسیار مفید برای توسعه‌دهنده PHP است و باید روی هر مفسر PHP که برای توسعه استفاده می‌شود نصب شود. اما نباید از XDebug در سرورهای تولیدی استفاده کنید، زیرا این کار عملکرد را به شدت کاهش می دهد.
آر

شکل 2.1. – رابط برنامه KCachegrind

3.2.4 تست واحد با استفاده از phpUnit

تست واحد فرآیندی در برنامه نویسی است که به شما امکان می دهد تک تک ماژول های کد منبع برنامه را از نظر صحت بررسی کنید. ایده این است که برای هر تابع یا روش غیر ضروری، تست های اعتبار سنجی بنویسیم. این به شما امکان می دهد تا به سرعت بررسی کنید که آیا تغییر کد بعدی منجر به بروز خطا در قسمت های قبلاً نوشته شده و آزمایش شده برنامه شده است یا خیر و همچنین تشخیص و حذف چنین خطاهایی را آسان تر می کند. هدف از تست واحد این است که بخش‌های جداگانه یک برنامه را جدا کرده و نشان دهد که این بخش‌ها به صورت جداگانه کار می‌کنند.

هنگام اشکال زدایی و آزمایش برنامه برای پردازش پرسشنامه های نظرسنجی برای دانشجویان دپارتمان، از سیستم phpUnit استفاده شد که امکان تست واحد برنامه های کاربردی وب نوشته شده به زبان برنامه نویسی PHP را فراهم می کند.

برای نوشتن حداقل مجموعه ای از تست ها با استفاده از phpUnit، باید:


  • شامل کتابخانه PHPUnit.php.

  • یک زیر کلاس از کلاس پایه TestCase ایجاد کنید.

  • تعداد دلخواه روش های تست را به آن اضافه کنید که نام آنها با "تست" شروع می شود. پارامترهای از پیش شناخته شده به عنوان ورودی ارائه خواهند شد و نتیجه با استفاده از خانواده توابع Assert که توسط کلاس تست از کلاس پایه TestCase به ارث رسیده است، با یک مرجع مقایسه می شود.

  • کلاس PHPUnit_TestSuite را ایجاد کنید و نام کلاس را با مجموعه ای از تست ها به عنوان پارامتر ارسال کنید.

  • مجموعه ای از تست ها را اجرا کنید و نتیجه اجرا را بررسی کنید.

6 (؟). فهرست مطالب گرافیکی

6.1 بیان مشکل

6.2 بلوک دیاگرام برنامه


3. نمودار ساختاری برنامه

توابع اصلی که باید در برنامه ما پیاده سازی شوند از فرمول بندی و تجزیه و تحلیل مسئله به دست می آیند:

1) نمایش داده های کاربر به صورت جدول و کار با آن.

2) افزودن و حذف انواع شی.

3) نمایش گرافیکی طرح با قابلیت مقیاس.

4) کار با فایل ها و نتایج چاپ.

5) رابط کاربری مناسب.

در زیر یک بلوک دیاگرام عملکردی برنامه است که در قالب ماژول های اصلی و اتصالات بین آنها به تصویر کشیده شده است. به وضوح اجرای الزامات فوق را در برنامه نشان می دهد.

برنج. 3.1. ساختار عملکردی برنامه

بخش اصلی برنامه ماژول کنترل و تولید رابط است. این فرم اصلی را نشان می دهد که روی آن کنترل هایی وجود دارد که امکان انجام سایر عملکردها را فراهم می کند و همچنین رابط کاربری را تشکیل می دهد.


4. الگوریتم های اساسی

الگوریتم اصلی برای ساخت یک تصویر بر اساس داده های جدول اصلی است که در قالب روش plandraw() پیاده سازی شده است.

در زیر بلوک دیاگرام و توضیحات آن آمده است.

4.1 شرح الگوریتم

اگر برگه حاوی تصویر پلان ما فعال نشد، آن را فعال می کنیم.

ما جدولی از فواصل را تهیه می کنیم و آن را از ورودی های قبلی پاک می کنیم.

پارامترهای پس زمینه (رنگ) را تنظیم می کنیم و آن را ترسیم می کنیم، سپس پارامترهای قلم (ضخامت خط و سبک) را تعیین می کنیم که نمایش خطوط مسیر را در نقشه مشخص می کند. در ابتدا، ضخامت خط برابر با یک است - برای ترسیم یک شبکه مختصات.

با استفاده از ویژگی جدول RecordCount، تعداد ردیف های جدول اصلی را پیدا می کنیم.

نشانگر رکورد فعلی را روی اولین نشانگر تنظیم می کنیم و چرخه ای از گذر از تمام رکوردهای جدول را سازماندهی می کنیم که در آن تعداد مسیرها را می شماریم.

در همان ابتدای چرخه، ما برای نمایش مقیاس آماده می شویم - یک ضریب بزرگنمایی (در واحدهای کامل) را به متغیر مقیاس اختصاص می دهیم و برای هر دو نوار پیمایش حداکثر مقدار را تعیین می کنیم که به درجه بزرگنمایی و میزان بزرگنمایی بستگی دارد. اندازه تصویر

اگر شماره مسیر صفر باشد، شرط ترسیم یک شبکه مختصات - نصف النهارها و موازی ها - برقرار است. ابتدا یک چرخه ترسیم نصف النهارها انجام می شود - بسته به درجه بزرگنمایی (15، 6، 3 یا 1 درجه) به صورت پله ای از 0 تا 360 درجه می رویم و در نزدیکی هر نصف النهار درجه طول جغرافیایی مربوطه علامت گذاری می شود (شرقی) طول جغرافیایی - با علامت "+") ، غربی - با علامت "-"). نصف النهار اول به رنگ سیاه نشان داده شده است. اقدامات مشابهی در چرخه ترسیم موازی انجام می شود، تنها تفاوت این است که چرخه از 0 تا 180 درجه اجرا می شود. علامت "+" نشان دهنده عرض شمالی و علامت "-" نشان دهنده عرض جغرافیایی جنوبی است.

برای نمایش خطوط مسیر، ضخامت خط را به 2 تغییر دهید.

ما سه آرایه ایجاد می کنیم که در آنها شاخص های رکوردها و مختصات مسیر فعلی را وارد می کنیم. در مرحله بعد، یک حلقه سازماندهی می کنیم که در آن ورودی های جدول را مرور می کنیم و این آرایه ها را برای مسیر فعلی پر می کنیم. علاوه بر این، مقادیر از قبل مقیاس شده در آرایه های مختصات وارد می شوند. در همان سیکل تعداد نقاط مسیر را می شماریم.

در حلقه بعدی، محتویات آرایه شاخص را مرتب می کنیم تا بتوانیم نقاط راه را به ترتیبی که در جدول نشان داده شده اند رسم کنیم.

رنگ خط را بسته به شماره مسیر تنظیم کنید. و ما یک حلقه را سازماندهی می کنیم که خطوط را ترسیم می کند.

در چرخه ترسیم خط به صورت زیر عمل می کنیم: با در نظر گرفتن موقعیت میله های اسکرول، موقعیت پنجره نسبت به نقشه محاسبه می شود و مختصات نقطه در پنجره نسبت به این موقعیت محاسبه می شود. اگر این اولین پاس ما است، به سادگی مکان نما را به نقطه ای با مختصات محاسبه شده منتقل می کنیم، اگر نه، و پرچم ترسیم خط روشن است، یک خط از نقطه قبلی به این نقطه می کشیم. اگر چک باکس غیرفعال باشد، فقط نقاط روی نقشه قرار می گیرند.

سپس فاصله بین نقاط واقع در کره زمین محاسبه می شود که پیش بینی های آنها را روی نقشه خود نشان داده ایم. فاصله ها بر حسب کیلومتر محاسبه می شود، شعاع زمین 6371 کیلومتر در نظر گرفته شده است. اگر i برابر با 0 نباشد فاصله محاسبه می شود و این اولین گذر از چرخه نیست. این شرط ضروری است زیرا ما از مختصات نقطه قبلی برای یافتن فاصله تا نقطه فعلی استفاده می کنیم.

از آنجایی که سطح زمین کروی است، باید طول قوس را محاسبه کنیم. مشکل اصلی در اینجا یافتن زاویه ای است که قوس در آن قرار می گیرد.

سه مورد در نظر گرفته شده است:

1) اگر نقاط در طول جغرافیایی یکسان باشند، تعیین زاویه آسان است - برابر است با تفاوت بین مقادیر عرض جغرافیایی بزرگتر و کوچکتر.

2) اگر نقاط در یک عرض جغرافیایی باشند، تعیین آن نیز دشوار نیست - برابر است با تفاوت بین مقادیر طول جغرافیایی بزرگتر و کوچکتر، ضرب در تصحیح cos(f)، که در آن f عرض جغرافیایی فعلی است.

3) اگر نقاط در طول و عرض جغرافیایی متفاوتی قرار گیرند، این مورد برای یافتن زاویه پیچیده تر است. بیایید با جزئیات به آن نگاه کنیم.

ابتدا اختلاف طول نقاط را پیدا می کنیم، گویی در یک عرض جغرافیایی هستند، در تصحیح cos(f) ضرب می کنیم و فاصله خطی بین آنها را با استفاده از قضیه کسینوس محاسبه می کنیم (دو ضلع دیگر مثلث عبارتند از شعاع های زمین). به همین ترتیب فاصله بین نقاط را طوری محاسبه می کنیم که انگار در طول جغرافیایی یکسان هستند. این فاصله ها را l1 و l2 نشان می دهیم.

حالا یک مثلث قائم الزاویه داریم با پایه های l1، l2 که فاصله آن l3 است. ما آن را با استفاده از قضیه فیثاغورث محاسبه می کنیم. هدف ما یافتن زاویه a است. با استفاده از قضیه کسینوس، کسینوس این زاویه را پیدا می کنیم. با محاسبه کسینوس قوس از روی آن، زاویه را دریافت می کنیم! در زیر یک نقاشی توضیحی آورده شده است.


برنج. 4.1. توضیح محاسبات فاصله در طول و عرض جغرافیایی مختلف.

پس از یافتن زاویه، طول کمان را محاسبه کرده و فاصله حاصل را به همراه تعداد مسیر فعلی در جدول فاصله وارد می کنیم.

توجه: از آنجایی که توابع کسینوس و آرکوزین با زوایای مشخص شده بر حسب رادیان عمل می کنند، برنامه رادیان ها را به درجه و بالعکس تبدیل می کند. همه این محاسبات منجر به انباشته شدن خطاها می شود.

تمام فرمول های ذکر شده در پیوست E آورده شده است.

پس از محاسبه فاصله، در صورت روشن بودن پرچم مربوطه، آن را در پلان در کنار نقطه فعلی نمایش می دهیم. علاوه بر این، با توجه به شرط تخمین طول مسیر، شکل نه طول یک قطعه، بلکه مجموع طول بخش‌های قبل از این نقطه را نشان می‌دهد. کاربر می تواند به طول بخش های جداگانه در جدول فاصله نگاه کند.

اگر چک باکس "نمایش نوع شی" علامت زده شود، نقشه همچنین نوع شی را برای یک نقطه مشخص نشان می دهد.

اگر کادر انتخاب «جدول فاصله نشان داده نشود» غیرفعال است، آن را قابل مشاهده کنید.

پس از ترسیم تمام مسیرها، حافظه اختصاص داده شده برای آرایه های شاخص و مختصات را آزاد می کنیم.


4.2 نمودار جریان الگوریتم

برنج. 4.2. فلوچارت الگوریتم ترسیم پلان.


5. پیاده سازی نرم افزار 5.1 انتخاب یک محیط توسعه برنامه

همانطور که قبلاً در "بیانیه مشکل" ذکر شد، محیط توسعه Borland C++Builder 5 برای ایجاد این برنامه انتخاب شده است. برای اولین بار با Builder روبرو شده است و آنها به خوبی با پایگاه داده ها و گرافیک ها کار می کنند، این دقیقا همان چیزی است که ما برای توسعه برنامه خود به آن نیاز داریم.

نقطه ضعف، به نظر من، کد اجرایی بزرگ برنامه است - برای اینکه بتواند روی ماشینی که Builder در آن نصب نشده است کار کند، باید تمام کتابخانه های استفاده شده در آن گنجانده شود، به همین دلیل است که اندازه برنامه چندین برابر بزرگتر می شود.

علاوه بر این، خوبی بیلدر این است که کامپوننت ها دارای ویژگی های زیادی هستند که نه تنها در حین ساخت، بلکه در حین اجرای برنامه نیز قابل تغییر هستند که کار با آنها را انعطاف پذیرتر می کند.

5.2 کار با جداول

ما از Paradox به عنوان درایور پایگاه داده استفاده می کنیم. این نوع پایگاه داده ابتدا به این دلیل انتخاب شد که Builder دارای ابزارهای داخلی برای کار با جداول پارادوکس است، مانند موتور پایگاه داده Borland، و همچنین همراه با برنامه Database Desktop است. ثانیاً مزیت Paradox این است که نام پایگاه داده را می توان به عنوان مسیر دایرکتوری که فایل جدول در آن قرار دارد مشخص کرد و همه جداول در فایل های جداگانه ذخیره می شوند. سوم، فضای کمی را اشغال می کنند و ساده ترین میزهای محلی هستند. چهارم، جداول پارادوکس به شما امکان می دهد فیلدهای کلیدی ایجاد کنید.

برای اطمینان از کار با جدول، اجزای زیر را روی فرم نصب کردیم:

یک DBGrid که با آن می توانیم داده ها را در جدول وارد، حذف یا ویرایش کنیم یا به سادگی آن را نمایش دهیم.

یک لیست DBComboBox که با آن می توانیم داده ها را از جدول شی در رکورد جاری جدول اصلی وارد کنیم. قبل از استفاده از این لیست، باید با مقادیر جدول شی پر شود. برای این کار هنگام راه اندازی برنامه، تمامی رکوردهای آن را مرور می کنیم و در قسمت Items این لیست، محتویات آنها را وارد می کنیم.

Navigator DBNavigator - با آن می توانید رکوردهای موجود در جدول را حذف، اضافه کنید، ویرایش کنید و همچنین در میان آنها پیمایش کنید. ما آن را به شبکه ای که جدول ما در آن نمایش داده می شود وصل می کنیم.

همه این اجزا از طریق DataSourse به جدول متصل می شوند که در ویژگی های آن نام آن را مشخص می کنیم. علاوه بر این، خود جدول نیز به عنوان یک جزء نمایش داده می شود، جدول، که در آن باید بیشترین توجه را به سه ویژگی معطوف کرد:

1) فعال - نشان می دهد که آیا جدول فعال است. اگر در صورت غیرفعال بودن این ویژگی سعی کنید به آن دسترسی داشته باشید، برنامه خطای «نمی‌توان این عملیات را روی مجموعه داده بسته انجام داد» ایجاد می‌کند. در طول آزمایش، تمام موقعیت های ممکن که می تواند منجر به این خطا شود، ردیابی و رسیدگی شد.

2) DatabaseName - نام پایگاه داده؛ مسیر دایرکتوری که جدول از آن باز یا ایجاد شده است به عنوان آن گرفته می شود.

3) TableName – نام جدول – فایلی با پسوند .db که جدول در آن ذخیره می شود.

تمام این خصوصیات در طول اجرای برنامه تغییر می کنند.

برای خلاص شدن از شر مشخصات به جزء جدول نیاز داریم. ما می‌توانیم تحت عنوان Table، هر جدول خاصی را باز کنیم و فقط ویژگی‌های Table را بدون تأثیرگذاری بر سایر مؤلفه‌ها تغییر دهیم. به عنوان مثال، هنگام باز کردن یک جدول، جدول قبلی را می بندیم و غیرفعال می کنیم، در حالی که نام پایگاه داده و نام جدول در ویژگی های جزء Table حذف می شود و یک جدول جدید را باز و فعال می کنیم و نام پوشه و فایل جدید را در DatabaseName می نویسیم. و TableName هنگام باز کردن. (به روش های TBOpenFileClick و TBCloseFileClick در پیوست A مراجعه کنید).

اجزای DataSourse و Table روی فرم قرار دارند، اما فقط هنگام کار با برنامه در بیلدر قابل مشاهده هستند.

5.3 کار با گرافیک

برای ترسیم پلان از کامپوننت Image استفاده می کنیم. این شی دو ویژگی مهم دارد:

1)Picture - یک شی از کلاس TPicture است که محفظه ای برای گرافیک از هر نوع است. آن ها این جزء می تواند گرافیک های بیت مپ، آیکون ها یا دیگر گرافیک های تعریف شده توسط کاربر را ذخیره کند. تصویر جایی است که نقاشی ما در آن قرار دارد. با کمک آن، نقاشی حاصل را در یک فایل ذخیره می کنیم. (به پیوست A، روش TBSaveFileClick مراجعه کنید). لطفاً همچنین توجه داشته باشید که اندازه تصویر و تصویر ممکن است یکسان نباشند. این مشکل در ادامه با جزئیات بیشتر مورد بحث قرار خواهد گرفت.

2) بوم - بوم. کل فرآیند ترسیم بر روی بوم مولفه Image انجام می شود. Canvas به شما امکان می دهد پارامترهای قلم، قلم مو، فونت را تنظیم کنید، اشیایی مانند خطوط، مستطیل ها، بیضی ها را ترسیم کنید و همچنین متن را نمایش دهید.

در برنامه ما از رسم خط با استفاده از روش های MoveTo و LineTo outline، ترسیم نقاط با استفاده از Ellipse و خروجی متن با استفاده از روش TextOut استفاده می کنیم. (به ضمیمه A، plandraw مراجعه کنید).

آن ها canvas به ما امکان می دهد بدون دسترسی مستقیم به توابع Windows GDI کار کنیم که کار با گرافیک را بسیار آسان می کند.


5.4 توسعه رابط

همچنین باید به توسعه رابط توجه ویژه ای شود، زیرا لازم است آن را کاربر پسند کرد. ابزارهای Builder پیاده سازی رابط را در استانداردهای ویندوز آسان می کنند.

عناصر اصلی رابط برنامه استاندارد ویندوز:

1) منوها - راهی آسان برای کاربران برای اجرای دستورات گروه بندی شده منطقی فراهم می کند.

منوی اصلی با استفاده از مؤلفه MainMenu ایجاد می شود، و ویرایش آن هنگام ایجاد برنامه بسیار راحت است، زیرا برای بررسی آن نیازی به اجرای آن ندارید - تمام محتویات آن قبلاً در فرم نمایش داده شده است.

2) نوار ابزار - شامل دکمه های ابزاری است که با موارد موجود در منوی برنامه مطابقت دارد و به کاربر امکان دسترسی مستقیم بیشتری به دستورات آن را می دهد.

نوار ابزار با استفاده از مولفه ToolBar پیاده سازی می شود که به شما امکان می دهد دکمه ها را به سرعت اضافه و قرار دهید. تمام دکمه های ابزار در نوار ابزار دارای عرض و ارتفاع یکسان هستند.

برای هر دکمه، می‌توانید نمادی تنظیم کنید که با انتخاب شماره نماد از تصاویر ذخیره‌شده در مؤلفه ImageList، عملکردی را که اجرا می‌کند نمایش دهد. این راحت است زیرا می توانید هر بار به راحتی نماد را بدون بارگیری نماد از یک فایل تغییر دهید.

مطابق با استاندارد ویندوز، دکمه هایی را روی پانل ایجاد کردم که مربوط به موارد منو "جدید"، "باز"، "ذخیره"، "چاپ" است.

3) دکمه ها - با کمک آنها کاربر اجرای عمل اختصاص داده شده به این دکمه را شروع می کند.

به طور معمول، طبق استاندارد رابط ویندوز، دکمه ها تقریباً هرگز استفاده نمی شوند تا پنجره برنامه را به هم نریزند. در عوض از نوار ابزار و منوها استفاده می شود.

اما از آنجایی که برنامه ما تعداد زیادی عملکرد را انجام نمی دهد، می توانیم از دکمه ها نیز استفاده کنیم. این از این جهت راحت است که برخلاف منوها، آنها در کنار عنصری قرار دارند که عملی که آنها فراخوانی می‌کنند (به عنوان مثال، دکمه‌های افزودن و حذف اشیاء در کنار لیست اشیاء قرار دارند و دکمه‌های بزرگنمایی در بعدی قرار دارند. به تصویر)، که البته برای کاربر راحت خواهد بود.

علاوه بر این، می توانید امضاهایی را برای توضیح هدف آنها بر روی آنها قرار دهید، که این نیز راحت است.

یک دکمه با قرار دادن یک جزء Button در یک فرم ایجاد می شود. هنگام توسعه یک برنامه، از ویژگی Caption آن استفاده می شود - نوشته روی دکمه، و در زمان اجرا، از ویژگی Enabled برای غیرفعال کردن دکمه یا برعکس برای فعال کردن آن استفاده می شود. (به پیوست A، HideButtons() و ShowButtons() مراجعه کنید). مثلاً هنگام باز کردن جدول دکمه های رسم پلان را فعال می کنیم و هنگام بستن آن را غیر فعال می کنیم.

4) لیست های کشویی - برای اینکه کاربر بتواند یک مورد را از یک لیست انتخاب کند استفاده می شود. این بسیار راحت تر از وارد کردن دستی آن است.

در این برنامه، یک جعبه ترکیبی برای وارد کردن یک نوع شی به جدول (DBComboBox، در بالا مورد بحث) و برای حذف یک نوع شی از جدول شی (ComboBox) استفاده می شود.

تفاوت DBComboBox و ComboBox در این است که اولی با یک فیلد جدول مرتبط است و دومی یک لیست ساده است. استفاده از یک لیست ComboBox ساده به شما امکان می دهد مشکلات تعامل با جدول و DBComboBox را که هنگام حذف یک شی از جدول ایجاد می شود، حل کنید.

5) نوارهای پیمایش - با استفاده از مولفه ScrollBox پیاده سازی می شوند؛ در مورد ما، آنها برای پیمایش تصویر پلان در زمان بزرگ شدن آن ضروری هستند. برنامه پارامتر Max را تغییر می دهد که بسته به مقیاس، حداکثر مقدار اسکرول را تعیین می کند.

6) چک باکس ها (سوئیچ ها) - تعیین کنید که آیا گزینه ای که آنها نشان می دهند فعال یا غیرفعال است.

در Builder این جزء CheckBox است.

در برنامه، چک باکس ها تعیین می کنند که آیا ویژگی های زیر فعال یا غیرفعال هستند:

ترسیم خطوط مسیر؛

نمایش فاصله در پلان؛

نمایش نوع شی در پلان؛

نمایش جدول فاصله

چک باکس ها معمولا در منوی تنظیمات یافت می شوند. اما به دلیل سادگی برنامه ما روی پنل کنار قسمت طراحی نمایش داده می شوند که برای کاربر بسیار راحت است.

۷) زبانه ها – در این برنامه نقشه جدول و پلان بر روی زبانه های مختلف قرار می گیرد. من معتقدم که این برای کاربر راحت تر خواهد بود، زیرا کل برنامه در یک پنجره قرار دارد و در عین حال، هر دو منطقه جدول و منطقه طراحی به ضرر یکدیگر قرار ندارند.

دو نوع تب در بیلدر وجود دارد: TabControl و PageControl.

این برنامه از PageControl استفاده می کند، زیرا بر خلاف اولی، این مؤلفه می تواند شامل کنترل های ناهمگن در برگه ها باشد. در TabControl همه صفحات یکسان هستند.

8) دیالوگ ها ابزار بسیار مناسبی هستند که به پیاده سازی دیالوگ هایی با کاربر مانند ذخیره، باز کردن فایل، چاپ و انتخاب رنگ مورد استفاده در این برنامه کمک می کند.

همه دیالوگ های لازم روی فرم قرار می گیرند، اما برای کاربر نامرئی می مانند. آنها توسط برنامه فراخوانی می شوند و رابط استاندارد Explorer را پیاده سازی می کنند.

با استفاده از گفتگوهای OpenDialog و SaveDialog، برنامه نام فایل و فهرستی را که کاربر انتخاب می کند دریافت می کند. با استفاده از PrintDialog، تنظیمات چاپ فراخوانی می شود. و ColorDialog به شما کمک می کند رنگی را انتخاب کنید (برای انتخاب رنگ پس زمینه تصویر استفاده می شود).

هدف هر یک از اجزای رابط قابل مشاهده توسط کاربر در کتابچه راهنمای کاربر توضیح داده شده است.

شایان ذکر است که هر شیء واسط دارای خاصیتی به نام Align است. این به شما امکان می دهد یک کنترل را در سمت راست، چپ، بالا یا پایین یک فرم و پانل تراز کنید و کنترل در آنجا باقی می ماند حتی اگر اندازه فرم تغییر کند. به عنوان مثال، پانل با دکمه‌های نزدیک تصویر به سمت راست، جدول فاصله‌ها در سمت چپ و فیلد تصویر با alClient تراز شده است که تمام فضای خالی بین جدول و پانل را اشغال می‌کند. . همانطور که فرم را کش می دهید، این کنترل ها در حالی که در جای خود باقی می مانند نیز کشیده می شوند.

استفاده از ویژگی Align راحت است زیرا در مرحله طراحی می توانید اجزای مورد نیاز را مرتب کنید و سپس مجبور نیستید هر بار که شکل تغییر می کند اندازه آنها را به صورت دستی تنظیم کنید.

5.5 برخی از ویژگی های الگوریتم ها

الگوریتم ترسیم

از آنجایی که قبلاً با جزئیات توضیح داده شده است، من فقط یک نکته را در مورد توسعه آن اضافه می کنم: نقشه ای را در یک طرح ریزی منسجم ترسیم می کند. آن‌ها برابری زوایای بین جهت‌های روی نقشه و طبیعت را حفظ می‌کنند. در عین حال، ابعاد قلمروها مخدوش می شود.

این نوع برجستگی به این دلیل انتخاب شد که ترسیم یک شبکه مختصات برای آن آسان‌تر است، زیرا از خطوط مستقیم تشکیل شده است. (برای اطلاعات بیشتر در مورد پیش بینی نقشه و مختصات شبکه به پیوست E مراجعه کنید.)

فاصله ها در اندازه های واقعی محاسبه می شوند.

الگوریتم محاسبه فاصله

همچنین در «شرح الگوریتم» به تفصیل توضیح داده شده است. بخشی از الگوریتم ترسیم است.

این توسط نویسنده برنامه مشتق شده است، زیرا آنالوگ های آن در هیچ کجا یافت نشد. ویژگی آن این است که باید انحنای سطح زمین را در نظر گرفت و طول قوس را محاسبه کرد. اگر نقاط در عرض و طول جغرافیایی مساوی قرار گیرند، این امر به ویژه دشوار است.

یک کره به شکل سطح زمین در نظر گرفته می شود. این می تواند منجر به خطا شود، زیرا شکل زمین در واقع یک بیضی است، اما محاسبات را بسیار ساده می کند. شعاع متوسط ​​زمین 6371 کیلومتر در نظر گرفته شده است. این یک خطای حدود 0.3٪ می دهد.

همچنین لازم به ذکر است که برای محاسبه فاصله، به خصوص در پیچیده ترین حالت، از چندین محاسبه متوالی استفاده می شود که در نتیجه خطا جمع می شود. بزرگی خطا نیز تحت تأثیر تبدیل درجه درجه یک زاویه به رادیان و بالعکس است. اما با دقت مدرن محاسبات کامپیوتری، این خطا کوچک خواهد بود و علاوه بر این، این کار نشان نمی دهد که تخمین مسیر باید دقیق باشد.

ایجاد جدول

در اینجا باید گفت که من در هیچ کتابی که دارم الگوریتمی برای ایجاد جدول به صورت برنامه ای پیدا نکرده ام. تمام متون در مورد ایجاد جداول در DatabaseDesktop صحبت می‌کردند، که برای کاربر ناخوشایند است که یک برنامه حتی بزرگتر را فقط برای حل مشکل ایجاد جداول جدید نصب کند.

اما با این وجود، این الگوریتم در راهنمای سازنده یافت شد، اگرچه در آنجا دارای خطاهایی بود.

این برنامه همچنین یک نمونه کار از آن را ارائه می دهد (به پیوست A، TBNewFileClick مراجعه کنید).

به عنوان یکی از ویژگی های این الگوریتم، لازم به ذکر است که قبل از فراخوانی روش ایجاد جدول (CreateTable)، باید تمام فیلدها را مقداردهی اولیه کنید و نام، نوع، طول (در صورت لزوم) و مقدار مورد نیاز (خواه نیاز باشد) را مشخص کنید. یا نه). پس از مقداردهی اولیه فیلدها، یک فیلد کلیدی را اعلام می کنیم و تنها پس از آن فرآیند ایجاد جدول را فراخوانی می کنیم. پس از این، باید جدول جدید را به جزء Table متصل کنید تا بتوانید با استفاده از گرید و ناوبر با آن کار کنید. نام فایل جدول جدید با استفاده از SaveDialog درخواست شده است.

مشکل اندازه گرافیک

در طول توسعه برنامه، یک مشکل نسبتاً جدی با کشیدن یک تصویر به وجود آمد - هنگام تغییر اندازه فرم، اندازه تصویر باید تغییر می کرد، اما این اتفاق نیفتاد.

دلیل آن این بود که اندازه کامپوننت Image همچنان تغییر می کرد، اما اندازه تصویر ثابت می ماند. در این راستا، رویه ResizeForm ایجاد شد (به پیوست A مراجعه کنید)، که به تغییرات اندازه فرم پاسخ داد و اندازه تصویر را مطابق با اندازه تغییر یافته مولفه Image تغییر داد.

5.6 تست

در طول کل طراحی برنامه، تست شد و اشکال زدایی شد. توجه ویژه ای به دو نکته شد - صحت کار با جداول و صحت ترسیم یک طرح.

هنگام کار با جداول، اولین قدم ردیابی مشکلات مربوط به باز کردن، ایجاد جداول و ترسیم بود. به عنوان مثال، اگر دکمه های طراحی را غیرفعال نکنید، کلیک کردن روی آنها در حالی که جدول باز نیست می تواند منجر به خطا شود. برای رفع این خطا، در صورت عدم وجود جدول باز، دکمه ها غیر فعال می شوند.

یکی دیگر از اشکالات مهم که رفع شده است، مشکل اندازه گرافیک است (به بالا مراجعه کنید).

همچنین لازم بود اطمینان حاصل شود که هنگام غیرفعال کردن / فعال کردن چک باکس ها و تغییر اندازه فرم، اگر کاربر هنوز روی دکمه "طراحی" کلیک نکرده باشد، تصویری رسم نشود. این ردیابی در برنامه توسط پرچم قرعه کشی انجام می شود که با کلیک کاربر بر روی دکمه قرعه کشی تنظیم می شود و با کلیک بر روی دکمه clear پاک می شود. در طول فرآیند تست، تمام موقعیت هایی که بررسی این پرچم ضروری بود، نظارت و اشکال زدایی شدند.

مهمترین جنبه آزمایش بررسی عملکرد برنامه در رایانه ای بود که Builder نصب نشده است. این به تعیین موارد زیر کمک کرد:

1) هنگام کامپایل یک برنامه، باید تمام کتابخانه های استفاده شده را شامل شود. این با غیرفعال کردن دو گزینه در تنظیمات کامپایلر به دست می آید. در همان زمان، کد اجرایی برنامه بزرگتر می شود، اما می تواند روی یک ماشین بدون سازنده نیز کار کند.

2) برنامه به موتور پایگاه داده Borland نیاز دارد. اگر در رایانه شما نیست، باید آن را نصب کنید.


6. شرح برنامه

این برنامه برای ارائه پشتیبانی اطلاعاتی برای ایجاد یک طرح سایت در نظر گرفته شده است. این به شما امکان می دهد داده های مربوط به نقاط طرح را در یک جدول ذخیره کنید، آنها را به صورت گرافیکی نمایش دهید، یک جدول جدید ایجاد کنید، انواع اشیاء را اضافه و حذف کنید، فاصله ها را محاسبه کنید و طول یک مسیر را تخمین بزنید، چندین مسیر را ترسیم کنید، نتایج را در یک فایل ذخیره کنید یا چاپ.

این برنامه برای سیستم عامل ویندوز ساخته شده است و دارای رابط کاربری استاندارد و کاربر پسند است. همراه با آن نمونه ای به شکل جدول با مسیرهای قطار آمده است.


7. دستورالعمل نصب

برای نصب برنامه، شرایط زیر باید برآورده شود: پردازنده 233 مگاهرتز یا بالاتر، رم 16 مگابایت، سیستم عامل ویندوز 98 یا بالاتر.

برای نصب برنامه باید موارد زیر را انجام دهید:

1) یک پوشه جدید برای برنامه ایجاد کنید.

2) از رسانه ای که آرشیو برنامه در آن قرار دارد (فلاپی دیسک یا دیسک) آن را در این پوشه کپی کنید.

3) آرشیو را در این پوشه باز کنید.

4) مطمئن شوید که فایل های objects.db و rasst.db در همان پوشه برنامه قرار دارند.

5) اطمینان حاصل کنید که ویژگی "Read Only" برای این فایل ها پاک شده است. اگر نه، آن را حذف کنید.

6) آرشیو با کتابخانه ها را در پوشه ویندوز باز کنید.

7) اکنون می توانید برنامه را اجرا کرده و از آن استفاده کنید.


8. راهنمای کاربر 8.1 منوی اصلی منوی "فایل".

برای شروع کار در برنامه، باید یک فایل با جدول باز کنید یا یک فایل جدید ایجاد کنید. این کار را می توان با استفاده از آیتم های منوی File، Open و New انجام داد.

"باز" ​​- یک جدول موجود را باز کنید. گفتگویی را فراخوانی می کند که در آن کاربر باید فایلی با پسوند db. انتخاب کند.

"جدید" - ایجاد یک جدول جدید. دیالوگی فراخوانی می شود که در آن کاربر نام جدول جدید را مشخص می کند.

"چاپ" - بسته به برگه باز، تصویر یا جدول را چاپ می کند. با انتخاب این مورد، کادر محاوره ای تنظیمات چاپ باز می شود؛ پس از کلیک بر روی دکمه "OK"، کار برای چاپ ارسال می شود.

منوی جدول

"طرح ساخت" - اگر جدول باز است، برگه "Plan" را فعال می کند و یک پلان ترسیم می کند.

"Add object type" - فرم را برای افزودن نوع شیء فراخوانی می کند.

"حذف نوع شی" - فرم را برای حذف یک نوع شیء فراخوانی می کند.

منوی راهنما

"درباره برنامه" - نام برنامه و اطلاعات مربوط به نویسنده را نمایش می دهد.


8.2 پانل دکمه سریع

عملکرد این دکمه ها مشابه مواردی به همین نام در منوی «فایل» است.

- "جدید" - ایجاد یک جدول جدید.

- "باز کردن" - یک جدول موجود را باز کنید.

- "چاپ" - یک تصویر یا جدول را چاپ کنید.

8.3 برگه جدول

جدول جدول - جدول در آن بارگذاری می شود. با استفاده از این شبکه، کاربر می تواند ورودی های جدول را ویرایش و مشاهده کند.

Navigator - واقع در زیر شبکه، به شما امکان می دهد جدول را ویرایش و مشاهده کنید.

دکمه های ناوبری

- "اولین رکورد" - به اولین رکورد در جدول منتقل می شود.

- "رکورد قبلی" - به رکورد قبلی در جدول منتقل می شود.

- "رکورد بعدی" - به رکورد بعدی در جدول منتقل می شود.

- "آخرین رکورد" - به آخرین رکورد در جدول منتقل می شود.

- "افزودن رکورد" - جدول در حالت ویرایش قرار می گیرد، یک رکورد خالی جدید قبل از رکورد فعال درج می شود.

- "حذف ورودی" - ورودی فعلی را با درخواست تایید قبلی حذف می کند.

- "ویرایش" - ورودی فعلی را ویرایش کنید.

- "لغو تغییرات" - تغییرات رکورد فعلی را لغو می کند و مقدار قبلی آن را برمی گرداند.

- "به روز رسانی". یک جدول را در یک شبکه به روز می کند.

در زیر ناوبر فهرستی از اشیا و دکمه های حذف و اضافه کردن اشیا وجود دارد.

فهرست اشیاء - حاوی لیستی از انواع شی. هنگامی که یک نوع را از لیست انتخاب می کنید، در رکورد جاری در جدول وارد می شود.

افزودن نوع شی - فرم نوع افزودن را فراخوانی می کند. هنگامی که آن را اضافه می کنید، بلافاصله به لیست اضافه می شود.

Delete object type – فرم را برای حذف یک نوع شیء فراخوانی می کند.

فرم نوع شی را اضافه کنید

شامل یک قسمت ویرایش برای وارد کردن متن است که نام نوع جدید در آن وارد شده است.

"Add" - یک نوع شی را بدون بستن فرم به لیست و جدول اضافه می کند.

"OK" - اگر شی اضافه نشده است، آن را در لیست و جدول وارد کرده و فرم را می بندد.

"لغو" - فرم ها را بدون افزودن می بندد.

فرم نوع شی را حذف کنید

فهرست اشیاء - از آن کاربر انتخاب می کند که کدام شی باید حذف شود.

"حذف" - نوع شی انتخاب شده را از جدول و لیست حذف می کند.

"حذف همه" - جدول شی و لیست ها را به طور کامل پاک می کند.

"OK" - فرم را می بندد.


8.4 برگه "طرح".

فیلد ترسیم ناحیه ای است که نقشه پلان در آن نمایش داده می شود.

نوارهای پیمایش – زمانی که تصویری را با کلیک کردن روی دکمه «بزرگ‌نمایی» بزرگ می‌کنید، ظاهر می‌شوند. به شما امکان می دهد تصویر بزرگ شده را اسکرول کنید.

جدول فاصله - برای هر مسیر تعداد آن و طول بخش ها را به کیلومتر نشان می دهد. اگر کادر انتخاب "پنهان کردن جدول فاصله" پاک شود، جدول قابل مشاهده است.

"پاک کردن نقشه" - قسمت تصویر را پاک می کند.

"قرعه کشی" - طرحی را ترسیم می کند.

"رنگ پس زمینه" - به شما امکان می دهد رنگ پس زمینه تصویر را انتخاب کنید. وقتی روی این دکمه کلیک می کنید، کادر محاوره ای انتخاب رنگ ظاهر می شود.

"+ Enlarge" - تصویر روی پلان را بزرگ می کند.

"- بزرگنمایی" - تصویر را در طرح کاهش می دهد. این دکمه با فشار دادن دکمه افزایش فعال می شود.

"پیش فرض" - اندازه اولیه تصویر را تنظیم می کند.

"خطوط مسیر را ترسیم کنید" - اگر علامت زده شود، مسیرها در طرح ترسیم می شوند، در غیر این صورت، فقط نقاط نشان داده می شود.

"نمایش مسافت ها روی نقشه" - اگر کادر انتخاب علامت زده شود، در کنار هر نقطه مسیر، فاصله به شکل مجموع طول بخش های قبل از این نقطه نمایش داده می شود. "0" در نزدیکی نقطه اول مسیر قرار می گیرد.

"نمایش نوع شی در نقشه" - اگر کادر علامت زده شود، نوع شی در کنار هر نقطه نمایش داده می شود.

"پنهان کردن جدول فاصله" - اگر کادر انتخاب علامت زده شود، جدول فاصله نامرئی است. اگر پاک شود، جدول در سمت راست فیلد طراحی ظاهر می شود.

همه چک باکس ها به طور پیش فرض علامت زده می شوند.


9. مورد آزمون

به عنوان نمونه آزمایشی، مسیرهای چندین قطار راه آهن گورکی را به تصویر می کشیم.

بیایید سوار قطارهای زیر شویم:

N 497G Gorky-Mosk - Adler

N 471G Gorky-Mosk - Novorossiysk

N 431G Gorky-Mosk - Adler

N 367G Gorky-Mosk - سامارا

N 059A Gorky-Mosk - سن پترزبورگ-Glavn

N 039G Gorky-Mosk - مسکو کورسک

اجازه دهید مختصات بزرگترین مناطق پرجمعیت را به عنوان نقاط در هر مسیر وارد جدول کنیم. ما از نام شهرها به عنوان اشیا استفاده خواهیم کرد.

برنج. 9.1. نمای کلی برنامه در تب "جدول"، وارد کردن نام یک شی در یک رکورد با استفاده از یک لیست.


قبلاً ایستگاه Red Knot را به جدول شی اضافه کرده بودیم، اما از آنجایی که به آن نیازی نداریم، آن را حذف خواهیم کرد.

برنج. 9.2. یک نوع شی را حذف کنید.

هنگام شماره گیری مسیر قطار 431 به ولادیمیر نیاز داریم. از آنجایی که در لیست نیست، باید آن را اضافه کنید.

برنج. 9.3. افزودن یک نوع شی


بنابراین، ما تمام مسیرهایی را که می خواستیم جمع آوری کردیم. در نتیجه به جدولی مانند این رسیدیم.

برنج. 9.4. جدول

اکنون با استفاده از تبلت خود، طرحی را می سازیم.

برنج. 9.5. تصویر پلان با تمام کتیبه ها.


به طور پیش فرض، خطوط، فاصله ها و نام شهرها را نمایش می دهیم.

بیایید ببینیم مسیرها بدون امضا چگونه خواهند بود.

برنج. 9.6. تصویر پلان بدون تمام کتیبه ها.

حالا بیایید فقط به فاصله ها نگاه کنیم.

برنج. 9.7. تصویر پلان فقط با فواصل.


در واقع، آنها خیلی دقیق محاسبه نشدند، اما این به این دلیل است که ما تمام نقاط این مسیرها را در نظر نگرفتیم، و همچنین مختصات گرفته شده کاملاً صحیح نبود - آنها از روی نقشه "با چشم" تعیین شدند.

حالا بیایید به طرح خود فقط با نام شهرها نگاه کنیم.

برنج. 9.8. تصویر پلان که فقط انواع اشیاء را نشان می دهد.

برنج. 9.9. تصویر پلان به صورت نقطه با تمام امضاها.


همچنین می توانید جدول فاصله ها را مشاهده کنید.

برنج. 9.11. نمای کلی برنامه در تب "Plan" با جدول قابل مشاهده فواصل.


نتیجه

وظیفه مطرح شده در تکلیف کار کارشناسی با موفقیت انجام شد. برنامه توسعه یافته به طور کامل شرایط اولیه توضیح داده شده در بیانیه مشکل را برآورده می کند. به طور خاص، این برنامه کار با جداول، گرافیک و فایل ها را پیاده سازی کرد.

کار کاربر برنامه با استفاده از یک رابط ساده ساخته شده بر اساس استانداردهای رابط برنامه ویندوز انجام می شود.

از دیگر پیشرفت ها و گسترش قابلیت های این پروژه می توان به اضافه شدن محاسبه کوتاه ترین مسیر، ترسیم آیکون اشیا، تصاویر برجسته و امکان بارگذاری تصویر نقشه به عنوان پس زمینه اشاره کرد.


کتابشناسی - فهرست کتب

1. پی. گوستافسون، ام. کشمن، بی. سوارت، جی. هولینگ ورث. Borland C++ Builder 6. راهنمای توسعه دهنده. - ویلیامز، 2004.

2. A. Arkhangelsky. برنامه نویسی در C++ Builder 6. – Binom، 2002.

3. تی.ا. پاولوفسکایا. C/C++. برنامه نویسی به زبان سطح بالا - پیتر، 2001.


ضمیمه APPENDIX E. پیش بینی های نقشه و نقشه های شبکه

باز کردن یک سطح کروی در یک صفحه بدون شکست و چین غیرممکن است، یعنی تصویر پلان آن در یک صفحه را نمی توان بدون اعوجاج، با شباهت کامل هندسی تمام خطوط آن نشان داد. شباهت کامل خطوط جزایر، قاره ها و اشیاء مختلف که بر روی یک سطح صاف قرار گرفته اند، فقط روی یک توپ (کره زمین) قابل دستیابی است. تصویر سطح زمین بر روی یک توپ (کره زمین) در مقیاس برابر، از نظر زاویه و مساوی از نظر اندازه است.

حفظ همزمان و کامل این ویژگی های هندسی روی نقشه غیرممکن است. یک شبکه جغرافیایی ساخته شده بر روی یک صفحه، که نصف النهارها و موازی ها را به تصویر می کشد، دارای اعوجاج های خاصی خواهد بود، بنابراین تصاویر تمام اجسام روی سطح زمین مخدوش می شوند. ماهیت و میزان اعوجاج ها به روش ساخت شبکه نقشه کشی بستگی دارد که نقشه بر اساس آن تهیه می شود.

نمایش سطح یک بیضی یا کره در یک صفحه را طرح ریزی نقشه می نامند. انواع مختلفی از پیش بینی نقشه وجود دارد. هر یک از آنها مربوط به یک شبکه نقشه برداری خاص و اعوجاج ذاتی آن است. در یک نوع طرح ریزی، ابعاد مناطق تحریف می شود، در دیگری - زوایا، در نوع سوم - نواحی و زوایا. در عین حال، در تمام پیش بینی ها، بدون استثنا، طول خطوط مخدوش می شود.

پیش بینی های کارتوگرافی بر اساس ماهیت اعوجاج، نوع تصویر نصف النهارها و موازی ها (شبکه جغرافیایی) و برخی ویژگی های دیگر طبقه بندی می شوند. بر اساس ماهیت اعوجاج، پیش بینی های نقشه زیر متمایز می شوند:

متساوی الاضلاع، حفظ برابری زوایای بین جهات روی نقشه و در طبیعت. شکل E.1 یک نقشه جهانی را نشان می دهد که بر روی آن شبکه کارتوگرافی خاصیت equiangularity را حفظ می کند. نقشه شباهت گوشه ها را حفظ می کند، اما اندازه مناطق تحریف شده است. به عنوان مثال، مناطق گرینلند و آفریقا در نقشه تقریباً یکسان هستند، اما در واقع مساحت آفریقا حدود 15 برابر مساحت گرینلند است.

Fig.E.1 نقشه جهانی در طرح ریزی هم شکل.

مساوی از نظر اندازه، حفظ تناسب مناطق روی نقشه با مناطق مربوطه در بیضی زمین. شکل E.2 نقشه ای از جهان را نشان می دهد که در یک طرح مساحت مساوی ترسیم شده است. تناسب همه نواحی را حفظ می کند، اما شباهت ارقام مخدوش است، یعنی تساوی وجود ندارد. عمودگرایی متقابل نصف النهارها و موازی ها در چنین نقشه ای فقط در امتداد نصف النهار میانی حفظ می شود.

مساوی فاصله، حفظ مقیاس ثابت در هر جهت.

خودسرانه، عدم حفظ برابری زوایا، تناسب مساحت ها یا ثبات مقیاس. نکته استفاده از پیش بینی های دلخواه، توزیع یکنواخت تر اعوجاج ها بر روی نقشه و راحتی حل برخی مشکلات عملی است.


برنج. E. 2 نقشه جهان در طرح ریزی مساحت مساوی.

بر اساس نوع تصویر، شبکه‌های نصف النهارها و موازی‌های یک نقشه به شکل مخروطی، استوانه‌ای، ازیموتالی و غیره تقسیم می‌شوند. علاوه بر این، در هر یک از این گروه‌ها می‌توان برجستگی‌هایی با ماهیت‌های مختلف اعوجاج (هم‌نوع، مساحت مساوی) وجود داشت. ، و غیره.). ماهیت هندسی برآمدگی های مخروطی و استوانه ای در این واقعیت نهفته است که شبکه ای از نصف النهارها و موازی ها بر روی سطح جانبی یک مخروط یا استوانه با استقرار بعدی این سطوح در یک صفحه نمایش داده می شود. ماهیت هندسی برآمدگی های آزیموتالی در این واقعیت نهفته است که شبکه ای از نصف النهارها و موازی ها بر روی صفحه مماس بر توپ در یکی از قطب ها قرار می گیرند یا در امتداد برخی موازات تقسیم می شوند. طرح نقشه برداری که از نظر ماهیت، بزرگی و توزیع اعوجاج برای یک نقشه خاص مناسب ترین است، بسته به هدف، محتوای نقشه، و همچنین اندازه، پیکربندی و موقعیت جغرافیایی قلمرو نقشه برداری شده انتخاب می شود. به لطف شبکه نقشه برداری، همه اعوجاج ها، صرف نظر از اینکه چقدر بزرگ باشند، به خودی خود بر دقت تعیین موقعیت جغرافیایی (مختصات) اشیاء نشان داده شده در نقشه روی نقشه تأثیر نمی گذارند. در عین حال، شبکه کارتوگرافی، که بیان گرافیکی طرح ریزی است، به فرد اجازه می دهد تا هنگام اندازه گیری روی نقشه، ماهیت، بزرگی و توزیع اعوجاج ها را در نظر بگیرد. بنابراین، هر نقشه جغرافیایی، تصویری است که از نظر ریاضی از سطح زمین تعیین شده است.

توطئه های فرعی شخصی منطقه خودمختار آگینسکی بوریات برای سال های 2005 - 2010، که در نسخه پیش نویس تهیه شده است. 4. جهت گیری های اصلی برای بهبود فعالیت های ارگان های دولتی در حمایت از قطعات فرعی شخصی جمعیت روستایی در منطقه خودمختار آگینسکی بوریات 4.1 مشکلات و اولویت ها برای توسعه توطئه های فرعی شخصی در آگینسکی...

مطالعه خانواده ها منجر به توسعه روش های روانشناختی، تربیتی و جامعه شناختی شده است که باعث تعمیق و گسترش ایده ها در مورد خانواده مدرن می شود. فصل 3. مشکلات اجتماعی و چشم انداز کار اجتماعی با خانواده های جوان در روستای VORONOVKA 3.1 مشخصات کلی ص. ورونوفکا، منطقه شگارسکی، منطقه تومسک، منطقه شگارسکی در قسمت جنوبی تومسک قرار دارد...




تدارکات و حمایت از کودکان؛ - در حال حاضر در روسیه مکانیسمی برای تأمین مالی برنامه های هدفمند برای حمایت از مادر و کودکی ایجاد و اجرا شده است. 2. مکانیسم مالی برای اجرای سیاست دولتی برای حمایت از مادر و کودکی 2.1 روش و شرایط پرداخت مزایای اجتماعی تا به امروز، روسیه یک سیستم نسبتاً توسعه یافته از مزایا را توسعه داده است، ...