Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: anaaaaaaa en 15 Diciembre 2015, 17:34 pm



Título: videoclub
Publicado por: anaaaaaaa en 15 Diciembre 2015, 17:34 pm
Hola, tengo q hacer este ejercicio de programacion y no se muy bien por donde empezar.. podeis ayudarme??

Hacer un programa que gestione la información de un videoclub donde la información de las películas estará
guardada en un fichero llamado "videoclub.txt":
A. Diseñar unas estructuras de datos adecuadas para guardar la información de cada película.
B. Realizar un programa que tenga las siguientes funcionalidades:
1) Introducir la información de una nueva película adquirida por el videoclub.
2) Eliminar una película del videoclub.
3) Buscar una determinada película del videoclub por una parte del título de ésta.
4) Mostrar que película es la más cara del videoclub.
5) Cuantas películas tiene el videoclub.
Todas las tareas se realizarán directamente sobre el fichero, sin la utilización de vectores.


Título: Re: videoclub
Publicado por: 0xFer en 15 Diciembre 2015, 19:50 pm
Puedes comenzar creando un fichero donde guardes el nombre de todas las peliculas existentes, luego la información de cada una de esas peliculas las puedes ir guardando en un fichero por cada pelicula. Así cada vez que quieras eliminar una pelicula tendrás que eliminar el nombre de la pelicula en el fichero donde está el nombre de todas las peliculas y luego eliminar el fichero que tenga el nombre de la pelicula, con eso puedes hacer fácilmente 2), 3) y 5), para buscar la pelicula más cara pues sólo tienes que ir leyendo el valor de cada una de las peliculas.

también puedes hacer todo en un solo fichero.

para aprender a manejar ficheros:
http://c.conclase.net/ficheros/?cap=002#inicio

Es dificil ayudar a gente en tu situación te recomiendo leer y practicar.


Título: Re: videoclub
Publicado por: anaaaaaaa en 16 Diciembre 2015, 00:46 am
vale, muchas gracias por la ayuda, espero ir pudiendo hacer algo pero es muy complicado ya que acabo de empezar a programar.. :(


Título: Re: videoclub
Publicado por: Orubatosu en 16 Diciembre 2015, 14:01 pm
Si "acabas de empezar" entonces este ejercicio te viene grande.

Deberías empezar por aprender lo básico, luego el acceso a ficheros, y luego llegarías a este ejercicio.


Título: Re: videoclub
Publicado por: anaaaaaaa en 16 Diciembre 2015, 18:25 pm
ya.. pero si me lo han mandado en la universidad lo tengo q hacer si o si.. :(


Título: Re: videoclub
Publicado por: MAFUS en 16 Diciembre 2015, 18:43 pm
Muy buenas.

¿Has realizado algo, como los menus, la estructura de datos, la estructura basica del programa?


Título: Re: videoclub
Publicado por: engel lex en 24 Diciembre 2015, 17:23 pm
El otro tema fue borrado, prohibido hacer doble post


Título: Re: videoclub
Publicado por: anaaaaaaa en 24 Diciembre 2015, 18:12 pm
Tengo hecho esto, me faltan las ultimas funciones, terminar el mostrarpelicula y la funcion principal, alguna ayuda?


Código
  1. #include <iostream>
  2. #include <string>
  3. #include <fstream>
  4. using namespace std;
  5.  
  6. struct Fecha
  7. {
  8. int dia, mes, any;
  9. };
  10.  
  11. struct Pelicula
  12. {
  13. string nombre, genero;
  14. int any_pelicula;
  15. float precio;
  16. Fecha fecha_alquiler;
  17. };
  18.  
  19. int N = 5;
  20.  
  21. Pelicula IntroducirPelicula (void);
  22. void MostrarPelicula (pelicula);
  23. Fecha IntroducirFecha (void);
  24. void MostrarFecha (Fecha f);
  25. Fecha BorrarPelicula (void);
  26. Fecha CompararFecha (Fecha, Fecha);
  27.  
  28. int main();
  29. {
  30. ofstream f;
  31. f.opem(videoclub.txt)
  32.  
  33. int n;
  34.  
  35. cout << "Introduce el numero de peliculas que deseas alquilar" << endl;
  36. cin >> n;
  37.  
  38. cout << "La pelicula mas cara es:" << endl;
  39.  
  40.  
  41.  
  42. system ("pause");
  43. return;
  44. }
  45.  
  46. Pelicula IntroducirPelicula (void);
  47. {
  48.     Pelicula p;
  49.  
  50.     cout << "Introducir el nombre de la pelicula." << endl;
  51.     cin >> p.nombre;
  52.  
  53.     return p;
  54. }
  55.  
  56. void MostrarPelicula (pelicula)
  57. {
  58.  
  59.  
  60.  
  61.     cout << "El nombre de la pelicula es" << p.nombre << endl;
  62.     cout << "Su fecha de estreno es" << endl;
  63.     MostrarFecha (p.fecha);
  64.     cout << "Su genero es" << p.genero << endl;
  65.  
  66.     return;
  67. }
  68.  
  69. Fecha IntroducirFecha (void)
  70. {
  71.     Fecha f;
  72.  
  73.     cout << "Introducir el dia " << endl;
  74.     cin >> f.dia;
  75.     cout << "Introducir el mes " << endl;
  76.     cin >> f.mes;
  77.     cout << "Introducir el año " << endl;
  78.     cin >> f.any;
  79.  
  80.     return f;
  81. }
  82.  
  83. void MostrarFecha (Fecha f)
  84. {
  85.     cout << f.dia << " / " << f.mes << " / " << f.any << endl;
  86.  
  87.     return;
  88. }
  89.  
  90.  
  91.  
  92.  
  93.  
  94. Fecha BorrarPelicula (void)
  95.  
  96.  
  97.  
  98. Fecha CompararFecha (Fecha, Fecha)




Mod: Los códigos deben ir en etiquetas GeSHi


Título: Re: videoclub
Publicado por: Sr_Malweriks en 28 Diciembre 2015, 01:03 am
Saludos!,

Por lo que enuncias en tu tema, el ejercicio es un TAD, es decir, un tipo abstracto de datos, donde las funciones que nombras, son las tipicas usadas para los TAD`s.
Te aconsejo que busques informacion con estas palabras claves "TAD en C++"" y seguro que en los 2 primeros enlaces encuentras la información que necesitas.


Título: Re: videoclub
Publicado por: Gunhack en 30 Diciembre 2015, 06:16 am
Bueee esta es mi sulución... Solo sería modificar para que se ordenen por precios  ;D

Dvd.h
Código
  1. #ifndef DVD_H_INCLUDED
  2. #define DVD_H_INCLUDED
  3.  
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. class DVD {
  9. public:
  10.  DVD(string _Titulo, string _Categoria, string _Tiempo, string _Fecha, string _Precio):
  11.    Titulo(_Titulo), Categoria(_Categoria), Tiempo(_Tiempo), Fecha(_Fecha), Precio(_Precio){}
  12.  DVD():
  13.    Titulo("Sin Titulo"), Categoria("General"), Tiempo("00:00:00"), Fecha("01/01/1990"), Precio("$0"){}
  14.  
  15.  string dar_Titulo() const { return Titulo;}
  16.  string dar_Categoria() const { return Categoria;}
  17.  string dar_Tiempo() const { return Tiempo;}
  18.  string dar_Fecha() const { return Fecha;}
  19.  string dar_Precio() const { return Precio;}
  20.  
  21.  void mod_Titulo(const string &_Titulo) {Titulo = _Titulo;}
  22.  void mod_Categoria(const string &_Categoria) {Categoria = _Categoria;}
  23.  void mod_Tiempo(const string &_Tiempo) {Tiempo = _Tiempo;}
  24.  void mod_Fecha(const string &_Fecha) {Fecha = _Fecha;}
  25.  void mod_Precio(const string &_Precio) {Precio =_Precio;}
  26.  
  27. private:
  28.  string Titulo;
  29.  string Categoria;
  30.  string Tiempo;
  31.  string Fecha;
  32.  string Precio;
  33. };
  34.  
  35.  
  36. #endif // DVD_H_INCLUDED
  37.  

Coleccion.h
Código
  1. #ifndef COLECCION_H_INCLUDED
  2. #define COLECCION_H_INCLUDED
  3.  
  4. #include "DVD.h"
  5. #include <fstream>
  6.  
  7. using namespace std;
  8.  
  9. class Coleccion {
  10. public:
  11.  Coleccion(const string &_NArch): N_Arch(_NArch), tamano(0), capacidad(0),modificado(0) {}
  12.  ~Coleccion(){}
  13.  void cargar_datos();
  14.  void modif(const string &dato, int pos, int selec);
  15.  void anadir(const DVD _Dvd);
  16.  string buscar_Tit(const string &Titulo);
  17.  string eliminar(const string &Titulo);
  18.  string datos(int i);
  19.  string datos(int i, int sel);
  20.  int buscarn(const string &Titulo);
  21.  
  22.  void mod_Titulo(int i, const string &_Dato){ Dvd[i].mod_Titulo(_Dato);}
  23.  void mod_Categoria(int i, const string &_Dato) { Dvd[i].mod_Categoria(_Dato);}
  24.  void mod_Tiempo(int i, const string &_Dato) { Dvd[i].mod_Tiempo(_Dato);}
  25.  void mod_Fecha(int i, const string &_Dato) { Dvd[i].mod_Fecha(_Dato);}
  26.  void mod_Precio(int i, const string &_Dato) { Dvd[i].mod_Precio(_Dato);}
  27.  
  28.  void ordenar();
  29.  string ordenar_cat();
  30.  string ordenar_ano();
  31.  void guardar();
  32.  friend ostream& operator<<(ostream &os, const Coleccion &Col);
  33. private:
  34.  int buscar(const string &Titulo) const;
  35.  void agregar(const DVD &_Dvd);
  36.  void eliminar(int num);
  37.  void memoria();
  38.  DVD* Dvd;
  39.  int tamano;
  40.  int capacidad;
  41.  string N_Arch;
  42.  bool modificado;
  43. };
  44.  
  45. #endif // COLECCION_H_INCLUDED
  46.  

Coleccion.cpp
Código
  1. #include "Coleccion.h"
  2. #include <fstream>
  3. #include <sstream>
  4. #include <conio.h>
  5.  
  6. using namespace std;
  7.  
  8. void Coleccion::cargar_datos() {
  9.  int i=0;
  10.  string Data[5];
  11.  ifstream in("Coleccion.txt");
  12.  if(in.fail()){
  13.    cerr << "Error al cargar archivos!";
  14.  }
  15.  while(!in.eof()){
  16.    if(getline(in,Data[i],'\n')){
  17.    }
  18.    if(Data[i][0]=='\0'){
  19.      i=0;
  20.      continue;
  21.    }
  22.    i++;
  23.    if(i>=5){
  24.      DVD _Dvd(Data[0], Data[1], Data[2], Data[3], Data[4]);
  25.      agregar(_Dvd);
  26.      i=0;
  27.    }
  28.  }
  29. }
  30.  
  31. int Coleccion::buscarn(const string &Titulo){
  32.  int n=buscar(Titulo);
  33.  return n;
  34. }
  35.  
  36. void Coleccion::modif(const string &dato, int pos, int selec) {
  37.  string Dato_ant;
  38.  switch(selec){
  39.  case 1: Dvd[pos].mod_Titulo(dato); break;
  40.  case 2: Dvd[pos].mod_Categoria(dato); break;
  41.  case 3: Dvd[pos].mod_Tiempo(dato); break;
  42.  case 4: Dvd[pos].mod_Fecha(dato); break;
  43.  case 5: Dvd[pos].mod_Precio(dato); break;
  44.  }
  45.  ordenar();
  46. }
  47.  
  48. void Coleccion::anadir(const DVD _Dvd){
  49.    agregar(_Dvd);
  50.    ordenar();
  51. }
  52.  
  53. string Coleccion::buscar_Tit(const string &Titulo) {
  54.  int num=buscar(Titulo);
  55.  if(num!=-1){
  56.    string Datos=datos(num);
  57.    return Datos;
  58.  } else {
  59.    return "";
  60.  }
  61. }
  62.  
  63. string Coleccion::datos(int i) {
  64.  string Datos;
  65.  ostringstream os;
  66.  os<<"Titulo: "<<Dvd[i].dar_Titulo()<<endl;
  67.  os<<"Categoria: "<<Dvd[i].dar_Categoria()<<endl;
  68.  os<<"Duracion: "<<Dvd[i].dar_Tiempo()<<endl;
  69.  os<<"Fecha: "<<Dvd[i].dar_Fecha()<<endl;
  70.  os<<"Precio: $"<<Dvd[i].dar_Precio()<<endl<<endl;
  71.  Datos=os.str();
  72.  return Datos;
  73. }
  74. string Coleccion::datos(int i, int sel ) {
  75.  string Datos;
  76.  ostringstream os;
  77.  os<<"Titulo: "<<Dvd[i].dar_Titulo()<<endl;
  78.  if(sel==2)
  79.    os<<"Categoria: "<<Dvd[i].dar_Categoria()<<endl;
  80.  os<<"Duracion: "<<Dvd[i].dar_Tiempo()<<endl;
  81.  os<<"Fecha: "<<Dvd[i].dar_Fecha()<<endl;
  82.  os<<"Precio: $"<<Dvd[i].dar_Precio()<<endl<<endl;
  83.  Datos=os.str();
  84.  return Datos;
  85. }
  86.  
  87. string Coleccion::eliminar(const string &Titulo) {
  88.  string Datos_ant="";
  89.  int num=buscar(Titulo);
  90.  if(num!=-1){
  91.    Datos_ant=datos(num);
  92.    eliminar(num);
  93.  }
  94.  ordenar();
  95.  return Datos_ant;
  96. }
  97.  
  98. void Coleccion::ordenar() {
  99.    for(int i=0;i<tamano-1;i++){
  100.    for (int j=i;j<tamano;j++){
  101.      if(Dvd[i].dar_Titulo()>Dvd[j].dar_Titulo()){
  102.        DVD Aux;
  103.        Aux=Dvd[i];
  104.        Dvd[i]=Dvd[j];
  105.        Dvd[j]=Aux;
  106.      }
  107.    }
  108.  }
  109.  modificado=true;
  110.  guardar();
  111. }
  112.  
  113. string Coleccion::ordenar_cat(){
  114.  ostringstream os;
  115.  string categorias[]={"Comedia","SiFi","Romantica","Otras"};
  116.  for(int i=0;i<4;i++){
  117.    os << categorias[i]<< endl;
  118.    for(int j=0;j<tamano;j++){
  119.      if(Dvd[j].dar_Categoria()==categorias[i]){
  120.        os<<datos(j,1)<<endl<<endl;
  121.      }
  122.    }
  123.  }
  124.  string cats=os.str();
  125.  return cats;
  126. }
  127.  
  128. string Coleccion::ordenar_ano(){
  129.  ostringstream os;
  130.  for(int i=0;i<tamano-1;i++){
  131.    for (int j=i;j<tamano;j++){
  132.      if(Dvd[i].dar_Fecha()>Dvd[j].dar_Fecha()){
  133.        DVD Aux;
  134.        Aux=Dvd[i];
  135.        Dvd[i]=Dvd[j];
  136.        Dvd[j]=Aux;
  137.      }
  138.    }
  139.  }
  140.  for(int i=0;i<tamano;i++){
  141.    os<<datos(i)<<endl;
  142.  }
  143.  for(int i=0;i<tamano-1;i++){
  144.    for (int j=i;j<tamano;j++){
  145.      if(Dvd[i].dar_Titulo()>Dvd[j].dar_Titulo()){
  146.        DVD Aux;
  147.        Aux=Dvd[i];
  148.        Dvd[i]=Dvd[j];
  149.        Dvd[j]=Aux;
  150.      }
  151.    }
  152.  }
  153.  string cats=os.str();
  154.  return cats;
  155. }
  156.  
  157. void Coleccion::guardar() {
  158.  if (modificado){
  159.    ofstream out(N_Arch.c_str());
  160.    for(int i=0; i<tamano; i++){
  161.      out<<Dvd[i].dar_Titulo()<<endl;
  162.      out<<Dvd[i].dar_Categoria()<<endl;
  163.      out<<Dvd[i].dar_Tiempo()<<endl;
  164.      out<<Dvd[i].dar_Fecha()<<endl;
  165.      out<<Dvd[i].dar_Precio()<<endl;
  166.    }
  167.    out.close();
  168.    modificado=false;
  169.  }
  170. }
  171.  
  172. ostream& operator<<(ostream &os, const Coleccion &Col) {
  173.  for(int i=0;i<Col.tamano;i++){
  174.    os<<"Titulo: "<<Col.Dvd[i].dar_Titulo()<<endl;
  175.    os<<"Categoria: "<<Col.Dvd[i].dar_Categoria()<<endl;
  176.    os<<"Duracion: "<<Col.Dvd[i].dar_Tiempo()<<endl;
  177.    os<<"Fecha: "<<Col.Dvd[i].dar_Fecha()<<endl;
  178.    os<<"Precio: $"<<Col.Dvd[i].dar_Precio()<<endl<<endl;
  179.  }
  180.  return os;
  181. }
  182.  
  183. int Coleccion::buscar(const string &Titulo) const {
  184.    for(int i=0; i<tamano; i++){
  185.    if (Dvd[i].dar_Titulo()==Titulo)
  186.      return i;
  187.  }
  188.  return -1;
  189. }
  190.  
  191. void Coleccion::agregar(const DVD &_Dvd) {
  192.  if(tamano==capacidad)
  193.    memoria();
  194.  Dvd[tamano]=_Dvd;
  195.  tamano++;
  196. }
  197.  
  198. void Coleccion::eliminar(int num) {
  199.  tamano-=1;
  200.  for(int i=num;i<tamano;i++){
  201.    Dvd[i]=Dvd[i+1];
  202.  }
  203. }
  204.  
  205. void Coleccion::memoria() {
  206.  if(capacidad==0){
  207.    capacidad+=1;
  208.    Dvd=new DVD[capacidad];
  209.  }
  210.  capacidad*=2;
  211.  DVD* nuevo_Dvd=new DVD[capacidad];
  212.  for(int i=0; i<tamano; i++){
  213.    nuevo_Dvd[i]=Dvd[i];
  214.  }
  215.  delete[] Dvd;
  216.  Dvd=nuevo_Dvd;
  217. }
  218.  

Main.cpp
Código
  1. #include "Coleccion.h"
  2. #include <iostream>
  3. #include <windows.h>
  4. #include <conio.h>
  5. #include <limits>
  6.  
  7. using namespace std;
  8.  
  9. void comandos(Coleccion &);
  10. int anadir_cambiar(Coleccion&);
  11. void crear_DVD(Coleccion &);
  12. int mod_DVD(Coleccion &);
  13. void buscarNom(Coleccion &);
  14. void eliminarPel(Coleccion &);
  15. void mostrarCol(Coleccion &);
  16. void ordenarf(Coleccion &);
  17. void ordenarc(Coleccion &);
  18.  
  19. int main()
  20. {
  21.  Coleccion Col("Coleccion.txt");
  22.  Col.cargar_datos();
  23.  comandos(Col);
  24. }
  25.  
  26. void comandos(Coleccion &Col){
  27.  string comandoss[]={"Cambiar o Agregar Pelicula","Buscar Pelicula","Eliminar Pelicula","Mostrar Coleccion","Ordenar por Fecha",
  28.  "Ordenar por Categoria","Salir" };
  29.  const int COMANDOS=7;
  30.  int selec=COMANDOS-1;
  31.  do{
  32.    system("cls");
  33.    for (int i=0;i<COMANDOS;i++){
  34.      cout << "Seleccion: "<< i << " "<< comandoss[i]<<endl;
  35.    }
  36.    cin>> selec;
  37.    cin.ignore(numeric_limits<int>::max(),'\n');
  38.    switch(selec){
  39.      case 0: system("cls"); anadir_cambiar(Col); break;
  40.      case 1: system("cls"); buscarNom(Col); break;
  41.      case 2: system("cls"); eliminarPel(Col); break;
  42.      case 3: system("cls"); mostrarCol(Col); break;
  43.      case 4: system("cls"); ordenarf(Col); break;
  44.      case 5: system("cls"); ordenarc(Col); break;
  45.      case 6: exit(0);
  46.    }
  47.  }while(selec<COMANDOS-1);
  48. }
  49. void buscarNom(Coleccion &Col){
  50.  string Titulo;
  51.  cout << "Ingrese el Titulo: ";
  52.  getline(cin,Titulo,'\n');
  53.  string Data= Col.buscar_Tit(Titulo);
  54.  if(Data==""){
  55.    cout << "No se encuentra la pelicula";
  56.  } else {
  57.    cout <<Data;
  58.  }
  59.  getch();
  60. }
  61. void eliminarPel(Coleccion &Col){
  62.  string Titulo;
  63.  cout << "Ingresa el Nombre:";
  64.  getline(cin, Titulo,'\n');
  65.  string Data=Col.eliminar(Titulo);
  66.  if(Data!=""){
  67.    cout << Col.buscar_Tit(Titulo);
  68.    cout << "ha sido eliminada\n";
  69.  } else {
  70.    cout << Titulo << " No se encuentra en la Coleccion!\n";
  71.  }
  72.  getch();
  73. }
  74.  
  75. void mostrarCol(Coleccion &Col){
  76.  cout << Col;
  77.  getch();
  78. }
  79.  
  80. void ordenarf(Coleccion &Col){
  81.  cout << Col.ordenar_ano();
  82.  getch();
  83. }
  84. void ordenarc(Coleccion &Col){
  85.  cout << Col.ordenar_cat();
  86.  getch();
  87. }
  88.  
  89. int anadir_cambiar(Coleccion &Col){
  90.  int select;
  91.  do{
  92.    system("cls");
  93.    cout << "Que desea hacer?\n1)Modificar\n2)Agregar\n3)Salir\n";
  94.    cin >> select;
  95.    cin.ignore(numeric_limits<int>::max(),'\n');
  96.    switch (select)
  97.    {
  98.      case 1: mod_DVD(Col); break;
  99.      case 2: crear_DVD(Col);break;
  100.      case 3: return 1; break;
  101.    }
  102.  }while (select!=3);
  103. }
  104.  
  105. void crear_DVD (Coleccion &Col) {
  106.  string Titulo,Categoria,Tiempo,Fecha,Precio;
  107.  cout << "Ingrese el Titulo: ";
  108.  getline(cin,Titulo,'\n');
  109.  cout << "Ingrese la Categoria: ";
  110.  getline(cin,Categoria,'\n');
  111.  cout << "Ingrese el Tiempo: ";
  112.  getline(cin,Tiempo,'\n');
  113.  cout << "Ingrese la Fecha: ";
  114.  getline(cin,Fecha,'\n');
  115.  cout << "Ingrese el Precio: ";
  116.  getline(cin,Precio,'\n');
  117.  DVD _Dvd(Titulo, Categoria, Tiempo, Fecha, Precio);
  118.  Col.anadir(_Dvd);
  119. }
  120.  
  121. int mod_DVD(Coleccion &Col) {
  122.  string op[]={"Modificar Titulo","Modificar Categoria","Modificar Tiempo","Modificar Fecha","Modificar Precio","Salir" };
  123.  string Dato;
  124.  int sel;
  125.  system("cls");
  126.  cout << "Ingrese el Titulo: ";
  127.  getline(cin,Dato,'\n');
  128.  int num=Col.buscarn(Dato);
  129.  
  130.  if(num!=-1){
  131.    do{
  132.      system("cls");
  133.      for(int i=0;i<6;i++){
  134.        cout << i+1 <<") " <<op[i]<< endl;
  135.      }
  136.      cin>> sel;
  137.      cin.ignore(numeric_limits<int>::max(),'\n');
  138.      switch (sel){
  139.        case 1: cout << "Ingresa el Nuevo Titulo: "; break;
  140.        case 2: cout << "Ingresa la Nueva Categoria: "; break;
  141.        case 3: cout << "Ingresa la Nueva Duración: "; break;
  142.        case 4: cout << "Ingresa la Nueva Fecha: "; break;
  143.        case 5: cout << "Ingresa el Nuevo Precio: "; break;
  144.        case 6: return 1; break;
  145.      }
  146.      getline(cin,Dato,'\n');
  147.      Col.modif(Dato,num,sel);
  148.    }while(sel!=6);
  149.    }else{
  150.      cout << "La pelicula no está en la base de datos.";
  151.      getch();
  152.    }
  153. }
  154.