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

التعامل مع الداتا قريد فيو بالسي شارب لمشروعي التخرج

رائج
بدأه om meme في 1 يونيو 2010 · 91 رد · 26,947 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#51

اخوي .. نعم اريد ان تكتب اخطائي .. عشان اتعلم .. انا خبرتك بإني لم يشرح لي من قبل هالكلام انا اقرءه فقط .. مو كل شي اقدر افهمه مثل ماهو مطلوب مني .. !

فعادي عندي تكتب اخطائي ولا اخجل من ذكرها اساسا ً .. بل افتخر اني انجزت من دون معلم ..!

واصل فأنا اتابع ..:)

#52

حسنا ..

التعديلات على قاعدة البيانات:

جدول Book:

BookID نمط البيانات AutoNumber ويكون Primary Key.

CatID نمط البيانات Number وهو Foreign Key لجدول Cat

Stat,Loc,Limitنمط البيانات كما هي هذا يعود لتصورك لطبيعة عمل المكتبة وهل يدخل فقط ارقام في Loc و Limit.

جدول Cat:

CatID نمط البيانات AutoNumber ويكون Primary Key

وباقي الحقول كما هي.

جدول Borrow:

BorID نمط البيانات AutoNumber ويكون Primary Key

BorrowerID نمط البيانات Number ويكون Foreign Key لجدول جديد يسمى Members

BorrowerName تم حذفه لاحاجة له ممكن الحصول عليه من جدول Members

BookID نمط البيانات Number ويكون Foreign Key لجدول Book

CatID نمط البيانات Number ويكون Foreign Key لجدول Cat

LateDate تم حذفه لا حاجة له سيضاف في جدول Demurrage

باقي الحقول على حالها..

جدول Demurrage

DemurrageID نمط البيانات AutoNumber ويكون Primary Key

BorrowID نمط البيانات Number ويكون Foreign Key لجدول Borrow

LateDates نمط البيانات Number ويمثل عدد أيام التأخير.

Demurrage نمط البيانات Number ويمثل قيمة الضريبة.

جدول Member:

MemID نمط البيانات AutoNumber ويكون Primary Key

Name نمط البيانات Text ويمثل الاسم

Special نمط البيانات Text ..

Phone نمط البيانات Text

MemTypeID نمط البيانات Number ويكون Foreign Key لجدول MemberType

جدول MemberType

TypeID نمط البيانات AutoNumber ويكون Primary Key

MemberType ويمثل النوع (Teacher و Student )

جدول Member يغني عن جدولي Student و Teacher .. اضررت لان اعدل قاعدة البيانات كلها ..:unsure:

فيما لي صورة قاعدة البيانات توضح العلاقات الجديدة بين الجداول

post-40855-12759009636812_thumb.jpg

والأن ننتقل إلى التصميم والكود ..

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

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#53

Stat,Loc,Limit هذول انا ابيهم نص ورقم بس لما اضع نوع البيانات نص ما يرضى احط رقم ..! ولما اخليها رقم ما اقدر اضيف نص ..!

Phone ليش نوع البيانات تكست مع انه رقم ..!

