• 0
LED

عدد أيام السنة غير ثابته ! فما هو الحل؟

سؤال

السلام عليكم ورحمة الله وبركاته

 

انا بصدد عمل برنامج بحيث يصدر تقرير شهري وسنوي

 

الية عمل البرنامج, على سبيل المثال:

 

يطلب البرنامج من المستخدم إدخال عدد المنتجات بالمخزون

 

مثلا 20 الف منتج بالمخزون

 

يقوم البرنامج بتقسيم الـ20 الف على عدد الايام او الاسابيع او الشهور ( حسب الطلب)

 

النتيجة النهائية للبرنامج , يعطي المستخدم تقرير بالايام او الاسابيع او الشهور

 

مثال للتقرير

كل شهر يتم توزيع 1500 منتج , وبعد سنة المخزون سيكون فارغ , وهكذا

 

الخلاصة: يخبرك البرنامج كم مقدار المنتجات المراد توزيعها شهريا او اسبوعيا

 

المشكلة:

عدم ثبات الايام في السنة تؤثر على البرنامج

الشهر ممكن يكون 30 يوم او 28 او 29 او 31

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

 

يعني انا اقسم الـ 20 الف على 30 يوم او 28 او 29 أو 31 ؟؟؟؟؟

واذا قسمت على 30 راح يختلف هذا الشهر في السنة القادمه وهكذا , خطأ تراكمي

 

محاولاتي بالحل : لكن حل غير لائق

بحيث عند بداية تشغيل البرنامج يطلب البرنامج من المستخدم إدخال التقويم لهذة السنة

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

 

أسعفونا بالحل

 

 

 

 

 

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

9 إجابة على هذا السؤال .

  • 0

وعليكم السلام ورحمة الله وبركاته

 

في التقويم الميلادي عدد أيام الشهر لا تختلف من سنة إلى أخرى، ما عدا شهر فبراير حيث يكون 29 يومًا إذا كانت السنة كبيسة.

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم،

أخي المراد من برنامجك غير واضح تماماً، أرجو أن توضحه أكثر وبالتفصيل الممل.

 

وشكراً لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

إذا كنت تستخدم لغات دوت نت فالصنف DateTime  فيه مناهج تغنيك عن الفحص حيث تمرر له أي تاريخ فيعيد لك كل ما يتعلق بذاك التاريخ هل السنة كبيسة أم لا

 

فيما يخص استفسارك بإمكانك التقسيم على عدد أيام السنة الفعلية فنحن نعلم أن عدد أيام السنة هو 365.25

و مسألة السنة الكبيسة هي فقط  للابتعاد عن الكسور ولهذا جعلوا كل أربع سنوات يوم إضافي أي كل أربع أرباع يتشكل يوم

 

المهم عندما تقسم منتجاتك على 365.25 فهي الحصة الحقيقية لليوم الواحد

 

الآن تقوم بحساب الكميات لكل أسبوع أو شهر بضرب عدد أيام ذاك الشهر بالحصة اليومية

 

وهكذا تضمن توزيع لكل شهر حصته المناسبة لعدد أيامه

 

ولعمل دالة تحسب عدد أيام شهر ما قم بتمرير تاريخ الأول من ذاك الشهر إلى متحول من نوع DateTime  ثم أضف شهر له واطرح منه يوم فيعيد تاريخ آخر يوم من نفس الشهر

بغض النظر كان شهر 31 أو 30 أو 28 أو 29 فهي مهمة الصنف في الحساب

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

ثم تضرب بالحصة اليومية فتحصل على حصة ذاك الشهر

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

قمت بعمل الدالة التي شرحتها لك قبل قليل بلغة السي شارب

 

// لإرجاع عدد أيام الشهر للتاريخ الممر        public static int GetDaysOfMonth(DateTime Date)        {            var baseDate = new DateTime(Date.Year, Date.Month, 1); // تشكيل تاريخ بداية الشهر            var nextMonth = baseDate.AddMonths(1); // تشكيل بداية الشهر التالي            var lastDay = nextMonth.AddDays(-1); // تشكيل اليوم السابق لبداية الشهر التالي وهو نفسه آخر يوم في الشهر الحالي            return lastDay.Day; // إرجاع عدد الأيام        }
حيث أي تاريخ تمرره له يعيد لك عدد أيام شهر ذاك التاريخ ولو كان شهر شباط في سنة كبيسة سيعيد 29

 

        // لإرجاع عدد أيام السنة للتاريخ الممر        public static int GetDaysOfYear(DateTime Date)        {            var baseDate = new DateTime(Date.Year, 1, 1); // تشكيل تاريخ بداية السنة            var nextYear = baseDate.AddYears(1); // تشكيل بداية السنة التالية            var lastDay = nextYear.AddDays(-1); // تشكيل اليوم السابق لبداية السنة التالية وهو نفسه آخر يوم في السنة الحالية            return lastDay.DayOfYear; //  إرجاع عدد الأيام        }
 

حيث أي تاريخ تمرره له يعيد لك عدد أيام السنة لذاك التاريخ أي 365 أو 366 في السنة الكبيسة

تم تعديل بواسطه أبو أحمد المبرمج
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كنت عاوز أشرح لك بس أبو محمد كفى ووفى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ترجمة أكواد أخونا أبو محمد لل VB.Net :

 

 

 

Public Shared Function GetDaysOfMonth([Date] As DateTime) As Integer Dim baseDate = New DateTime([Date].Year, [Date].Month, 1) Dim nextMonth = baseDate.AddMonths(1) Dim lastDay = nextMonth.AddDays(-1) Return lastDay.Day End Function

 

 

 

 

 

Public Shared Function GetDaysOfYear([Date] As DateTime) As Integer	Dim baseDate = New DateTime([Date].Year, 1, 1)	Dim nextYear = baseDate.AddYears(1)	Dim lastDay = nextYear.AddDays(-1)	Return lastDay.DayOfYearEnd Function

 

 

هذه الترجمة قمت بها بنفسي لذلك أي خطأ في الأكواد (إذا كنت تستخدم VB.net) راسلني على الخاص

تم تعديل بواسطه Xese
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وعليكم السلام ورحمة الله وبركاته

 

في التقويم الميلادي عدد أيام الشهر لا تختلف من سنة إلى أخرى، ما عدا شهر فبراير حيث يكون 29 يومًا إذا كانت السنة كبيسة.

 

جزاك الله خير على المعلومه التي كنت اجهلها , ماذا لو كان بالتاريخ الهجري هل هو ثابت؟

 

 

السلام عليكم،

أخي المراد من برنامجك غير واضح تماماً، أرجو أن توضحه أكثر وبالتفصيل الممل.

 

وشكراً لك

شكرا لك ومحاولتك للمساعدة  , أنحلت المشكلة تقريبا . بفضل الله ثم مجهود الاعضاء الكرام

 

 

إذا كنت تستخدم لغات دوت نت فالصنف DateTime  فيه مناهج تغنيك عن الفحص حيث تمرر له أي تاريخ فيعيد لك كل ما يتعلق بذاك التاريخ هل السنة كبيسة أم لا

 

فيما يخص استفسارك بإمكانك التقسيم على عدد أيام السنة الفعلية فنحن نعلم أن عدد أيام السنة هو 365.25

و مسألة السنة الكبيسة هي فقط  للابتعاد عن الكسور ولهذا جعلوا كل أربع سنوات يوم إضافي أي كل أربع أرباع يتشكل يوم

 

المهم عندما تقسم منتجاتك على 365.25 فهي الحصة الحقيقية لليوم الواحد

 

الآن تقوم بحساب الكميات لكل أسبوع أو شهر بضرب عدد أيام ذاك الشهر بالحصة اليومية

 

وهكذا تضمن توزيع لكل شهر حصته المناسبة لعدد أيامه

 

ولعمل دالة تحسب عدد أيام شهر ما قم بتمرير تاريخ الأول من ذاك الشهر إلى متحول من نوع DateTime  ثم أضف شهر له واطرح منه يوم فيعيد تاريخ آخر يوم من نفس الشهر

بغض النظر كان شهر 31 أو 30 أو 28 أو 29 فهي مهمة الصنف في الحساب

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

ثم تضرب بالحصة اليومية فتحصل على حصة ذاك الشهر

 

يعجز لساني عن الشكر , كلام رائع وجميل ومفهوم

 

 

ترجمة أكواد أخونا أبو محمد لل VB.Net :

 

 

 

 

 

 

 

 

 

 

هذه الترجمة قمت بها بنفسي لذلك أي خطأ في الأكواد (إذا كنت تستخدم VB.net) راسلني على الخاص

 

شكرا لك لمحاولاتك ودعمك للموضوع , وجزاك الله خير

 

 

------------

 

أكرر شكري لكم جميعا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تفضل أخي بإمكانك أيضا من معرفة كيفية العمليات على التاريخ من خلال شيفرة مايكروسوفت

 

http://arabteam2000-forum.com/index.php/topic/274856-%D8%A7%D9%84%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D9%8A%D8%A9-%D9%84%D9%80%D9%85%D9%83%D8%AA%D8%A8%D8%A7%D8%AA-dont-net-framework-45/

ستجد ملف DateTime  بلغة السي شارب في مرفقات الموضوع المذكور

تم تعديل بواسطه أبو أحمد المبرمج
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تفضل أخي بإمكانك أيضا من معرفة كيفية العمليات على التاريخ من خلال شيفرة مايكروسوفت

 

http://arabteam2000-forum.com/index.php/topic/274856-%D8%A7%D9%84%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D9%8A%D8%A9-%D9%84%D9%80%D9%85%D9%83%D8%AA%D8%A8%D8%A7%D8%AA-dont-net-framework-45/

ستجد ملف DateTime  بلغة السي شارب في مرفقات الموضوع المذكور

 

جزاك الله خير , جاري الاطلاع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .