منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
عمل برنامج اختبار سرعة الطباعة من خلال .net - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184)
+--- الموضوع : عمل برنامج اختبار سرعة الطباعة من خلال .net (/showthread.php?tid=5056)



عمل برنامج اختبار سرعة الطباعة من خلال .net - RaggiTech - 04-10-12

كاتب الموضوع : أحمد جمال

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


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

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

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

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

لنبدا سوية ، ونقوم بتصميم فورم Form مبدئي يحتوي على اختيار للغة الانجليزية والعربية عبر زري أمر ، وفي النافذة الأخرى نقوم بوضع Label لنضع فيه النص المطلوب ، Text Box ليستطيع المستخدم كتابة النص ، زر امر للعودة وزر أمر لإنهاء الاختبار ، مؤقت Timer مع Lable لعرض الوقت ثانية بثانية للمستخدم . وأخيراً Timer آخر لاعطاء المستخدم ثلاث ثوان منذ فتح الشاشة وحتى بدأ الاختبار .

سنبدأ بأوامر النافذة Form الأولى ، لهذا سوف يكون في زر اختيار اللغة الإنجليزية هذا الأمر :

كود :
Dim F As New Form2()
Dim Test As String = "Ajax (also known as AJAX), shorthand for 'Asynchronous JavaScript and XML', is a development technique for creating interactive web applications. The intent is to make web pages feel more responsive by exchanging small amounts of data with the server behind the scenes, so that the entire web page does not have to be reloaded each time the user requests a change. This is intended to increase the web page's interactivity, speed, functionality, and usability."
F.Label1.Text = Test
F.ShowDialog()
وفي زر اللغة العربية هذا الأمر :

كود :
Dim F As New Form2()
Dim Test As String = "مشروع جنوم مشروع عالمي يهدف إلى إنشاء منصة حاسوبية سهلة الاستعمال مبنية حصرا على البرمجيات الحرة. يدخل في هذا المسعى تكوين أدوات تساعد المطورين على كتابة تطبيقات برمجية قائمة بذاتها، وانتقاء وترشيح من البرامج حسناها لتكون ضمن الإصدار الرسمي، والتركيز على ما يسمى 'البيئة المكتبية'، أي جميع البرامج المتدخلة في إطلاق البرامج وتدبير المستندات وتنظيم النوافذ والأشغال الجارية. يستضيف مشروع جنوم باقة من البرامج المختلفة، والتي تُنتخب منها مجموعة محدودة تصدر تحت الاسم الشامل جنوم. يعمل جنوم على نظام تشغيل مثل لينكس أو سولاريس لشركة صن ميكروسيستيمز مكونين نظاما حاسوبيا مكتمل الأوصاف"
F.Label1.Text = Test
F.Label1.RightToLeft = Windows.Forms.RightToLeft.Yes
F.TextBox1.RightToLeft = Windows.Forms.RightToLeft.Yes
F.ShowDialog()
ونلاحظ اضافة سطرين اضافيين لتعديل خاصية RightToLeft لتناسب اللغة العربية ...

اما في الفورم الثاني فستكون لدينا هذه الأوامر :

1 - تعريف متغيرات للوقت كمتغيرات عامة :
كود :
Dim Sec, Min, Hou As Integer
[SIZE=4]2 - بالنسبة لل Timer سيكون المؤقت الأول enabled=true وهو الخاص باعطاء المستخدم ثلاث ثوان قبل البداية ، وبمجرد الانتهاء من هذه الثلاث ثوان سيتم تفعيل المؤقت الآخر والذي ستكون الحالة الافتراضية له enabled=false وكذلك السماح للمستخدم بضغط زر انهاء وبالكتابة في مربع النص :[/SIZE]

كود :
Label2.Text = Convert.ToString(Convert.ToInt32(Label2.Text) - 1)
If (Convert.ToInt32(Label2.Text) = 0) Then
TextBox1.Enabled = True
Timer1.Enabled = False
Timer2.Enabled = True
Button1.Enabled = True
TextBox1.Focus()
End If

[SIZE=4]3 - في المؤقت الثاني سوف نقوم بعمل عداد للوقت ( ثواني:دقائق:ساعات ) :[/SIZE]

كود :
Sec += 1
If (Sec = 60) Then
Sec = 0
Min += 1
If (Min = 60) Then
Min = 0
Hou += 1
End If
End If
Label2.Text = Convert.ToString(Hou) + ":" + Convert.ToString(Min) + ":" + Convert.ToString(Sec)

4 - زر العودة للشاشة الرئيسية :
كود :
Me.Close()

5 - زر انهاء الاختبار وحساب النتائج :

- في هذا الزر سوف نقوم بعدة مهام ، فأولاً سنقوم بايقاف ال Timer وتعريف متغير لحلقة تكرار for loop والخاصة بالمقارنة ، تعريف متغير لتخزين عدد المحاولات الصحيحة من نوع Integer وآخر لتخزين الرسالة التي ستظهر للمستخدم من نوع String :

كود :
Timer2.Enabled = False
Dim result As String
Dim correctcount As Integer = 0
Dim I As Integer = 0

- ثانياً سنقوم بعمل مصفوفة من الكلمات من النص الأساسي يفصل بينها " المسافة " وكذلك في النص المكتوب :

كود :
Dim x() As String = Label1.Text.Split(" ")
Dim y() As String = TextBox1.Text.Split(" ")
- ثالثاً سنقوم بعمل for loop للمقارنة بين الحروف ، وفي حالة كون النص الثاني لم يصل لنهايته بعد ، فإنه يتم المقارنة بين الكلمتين المتناظرتين في النص الأول والثاني :

كود :
For I = 0 To x.Length - 1
If I < y.Length Then
If x(I) = y(I) Then correctcount += 1
Else
Exit For
End If
Next
رابعاً سنقوم بتجميع عدد من البيانات بناء على المعطيات السابقة ونخزنها في المتغير result :

كود :
result = "Time: " + Label2.Text + vbNewLine
result += "Word Count: " + y.Length.ToString() + " words Of " + x.Length.ToString() + " words." + vbNewLine
result += "True Word Count: " + correctcount.ToString() + vbNewLine
result += "False Word Count: " + (x.Length - correctcount).ToString() + vbNewLine
result += "Final Result :" + (Convert.ToUInt32((correctcount * 100) / x.Length)).ToString() + "%." + vbNewLine + vbNewLine + "Test is Finsih. Thankyou..."
خامساً وأخيراً عرض الناتج في رسالة واغلاق الشاشة :

كود :
MessageBox.Show(result, "Result")
Me.Close()

وبالتأكيد ما زال هناك المزيد مما يمكن أن يضاف لهذا المثال الصغير ، وعموماً فالملف في المرفقات ...

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