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

اختبر قدراتك في الـ Files, Threads, and Swing

بدأه Snack3r في 19 نوفمبر 2013 · 3 رد · 845 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

 

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

 

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

 

المرحلة الأولى : (إنشاء واجهة التطبيق)

هذه صورة لواجهة  التطبيق :

 

post-219439-0-33951300-1384877670_thumb.

 

الـ package ذو الاسم GUI يحتوي على فئتين, الأولى باسم CompteFrame حيث تُمثل الواجهة الرئيسية للتطبيق و الثانية باسم Main حيث تُمثل الفئة الرئيسية للمشروع.

  1. الفئة CompteFrame لا تحتوي على main.
  2. تم بناء الواجهة بشكل يدوي (لم أستخدم طريقة Drag and Drop)

 

المرحلة الثانية : (إنشاء حسابات المستخدمين)

الـ package ذو الاسم Transaction يحتوي على فئتين, الأولى Compte و الثانية FileCompte.

الفئة FileCompte تحتوي على دالتين, الأولى باسم compteToFile حيث تأخذ بيانات الحساب و تخزنها في ملف نصي و الثانية باسم fileTopCompte تأخذ رقم الحساب و تُعيد كائن من نوع Compte يحتوي على البيانات المخزنة داخل الملف.

الفئة Compte تحتوي على :

  • constructeur يسمح بإنشاء حساب جديد.
  • الدوال getNom, getPrenom, getSolde, getDecouvert, getNumeroCompte, getHistorique.
  • دالتين, إحداهما لسحب مبلغ و الأخرى لشحن الحساب : crediter (double montant), debiter (double montant)l.
  • الدالة setDecouvert (montant nouveauDecouvert)l التي تسمح بتغيير المبلغ الأدنى الذي يجب أن يبقى دائما في الحساب.

 

المرحلة الثالثة : (transaction management)

لإدارة و تسيير العمليات التجارية, اعتبرتُ أن حساب العميل عبارة عن critical resource و بالتالي لا يُمكن إجراء عملية شحن و سحب مبلغ على حساب معين في نفس الوقت لذا قمتُ بتسيير الـ synchronization لكلتا العمليتين.

قمتُ بإنشاء package باسم Synchro يحتوي على فئتين, الأولى باسم ThreadCompteRetrait و الثانية باسم ThreadCompteDepot لتسيير و إدارة عمليات السحب و الشحن على التوالي.

 

المرحلة الرابعة : (إدارة الأحداث لجعل الواحهة تتفاعل مع المستخدم)

الزر Creer compte يسمح بإنشاء حساب جديد انطلاقا من البيانات الموجودة في الخانات بالأعلى. بمجرد إنشاء حساب جديد, سيتم تخزين بيانات العميل في ملف نصي على القرص الصلب.

 

قمتُ بأخذ الـ constraints التالية بعين لااعتبار : (الـ package ذو الاسم Filter يحتوي على الفئات المسؤولة عن هذه الـ constraints)

  • لإنشاء حساب جديد, يجب ملىء كافة الحقول و إلا سيتم إظهار نافذة صغيرة تُوضح سبب الخطأ.
  • الحقلين prenom  و nom يجب أن يحتويان على حروف فقط, إذا حاول المستخدم إدخال أرقام أو رموز, يتوقف المؤشر عن الكتابة.
  • الحقلين solde و decouvert يجب أن يحتويان على أرقام فقط و عند محاولة إدخال أحرف, يتوقف المؤشر عن الكتابة.
  • الحقل NumeroCompte يجب أن لا يزيد طوله عن 10 أرقام, بمجرد تخطي عشرة أرقام عند عملية الادخال, يتوقف المؤشر عن الكتابة.
  • بالإضافة إلى ما سبق, يُمكن للمستخدم تشغيل الزر بمجرد أن يضع عليه الـ focus  و يضغط على enter.
  • إذا تمت عملية الإنشاء بنجاح, يتم إظهار نافذة صغيرة توضح ذلك.

 

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

الزرين Depot و Retrait يسمحان بسحب أو شحن الحساب على التوالي. (هاتان العمليتان تم عملهما كـ synchronized) بمجرد إدخال رقم العميل بالأسفل, يمكن سحب أو شحن مبلغ معين. المبلغ يجب أن يتكون من أرقام فقط.

أيضاً, لسحب أو شحن مبلغ معين يمكن أيضا إدخال البيانات و الضغط على enter في الخانة الثانية أو الثالثة حسب نوع العملية.

 

أخيراً, قمتُ بعمل jar لكل من synchro  و transaction و قمتُ بعمل import لملف الـ jar في المشروع, فأصبح هكذا :

post-219439-0-30273200-1384877695_thumb.

 

تجد  في المرفقات المشروع كاملا مع ملف jar لتجربة البرنامج.

 

 

 

تحياتي.

 

Gestion des comptes bancaires.rar

1
#2

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

شكرا لك استاذي الفاضل على هذه المبادره افضل طريقه للتعلم هي بهذا الشكل بالممارسه 

اتمنى عدم ادراج سورس كود حالياً حتى نطبق معاك 

ايضا يرجى المره قادمه جعل الفورم بالعربي او انجليزي فضلاً لا امراً 

جزاك الله خير 

#3

هل يجوز أن نستعمل netbeans في إنشاء الفورم ؟

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#4
اقتباس

اتمنى عدم ادراج سورس كود حالياً حتى نطبق معاك

 

أنا أصلا لم أضع السورس كود كاملا لأنه لن يُفيد.. الوجبات السريعة مهمة المطاعم فقط :)

المشروع الي أرفقتُه يحتوي على فئة واحدة و هي المسؤولة عن رسم واجهة التطبيق و بقية الفئات موجودة داخل jar و غير متاحة بشكل جاهز ..

 

اقتباس
ايضا يرجى المره قادمه جعل الفورم بالعربي او انجليزي فضلاً لا امراً

 

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

 

اقتباس
هل يجوز أن نستعمل netbeans في إنشاء الفورم ؟

 

نعم يجوز لكن مكروه :P

الهدف من المشروع هو التعلم و بالتالي إذا قمتَ ببناء الواجهة يدويا ستتعلم التعامل مع مكونات Swing بشكل أفضل ..

تم تعديل هذه المشاركة بواسطة Snack3r في 19 نوفمبر 2013 في 20:56

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

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

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

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

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