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

مشروع تسجيل مبيعات مكتبه بالجافا وقواعد البيانات

رائج
بدأه Mahmoud Kelany في 2 يوليو 2010 · 138 رد · 21,159 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#101

بالنسبه لـ

import servicespkg.UsersService;
import beanspkg.Users;

فهذا استدعاء للملفات موجوده عندك فى المشروع

فعلا الداله

public Users[] selectAll() throws SQLException

تقوم بتحميل كل المستخدمين من قاعده البيانات وتخزينهم فى array لذلك فان الـ return data type لهذه الداله

هو array من نوع Users

ازاى بقا استغل هذه الـ array فى انى اعمله فى جدول

  UsersService usersService = new UsersService();
        try {
            Users[] users;
users = usersService.selectAll();

فى هذه الجزئيه قومت بتعريف كان على الـ UsersService class

وقومت ايضا بتعريف array من الـ Users

واقوم باستدعاء الداله selectAll() على الكائن الذى من نوع UsersService

والتى تعود الينا بـ array من الـ Users اقوم بعدها بتخزينها فى الـ users array اللى عرفتها داخل الكود بتاعى

هكذا

users = usersService.selectAll();

بعدها يكون لدى مصفوفه من المستخدمين اقوم بالتعامل معاها

بعدها اقوم بتعريف مصفوفه ثنائيه يكون عدد صفوفها هى طول الـ Users array

ويكون عدد اعمدتها عدد المتغيرات الموجوده فى الـ Users Class او عدد المتغيرات المراد عرضها لكل مستخدم

فى هذه الحاله

انا اردت ان اعرض

ID , Username , Password , Type

يعنى 4 اعمده

الممثله فى هذا السطر

int userAttributesNumber = 4;

وكما ذكرت نقوم بعمل مصفوفه ثنائيه هكذا

Object usersArr[][] = new Object[users.length][userAttributesNumber];

ونقوم بالدخول بعدها فى loop التى تقوم بتفريغ محتويات الـمصفوفه Users فى الـمصفوفه الـ usersArr

for (int i = 0; i < users.length; i++) {
                Object[] rows = new Object[userAttributesNumber];

                rows[0] = users.getId();
                rows[1] = users.getUsername();
                rows[2] = "*****";
                if (users.getType() == 1) {
                    rows[3] = "مدير";
                } else if (users.getType() == 2) {
                    rows[3] = "مشرف";
                } else if (users.getType() == 3) {
                    rows[3] = "زائر";
                }
                usersArr = rows;
}

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

وهيكون طولها 4 مثل طول الصف فى المصفوفه الثنائيه

  Object[] rows = new Object[userAttributesNumber];

وبعدها نقوم بالحصول على الـ Id , name , password , type الموجودين داخل الـ users

وتحميلهم فى الـ rows

وبعد ان نتهى من الصف كاملا

نقوم بوضعه فى الـ usersArr

حتى تنتهى الـ loop

وبعد ان ننتهى من الحصول على البيانات فى مصفوفه ثنائيه

نقوم بعمل جدول

registeredUserTable.setModel(new DefaultTableModel(usersArr, new String[]{"رقم المستخدم", "اسم المستخدم", "الرقم السرى", "النوع"}));

ونقوم باعطاء الـ Model لهذا الجدول

ويكون DefaultTableModel

والذى ياخذ فى المتغيرات الخاصه به

مصفوفه ثنائيه من البيانات

وعناوين الاعمده

وبهذا نكون وضعنا البيانات فى الجدول بشكل dynamic

هذه هى الداله التى شرحنا كيف تعمل

private void loadSalesData() {
        UsersService usersService = new UsersService();
        try {
            Users[] users;
            users = usersService.selectAll();
            int userAttributesNumber = 4;
            Object usersArr[][] = new Object[users.length][userAttributesNumber];
            for (int i = 0; i < users.length; i++) {
                Object[] rows = new Object[userAttributesNumber];
                rows[0] = users.getId();
                rows[1] = users.getUsername();
                rows[2] = "*****";
                if (users.getType() == 1) {
                    rows[3] = "مدير";
                } else if (users.getType() == 2) {
                    rows[3] = "مشرف";
                } else if (users.getType() == 3) {
                    rows[3] = "زائر";
                }
                usersArr = rows;
            }
            registeredUserTable.setModel(new DefaultTableModel(usersArr, new String[]{"رقم المستخدم", "اسم المستخدم", "الرقم السرى", "النوع"}));
            registeredUserTable.setRowSelectionInterval(0, 0);

        } catch (SQLException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

اتمنى ان يكون الشرح مفهوم

بالتوفيق :)

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 4 أكتوبر 2010 في 19:03

1

Software Developer
Mahmoudkelany.com


 

#102

مشروع جميل اخ محمود

اى نعم مازال ينقصه الكثير لكنه مشروع جيد

حاول تحديثه خطوة خطوة واسأل فيما تريد

وباذن الله تجد من يساعدك ومنها يكون تنشيط للمنتدى

بالتوفيق


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#103
MOHAMED FATHEI كتب:

مشروع جميل اخ محمود

اى نعم مازال ينقصه الكثير لكنه مشروع جيد

حاول تحديثه خطوة خطوة واسأل فيما تريد

وباذن الله تجد من يساعدك ومنها يكون تنشيط للمنتدى

بالتوفيق

حبيب قلبى محمد باشا

منور الموضوع يا بشمهندس

ايه الغيبه الطويله دى

ربنا يخليك انت عارف الواحد بيحب يتعلم وكدا بقا :)

عاوزينك معانا بقا ايدك معانا :)

