تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
كيفية عمل برنامج للأذان + قاعدة بيانات لـ 252 دولة و 9512 مدينة ! :
#1
ملاحظة منقول من المنتدي السابق للعضو:- أنس محمود


بسم الله الرحمن الرحيم





بداية ، يجب أن تعرف انه لحساب موعد الأذان لأي صلاة يجب أن يتوافر ما يلي :-
  • خط الطول للمدينة ( longitude ) .
  • خط العرض للمدينة ( latitude ) .
  • فارق التوقيت للمدينة .
  • تاريخ اليوم المراد حساب توقيت صلاة به .
  • مذهب المدينة ( لصلاة العصر ) .
  • طريقة حساب باقي الصلوات ( اقصد المؤسسة أو التقويم الذي تتبعه المدينة ويتم حساب الصلوات على أساسه )
إذا توافر ما سبق أمكن حساب مواقيت الصلاة .
طبعا في موضوع للأخ silverlight قدم الفئة PrayerTimes .
تطبعا أولا تنشأ كائن جديد من الفئة ، ثم تستدعي الإجراء setCalculationMethod وتمرر له طريقة حساب الصلاة ؛ قيمة من :

  1. Makkah : تقويم أم القرى .
  2. Egypt : الهيئة المصرية العامة للمساحة .
  3. Karachi : جامعة العلوم الإسلامية بكراتشي .
  4. ISNA : المجتمع الإسلامي بأمريكا الشمالية .
  5. MWL : رابطة العالم الإسلامي .
ثم الدالة GetPrayerTimes ، وتمرر إليها :

  1. كائن من النوع Data يمثل اليوم المراد حساب المواقيت عنده .
  2. خط العرض من النوع Double .
  3. خط الطول من النوع Double .
  4. فارق التوقيت من النوع Integer .
تعود هذه الدالة بمصفوفة من النوع String عدد عناصرها 7 يمثل مواقيت الصلاة لليوم المدخل ( شاملة شروق الشمس ( بعد الفجر ) وغروب الشمس ( بعد المغرب ) ) .
أضفت لهذه الفئة طريقة باسم GetPrayerTimes_Date بنفس المدخلات تعود بمواقيت الصلاة ولكن بمصفوفة من النوع Date .


لذلك قمت بعمل قاعدة بيانات تحتوي على بيانات 252 دولة و9512 مدينة ! ( باستخدام السلسلة لفئات خاصة أيضاً ) والتعامل معها أيضا في منتهى السهولة ،
كيف اصنع برنامج للتنبيه بمواقيت الأذان ؟ :

يمكن ذلك بمنتهى البساطة ( تعمدت اختيار ابسط طريقة حتى لا يكون هناك صعوبة في فهم الدرس )،

  • افتح مشروع جديد من النوع WindowsApplication وغير اسم المشروع إلى AzanProject ،
  • أنسخ ملف قاعدة البيانات إلى المجلد Bin\Debug من ملفات مشروعك ،
أضف مرجع المكتبة من قائمة Project ç الأمر Add Reference ç التبويب Browse ç ثم اختر الملف WindowsApplication5.dll .

أضف الفئة PrayerTimes من قائمة Project çAdd Existing File ç ثم اختر الملف PrayerTimes.vb .
  • الآن عدل النموذج المنشأ ليصبح شبيه بما يلي :-


طبعا للـ AzanTimer الخاصية Enabled بـ True ، Interval بـ 2000 .



الآن إلى الكود :-
  • أولا قم باستيراد مجال الأسماء التالي :-
كود :
[align=left]Imports ContriesAzanInfo[/align]
  • الآن قم بتعريف الحدث التالي الذي يتم إطلاقه عند حلول وقت صلاة ما .
كود :
[align=left]   'حدث حلول ميعاد الأذان
  Event AzanTime(ByVal PrayName As String)[/align]
  • ثم قم بتعريف الحقول التالية في التصريحات العامة :-
كود :
[align=left]   'كائن حساب الأذان
  Dim PrayerTimesObj As New PrayerTimes[/align]

[align=left]   'Date كائن مواقيت الصلاة لليوم من النوع
  Dim PrayerTimesDate As Date()[/align]

[align=left]   'كائن قاعدة البيانات
  Dim CountriesInfo As New AzanInfo(Application.StartupPath & "\Azan.adb")[/align]

[align=left]   'مصفوفة باسماء الصلوات الخمس والشروق والغروب
  Dim PreysNames() As String = {"الفجر", "الشروق", "الظهر", "العصر", _
                                 "الغروب", "المغرب", "العشاء"}[/align]

[align=left]   'مصفوفة لعدم تكرار التنبية بنفس الصلاة اكثر من مرة
  Dim MM() As Integer = {0, 0, 0, 0, 0, 0, 0}[/align]


أريد أن أوضح أن مشيد الفئة AzanInfo يتطلب وسيطة تمثل مسار قاعدة بيانات الدول .
  • الآن عرف الإجراء التالي والذي يختبر هل الوقت الحالي يمثل احد عناصر المصفوفة المرسلة ( بمعنى هل الوقت الحالي معاد أذان أم لا ) ، و بناء على ذلك يطلق الحدث AzanTime :-
كود :
[align=left]   'اجراء إختبار هل حان موعد اي صلاة
  Sub CheckAthan(ByVal PrayTimes() As Date)[/align]

[align=left]       For CurPrayIndex As Integer = 0 To PrayTimes.Length - 1[/align]

[align=left]           If CurPrayIndex = 1 Or CurPrayIndex = 4 Then 'ـ 1 تعبر عن الشروق 4 تمثل الغروب
              CurPrayIndex += 1
          End If[/align]

[align=left]           If Now.Minute + (Now.Hour * 60) = (PrayerTimesDate(CurPrayIndex).Minute) + (PrayTimes(CurPrayIndex).Hour * 60) Then[/align]

[align=left]               ' اذا تحقق شرط نفس ميعاد الصلاة ،
              ' فانه يتم اختبار هل تم اطلاق الحدث خلال هذه الدقيقة ام لا [/align]

[align=left]               If MM(CurPrayIndex) = 0 Then[/align]

[align=left]                   ' في حال لم يتم اطلاق الحدث في هذه الدقيقة_
                  ' فانه يتم تعليم هذه الصلاة بانه تم اطلاق الحدث لها
                  ' وازالة التعليم من باقي الصلوات
                  ' ثم إطلاق الحدث[/align]

[align=left]                   For a As Integer = 0 To MM.Length - 1
                      MM(a) = 0
                  Next[/align]

[align=left]                   MM(CurPrayIndex) = 1[/align]

[align=left]                   RaiseEvent AzanTime(PreysNames(CurPrayIndex))[/align]

[align=left]                   Application.DoEvents()
              End If[/align]

[align=left]           End If[/align]

[align=left]       Next
  End Sub[/align]




الآن انتهينا من جزء التصريحات ،


أحداث الكائنات :-
  • داخل الحدث Load لـ Form1 اكتب :-
كود :
[align=left]       'ملى قائمة الدول من قاعدة البيانات
      For Each Country As Country In CountriesInfo.Contries
          Me.CountryLst.Items.Add(Country.CountryName)
      Next[/align]

[align=left]       'اختيار الدولة الأولى والمدينة الأولى بها ( يمكنك تغييرها ) ـ
      CountryLst.SelectedIndex = 0
      TownsLst.SelectedIndex = 0[/align]

  • داخل الحدث SelectedIndexChanged لـ Countrylst اكتب :-
كود :
[align=left]       'افراغ قائمة المدن
      Me.TownsLst.Items.Clear()[/align]


[align=left]       'ملىء قائمة المدن من قاعدة البيانات
      For Each Town As Town In CountriesInfo.Contries(Me.CountryLst.SelectedIndex).Towns
          Me.TownsLst.Items.Add(Town.TownName.Split("-")(0))
      Next[/align]

[align=left]       'اختيار المدينة الأولى
      TownsLst.SelectedIndex = 0[/align]
  • داخل الحدث SelectedIndexChanged لـ TownsLst اكتب :-
كود :
[align=left]       'المدينة الحالية
      With CountriesInfo.Contries(Me.CountryLst.SelectedIndex). _
                            Towns(Me.TownsLst.SelectedIndex)[/align]

[align=left]           'تعيين طريقة الحساب
          PrayerTimesObj.setCalculationMethod([Enum].Parse(GetType(PrayerTimes.Methods), .CalcMethod.ToString))[/align]

[align=left]           '( Now ايجاد مواقيت الصلاة لليوم ( لاحظ
          PrayerTimesDate = PrayerTimesObj.GetPrayerTimes_Date(Now, .latitude, .longitude, .TimeZonePlus)[/align]

[align=left]           'ملى بيانات المدينة
          Me.LatitudeTxt.Text = .latitude
          Me.LongitudeTxt.Text = .longitude
          Me.TimeZonePlusTxt.Text = .TimeZonePlus
          Me.MazhabCmb.SelectedIndex = CInt(.Mazhab)
          Me.MethodCmb.SelectedIndex = CInt(.CalcMethod)[/align]


[align=left]           'ملئ مواقيت الصلاة
          Me.lblFjr.Text = PrayerTimesDate(0).ToString("mm : hh tt")
          Me.lblsunrise.Text = PrayerTimesDate(1).ToString("mm : hh tt")
          Me.lblthuhr.Text = PrayerTimesDate(2).ToString("mm : hh tt")
          Me.lblasr.Text = PrayerTimesDate(3).ToString("mm : hh tt")
          Me.lblsunset.Text = PrayerTimesDate(4).ToString("mm : hh tt")
          Me.lblmgrb.Text = PrayerTimesDate(5).ToString("mm : hh tt")
          Me.lblisha.Text = PrayerTimesDate(6).ToString("mm : hh tt")[/align]


[align=left]           'تغيير العنوان الى اسم المدينة والدولة
          Me.Label40.Text = Me.CountryLst.SelectedItem & " -- " & Me.TownsLst.SelectedItem[/align]

