IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Création d'un logiciel de gestion séance de tir


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Création d'un logiciel de gestion séance de tir
    Bonjour,

    Je souhaiterai créer un programme en C++ permettant de gérer des séances de tir a l'arc

    avec des parametres à remplir tels que :
    - date
    - nom
    - prenom
    - niveau du tireur
    - points obtenu

    ainsi, il me donnerai des statistiques, et la liste de ceux qui n'ont pas effectuer le nombre de séance requises dans l'année. Et bien d'autre statistiques.

    J'ai commencer et j'ai déjà un bout de programme pour entrer les données. Ce que je ne sais pas c'est comment mémorisé les données au fur et a mesure comme dans un tableau pour, au final les resortir en statistique.
    Comment ajouter ou supprimer des données (ex : un tireur qui arrête le tir définitivement ou un nouveau venu, ...)

    merci pour votre aide
    cordialement

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Voici le début de mon travail ( attention je débute )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    #include <QApplication>
    #include <QtGui>
    #include <QCheckBox>
    #include <QSpinBox>
    #include <QFormLayout>
    #include <QVBoxLayout>
    #include <QHBoxLayout>
    #include <QGridLayout>
    #include <QLineEdit>
    #include <QPushButton>
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        QWidget fenetre;
        fenetre.setWindowTitle("Programme de gestion des séances de tir v0.0");
        fenetre.setWindowIcon(QIcon("icone1.png"));
        // 1 : Créer le QTabWidget
        QTabWidget *onglets = new QTabWidget(&fenetre);
        onglets->setGeometry(10, 30, 600, 350);
     
        // 2 : Créer les pages, en utilisant un widget parent pour contenir chacune des pages
        QWidget *page1 = new QWidget;
        QWidget *page2 = new QWidget;
        QLabel *page3 = new QLabel; // Comme un QLabel est aussi un QWidget (il en hérite), on peut aussi s'en servir de page
        QWidget *page4 = new QWidget;
        QWidget *page5 = new QWidget;
        QWidget *page6 = new QWidget;
        QWidget *page7 = new QWidget;
        QWidget *page8 = new QWidget;
        QWidget *page9 = new QWidget;
        QWidget *page10 = new QWidget;
     
        // 3 : Créer le contenu des pages de widgets
     
            // Page 1
     
            QLineEdit *nom = new QLineEdit("Nom / Prénom");
            QLineEdit *lineEdit3 = new QLineEdit("Date");
            QPushButton *bouton1 = new QPushButton("Valider");
            QPushButton *bouton2 = new QPushButton("Annuler");
            QCheckBox *checkbox1a = new QCheckBox("Séance d'initiation", &fenetre);
            QCheckBox *checkbox2a = new QCheckBox("Séance formation continue", &fenetre);
            QCheckBox *checkbox3a = new QCheckBox("Séance de perfectionnement", &fenetre);
            QTextEdit *QTextEdit2a = new QTextEdit("Remarques sur la séance :");
     
            QComboBox *liste = new QComboBox(&fenetre);
            liste->addItem("08h00 - 10h00");
            liste->addItem("10h00 - 12h00");
            liste->addItem("14h00 - 16h00");
            liste->addItem("16h00 - 18h00");
            liste->move(30, 20);
     
            QVBoxLayout *vbox1 = new QVBoxLayout;
            vbox1->addWidget(lineEdit3);
            vbox1->addWidget(liste);
            vbox1->addWidget(checkbox1a);
            vbox1->addWidget(checkbox2a);
            vbox1->addWidget(checkbox3a);
            vbox1->addWidget(QTextEdit2a);
            vbox1->addWidget(bouton1);
            vbox1->addWidget(bouton2);
            page1->setLayout(vbox1);
     
            // Page 2
     
            QLineEdit *lineEdit2 = new QLineEdit("Date");
            QLineEdit *nom2 = new QLineEdit("Nom");
            QLineEdit *prenom2 = new QLineEdit("Prénom");
            QLineEdit *points_obtenus = new QLineEdit("Points");
            QCheckBox *checkbox1b = new QCheckBox("Résultats excellents", &fenetre);
            QCheckBox *checkbox2b = new QCheckBox("Résultats moyens", &fenetre);
            QCheckBox *checkbox3b = new QCheckBox("Résultats faibles", &fenetre);
            QTextEdit *QTextEdit4b = new QTextEdit("Remarques sur le tireur :");
     
            QProgressBar *progress = new QProgressBar;
            progress->setValue(50);
            QSlider *slider = new QSlider(Qt::Horizontal);
            QPushButton *bouton3 = new QPushButton("Valider");
     
            QVBoxLayout *vbox2 = new QVBoxLayout;
            vbox2->addWidget(lineEdit2);
            vbox2->addWidget(nom2);
            vbox2->addWidget(prenom2);
            vbox2->addWidget(points_obtenus);
            vbox2->addWidget(checkbox1b);
            vbox2->addWidget(checkbox2b);
            vbox2->addWidget(checkbox3b);
            vbox2->addWidget(QTextEdit4b);
            vbox2->addWidget(bouton3);
            page2->setLayout(vbox2);
     
            // Page 3 (je ne vais afficher qu'une image ici, pas besoin de layout)
     
            page3->setPixmap(QPixmap("icone2.PNG"));
            page3->setAlignment(Qt::AlignCenter);
     
            // Page 4 (je ne vais afficher une autre image)
     
            QLineEdit *lineEdit4 = new QLineEdit("Nom du tireur");
            QLineEdit *lineEdit5 = new QLineEdit("Prénom du Prénom");
            QPushButton *bouton4 = new QPushButton("Valider");
            QPushButton *bouton5 = new QPushButton("Annuler");
     
            QVBoxLayout *vbox4 = new QVBoxLayout;
            vbox4->addWidget(lineEdit4);
            vbox4->addWidget(lineEdit5);
            vbox4->addWidget(bouton4);
            vbox4->addWidget(bouton5);
            page4->setLayout(vbox4);
     
            // Page 5 (je ne vais afficher une autre image)
     
            QLineEdit *lineEdit6 = new QLineEdit("REMARQUES");
            QTextEdit *QTextEdit2 = new QTextEdit("Entrez l'adresse");
            QLineEdit *lineEdit7 = new QLineEdit("INTITULE");
            QPushButton *bouton6 = new QPushButton("Valider");
            QPushButton *bouton7 = new QPushButton("Annuler");
     
            QVBoxLayout *vbox5 = new QVBoxLayout;
            vbox5->addWidget(lineEdit6);
            vbox5->addWidget(QTextEdit2);
            vbox5->addWidget(lineEdit7);
            vbox5->addWidget(bouton6);
            vbox5->addWidget(bouton7);
            page5->setLayout(vbox5);
     
        // 6 : ajouter les onglets au QTabWidget, en indiquant la page qu'ils contiennent
        onglets->addTab(page1, "Gestion séance");
        onglets->addTab(page2, "Saisie des tireurs");
        onglets->addTab(page3, "Gérer une licence");
        onglets->addTab(page4, "Recherches");
     
        fenetre.show();
     
        return app.exec();
    }

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Hello,

    Avant d'aller plus loin, qu'est-ce qui te pousse vers le C++ pour faire cela ?

    — Si c'est par goût personnel pour le langage, parce que tu y es plus à l'aise, ou parce que le thème est un prétexte pour s'y mettre, pas de problème. Il y a beaucoup de choses en C++ qui te permettront d'arriver à tes fins ;

    — Si l'objectif est réellement la gestion de ton club et que ton programme n'est qu'un moyen d'y parvenir, alors peut-être faudrait-il t'orienter vers une petite base de données.

    EDIT : on vient de poster simultanément. Je lis ton code et je te redonne mon avis plus tard.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Hello,

    Avant d'aller plus loin, qu'est-ce qui te pousse vers le C++ pour faire cela ?

    — Si c'est par goût personnel pour le langage, parce que tu y es plus à l'aise, ou parce que le thème est un prétexte pour s'y mettre, pas de problème. Il y a beaucoup de choses en C++ qui te permettront d'arriver à tes fins ;

    — Si l'objectif est réellement la gestion de ton club et que ton programme n'est qu'un moyen d'y parvenir, alors peut-être faudrait-il t'orienter vers une petite base de données.

    EDIT : on vient de poster simultanément. Je lis ton code et je te redonne mon avis plus tard.

    Merci pour ta réponse.
    Pour commencer, j'ai pris le C++ car au début je n'y connaissais rien ( RIEN DU TOUT, LOL), je me suis lancer dans celui ci avec Qt
    comme les resultats etaient encourageant et que le langage n'est pas trop compliqué, j'ai continué
    le programme que j'ai édité fonctionne dans le sens ou il affiche ce que j'ai besoin (certe il y aura de modif a faire)
    je souhaite gérer un club en effet
    Je veux créer mon programme pour plusieur raisons
    1 la fièreté
    2 sa spécificité ( mes points se conmpte pas comme les autres sports)
    3 car si je réussi, je souhaiterai dévellopper d'autre logiciel de gestion tel que les désignations des arbitres, ...

    PS : Ne pas prendre en compte la page 5 ce sont des testes de champs que j'ai oublier d'enlever
    mince alors, j'en oubli la politesse : Bonjour à toi

  5. #5
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,

    Je connais mal Qt, mais ton code semble n'être qu'un IHM vide! ( partie émergée de l'iceberg, mais pas de partie immergée )

    Commence par créer une class 'tireur' avec :
    - ses données membres ( non, prénom, date de naissance, cotisation à jours, séances ( avec séances qui est un tableau de stuctures : struct séance : date, nombre de point ) )
    - ses fonctions membres : constructeur, destructeur, ajout d'une nouvelle séance de tir, sauvegarde dans fichier, chargement de sauvegarde...

    Tu débug ta class dans un petit prog de test en mode console, puis là, tu l'incorpore dans ton IHM...

    PS : utilises les balises code ( c'est l'icone "#" ) pour l'affichage de ton code

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par bertry Voir le message
    Salut,

    Je connais mal Qt, mais ton code semble n'être qu'un IHM vide! ( partie émergée de l'iceberg, mais pas de partie immergée )

    Commence par créer une class 'tireur' avec :
    - ses données membres ( non, prénom, date de naissance, cotisation à jours, séances ( avec séances qui est un tableau de stuctures : struct séance : date, nombre de point ) )
    - ses fonctions membres : constructeur, destructeur, ajout d'une nouvelle séance de tir, sauvegarde dans fichier, chargement de sauvegarde...

    Tu débug ta class dans un petit prog de test en mode console, puis là, tu l'incorpore dans ton IHM...

    Bonjour à toi,

    Alors je suis perdu dans tes explications à partir de : commence, lol
    Je suis novis dans la programmation, j'ai peu etre du rater des étapes dans l'apprentissage car j'ai lu un peu partout sur le met les morceaux de cours que j'ai pu trouver. cela fait 1mois 1/2 que je lis le C++, j'essai de manipuler avec Qt au fur et a mesure que je trouve un cours mais c'est pas evident.

    Donc je vais avoir beaucoup de mal et surtout besoin d'aide de pro.

    L'ébauche de mon programme est vide OUI, il ne fait rien, si on clic sur le bouton valider, rien ne se pas, comme pour tout le reste du programme.
    Je ne connais pas les codes pour les actions lorsqu'un bouton est appuyer.
    Je ne sais pas faire pour que quant des champs sont rempli, l'ordi les mémorise tout au long des années pour me les ressortir en stat quand j'en ai besoin
    comment faire créer un classeur avec toutes les données ...

  7. #7
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Citation Envoyé par argon71 Voir le message
    Je suis novice
    Alors la base en c++ c'est de savoir créer des classes ( mot clé class )
    Commence peut-être par apprendre les bases du langage et tu pourras créer ton logiciel au fur et à mesure de ton apprentissage ( 1 mois 1/2 c'est vraiement le tout début de ton apprentissage!!! )

    Je te conseille cette lecture : Penser en C++ dispo gratos sur ce site en VO et en français...

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Tu veux parler de int, char, bool, unsigned int, double, string, if / else et tout le reste ???

  9. #9
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,
    Citation Envoyé par argon71 Voir le message
    Tu veux parler de int, char, bool, unsigned int, double, string, if / else et tout le reste ???
    Non, ça c'est la base de la base ( le minimum syndical, quoi ), c'est le C de C++. Après, il y a le ++ de C++...

    Donc, sans fanfaronnade aucune, tu ne semble pas connaitre grand chose au C++, il est donc nécessaire que tu commence par apprendre les bases du langage. Tu trouvera tout ce qu'il te faut sur ce site comme sur d'autres.

    Regardes les rubriques livres, tutoriels et faq du site. Et, je me répète, tu peux commencer par le livre Penser en C++ dispo sur ce site, ce sera un bon début...

    Puisque tu ne sembles pas savoir ce qu'est une classe tu peux regarder ( c'est un exemple de ce que tu peux trouver sur la FAQ du site )

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Bon, je vais etre clair avec vous
    je viens de lire le chapitre sur les classes (class) et ... rien compris

    Mais alors RIEN compris

    vous pouvez m'aider ?

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par argon71 Voir le message
    je viens de lire le chapitre sur les classes (class) et ... rien compris Mais alors RIEN compris vous pouvez m'aider ?
    Si tu veux, mais il faut absolument que tu relises tout cela à tête reposée, voire que tu t'offres un bon livre sur le C++ si tu veux t'y mettre car les classes, c'est le noyau de la programmation orientée objet. Ça veut dire que c'est un concept autour duquel tu vas tourner dès la conception de ton programme, avant même de choisir un langage en particulier. En théorie, un modèle bien conçu peut être implémenté dans un langage qui n'est même pas orienté objet lui-même, même si cela implique beaucoup de travail.

    Avant toute chose : sais-tu déjà, ou non, ce qu'est une « structure » en langage C ?

    Il faut comprendre « classe » dans le sens de « classification du règne animal », par exemple. À dire vrai, cet exemple-ci est probablement le plus démonstratif. L'idée, dans un premier temps, est d'organiser toutes les données autour de l'entité à laquelle elles font référence, plutôt que de les laisser dans le vide et de ne se baser que sur les noms de fonctions pour indiquer ce que l'on veut faire.

    Par exemple. Si je veux définir un chat, je vais m'y prendre de cette façon :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Chat
    {
        int        age;        // Âge du chat
        int        taille;     // Longueur du chat
        int        hauteur;    // Hauteur au col 
    };

    Une fois définie de cette façon, cette classe devient automatiquement un nom de type. Je peux ainsi m'en servir pour déclarer des variables de ce type, comme je le ferais avec des types natifs :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        int     x,y,z;
        Chat    i,j,k;

    Chaque instance possède une copie propre des attributs que j'ai déclarés dans la classe Chat :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Chat    azrael;
        Chat    grisou;
        Chat    mistigri;
     
        azrael.age = 8;
        azrael.taille = 50;
        azrael.hauteur = 20;
     
        mistigri.age = 12;
        mistigri.taille = 35;

    Je peux en outre ajouter des « fonctions membres » (ou « méthodes » dans d'autres langages).

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Chat
    {
        int        age;        // Âge du chat
        int        taille;     // Longueur du chat
        int        hauteur;    // Hauteur au col 
     
        void      Miauler ();
        void      Dormir ();
    };

    Le code de ces deux fonctions membres n'existe bien sûr qu'une seule fois en mémoire, mais comme il est sémantiquement lié à l'objet « Chat », la fonction membre appelée reçoit automatiquement un pointeur sur l'instance concernée comme si je l'avais passée en paramètre. Ainsi plutôt qu'appeler une fonction globale du style :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
        ChatMiauler (mistrigi);

    Je vais appeler la méthode associée à l'objet :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
        mistigri.Miauler();

    L'avantage de cette manière de faire est que sur le plan technique, ces deux approches vont être compilées de manière identique. Par contre, sur le plan sémantique, on a l'impression de demander au chat lui-même de miauler, on implique que le fait de miauler est en soi une propriété du chat, et on introduit automatiquement la notion d'espace de nommage : comme la fonction-membre fait partie de la classe Chat, je peux réutiliser le même nom dans une autre classe. Dans le cas de Miauler(), ça n'a pas beaucoup d'intérêt, mais dans le cas de Dormir(), par exemple, c'est beaucoup plus intéressant que d'avoir à écrire une fonction au niveau global pour chaque type d'animal :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Chat    grisou;
        Chien    sultan;
     
        grisou.Dormir();
        sultan.Dormir();

    Ces deux fonctions membres sont complètement distinctes, mais la politique de nommage peut rester la même.

    Tout ceci nous amène à un pilier de la P.O.O., celui-là même qui a fait que les « classes » portent ce nom : l'héritage.

    À partir du moment où tu as défini ce qu'était un Chat, tu peux reprendre l'existant pour créer une sous-classe dérivée de Chat, par exemple : ChatAngora.

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class ChatAngora : public Chat
    {
        int     longueurdespoils;
    };

    En écrivant ceci, je déclare que ChatAngora est implicitement un Chat, avec des caractéristiques supplémentaires. Ainsi je peux écrire :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        ChatAngora brigand;
     
        brigand.age = 9;
        brigand.taille = 36;
        brigand.hauteur = 17;
        brigand.longueurdespoils = 3;
        brigand.Dormir();

    … alors que je n'ai défini que « longueurdespoils ». Tout le reste est hérité de la classe Chat dont la classe ChatAngora descend.

    Dans l'autre sens, on pourrait très bien imaginer que Chat découle de Mammifère, découlant elle-même de Vertébrés, dérivant de ÊtreVivant. Dans cette dernière, tu pourrais définir l'ADN, par exemple.

    Deux avantages immédiats :

    1. tu peux très facilement réutiliser l'existant, même si celui-ci n'a pas été prévu pour à la base ;
    2. Même si un Chat n'est pas forcément un ChatAngora, un ChatAngora est forcément un Chat, et tu l'as déclaré de façon très explicite au compilo. Ça veut dire que tu pourras utiliser un objet ChatAngora avec toutes les fonctions utilisant Chat, écrites auparavant et déjà compilés, mêmes si elles ne peuvent savoir ce qu'est un ChatAngora. Elles se contenteront d'utiliser les attributs définis dans Chat exclusivement, mais cela fonctionnera quand même.


    C'est aussi pour cela que les classes sont nommées ainsi : chaque fois que tu définis un objet, toi ou quiconque pourra toujours le dériver en une (grande) famille de sous-objets, donc une « classe » dans le sens où on l'entend communément en français.

    Voila, ce n'est qu'un aperçu de ce qu'offre la programmation orientée objet en général, et il y a bien d'autres concepts à voir à côté, comme l'encapsulation, le polymorphisme, le code générique, et tout ce qui en découle, mais tu auras bien le temps de voir tout cela à ton rythme.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Merci pour tes grandes explications, je commence a comprendre

    Si j'ai bien compris une classe c'est comme un plan d'architecture et un objet c'est la maison qui sera construt grace à cette classe (plan)

    On y intègre les variables (attributs) et les fonctions (méthodes)

    Rassurez moi, ce que j'ai lu tout l'après midi, ca correspond bien a ca ???

    Si j'ai compris le principe alors je peux continué dans ma lecture

    Dans mon projet, chaque champs doit etre donc inséré en variable comme par exemple : string nom, string prenom, int score ...

    Rassurez moi !!!

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Je change légèrement de sujet ( apprentissage ) pour en revenir à mon logiciel.

    J'ai trouver un petit truc sur le net que j'ai adapté et ca marche sur Qt ce serait une aide pour moi.
    En lancant le main.cpp de QT, il créer un fichier dans lequel il écrit des données

    Petit bémol, à chaque fois que je lance Qt il efface le fichier pour en créér un autre. Seulement je voudrais savoir comment faire pour qu'à chaque fois que je lance Qt il écrive les données à la suite (sans ecraser)

    Voici le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
     
    int main()
    {
        string const nomFichier("C:/Documents and Settings/Micke/Bureau/scores.txt", ios::app);
     
        ofstream monFlux(nomFichier.c_str());
     
        if(monFlux)
        {
            monFlux << "Noms et prénom des tireurs" << endl;
            monFlux << 4245 << endl;
            int age(27);
            monFlux << "J'ai " << age << " points." << endl;
        }
        else
        {
            cout << "ERREUR: Impossible d'ouvrir le fichier." << endl;
        }
        return 0;
    }
    ------- voila, il semblerai que la partie : , ios::app); ne permette pas d'écrire a la suite

    Cet exemple pourrai vraiment m'aider à comprendre et à affiner mes recherches sur le mode de fonctionnement de mon programme

    Merci d'avance.

  14. #14
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    , ios::app est une option de mode d'ouverture de fichier, qu'il faut passer en paramètre au constructeur du flux. Là, tu le passe en paramètre au constructeur de la chaîne de caractère qui contient le nom du fichier...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ofstream monFlux(nomFichier.c_str(),ios::app);
    Mais c'est assez rarement utile (sauf pour des fichiers de log). On préférera généralement tout relire et tout réécrire, ou pour de trop gros fichiers utiliser des fonctions non standard plus complexes à utiliser mais plus performantes. Et pour ce genre de projets, même si on décide de le faire en C++, on délèguera probablement ce genre de traitements à une biblitohèque spécialisé de base de données.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    COOL !!! merci ca fonctionne c'est déjà un bon début car a chaque fois que je lance le petit programme il réécrit les phrases a la suite. génial c'est un bon début

    maintenant, est-il possible de lié ces deux programmes de QT (le 1er que j'ai publié avec selui ci ?

    pouvez vous me faire un petit programme comprenant juste 2 champs ( nom et prénom) et deux bouton (valider et quitter)
    A chaque appui sur le bouton valider, il écrit comme précédement sur le fichier en mettant les données l'une a la suite de l'autre???

    car je n'arrive pas à comprendre comment lier les bouton à l'action d'enregistrement des données ( j'ai compris uniquement pour le bouton QITTER)

    Avec votre aide je pourrai comprendre comment lier ces boutons au actions.
    merci

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <QApplication>
    #include <QLineEdit>
    #include <QPushButton>
    #include <QVBoxLayout>
    #include <QFormLayout>
     
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        QWidget fenetre;
     
        // Création du layout de formulaire et de ses widgets
     
        QLineEdit *nom = new QLineEdit;
        QLineEdit *prenom = new QLineEdit;
     
        QFormLayout *formLayout = new QFormLayout;
        formLayout->addRow("Votre &nom", nom);
        formLayout->addRow("Votre &prénom", prenom);
     
        // Création du layout principal de la fenêtre (vertical)
     
        QVBoxLayout *layoutPrincipal = new QVBoxLayout;
        layoutPrincipal->addLayout(formLayout); // Ajout du layout de formulaire
     
        QPushButton *boutonValider = new QPushButton("Valider");
        QPushButton *boutonQuitter = new QPushButton("Quitter");
        QWidget::connect(boutonQuitter, SIGNAL(clicked()), &app, SLOT(quit()));
        layoutPrincipal->addWidget(boutonValider); // Ajout du bouton
        layoutPrincipal->addWidget(boutonQuitter); // Ajout du bouton
     
        fenetre.setLayout(layoutPrincipal);
     
        fenetre.show();
     
        return app.exec();
    }
    Maintenant c'est le VALIDER qui me pose problème, pouvez vous m'aider pour que lorsque l'on clic sur valider, il enregistre les données sur un fichier txt comme pour mon précédent programme, l'une a la suite de l'autre ?

    Merci

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Voila, j'ai bien avancé et j'ai réussi à faire ce que je voulais a savoir que dès que je cliquai sur un bouton (valider / enregistrer ou envoyer) il créer un fichier txt dans lequel il inscrit les données renseignées

    voici un bout du programme mais petit souci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    //fenetre.cpp
    #include "fenetre.h"
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
     
    MaFenetre::MaFenetre():QWidget()
    {
      setWindowTitle("Registre");
      setWindowIcon(QIcon("logo.png"));
     
      QLabel *titre = new QLabel("<center><strong>Formulaire à remplir</strong></center>");
      QLineEdit *nom = new QLineEdit;
      QLineEdit *prenom = new QLineEdit;
      QSpinBox *age = new QSpinBox;
        age->setSuffix(" ans");
        age->setRange(18, 80);
      QFormLayout *layoutCoord = new QFormLayout;
     
      layoutCoord->addRow(titre);
      layoutCoord->addRow("Votre &nom : ", nom);
      layoutCoord->addRow("Votre &prénom : ", prenom);
      layoutCoord->addRow("Votre â&ge : ", age);
     
      QPushButton *aide = new QPushButton("aide");
      aide->setCursor(Qt::PointingHandCursor);
      aide->setToolTip("ce bouton vous affiche une aide");
     
      QPushButton *about = new QPushButton("a Propos");
      about->setCursor(Qt::PointingHandCursor);
      about->setToolTip("ce bouton vous affiche la personne ayant fait ce logiciel");
     
      envoyer = new QPushButton("envoyer");
      envoyer->setCursor(Qt::PointingHandCursor);
      envoyer->setToolTip("ce bouton vous permet d'envoyer vos données");
      envoyer->setEnabled(false);
     
      QPushButton *quitter = new QPushButton("quitter");
      quitter->setCursor(Qt::PointingHandCursor);
      quitter->setToolTip("ce bouton vous permet de fermer l'application");
     
      QGridLayout *layoutBouton = new QGridLayout;
     
      layoutBouton->addWidget(aide, 0, 0, 1, 1);
      layoutBouton->addWidget(envoyer, 0, 1, 1, 1);
      layoutBouton->addWidget(quitter, 0, 2, 1, 1);
      layoutBouton->addWidget(about, 1, 0, 1, 3);
     
      QFormLayout *layoutPrinc = new QFormLayout;
      layoutPrinc->addRow(layoutCoord);
      layoutPrinc->addRow(layoutBouton);
     
      setLayout(layoutPrinc);
     
      QObject::connect(aide, SIGNAL(clicked()), this, SLOT(messageAide()));
      QObject::connect(quitter, SIGNAL(clicked()), qApp, SLOT(quit()));
      QObject::connect(envoyer, SIGNAL(clicked()), this, SLOT(messageEnvoyer()));
      QObject::connect(about, SIGNAL(clicked()), this, SLOT(messageAbout()));
      QObject::connect(nom, SIGNAL(textChanged(QString)), this, SLOT(retenirNom(QString)));
    }
     
    void MaFenetre::retenirNom(QString valeurNom)
    {
      if(valeurNom.length()!=0)
      {
        envoyer->setEnabled(true);
      }
      else
      {
        envoyer->setEnabled(false);
      }
    }
     
    void MaFenetre::messageAide()
    {
      QMessageBox::information(this, "aide", "Il faut remplir les différents champs : <br /><strong>- nom<br />- prénom<br />- âge<br /></strong>et cliquer sur Envoyer");
    }
     
    void MaFenetre::messageEnvoyer()
    {
        QMessageBox::critical(this, "envoyer", " Les données ont bien été envoyées. <br /><strong>- nom<br />- prénom<br />- âge<br /></strong>");
     
        {string const nomFichier("C:/Documents and Settings/Micke/Bureau/scores.txt");
     
            ofstream monFlux(nomFichier.c_str(),ios::app);
     
            if(monFlux)
               {
                    monFlux << "Le nom est : " << nom << endl;
                    monFlux << "Le prénom est : " << nom << endl;
                    monFlux << "Cette personne a " << age << " ans." << endl;
               }
               else
               {
                   cout << "ERREUR: Impossible d'ouvrir le fichier." << endl;
               }
        }
    }
     
    void MaFenetre::messageAbout()
    {
      QMessageBox::about(this, "a Propos", "Ce logiciel a été réalisé par<br /><strong>Micke</strong>");
    }
    Voila ce que ca donne :

    Le nom est : 0x22fe9c
    Le prénom est : 0x22fe9c
    Cette personne a 0x410ad1 ans.

    Qui peut m'aider et me dire comment mettre les données réelle et non le lieu ou elle sont stockée ???
    merci

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Je vais peut être dire une grosse bêtise (ça fais un long moment que je n'ai plus fais de C++)
    Pour afficher la valeur du pointeur et non pas son adresse, il faut faire précéder le pointeur de l'opérateur *
    Donc:
    *nom
    à la place de
    nom

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    merci pour ton aide mais j'ai déja essayer, je lis et relis le cours sur les pointeurs et la je cale

    j'avance plus

  20. #20
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Les flux savent afficher les données de certains types. Par exemple ils n'ont aucun problème avec un char, un int, un char *, un string...

    Par contre, là, tu leur demande d'afficher un QLineEdit*, et ça, ils ne connaissent pas. Je présume que QLineEdit possède une fonction membre genre text ou value, ou un nom de ce type, qui retourne une chaîne de caractère. Donc dans l'idéal, il faudrait faire quelque chose comme cout << name->text();.

    Sauf que Qt a décidé de ne pas utiliser les chaînes de caractère standard, et je ne sais pas s'ils ont fait ce qu'il faut pour que leurs chaînes de caractère soient compatibles avec les flux. Donc, si ça ne marche pas, il faut convertir d'une manière ou d'une autre ces chaînes en std::string et afficher le résultat. Je te laisse regarder dans la doc de Qt comment faire ces diverses opérations.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Création d'un logiciel de gestion des bulletins de notes de notre Lycée
    Par cheickssy dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 31/07/2006, 13h49
  2. Logiciel de gestion à distance
    Par arnaud_verlaine dans le forum Applications
    Réponses: 9
    Dernier message: 30/01/2005, 14h42
  3. Réponses: 4
    Dernier message: 07/10/2004, 20h42
  4. Réponses: 1
    Dernier message: 17/06/2004, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo