تصميم و برمجة فورم صلاحيات المستخدمين

في الدرس السابق انتهينا من تصميم وبرمجة فورم حساب الايراد اليومي و لم يبقى لدينا سوى فورم صلاحيات المستخدمين وننتهي من تصميم وبرمجة نظام السوبر ماركت بشكل كامل  .

ما هو فورم صلاحيات المستخدمين ؟ 

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

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

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

 وسيكون فورم صلاحيات المستخدمين مملوء بخيارات كثيره بحيث يغطي كافه صلاحيات التحكم بالنظام … .. 

  ماهي الصلاحيات التي من خلالها يتم منع او اعطاء الموظف صلاحيه التحكم بالنظام ؟ 

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

فورم الموردين 

فورم العملاء 

 فورم الاصناف 

 فورم المكان 

فورم المجموعة 

 فورم الشركة  

فورم فاتوره المبيعات 

 فورم مرتجع البيع

 فورم فاتوره المشتريات

 فورم مرتجع الشراء 

  فورم الحضور

  فورم الانصراف  

فورم الموظفين  المسخدمين

فورم صرف وتوريد النقديه

  فورم المصروفات

  فورم حساب الايراد اليومي

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

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


 كيف نبرمج فورم صلاحيات المستخدمين وماذا نحتاج ؟

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

 عندما نبرمج فورم صلاحيات المستخدمين بالاكواد ليس هناك تشعب في الاكواد وليست الاكواد مرتبطه ارتباط متشعب مع فورمات البقيه وانما يمكننا ان نفكك هذه الاكواد ونستخدمها باي نظام اخر سواء النظام خاص بالسوبر ماركت او نطام الصيدليات او المخازن او اي نظام نبرمجه هذا ما يميز برمجه صلاحيات المستخدمين الخاصه باي نظام ……

 🛠 ماذا نحتاج لكي نبرمج الفورم ؟ نحتاج الى جداول نقوم بانشائها في قاعده البيانات لكي نحفظ فيها صلاحيات التي نعطيها الى مستخدمين نظام سوبر ماركت…. ايضا نحتاج الى فورم اثنين الاول خاص بدخول الموظفين عن طريق اسم المستخدم والباسورد من خلال فورم users وفورم ثاني خاص بالصلاحيات التي نضعها للتحكم بالنظام سوبر ماركت

 كيف تتم عمليه الدخول لنظام سوير ماركت ؟ 

 يتم الدخول للنظام سوبر ماركت عن طريق موظفين الذي يعملون على النظام المسجلين فورم users بعتبار هذا فورم هو مسؤول عن بيانات الموظفين ومن ضمن هذه البيانات يوجد حقلين حقل اسم المستخدم وحقل الباسورد بحيث كل موظف لديه اسم مستخدم وباسورد يمكنه الدخول للنظام من خلالهن وبالتالي نحتاج الى فورم اثنين فورم خاص بالدخول للنظام بحيث يصبح فورم االاول عند تنفيذ البرنامج يدخل موظف اسم مستخدم وباسورد ثم يضغط على دخول ثم تظهر له فورم الرئيسي manipage الذي يحتوي على قوائم وفيه فورمات كلها ونحتاج فورم ثاني خاص بالصلاحيات المستخدمين اي فورم الذي من خلاله نضع فيه جميع صلاحيات النظام ……… 

تصميم و برمجة فورم تسجيل الدخول 

 اول فورم نبرمجه هو فورم الدخول للنظام عن طريق الموظفين من خلال اسم المستخدم والباسورد تبع كل موظف …… .

 نضيف فورم جديد ونسميه login ثم نضيف الادوات التالية على الفورم : 

 نضيف TextBox عدد 2 

 نضيف ليبل label عدد 2 

 نضيف Button عدد 2 

نضيف checkBox عدد 1

 هذه  هي الادوات التي نحتاجها في فورم تسجيل الدخول login للنظام سوبر ماركت 

 اسماء الادوات برمجيا تبقئ كما هي دون تغير

 يصبح الفورم بالشكل النهائي كما في الصورة .

تصميم و برمجة فورم تسجيل الدخول


 صورة ثانيه للتوضيح اكثر لشكل فورم login



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

تصميم و برمجة فورم تسجيل الدخول


تصميم و برمجة فورم تسجيل الدخول

 و قبل برمجه الفورم نذهب الى فورم الرئيسي manipage نضيف اثنين ليبل label ونغير اسمائهن ليس برمجيا ونسمي واحد منهم المستخدم الحالي والثاني نعطيه اسم 0 الفائده من هذا الليبل هو عندما يتم تسجيل الدخول لاحد الموظفين تظهر شاشه الرئيسيه manipage للنظام وعليها مكتوب اسم المستخدم الحالي في الليبل 0 وسترون ذلك عند برمجه فورم … . 

 اذن ننقر نقرتين على زر logln موجود على فورم login ونكتب الكود التالي :

.vb
    

      If TextBox1.Text = "" Or TextBox2.Text = "" Then

      MsgBox("املا البيانات المطلوبة")

      Else

      Dim dt As New DataTable

      Dim da As New OleDbDataAdapter

      da = New OleDbDataAdapter("select * from users where username = '" & TextBox1.Text & "'and userpassword = '" & TextBox2.Text & "'", con)

      da.Fill(dt)

      If dt.Rows.Count > 0 Then

      If CheckBox1.Checked
      = True Then

      mainpage.Show()
      mainpage.Label1.Text = dt.Rows(0).Item("userfullname")

      Me.Close()

      Else

      CheckBox1.Checked = False

      MsgBox("يرجى الموافقة على الشروط")

      End If


      Else

      MsgBox("ادخل اسم المساخدم \ كلمة السر بشكل صحيح")

      End If

      End If
    

شرح الكود 

 وضعنا داله شرطيه if تجبر المستخدم ادخال بيانات وعدم ترك حقلين تكس بوكس فارغه بحيث اذا ضغط على زر login دون ملئ تكس بوكس بالبيانات تظهر رساله له املا البيانات الفارغه ثم عرفنا متغيرات للداتا تيبل وداتا ادبتر حتئ ناخذ بارومتر تسجيل دخول موظفين من جدول users بعد تحديد جدول select بشرط where عندما اسم مستخدم username في جدول users يساوي تكس بوكس Textbox1 علئ فورم الخاص باسم المستخدم و and عندما userpassword في جدول users يساوي تكس بوكس Textbox2 على فورم الخاص بالباسورد ثم نملئ بيانات fill ثم وضعنا شرطين الشرط الاول اذا كانت قيمه المدخله في تكس بكس كل من اسم مستخدم والباسورد اكبر من صفر اي قيمتهم ليست فارغه والشرط الثاني بعد كتابه اسم مستخدم وباسورد ولم يضع (يعلم) اشاره علئ مربع CheckBox1 لم تفتح له الشاشه الرئيسية manipage الخاصه بالنظام واذا وضع اشاره على مربع وكانت بيانات صحيحه سوف تفتح له شاشه الرئيسية manipage.Show بعد ان تفتح شاشه الرئيسية manipage يظهر اسم مستخدم في ليبل label1 الماخوذ اسمه من حقل userfullname بعد ذلك يتم اغلاق فورم login بعد ادخال بيانات صحيحه اما مسج msgbox ادخل اسم المستخدم هذا تابع للداله الشرطيه الاولى اذا لم يكتب اسم مستخدم او اذا كتب كلمه سر غير صحيحه تظهر له رساله تنبيه هذه هو شرح الكود بالتفصيل

 لاحظ ترتيب الكود كما في الصورة 

تصميم و برمجة فورم صلاحيات المستخدمين

شاهد الفيديو  توضيح كيف تمت عمليه تسجيل الدخول باحد اسماء الموظفين من جدول users 

 شاهد الفيديو التالي توضيح كيف تم اظهار المستخدم الحالي في ليبل label ـ 0 


ثم  نذهب الى الفورم الرئيسي manipage وعند قائمه الموظفين نضيف فرع ونسميه تغير المستخدم او اي اسم تريده عزيزي المبرمج وبالتالي اذا نريد نغير اسم المستخدم لا نخرج من نظام وانما من قائمه الموظفين نختار تغير المستخدم وبالتالي ننقر نقرتين على تغير المستخدم ونكتب الكود التالي :

.vb
    

      login.MdiParent = Me

      login.WindowState = FormWindowState.Maximized

      login.Show()
    

لاحظ الصورة اضافة فرع اسميناه تغير مستخدم في قائمه الموظفين في فورم الرئيسي manipage 

تصميم و برمجة فورم صلاحيات المستخدمين

 شاهد الفيديو  كيف تم تغير المستخدم من من قائمه الموظفين في فورم الرئيسي manipage 




انتهينا من تصميم و برمجة الاول فورم login الخاص بتسجيل الدخول لموظفين او المستخدمين الى نظام سوبر ماركت …. 

تصميم و برمجة واجهة صلاحيات المستخدمين 

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

 نضيف فورم جديد ونسميه users_roles ونضيف الادوات التالية على الفورم : 

 نضيف Button عدد 2 ونغير تسميتهم ليس برمجيا واحد نسميه حفظ صلاحيات والاخر عرض الصلاحيات نضيف كومبو بوكس ComboBox واحد وامامه ليبل label اسمه اختر المستخدم .

 نضيف CheckBox بعدد الفورمات التي قمنا ببرمجتها ثم نضيف ايضا CheckBox1 لكل فورم فيه ازرار الاضافة والحفظ والتعديل والبحث والحذف بحيث كل فورم وتحته الازرار تبعه الخاصه فيه .

وانت اخي المبرمج لك الحريه في اختيار الشاشات التي تريد ان تعطي فيها صلاحيه التحكم لكن انا قمت بوضع صلاحيات تحكم على جميع فورمات ولكل فورم فيه الازرار وبالتالي يصبح شكل فورم بالشكل النهائي كما في الصوره  ️.

تصميم و برمجة واجهة صلاحيات المستخدمين

ملاحظة 

 اخي المبرمج سنبرمج فورم صلاحيات المستخدمين وساشرح تطبيق صلاحيه تحكم في فورم الموظفين users سواء تحكم جزئي او كلي ومن خلال هذه الطريقه تستطيع برمجه باقي الشاشات الباقيه نفس كلام هذه الطريقه بالضبط لا يوجد اي اختلاف في الاكواد … .


 برمجه فورم users_roles 

 السوال كيف نقوم بحفظ صلاحيات المستخدمين ؟ 

 ج ➖  لو رجعنا لشكل تصميم فورم سنرى الادوات مثلا اداه CheckBox كثيره لان كل فورم فيه 5 ازرار (تحكم جزئي) وبنفس وقت تحكم كلي من خلال فورم باكملة وبالتالي عند اختيار مستخدم معين من خلال تكس بوكس الخاص (اختر المستخدم) سوف نعطيه صلاحيات تحكم سواء كامل من خلال وضع شاره على جميع اداة CheckBox او تحكم جزئي من خلال وضع اشاره ع ازرار تبع فورم نفسه او تحكم بفورم دون فورم اخر وهكذا بعد اعطاء صلاحيات نحفظ الصلاحيات في قاعده بيانات… .. نحتاج الى انشاء جدول جديد لكي نحفظ فيه الصلاحيات وانت مخير اخي المبرمج اما ان تقوم بانشاء جدول جديد وتحفظ فيه جميع صلاحيات الشاشات والازرار تبع كل شاشه او تقوم بانشاء جدول لكل فورم مثلا فورم users فيه ازار الاضافة والحفظ والتعديل والبحث والحذف وبالتالي تقوم بانشاء جدول لهذا فورم بحيث كل اداه CheckBox تاخذ حقل في جدول وهكذا في بقيه شاشات وانا انصحك اخي المبرمج تقوم بانشاء جدول كل فورم …

 انا سوف ابرمج صلاحيات فورم users وانتم اخواني اكملوا بقيه شاشات بنفس طريقه الي راح استخدمهه في فورم users بالضبط 

  نبدا علئ بركة الله نقوم بانشاء جدول في قاعده بيانات للصلاحيات خاص بفورم users ونسميه user_roles ثم نقوم باضافة الحقول في جدول كالتالي : roleld➖➖ رقم roleuserfullname➖➖نص roleusers➖➖ نعم/لا rolenewusers➖➖نعم/لا rolesubnewusers➖➖➖نعم/لا rolesubsaveusers➖➖ نعم/لا rolesubeditusers➖➖ نعم/لا rolesubdeleteusers➖➖نعم/لا rolesubsearcusers➖➖نعم/لا rolehodoor➖➖➖نعم/لا roleenseraf➖➖➖ نعم/لا roleuserroles➖➖➖ نعم/لا هذه الحقول الخاصه بفورم users اما حقل roleld خاص للترقيم التلقائي في داتا وحقل roleuserfullname خاص بختيار اسم مستخدم من كومبو بوكس وبقيه الحقول خاصه لازرار تحكم في فورم users من اضافه وحفظ وتعديل وبحث وحذف اما الحقول الثلاثه الاخيره خاصه بشاشات الحضور والانصراف وشاشه صلاحيات المستخدمين باعتبار هذه الشاشات الثلاثه ليس فيها ازرار اضافه وتعديل وو.. وانما تكون صلاحيه فيها كلي وليس جزئي لانها شاشه ليست مستاهله نعمل لها تحكم جزئي  .

 لاحظ الصوره ترتيب حقول اعلاه صوره توضيح ترتيب حقول جدول users_roles الخاص بصلاحيات فورم موظفين او مستخدمين نظام users .


تصميم و برمجة واجهة صلاحيات المستخدمين

  

 بعد انتهاء من تصميم جدول خاص بفورم users سنبرمج الفورم لصلاحيات فورم users ، وانتم اكملوا بقيه شاشات بنفس الطريقة بالضبط ليس هناك اختلاف في اكواد فقط تغير في اسماء جداول لكل فورم وبنفس وقت الفورم وازار تحكم موجوده فيها ….. 

 نقوم بعرض اسماء الموظفين في كومبو بوكس مقابل (اختر مستخدم ) من جدول users من خلال انشاء اجراء خاص في فورم users_roles لهذا الشي نسمي الاجراء Fillcmd_roles ونكتب الاكواد داخله كالتالي :

.vb
    

      Public Sub fillcmd_roles(cmd As ComboBox)

      Dim dt As New DataTable

      Dim da As New
      OleDbDataAdapter

      dt.Clear()
      da = New OleDbDataAdapter("select * from users ", con)
      da.Fill(dt)

      If dt.Rows.Count > 0 Then

      cmd.DataSource = dt

      cmd.ValueMember =
      "userld"

      cmd.DisplayMember =
      "userfullname"

      Else

      cmd.DataSource = Nothing

      End If

      End Sub
    

تم شرح الكود سابقا 

 لاحظ ترتيب كود الاجراء اعلاه كما في الصوره 


ثم نحدد كومبو بوكس في فورم ومن الخصائص نختار الاحداث ونختار حدث ComboBox_DropDown ثم ننقر نقرتين عليه نقرتنين ونستدعي الاجراء اعلاه

fillcmd_roles(ComboBox)
    

وهكذا نكون حملنا اسماء المستخدمين او موظفين في كومبو بوكس حتئ نختار اسم مستخدم ونعطيه صلاحيات تحكم بالنظام ثم نحفظ 

 شاهد الفيديو  كيف تم تنفيذ البرنامج(نظام سوبر ماركت) لتحميل اسماء المستخدمين او موظفين في كومبو بوكس 



  سنبرمج صلاحيات شاشه الموظفين users وانتم اكملوا بقيه الشاشات بنفس الاكواد التي سوف ابرمج فيها فورم users .... 

 نقوم بتغير اسماء ادوات CheckBox برمجيا التابعه لفورم users (موظفين) كما يلي : 

 الموظفين ➖➖ ck_users 

 موظف جديد ➖➖ ck_newusers 

 زر الاضافة ➖➖ ck_usernew 

 زر الحفظ ➖➖ ck_usersave 

 زر التعديل ➖➖ ck_userupdate 

 زر الحذف ➖➖ ck_userdelete 

 زر البحث ➖➖ ck_usersearch 

الخطوات التاليه لبرمجه صلاحيات المستخدمين وبنفس الطريقه يمكنكم برمجه جميع الشاشات ✅ الخطوات 1⃣ ننقر نقرتين على فورم الصلاحيات users_roles ونقوم بانشاء متغيرات للداتا تيبل وداتا ادبتر و ld وكومند كما يلي :

.vb
    
      Public users_rolesdt As New DataTable

      Public users_rolesda As New OleDbDataAdapter

      Public users_rolescmd As New OleDbCommand

      Public mynewldusers_roles As Integer
    

لاحظ الصورة  توضيح ترتيب اكواد متغيرات 


 2⃣ ثم نقوم بانشاء اجراء خاص باللود load لتحميل جدول مستخدمين users من قاعدة البيانات كما يلي :

.vb
    
      
      
      Public Sub load_all_users_roles_indirect()

      users_rolesdt.Clear()

      users_rolesda = New OleDbDataAdapter("select * from user_roles", con)

      users_rolesda.Fill
      (users_rolesdt)

      End Sub
    

لاحظ الصورة توضيح ترتيب كود اجراء اللود load


 ثم نستدعي هذا الاجراء load في زر حدث لود load الفورم

    3⃣ انشاء اجراء خاص لتفريغ اداه CheckBox بعد كل عمليه حفظ اذن نسمي الاجراء new_users_roles_lndirect() ويصبح الكود كالتالي :

mainpage.vb
    

      Public Sub new_users_roles_lndirect()

      ck_users.Checked = False

      ck_newusers.Checked = False

      Ch_hodoor.Checked = False

      ch_enseraf.Checked = False

      ck_roles.Checked = False

      ck_usernew.Checked = False

      ck_usersave.Checked = False

      ck_userupdate.Checked = False

      ck_userdelete.Checked = False

      ck_usersearch.Checked = False

      End Sub
    

لاحظ الصورة توضيح ترتيب كود 


 ثم نستدعي هذا  الاجراء في زر عرض الصلاحيات

  4⃣ نقوم بانشاء اجراء خاص لعرض الصلاحيات لزر عرض الصلاحيات كالتالي :

.vb
    
      Public Sub showrowsfromdgv_users_roles_indirect()


      Try

      Dim dt As New DataTable


      Dim da As New
      OleDbDataAdapter


      dt.Clear()

      da = New OleDbDataAdapter("select *from
      user_roles where roleuserfullname = '" & ComboBox1.Text & "'", con)


      da.Fill(dt)


      If dt.Rows.Count > 0 Then

      new_users_roles_lndirect()


      ck_users.Checked = dt.Rows(0).Item("roleusers").ToString



      ck_newusers.Checked = dt.Rows(0).Item
      ("rolenewuser").ToString


      ck_usernew.Checked = dt.Rows(0).Item("rolesubnewuser").ToString


      ck_usersave.Checked = dt.Rows(0).Item("rolesubsaveuser").ToString

      ck_userupdate.Checked = dt.Rows(0).Item("rolesubedituser").ToString


      ck_userdelete.Checked = dt.Rows(0).Item
      ("rolesubdeleteuser").ToString

      ck_usersearch.Checked = dt.Rows(0).Item("rolesubsearchuseruser").ToString


      Ch_hodoor.Checked = dt.Rows(0).Item("rolehodoor").ToString


      ch_enseraf.Checked = dt.Rows(0).Item("roleenseraf").ToString


      ck_roles.Checked = dt.Rows(0).Item("roleuserroles").ToString


      Else


      End If


      Catch ex As Exception

      End Try


      End Sub

    

 شرح الكود 

عرفنا متغيرات للداتا تيبل وداتا ادبتر ثم حددنا select صلاحيات مستخدم من جدول user_roles عندما where اسم مستخدم roleuserfullname يساوي ComboBox من زر عرض صلاحيات ثم جعلنا dt تساوي قيمه اكبر من صفر اثنا ضغط على زر عرض صلاحيات ثم استدعينا اجراء خاص بتفريغ نصوص new_users_roles_lndirec ثم وضعنا كل اداه من اد،وات شاسه موظفين تساوي حقل خاص فيها من جدول اي مثلا ck_users يساوي قيمته من جدول ck_newusers وهكذا 

 لاحظ الصورة  توضيح ترتيب الاجراء 


 ثم نستدعي هذا الاجراء   في زر عرض الصلاحيات

     5⃣  نقوم بانشاء اجراء خاص لحفظ صلاحيات في جدول user_roles بعد اعطاء صلاحيات للمستخدمين كالتالي :

.vb
    
      Public Sub save_users_roles_lntdirect()

      Dim dt As New DataTable
      Dim da As New
      OleDbDataAdapter


      dt.Clear()

      da = New OleDbDataAdapter("select * from user_roles where roleuserfullname = '" & ComboBox1.Text & "'", con)


      da.Fill(dt)
      If dt.Rows.Count > 0 Then


      'edit

      Dim pos As Integer = BindingContext(dt).Position
      dt.Rows(pos).Item("roleld") = ComboBox1.SelectedValue
      dt.Rows(pos).Item("roleuserfullname") = ComboBox1.Text
      dt.Rows(pos).Item("roleusers") = ck_users.Checked
      dt.Rows(pos).Item("rolenewuser") = ck_newusers.Checked
      dt.Rows(pos).Item("rolesubnewuser") = ck_usernew.Checked
      dt.Rows(pos).Item("rolesubsaveuser") = ck_usersave.Checked
      dt.Rows(pos).Item("rolesubedituser") = ck_userupdate.Checked

      dt.Rows(pos).Item
      ("rolesubdeleteuser") = ck_userdelete.Checked

      dt.Rows(pos).Item
      ("rolesubsearchuseruser") = ck_usersearch.Checked

      dt.Rows(pos).Item
      ("rolehodoor") = Ch_hodoor.Checked

      dt.Rows(pos).Item("roleenseraf") = ch_enseraf.Checked
      dt.Rows(pos).Item("roleuserroles") = ck_roles.Checked


      Dim save1 As New OleDbCommandBuilder(da)


      da.Update(dt)
      dt.AcceptChanges()


      Else


      'new


      users_rolesdt.Rows.Add()


      Dim last As Integer =
      users_rolesdt.Rows.Count - 1

      users_rolesdt.Rows(last).Item
      ("roleld") =
      ComboBox1.SelectedValue

      users_rolesdt.Rows(last).Item
      ("roleuserfullname") = ComboBox1.Text

      users_rolesdt.Rows(last).Item("roleusers") = ck_users.Checked

      users_rolesdt.Rows(last).Item("rolenewuser") = ck_newusers

      users_rolesdt.Rows(last).Item("rolesubnewuser") = ck_usernew.Checked

      users_rolesdt.Rows(last).Item("rolesubsaveuser") = ck_usersave.Checked

      users_rolesdt.Rows(last).Item("rolesubedituser") = ck_userupdate.Checked

      users_rolesdt.Rows(last).It

      em("rolesubdeleteuser") = ck_userdelete.Checked

      users_rolesdt.Rows(last).Item("rolesubsearchuseruser") = ck_usersearch.Checked

      users_rolesdt.Rows(last).Item("rolehodoor") = Ch_hodoor.Checked

      users_rolesdt.Rows(last).Item("roleenseraf") = ch_enseraf.Checked

      users_rolesdt.Rows(last).Item("roleuserroles") = ck_roles.Checked


      Dim save As New OleDbCommandBuilder(users_rolesda)

      users_rolesda.Update(users_rolesdt)

      users_rolesdt.AcceptChanges()


      End If


      MsgBox("تم الحفظ", MsgBoxStyle.Information, "تاكيد الحفظ")

      load_all_users_roles_indirect()


      End Sub
    

 شرح الكود 

الكود نفس كود عرض الصلاحيات لكن هنا جعلنا الحفظ في حاله تم حفظ مستخدم سابقا ونريد ان نعدل على صلاحياته نقوم بالتعديل او اذا كان مستخدم اول مره نحفظ صلاحياته فنظيف صلاحياته جديدة new ثم نحفظ الصلاحيات وتظهر للمستخدم رساله تاكيد تم الحفظ وتاكيد الحفظ هذا كل مافي الكود 

 لاحظ الصورتين  توضيح ترتيب كود الحفظ ثم نستدعي هذا الاجراء في زر حفظ الصلاحيات 


 


  6⃣ نفتح فورم الرئيسي manipage ونقر نقرتين عليه ونقوم بانشاء اجراء خاص وظيفته موافقه علئ اعطاء صلاحيات للمستخدمين نسمي الاجراء roles ويصبح الاجراء كالتالي :

.vb
    
      Public Sub roles(roleintb1 As String, frm As Form)


      Dim dt As New DataTable

      Dim da As New OleDbDataAdapter


      dt.Clear()

      da = New OleDbDataAdapter("select * from user_roles where roleuserfullname = '" & Label1.Text & "'", con)


      da.Fill(dt)

      If dt.Rows.Count > 0 Then
      If dt.Rows(0).Item("" & roleintb1 & "").ToString = True Then


      frm.MdiParent = Me

      frm.WindowState = FormWindowState.Maximized

      frm.Show()

      Else

      MsgBox("ليس لديك صلاحية")

      End If

      End If

      End Sub

    

شرح الكود 

 افترضنا بارومترين متغيرين للجدول roleintb1 و للفورم frm باعتبار هذين متغيرين ثم افترضنا داتا تيبل وداتا ادبتر عندما يحدد المستخدم اسمه من كومبو بوكس ويضغط على فورم يوزر اذا كان المستخدم له صلاحيه فتفتح له فورم اما اذا كان ليس له صلاحيه فلا يمكنه دخول للفورم لاحظ الصورة 


توضيح ترتيب كود الاجراء

    7⃣  نذهب الى منيو ستريب الخاص بالفورم الرئيسي manipage وعند قائمه الموظفين نختار اضافه موظف جديد وننقر نقرتين عليه ثم نمسح الكود القديم ونكتب الكود التالي :

.vb
    
      Try

      roles("rolenewuser", users)

      Catch ex As Exception

      End Try
    

شرح الكود 

 استدعينا اجراء roles ثم بين قوسين كتبنا الحقل rolenewuser من جدول الذي يتم حفظ صلاحيه فورم عند ضغط على فورم موظفين اذا كان لديه صلاحيه يفتح له اما اذا كان ليس لديه صلاحيه تظهر رساله له ليس لديك صلاحيه 

 لاحظ الصورة توضيح ترتيب الكود


     8⃣ هكذا تم ربط فورم بالصلاحيات اما الربط داخل فورم من خلال ازرار الاضافة والحفظ والبحث والحذف. والتعديل سوف يكون الربط من خلال الكود التالي :

mainpage.vb
   

      Dim dt As New DataTable

      Dim da As New OleDbDataAdapter

      dt.Clear()

      da = New OleDbDataAdapter("select * from user_roles where roleuserfullname = '" & mainpage.Label1.Text & "'", con)

      da.Fill(dt)

      If dt.Rows.Count > 0 Then

      If
      dt.Rows(0).Item("rolesubnewuser").ToString = True Then


      Else

      MsgBox("ليس لديك صلاحية")

      End If

      End If
    

هذا الكود الذي نربط فيه صلاحيات الازار اذا اردنا ربط صلاحيه باحد الازار لاي فورم مثلا زر الحفظ ننقر نقرتين على زر حفظ في فورم users ثم نضع الكود الذي في زر في هذا الكود تحت سطر

    dt.Rows(0).Item("rolesubnewuser").ToString = True Then
    

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

 لاحظ الصور لترتيب الاكواد ازرار بعد اضافة كود الصلاحيات لهم






 شاهد الفيديو توضيح كيف وضع كود صلاحيات في احد ازار فورم users 


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



# اخواني المبرمجين اتبعوا هذه الخطوات 8 بالتسلسل لبرمجه بقيه شاشات نظام سوبر ماركت مع مراعاة تغير في حقول جداول حتى يصبح نظام لديكم فيه صلاحيات تحكم في جميع شاشات


 يبقئ لدينا شي واحد وهو المستخدم الموجود في كل شاشات لو لاحظت اخي المبرمج الشاشات التي قمنا ببرمجتها في بدايه المشروع ولحد الآن وضعنا تكس بوكس خاص بالمستخدم ولم نبرمج هذا المستخدم في كل الشاشات الفائده من هذا المستخدم هو معرفه اسم الموظف (المستخدم) الذي قام ببيع فاتوره مبيعات او مشتريات او قام بادخال صنف جديد او عميل جديد او قام بارجاع احد المشتريات او المبيعات او قام بتسجيل الحضور او الانصراف وهكذا في جميع الشاشات وبالتالي يمكننا ان نبرمج هذا المستخدم في جميع الشاشات من خلال اجراء تفريغ نصوص في كل شاشه… مثلا شاشه المشتريات ننقر نقرتين عليها وفي كود اجراء تفريغ النصوص newbuypill وعند حقل buyusers نجعل هذا يوزر يساوي الكود التالي :

.vb
    
      Manipage.label.text
    

وهكذا في بقيه الشاشات نجعل كل مستخدم في اجراء كود تفريغ النصوص هذا الكود باعتبار manipage هي الشاشه الرئيسيه ثم label هو الليبل الموجود على فورم الرئيسي بحيث اذا تم تسجيل الدخول باحد المستخدمين سوف يتم اظهار المستخدم في الليبل .

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



 الى هنا ننتهي من تصميم وبرمجة نظام السوبر ماركت بشكل كامل وقمت بشرح كافه الدروس بالتسلسل وموضحه بالشرح والصور والفيديوات سواء للاكواد او نتيجه كل شاشات النظام يمكنكم اخواني المبتدئين و المبرمجين الاستفاده من هذه الدروس وبالاخص من نظام سوبر ماركت يمكنكم الاستفاده من الاكواد و من كل شي في النظام …… 

 يمكنكم مراجعه الدروس  الخاصه بنظام السوبر ماركت … 

 ملاحظات ونصائح برمجية

  1-  ستعن بالله ولا تعجز أول قواعد التعلم بل أول كل عمل أن تستعين بالله تعالى فهو المعين على كل علم وعمل ومن دونه فلا سبيل لك إلى الوصول….

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

 3-  اذا لم تفهم الدرس فارجع عليه مره ومرتين وثلاثه الى ان تفهمه جيد .

 4-  لا تنسخ الاكواد الجاهزه سواء من القناه او من اي مصدر وتلصقها في بناء مشروعك حاول ان تكتب الكود بيدك وتفهمه جيدا لان كتابه الاكواد بيدك عملي افضل… .

 5-  احرص على أن تكون الأكوادُ مقروءةً بالنسبة للآخرين ولماذا قد أرغب في أن أجعل الأكواد مقروءة… أليس المهم أن يعمل، الآلة ستقرأ وتفهم وتنفذ!! لكن ماذا لو أردت أن تعدل أمرًا ما بعد مدة زمنية؟ أو كان لديك شريكٌ في العمل على سبيل المثال. 

 6- استخدم أسماء ذات معنى للتوابع والمتغيرات… جعل الأكواد مقروءة بالنسبة للآخرين أمر بالغ الأهمية، ولا بدَّ لكلّ مبرمج أن يمرن نفسه على الكتابة بتروي، ومن الأمور الهامة والبسيطة التي ستسهل عليك هذه العملية هي الأسماء التي تعبر عن وظيفة كل جزء من البرنامج. وعند العودة للتعديل أو مشاركة الكود مع أحد ما، لن تحتاج للتذكر والشرح من جديد سواءً لنفسك أو للآخرين، فكل اسم يدل على عمل صاحبه، إليك هذه المقارنة على سبيل المثال بين جزأين من كود يقومان بنفس الوظيفة، وقرّر بنفسك أيهما أسهل للتعديل والقراءة: 

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

 8-  نمط حياة! من غير المفيد على الإطلاق اتباع أساليب متنوعة في كتابة الأكواد، يمكنك خوض غمارها كلها لكن في النهاية من الأفضل أن تأخذ أُسلوبًا واحدًا لتتقنه، وتعتمد عليه في كتابة برامجك! تدرّب جيدًا وتعرّف على كلّ الطُرُق المتاحة، بالطبع هذا سيأخذ بعض الوقت لكن عليك بالصبر، فالنتيجة تستحق العناء! كلما جربت طُرُقًا مختلفةً كلما أصبحت أقرب لتتعرّف على ما يناسبك أثناء العمل، وما هي الطُرُق المريحة لك لتعديل الأكواد.