[align=left]           'ازالة التعليم من كل الصلوات
          For a As Integer = 0 To MM.Length - 1
              MM(a) = 0
          Next[/align]

[align=left]       End With[/align]
  • الآن داخل حدث Tick لـ AzanTimer اكتب :-
كود :
[align=left]       CheckAthan(PrayerTimesDate)[/align]

نحن الآن قطعنا نصف المسافة ، والباقي عليك ! ،
  • يمكنك اقتناص الحدث AzanTime والتفنن في عرض التنبيه كما يحلو لك ، أنا سأقوم بعرض رسالة MsgBox :p !!
كود :
[align=left]   Private Sub Form1_AzanTime(ByVal PrayName As String) Handles Me.AzanTime[/align]

[align=left]       MsgBox("حان الآن موعد أذان " & PrayName)[/align]

[align=left]   End Sub[/align]

هذا كل شيء :

عموما المرفقات رفعتها في هذه المشاركة :-

قاعدة البيانات الدول .
ملف الـمكتبة DLL .
الفئة المضاف لها الطريقة .
كود المكتبة .
المثال

أتمنى أن تدعو لي بظهر الغيب

تقبلوا تحياتي ؛ أخوكم / أنس محمود


الملفات المرفقة
.rar   WindowsApplication5_Code.rar (الحجم : 7.71 ك ب / التحميلات : 683)
.rar   PrayerTimes.rar (الحجم : 3.61 ك ب / التحميلات : 651)
.rar   AzanProject.rar (الحجم : 279.03 ك ب / التحميلات : 986)
.rar   Azan.rar (الحجم : 253.94 ك ب / التحميلات : 883)
.rar   WindowsApplication5_DLL.rar (الحجم : 5.12 ك ب / التحميلات : 555)
الرد }}}
#2
باركـ الله فيكـ
وجزاكـ الله كل الخير
وجعله الله في موازين حسناتكـ
اللهم آمين
الرد }}}
تم الشكر بواسطة: alswade
#3
جزاك الله كل خير
مجهود رائع
الرد }}}
تم الشكر بواسطة:
#4
(25-11-17, 01:21 PM)محمد خالد كتب : جزاك الله كل خير
مجهود رائع

جزاك الله كل خير
مجهود رائع

أريد مساعدتك في إنشاء برنامج مواقيت الصلوات

فهل تساعدني في ذلك
وأنا أكون مشكور لك
الرد }}}
تم الشكر بواسطة:
#5
(18-01-19, 07:49 PM)ذيشان كتب : جزاك الله كل خير
مجهود رائع

أريد مساعدتك في إنشاء برنامج مواقيت الصلوات

فهل تساعدني في ذلك
وأنا أكون مشكور لك

يمكنك مراجعة المواضيع لهذا العضو
فجميع الموضيع القديمة الخاصة به تخص برنامج مواقيت الصلاة
من البداية الى النهاية فجميع الواضيع اسئلة ستجد بداخلها الردود والحلول الكاملة 
لتتمكن من عمل البرنامج كاملاً بامر الله


تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  رقابة قاعدة البيانات (التحديث التلقائي للبيانات ) SqlDependency قناص المدينة 0 529 05-10-23, 04:43 PM
آخر رد: قناص المدينة
  كيف تتعامل مع برنامج الإكسيل من برنامجك rinawi 7 6,643 12-11-22, 12:11 AM
آخر رد: خالد العصاوي
  نظرة على DropBox SDK و التعامل معها +برنامج رفع و تحميل ملفات ابو ليلى 4 4,881 08-09-22, 11:54 AM
آخر رد: saif2023
  برنامج مبيعات ومشتريات وإدارة أعمال ( الفاتورة الإلكترونية ) yassoo1985 2 2,261 04-06-22, 01:14 PM
آخر رد: yassoo1985
Heart طلب برنامج Advanced Installer أبو خالد الشكري 0 1,419 16-05-22, 09:12 PM
آخر رد: أبو خالد الشكري
  أهم طرق إدارة المخازن وتطبيقها على برنامج مخازن وارد ومنصرف Menna ahmeed 0 1,988 27-04-22, 12:52 PM
آخر رد: Menna ahmeed
Video [درس فيديو] حل مشكلة تغيير مسار قاعدة البيانات مع تقارير كريستال ريبورت رمضان272 0 1,692 23-04-22, 05:56 AM
آخر رد: رمضان272
  [سلسلة تعليمية] شرح تفصيلي وكامل عن كيفية الاتصال بسيكوال وعمل اتاش برمجي وجلب اسماء السيرفرات ابو انس 3 3,637 25-02-22, 12:44 AM
آخر رد: atefkhalf2004
  [شرح] اتصال بقاعدة بيانات اكسيس , اضافة بيان , تعديل بيان , حذف بيان , عرض البيانات . ahmed salam 25 38,260 23-02-22, 06:04 PM
آخر رد: رضوان الجماعي
  طريقة إنشاء برنامج طباعة ملصقات الباركود ملهمـ 1 4,407 22-12-21, 05:09 PM
آخر رد: alessam4pro

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم