منتديات الجلفة لكل الجزائريين و العرب - عرض مشاركة واحدة - برنامج برنامج الأذان المعدل بالسي شارب
عرض مشاركة واحدة
قديم 2013-08-01, 18:27   رقم المشاركة : 1
معلومات العضو
__الهاوي__
أستــاذ
 
الصورة الرمزية __الهاوي__
 

 

 
إحصائية العضو










افتراضي برنامج الأذان المعدل بالسي شارب

السلام عليكم
سبق وأن أنجز أخانا MHDM برنامج للتذكير بالآذان باستخدام الفيبي دوت نت، ولقد ناقشنا ذلك في هذا الموضوع
https://www.djelfa.info/vb/showthread.php?t=1327951
ولقد كانت لي مشاركة هنا وأشرت أن الكلاس الموجود في النت يا إما خاطئ أو أنني لم أفهمه
https://www.djelfa.info/vb/showthread...post1053621218
ولكن المشكلة صعبة الاكتشاف، لقد كانت في قيم خطوط الطول والعرض والموجودة في ملف xml
فالقيم موجودة دون فاصلة في حين الحقيقية موجودة بالفاصلة
مثلا قيم الطول والعرض لمستغانم في ملف xml ها هي

كود بلغة HTML:
<city name="مستغانم">
    <latitude>359170</latitude>
    <longitude>1567</longitude>
</city>

لكن في الحقيقة هي صغيرة وليست كبيرة
كود بلغة HTML:
<city name="مستغانم">
    <latitude>35.9170</latitude>
    <longitude>0.1567</longitude>
</city>

واكتشفت ذلك بالصدفة لعدم تعاملي مع مفهوم خطوط الطول والعرض رغم أننا درسناها في الابتدائي
بعد اكتشاف الخلل تم تصحيح البرنامج وها هو يعمل بشكل سليم


كلاس الحساب
كود PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 
athan
{
    class 
CalcPrayerTimes
    
{
        
double Local_Noon;
        
double Asr_Time;
        
double Esha_Time;
        
double Fajr_Time;
        
double Sun_Set;
        
double Sun_Rise;
        public 
CalcPrayerTimes(int Yearint Monthint Daydouble Longdouble Latdouble Zone)
        {
            
double D = (367 Year) - ((Year + (int)((Month 9) / 12)) * 4) + (((int)(275 Month 9)) + Day 730531.5);
            
double L = (280.461 0.9856474 D) % 360;
            
LessMore360(L);
            
double M = (357.528 0.9856003 D) % 360;
            
LessMore360(M);
            
double Lambda 1.915 Math.Sin(ToRadian(M)) + 0.02 Math.Sin(ToRadian(M));
            
Lambda LessMore360(Lambda);
            
double Obliquity 23.439 0.0000004 D;
            
double Alpha ToDegree(Math.Atan((Math.Cos(ToRadian(Obliquity)) * Math.Tan(ToRadian(Lambda)))));//////
            
Alpha LessMore360(Alpha);
            
Alpha Alpha - (360 * (int)(Alpha 360));
            
Alpha = (Alpha 90 * (Math.Floor(Lambda 90) - Math.Floor(Alpha 90)));
            
double ST = (100.46 0.985647352 D) % 360;
            
double Dec ToDegree(Math.Asin(Math.Sin(ToRadian(Obliquity)) * Math.Sin(ToRadian(Lambda))));
            
double Durinal_Arc ToDegree(Math.Acos((Math.Sin(ToRadian(-0.8333)) - Math.Sin(ToRadian(Dec)) * Math.Sin(ToRadian(Lat))) / (Math.Cos(ToRadian(Dec)) * Math.Cos(ToRadian(Lat)))));
            
double Noon Alpha ST;
            
Noon LessMore360(Noon);
            
double UT_Noon Noon Long;
            
Local_Noon UT_Noon 15 Zone;
            
double Asr_Alt ToDegree(Math.Atan(Math.Tan(ToRadian(Lat Dec))));
            
double Asr_Arc ToDegree(Math.Acos((Math.Sin(ToRadian(90 Asr_Alt)) - Math.Sin(ToRadian(Dec)) * Math.Sin(ToRadian(Lat))) / (Math.Cos(ToRadian(Dec)) * Math.Cos(ToRadian(Lat)))));
            
Asr_Arc Asr_Arc 15;
            
Asr_Time Local_Noon Asr_Arc;
            
Sun_Rise Local_Noon - (Durinal_Arc 15);
            
Sun_Set Local_Noon + (Durinal_Arc 15);
            
double Esha_Arc ToDegree(Math.Acos((Math.Sin(ToRadian(-18)) - Math.Sin(ToRadian(Dec)) * Math.Sin(ToRadian(Lat))) / (Math.Cos(ToRadian(Dec)) * Math.Cos(ToRadian(Lat)))));
            
Esha_Time Local_Noon + (Esha_Arc 15);
            
double Fajr_Arc ToDegree(Math.Acos((Math.Sin(ToRadian(-18)) - Math.Sin(ToRadian(Dec)) * Math.Sin(ToRadian(Lat))) / (Math.Cos(ToRadian(Dec)) * Math.Cos(ToRadian(Lat)))));
            
Fajr_Time Local_Noon - (Fajr_Arc 15);
        }        
        public 
double ToRadian(double Value)
        {
            return (
Value Math.PI 180);
        }
        public 
double ToDegree(double Value)
        {
            return (
Value 180 Math.PI);
        }
        public 
double LessMore360(double Value)
        {
            if (
Value <= || Value 360)
            { return (
Value 360); }
            else
                return 
Value;
        }
        public 
int LocalNoonHour
        
{
            
get
            
{
                return ((int)(
Local_Noon));
            }
        }
        public 
int LocalNoonMin
        
{
            
get
            
{
                return (int)(((
Local_Noon) - (int)Local_Noon) * 60);
            }
        }
        public 
int AsrHour
        
{
            
get
            
{
                return ((int)(
Asr_Time));
            }
        }
        public 
int AsrMin
        
{
            
get
            
{
                return (int)(((
Asr_Time) - (int)(Asr_Time)) * 60);
            }
        }
        public 
int SunRiseHour
        
{
            
get
            
{
                return ((int)(
Sun_Rise));
            }
        }
        public 
int SunRiseMinr
        
{
            
get
            
{
                return (int)(((
Sun_Rise) - (int)(Sun_Rise)) * 60);
            }
        }
        public 
int SunSetHour
        
{
            
get
            
{
                return ((int)(
Sun_Set));
            }
        }
        public 
int SunSetMin
        
{
            
get
            
{
                return (int)(((
Sun_Set) - (int)(Sun_Set)) * 60);
            }
        }
        public 
int FajrHour
        
{
            
get
            
{
                return ((int)(
Fajr_Time));
            }
        }
        public 
int FajrMin
        
{
            
get
            
{
                return (int)(((
Fajr_Time) - (int)(Fajr_Time)) * 60);
            }
        }
        public 
int EshaHour
        
{
            
get
            
{
                return ((int)(
Esha_Time));
            }
        }
        public 
int EshaMin
        
{
            
get
            
{
                return (int)(((
Esha_Time) - (int)(Esha_Time)) * 60);
            }
        }
    }



البرنامج من إنجاز العبد الضعيف
كود PHP:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using athan;
using System.Media;
namespace 
athan
{
    public 
partial class AthanForm Form
    
{
        
DataSet ds;
        
CalcPrayerTimes calculator;
        
NotifyIcon myNotifyIcon;
        
ContextMenu myMenu;

        public 
AthanForm()
        {
            
InitializeComponent();
        }

        private 
void AthanForm_Load(object senderEventArgs e)
        {
            


            
myMenu = new ContextMenu();//إضافة قائمة قرب الساعة لأيقونة البرنامج
            
myMenu.MenuItems.Add(0, new MenuItem("إظهار", new System.EventHandler(Show_Click)));
            
myMenu.MenuItems.Add(1, new MenuItem("إخفاء", new System.EventHandler(Hide_Click)));
            
myMenu.MenuItems.Add(2, new MenuItem("خروج", new System.EventHandler(Exit_Click)));

            
myNotifyIcon = new NotifyIcon();            //إضافة أيقونة قرب الساعة
            
myNotifyIcon.Text "برنامج الأذان: النسخة 1.00";
            
myNotifyIcon.Visible true;
            
myNotifyIcon.Icon = new Icon(GetType(), "TrayIcon.ico");
            
myNotifyIcon.ContextMenu myMenu;           //ربط الايقونة بالقائمة السابقة 

            
lblDay.Text DateTime.Now.ToLongDateString();         //الحصول على تاريخ اليوم على هيئة حروف

            
string myXMLfile "algeria.xml";       //  متغير يحمل اسم ملف الإكس أم أل
            
ds = new DataSet();         // تهيئة داتاست وهي عبارة عند قاعدة بيانات في الذاكرة
            
ds.ReadXml(myXMLfile);         //بناء الداتاسات اعتمادا على هيكل الإكس أم أل

            
cbWilaya.DataSource ds.Tables[0];       //  ربط الكومبوبوكس بالجدول الاول للداتاست
            
cbWilaya.DisplayMember "name";        // عرض اسم الولاية في الكومبوبوكس

         
}

        protected 
void Exit_Click(Object senderSystem.EventArgs e)
        {
            
Application.Exit();
        }
        protected 
void Hide_Click(Object senderSystem.EventArgs e)
        {
            
this.Hide();
        }
        protected 
void Show_Click(Object senderSystem.EventArgs e)
        {
            
this.Show();
        }

        private 
void timer1_Tick(object senderEventArgs e)
        {
            
lblTime.Text DateTime.Now.ToLongTimeString();//إستخلاص الوقت الحالي
            
if (DateTime.Now.Second == 0CheckEachMinute();//بعد كل دقيقة يتم التدقيق في وقت الصلاة
        
}

        private 
void CheckEachMinute()
        {
            
//تحويل الازمنة إلى دقائق لتسهيل المقارنة
            
int iFajr calculator.FajrHour 60 calculator.FajrMin;
            
int iLocalNoon calculator.LocalNoonHour 60 calculator.LocalNoonMin;
            
int iAsr calculator.AsrHour 60 calculator.AsrMin;
            
int iSunSet calculator.SunSetHour 60 calculator.SunSetMin;
            
int iEsha calculator.EshaHour 60 calculator.EshaMin;

            
int iNow DateTime.Now.Hour 60 DateTime.Now.Minute;

            
// استدعاء دالة لتنفيذ أمر الاذان
            
if (iNow == iFajrplayAthan("الفجر");    
            if (
iNow == iLocalNoonplayAthan("الظهر");
            if (
iNow == iAsrplayAthan("العصر");
            if (
iNow == iSunSetplayAthan("المغرب");
            if (
iNow == iEshaplayAthan("العشاء");
        }

        private 
void playAthan(string sSatalTime)
        {
            
//windows/system32/wmp.dll استخدام مكتبة الصوت الموجودة هنا
            
WMPLib.WindowsMediaPlayer wPlayer = new WMPLib.WindowsMediaPlayer();//استدعاء كنترول تشغيل الصوت
            
wPlayer.URL "athan.wma";
            
wPlayer.controls.play();

            
DialogResult dialogResult MessageBox.Show("أذان صلاة " sSatalTime "\n" "لإيقاف الأذان إضغط على زر نعم""الأذان"MessageBoxButtons.YesNo);
            if (
dialogResult == DialogResult.Yes)
            {
                
wPlayer.controls.stop();
            }
            
        }


        private 
void cbWilaya_SelectedIndexChanged(object senderEventArgs e)
        {
            
int index cbWilaya.SelectedIndex;  //الحصول على إندكس الولاية

            
int Year DateTime.Now.Year;        //الحصول على السنة الحالية
            
int Month DateTime.Now.Month;      //الحصول علي الشهر الحالي
            
int Day DateTime.Now.Day;          //الحصول على اليوم الحالي
            
double Long Convert.ToDouble(ds.Tables[0].Rows[index]["longitude"]) / 10000;     //استخلاص قيمة خط الطول للولاية
            
double Lat Convert.ToDouble(ds.Tables[0].Rows[index]["latitude"]) / 10000;       //استخلاص قيمة دائرة العرض للولاية
            
calculator = new CalcPrayerTimes(YearMonthDayLongLat1.0);              // هنا نستدعي الكلاس الجاهز الذي يحسب أوقات الصلاة

            //استخلاص وقت كل صلاة
            
lblFajr.Text calculator.FajrHour.ToString("00") + ":"
                           
calculator.FajrMin.ToString("00");
            
lblLocalNoon.Text calculator.LocalNoonHour.ToString("00") + ":"
                                
calculator.LocalNoonMin.ToString("00");
            
lblAsr.Text calculator.AsrHour.ToString("00") + ":"
                          
calculator.AsrMin.ToString("00");
            
lblSunSet.Text calculator.SunSetHour.ToString("00") + ":"
                            
calculator.SunSetMin.ToString("00");
            
lblEsha.Text calculator.EshaHour.ToString("00") + ":"
                           
calculator.EshaMin.ToString("00");

        }


    }



فقط للتنبيه، قد تجد فارقا بسيطا في الفجر والعشاء، وهذا لاعتماد بعض البرامج طريقة هيئة العالم الاسلامي في الحساب، في حين الكلاس المستخدم هنا يعتمد جامعة كاراتشي في الحساب، فالفرق طفيف، علما أنه يوجد العديد من طرق الحساب العالمية.

من يحتاج لمواقيت الصلاة في بلدان أخرى فما عليه إلا استبدال ملف algeria.xml مع الحفاظ على التسمية.

كما أنني استخدمت أسامي إنجليزية في تسمية المتغيرات والدوال وهذا لأنني معقد من الفرنسية على اعتبارها لغة دخيلة على البرمجة.
وأثناء التسمية قاربت الأسلوب العالمي في التسمية
يعني Now من نوع interger يسمى هكذا : iNow
المتغير SalatTime من نوع string يسمى هكذا: sSalatTime
الكنترول Wilaya من نوع ComboBox يسمى هكذا: cbWilaya
Label = lbl
TextBox = txt
Button = btn
ListBox = lb
.... إلخ

وهذا هو الاسلوب المعتمد عالميا فلنعتمده.

من يجد مشكلة في تشغيل التطبيق فأرجو أن يعلمني، فلقد سبق واستخدمت dot.net 4.0 في البرمجة.
من أشكل عليه شيء فلا بأس بأن يطرح تساؤله هنا

هذه النسخة الأولى، ستحسن لاحقا إن شاء الله.

لتحميل التطبيق
https://www.gulfup.com/?MmxboL

لتحميل السورس والتعديل عليه
https://www.gulfup.com/?ruAeCv



أهلا ثانية إخواني
تكملة للبرنامج، ها هي نسخة جديدة من البرنامج المخصص لولايات الجزائر فقط



التعديلات:
- إضافة أنواع مختلفة من أصوات الأذان
- حفظ البيانات للاستخدام مستقبلا
- التنبيه من خلال أيقونة شريط المهام

فقط كملاحظة: تم تحميل التطبيق السابق أكثر من 30 مرة، لكنني لا أعرف إن اشتغل عند البعض أم لا
أعلم أنه عند البعض يطلب تحميل dotnet framework 4.0
سأقوم بإعادة البرنامج على الفريموورك 2.0
لمن لم يشتغل معه أرجو أن يعلمني لأن هذا ينفعني وينفع المبرمجين في بيئة الدوت نت.

تحميل التطبيق
https://www.gulfup.com/?TKRnLn









 


رد مع اقتباس