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

مساعدة في تمرير بيانات مدخلة من داخل Fonction الى الConstructor

بدأه soufianosse في 8 فبراير 2010 · 11 رد · 1,359 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

شباب من فضلكم لدي تمرين يجب ان اقدمه غدا بادن الله

المطلوب برنامج لحساب نتيجة التلميد وطباعة جدول النتائج

المهم الامر سهل ، بدأت فيه قبل قليل

الكود

#include <cstdlib>
#include <iostream>
#include<windows.h>
#include<conio.h>
using namespace std;

class Etudiant 
{
private:
      char Nom[30];        

public:
      Etudiant(){};
       Etudiant(char Nom[])
       {
          Nom=this->Nom;
       }
      void print();
      void GetInfo();                   
      void gotoxy ( short x, short y );
 ~Etudiant(){};
};

void Etudiant::gotoxy ( short x, short y )
{
COORD coord = {x, y};
SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coord );
}  
void Etudiant::print()
    {gotoxy(32,1);
    cout <<"Bulletin"<<endl;
    gotoxy(32,2);
    cout <<"--------"<<endl;   
    cout<<endl <<"Nom   :";
    gotoxy(5,4);   
    gotoxy(30,4);
    cout <<"Prenom :";    
    gotoxy(0,5);
    cout <<"Lycee :";    
    gotoxy(30,5);
    cout <<"Class  :";
    gotoxy(8,4);} 

void Etudiant::GetInfo()
{


     } 


int main(int argc, char *argv[])
{
    Etudiant *OB;

    OB->print();
    OB->GetInfo();



    getch();
    return EXIT_SUCCESS;
}

كيف امرر الاسم الدي ادخله المستخدم من داخل الدالة GetInfo الى الـConstructor واخزنها في المفصوفة Nom ؟

تم تعديل هذه المشاركة بواسطة soufianosse في 8 فبراير 2010 في 01:08

#2

جرب هذا الكود : ربما هو ما تريد .

#include <cstdlib>
#include <cstring>
#include <iostream>
#include<windows.h>
#include<conio.h>
using namespace std;

class Etudiant 
{
private:
 	char Nom[30]; 	

public:
 Etudiant(){}
 	Etudiant(char str[])
 	{

 	strncpy(Nom,str,30);
 	}
 	void print();
 	void GetInfo(char str[]) ; 	
 	void gotoxy ( short x, short y );
 ~Etudiant(){}
};

void Etudiant::gotoxy ( short x, short y )
{
COORD coord = {x, y};
SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coord );
} 
void Etudiant::print()
	{gotoxy(32,1);
	cout <<"Bulletin"<<endl;
	gotoxy(32,2);
	cout <<"--------"<<endl; 
	cout<<endl <<"Nom :"<<Nom;
	gotoxy(5,4); 
	gotoxy(30,4);
	cout <<"Prenom :";	
	gotoxy(0,5);
	cout <<"Lycee :";	
	gotoxy(30,5);
	cout <<"Class :";
	gotoxy(8,4);} 

void Etudiant::GetInfo(char str[])
{
 strncpy(Nom,str,30);
} 


int main(int argc, char *argv[])
{
	Etudiant *OB=new Etudiant ;



	OB->GetInfo("Arab");
	OB->print();



	return EXIT_SUCCESS;
}
tvquran_6.gif

#3

شكرا لك لكن لا اقصد هدا بالضبط

لدي 4 مصفوفات معرفين في الكلاس Etudiant

char Nom[30];

char Prenom[30];

char Lycee[30];

char Class[30];

عندما استدعي الدالة GetInfo بداخلها ستكون هناك اربع اوامر cin << لادخلا المعلومات

وكل معلومة تسجل في المصفوفة الخاصة بها

بما ان المصفوفات معرفين Private في الكلاس Etudiant فيجب ان نمررها الى الـConstructor

وهدا يعني ان كل نوع يلزمه Constructor

