Προς το περιεχόμενο

Ερώτηση (nube style) για c++


Theochry

Προτεινόμενες αναρτήσεις

Δημοσ.

Παιδιά καλημέρα καταρχάς, και συγχαρητήρια για το forum, με έχει βοηθήσει αρκετές φορές και ελπίζω κι εγω να μπορέσω να συμβάλλω όπου μπορώ :).

 

Λοιπόν έχω την εξής ερώτηση.

Έστω ότι έχω δομημένο το πρόγραμμά μου με τις κλάσεις του σε διαφορετικά .cpp και .h αρχεία.

Έστω επίσης ότι έχω πολλά guis (φόρμες).

Στην μία φόρμα δημιουργώ ένα αντικείμενο που γεμίζω τα data members του.

Θέλω αυτό το αντικείμενω, να μπορώ να το περνάω και σε άλλα guis, χωρίς να δημιουργώ global μεταβλητές ή κάτι τέτοιο.

Ξέρει κανείς σας κανέναν τρόπο, ή κανένα pattern που να μπορέσει να με βοηθήσει;

 

Ευχαριστώ :rolleyes:

Δημοσ.

Προς το παρόν προγραμματίζω σε embarcadero.

Αυτό με το αρχείο το σκέφτηκα και εγώ, όμως σκέψου πως επιβαρύνεις το πρόγραμμά σου με περιττά i/o.

Αυτό που έκανα για να το αντιμετωπίσω με κουτό προγραμματισμό, ήταν να βάλω κάποια hidden edit boxes, όπου εκεί θα έχω αυτά που χρειάζομαι, και από εκεί θα αντλώ έπειτα πληροφορίες όπως (form1->EditBox1->text).

 

Σας παραθέτω και λίγο κώδικα για να καταλάβετε τι εννοώ:

 

Έστω το παρακάτω *.h

 

>
TDateTime time;
DoctorDB db;    (*****)
Patient *patient;

.....

else if(db.CheckDesease(Desease->Text)==true && db.CheckMedicine(Med->Text)==true ){

       patient=db.getPatientData(1,[b]LoginForm->EditDCode->Text.ToInt()[/b],[b]LoginForm->EditDeCode->Text.ToInt()[/b],2,PAddressNumber->Text.ToInt(),1,Name->Text,LastName->Text,Address->Text,Telephone->Text, \
       DBInterfaceForm->PasswordGenerator(),Med->Text,Desease->Text,BioFreq->Text,MedDos->Text,Birthday->Text,time.CurrentDate());
       db.AddNewPatient(patient);
       }

Στα Bolds έχω αυτό που σας λέω. Ουσιαστικά θέλω στο .h αρχείο μου να δημιουργώ ένα αντικείμενο (*****) και να το γεμίζω με δεδομένα τα οποία έχουν ήδη δοθεί σε μία άλλη φόρμα.

 

Το use case έχει ως εξής:

Ένας Doctor κάνει login, σε μία login form.

Έπειτα όταν διαπιστωθεί πως τα username/password είναι σωστά, μεταβαίνει στη δική DoctorForm και από εκεί μπορεί να δημιουργήσει έναν νέο ασθενή.

 

 

Η κλάση του ασθενή είναι αυτή:

>
class Patient{
private:


       int docCode_; 
       int bioCode_; 
       int patCode_;  
       int patDesCode_;  
       int patAge_;
       int patAdNum_; 
       int patSugar_;
       int MCode_;
       int patPulse_;
       float patTemp_;

θέλω όταν ο γιατρός μου δημιουργεί έναν ασθενή, να μην παίρνει το docCode_ από το editBox, όπως παραπάνω, αλλά με μία get συνάρτηση.

Υπενθυμίζω, πως το Doctor object δημιουργείται στην login Form.

 

>

//kwdikas loginForm
if (DoctorRB->Checked) {
       Doctor *doctor;
       DoctorDB db;
          
       doctor=db.CreateDoctor(Password->Text,Username->Text);// Η CreateDoctor είναι παρακάτω
       if(doctor==NULL)
               ShowMessage("Ï ãéáôñüò äåí õðÜñ÷åé óôï óýóôçìá ôçò âÜóçò");
       else
       {
       EditDCode->Text=doctor->getDocCode();
       EditDName->Text=doctor->getNameDoctor();
       EditDLastName->Text=doctor->getLastNameDoctor();
       DoctorForm->LabelDName->Caption=doctor->getNameDoctor();
       DoctorForm->LabelDLast->Caption=doctor->getLastNameDoctor();
       DoctorForm->Show();
       }
}
}

==================================================================================================================================

Doctor* DoctorDB::CreateDoctor(String Password, String Username) {
       //h synarthsh auth dhmiourgei ena antikeimeno tupoy doctor, me vasei ta orismata poy dexetai. Ektelei ena dinamiko erwtima sql kai gemizei
       //ta melh dedomena tou antikeimenoy doctor me katallhles times

       Doctor *doctor;
       DoctorDB dbDoctor;
       int docCode,docAdNum,docPassword;
       String docName,docLastName,docAddress,docTelephone;

       DBInterfaceForm->ADOCreateDoctor->SQL->Text="Select DCode as docCode, Name as docName, Last_Name as docLastName, Address as docAddress, Address_Number as docAdNum,\
                               Telephone as docTelephone, Password as docPassword \
                               from DOCTOR where Password='"+Password+"' and Last_name='"+Username+"' ";

       DBInterfaceForm->ADOCreateDoctor->Active=false;
       DBInterfaceForm->ADOCreateDoctor->ExecSQL();
       DBInterfaceForm->ADOCreateDoctor->Active=true;


       if(DBInterfaceForm->ADOCreateDoctor->RowsAffected==0){
               return NULL;
       }


       docCode=DBInterfaceForm->ADOCreateDoctor->FieldValues["docCode"];
       docName=DBInterfaceForm->ADOCreateDoctor->FieldValues["docName"];
       docLastName=DBInterfaceForm->ADOCreateDoctor->FieldValues["docLastName"];
       docAddress=DBInterfaceForm->ADOCreateDoctor->FieldValues["docAddress"];
       docAdNum=DBInterfaceForm->ADOCreateDoctor->FieldValues["docAdNum"];
       docTelephone=DBInterfaceForm->ADOCreateDoctor->FieldValues["docTelephone"];
       docPassword=DBInterfaceForm->ADOCreateDoctor->FieldValues["docPassword"];
       doctor=dbDoctor.getDoctorData(docCode,docName,docLastName,docAddress,docTelephone,docAdNum,docPassword);


       return doctor;//epeita epistrefei to dimiourgithen antikeimena stin kalousa sinarthsh, en prokeimenw stin loginForm
}

Ελπίζω να μην σας κούρασα :whistle:

Δημοσ.

1) Ενα static func στη form του τυπου bool LoginForm::Show(LoginDataStruct& outLoginStaff);

2) Ενα global datastruct instance στη login unit (.cpp ουσιαστικα δεν θα ειναι global) με μια global getter func (στην .h)

3) Εαν ειναι εχει event το freamwork τοτε με ενα event.

Δημοσ.

1) Ενα static func στη form του τυπου bool LoginForm::Show(LoginDataStruct& outLoginStaff);

2) Ενα global datastruct instance στη login unit (.cpp ουσιαστικα δεν θα ειναι global) με μια global getter func (στην .h)

3) Εαν ειναι εχει event το freamwork τοτε με ενα event.

 

Αν σου είναι εύκολο να δώσεις παράδειγμα με λίγο κώδικα θα με βοηθούσε :mrgreen:

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...