:: Enseignements :: Licence :: L3 :: 2012-2013 :: Programmation C ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | 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 :
-
Utilisateur
- nom d'utilisateur
- date d'inscription
- date de naissance
- à propos (texte personnalisable)
- sexe
- situation amoureuse
- adresse e-mail
- citations (texte personnalisable)
- amis (avec possibilité de les trier par ordre alphabétique, et rechercher un ami par son nom)
- pages favorites (pages ci-dessous)
- statuts ; chaque statut contient au moins les données suivantes :
- message (texte personnalisable)
- date de publication
- commentaires, avec leurs auteurs (utilisateurs)
-
Page
- nom
- date de création
- description (texte personnalisable)
- url (adresse vers un site Web)
- utilisateurs abonnés (utilisateurs ayant ajouté cette page comme favorite)
- statuts ; chaque statut contient au moins les données suivantes :
- message (texte personnalisable)
- date de publication
- commentaires, avec leurs auteurs (utilisateurs)
- S'il s'agit d'une page sur un film :
- genre cinématographique
- synopsis
- pays de production
- réalisateur
- acteurs/actrices
- S'il s'agit d'une page sur un groupe de musique :
- genre musical
- ville d'origine
- membres du groupe
- S'il s'agit d'une page sur une série télévisée :
- genre
- synopsis
- pays de production
- réalisateur
- acteurs/actrices
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 :
-
Pour un utilisateur :
- créer un nouvel utilisateur ;
- modifier une donnée (vous pouvez créer une fonction différente pour chaque donnée) ;
- ajouter/retirer un ami ;
- trier les amis par leur nom ;
- rechercher un ami par son nom ;
- ajouter/retirer une page favorite ;
- ajouter/supprimer un statut ;
- ajouter/supprimer un commentaire sur un statut de l'utilisateur, d'un ami ou d'une page favorite ;
- supprimer l'utilisateur.
-
Pour une page :
- créer une nouvelle page
- modifier une donnée (vous pouvez créer une fonction différente pour chaque donnée) ;
- ajouter/retirer un utilisateur abonné, un(e) acteur/actrice, un membre du groupe,... ;
- trier les utilisateurs abonnés par leur nom ;
- rechercher un utilisateur abonné par son nom ;
- ajouter/supprimer un statut ;
- ajouter/supprimer un commentaire sur un statut de la page ou d'un utilisateur abonné ;
- supprimer la page.
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é).
- É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.
- É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.
- 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.
- É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.
- 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.
© Université de Marne-la-Vallée