PROJET 1 ALGORITHMIQUE ET PROGRAMMATION II CONTENU DU RAPPORT A RENDRE : o Fiche signalétique du binôme o Listing des différents fichiers sources o CD sources o Il sera tenu compte de la présentation du projet
Le service de messagerie SMS, plus connu sous le sigle de SMS (Short Message Service) ou les noms de texto ou de «mini message», permet de transmettre de courts messages textuels. C est l un des services de la téléphonie mobile. 2 1) La taille des SMS En fonction des caractères utilisés lors de l écriture d un SMS, la taille du SMS peut être modifiée. a) Les caractères standards : La taille d un SMS rédigé avec des caractères standards est de 160 caractères. Les 26 lettres de l alphabet en majuscule et en minuscule ainsi que l ensemble des caractères suivants sont des caractères standards. Tous ces caractères comptent pour 1 seul : @ $ è é ù ì ò Ç Ø ø Å å Δ _ Φ Γ Λ Ω Π Ψ Σ Θ Ξ ^ [ ~ ] Æ æ ß É! " # % & ' ( ) * +,. / 0 1 2 3 4 5 6 7 8 9 : ; < = >? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Ä Ö Ñ Ü a b c d e f g h i j k l m n o p q r s t u v w x y z ä ö ñ ü à b) Les caractères spéciaux : Une extension du langage SMS permet de coder certains caractères mais ils comptent pour 2 caractères, ce sont les caractères spéciaux. Ce sont tous les caractères qui ne figurent pas dans la liste ci-dessus. Par exemple Š OE... Lorsque vous utilisez un caractère spécial dans un SMS, le mobile modifie automatiquement le codage de l'intégralité du SMS afin de l'envoyer correctement. Ce codage étant plus gourmand en octets, le nombre de caractères maximum du SMS passe à 70 au lieu de 160. Certains mobiles transforment "intelligemment" certains caractères, par exemple, le "ç" peut être transformé en "Ç" pour éviter de passer en codage plus gourmand.
2) Les SMS longs Lorsque la taille maximum d'un SMS est atteinte, un deuxième SMS est commencé et ainsi de suite. Les SMS sont ensuite «concaténés» pour être affichés dans le bon ordre et dans un seul message par le mobile récepteur. Chaque SMS qui compose ainsi le message est facturé en fonction de votre offre tarifaire. Exemple : Si un message avec des caractères standards contient 186 caractères, votre message est envoyé donc en 2 SMS. a) Règles pour les SMS longs rédigés avec des caractères standards : A partir du 2 ème SMS, le nombre maximum de caractères de chaque SMS concaténé diminue car 7 caractères sont utilisés pour la concaténation. La nouvelle taille maximum de chaque SMS dans un message long est donc de 153 caractères au lieu de 160 avec utilisation de caractères standards. Nombre maximum de caractères standards pour : - 1 SMS = 160 caractères - 2 SMS = 306 caractères - 3 SMS = 459 caractères... b) Règles pour les SMS longs avec utilisation de caractères spéciaux : A partir du 2 ème SMS, le nombre maximum de caractères de chaque SMS concaténé diminue car 3 caractères sont utilisés pour la concaténation, la nouvelle taille maximum de chaque SMS dans un message long est donc de 67 caractères (au lieu de 70). Nombre maximum de caractères avec insertion de caractères spéciaux pour : - 1 SMS = 70 caractères - 2 SMS = 134 caractères - 3 SMS = 201 caractères... En pratique, seuls 6 à 8 SMS concaténés par message sont possibles. 3 3) Compteurs de caractères et de SMS : La quasi-totalité des mobiles affiche un «compteur de caractères et/ou un compteur de SMS». Cela vous permet de savoir combien de caractères contient le message que vous rédigez et le nombre de SMS que contient votre message.
a) Exemple pour un SMS rédigé en caractères standards : Le message ci-dessous contient 2 SMS pour 197 caractères. 4 b) Exemple pour un SMS rédigé avec un caractère spécial : Le message ci-dessous contient 2 SMS pour 91 caractères. La taille du SMS s'est adaptée automatiquement suite à la saisie d'un caractère spécial "ç". L'afficheur indique 134 caractères disponibles. On se propose de programmer une application en C de gestion de messages et de contacts. Le code du fichier ELTSMS.H qui permet de réaliser le TDA ELEMENT_SMS par une structure SMS (Un SMS est caractérisé par un texte (chaîne de caractères) et une taille (entier) : stockage indirect), est défini comme suit : #ifndef _ELTSMS_H #define _ELTSMS_H char * texte; int taille; SMS,*ELEMENT_SMS;
Le code du fichier LSTSMS.H qui permet de réaliser le TDA LISTE_SMS par une structure de données LISTE_SMS (liste contiguë de SMS en stockage indirect), est défini comme suit : #ifndef _LSTSMS_H #define _LSTSMS_H #include "ELTSMSPRIM.H" #define LongMax 8 /* longueur maximale d'une liste de SMS */ ELEMENT_SMS elements[longmax]; /* tableau statique */ int lg; /* taille logique de la liste */ lastructsms,*liste_sms; 5 Un MESSAGE est caractérisé par : Le numéro de téléphone du récepteur : une chaîne de 8 caractères ne contenant que des chiffres et commençant obligatoirement par l un des chiffres 2, 5 ou 9 qui correspondent aux opérateurs téléphoniques en Tunisie. L ensemble du/des SMS le composant : une liste contigüe de SMS. Le chargement (allocation dynamique des caractères) des SMS se fait au moment de la lecture du message et ce en le découpant selon les caractères standards et/ou spéciaux le composant en y appliquant les règles décrites précédemment. Le prix total du message : un réel qui correspond au prix d un SMS multiplié par le nombre des SMS composant le message. On suppose que le prix d un SMS est de l ordre de 0.050 en DT vers tous les opérateurs. La date d envoi du message : une chaîne de caractères dont le format est jj/mm/aaaa. La date d envoi devrait être impérativement valide et antérieure /identique à la date du système. L heure d envoi du message : une chaîne de caractères dont le format est hh:mm:ss. L heure d envoi devrait être valide et comprise entre 00:00:00 et 23:59:59.
6 Le code du fichier ELTMSG.H qui permet de réaliser le TDA ELEMENT_MSG par une structure MESSAGE (stockage indirect), est défini comme suit : #ifndef _ELTMSG_H #define _ELTMSG_H #include "LSTSMSPRIM.H" int jour; int mois; int annee ; DATE ; int heure; int minute; int seconde; HEURE; char recpeteur[9]; LISTE_SMS msg ; float prix ; DATE date_envoi ; HEURE heure_envoi ; MESSAGE,*ELEMENT_MSG;
Le code du fichier LSTMSG.H qui permet de réaliser le TDA LISTE_MSG par une structure de données LISTE_MSG (liste doublement chaînée de MESSAGE), est défini comme suit : #ifndef _LSTMSG_H #define _LSTMSG_H #include "ELTMSGPRIM.H" structnoeudmsg ELEMENT_MSG info; struct structnoeudmsg * suivant; struct structnoeudmsg * precedent; structnoeudmsg, * NOEUD_MSG; NOEUD_MSG tete; NOEUD_MSG queue; int lg; lastructmsg,*liste_msg; Le code du fichier ELTCON.H qui permet de réaliser le TDA ELEMENT_CONT par une structure CONTACT (Un contact est caractérisé par un nom (chaîne de caractères alphabétiques), un numéro (une chaîne de 8 caractères ne contenant que des chiffres et commençant obligatoirement par l un des chiffres 2, 5 ou 9 qui correspondent aux opérateurs téléphoniques Tunisiens), une adresse email (une chaîne de caractères contenant le caractère séparateur @ et un nom de domaine) : stockage indirect), est défini comme suit : #ifndef _ELTCON_H #define _ELTCON_H char nom[50]; char numero[9]; char email[30]; CONTACT,*ELEMENT_CONT; 7
Le code du fichier LSTCON.H qui permet de réaliser le TDA LISTE_CONT par une structure de données LISTE_CONT (liste simplement chaînée de CONTACT), est défini comme suit : #ifndef _LSTCON_H #define _LSTCON_H #include "ELTCONPRIM.H" structnoeudcont ELEMENT_CONT info; struct structnoeudcont * suivant; structnoeudcont, * NOEUD_CONT; NOEUD_CONT tete; int lg; lastructcont,*liste_cont; 8 L utilisateur dispose ainsi d un répertoire (Une liste simplement chaînée de CONTACTS) et d une boîte de messages (Une liste doublement chaînée de MESSAGES dont chacun contient une liste contigüe de SMS). L ajout d un nouveau CONTACT au répertoire se fait dans l ordre alphabétique des noms des contacts. L ajout d un nouveau MESSAGE à la boîte de messagerie se fait dans l ordre chronologique (date et heure d envoi). C est le message le plus récent qui apparaît à la tête de la liste et c est celui le plus ancien qui apparait à sa queue. Au moment de l envoi d un MESSAGE, l utilisateur peut taper un numéro de téléphone qui ne figure pas dans la liste des CONTACTS. L affichage d un MESSAGE se fait comme indiqué dans les figures ci-dessus.
Travail demandé : Implémentez les TDA ELEMENT_SMS, LISTE_SMS, ELEMENT_MSG, LISTE_MSG, ELEMENT_CONT et LISTE_CONT. Ecrire une fonction CONTACT lepluscontacte(liste_msg L1, LISTE_CONT L2) qui permet de renvoyer le contact du répertoire auquel le plus grand nombre de messages a été envoyé (en cas de redondance c est le premier contact alphabétiquement apparu qui sera retourné). Ecrire une fonction LISTE_CONT jamaiscontactes(liste_msg L1, LISTE_CONT L2) qui permet de renvoyer la liste des contacts auxquels aucun message n a jamais été envoyé. Ecrire une fonction LISTE_MSG messages_d1_d2(liste_msg L, DATE D1, DATE D2) qui permet de renvoyer tous les messages qui ont été envoyés entre les dates D1 et D2. Ecrire une fonction ELEMENT_MSG messagelepluslong(liste_msg L) qui retourne le message envoyé le plus long en terme de caractères. Ecrire une fonction char * motleplusoccurrent(liste_msg L, char * nom) qui renvoie le mot le plus récurrent dans tous les messages envoyés à un destinataire dont le nom est donné. Créez un fichier main.c pour manipuler les TDA implémentés via des menus. Il vous faut au minimum trois menus dont un est principal et deux autres pour les MESSAGES et les CONTACTS. 9