بل كل قاعدة البيانات غيرتها :(

هلون بنغير كل كودات الي موجودة بالبرنامج .. !!! ويلاااااه عدت للصفر من جديد !!!

طلعت مش فاهمه حاجه ..!

الله يعين ..

أهم شي تساعدني على الفهم ..

جزاك الله خير الجزاء وأعطاك كل ما تتمنى يارب ..

انتظرك انا ..

#54

Loc, Limit قمت بتعديلها إلى Text يمكنك الان ادخال ارقام واحرف

ولكن Stat نمط البيانات Yes/No ما المقصود بالحالة هنا؟

اقتباس
طلعت مش فاهمه حاجه ..!

لا عملك جيد لكن كان يحتاج إلى بعض التعديل ليكون افضل ..:happy:

نعم سيتعدل البرنامج تقريبا بنسبة 80% لكن بعد ان اعدله ساشرح لك الخطوات

ولكن احتاج بعض الوقت لان مشغول قليلا ..

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#55

معناها الكتاب موجود او لا .. ؟

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

اوكي اخوي طمنتني شوي ولو اني اشك اني فاهمه حاجه :(

خذ راحتك خوي.. انا هون انتظر ..

يعطيك العافية

تم تعديل هذه المشاركة بواسطة om meme في 7 يونيو 2010 في 13:18

#56

أختي لدي بعض الاستفسارات:

هل رقم الاستاذ ورقم الطالب يدخل يدويا او البرنامج يولده تسلسليا لاني قمت بتصميم الجدول AutoNumber؟

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

عند اعادة الكتاب ماذا سيفعله آمين المكتبة (او المدير ) في هذه الحالة هل سيدخل تاريخ الاعادة في جدول الضريبة؟

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#57
was_hal كتب:

أختي لدي بعض الاستفسارات:

هل رقم الاستاذ ورقم الطالب يدخل يدويا او البرنامج يولده تسلسليا لاني قمت بتصميم الجدول AutoNumber؟

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

عند اعادة الكتاب ماذا سيفعله آمين المكتبة (او المدير ) في هذه الحالة هل سيدخل تاريخ الاعادة في جدول الضريبة؟

هلا اخوي

نعم يتم إدخالهم يدويا .

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

في حالة ارجاع الكتاب يقوم المدير بكتابة تاريخ الاعادة في جدول الغرامه ويحسب الفرق بين يوم الاعادة واليوم اللذي يفترض ان يعيد فيه الكتاب .. إن كان نفس التاريخ فلا غرامة تحسب وإن اختلف التاريخ فيحسب مقدار الزيادة ويضربه في 2

هل لا زالت قاعدة البيانات فيها اخطاء ..!!

#58

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

وليكن MemNumber وذلك لتسجيل الرقم مع بقاء حقل MemID بنمط AutoNumber لانه يجب ان يوجد حقل Primary Key كما اسلفت

لكن ربما اعدل على قاعدة البيانات ..

لم يتسن لي ان اعدل المشروع بالكامل عدلت فقط بعض النوافذ .. كنت مشغولا قليلا

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

تم تعديل هذه المشاركة بواسطة was_hal في 7 يونيو 2010 في 16:00

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#59

إن شاء الله ..

الله يعطيك العافية والصحة .. تعبتك معي كثير .

اوكي فهمت سالفة البرايمري كي ..

يارب يكمل المشروع على خير .. بفضل الله وبفضل مساعدتك لي ..

والله يجبر بخاطرك مثل ما جبرت بخاطري .. الله ينولك مرادك يارب .

وسامحني تعبتك معي ..

#60

ٍسأرفق البرنامج إن شاء الله بعد ساعة ...

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#61
was_hal كتب:

ٍسأرفق البرنامج إن شاء الله بعد ساعة ...

سلام عليكم .. لقد رأيت ردك في العمل ولكن لم استطع الدخول لمشكله أمنيه في النظام .

على العموم انتظرت بعد ساعه وساعتين لم ارى شيئا ..!!!

عسى المانع خير يارب ..

وانا لا زلت انتظر ردك اخي الكريم . :)

#62

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

في مايلي المشروع سأقوم بشرحة خطوة خطوة إن شاء الله قبل أن ارفقه

أولا: قاعدة البيانات:

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

جدول Book:

BookID نمط البيانات AutoNumber ويكون Primary Key.

CatID نمط البيانات Number وهو Foreign Key لجدول Cat

Loc: نمط البيانات Text

Limit نمط البيانات Text

Stat: نمط البيانات Yes/No

جدول Cat:

CatID نمط البيانات AutoNumber ويكون Primary Key

وباقي الحقول كما هي.

جدول Borrow:

BorID نمط البيانات AutoNumber ويكون Primary Key

BorrowerID نمط البيانات Number ويكون Foreign Key لجدول جديد يسمى Members

BookID نمط البيانات Number ويكون Foreign Key لجدول Book

CatID نمط البيانات Number ويكون Foreign Key لجدول Cat

BorDate: نمط البيانات Text ويمثل تاريخ الاعارة

RetDate: نمط البيانات Text ويمثل تاريخ استحقاق الاعادة

ReturnDate: نمط البيانات Text ويمثل تاريخ الاعادة

Demurage: نمط البيانات Text ويمثل مقدار الضريبة

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

جدول Demurrage لا داعي له سوف نحزن الضريبة في نفس جدول الاعارة.

جدول Member:

MemID نمط البيانات AutoNumber ويكون Primary Key

Name نمط البيانات Text ويمثل الاسم

Special نمط البيانات Text ..

Phone نمط البيانات Text

MemTypeID نمط البيانات Number ويكون Foreign Key لجدول MemberType

جدول MemberType

TypeID نمط البيانات AutoNumber ويكون Primary Key

MemberType ويمثل النوع (Teacher و Student

والعلاقات موضحة بالصورة التالية :

post-40855-12759923232127_thumb.jpg

om meme كتب:

سلام عليكم .. لقد رأيت ردك في العمل ولكن لم استطع الدخول لمشكله أمنيه في النظام .

على العموم انتظرت بعد ساعه وساعتين لم ارى شيئا ..!!!

عسى المانع خير يارب ..

وانا لا زلت انتظر ردك اخي الكريم . :)

وعليكم السلام ..

لا كان لدي عمل اشغلني قليلا ..

سأبدأ ان شاء الله الان بالبرنامج..

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#63

النافذة ا لرئيسية:

هكذا يبدو البرنامج عند تشغيله:

post-40855-12759927626761_thumb.jpg

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

بعد الدخول كـ Manager تظهر لدينا نافذة البرنامج بالشكل التالي لان المدير يملك كافة السماحيات..

post-40855-12759930631621_thumb.jpg

نلاحظ ان البرنامج يتألف من الأقسام التالية:

Books - Category - Members - Search - Borrow - Demurrage

حساب الضريبة - الإعارة - البحث - الأعضاء - الأصناف - الكتب

سنبدأ بكل قسم على حدا .,, :happy:

تم تعديل هذه المشاركة بواسطة was_hal في 8 يونيو 2010 في 13:34

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#64

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

انا هلون بنجلط .. غيرت البرنامج تقريبا كله .. ابكي لو اصرخ لو شو ..عنجد شو اقول .. كل كلمات الشكر اختفت من قاموسي ..!!

( وصمتي أكبر دليل ) !!!!!!!!!!

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

( الحمد لله رب العالمين # الرحمن الرحيم # مالك يوم الدين #إياك نعبد وإياك نستعين # إهدنا الصراط المستقيم # صراط اللذين أنعمت عليهم غير المغضوب عليهم ولا الضالين )

#65

نافذة الأصناف:

هذه النافذة لإضافة وحذف وتعديل الأصناف الجديدة الخاصة بالكتب:

post-40855-12759935266116_thumb.jpg

1- نقوم بسحب جدول الأصناف إلى هذه النافذة

2- نقوم بتنسيق الأدوات حتى إذا تغير حجم النافذة تبقى الادوات منسقة وذلك باستخدام الخاصية Dock من قائمة الخصائص الخاصة بكل أداة

وتاخذ Dock الخاصة بالداتا غريد القيمة Full لتقوم بملء النافذة.

3- نقوم بتغيير تسمية الأعمدة في الداتا غريد عن طريق Edit Columns

4- نضيف كود زر الحفظ التالي:

 this.Validate();
 	this.catBindingSource.EndEdit();
 	this.tableAdapterManager.UpdateAll(this.umAliDataSet);

5- نضيف كود زر إضافة سطر جديد التالي:

 try
 	{
 	this.catBindingSource.EndEdit();
 	this.catBindingSource.AddNew();
 	}
 	catch
 	{
 	}

6- نضيف كود زر الحذف التالي:

 this.catBindingSource.EndEdit();
 	this.catBindingSource.RemoveCurrent();

هذه الاكواد أظن أنها واضحة ..

7- نذهب إلى النافذة الرئيسية وفي حدث Click على قائمة الاصناف نضيف الكود التالي:

 FormCategory frmCat = new FormCategory();
 	frmCat.MdiParent = this;
 	frmCat.Show();

هذا الكود يقوم بفتح النافذة بعد تحديد النافذة الأب لها لتكون النافذة الرئيسية عن طريق MdiParent = this

ملاحظة: النافذة الرئيسية ستحتوي جميع النوافذ حسب طريقة (MDI ( Multi Dynamic Interface وذلك عن طريق جعل الخاصية IsMDIContainer = true

وبذلك نكون انتهينا من هذه النافذة ..

اعذروني لرداء الشرح ..:happy:

تم تعديل هذه المشاركة بواسطة was_hal في 8 يونيو 2010 في 14:06

1

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#66

نافذة الكتب:

هذه النافذة لإضافة وحذف وتعديل الكتب:

post-40855-12759946646003_thumb.jpg

1- نقوم بسحب جدول الكتب إلى هذه النافذة

2- نقوم بتنسيق الأدوات حتى إذا تغير حجم النافذة تبقى الادوات منسقة عن طريق الخاصية Dock كما في السابق

3- نقوم بتغيير تسمية الأعمدة في الداتا غريد عن طريق Edit Columns

4- نقوم بتغيير نوع العمود CatID إلى النوع DataGridViewComboBoxColumn

ونحدد الخاصية DataSource على الجدول Cat وكلا من الخواص DisplayMember = Cat و ValueMamber = CatID كما تم شرحا في مشاركة سابقة.

5- نضيف أكواد الحفظ والحذف والإضافة كما في النافذة السابقة مع ملاحظة تغيير BindingSource في الكتب.

6- نضيف كود فتح النافذة في حدث Click على قائمة الكتب في النافذة الرئيسية:

 FormBook frmBook = new FormBook();
 	frmBook.MdiParent = this;
 	frmBook.Show();

وبذلك نكون انتهينا من هذه النافذة ..

تم تعديل هذه المشاركة بواسطة was_hal في 8 يونيو 2010 في 14:05

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#67

نافذة الأعضاء:

هذه النافذة لإضافة وحذف وتعديل بيانات الأعضاء ( المدرسين والطلاب )..

post-40855-12759953971113_thumb.jpg

1- نقوم بسحب جدول الأعضاء إلى هذه النافذة

2- نقوم بتنسيق الأدوات حتى إذا تغير حجم النافذة تبقى الادوات منسقة عن طريق الخاصية Dock كما في السابق

3- نقوم بتغيير تسمية الأعمدة في الداتا غريد عن طريق Edit Columns

4- نقوم بتغيير نوع العمود MemTypeID إلى النوع DataGridViewComboBoxColumn

ونحدد الخاصية DataSource على الجدول MemberType وكلا من الخواص DisplayMember = MemberTypeو ValueMamber = TypeID

5- نضيف أكواد الحفظ والحذف والإضافة كما في النافذة السابقة مع ملاحظة تغيير BindingSource في الأعضاء.

6- نضيف كود فتح النافذة في حدث Click على قائمة الأعضاء في النافذة الرئيسية:

 FormMembers frmMem = new FormMembers();
 	frmMem.MdiParent = this;
 	frmMem.Show();

وبهذا تنتهي النافذة ...

تم تعديل هذه المشاركة بواسطة was_hal في 8 يونيو 2010 في 14:13

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#68

نافذة البحث:

هذه النافذة لإجراء عمليات بحث حسب أحد أو جميع الحقول المتعلقة بالكتب:

post-40855-127599580859_thumb.jpg

تم شرح هذه النافذة بالتفصيل في مشاركة سابقة..

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#69

نافذة الإعارة:

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

post-40855-12759963004741_thumb.jpg

1- نقوم بسحب جدول الإعارة إلى هذه النافذة

2- نقوم بتنسيق الأدوات حتى إذا تغير حجم النافذة تبقى الادوات منسقة عن طريق الخاصية Dock كما في السابق

3- نقوم بتغيير تسمية الأعمدة في الداتا غريد عن طريق Edit Columns

4- نقوم بحذف الأعمدة ReturnDate و Demurage من التصميم لان هذه الاعمدة خاصة بالضريبة والإعادة ولا يجب ان تظهر هنا..

5- نقوم بتغيير نوع العمود BorrowerID إلى النوع DataGridViewComboBoxColumn

ونحدد الخاصية DataSource على الجدول Member وكلا من الخواص DisplayMember = Name و ValueMamber = MemID

6- نقوم بتغيير نوع العمود BookID إلى النوع DataGridViewComboBoxColumn

ونحدد الخاصية DataSource على الجدول Book وكلا من الخواص DisplayMember = BookName و ValueMamber = BookID

7- نقوم بتغيير نوع العمود CatIDإلى النوع DataGridViewComboBoxColumn

ونحدد الخاصية DataSource على الجدول Book وكلا من الخواص DisplayMember = Cat و ValueMamber = CatID

8- نضيف الحذف والإضافة كما في النافذة السابقة مع ملاحظة تغيير BindingSource في الأعضاء.

9- أما كود الحفظ فهو نفسه مع إضافة سطر جديد:

this.bookTableAdapter.UpdateStatusBorrow();

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

وطريقة اضافة هذا الاستعلام هي نذهب إلى DataSet وبالنقر بالزر الأيم على جدول Book ثم نختار Add Qurey لتظهر لنا نافذة اضافة استعلام جديد نحدد نوع الاستعلام Update ثم نكتب الاستعلام الموضح في الصورة التالية:

post-40855-12759970462424_thumb.jpg

حيث يجلب هذا الاستعلام جميع الإعارات التي لم يسجل لها تاريخ إعادة بعد (أي لم إعارة جديدة والكتاب لم يعاد بعد) حيث نقوم بتعديل حالة الكتب إلى False

10- نضيف كود فتح النافذة في حدث Click على قائمة الأعضاء في النافذة الرئيسية كما سبق ..

وبهذا تنتهي النافذة ..

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#70

نافذة حساب الضريبة:

هذه النافذة تساعدنا على معرفة إذا ما كان هنالك ضريبة للمستعير في حالة التأخير على هذا الكتاب عند اعادته للمكتبة أو لا:

post-40855-12759975794841_thumb.jpg

1- نقوم بإضافة جدول استعلام في DataSet كما يلي:

- نذهب إلى DataSet ومن Toolbox نختار TableAdapter ونكتب فيه الاستعلام الموضح بالصورة التالية:

post-40855-12759979964141_thumb.jpg

ونسمي هذا الجدول مثلا DataTableDemurage.. حيث يقوم هذا الجدول الذي هو بمثابة View بجلب بيانات الإعارة والمستعير والكتاب حسب رقم الكتاب ..

حيث لك كتاب رقم وحيد يميزه Primary Key ويكون هذا الرقم مكتوب الكتاب أو مطبوع بصيغة BarCode وعند اعادة الكتاب يمكن مسح قيمة Barcode الكتاب أو كتابته يدويا

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

2- نقوم بتصميم النافذة بهذا الشكل وذلك عن طريق اختيار هذا الجدول من نافذة DataSource في المشروع بعد اختيار نوع الاضافة Details حيث يضيف البيانات على شكل حقول وليس داتا غريد .. ثم ببعض التنسيقات

3- نجعل كافة الحقول غير قابلة للكتابة وذلك عن طريق جعل الخاصية ReadOnly = true عدا حقل Return Date الذي يتوجب علينا ادخاله لحساب الضريبة

4- نقوم بإختيار نوح حقل Return Date من نوع MaskedTextBox ونحدد الخاصية Mask = 00/00/0000 حتى يتوافق الإدخال من تنسيق التاريخ.

5- نضيف مربع نص TextBox لإظهار عدد ايام التأخير بعد ادخال التاريخ.

6- نضيف الكود التالي في حدث Click لزر Find البحث حسب رقم الكتاب :

 try
 	{
 	LateDaystextBox.Text = string.Empty;
 	if (BookIDtextBox.Text.Trim() == string.Empty)
 	{
 	MessageBox.Show("Please Enter Book ID", "Calculate Demurrage");
 	return;
 	}
 	this.dataTableDemurageTableAdapter.FillByBookID(this.umAliDataSet.DataTableDemurage, new System.Nullable<int>(((int)(System.Convert.ChangeType(BookIDtextBox.Text.Trim(), typeof(int))))));
 	if (returnDateTextBox.MaskFull && demurageTextBox.Text.Trim() != string.Empty)
 	{
 	returnDateTextBox.ReadOnly = true;
 	btnCalculate.Enabled = false;
 	LateDaystextBox.Text = CalaculeDays().ToString();
 	}
 	}
 	catch (System.Exception ex)
 	{
 	System.Windows.Forms.MessageBox.Show(ex.Message);
 	}

شرح الكود:

- نفرغ قيمة TextBox عدد ايام التأخير أو Late Days..

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

- نقوم باستدعاء الاستعلام الخاص ببيانات الاعارة الذي قمنا بانشائه بتمرير رقم الكتاب.

- اختبار اذا كان تاريخ الاعادة فارغا و قيمة الضريبة فارغة لمنع المستخدم من تعديل تاريخ الاعادة بالخاصية Readonly = true وإلغاء تفعيل زر حساب الضريبة.. وحساب عدد ايام التاخير باستدعاء التابع CalaculeDays الذي يعيد قيمة ايام التاخير ,,

التابع CalaculeDays :

 private int CalaculeDays()
 	{
 	try
 	{
 	DateTime ReturnDate = Convert.ToDateTime(returnDateTextBox.Text);
 	DateTime DueDate = Convert.ToDateTime(DueDateTextBox.Text.Trim());
 	return ReturnDate.Subtract(DueDate).Days;

 	}
 	catch (System.Exception ex)
 	{
 	System.Windows.Forms.MessageBox.Show(ex.Message);
 	return 0;
 	}

 	}

شرح التابع:

- تحويل قيمة تاريخ الإعادة من نص إلى تاريخ عن طريق التابع Convert.ToDateTime

- تحويل قيمة تاريخ الاستحقاق من نص إلى تاريخ..

- ارجاع الفرق بين هذين التاريخين بالايام عن طريق التابع Substract

7- إضافة كود لحدث Click لزر Calculate حساب الضريبة :

 try
 	{
 	if (returnDateTextBox.MaskFull)
 	{

 	int LateDays = CalaculeDays();
 	int Demurrage = 0;
 	if (LateDays >= 0)
 	{
 	Demurrage = LateDays * 2;
 	}

 	demurageTextBox.Text = Demurrage.ToString();
 	this.dataTableDemurageTableAdapter.UpdateDemurage(returnDateTextBox.Text, Demurrage.ToString(), Convert.ToInt32(BorIDtextBox.Text.Trim()));
 	this.bookTableAdapter.UpdateStatusNotBorrow();
 	btnCalculate.Enabled = false;
 	returnDateTextBox.ReadOnly = true;
 	}
 	else
 	{
 	MessageBox.Show("Please Enter Return Date", "Calculate Demurrage");
 	}

 	}
 	catch (System.Exception ex)
 	{
 	System.Windows.Forms.MessageBox.Show(ex.Message);
 	}

شرح الكود:

- اختبار ادخال تاريخ الإعادة

- حساب عدد أيام التأخير باستدعاء التابع CalaculeDays

- اختبار اذا كانت ايام التاخير اكبر او تساوي الصفر لحساب الضريبة.

- حساب الضريبة عن طريق ضرب ايام التأخير بقيمة الضريبة وهي $2 :

- اظهار قيمة الضريبة في مربع نص الضريبة

-تحديث جدول الإعارة بإضافة قيمة تاريخ الاعادة وقيمة الضريبة.

وذلك باضافة استعلام تحديث في DataSet في جدول DataTableDemurage الجديد بنفس طريقة اضافة في جدول الكتب والاستعلام هو التالي:

UPDATE 	borrow
SET 	ReturnDate = ?, Demurage = ?
WHERE 	(BorID = ?)

- إعادة حالة الكتاب انه موجود ضمن المكتبة باستعلام اخر في جدول الكتب:

UPDATE 	Book
SET 	Stat = true
WHERE 	(BookID IN
 	(SELECT 	BookID
 	FROM 	borrow
 	WHERE 	(ReturnDate <> '') OR
 	(ReturnDate IS NOT NULL)))

ومن ثم اضافة حدث Click للنقر على قائمة حساب الضريبة في النافذة الرئيسية ...

 FormDemurrage frmDem = new FormDemurrage();
 	frmDem.MdiParent = this;
 	frmDem.Show();

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

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#71

نافذة تسجيل الدخول:

هذه النافذة تمكن الدخول للمستخدمين كلا حسب سماحياته ونوعه Manager, Techer , Student

post-40855-12760000748879_thumb.jpg

1- في قاعدة البيانات نضيف القيم التالية في جدول TableForm :

post-40855-12760001839162_thumb.jpg

حيث ان الحقل FormEnglishName يمثل اسم النافذة البرمجي..

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

3- نقوم بتصميم النافذة حسب الصورة:

4- نحدد الخاصية UseSystemPassowrd = true لحقل Passowrd

5- نضيف الكود التالي في حدث Click لزر تسجيل الدخول:

if (UserTypecomboBox.SelectedIndex < 0)
 	{
 	errorProvider1.SetError(UserTypecomboBox, "Please Choice User Type");
 	UserTypecomboBox.Focus();
 	return;

 	}
 	else
 	errorProvider1.SetError(UserTypecomboBox, string.Empty);
 	if (UserNametextBox.Text.Trim() == string.Empty)
 	{
 	errorProvider1.SetError(UserNametextBox, "Please Enter User Name");
 	UserNametextBox.Focus();
 	return;
 	}
 	else
 	errorProvider1.SetError(UserNametextBox, string.Empty);

 	if (PasswordtextBox.Text.Trim() == string.Empty)
 	{
 	errorProvider1.SetError(PasswordtextBox, "Please Enter Password");
 	PasswordtextBox.Focus();
 	return;
 	}
 	else
 	errorProvider1.SetError(PasswordtextBox, string.Empty);

 	int? Res = (int?)this.tableUserTableAdapter.CheckUser(UserTypecomboBox.SelectedValue.ToString(),UserNametextBox.Text.Trim(),PasswordtextBox.Text.Trim());

 	if (Res.HasValue && Res.Value > 0)
 	{
 	Program.UserID = (int)this.tableUserTableAdapter.GetUserID(UserTypecomboBox.SelectedValue.ToString(), UserNametextBox.Text.Trim(), PasswordtextBox.Text.Trim());
 	this.DialogResult = DialogResult.OK;
 	this.Close();
 	}
 	else
 	{
 	MessageBox.Show("User Name or Password is not correct", "Login");

 	}

شرح الكود:

- اختبار ادخال اسم المستخدم وكلمة المرور

- نتيجة استعلام CheckUser الذي يعيد 1 إذا كان المستخدم موجود ولا تعيد شيء اذا كان غير موجود..

- الاستعلام يضاف لجدول المستخدمين وهو مايلي:

SELECT 	COUNT(*) AS Expr1
FROM 	TableUser
WHERE 	(UserType = ?) AND (UserName = ?) AND ([Password] = ?)

-اختبار اذا كان المستخدم موجود.

- استعلام GetUserID يعيد UserID للمستخدم

- الاستعلام GetUserID كمايلي:

SELECT 	UserID
FROM 	TableUser
WHERE 	(UserType = ?) AND (UserName = ?) AND ([Password] = ?)

- تخزين UserID في Static Variable معرف في القسمProgram لنتمكن من استخدامه في كل البرنامج.

public static int UserID = 0;

- إغلاق نافذة تسجيل الدخول أو اظهار رسالة عدم تحقق اسم المستخدم.

6- في حدث Load للنافذة الرئيسية نكتب الكود الذي يقوم بفتح نافذة تسجيل الدخول.

FormLogin frmlogin = new FormLogin();
 	if (frmlogin.ShowDialog() == DialogResult.Abort)
 	this.Close();
 	else
 	{
 	UserNameToolstrip.Text = this.tableUserTableAdapter.GetUserNameByID(Program.UserID);
 	}

 	this.tableFormPermissionsTableAdapter.FillByUserID(umAliDataSet.TableFormPermissions, Program.UserID);
 	for (int i = 0; i < this.umAliDataSet.TableFormPermissions.Rows.Count; i++)
 	{
 	string FormEngName = this.umAliDataSet.TableFormPermissions.Rows["FormEnglishName"].ToString();
 	MainmenuStrip.Items[FormEngName].Visible = true;
 	}

الشرح:

إغلاق التطبيق إذا كانت نتيجة إغلاق نافذة تسجيل الدخول Abort والاستمرار إذا كانت Ok

- جلب اسم المستخدم حسب رقمه لإظهارة في شريط الحالة اسفل النافذة:

- الاستعلام GetUserNameByID كمايلي في جدول المستخدمين:

SELECT 	UserName
FROM 	TableUser
WHERE 	(UserID = ?)

- جلب كافة اسماء النوافذ الخاصة بهذا المستخدم (اي سماحيات المستخدم)

- قراءة الاسماء البرمجية لهذه النوافذ والتي تمثل اسماء القوائم واظهارها

ملاحظة: قيمة جميع القوائم الافتراضية في المعرفة في التصميم Visible = False

وبهذا يكون البرنامج قد انتهى بعونه تعالى ... :happy:

تم تعديل هذه المشاركة بواسطة was_hal في 8 يونيو 2010 في 16:03

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#72

اخوي جهودك الجبارة في الشرح والعرض لهو حقا إنجاز وإبداع وتستحق ان تكون مدرسا ً !!!

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

بارك الله فيك وأعطاك من رزقه ورحمته وثبتك على الدين ورزقك جنة ً مع المؤمنين ونهراً فيها كنهر علمك الدفين .

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

لقد اتعبتك كثيرا ً كثيراً ..اتمنى بقدر التعب اللذي بذلته ان تحصل على ما تتمنى يارب ! ويارب يستفيدوا باقي الأعضاء كما افدتني .. يارب

لك كل الشكر والتقدير والإحترام .

وسامحني لاني لا املك الا الدعاء لك بالصحه والعافيه والرزق والهداية والراحة والامان .

اللهم اجعل عمله هذا في ميزان حسناته يارب العالمين .

ولن انسى سوف اذكرك في مصادر المساعدة للبرنامج .. فقد كنت خير مساعد ومعين بعد رب العالمين .

موفق يارب

تم تعديل هذه المشاركة بواسطة om meme في 8 يونيو 2010 في 16:27

#73
اقتباس
اخوي جهودك الجبارة في الشرح والعرض لهو حقا إنجاز وإبداع وتستحق ان تكون مدرسا ً !!!

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

بارك الله فيك وأعطاك من رزقه ورحمته وثبتك على الدين ورزقك جنة ً مع المؤمنين ونهراً فيها كنهر علمك الدفين .

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

وسامحني لاني لا املك الا الدعاء لك بالصحه والعافيه والرزق والهداية والراحة والامان .

اللهم اجعل عمله هذا في ميزان حسناته يارب العالمين .

ولن انسى سوف اذكرك في مصادر المساعدة للبرنامج .. فقد كنت خير مساعد ومعين بعد رب العالمين .

موفق يارب

بصراحة هذا الكلام لا أظن اني استحقه ... بارك الله فيك وأشكرك على هذا الدعاء الرائع .. آمين يارب العالمين ..

كلنا بدأنا بخطوة ... :happy:

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

وأرجو أن تعم الفائدة للجميع و يدعو لي بالخير ... :cool:

بالتوفيق ..

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#74

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

أشكرك جدا ً جداً وبارك الله فيك في والديك اللذان احسنا تربيتك .

هل تستطيع إرساله لي بالبريد الإلكتروني ..؟ لضمان حقي وحقك بالخصوصية !! ( إلا إذا كان ذلك خرقا ً لقوانين المنتدى ..!!! )

وأما بشأت تطوير المشروع نعم سأراه بتمعن وسأحاول ان اطوره ويمكن رد ارجع اسألك سؤال .. :) ولو ان شرحك كان كافي ووافي ..ولكن تيقن إني سأدعو لك في كل دعواتي ..فأنت جدير بذلك .. لأنك تعمل كل ذلك من دون ان تلقى مقابلا ً !

بارك الله فيك .

تم تعديل هذه المشاركة بواسطة om meme في 8 يونيو 2010 في 17:06

#75
om meme كتب:

هل تستطيع إرساله لي بالبريد الإلكتروني ..؟ لضمان حقي وحقك بالخصوصية !! ( إلا إذا كان ذلك خرقا ً لقوانين المنتدى ..!!! )

شكرا على هذا الإطراء .. :happy:

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

هذا الأمر يعود إليك .. إما أن ارفع المشروع لتعم الفائدة أو ...

تم تعديل هذه المشاركة بواسطة was_hal في 9 يونيو 2010 في 09:40

1

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…