Générer un classement

Bogorno Messages postés 16 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 avril 2007 - 1 avril 2007 à 16:02
Bogorno Messages postés 16 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 avril 2007 - 6 avril 2007 à 06:36
Bonjour,
Je suis débutante et je voudrai faire une application capable de générer le classement d'une course.
1- Entrée des données des courreurs:
Nom
Numéro
Points dans le round 1
Points dans le round 2
2- L'application calcule le total de point de chaque courreur

3- On génère le classement du plus petit au plus grand nombre de point

4- On print et on sauvegarde

5- Je souhaiterai avoir la possibilité de charger un ancien classement

Je ne sais pas dans quoi mettre les données pour les trier et pour que je puisse les sauvegarder et les charger à volonté... Toute aide sera fortement apprécié.

Merci beaucoup.
Rita

13 réponses

BLUEBIBUBBLE Messages postés 116 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 10 avril 2013 1
1 avril 2007 à 22:34
Regarde si ce source peut d'aider un peu, il faudra peut-être changer l'ordre de tri et quelques bricoles...http://www.rph-concept.com/download/classement.zip
0
Bogorno Messages postés 16 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 avril 2007
1 avril 2007 à 23:03
Merci Bluebibubble mais l'ouverture dans Visual Studio 2005 me donne un message d'erreur concernant Module1.bas qui est manquant.
D'ou vient ce zip?
Merci.
Rita
0
BLUEBIBUBBLE Messages postés 116 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 10 avril 2013 1
2 avril 2007 à 00:05
Effectivement Module1.bas etait manquant, j'ai mis à jour le zip.
0
Bogorno Messages postés 16 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 avril 2007
2 avril 2007 à 02:12
Hey merci bien Bluebibubble!
Si je comprends bien tu as réalisé mon application pour l'occasion.
Le passage à Visual Studio 2005 fait en sorte que certains éléments doivent être changé cependant j'espère bien en venir à bout!
Petite question: à quoi sert dans la Private Sub FrmMain_Resize  le -10 * 15 et le -50 * 15 ?
Merci encore pour ton aide.
Rita
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BLUEBIBUBBLE Messages postés 116 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 10 avril 2013 1
2 avril 2007 à 16:15
C'est pour redimensionné la listview a la taille de la fenètre, moins 10 pixels en X, et moins 50 pixels en Y, sinon la listview n'est pas totalement visible.

(Pixel*15=twips sur 99% des systemes)

Note: Il est préférable d'écrire:
LV.Move 0, 0, Me.Width - 10 * Screen.TwipsPerPixelX, Me.Height - 50 * Screen.TwipsPerPixelY

Screen.TwipsPerPixelX et Screen.TwipsPerPixelY retourne 15 sur un écran standard.
0
BLUEBIBUBBLE Messages postés 116 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 10 avril 2013 1
2 avril 2007 à 16:39
J'ai modifié Module1.bas, il manquait dans la sub de tri les lignes:

            M = Datas(i).Number
            Datas(i).Number = Datas(j).Number
            Datas(j).Number = M

Pas vu de suite que les joueurs ont un numero, je l'ais rajouté par la suite de partout... sauf sub de tri !!! 
0
Bogorno Messages postés 16 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 avril 2007
2 avril 2007 à 18:40
Je continue à décortiquer ton code.
Après l'import dans VS 2005, j'ai baissé la position de la LV car elle cachait le menu.
Je regarde aussi pour intéger l'impression du classement.  Et finalement, la possibilité de modifier une entré après une erreur.

Grace à cela je progresse bien!
Merci encore.
Rita
0
Bogorno Messages postés 16 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 avril 2007
3 avril 2007 à 04:18
Pourrais-tu me détailler la private sub QShort svp?
Je ne comprends pas comment tu fais l'ordre décroissant.
Désolé...
Merci.
0
BLUEBIBUBBLE Messages postés 116 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 10 avril 2013 1
3 avril 2007 à 11:41
Le principe est assez simple, on appelle QShort avec comme params l'index min et l'index max,
puis Qshort compare les extrémités de la liste avec la valeur centrale et croise (swap) ce qui doit l'être. Ensuite QShort s'apelle lui même (récursivité) jusqu'a ce que toute la liste soit triée. C'est bien plus rapide qu'un tri a bulle dès que la liste s'allonge un peu...
L'algo s'appelle 'MergeShort' parfois aussi appeler QuickShort (d'ou QShort), des recherches avec ces mots clefs vont te faire atterir sur des sites qui décrivent l'algo en long et en large, par example:
http://en.wikipedia.org/wiki/Mergesort

Voila pour trier dans l'ordre croissant (les lignes modifiées sont marquées *):

Private Sub QShort(L As Long, R As Long)
    Dim i As Long, j As Long, X As Long, Tmp As String, M As Long    i L: j R: X = Datas((R + L) \ 2).Total
    Do
        Do While Datas(i).Total < X: i = i + 1: Loop   '* Skip
        Do While Datas(j).Total > X: j = j - 1: Loop   '* Skip
        If i <= j Then
            Tmp = Datas(i).Nom                                  'Swap les données
            Datas(i).Nom = Datas(j).Nom
            Datas(j).Nom = Tmp
            M = Datas(i).Number
            Datas(i).Number = Datas(j).Number
            Datas(j).Number = M
            M = Datas(i).Round1
            Datas(i).Round1 = Datas(j).Round1
            Datas(j).Round1 = M
            M = Datas(i).Round2
            Datas(i).Round2 = Datas(j).Round2
            Datas(j).Round2 = M
            M = Datas(i).Total
            Datas(i).Total = Datas(j).Total
            Datas(j).Total = M
            i = i + 1
            j = j - 1
        End If
    Loop Until i > j
    If L < j Then Call QShort(L, j)
    If i < R Then Call QShort(i, R)
End Sub
0
Bogorno Messages postés 16 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 avril 2007
4 avril 2007 à 03:07
Avec le lien de Wikipedia j'ai bien compris la méthode.
Pour ce qui est de la partie 'Swap les données  je suis dans la brume...

J'ai voulu essayer d'ajouter une colonne suplémentaire dans la listview cependant je ne vois pas à quel endroit le titre de la colonne s'affiche, j'aimerai en même temps donner une largeur spécifique.
Je pense avoir compris pour l'affichage des données d'ailleurs j'ai ajouté une colonne round3. Le total se met à jour mais la colonne ne s'affiche pas dans la LV...

Purée que je peine!

Merci encore pour ton aide!
0
BLUEBIBUBBLE Messages postés 116 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 10 avril 2013 1
4 avril 2007 à 09:39
Dans la FrmMain, sélectionner le control ListView, puis propriétés:
DoubleClick sur CUSTOM, puis l'onglet 'Column Headers' et enfin 'Insert column'
Là c'est possible de modifier le titre et la largeur...

Dans le module (Sub RefreshLV) mettre a jour:


        li.SubItems(3) = Datas(i).Round2
        li.SubItems(4) = Datas(i).Round3
        li.SubItems(5) = Datas(i).Total

Pour le Swap des donnée, il s'agit de 'croisés' les valeurs de Datas(i) et de Datas(j):
on ne peut pas croisé directement toute la structure, il faut croisé chaque éléments de la structure

            Tmp = Datas(i).Nom                  'Croise les noms
            Datas(i).Nom = Datas(j).Nom
            Datas(j).Nom = Tmp

            M = Datas(i).Number                  'Croise les numeros
            Datas(i).Number = Datas(j).Number
            Datas(j).Number = M

            ....                                                'Etc... (Ne pas oublier de 'croiser' Round3)
0
Bogorno Messages postés 16 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 avril 2007
5 avril 2007 à 03:31
Je comprends mieux le swap maintenant merci!

Pas de problème pour ajouter des colonnes, tout s'affiche correctement. Le total se fait correctement lui aussi.
J'ai modifié FrmMain en ajoutant 2 TabControl, dans le premier j'entre les données relatives aux participants et dans l'autre j'ai mis la LV.  Tout marche bien également. Merci encore car tout cela c'est grâce à tes explications! 

Pour la prochaine étape je voudrais faire une action si le total de plusieurs concurants est identique.
En fait les ex aequo sont départagés par leur nombre de 0.
Si A a 10 pts (dont 4 zéros) et que B a 10 pts aussi (mais 6 zéros), le premier sera B et le deuxième ex aequo sera A.
Je verrai bien une boîte de dialogue qui s'ouvrirait en disant A et B sont ex aequo, veuillez entrer leur nombre de zéro. Et ainsi de suite pour tous les ex aequo, puis le classement se mettrait à jour.

Je comptait insérer un test dans le swap mais ça plante maintenant.

Encore merci pour ton aide! 
0
Bogorno Messages postés 16 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 avril 2007
6 avril 2007 à 06:36
Une fois le classement fait dans la LV, comment aller tester si il y a des totaux identiques?
0
Rejoignez-nous