ان شاء الله أحاول فى ذلك :)

Software Developer
Mahmoudkelany.com


 

#104

أظن أن الشّرح واضح و مفصّل ...

مجهود كبير منك أخ محمود

مــــــــــشــــــــــكـــــــــور

:wink:

1110917454.jpg
#105

السلام عليكم

تمكنت من عمل نافذة جديدة و بها JTable يعمل 100% :lol:

لكن عندي استفسار اخر :P

لاحظت في برنامجك, أخي محمود, أنّ زرّ "حفظ" لا يعمل ... ألقيت نظرة على الكود و لا أرى أين المشكل؟ :blink:

هذا الكود الخاصّ بالاكشن لزرّ "حفظ"


saveButtonAction();
}
private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {

نذهب الى الدالة الخاصة بالاكشن

نجد الدالة validInput و هي للتّثبت من تعمير جميع البيانات

نصنع instance جديدة اسمها sales نجمع بها بيانات الحقول التي أضفناها

ثم نتثبّت من أنها اضافة جديدة flagNew == true و ان كانت كذلك, نستخدم الدالة new SalesService().insert(sales); لاضافة البيانات الجديدة

في الحالة الاخرى أي flagNew == false نعمل update

... الى اخر الكود


if (validInput() == 1) {
try {
Sales sales = new Sales();
sales.setId(rowEdited);
sales.setNumUnites(Double.parseDouble(numberCountityTextField.getText().trim()));
sales.setSalePrice(Double.parseDouble(priceOfSaleTextField.getText().trim()));
sales.setBuyPrice(Double.parseDouble(priceOfbuyTextField.getText().trim()));
sales.setType(typeTextField.getText().trim());

if (flagNew == true) { // check where it's new record or update the current one
new SalesService().insert(sales);
this.loadSalesData(); // to disply the results in the table after the operation done
} else {
new SalesService().update(sales);
this.loadSalesData(); // to disply the results in the table after the operation done
}

saveButton.setEnabled(false);
newButton.setEnabled(true);
setTextFiledUnEnable();

} catch (MySQLIntegrityConstraintViolationException ex) {
} catch (SQLException ex) {
Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
cancelButtonAction();
}
}
private void saveButtonAction() {

نأتي الان الى الدالة insert في ملف SalesService.java

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

نحضر ال query

ثم الباقي غير واضح بالنسبة لي


Connection connection = null;
try {
connection = new DbService().getConnection();
Statement stmnt = connection.createStatement();
String insertQuery = "INSERT INTO sales VALUES(" + item.getId() + ", '" + item.getType() + "', " + item.getBuyPrice() + ", " + item.getNumUnites() + ", " + item.getSalePrice() + ")";


insertQuery = insertQuery.replace("'null'", "null");
int rowsAffected = stmnt.executeUpdate(insertQuery);
stmnt.close();
if (rowsAffected != 0) {
return rowsAffected;
} else {
return -1;
}

} finally {
if (connection != null) {
connection.close();
}
}

}
    public int insert(Sales item) throws SQLException {

أظن كل شيء موجود لماذا حسب رأيك لا يعمل زر حفظ بيانات جديدة؟؟؟

و شكرا

1110917454.jpg
#106

الحمدلله ان الجدول اشتغل معاك تمام :)

اعتقد انك شغال على اول نسخه خالص من المكتبه

واول نسخه كان فيها شويه تعديلات فى التصميم وكدا

وانا رفعت بعدها نسخ كتير تقريبا 3

المهم هذه هى اخر نسخه

MobarkLib_Last.zip

حملها واشتغل عليها وسوف تجد انها تعمل

وايضا هي تعمل فى النسخ القديمه

لكن لا ادرى ما الخطأ الذى تتحدث عنه

بالتوفيق:)

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 5 أكتوبر 2010 في 19:09

Software Developer
Mahmoudkelany.com


 

#107

رااائع أخي محمود :wink:

نزّلت النّسخة الجديد و هي تعمل :lol:

سأطّلع على التحديثات الاخرى ان شاء الله ... لاحظت أمر طباعة في النسخة الجديدة

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

شكرا

1110917454.jpg
#108
Keyser_Soze كتب:

رااائع أخي محمود :wink:

نزّلت النّسخة الجديد و هي تعمل :lol:

سأطّلع على التحديثات الاخرى ان شاء الله ... لاحظت أمر طباعة في النسخة الجديدة

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

شكرا

امممم

اكيد بس مش حاولت اجربها

وكمان انت مش واخد بالك

ان قاعده البيانات Access

علشان تكون محموله

لكن لو عاوز تعملها على سيرفر mySQL فهتحتاج الى انك تحول قاعده البيانات الى mySQL

لان الـ access لا تعمل على سيرفر :)

بالتوفيق :)

Software Developer
Mahmoudkelany.com


 

#109

السلام عليكم

حاولت أضيف نافذة جديد بها قائمة حرفاء على نفس المشروع

صنعت JTable و أستطيع اخراج البيانات عليها ... صنعت 2 Buttons ... واحدة New و الاخرى save

New : تعمل طبيعي و تفتح الTextFields لأستطيع ادخال البيانات

لكن

save: لا تعمل و بالنسبة للكود

 private Connection connection = DbService.getConnection();

يعطي

error >>> non-static method getConnection cannot be referenced from static context

هل ترى أين يمكن أن يكون المشكل؟؟

شكرا


package servicespkg;


import java.sql.*;
import exceptions.*;
import beanspkg.*;
import java.util.ArrayList;



public class ClientsService {

// Connection connection = DbService.getConnection();

public Clients[] selectAll() throws SQLException {
Connection connection = null;

Clients[] arr = null;
try {
connection = new DbService().getConnection();
ArrayList<Clients> list = new ArrayList<Clients>();
Clients item;
Statement stmnt = connection.createStatement();
ResultSet rs = stmnt.executeQuery("SELECT * FROM Client_pass");
while (rs.next()) {
item = new Clients();
item.setNom(rs.getString(1));
item.setPrenom(rs.getString(2));
item.setCin(rs.getLong(3));
item.setN_permis(rs.getString(4));
item.setAdresse(rs.getString(5));
item.setTelephone(rs.getLong(6));
item.setMail(rs.getString(7));

list.add(item);
}

arr = new Clients[list.size()];
list.toArray(arr);
} finally {
if (connection != null) {
connection.close();
}
return arr;
}
}

public int insert(Clients item) throws SQLException{

try{ //System.out.println(item.getNom());

Connection connection = DbService.getConnection();
Statement stmnt= connection.createStatement();
String insertQuery= "INSERT INTO clients(nom,prenom,cin,n_permis,adresse,telephone,mail) values ('"+item.getNom()+"',"+item.getPrenom()+","+item.getCin()+","+item.getN_permis()+","+item.getAdresse()+","+item.getTelephone()+","+item.getMail()+")";

int rowsAffected=stmnt.executeUpdate(insertQuery);
stmnt.close();
if (rowsAffected!=0)
{
return rowsAffected;
}
}
catch (Exception e){
e.printStackTrace();
}
return -1;
}

}

لو تلاحظ وضعت في الدالة الخاصة ب insert

 //System.out.println(item.getNom());

و لما أضغط على save يعطيني محتوى item.getNom في ال output

يعني البرنامج يصل الى الدالة insert و لا يقوم بادخال البيانات في قاعدة البيانات

:(

أتمنى تكون فهمتني على العموم سأحاول مجددا البحث عن سبب المشكل

 

method saveButtonAction


private void enregistrerBtnAction(){

try{
Clients clients=new Clients();
if (flagNew == false)
{ clients.setCin(rowEdited);
}

// Extraire les données des champs.
clients.setNom(nomTF.getText());
clients.setPrenom(prenomTF.getText());
clients.setCin(Long.parseLong(cinTF.getText()));
clients.setN_permis(permisTF.getText());
clients.setAdresse(adresseTF.getText());
clients.setTelephone(Long.parseLong(telephoneTF.getText()));
clients.setMail(mailTF.getText());

if (flagNew == true){
//new ClientsService().insert(clients);
this.loadClientsData();
}
else
{ new ClientsService().insert(clients);
this.loadClientsData();

}

}
catch(SQLException ex)
{Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
}


}

1110917454.jpg
#110

لا استطيع افادتك هكذا

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

لان هناك مسميات واشياء مترتبه على بعضها

لا اعلم اين المشكله بالظبط

Software Developer
Mahmoudkelany.com


 

#111
Mahmoud Kelany كتب:

لا استطيع افادتك هكذا

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

لان هناك مسميات واشياء مترتبه على بعضها

لا اعلم اين المشكله بالظبط

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

بامكانك تعمل run على ملف ClientsBoard.java و تشوف النافذة

ملاحظة استعملت نفس طريقة عملك

ملف Clients تحت beanspk

ملف ClientsBoard تحت gui

ملف ClientsService تحت servicespkg

أيضا هناك ملف تكست يحوي الtable الجديد التي أضفتها لقاعدة بيانات mobarklib

أعتقد هذا كل شيء

:)

MobaraklibProject.rar

1110917454.jpg
#112

اخى الكريم

انا بصراحه مش عارف افهم الفرنسى دا

لانى اخدته كماده بس مش تعمقت فيه

المهم

انت كانت عندك المشكله انك معرف الـ

Connection connection = null;

داخل الداله selectAll

وتريد ان تستخدمه داخل الداله insert

فهو لا يراه اساسا

قوم بوضع

Connection connection = null;

كعضو داخل الكلاس

يعنى كدا جزء من الكود للتوضيح وليس كاملا

public class ClientsService {

    Connection connection = null;

//private Connection connection = DbService.getConnection();
    public Clients[] selectAll() throws SQLException {

        Clients[] arr = null;
        try {
            connection = new DbService().getConnection();

وجرب وقولى

دا انت جعلت البرنامج كله فرنسى :D

ربنا معاك بقا

انا اخرى انجليزى :wacko: :wacko:

Software Developer
Mahmoudkelany.com


 

#113

أهلا أخ محمود

لو تحتاج مساعدة في الفرنسي لا تتردد في الطلب ... أظن أنه لا بوجد فرق كبير بين الانجليزي و الفرنسي

بخصوص الخطأ فعلت كما طلبت مني ... لكن المشكل أن insert لا تضع البيانات في database

جربت أضيف


 System.out.println(item.getNom()+item.getPrenom()+item.getCin()+item.getN_permis()+item.getAdresse()+item.getTelephone()+item.getMail());

في try تحت insert

و يعطي جميع البيانات لكن لا يرسلها لقاعدة البيانات

post-233890-095006100 1286391570_thumb.p

المرفقات
query.png
1110917454.jpg
#114

اكيد الخطأ عندك فى الquery

دعنى انظر على الداله insert

فاصل ونواصل :D

انا شايف انك مرفق ملف اسمه

اقتباس
SQL Mobaraklib - new table client_pass

قاعده البيانات اللى انت شغال عليها ايه

access , mySQL ?

Software Developer
Mahmoudkelany.com


 

#115

الـ query

عندك مش كنت واضع single quotations

لكل متغير من نوع varchar

String insertQuery = "INSERT INTO clients(nom,prenom,cin,n_permis,adresse,telephone,mail) values ('" + item.getNom() + "','" + item.getPrenom() + "'," + item.getCin() + ",'" + item.getN_permis() + "','" + item.getAdresse() + "'," + item.getTelephone() + ",'" + item.getMail() + "')";

هذا هو الـ query بعد التعديل حسب الـ structure

المرفق فى الملف SQL Mobaraklib - new table client_pass

لكن سوال

هو اسم الجدول clients

ولا client_pass

اتمنى ان تنتبه لمثل هذه الوقعات

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

حتى لو كنت عارف فرنسى :D

اخبرنى بالنتيجه

بالتوفيق :)

اضافه على الرد :

انت عندك فى الصوره مش لغيت

Connection connection = null;

من داخل داله الـ insert

بص انا شايفها هناك اهى :D

الغى السطر دا :)

وظبط الداله

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 6 أكتوبر 2010 في 22:21

1

Software Developer
Mahmoudkelany.com


 

#116

ملاحظات في محلّها أخي محمود ... يعني اختلطت علي الأمور و لم أعد أركّز.

لكن أعتقد أنك توصّلت الى الحل

اسم الجدول clients

ولا client_pass

>>> client_pass هو اسم الجدول :P

الـ query

عندك مش كنت واضع single quotations

لكل متغير من نوع varchar

>>> بالفعل خطأ اخر

بالنسبة للبقية أكمل غدا ان شاء الله

الحقيقة قضيت اليوم أمام الكمبيوتر و لا أستطيع المواصلة :blink:

شكرا و تصبح على خير :wink:

1110917454.jpg
#117

:)