لكن اولا لم اعرف كيف من داخل GetInfo اعمل امر cin لادخال العلومات تم ارسلها للـConstructor ومنه تسجل في المصفوفة

متلا Constructor الخاص بالاسم سيكون هكدا

        Etudiant(char str[])
        {
        Nom=str;
        }

يعني السلسلة النصية التي ستصله وهي الاسم الدي ادخله المستخدم يجب ان تسجل في المصفوفة Nom

تم تعديل هذه المشاركة بواسطة soufianosse في 8 فبراير 2010 في 02:08

#4

انظر للكود التالي : وطريقة استخدامه.

تستطيع باستخدام الدالة طلب المعلومات او إدخالها مباشرتا عن طريق الباني :

#include <cstdlib>
#include <cstring>
#include <iostream>
#include<windows.h>
#include<conio.h>
using namespace std;

class Etudiant 
{
private:
 	char Nom[30]; 	
 char Prenom[30];
 	char Lycee[30];
 	char Class[30];

public:
 Etudiant(){}
 	Etudiant(char str1[],char str2[],char str3[],char str4[])
 	{

 	strncpy(Nom,str1,30);
 strncpy(Prenom,str2,30);
 	strncpy(Lycee,str3,30);
 strncpy(Class,str4,30);


 	}
 	void print();
 	void GetInfo(istream& ss) ; 	
 	void gotoxy ( short x, short y );
 ~Etudiant(){}
};

void Etudiant::gotoxy ( short x, short y )
{
COORD coord = {x, y};
SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coord );
} 
void Etudiant::print()
	{gotoxy(32,1);
	cout <<"Bulletin"<<endl;
	gotoxy(32,2);
	cout <<"--------"<<endl; 
	cout<<endl <<"Nom :"<<Nom;
	gotoxy(5,4); 
	gotoxy(30,4);
	cout <<"Prenom :"<<Prenom;	
	gotoxy(0,5);
	cout <<"Lycee :"<<Lycee;	
	gotoxy(30,5);
	cout <<"Class :"<<Class;
	gotoxy(8,4);} 

void Etudiant::GetInfo(istream& ss)
{
	ss>>Nom;
	ss>>Prenom;
	ss>>Lycee;
	ss>>Class;

} 


int main(int argc, char *argv[])
{
	/*
	Etudiant *OB=new Etudiant("FHGghahs","assss","ffffff","ddddd") ;
	OB->print();
	*/


	/*
	Etudiant *OB=new Etudiant ;
	OB->GetInfo(cin);
	OB->print();
	*/



	return EXIT_SUCCESS;
}
tvquran_6.gif

#5

نعم اخي الكريم اعرف هده الطريقة لكن ربما مازالت لم تفهم قصدي

انا لا اريد ارسال معلومات مباشرة

المستخدم هو من سيدخلها ادن هده الطريقة لن تنجح

هدا الكود خاطأ لكن فقط لتفهم مادا اقصد

  Etudiant *OB=new Etudiant("cin>> Nom","cin>> Prenom","cin>> class","cin>> lycee") ;

المستخدم هو من سيدخل المعلومات والدالة GetInfo هي المسؤولة عن الادخال

لوو اردنا استعمال هده الطريقة التي وضعتها فيجب تعريف 4 مصفوفات داخل الدالة main وبعد دالك مطالبة المستخدم بادخال البيانات وبعدها نسجلها في المصفوفات تم نشتق كائن للكلاس ونرسل عبره هده المصفوفات الى Constructor كما في طريقتك

لكن هده الطريقة غير جيدة رغم انها شغالة

الا توجد طريقة لارسال البيانات التي ادخلها المستعمل مباشرة الى المصوفات التي عرفناها داخل الكلاس ومن داخل الـ GetInfo

يعني اوامر cin ستكون داخل getinfo وليس main ومن تم تسجل في المصفوفات التي على الكلاس

تم تعديل هذه المشاركة بواسطة soufianosse في 8 فبراير 2010 في 03:19

#6

هدا هو البرنامج حتى الان

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

#include <cstdlib>
#include <iostream>
#include<windows.h>
#include<conio.h>
using namespace std;

class Etudiant 
{
private:
      char Nom[30];        
      char Prenom[30]; 
      char Lycee[30];
      char Class[30];               
public:
      Etudiant(){};
       Etudiant(char Nom[])
       {

       }
      void print();
      void GetInfo(); 
      void Dessin();                  
      void gotoxy ( int x, int y );

 ~Etudiant(){};

};

void Etudiant::gotoxy ( int x, int y )
{
COORD coord = {x, y};
SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coord );
}  

void Etudiant::print()
    {
    gotoxy(32,1);
    cout <<"Bulletin"<<endl;
    gotoxy(32,2);
    cout <<"--------"<<endl;
    gotoxy(10,3);   
    cout <<"Nom   :";
    gotoxy(10,5);   
    cout <<"Prenom :";    
    gotoxy(53,3); 
    cout <<"Lycee :";    
    gotoxy(53,5); 
    cout <<"Class  :";
    gotoxy(18,10);
    cout <<"Matiere";
    gotoxy(31,10);
    cout <<"Coff";
    gotoxy(40,10);
    cout <<"Note";
    gotoxy(48,10);
    cout <<"Totale";;

    } 


void Etudiant::Dessin()
{     
  int i=0;
  int k=0;
  for(i=9;i<=19;i++)
  {
  gotoxy(17,i);
  cout <<"---------------------------------------";  
  i++;
 } 
 for (i=9;i<=19;i++)
 {
     gotoxy(16,i);
     cout<<"|";
        for (k=28;k<=60; k+=9)
        {
         gotoxy(k,i);   
         cout<<"|";       
     }
     } 


     for (i=19;i<=24;i+=2)
     {
         gotoxy(46,i);
         cout<<"----------";
         for (k=46;k<=60;k+=9)
         {
             gotoxy(k,i-1);
          cout<<"|";  

          }
     }

 }

void Etudiant::GetInfo()
{
   gotoxy(17,3);

 //هنا كود جلب الاسم الدي ادخله المستخدم وارسال هدا الاسم الى
   // Constructor

// ليتم وضعه في المصفوفة المناسبة 
// او جلب الاربع بيانات ( الاسم النسب القسم المدرسة ) وارسالها مرة واحدة الى الـConstructor
} 



int main(int argc, char *argv[])
{
    Etudiant *OB=new Etudiant;

   OB->print();
   OB->Dessin();
   OB->GetInfo();



    getch();
    return EXIT_SUCCESS;
}

تم تعديل هذه المشاركة بواسطة soufianosse في 8 فبراير 2010 في 03:14

#7

ربما هذا ماتريد: غير متأكد أني فهمت طلبك.

#include <cstdlib>
#include <iostream>
#include<windows.h>
#include<conio.h>
using namespace std;

class Etudiant 
{
private:
 	char Nom[30]; 	
 	char Prenom[30]; 
 	char Lycee[30];
 	char Class[30]; 	
public:
 	Etudiant(){Nom[0]=0;Lycee[0]=0;Class[0]=0;Prenom[0]=0;};
 	Etudiant(char Nom[])
 	{

 	}
 	void print();
 	void GetInfo(); 
 	void Dessin(); 	
 	void gotoxy ( int x, int y );

 ~Etudiant(){};

};

void Etudiant::gotoxy ( int x, int y )
{
COORD coord = {x, y};
SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), coord );
} 

void Etudiant::print()
	{
	gotoxy(32,1);
	cout <<"Bulletin"<<endl;
	gotoxy(32,2);
	cout <<"--------"<<endl;
	gotoxy(10,3); 
	cout <<"Nom :"<<Nom;
	gotoxy(10,5); 
	cout <<"Prenom :"<<Prenom;	
	gotoxy(53,3); 
	cout <<"Lycee :"<<Lycee;	
	gotoxy(53,5); 
	cout <<"Class :"<<Class;
	gotoxy(18,10);
	cout <<"Matiere";
	gotoxy(31,10);
	cout <<"Coff";
	gotoxy(40,10);
	cout <<"Note";
	gotoxy(48,10);
	cout <<"Totale";;

	} 


