:: Enseignements :: Licence :: L3 :: 2012-2013 :: Programmation C ::
[LOGO]

Facebook en C


L'objectif de ce TD est de représenter en C les données disponibles sur Facebook, ainsi que permettre leur manipulation et leur stockage.

Exercice 1 - Structuration

Dans un premier temps, nous nous intéressons à la création des structures permettant de représenter et stocker les données disponibles sur Facebook. Pour cela, il faudra utiliser les instructions struct, enum et union.

Les données suivantes devront être représentées : Vous pouvez ajouter d'autres données qui vous sembleraient intéressantes, pertinentes et/ou utiles.

Remarque : la déclaration et le type des données doivent être choisis de manière à obtenir un bon compromis entre optimisation de l'espace mémoire utilisé et simplicité de manipulation de ces données.

Exercice 2 - Manipulation

Il s'agit maintenant de créer les fonctions de back-end, faisant l'interface entre le stockage des données (en mémoire vive) et leur représentation/manipulation dans le programme.

Écrire les fonctions permettant de manipuler ces données au sein du programme, et notamment : Vous pouvez créer d'autres fonctions de manipulation des données qui vous sembleraient pertinentes et/ou utiles.

Remarque : dans cet exercice, il ne vous est pas demandé de créer les fonctions de front-end effectuant les entrées-sorties avec l'utilisateur final, mais seulement les fonctions de back-end faisant l'interface entre le stockage des données (en mémoire vive) et leur représentation/manipulation dans le programme.

Exercice 3 - Génération

L'objectif de cet exercice est de tester le bon fonctionnement des fonctions créées ci-dessus, et d'évaluer l'efficacité de ces fonctions et de la représentation des données (en terme de temps d'exécution nécessaire et d'espace mémoire utilisé).
  1. Écrire les fonctions permettant de générer aléatoirement un ensemble de données de test, et notamment :
    • créer aléatoirement un certain nombre d'utilisateurs ;
    • ajouter aléatoirement des amis à un utilisateur ;
    • afficher les amis d'un utilisateur, triés selon leur nom d'utilisateur ;
    • ajouter aléatoirement un certain nombre de statuts associés à un utilisateur ;
    • ajouter aléatoirement des commentaires associés à des statuts d'amis ou de pages favorites d'un utilisateur ;
    • créer aléatoirement un certain nombre de pages ;
    • ajouter aléatoirement des utilisateurs abonnés à une page ;
    • afficher les utilisateurs abonnés à une page, triés selon leur nom d'utilisateur ;
    • ajouter aléatoirement un certain nombre de statuts associés à une page ;
    • ajouter aléatoirement des commentaires associés à des statuts d'une page ou d'utilisateurs abonnés à cette page.
  2. Écrire un programme créant aléatoirement (en mémoire vive) un certain nombre d'utilisateurs et de pages, donnés en argument de la commande, puis se terminant à la fin de cette création. Utiliser la commande time pour connaître le temps de calcul utilisé pour la création de ces données.
  3. Modifier le programme précédent pour qu'il ne continue de s'exécuter après avoir créé ces données. Utiliser la commande ps, ou tout autre commande équivalente, pour connaître l'espace mémoire utilisé par les données créées en mémoire vive.
Pour ajouter un peu de challenge, comparez l'efficacité de vos fonctions et de votre représentation des données avec vos voisins !

Exercice 4 - Stockage et interface simple

Dans les exercices précédents, les données générées en cours d'exécution étaient stockées en mémoire vive, et donc non conservées d'une exécution à l'autre du programme.
  1. Écrire les fonctions permettant de :
    • sauvegarder dans un (ou plusieurs) fichier(s) l'ensemble des données en cours d'utilisation par le programme (donc se trouvant en mémoire vive) ;
    • charger en mémoire vive l'ensemble des données précédemment sauvegardées dans un (ou plusieurs) fichier(s).
    Remarque : à l'instar de l'exercice 1, la manière dont sont représentées les données dans le(s) fichier(s) doit être choisie de manière à obtenir un bon compromis entre optimisation de l'espace disque utilisé et simplicité de sauvegarde/chargement de ces données.
  2. Créer une interface simple permettant d'appeler toutes les fonctions créées dans ce TD.
    Remarque : l'interface n'ayant pour objectif que de pouvoir tester votre programme, ne vous occupez pas de la gestion des erreurs de saisie ni de la sécurité. Par exemple, supposez que l'utilisateur donnera toujours un pseudo de longueur maximale 31, une date d'inscription valide et directement dans le format que vous utilisez pour son stockage, etc.