الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

العمليات الحسابية

بدأه الاناكوندا في 8 يونيو 2012 · 15 رد · 2,108 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الكرام انا اعمل على برنامج لموظفي مؤسسة.

ووقفت عند نقطة بسيطة في العمليات الحسابية .

في جدول الإجازات بقاعدة سكيو ال يوجد حقل الرصيد الحالي .

مثلاً

الاسم :احمد

الرصيد الحالي :50

الزيادة الشهرية: 2

السؤال .. اذا كان الموظف رصيده الحالي 50 ماهي الطريقة التي اجعل حقل الرصيد الحالي يزيد بمقدار 2 يومين كل شهر (((بشكل تلقائي))) ؟؟

يعني دون ان اتدخل انا .. كل شهر يضيف على الرصيد الحالي " يومين " كل شهر ؟

اتمنى وصلت الفكرة ؟ واحصل جواب شافي وبالتفصيل للعمليات الحسابية في asp.net

بنتظاركم جزاكم الله خيراً

تم تعديل هذه المشاركة بواسطة الاناكوندا في 8 يونيو 2012 في 12:32

#2
الاناكوندا كتب:

اخواني الكرام انا اعمل على برنامج لموظفي مؤسسة.

ووقفت عند نقطة بسيطة في العمليات الحسابية .

في جدول الإجازات بقاعدة سكيو ال يوجد حقل الرصيد الحالي .

مثلاً

الاسم :احمد

الرصيد الحالي :50

الزيادة الشهرية: 2

السؤال .. اذا كان الموظف رصيده الحالي 50 ماهي الطريقة التي اجعل حقل الرصيد الحالي يزيد بمقدار 2 يومين كل شهر (((بشكل تلقائي))) ؟؟

يعني دون ان اتدخل انا .. كل شهر يضيف على الرصيد الحالي " يومين " كل شهر ؟

اتمنى وصلت الفكرة ؟ واحصل جواب شافي وبالتفصيل للعمليات الحسابية في asp.net

بنتظاركم جزاكم الله خيراً

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

اخي العزيز .. كل ماعليك عملة هو اضافة ابديت بنل + تايمر وضع استعلامك .. في التايمر .. والتايمر يستول عمل كل هذه دون ان تتدخل سوف يقوم بالاستعلام .. على حسب المدة الي تحددها له على حسب استعلامك .. وفي حالة انه تم ايجاد موظف رصيدة 50 سوف يقوم بالزيادة له 2 ..

اذا يتبقاء عليك فقط . ان تقوم بكتابة الاستعلام الذي تريدة وتضعه داخل التاير فقط .. اتمنا اكون افدتك

#3

أظن أنه يتوجب إضافة حقل مخفي يعبر عن آخر شهر تمت إضافة الزيادة إليه

بحيث كلما تم فتح البرنامج يقوم بمقارنة قيمة هذا الحقل مع التاريخ الحالي فإن كانا نفس الشهر ( طبعا يجب أن تتجاهل الأيام ) فهذا يعني أنه قد تمت الإضافة لهذا الشهر وفي حال وجد فرق فهذا يعني أن هذا أول فتح للبرنامج للشهر الجديد فيقوم بعملية إضافة 2 لكل قيم حقل الرصيد ويحدث قيم الحقل المخفي ليحتوي تاريخ الشهر الجديد بحيث في الفتح القادم لا يقوم بالزيادة مرة أخرى ويبقى هكذا حتى أول فتح للشهر التالي وهكذا

يعني ببساطة هو حفظ هل تمت الزيادة للشهر الجديد أم لا

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

تبقى مسألة ومع أنها نادرة ولكن لا بد من حسابها

افرض أنه لم يفتح البرنامج لمدة شهر كامل أو شهرين

حينها عند مقارنة الشهر الحالي مع آخر شهر محفوظ نجد ان هناك فرق أكبر من واحد ربما اثنان أو ثلاثة بحسب عدد الشهور التي مرت دون فتح البرنامج

في هذه الحالة يجب أن تكون الزيادة مضروبة بعدد الشهور وبالتالي لو وجدنا الفرق اثنان أي مر شهر كامل وخلنا في الشهر الذي يليه فالزيادة يجب ان تكون 4 وهي 2 عن الشهر الفائت و2 عن الشهر الجديد

كما قلت هو احتمال نادر ولكنه وارد.

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#4

@ورق خسرانة ... @المبرمج أبو أحمد

الأخ طلب عدم تدخل المستخدم .....

هنا يجب أن نستعين بخدمات الويندوز لإنجاز مثل هذه المهمة

أنظر إلى هذه الروابط

http://www.codeproje...bs-with-ASP-NET

http://msdn.microsoft.com/en-us/magazine/cc163821.aspx

http://www.codeproje...P-NET-to-run-sc

http://www.codeproje...task-in-ASP-NET

تنويه : الأمر ليس بسيط ويحتاج تفكير وتجربة...thinking.gif

والله أعلى وأعلم.

بتوفيق الله تعالى.

تم تعديل هذه المشاركة بواسطة _أبو حذيفة_ في 8 يونيو 2012 في 20:34

الله أكبر الله أكبر الله أكبر لآ إله إلا الله الله أكبر الله أكبر ولله الحمد

#5

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

حياك الله أخي أبو حذيفة

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

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

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

هذا ما فهمته والله أعلم

والأخ يحدد إن كان ما فهمته صحيحا أو يحتاج إلى مزيد من التوضيح.

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#6

الله يعطيكم العافيه ابو حذيفة والمبرمج ابو احمد وورق خسران

بصراحه انا مبتدئ بالبرمجة بلغة سي شارب واريد ان افهم العمليات الحسابية اين تكون . وكيف تكون .

وعندي برنامج بسيط اريد حساب اجازات الموظفين في المؤسسة .

الذي اريده.

عندما اضيف موظف رصيدة الحالي من الإجازة مثلاً 50 يزيد. كل شهر بشكل تلقائي 2 .

والنقاط مهمة التي ذكرتوها عند عدم فتح البرنامج؟

او عند تغيير تاريخ الجهاز ؟

واحتمالات كثيرة .. ولكن .. لابد لها من حل . لأني لا اتصور ان في العرب مبرمجين يصعب عليهم مثل هذه العمليات

وهي عمليات اتوقع بكل برنامج لمؤسسة او شركة او جهة حكومية .

ولو اصبحت العملية بكل شهر كبسة زر أو إضافة يدوية اصبح الأمر ممل للمستخدم للبرنامج.

لذلك ما اريده هو مثلاً إدخال الرصيد الحالي 50 يكون من وقت إضافة تاريخ هذا الرقم وانتهاء شهر تماماً يزداد الرقم 2 يصبح 52 والشهر الذي بعده هكذا . يزيد كل شهر 2 .

ولو اخذ الموظف اجازة مثلاً 10 يصبح الرقم بالخلية بعد عملية الطرح 42 بالشهر التالي يزداد إ لى 44 وهكذا .

ياليت . احد يفيدنا بشرحها ..ويساعدنا فيها لجل نفهم فالعمليات الحسابية طرح وقسمة وضرب وجمع اتوقع سهلة .

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

ولا اعلم المبرمجين ماهي طرقهم لعمل مثل هذه البرامج معقوله يكون الإدخال يدوي !!

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

ويضع لنا رابط موضوعه او يتفضل بشرحها هنا . جزاكم الله خيراً .

تم تعديل هذه المشاركة بواسطة الاناكوندا في 9 يونيو 2012 في 00:33

#7

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

أعتقد أبسط طريقة لذلك هي هنا

نصيحتي لك .... ابدأ بدراستها والتفكير بها ولا تضيع الوقت في إنتظار الغير حتى يشرحها لك أو يعطيك إياها جاهزة ..... ستتعلم الكثير من الأمور المهمة و الرائعة حتى تفهمها كلها....خير من أن تجدها جاهزة على طبق من ذهب...

والله أعلى وأعلم.

بتوفيق الله تعالى.

تم تعديل هذه المشاركة بواسطة _أبو حذيفة_ في 9 يونيو 2012 في 02:23

الله أكبر الله أكبر الله أكبر لآ إله إلا الله الله أكبر الله أكبر ولله الحمد

#8
_أبو حذيفة_ كتب:

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

أعتقد أبسط طريقة لذلك هي هنا

نصيحتي لك .... ابدأ بدراستها والتفكير بها ولا تضيع الوقت في إنتظار الغير حتى يشرحها لك أو يعطيك إياها جاهزة ..... ستتعلم الكثير من الأمور المهمة و الرائعة حتى تفهمها كلها....خير من أن تجدها جاهزة على طبق من ذهب...

والله أعلى وأعلم.

بتوفيق الله تعالى.

-----------

خي العزيز ابو حذيفة .. انت تقول لابد ان يكون هناك جهاز يعمل دون توقف ؟ .. طيب هذه شي اكيدانا عندما ارفع الموقع على السريفر اكيد انه بيعمل الموقع طول ما يكون السريفر يشتغل ؟ وبكذا نكون حققاُ الغرض ؟ اما في حالت

انه السريفر توقف عن العمل فاكيد انه لن يشتغل الكود

#9

للاسف ياخي ابو حذيفة انا مبتدئ في لغة البرمجة ولم اتوصل لمستوى بأن افهم شرح المواقع الاجنبية إلى الآن وخصوصاً

في دوال وادوات لم استخدمها من قبل .

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

الفكرة لدي طويلة وعمليات حسابية كثيرة ولكن اخذ شرح الخبراء بالعربية ومن ثم اطور واوظف الكود واستخدمه في عمليات اكثر تعقيداً

ولكن المسألة فهم الطريقة الصحيحة في البداية ومن ثم الشخص يطور بالعمليات ويكون على بينه بها .

لذلك اتمنى بمن لديه الخبره او تطبيق ماوضعته اخي ابو حذيفة بالتكرم علينا بشرحها .

#10

اخواني

لو قمنا با استخدام ال trigger علي الجدول يمكن ذالك

#11

السلام عليكم

ألا يمكن أن تنفذ هذه العمليات في SQL server?

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

#12
اقتباس
المقارنة تتم برمجيا ضمن حدث مناسب مثلا فتح البرنامج أو استدعاء صفحة أو استفسار من القاعدة و فيما يخص عدم فتح البرنامج إذا لايوجد طلب للداتا ولتبقى غير مدثة ومع اول طلب ستتحدث تلقائيا

أخي الكريم أبو أحمد.... لو كان عندك 10 موظفين فقط مثلاً وتريد أن تقوم بالعملية المطلوبة عند تحميل صفحة الإنترنت ولنفترض ذلك في حدث Session_Start أو Page_Load عندها سيكون عندك من العمليات مايلي :

أولاً كود للإتصال بقاعدة البيانات مع إحضار البيانات اللازمة مثل أسماء الموظفين مع تاريخ آخر إضافة مع عدد أيام الأجازة ... ثم تقم بوضع هذا في DataSet مثلاً ثم يكون عندك حلقة تدور على الموظفين واحد واحد ... وفي كل موظف يمر على الحلقة تتحقق من تاريخ آخر إضافة عليه فإن كان مضاف له يومان على عدد الإجازات تنتقل للموظف التالي وإن لم يكن مضاف ستقوم بإضافة 2 وهذا يعني تنفيذ إستعلام جديد للإضافة لقاعدة البيانات ثم بعد الإضافة تنتقل للموظف الثاني والثالث والرابع........

وربما يكون هناك 1000 موظف !!!!!!!! سؤال كم من الوقت يلزم حتى تتنفذ هذه الإجرائيات .... طبعاً لا ننسى وقت تحميل الصفحة الطبيعي... وهذا كله والمستخدم ينتظر فتح الصفحة......

وهذه العمليات كلها ستكون عندما يقوم مستخدم واحد فقط بالدخول للموقع!!!!! .... وماذا لو دخل 1000 مستخدم مثلاً أو أكثر في نفس الوقت؟؟؟؟ هل ستكون هناك أخطاء ومشاكل بما أن الكل سينفذ نفس الإجراءات من تحقق وإضافة تعديل على نفس الجدول وعلى نفس سجل الموظف؟؟؟؟؟وماذا عن الضغط على السيرفر؟؟؟؟؟ ....أترك الإجابة لك........

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

اقتباس
خي العزيز ابو حذيفة .. انت تقول لابد ان يكون هناك جهاز يعمل دون توقف ؟ .. طيب هذه شي اكيدانا عندما ارفع الموقع على السريفر اكيد انه بيعمل الموقع طول ما يكون السريفر يشتغل ؟ وبكذا نكون حققاُ الغرض ؟ اما في حالت

انه السريفر توقف عن العمل فاكيد انه لن يشتغل الكود

كلا أخي... الكود لن يعمل....الكود تستطيع تشبيهه بالمادة الخام التي لن تستفيد منها إن لم تعالجها ... أقصد يجب طلب الصفحة حتى يبدأ الكود بالعمل

ما رأيك أن تجرب ذلك على موقع ترفعه على الإنترنت...ستتبين لك المسألة جيداً....

"تستطيع العودة لأي كتاب في asp.net ستجد به مبادئ أساسية يجب أن تعرفها مثل هذا الشيئ"

اقتباس
ألا يمكن أن تنفذ هذه العمليات في SQL server?

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

كلامه مذكور على ما أذكر في أحد الروابط التي وضعتها في الأعلى......

........أرى أن الروابط السابقة لم يطلع عليها أي أحد......

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

والله أعلى وأعلم .

بتوفيق الله تعالى.

تم تعديل هذه المشاركة بواسطة _أبو حذيفة_ في 10 يونيو 2012 في 05:46

الله أكبر الله أكبر الله أكبر لآ إله إلا الله الله أكبر الله أكبر ولله الحمد

#13

طرحت الموضوع في أحد المنتديات وجاوبني عليه شخص الله يجزاه خير الجزاء

وطرح لي هذه الفكرة ولكن .. المشكلة بأني مبتدئ ولم اعمل على الـ trigger

وطلبت منه شرح للعملية ولكن إلى الآن لم يرد علي .

وكان جوابه كالتالي::

جرب هذا الكود

افعل trigger علي الجدول

وضع هذا الكود علي ال trigger وعدل كما في جدولك حيث empsal هي الرص الحالي

و emp2 هي الزياه

و المتغير @date1 تم اسناد له الشهر الحالي من خلال

DATEPART(month, getdate())

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

ALTER TRIGGER emptr
ON dbo.emp
FOR INSERT, UPDATE
AS
DECLARE @date1 int
DECLARE @d1 int
begin
/*select @d1=(select emp2 from emp where empsal > 50)*/
select @date1=(SELECT DATEPART(month, getdate()))
if @date1=1 or @date1=2 or @date1=3 or @date1=4 or @date1=5 or @date1=6 or @date1=7 or @date1=8 or @date1=9 or @date1=10 or @date1=11 or @date1=12
if update(empsal)
update emp set emp2=emp2+2 where empsal = 50
end

ولكن هل يقبل مثلاً .. الحقل

الاسم : الرصيد الحالي : تاريخ أخر اضافة

احمد : 50 : 1433/6/10

الـ trigger هل يقبل لو تم إنقاص الحقل "" الرصيد الحالي "" عند طلب الموظف اجازة مثلاً 5 ايام يصبح رصيده بعد الخصم 45

هل تتأثر عملية الـ trigger في هذا الحساب أو لا؟

ياليت احد من الخبراء اذا فهم الكود بالأعلى يشرحه لنا بشيء من التفصيل جزاكم الله خيراً .

#14

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

أخي الكريم لا أنصحك بأن تخزن قيمة الرصيد ولكن قم بعمل تابع function يقوم بحساب رصيد الإجازات عند طلبه

يمكن لهذا التابع أن يكون ضمن قاعدة البيانات sql server وهو الأفضل أو ضمن كود البرنامج

طبعا في هذ التابع سيتم حساب رصيد الإجازات بناء على تاريخ تعيين الموظف ومن ثم خصم الرصيد الإجازات التي أخذها الموظف

أرجو أن تكون الفكرة واضحة

الهم عجل بنصرك وفرجك لأهلنا في الشام

حسبنا الله ونعم الوكيل

#15

ولكن نريد نحن .. الإضافة تكون لرصيد الموظف بشكل تلقائي او اوتوماتيك.

اريد .. عندما يكون رصيد الموظف 50 .. يزد كل شهر بشكل تلقائي 2 يومين .

لأن لو ابضيف لكل موظف كل شهر بشكل يدوي او بفتح استعلام اتوقع شغله متعبه . وقد ينسى الشهر شهر او شهرين .

لذلك نبحث عن حل لإضافة رصيد بشكل تلقائي دون تدخل المبرمج.

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

نفرض هناك 500 موظف؟ وجملة فور سوف تبحث عن سجل سجل في القاعدة لكل موظف ومن ثم تقارن التاريخ ومن ثم تضيف

ثم الموظف الآخر ثم الموظف الآخر تستغرق وقت كثير للعملية وقد ينتج عنها مشاكل عدة .

لذلك نبحث عن حل .. لمثل هذه الاضافة الثابته مثل.

زيادة 2 يومين لكل موظف بعد مرور شهر .

او زيادة 200 ريال لكل موظف بعد مرور سنة وهكذا .

نريد حل للأشياء التي تزيد للموظفين مربوطة بتاريخ معين . بحيث عند هذا التاريخ يتم الزيادة . ماهي الطرق لفعل مثل هذه العمليات !!

هنا السؤال الذي لم نتمكن من حله .

:mad:

#16

كما ذكر الأخوة فإن عملية زيادة الرصيد بشكل آلي يمكن تنفيذها بعدة طرق ولكن تلك الطرق لا تخلو من وجود مشاكل ، ولكن طريقة sql user function التي ذكرتها لك أعتقد بأنها هي الأمثل وهي غير معقدة ويمكن أن تتعامل معها وكأنها حقل مخزن في قاعدة البيانات وهي ولا تؤثر على الأداء في حال كانت البيانات مفهرسة بشكل جيد

الهم عجل بنصرك وفرجك لأهلنا في الشام

حسبنا الله ونعم الوكيل

مواضيع مشابهة