شاركت Benshark في تطوير البرامج في يناير 2003 وكان يعمل لمدة 19 شهرًا. من بينها ، العمل بشكل متقطع هو كل شيء بسبب الأشياء الرديئة التي تم تطويرها بسبب الافتقار إلى الخبرة ، مما يؤدي إلى صعوبات التجول والتوظيف! الآن وصلت Bensha إلى قدرة مبرمج مؤهل.
بشكل عام ، فإن مهمة التطوير للمبرمجين المتخرجين حديثًا هي مجرد وحدة نمطية في مشروع فرعي في المشروع. تحتوي الوحدة النمطية على ما يقرب من 5-6 نماذج مع حجم رمز يبلغ حوالي 2000 سطر. في الواقع ، فإن هذه المهام هذه ليست جيدة مثل تصميم التخرج ، لذلك يجب أن تكون قادرة على الانتهاء ، ولكن وقت التطوير صغير نسبيا ، حوالي 6-12 أيام عمل ، بدلاً من 1-2 أشهر في المدرسة ، و هناك أيضا زملاء الدراسة للمساعدة. لذلك ، فإنه يتقن أدوات تطوير المطورين وبناء الجملة والأطر والمكتبات. بالإضافة إلى ذلك ، يمكنك فهم آلية تشغيل نظام النظام ومتطلبات الخوارزمية ومعرفة ما يجري. مطلوب أن يكون المبرمجون قادرين على العمل بنشاط وليس بشكل سلبي. يمكن أن تأخذ المبادرة للعثور على المعلومات ، واطلب من الزملاء ، واطلب من الزملاء تقديم المساعدة مع مهام غير معروفة.
تشارك هذا القرش بشكل أساسي في مهام تطوير مكتب الاستقبال لنظام قاعدة البيانات ، لذلك يستخدم بشكل أساسي مكونات قاعدة البيانات الشائعة لتوضيح أن مهام مكتب الاستقبال لنظام البيانات هي الأثقل ويتم انتقادها دائمًا من قبل المستخدمين.
بشكل عام ، خطوات تطوير هذه القرش هي:
0 فهم متطلبات المهمة
1. تنفيذ الوظيفة أولاً
2. حل استثناء الوظيفة معالجة
3. تحقيق سهولة الاستخدام
4 حل سهولة الاستخدام
سيتم ترك مشكلة الأداء للمستخدم لحلها إذا كان حجم البيانات كبيرًا في المستقبل! في الوقت الحاضر ، من المهم اللحاق بالمهمة. يتم استخدام المكونات التالية بشكل شائع
tedit tcombobox tllistview ttreeview tchecklistbox tlabel tdbgrid timage tmemo tbutton tdbchart
1. نمط الكود. ليست هناك حاجة لفرض الأشياء والأنماط ، وما إلى ذلك بما أنك تستخدم أدوات بورلاند ، فمن الأفضل اتباع نمط بورلاند.
2 إعدادات سمة المكون
1 tlabel: autosize = flase ؛
2 TEDIT قم بتعيين قيمة إدخال القيمة الافتراضية ذات الطول الأقصى
3 tcombobox إذا تم السماح فقط بالاختيار ، النمط: = csdropdownlist ؛
عند إضافة بيانات إلى عناصرها
Fontcombo-> العناصر-> startupdate () ؛
fontcombo-> العناصر-> إضافة ("xxx") ؛
fontcombo-> العناصر-> endupdate () ؛
بغض النظر عن مقدار البيانات ، فإن TTREEVIEW TDBGIRD لديها وظائف حظر عرض بيانات مماثلة.
4 ttreeview إذا لم تقم بتعديل نص العقدة ، فأنت بحاجة إلى readonly rowselect = true ؛
5 tlistview ViewStyle Vsreportreadonly rowselect = true ؛
6 tpageControl pagecontrol1.activePageIndex: = 0 ؛
7 tdatetimepicker dateformat: = dflong إذا تم نسخ الوقت لتحرير
edit.text: = DateTimeFormate ("Yyyy-MM-DD" ، DateTimePicker1.date)
8 tbutton لتعيين إلغاء تلميح ModalResult
3 يجب وضع مكونات مع نفس تخطيط الواجهة وتوافقها مع المناطق المحيطة ، لأسفل ، إلى اليسار واليمين. حاوية الوالدين ، وأخيراً أعطها للناس.
تفاصيل تخطيط الواجهة
1): استخدم الإطار إلى الأزرار التي تكمل نفس الوظائف أو المشابهة ، ويجب أن تدعم الأزرار الشائعة الاستخدام اختصارات.
2): يتم وضع العناصر التي تكمل نفس الوظيفة أو المهمة في وضع مركزي لتقليل مسافة حركة الماوس.
3): قسّم الكتل المحلية للواجهة وفقًا للوظيفة ، ورفعها مع مربع إطار ، ولديها وصف وظيفة أو عنوان.
4): يجب أن تدعم الواجهة وظيفة زر التصفح التلقائي لوحة المفاتيح ، أي وظيفة التبديل التلقائي للضغط على مفتاح علامة التبويب.
5): يجب أن تكون الضوابط التي يجب أن تدخل أولاً وينبغي أن تكون المعلومات المهمة على الواجهة أمام ترتيب علامة التبويب ، ويجب وضعها أيضًا في وضع أكثر وضوحًا على النافذة.
6): من الأفضل ألا تتجاوز 10 عناصر تحكم على نفس الواجهة.
7): يجب أن تدعم واجهة ترقيم الصفحات التبديل السريع بين الصفحات ، ومفاتيح اختصار الجمع الشائعة الاستخدام CTRL+
8): يجب أن يدعم الزر الافتراضي Enter وتحديد العمليات ، أي بعد الضغط على Enter ، يتم تنفيذ العمليات المقابلة للزر الافتراضي تلقائيًا.
9): بعد أن يكتشف عنصر التحكم القابل للكتابة المدخلات غير القانونية ، يجب إعطاء الوصف ويمكن الحصول على التركيز تلقائيًا.
10): يجب أن يكون ترتيب مفاتيح TAB وترتيب الضوابط ثابتًا.
11): يتم ترتيب خانات الاختيار وصناديق الخيارات واحدة تلو الأخرى وفقًا للأسفل العالي من احتمال التحديد.
12): يجب أن تحتوي مربعات الاختيار ومربعات الخيارات على خيارات افتراضية ودعم علامة التبويب.
13): عندما يكون عدد الخيارات هو نفسه ، استخدم مربع الخيار بدلاً من مربع القائمة المنسدلة.
14): استخدم المربع المنسدل بدلاً من مربع الخيار عندما تكون مساحة الواجهة صغيرة.
15): عندما يسمى عدد الخيارات الصغيرة ، استخدم مربع الخيار ، بدلاً من ذلك ، استخدم مربع القائمة المنسدلة.
16): يجب أن يستخدم البرامج ذات الاحتراف القوي المصطلحات المهنية ذات الصلة ، بينما تدعو الواجهة الشاملة إلى استخدام الكلمات الشاملة.
4 رموز
1 الفحص الوظيفي: تحقق مما إذا كانت جميع الوظائف والقيود المطلوبة من قبل المتطلبات يتم تنفيذها
2 فحص الحدود: إجراء فحص الحدود على وظائف مثل الإدخال من أنواع البيانات المختلفة أو بيانات النطاقات المختلفة
3 فحص الوصول غير القانوني: اختبر ما إذا كان هناك خطأ غير قانوني في الوصول إلى الذاكرة. رسالة الخطأ المرجعية لتحديد ما إذا كانت تنتمي إلى هذا النوع من الخطأ متشابهة:
"... لم يتم العثور عليها" ، "قائمة فهرس خارج الحدود ..." ، "انتهاك الوصول في العنوان ..."
4: ونصائح لتوجيه.
5 التفتيش المستند إلى الوحدة: تحقق مما إذا كان وصف رأس الوحدة في هذه الوحدة ، ووصف كل وظيفة ، ووصف التعليق التوضيحي صحيحًا. تعليمات الاقتباس: هل هناك أي اقتباسات إضافية
// بشكل خاص ، إذا كان ملف C ++ رأس يحتوي على تشمل غير ضروري ، فسيحدث مشاكل غير ضرورية للوحدات الأخرى.
في الواقع ، تسمى هذه اختبارات ذوي الياقات البيضاء ومحتوى اختبار الوحدة. إذا كنت ترغب في كتابة رمز الاختبار وفقًا لكتاب الاختبار ، أعتقد أن كل مطور لا يريده! لكنها لن تنجح ، فمن السهل ارتكاب أخطاء وجعل من الصعب تقديمها. لذلك ، من الضروري للغاية فهم طرق الاختبار ، هذه الطرق
هناك مقدمات لهندسة البرمجيات في الجامعات ، ويجب أيضًا اتخاذ مصممي البرمجيات. كلما كتبت برنامجًا ، ستكون حريصًا على النظر في الأخطاء التي قد تحدث في مواقف مختلفة! على الرغم من أن المتغيرات المراد استخدامها عند تنفيذ الوظيفة تكون فارغة؟ هل القيمة صالحة؟ هل تفيض؟ هل تقوم بمسح مساحة المتغير؟ هل هو شرط حالة؟ هل توجد مسافات في المقدمة وبعدها؟
يجب أولاً كتابة هذه الأحكام في الوظيفة وبداية العملية!
if (TreeView-> تم تحديد == null) // هل سيكون المتغير فارغًا؟
ثم العودة
std :: vecotr <int> Intarray ؛ // هل هو تفيض؟
إذا (Intarray <= 0)
ثم العودة
if (i <listview.items-> count) // هل تفيض وعبور الحدود؟
edit-> text = listView-> العناصر-العناصر [i] .caption ؛
edit-> text.trim () ؛ // هل هناك أي مساحة قبل وبعد؟
Char A [10] ؛
memcpy (a ، "/0" ، 10) ؛ // هل تقوم بمسح مساحة المتغير؟
A [9] = 'i' ؛
// الشخص الذي يستخدم وظيفتك يكتب حلقة للاتصال بمتغير وظيفتك شروط حكم المتصل ستفقد تأثيرها!
if (name.trim () == "delphi") ثم الاسم = "BCB" ؛
Switch () {Case to Break ؛
5 البيانات الافتراضية والمطالبات وتحديد المواقع والود
عند عرض الواجهة ، سيتم عرض البيانات افتراضيًا.
comboBox1.ItemIndex: = 0 ؛
بشكل عام ، سيتم تحرير الإضافات والتعديلات الجديدة في زوج واحد باستخدام واجهة واحدة. عند اكتمال الإضافة الجديدة ، يجب وضع جميع المكونات في السجل المضافة حديثًا ، وينطبق الشيء نفسه على التعديل. عند الحذف ، حدد موقع السجل التالي.
ListView و DBGird للحصول على وظيفة الفرز ، انقر فوق العنوان للذهاب إلى أعلى/لأسفل حسب تاريخ الحروف الرقمية
ListView و DBGird عند نقل تركيز البيانات المحدد على الزر ، أي الصف محدد حاليًا؟ !
void __fastcall tfrmgather760 :: lvDataCustomDrawItem (tcustomListView *المرسل ، tlistitem *العنصر ، tcustomdrawstate State ، Bool & DefaultDraw) // سوف يرسم هذا الرمز قاعًا أصفر على الخط المحدد
{
إذا (المرسل-> محدد! = فارغ)
if (item-> index == sender-> محدد-> فهرس)
{
المرسل-> canvas-> brush-> color = clyellow ؛
المرسل-> canvas-> font-> color = clblue ؛
}
}
بالنسبة للعمليات التي تتجاوز عادة ثانيتين ، يجب أن تكون في الوظيفة.
tcursor oldcursor ؛
OldCursor = screen-> المؤشر ؛
الشاشة-> المؤشر = crsqlwait ؛
يحاول{ . . . . . . } __ أخيرًا {screen-> cursor = oldcursor ؛}
الإجراء tform1.formkeydown (المرسل: TOBJECT ؛ VAR KEY: WORD ؛ Shift: TshiftState) ؛
يبدأ
if (shift = []) و (key = vk_return) ثم // استبدل مفتاح علامة التبويب بإدخال
أداء (wm_nextDlgctl ، 0 ، 0) ؛
إذا كان المفتاح = vk_next ثم // اضغط على pageup pagedown لجعل صفحة تبديل tpageControl
يبدأ
إذا pagecontrol.activePageIndex = pagecontrol.pageCount - 1 ثم
pagecontrol.activePageIndex: = 0
آخر
pagecontrol.activePageIndex: = pagecontrol.activePageIndex + 1 ؛
نهاية
آخر إذا المفتاح = vk_prior ثم
يبدأ
إذا pagecontrol.activepageindex = 0 ثم
pagecontrol.activePageIndex: = pagecontrol.pageCount - 1
آخر
pagecontrol.activePageIndex: = pagecontrol.activePageIndex - 1 ؛
نهاية؛
نهاية؛
نهاية.
6 زر تبادل
عند اكتمال عملية ما ، ستصبح بعض الأزرار غير صالحة ، وفي أي ظروف سيتم استعادتها إلى الصلاحية؟ على الرغم من وجود فقرة واحدة فقط ، إذا لم يتم تعيينها غير فعالة ، فإنها غالبًا ما تسبب أخطاء قاتلة مختلفة! نظرًا لأنه لا يمكنك التنبؤ بكيفية تشغيل المستخدمين ، يمكنك استخدام Rose لرسم مخطط الحالة أو استخدام Word لتمثيله!
7 أداء
عندما يكون هناك أكثر من 100 بيانات ، يتم إدخال مكونات عرض البيانات مثل Combobox Listbox TreeView ListView DBGrid والاستعلام عنها أثناء الدخول.
دعم الاستعلامات الغامضة ليس أكثر من "٪ xxx ٪".
void __fastcall tfrmgather760 :: edt_namekeypress (tobject *sender ، char & key)
{
إذا (المفتاح! = VK_RETURN)
يعود؛
سلسلة SSQL ؛
SSQL = "حدد الاسم كاسم ، مبيعات كمبيعات ، من الموظف" ؛
ssql + = "حيث اسم مثل" ٪ " + loporcase (edt_name-> text.trim ()) +" ٪ '"؛
tfrmpubdlg *pubDlg = new tfrmpubdlg (this) ؛
PubDlg-> executequery (SSQL) ؛
pubdlg-> showmodal () ؛
.....
}
8 آخرون
عند تطوير وحدة ، يتم استخدام الوحدات الفردية و DFM كوحدات شائعة. سيجعل بنية نقل الأحرف في الوحدة
بنية tablename
{
اسم السلسلة
سلسلة FileDname ؛
......
} ؛
std :: vector <string> serrorarry // موجه خطأ موحد
ويمكن أن يكون مقطع ResoucString Delphi موفرًا وأسهل في الترجمة
عند إضافة وتعديل ، يتم تركيز جميع عمليات فحص البيانات تحت زر حفظ
void __fastcall tform3 :: btn_saveclick (المرسل)
{
if (edt_name-> text.isempty ())
{
Showmessage ("") ؛
edit_name-> setfocus ()
يعود؛
}
ModalResult = MROK ؛
}
معظم تصميمات التخرج للطلاب في المدرسة هي قواعد بيانات ، مثل طبقتين أو ثلاث طبقات. يجب عليك القيام ببرنامج تصميم التخرج على محمل الجد ، وأن تنفق الأموال لطلب زملائك في الفصل لمساعدتك في إجراء الاختبار ، واقتراح المزيد من الراحة التشغيلية. فقط من خلال اجتياز اختبارات الآخرين ، يمكن تحسين قدرتك ، ومعظم الكود هي معالجة الاستثناءات وسهولة الاستخدام! سيكون من السهل جدًا العثور على شركة جيدة عندما تبحث عن وظيفة مع أعمالك
في الواقع ، عند الانخراط في تطوير مكتب الاستقبال في قاعدة البيانات ، فإن الشيء المهم هو كتابة رمز سهل الاستخدام!