Advertisement
Guest User

twitter.hpp

a guest
May 22nd, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.72 KB | None | 0 0
  1. /****************************************************************************
  2.  * Clase Twitter
  3.  *
  4.  * Esta clase implementa toda la operativa relativa a una red social similar
  5.  * a Twitter, con una lista de usuarios que publican tweets, se siguen
  6.  * e interaccionan entre ellos, etc.
  7.  *
  8.  * Autor:
  9.  * Fecha: Mon May  4 09:50:18 2015
  10.  ****************************************************************************/
  11.  
  12. #ifndef __TWITTER__
  13. #define __TWITTER__
  14. #include <string>
  15. #include <cstdlib>
  16. #include "UsuarioTwitter.hpp"
  17.  
  18. namespace bblProgII{
  19.  
  20.  
  21. class Twitter{
  22.     public:
  23.         // Constructor por defecto
  24.         // Inicializa la red como red vacía, sin usuarios y sin
  25.         // sin ningún usuario conectado
  26.         Twitter();
  27.  
  28.         // Constructor extendido para cargar toda la red social desde disco.
  29.         // Recibe como parámetro el nombre del fichero con la lista de usuarios
  30.         // de la red. A partir de ahí, carga desde disco todos los seguidores,
  31.         // usuarios seguidos y tweets de cada uno de los
  32.         // usuarios de la red.
  33.         // Si el fichero de la lista de usuario existe, se procede a la carga
  34.         // de la red desde disco y se devuelve 'true' a través del parámetro
  35.         // 'red_cargada'. Si no, la red permanece vacía y se devuelve
  36.         // 'false' a través del parámetro.
  37.         // Los ficheros de datos de cada usuario tienen como nombre el
  38.         // nombre del usuario y como extensión '.seg' para los seguidores,
  39.         // '.sig' para los usuarios seguidos y '.twt' para los tweets.
  40.         Twitter(const std::string &fic_lista_usuarios, bool &red_cargada);
  41.  
  42.         // Constructor de copia de la clase
  43.         Twitter(const Twitter &otro_twitter);
  44.  
  45.         // Operador de asignación
  46.         Twitter & operator=(const Twitter &otro_twitter);
  47.  
  48.         // Destructor de la clase.
  49.         //
  50.         ~Twitter();
  51.  
  52.         // Devuelve el número de usuarios de la red social
  53.         unsigned num_usuarios() const;
  54.  
  55.         // Devuelve el id del usuario actualmente conectado. Si no hay usuario
  56.         // conectado, devuelve una cadena vacía
  57.         std::string usuario_actual() const;
  58.        
  59.         //------------------------------------------------------------------
  60.         // PARA EL USUARIO ACTUAL. |
  61.         // ------------------------|
  62.         //
  63.         // Devuelve los seguidores del usuario conectado
  64.         // Si no hay usuario conectado, los métodos
  65.         // devuelven false a través de 'conectado'. Si no, devuelven true.
  66.         // Devuelve la lista de seguidores
  67.         void obtener_seguidores(Usuarios &lista_seg, bool &conectado) const;
  68.  
  69.         // Devuelve la lista de usuarios a los que se sigue el usuario conectado
  70.         void obtener_siguiendo(Usuarios &lista_sig, bool &conectado) const;
  71.  
  72.         // Devuelve la lista de tweets del usuario conectado
  73.         void obtener_tweets(Tweets &lista_tweets, bool &conectado) const;
  74.  
  75.         // OPCIONAL!
  76.         // Devuelve la lista de menciones al usuario conectado
  77.         // void obtener_menciones(Menciones &lista_men, bool &conectado) const;        
  78.  
  79.         // Indica si un determinado usuario es seguidor del usuario conectado
  80.         void me_sigue(const std::string &otro_usuario, bool &mesigue, bool &conectado) const;
  81.  
  82.         // Indica si este usuario conectado está siguiendo a otro
  83.         void estoy_siguiendo(const std::string &otro_usuario, bool &sigo, bool &conectado) const;
  84.  
  85.         // Devuelve el número de seguidores del usuario conectado
  86.         void num_seguidores(unsigned &mesigue, bool &conectado) const;
  87.  
  88.         // Devuelve el número de usuarios a los que sigue el usuario conectado
  89.         void num_siguiendo(unsigned &siguiendo, bool &conectado) const;
  90.  
  91.         // Devuelve el número de tweets del usuario
  92.         void num_tweets(unsigned &n, bool &conectado) const;
  93.  
  94.         // OPCIONAL!
  95.         // Devuelve el número de menciones
  96.         // void num_menciones(unsigned &n, bool &conectado) const;        
  97.  
  98.         // Imprime por pantalla la lista de seguidores
  99.         // Si num_imprime == 0, imprime todos los seguidores.
  100.         // PRECONDICIÓN: num_imprime <= num_seguidores
  101.         void imprimir_seguidores(unsigned num_imprime, bool &conectado) const;
  102.  
  103.         // Imprime por pantalla la lista de usuarios a los que sigue
  104.         // Si num_imprime == 0, imprime todos los usuarios a los que sigue.
  105.         // PRECONDICIÓN: num_imprime <= num_siguiendo
  106.         void imprimir_siguiendo(unsigned num_imprime, bool &conectado) const;
  107.  
  108.         // Imprime por pantalla la lista de tweets
  109.         // Si num_imprime == 0, imprime todos los tweets del usuario.
  110.         // PRECONDICIÓN: num_imprime <= num_tweets
  111.         void imprimir_tweets(unsigned num_imprime, bool &conectado) const;
  112.  
  113.         // OPCIONAL!
  114.         // Imprime por pantalla la lista de menciones del usuario conectado
  115.         // Si num_imprime == 0, imprime todas las menciones.
  116.         // PRECONDICIÓN: num_imprime <= num_menciones
  117.         // void imprimir_menciones(const unsigned num_imprime, bool &conectado) const;
  118.  
  119.         // Modifica el identificador del usuario actualmente conectado.
  120.         // Además, deben actualizarse las listas de 'seguidores' y
  121.         // 'siguiendo' de los demás usuarios de la red, de manera
  122.         // que el nuevo indentificador de usuario sustituya al
  123.         // antiguo en aquellas listas de usuarios donde aparecía.
  124.         // Devuelve 'true' si ha sido posible modificar el usuario
  125.         // actualmente conectado (el usuario existe en la red)
  126.         void establecer_id(const std::string &nuevo_id, bool &conectado);
  127.  
  128.         // Inserta un usuario en la lista de usuarios a los que sigue-
  129.         // El usuario debe estar conectado y el usuario al que se quiere
  130.         // seguir debe existir. Si no hay usuario conectado actualmente,
  131.         // se devuelve 'false' a través de 'conectado'. Si el usuario que
  132.         // se quiere incluir en la lista de usuarios seguidos no existe en la
  133.         // red, se devuelve 'NO_EXISTE' a través de 'res'.
  134.         // Si ambos usuarios existen, se actualizan las listas de seguidores
  135.         // y siguiendo.Si la lista de seguidores o siguiendo están
  136.         // llenas, se devuelve 'LISTA_LLENA' a través de 'res'.
  137.         void nuevo_siguiendo(const std::string &nuevo, Resultado &res, bool &conectado);
  138.  
  139.         // Inserta un nuevo tweet al final de la lista de tweets. Si la lista de
  140.         // tweets está llena, se devuelve 'LISTA_LLENA' a través de 'res'. Si no,
  141.         // se devuelve 'OK'. La longitud máxima
  142.         void nuevo_tweet(const Tweet &nuevo, Resultado &res, bool &conectado);
  143.  
  144.         // Elimina un usuario en la lista de usuarios a los que sigue
  145.         // El usuario debe estar conectado y el usuario al que se quiere
  146.         // dejar de seguir debe existir. Si no hay usuario conectado actualmente,
  147.         // se devuelve 'false' a través de 'conectado'. Si el usuario que
  148.         // se quiere eliminar de la lista de usuarios seguidos no existe en la
  149.         // red, se devuelve 'NO_EXISTE' a través de 'res'. Si ambos usuarios
  150.         // existen, se actualizan las lista se de seguidores y siguiendo,
  151.         // eliminando los nombres de los usuarios correspondientes.
  152.         void eliminar_siguiendo(const std::string &usuario, Resultado &res, bool &conectado);
  153.  
  154.         // OPCIONAL!
  155.         // Se obtiene la lista de menciones que los demás usuarios de
  156.         // la red tienen con el usuario actualmente conectado y se
  157.         // almacenan en la lista de menciones del usuario actualmente
  158.         // conectado.
  159.         // Las menciones comienzan todas con el carácter ampsersand ('@').
  160.         // void obtener_menciones(bool &conectado);
  161.  
  162.  
  163.         //------------------------------------------------------------------
  164.  
  165.         //------------------------------------------------------------------
  166.         // MÉTODOS DE LA RED SOCIAL
  167.  
  168.         // Imprime por pantalla los usuarios actuales de la red social
  169.         void imprimir_usuarios() const;
  170.  
  171.         // Cambia el usuario actualmente conectado a la red. Si el usuario
  172.         // existe, se cambia el usuario y se devuelve 'OK' a través del
  173.         // parámetro 'res'. Si el usuario no existe, se mantiene el usuario
  174.         // actual y se devuelve 'NO_EXISTE' a través del parámetro 'res'
  175.         void cambiar_usuario_actual(const std::string &nuevo_id_actual, Resultado &res);
  176.  
  177.         // Insertar un nuevo usuario en la red social, a partir de su
  178.         // id de usuario, con todos sus datos vacíos (lista de seguidores,
  179.         // lista de tweets, etc.). Si el id del nuevo usuario no existe,
  180.         // se inserta en la red y se devuelve 'OK' a través del parámetro
  181.         // 'res'. Si el usuario ya existía, se devuelve 'YA_EXISTE' a
  182.         // través de 'res'.
  183.         void insertar_usuario(const std::string &nuevo_usuario, Resultado &res);
  184.  
  185.         // Insertar un nuevo usuario en la red social.
  186.         // Si el id del nuevo usuario no existe,
  187.         // se inserta en la red y se devuelve 'OK' a través del parámetro
  188.         // 'res'. Si el usuario ya existía, se devuelve 'YA_EXISTE' a
  189.         // través de 'res'.
  190.         void insertar_usuario(const UsuarioTwitter &nuevo_usuario, Resultado &res);
  191.  
  192.         // Elimina un usuario en la red social, a partir de su
  193.         // id de usuario. Si el id del nuevo usuario existe,
  194.         // se elimina de la red y se devuelve 'OK' a través del parámetro
  195.         // 'res'. Deben actualizarse la lista de seguidores y siguiendo
  196.         // en las listas de los demás usuarios de la red.
  197.         // Si el usuario no existía, se devuelve 'NO_EXISTE' a
  198.         // través de 'res'.
  199.         void eliminar_usuario(const std::string &usuario, Resultado &res);
  200.  
  201.         // Guarda toda la red social en disco. El nombre de fichero con los nombres de
  202.         // usuario se pasa como parámetro. Los datos de cada usuario se guardan
  203.         // según se indica en la clase UsuarioTwitter
  204.         void guardar_todo(const std::string &nom_fic_usuario) const;
  205.         //------------------------------------------------------------------
  206.  
  207.     private:
  208.         //------------------------------------------------------------------
  209.         // TIPOS PRIVADOS:
  210.         struct NodoUsuario;
  211.         typedef NodoUsuario *PtrUsuario;
  212.         struct NodoUsuario{
  213.             UsuarioTwitter usuario;
  214.             PtrUsuario sig;
  215.         };
  216.        
  217.         //------------------------------------------------------------------
  218.  
  219.         //------------------------------------------------------------------
  220.         // ATRIBUTOS:
  221.         unsigned num_users;
  222.         PtrUsuario usuarios; // Lista de todos los usuarios de la red
  223.         PtrUsuario usuario_conectado;  // Usuario actualmente conectado
  224.                                      // a la red social.
  225.         //------------------------------------------------------------------
  226.  
  227.         //------------------------------------------------------------------
  228.         // MÉTODOS PRIVADOS:
  229.        
  230.         // Busca un usuario en la lista de usuarios. Si lo encuentra,
  231.         // devuelve un puntero al nodo de la lista que contiene el usuario.
  232.         // Si no lo encuentra, devuelve NULL
  233.         PtrUsuario buscar_usuario(const std::string &id_usuario) const;
  234.  
  235.         // Eliminar toda la lista de usuarios
  236.         void borrar_todo();
  237.  
  238.         // Insertar un nuevo usuario al final de la lista de usuarios
  239.      
  240.         void insertar_final(const UsuarioTwitter &nuevo_usuario);
  241.  
  242.         // Eliminar un usuario de la lista de usuarios
  243.         // PRECONDICIÓN: el usuario existe
  244.         void borrar_usuario(const std::string &id_usuario);
  245.  
  246.  
  247.         //------------------------------------------------------------------
  248. };
  249. }
  250. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement