تقييم الموضوع :
  • 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 ك ب / التحميلات : 193)
.rar   PrayerTimes.rar (الحجم : 3.61 ك ب / التحميلات : 196)
.rar   AzanProject.rar (الحجم : 279.03 ك ب / التحميلات : 318)
.rar   Azan.rar (الحجم : 253.94 ك ب / التحميلات : 270)
.rar   WindowsApplication5_DLL.rar (الحجم : 5.12 ك ب / التحميلات : 154)
الرد }}}}
تم الشكر بواسطة: abulayth , abdhassan , نور الدين وليد
#2
باركـ الله فيكـ
وجزاكـ الله كل الخير
وجعله الله في موازين حسناتكـ
اللهم آمين
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] شرح انشاء برنامج لتسجيل الدخول للمنتدى CLARO 2 427 27-10-16, 04:03 PM
آخر رد: rafaag777
  [شرح] اتصال بقاعدة بيانات اكسيس , اضافة بيان , تعديل بيان , حذف بيان , عرض البيانات . ahmed salam 20 9,025 26-09-16, 08:12 AM
آخر رد: abumuhannadzym
  طباعة بيانات موجودة في برنامج على ( 2003 Microsoft Office Word ) abulayth 1 267 11-09-16, 07:20 AM
آخر رد: أبووسم
Star [مقال] كيفية تحويل اسعار العملات بإستخدام Yahoo Exchange Rates Web Service Programmation 8 2,465 26-08-16, 10:21 AM
آخر رد: tryold
  مشكلة في الاتصال بقاعدة بيانات Mr.Fenix 2 183 19-08-16, 09:34 AM
آخر رد: Mr.Fenix
Information تحميل برنامج الفيجوال بيسك 2010 download visual basic 2010 mohamed atef2018 0 256 09-07-16, 08:30 PM
آخر رد: mohamed atef2018
  العلاقات بين الجداول-الاضافة و الحذف و التعديل-برنامج لحفظ مصادر الموقع ابو ليلى 10 862 23-06-16, 01:13 PM
آخر رد: yasser_72
  شرح انشاء برنامج تحويل صيغ الملفات الصوتيه CLARO 9 312 02-06-16, 11:13 AM
آخر رد: CLARO
  [مشروع] مشروع برنامج لتشغيل ملفات mp3 alking-0999 1 386 01-06-16, 10:20 PM
آخر رد: CLARO
  شرح انشاء برنامج دردشة بسيط CLARO 0 247 28-05-16, 02:24 PM
آخر رد: CLARO

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


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