void Etudiant::Dessin()
{ 	
 int i=0;
 int k=0;
 for(i=9;i<=19;i++)
 {
 gotoxy(17,i);
 cout <<"---------------------------------------"; 
 i++;
 } 
 for (i=9;i<=19;i++)
 {
 	gotoxy(16,i);
 	cout<<"|";
 	for (k=28;k<=60; k+=9)
 	{
 	gotoxy(k,i); 
 	cout<<"|"; 	
 	}
 	} 


 	for (i=19;i<=24;i+=2)
 	{
 	gotoxy(46,i);
 	cout<<"----------";
 	for (k=46;k<=60;k+=9)
 	{
 	gotoxy(k,i-1);
 	cout<<"|"; 

 	}
 	}

 }

void Etudiant::GetInfo()
{
 int posi[8]={17,3,60,3,18,5,61,5};
for(int i=0;i<8;i+=2)
{
gotoxy(posi,posi[i+1]);
switch(i)
{
case (0):
 	cin>>Nom;break;
case (2):
 	cin>>Lycee;break;
case (4):
 	cin>>Prenom;break;
case (6):
 	cin>>Class;break; 	

}
print();
Dessin();
}

} 



int main(int argc, char *argv[])
{
	Etudiant *OB=new Etudiant;

 OB->print();
 OB->Dessin();
 OB->GetInfo();



	getch();
	return EXIT_SUCCESS;
}
tvquran_6.gif

#8

شكرا لك

لم اكن اعلم انه بالامكان الوصول الى متغيرات معرفة Private داخل Class مباشرة من داخل Fonction

ما اعلم انه ضروري المرور عبر الـConstructor

البرنامج به مشكل بسيط لا اعرف السبب

في الاسم وفي القسم

متلا في الاسم كتبت amine عندما اضغط entré تصبح aminene تم اضافة الحرفين الاخيرين

في القسم متلا كتبت 2bac تصبح 2bacc ، يعيد الحرف الاخير

هده صورة توضيحية للمشكل

http://img191.imageshack.us/img191/7118/sanstitre1slp.jpg

+ طريقتك باستعمال for switch رائعة ستساعدني كتيرا في ادخال معلومات الجدول ^^

#9

هل عدلت في الكود؟ ام نفس الكود السابق .

لان المشكله لاتظهر لي

tvquran_6.gif

#10

لا لم اعدل في الكود

جربت الكود ( نسخ لسق ) فاعطاني هدا الخطأ

كيف يحدت هدا ؟

يقوم بنسخ 2 بايت الاخيرة ويطبعها عند الضغط على entré

استعمل مترجم dev ++c

#11

وجدت الخطأ واصلحته لكني لم افهم السبب

الخطأ هو تحريك مؤشر الماوس

فلو لاحضنا مؤشر الماوس امام Nom سنجد زائد بمقدار خانتين لهدا فانه يعيد كتابة اخر خخانتين

اما Class فهو زائد بمقدار خانة واحدة لهدا فانه يكتب حرف واحد.

لو قمنا بزيادته بمقدار 4 خانات امام Nom سيكتب 4 بايت الاخيرة

لكن لمادا وكيف ؟

جربته على الفجوال سي ++ ونفس الامر

تم تعديل هذه المشاركة بواسطة soufianosse في 8 فبراير 2010 في 16:51

#12

اخي يجب ان نصحح بعض الاخطاء الواردة:

الكونستركتر نمرر له برامترات فقط وقت انشاء الكاءن

anyClass myCls = new anyClass(x,y,z)

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

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

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 10 فبراير 2010 في 10:40

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