TP5 : La structure de Bucket
(suite et fin )


Troisième partie : (en vrac ce que veut l'utilisateur final !)

Voici comment un utilisateur moyen formule ce qu'il attend de vous :

Je veux pouvoir charger un fichier qui contient des objets.
Le format d'un fichier est :

la première ligne contient l'OID en ASCII
la seconde ligne contient la clé en ASCII
la troisième ligne contient le descriptif de l'objet

et ainsi de suite ...

Je ne connais pas à l'avance combien il y en a pas plus que la valeur de clé maximale.
C'est en ASCII parce que je veux pouvoir les saisir à la main
avec un éditeur de texte pour tester ce que vous avez fait.

Je veux que vous fassiez une fonction qui ouvre un fichier dont j'aurais saisis
le nom préalablement et qui me compte le nombre d'objets du fichier.
Je veux que vous faisiez ensuite une fonction de chargement dans un
tableau correctement dimensionné.

Une fois en mémoire je veux pouvoir modifier un objet si je veux
en donnant un OID.
S'il n'existe pas le programme m'averti sinon
je dois pouvoir faire la modif que je veux.
Je veux pouvoir aussi ajouter un nouvel objet s'il n'existe pas déjà.
Idem suppression.
Si j'ajoute un nouvel objet je veux etre averti avant toute saisie
si j'ai encore la place pour cela.
Je n'ai pas envie de faire de ma saisie pour rien.
Si ce n'est pas possible, votre programme devra
me proposer de faire une sauvegarde, si j'accepte, la sauvegarde
se fera dans un fichier dont je donnerai le nom puis le programme
se terminera proprement.
Il faudra donc réserver un peu de place en plus pour ajouter des objets
à la main.
Quatre objets en plus me semble un maximum, c'est juste pour tester.

Il faudra donc penser à ré-écrire sur disque les objets, mais seulement à
ma demande, en cas de modification (ajout ou suppression ou modif)
mais surtout pas dans le même fichier.
Mais le nom doit être proche.
La date et l'heure c'est peut être un bon complément d'information à ajouter au premier nom de fichier
dans ce cas de figure.
Trouvez la bonne fonction C pour recupérer la date et l'heure du système.
(c'est sur le site de NF16 !)
Ensuite générez le nom de fichier en fonction du nom de départ et de la date.
Jour, heure, minutes et secondes seront suffisant en plus du nom de départ.

Je veux pouvoir ranger les objets dans la structure de bucket tous d'un coup
quand je le désire.
Si je l'ai déjà fait je veux que le programme m'avertisse.

Si j'en change un objet  je veux qu'il se retrouve dans le bucket
à la bonne place.
Mais je ne veux pas pouvoir modifier
l'OID seulement la clé.

Le fichier peut être corrompu.
Car je peux avoir deux OID identiques.
Peut-etre que cela pourrait etre vérifié au moment où on compte les objets.
Dans ce cas on ferme le fichier et on avertit l'utilisateur.

Je veux pouvoir trier mes objets par ordre croissant de clé.
Et les stocker ensuite dans un fichier dont je  donnerai le nom
au programme. Cette fois-ci sans date et heure en plus.

Au fait expliquez-moi à quoi cela sert le bucket.
Comment vous l'utilisez pour trier.
Quels sont les avantages et les inconvénients ?
Quelles sont les complexités pour les opérations de bases ?
Quelles sont ces opérations de base ?
Et pour ranger les données initiales ?
Et pour trier ?

Comment générer les données pour tester ?

Exemple : vous etes le compte NF16023
calculez 23 modulo 17
résultat = 6
Je suppose pour l'exemple que vos prénoms sont respectivement alter  et go

Créez ensuite le fichier
23
10
NF16023 alter et go

Ensuite envoyez le fichier par mail à d'autres groupe de NF16.

Vous recevrez aussi des mails.
Extrayez les 3 lignes (ou le fichier) et rangez les dans un fichier temp.data
ensuite fusionnez ce fichier avec celui ou ceux que vous avez déjà reçu à
l'aide de la commande
cat fic_1 fic_2 > fic_3

Il y a actuellement 70 groupes en NF16 mais vous pouvez en inventer d'autres !
Il faut que la valeur de clé soit comprise entre 0 et 16.
Pour le reste, c'est comme vous voulez, si vos programme sont corrects les OID
doublons seront détectés.
(Au fait un petit plus : sortir automatiquement un petit fichier avec les lignes du fichier lu où
il y a des doublons pour pouvoir ensuite les supprimer avec un editeur de texte, se serait un petit plus
qui vous serait peut-etre utile ? Est-ce difficile à faire  compte tenu des briques de base que
je vous ai obligé de construire ?)

Voila !

Conseils :

Tirez ce cahier des charges mal fichu sur papier.
Prennez un autre papier et un crayon.
Essayez de structurer les demandes de l'utilisateur par rubrique/thème.
Trouvez les incohérences.
Trouvez les informations qui manquent par rapport aux objectifs.
Y-a-t-il de l'information implicite ? Si oui laquelle ?
Reformulez un cahier des charges propre point par point (lecture de fichier, sauvegarde, modification, etc.)