Bonjour
je cherche a faire un programme genre repertoire telephonique
mais j'ai pas d'exemple et je sais pas comment faire , je suis debutant merci si avez des conseils
Bonjour
je cherche a faire un programme genre repertoire telephonique
mais j'ai pas d'exemple et je sais pas comment faire , je suis debutant merci si avez des conseils
Dernière modification par Bktero ; 12/07/2013 à 01h14. Motif: Titre qui ressemble à un titre...
Bonjour je te conseilles les étapes suivantes :
1- Lire un tutoriel sur le C si ce n'est pas déjà fait ;
2- Noter sur un bout de papier toutes les fonctionnalités que devra avoir ton annuaire ;
3- Réfléchir à comment tu pourras le coder et commencer à le coder ;
4- En cas de problème, regarde la FAQ C, recherche un peu sur google, en bref, recherche la réponse ;
5- En cas de bugs, utilise un débogueur pour avoir un maximum d'informations ;
6- Si tu ne trouves vraiment pas (ou que tu n'arrive pas à utiliser un débogueur), demande nous en nous donnant un maximum d'indications (ce que tu as essayé de faire, ce qui te bloque, le message d'erreur, le code, etc...)
1- La première chose à faire est de préciser ton objectif : qu'est ce que tu veux stocker comme données dans ton répertoire, le nombre d'entrées du répertoire (maximum défini ou non), ses fonctionnalités (ajout/suppression d'une entrée, recherche d'un nom, sauvegarde/chargement sur disque des données, opérations de tri, ...).
2- La deuxième étape est de choisir une représentation des données dans ton programme. C'est une étape essentielle parce qu'elle conditionne le code que tu seras amené à écrire et selon ton choix, il sera simple et clair ou inutilement compliqué et ésotérique.
Un choix doit être fait pour la représentation des différentes informations concernant une entrée du répertoire. Par exemple, le nom de la personne sera évidemment stocké dans un tableau de char mais si on utilise un tableau de taille fixe, cela limitera la longueur possible des noms qu'on peut stocker et pour les noms courts, la place excédentaire est perdue. On peut choisir d'allouer dynamiquement ce tableau à la taille juste nécessaire à chaque nom, ce qui complique un peu le programme...Si on a une propriété définissant une catégorie (famille, amis, travail, fournisseurs,...) on peut penser à une énumération. etc.
Ces choix faits, une entrée du répertoire sera (probablement) représentée par une structure permettant d'accéder à toutes les informations associées à une entrée.
Ensuite, on devra représenter le répertoire comme une collection de ces structures. Il y a plusieurs choix possibles, par exemple, un tableau de ces structures ou une liste chainée. Selon la forme de la collection choisie, des inconvénients et des avantages sont mis en évidence en considérant les fonctionnalités qui doivent être implantées dans le programme et certaines opérations sont plus ou moins simples.
3- Ces choix faits, on est amené à structurer le programme en différentes fonctions (qui seront écrites plus tard) en définissant ce qu'elles doivent faire, quels sont leurs paramètres... On peut être conduit à revenir sur la structure des données si dans cette étape on détecte quelque chose qui ne colle pas bien.
4- La partie intéressante de la programmation est maintenant terminée et il ne reste plus qu'à pondre le code qui découle directement des choix qui viennent d'être faits. On peut commencer à écrire le programme en commençant par les fonctions les plus basiques, ce qui permet de les tester indépendamment, avant de passer aux fonctions utilisant les précédentes (réputées bonnes) et de les tester et ansi de suite.
Pour aider un peu le P.O. sur différentes façons de stocker des données..
- CSV (pas très dur à coder mais peut-être moins souple)
- XML (libxml2)
- Base de données (à voir selon le type de SGBD)
- Format personnalisé ?
- Autres ....
Les choix ne manquent pas mais il faut que tu définisse cela dès le départ comme l'a précisé Diogene car ce choix entrera directement en compte sur la bibliothèque (ou les) que tu devras utiliser avec ton programme et que tu devras aussi étudier
Un petit tutoriel sur de la récupération de données depuis un fichier, sur trois type de structure différentes: http://franckh.developpez.com/articles/c-ansi/parsing/
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Bonjour a tous
j'ai commencer un code mais je sais pas quoi mettre comment arguement dans Void creation_fichier()
que je veux faire c'est de crée le fichier et ensuite que l'utilisateur rentre les données
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 <stdio.h> #include <stdlib.h> #include <string.h> // Structure typedef struct { char nom[15]; char prenom[15]; char tel[10]; } personne; // Fonctions void creation_fichier() { } int main() { return 0; }
Bin peut-être une chaîne contenant le nom du fichier par exemple
Vu que ton projet est de créer un répertoire téléphonique, à ta place je testerais l'ouverture du fichier et si l'ouverture échoue alors oui, lui faire créer le fichier. Je dit ça parce que sinon ton répertoire sera toujours... vide![]()
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
j'ai fait ça j'ai compris pour les arguments en tout le fichier se crée ...
comment mettre l'extension txt quand le fichier est crée .
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 #include <stdio.h> #include <stdlib.h> #include <string.h> // Structure typedef struct { char nom[15]; char prenom[15]; char tel[10]; } personne; // Fonctions void creation_fichier(FILE*f,char*n) { printf("**Creation du fichier**\n\n"); printf("Saisir un nom pour le fichier ( mettre .txt): "); gets(n); fflush(stdin); f=fopen(n,"w"); } int menu(void) { int choix =0; while(choix < 1 || choix > 4) { printf("------- Repertoire 2013-------\n"); printf("1 :Nouveau fichier \n"); printf("2 :Ajouter un nom \n"); printf("3 :Lire un nom\n"); printf("4 :Quitter\n"); printf("Votre choix ?"); scanf("%d",&choix); fflush(stdin); } return choix; } int main (void) { FILE * fichier; char nom[10]; switch (menu()) { case 1: creation_fichier(fichier,nom); break; } return EXIT_SUCCESS; }
Il faut le faire avant sa création, tu dois concaténer ta chaîne contenant le nom du fichier avec l'extension en utilisant strcat. Faut tout de même prendre en compte la longueur de l'extension (en générale 4 caractères pour une extension à trois lettres plus le point) et faire en sorte que ta chaîne comporte un espace suffisant.
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
merci mais comment écrire ?
En tapant au clavier ?![]()
Non sérieusement, si tu choisi 1 dans ton menu tu donne un nom de fichier ou bien c'est toujours le même ? Si c'est le cas alors ça coule de source
Sinon, si tu propose d'entrer un nom de fichier, une fois celui-ci dans la variable tu fait juste
Par contre fait en sorte que ta chaîne soit toujours assez grande pour contenir LE nom du fichier ET l'extension sans quoi bin comportement indéterminé ton programme risquera fort de ne pas faire ce que tu souhaites, je le répète peut-être mais c'est très important, on me répète jamais assez ici
Code : Sélectionner tout - Visualiser dans une fenêtre à part strcat (ta_variable_contenant_le_nom_du_fichier, ".txt");
Mais sérieusement, si tu as lu le lien que je t'ai mis de la fonction strcat, tu aurais du savoir le faire, il faut que tu y mette un peu plus du tiens sans quoi tu n'apprendra pas vite et bien d'autant plus qu'elle est simple à utiliser et la page man dit tout ce qu'il faut savoir![]()
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
merci de ta réponse
donc j'ecris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part strcat (n, ".txt");
Oui. J'ai pu voir que tu ne réserves que 10 char pour le nom du fichier, est-ce un nom unique ou tu donneras le choix à l'utilisateur ?
Cela à son importance dans la mesure où un utilisateur entre le nom qu'il veut et donc, peut très rapidement passer au-delà des limites du tableau.
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Bonjour
j'ai commennce a crée une fonction pour va permettre d'ajouter les données d'une personne dans un fichier
je voudrais faire c'est quand une utilisateur saisie le nom de fichier pour l'ouvrir , je voudrais faire en sorte que si il se trompe dans le nom cela crée un message d'erreur .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void ajouter(FILE*f,char*n) { printf("**Ajouter une personne **\n\n"); printf("Saisir le nom du fichier:"); gets(n); fflush(stdin); f=fopen(n,"a"); printf("** Saisie d'une fiche**\n\n");
Allons lire ensemble le fabuleux manuel de fopen !
Dans tout cela, tu te rendra compte que le flag "r" seul ne fera qu'ouvrir SANS créer.
Donc : tu dois essayer d'ouvrir avec "r", et si fopen te renvoie NULL, alors l'ouverture a échoué.
Si l'ouverture a réussi, tu ne peux que lire, donc tu dois faire un fclose, et refaire un fopen avec les flags qui t'intéressent.
Ca c'est la méthode "ultraportable".
--
Metalman !
Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
(ANSI retire quelques fonctions comme strdup...)
L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
Et s'assurer que la logique est bonne "aussi" !
Ma page Developpez.net
Désolé je sais pas bien lire l'anglais
Dernière modification par Invité ; 18/07/2013 à 17h47. Motif: Citation message précédent entier inutile
Nous disposons des pages en français chez nous : http://man.developpez.com/man3/fopen.3.php
Utilise les pages de manuels de chez nous, elles sont en français![]()
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Et chercher une page de manuel de fopen() en français être très compliqué ?
--> http://man.developpez.com/man3/fopen.3.php
Au passage :
- gets(), c'est mal !!! http://c.developpez.com/faq/?page=bo..._gets_vs_fgets et http://gradot.wordpress.com/2013/05/...-programmes-c/
- fflush(stdin), c'est pas très bien http://c.developpez.com/faq/?page=cl...S_fflush_stdin
- la fonction prend un FILE* mais tente d'ouvrir un fichier en demandant le nom de ce fichier, ce n'est pas logique. Il devrait y avoir une fonction d'ouverture du fichier qui rend un FILE* et ce FILE* sert pour la fonction ajouter().
merci
c'est pas evidement pour avoir d'apprendre , je suis une personne handicapé en fauteuil roulant.
Bonjour
je suis sais pas comment faire pour afficher la liste des noms de mon fichier une fois crée ni de faire la fonction rechercher je suis perdu
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 // Include des Librairies #include <stdio.h> #include <stdlib.h> #include <string.h> // Structure pour le nom,prenom et télephone typedef struct { char nom[15]; char prenom[15]; char tel[10]; } personne; // Fonction pour la creation du fichier avec son extension void creation_fichier(FILE*f,char*n) { personne fiche; printf("**Creation du fichier**\n\n"); printf("Saisir un nom pour le fichier: "); gets(n); strcat(n,".txt");// on rajoute l'extension .txt au fichier fflush(stdin); f=fopen(n,"w"); } // Fonction pour ajouter une personne dans le fichier void ajouter(FILE*f,char*n) { personne fiche; printf("**Ajouter une personne **\n\n"); printf("Saisir le nom du fichier:"); gets(n); strcat(n,".txt"); fflush(stdin); f=fopen(n,"a"); printf("** Saisie d'une fiche**\n\n"); printf("\nNom:"); gets(fiche.nom); printf("\nprenom:"); gets(fiche.prenom); printf("\nTel:"); gets(fiche.tel); fflush(stdin); fwrite(&fiche,sizeof(personne),1,f); fclose(f) ; } //Fonction pour la création du menu int menu(void) { int choix =0; while(choix < 1 || choix > 4) { printf("------- Mini Repertoire 2013-------\n"); printf("1 :Nouveau fichier \n"); printf("2 :Ajouter un nom \n"); printf("3 :Rechercher un nom\n"); printf("Votre choix ?"); scanf("%d",&choix); fflush(stdin); } return choix; } //Porgramme principale int main (void) { FILE * fichier; char nom[10]; switch (menu()) { case 1: creation_fichier(fichier,nom); break; case 2: ajouter(fichier,nom); break; } return EXIT_SUCCESS; }
Dernière modification par LittleWhite ; 20/07/2013 à 14h41. Motif: les snif sont inutiles
Si ton fichier est ouvert et que tu as un nom par ligne, tu peux éventuellement utiliser la fonction fgets sinon, montre le contenu de ton fichier pour voir comment son enregistrées les données.
Mon Site
Ma bibliothèque de gestion des chaînes de caractères en C
L'imagination est plus importante que le savoir. A. Einstein
Je ne répond à aucune question technique par MP, merci d'avance !
Partager