طيب تمام

بس ركز شويه :mad:

:excl: ومش تشتغل وانت مضايق او تعبان

لان هيكون مفيش تركيز :wacko:

لكن هل تعمل ام لالا؟

خلاص بدال تعبت قوم ارتاح

الف سلامه عليك اخى الكريم

العفو

وانت من اهل الخير :)

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 6 أكتوبر 2010 في 23:21

Software Developer
Mahmoudkelany.com


 

#118
Mahmoud Kelany كتب:

:)

طيب تمام

بس ركز شويه :mad:

:excl: ومش تشتغل وانت مضايق او تعبان

لان هيكون مفيش تركيز :wacko:

لكن هل تعمل ام لالا؟

خلاص بدال تعبت قوم ارتاح

الف سلامه عليك اخى الكريم

العفو

وانت من اهل الخير :)

صباح الخير

بالفعل لازم تركيز كبير أخي محمود

سأنظر الان في الكود و أحاول حلّ المشكل, أشكرك

:wink:

1110917454.jpg
#119

:thumb_up:

شكرا

تمكنت من حل المشكلة

:clapping:

1110917454.jpg
#120

الحمدلله

ايه اللى كان خطأ عندك؟

بالتوفيق :)

Software Developer
Mahmoudkelany.com


 

#121

يعني بعض الاخطاء البسيطة التي كنت انت قد اشرت اليها مثل اسم الجدول

و كذلك خطأ على مستوى كود الاتصال بقاعدة البيانات

1110917454.jpg
#122
Keyser_Soze كتب:

يعني بعض الاخطاء البسيطة التي كنت انت قد اشرت اليها مثل اسم الجدول

و كذلك خطأ على مستوى كود الاتصال بقاعدة البيانات

تمام كويس

لكن ايه الخطأ اللى كان حصل فى كود الاتصال ؟

انت شغال على الـ mySQL صح ؟ ولا ايه ؟

Software Developer
Mahmoudkelany.com


 

#123
Mahmoud Kelany كتب:

تمام كويس

لكن ايه الخطأ اللى كان حصل فى كود الاتصال ؟

انت شغال على الـ mySQL صح ؟ ولا ايه ؟

نعم أنا أستعمل MySQL الموجود مع easyPHP

الخطأ هو:

Connection connection = null;

و نسيت في أول الmethod

connection = new DbService().getConnection();

:)

1110917454.jpg
#124
Keyser_Soze كتب:

نعم أنا أستعمل MySQL الموجود مع easyPHP

الخطأ هو:

Connection connection = null;

و نسيت في أول الmethod

connection = new DbService().getConnection();

:)

تمام

بس خد بالك بقا بعد كدا :)

Software Developer
Mahmoudkelany.com


 

#125

اخوي ممكن سوال وش البرنامج اللي صلحت المشروع به

وشكرا

اللي يبي مشروع تخرج asp.net

يرسل لي رسالة خاصة

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

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

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

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

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