Mini agenda telephonique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 229 fois - Téléchargée 34 fois

Contenu du snippet

Ceci est un mini-agenda téléphonique tout simple ; les données sont répertoriées dans des fichiers texte (utilisation de la classe fstream afin de gérer les traitements sur les fichiers).
Améliorations possibles :

- n'utiliser qu'un seul fichier de données au lieu de créer un fichier pour chaque lettre,
en utilisant l'accès direct au fichier qui serait 'découpé' à l'intérieur suivant la
lettre alphabétique;

- pallier au problème du dernier retour chariot lors de la lecture du fichier, qui
duplique la dernière ligne entrée dans le fichier;

- pouvoir répondre à une recherche de la part de l'utilisateur (une recherche par le nom) au lieu que celui-ci n'affiche toutes les entrées d'une seule lettre. Utilisation donc
d'un parcours total et séquentiel du fichier correspondant au nom de la personne recherchée par exemple et à chaque fois, établir une comparaison du nom demandé et du nom représenté dans l'enregistrement.

Source / Exemple :


#include <iostream>
#include <fstream>
#include <string>

#define TITLE "\t\t\tMINI-AGENDA\n" ;

using namespace std;

char *get_letter (const string &inf) {    
    
    char temp[20];
    
    switch (inf[0]) {
        
        case 'A' : strcpy(temp, "a.txt");
                   break;   
        
        case 'B' : strcpy(temp, "b.txt");
                   break;
                   
        case 'C' : strcpy(temp, "c.txt");
                   break;
                   
        case 'D' : strcpy(temp, "d.txt");
                   break;
                   
        case 'E' : strcpy(temp, "e.txt");
                   break;
                   
        case 'F' : strcpy(temp, "f.txt");
                   break;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
        
        case 'G' : strcpy(temp, "g.txt");
                   break;
                   
        case 'H' : strcpy(temp, "h.txt");
                   break;
                   
        case 'I' : strcpy(temp, "i.txt");
                   break;
                   
        case 'J' : strcpy(temp, "j.txt");
                   break;
        
        case 'K' : strcpy(temp, "k.txt");
                   break;
        
        case 'L' : strcpy(temp, "l.txt");
                   break;
        
        case 'M' : strcpy(temp, "m.txt");
                   break;
                   
        case 'N' : strcpy(temp, "n.txt");
                   break;
        
        case 'O' : strcpy(temp, "o.txt");
                   break;
        
        case 'P' : strcpy(temp, "p.txt");
                   break;
        
        case 'Q' : strcpy(temp, "q.txt");
                   break;
        
        case 'R' : strcpy(temp, "r.txt");
                   break;
                   
        case 'S' : strcpy(temp, "s.txt");
                   break;
                   
        case 'T' : strcpy(temp, "t.txt");
                   break;                               
        
        case 'U' : strcpy(temp, "u.txt");
                   break;
        
        case 'V' : strcpy(temp, "v.txt");
                   break;
                   
        case 'W' : strcpy(temp, "w.txt");
                   break;
        
        case 'X' : strcpy(temp, "x.txt");
                   break;
        
        case 'Y' : strcpy(temp, "y.txt");
                   break;
        
        case 'Z' : strcpy(temp, "z.txt");
                   break;                                                                                      
     }
     return temp;
}    

     
void write_entry (char *buffer, const string &inff, int t) {  
                                                                                                           
     char temp[50];
          
     strcpy(temp, buffer);
     ofstream file(buffer, ios :: app);
     if (!file) {
        cout << "Impossible d'accéder au fichier, verifier le chemin d'acces "
         "ou les droits d'acces au fichier" << endl;
     }     
     else {
         if (!(file.good())) {
             cout << "Impossible d'ecrire dans le fichier" << endl;
         } 
         else {
             if (t == 0) {
                 file << inff.c_str();
             }
             else if (t == 1) {
                 file << " " << inff.c_str() << endl;
             }
             else {
                 file << " " << inff.c_str();
             }
         }
     }        
     file.close();        
} 
                           

void get_entry () {    
    
    string let, temp;
    char tempp[50];
     
    cout << "Quelle lettre voulez-vous choisir pour consulter l'agenda ? (exemple : A,C...)" << endl;
    cout << "Lettre : ";
    cin >> let;
    strcpy(tempp, get_letter(let));
    ifstream fic (tempp);
    if (fic) {
        cout << "\nVoici la liste des contacts appartenant a la lettre choisie :\n" << endl;
        do {
            if (fic.peek() == '\n') {
                cout << '\n';
            }    
            fic >> temp;
            cout << temp << endl;
        }    
        while (fic.peek() != EOF);   
    }
    else {
        cout << "Impossible d'acceder au fichier, celui-ci ne contient probablement aucun contact" << endl;
    }
    fic.close();     
}    

main () { 
       
    unsigned int choix;
    char *buff;
    string nom, prenom, telf, telp, mail;
    int n = 0;
    char p;
    
    cout << TITLE;
    while (1) {
        do {
            cout << "\n\nMENU" << endl;
            cout << "----" << endl;
            cout << "0. Ajouter un contact" << endl;
            cout << "1. Visualiser les contacts d'une meme lettre" << endl;
            cout << "2. Quitter" << endl;
            cout << "\nChoix : ";
            cin >> choix;
        }
        while (choix > 2);

        switch (choix) {
            case 0 : do {
                        cout << "Veuilez indiquer les renseignements concernant le contact " << 
                        "a ajouter" << endl;                                                
                        cout << "\nNouvelle entree : " << endl;
                        
                        cout << "Nom : ";                        
                        cin >> nom;
                        buff = get_letter(nom);
                        write_entry(buff, nom, 0);
                        
                        cout << "Prenom : ";
                        cin >> prenom;
                        buff = get_letter(nom);
                        write_entry(buff, prenom, 2);
                        
                        cout << "Tel fixe : ";
                        cin >> telf;
                        buff = get_letter(nom);
                        write_entry(buff, telf, 2);
                        
                        cout << "Portable : ";
                        cin >> telp;
                        buff = get_letter(nom);
                        write_entry(buff, telp, 2);
                        
                        cout << "Mail : ";
                        cin >> mail;
                        buff = get_letter(nom);
                        write_entry(buff, mail, 1);
                        
                        cout << "\n\nVoulez-vous continuer?";
                        cin >> p;
                        ((p == 'o') ? (n = 0) : (n = 1));
                     }
                     while (n == 0);    
                     break;
                
            case 1 : do {
                        get_entry();
                        cout << "\n\nVoulez-vous continuer?";
                        cin >> p;
                        (p == 'o') ? (n = 0) : (n = 1);
                     }
                     while (n == 0);    
                     break;
                     
            case 2 : exit (0);
        }
    }                
system("PAUSE");                          
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
101
Date d'inscription
samedi 9 février 2002
Statut
Membre
Dernière intervention
5 mai 2009

>Tu connais l'existence des listes chainées ?
>Renseigne toi la dessus, c vraiment simple de gérer un >agenda a partir de listes...

Le container std::map est particulierement adapté. Voir :
http://www.cppfrance.com/code.aspx?ID=9475
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Tu connais l'existence des listes chainées ? Renseigne toi la dessus, c vraiment simple de gérer un agenda a partir de listes...

++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.