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 :

Système de contrôle des appels téléphoniques en C : Problème de condition


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Par défaut Système de contrôle des appels téléphoniques en C : Problème de condition
    Bonjour jaimerais beaucoup que l'on puisse maider jaimerai connaitre ce qui vas pas avec mon code source

    jarrive pas a faire cette condittion :

    Un numéro est nombre entier de 9 chiffres et commençant par 77, 76, 70 ou 78.

    voila mon code source

    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
    139
    140
    141
     
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
     
     
            typedef struct
            {
                char  nom[50],prenom[50];
                int     numtel;
                 int numdest];
                 int numcreer;
            }abonne;
    main()
    {
     
     
     
      abonne ab;
        int tabOrange[5]={772314440, 782314440,774517070, 784517070,778868181};
        int tabTigo[5]={762314440, 762314440,764517070, 764517070,768868181};
        int tabExpresso[5]={702314440, 702314440,704517070, 704517070,708868181};
        int longueur=9;
        int choixMenu,montantcredit,ok;
     
     
        puts("====Menu====");
        puts("1-Creer Un nouvel Abonne");
        puts("2-Emettre un Appel");
        puts("3-Verifier le Montant du credit");
        puts("4-Charger du Credit");
        puts("5-Quittez");
        printf("\n Entrer Votre choix ? ");
            scanf("%d", &choixMenu);
     
            printf("\n");
     
            switch (choixMenu)
                    {
                            case 1:
     
     
                                printf("Entrer le numero : ");
                                scanf("%d",&ab.numcreer);
                                fflush(stdin);
     
                                if(longueur==atoi(ab.numcreer))
                                {
     
                                    if(ab.numcreer[0]==7)
                                    {
                                        switch (ab.numcreer[1])
                                        {
     
                                            case '7':
                                                case '8': 
                                             break;
     
     
                                                case '6':
     
                                             break;
     
                                                case '0':
     
                                             break;
                                                default :
                                                        puts("Default- Un numero doit commencer par 76,77,78,70 ");
                                                    break;
                                        }
     
     
                                    }
                                    if(ab.numcreer[0]!=7)
                                     {
                                         puts("if-!='7' Un numero doit commencer par 76,77,78,70 ");
                                     }
     
     
     
     
                                }
                                if(longueur!=atoi(ab.numcreer))
                                 {
                                    puts("if-!=longueur -   Un numero doit avoir 9 chiffres");
                                 }
     
     
                                            //--------------------Saisie du Nom et du Prenom-----------------------------------
                                            /*DEBUT --Commentaire
                                            printf("Entrez Votre Nom : ");
                                            scanf("%s",&ab.nom);
                                             
                                            //__________________________________________________________________________________
                                             
                                                printf("Entrez Votre Prenom : ");
                                            scanf("%s",&ab.prenom);
                                             
                                            printf("Nouvelle Abonne Creer");
                                             
                                            //------------_-_-_-_-_-_-_--_-_-_-_-_-__-_-_----_-_-_-_-_-_-_-__--__-_--_-__-
                                             
                                            printf("Appuyer Sur une touche pour continuer ");
                                            system('pause');
                                            //fin --commentaire
                                            */
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
                            // break de la premiere case - case : 1
                            break;
                        // break de la premiere case - case : 1                       
     
                    }
     
     
     
     
     
    }

  2. #2
    Membre éprouvé

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Par défaut
    Bonjour,

    1) Si tu n'as pas d'overflow qui tronque les entiers de atoi et des constantes, c'est déjà bien !!!
    Est-ce que le genre de nombres que tu veux traiter peux être stocké dans un int ou (mieux) dans un unsigned long. Tu peux t'en assurer en consultant le fichier limits.h dans un répertoire du compilateur.

    2)Les switch sont utiles pour clarifier le code quand on a une valeur à tester plusieurs fois. Ici tu a deux valeurs à tester.
    De plus on imprique pas des switch dans d'autres switchs comme ça. A la rigueur, une condition ou un switch dans un case de switch OK, mais là le code n'a aucun sens.

    3)Je te conseille de laisser le nombre dans une chaine de caractères et de faire la condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /*Fonction de validation du format: renvoie 1 si OK, 0 sinon*/
    int i;
    if (strlen(maChaine)!=9)
       return 0;
    for(i=0;i<9;i++)
       if (isdigit(maChaine[i]==0)
           return 0;
    return 1;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char *maChaine[100];
    scanf("s",maChaine);
    tester_format(maChaine)
    if (maChaine[0]='7' && maChaine[1]>='6' && maChaine[1]>='9')
       /*nombre correct*/
    else
      /*nombre incorrect*/
    Bon courage.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut
    Bonjour,

    ab.numcreer est déclaré comme un int , or certaines lignes (52, 54, 57 ...) s'adressent à une chaîne de caractères !

  4. #4
    Membre éprouvé

    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 87
    Par défaut
    Bonjour,
    Si j'ai bien compris, tu veux checker;
    1- si le nombre est de 9 chiffres.
    2- si le premier chiffre est 7
    3- Si le deuxieme chiffre est 7, 6, 0 ou 8

    Je pense qu'il vaut mieux travailler avec un tableau de pointeurs pour représenter les numéros, ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    unsigned char * tab[9];
     
    if(strlen(tab[i])=9)`
    { if (tab[i][0] = 7)
         { if ((tab[i][1] = 7) or (tab[i][1]= 6)) 
            {/* ... */}
         else if (tab[i][1] = 8) 
             {/* ... */}
         else if (tab[i][1] = 0) 
             {/* ... */}
         else 
             {/* ... */}
         }
    }
    cordialement,

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Par défaut Desole du retard du retard urgent SVP
    En fait on nous a demander de le faire comme cela :

    Un programme qui permet de contrôler les appels téléphoniques. L’utilisateur renseigne son numéro de téléphone et son crédit, le programme lui autorise à passer des appels et l’informe sur le reste de son crédit.
    Le programme dispose d’une liste de numéros repartis sur trois tableaux pour les operateurs orange, tigo et expresso.
    A l’exécution le programme invite l’utilisateur à entrer son numéro, son crédit, le numéro du correspondant et la durée de communication souhaitée.
    Le programme contrôle la validité des données saisies :
     Un numéro est nombre entier de 9 chiffres et commençant par 77, 76, 70 ou 78.
     Le numéro de destination doit être différent du numéro appelant
     Le crédit doit être un entier positif et doit être supérieur ou à 60
     La durée doit être un entier positif
     numéro de votre correspondant doit être différent du numéro appelant
     Le numéro de votre correspondant doit exister dans le tableau des numéros de son operateur. Sachant que les operateurs sont : orange pour les numéros commençant par 77 ou 78, Tigo pour ceux commençant par 76 et 70 pour expresso.
    NB°) La recherche sur l’existence du numéro du correspondant doit se faire dans le tableau de son opérateur uniquement.
    Une fois que les données sont valides, le programme détermine le cout de l’appel et invite l’utilisateur à le confirmer. Si l’appel est confirmé, son coût sera diminué du crédit de l’appelant. Si le crédit est insuffisant pour la durée souhaitée, le programme informe sur la durée possible.
    NB : Les appels n’ont pas le même tarif.
    • Pour deux numéros du même operateur le cout de la communication est de 25 frs la seconde
    • Pour un appel Orange ->Tigo ou Orange->Expresso le cout est de 50 frs la seconde
    • Pour un appel Tigo ->Orange ou Tigo->Expresso le cout est de 40 frs la seconde
    • Pour un appel Expresso ->Orange ou Expresso ->Tigo le cout est de 60 frs seconde

    Liste des numéros à utiliser dans le programme.
    Orange :
    772314440, 782314440,774517070, 784517070,778868181
    Tigo:
    762314440, 764517070,768868181
    Expresso:
    702314440, 704517070,708868181

    Aide
    Utilisation de la Fonction sprintf,strlen


    Partie 2
    Extension
     Créer une Matrice d’Abonné de 3 lignes correspondant au 3 opèrateurs(0range,Tigo et Expresso)
     Un abonné est caractérisé par son nom char[50], prenom char[50],numTel int .
     Créer un Menu suivant :
    1-Créer un Nouveau Abonné
    2-Emettre un Appel
    3-Vérifier le Montant du crédit
    4-Charger du crédit
    5-Quitter

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Si tu représentes les numéros par des entiers :
    - il faut utiliser des long au minimum
    - pour obtenir les deux chiffres de poids fort d'un numéro, il suffit de le diviser par 10 000 000 (division entière) et de voir si le résultat vaut 77, 76, 70 ou 78
    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
    //---------------------------------------------------------------------------
    #include <stdio.h>
    typedef enum {Orange, Tigo, Expresso, OperateurInconnu} TOperateurs;
    char * ListOperateur[]= {"Orange", "Tigo", "Expresso", "Operateur inconnu"};
    //---------------------------------------------------------------------------
    int main(void)
    {
      long nb;
      int operateur = OperateurInconnu;
      if(scanf("%ld", &nb)==1)operateur = nb/10000000;
      switch(operateur)
      {
        case 77 :
        case 78 : operateur = Orange; break;
        case 76 : operateur = Tigo; break;
        case 70 : operateur = Expresso; break;
        default : operateur = OperateurInconnu; break;
      }
      printf("%s", ListOperateur[operateur]);
      return 0;
    }
    //---------------------------------------------------------------------------

  7. #7
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Par défaut système de control des appels Téléphoniques en C Probleme de Condition
    Bonsoir
    Je pense que l'énoncer a été mal conçu.
    Pourquoi avoir des éléments séparés pour un client, sachant que ce client à lui seul peut avoir une multitude de ligne et d'autres informations utiles pour l'entreprise qui pourrais en plus lui fournit un ou plusieurs numéros de téléphone ?
    Ce que je veux dire par là, c'est qu'il faut un ensemble de donné pour un client et ainsi il est plus facile pour la suite de faire par exemple lister tous les clients qui ont plus d'un numéro, listé tous les clients ayant un numéro appartenant à un des opérateurs donné, listé l'ensemble des communications émises par l'utilisateur sur le numéro qui lui a été attribuer / les numéro qui lui ont été attribuer, les appel reçut etc..
    Pour faire simple, une structure de donné chaîné représenterait l'ensemble des clients et leur donnée.
    Je poste un exemple pas optimisé basé sur quelques éléments de l'énoncer afin de présenter mon idée, tout points de vue critiques sont la bienvenue mais
    à bientôt

    Code C : 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
    139
    140
    141
    142
    143
    144
    145
     
    //LibC
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    typedef enum{ false, true }bool;
     
    /**
     * Structure de donnée
     **/
    typedef struct s_Clt{
     
    	char *pName;
    	unsigned long *pTel;
    	unsigned int idClt;
    	struct s_Clt *pNext;
    }ts_Clt;
     
    /**
    *       Fonction pour savoir s'il existe
    *       un numéro déja attribuer à un clients
    *       et ainsi évité des doublons lors des
    *       enregistrements
    **/
    bool f_ExisteTel( ts_Clt *pData, const unsigned long *pTel ){
     
    	ts_Clt *p = pData;
     
    	while( p ){
    		if( p->pTel == pTel )
    			return ( true );
    		p = p->pNext;
    	}
    	return ( false );
    }
     
    /***
    * Fonction qui permet de connaître
    * le détenteur de la ligne téléphonique
    **/
    void f_ClientNumber( ts_Clt *pData, const unsigned long *pTel ){
     
    	ts_Clt *p = pData;
    	printf( "\n--------- ! INFO CLIENT ! ---------\n");
    	while( p ){
    		if( p->pTel == pTel ){
    			printf( "*\tID Client\t:%d\t", p->idClt );
    			printf( "Nom\t: %s\t", p->pName );
    			printf( "Tel\t: %ld\n", p->pTel );
    		}
    		p = p->pNext;
    	}
    	printf( "-----------------------------------\n");
    }
     
    /**
    * Ajout clients
    **/
    void f_AddClient(ts_Clt *pData, const char* pName, unsigned long *pTel ){
     
    	ts_Clt *p = pData;
    	bool ret = f_ExisteTel( p, pTel );
    	if( ret ){
    		printf( "*Un Client posséde déjà ce numéro" );
    		f_ClientNumber( p, pTel );
    		return;
    	}
    	else{
     
    		//Rch de cel pour alloc
    		unsigned int iCpt = 0;
    		while( p->pNext ){
    			iCpt++;
    			p = p->pNext;
    		}
     
    		p->pNext = (ts_Clt*)calloc( 1, sizeof(struct s_Clt) );
    		if( p->pNext == NULL ){
    			perror( "Erreur Mémoire new client" );
    			exit( EXIT_FAILURE );
    		}
     
    		//Allocation sans contrôle
    		p = p->pNext;
    		p->pTel  = (unsigned long*)calloc( 10, sizeof(unsigned long) );
    		p->pName = (char*)calloc( strlen(pName), sizeof(char) );
     
    		// Affectation
    		p->pTel = pTel;
    		p->idClt = iCpt++;
    		strcpy( p->pName, pName );
    		p->pNext = NULL;
    	}
     
    }
     
    //Affiches tout les clients
    void f_AfficherClient( ts_Clt *pData ){
     
    	ts_Clt *p = pData;
     
    	printf( "\n\n\t-------\tList Client\t---------\n");
    	while( p ){
     
    		printf( "->\tID Client\t: %d\t", p->idClt );
    		printf( "Nom\t: %s\t", p->pName );
    		printf( "Numeros Telephone\t: %ld\n", p->pTel );
    		p = p->pNext;
    	}
    	printf( "\t-------\tFin Liste Client -------\n");
    }
     
    //Fonction principale
    int main( void ){
     
    	ts_Clt rClient;
    	(&rClient)->pNext = NULL;
     
    	//Num bidon
    	unsigned long p0 = 1234567890;
    	unsigned long p1 = 1234567892;
    	unsigned long p2 = 1234567801;
     
    	//Ajouts clients
    	f_AddClient( &rClient, "Bernard", &p0 );
    	f_AddClient( &rClient, "Georges", &p1 );
    	f_AddClient( &rClient, "Blaises", &p2 );
    	f_AddClient( &rClient, "Totoits", &p2 );  //Erreur
    	f_AddClient( &rClient, "Erroros", &p0 );  //Erreur
     
    	//Info Cliens
    	f_ClientNumber( &rClient, &p0 );
    	f_ClientNumber( &rClient, &p1 );
     
    	//Ajouts liste clients
    	unsigned long p3 = 1234567800;
    	f_AddClient( &rClient, "Michus", &p3 );
    	f_AfficherClient( (&rClient)->pNext );
     
    	//Free à faire
     
    	return ( EXIT_SUCCESS );
    }

  8. #8
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main( void ){
    ...
    	unsigned long *p0 = 1234567890;
    	unsigned long *p1 = 1234567892;
    	unsigned long *p2 = 1234567801;
    ...s
    	unsigned long *p3 = 1234567800;
    ...
     
    	return ( EXIT_SUCCESS );
    }
    A quoi riment ces adresses ? Ce sont les adresses de quoi ?
    C'est une erreur que de confondre un unsigned long et un unsigned long *

    Tu ne souhaitais pas plutôt faire quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	unsigned long p0 = 1234567890;
            f_AddClient( &rClient, "Bernard", &p0 );

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/11/2014, 19h21
  2. Tracking des appels téléphoniques
    Par bza88 dans le forum Android
    Réponses: 1
    Dernier message: 18/09/2013, 17h55
  3. [MCD] Gestion des Appels Téléphoniques
    Par Gobelins dans le forum Schéma
    Réponses: 8
    Dernier message: 11/03/2011, 09h55
  4. contrôle des appels récursifs
    Par chlab dans le forum Caml
    Réponses: 3
    Dernier message: 17/02/2011, 21h24
  5. contrôle des appels distants GWT
    Par Wiliam_Walas dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 16/04/2008, 08h16

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