videoclub

Iniciado por anaaaaaaa, 15 Diciembre 2015, 17:34 PM

0 Miembros y 1 Visitante están viendo este tema.

anaaaaaaa

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.

0xFer

#1
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.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

anaaaaaaa

vale, muchas gracias por la ayuda, espero ir pudiendo hacer algo pero es muy complicado ya que acabo de empezar a programar.. :(

Orubatosu

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.
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

anaaaaaaa

ya.. pero si me lo han mandado en la universidad lo tengo q hacer si o si.. :(

MAFUS

Muy buenas.

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

engel lex

El otro tema fue borrado, prohibido hacer doble post
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

anaaaaaaa

#7
Tengo hecho esto, me faltan las ultimas funciones, terminar el mostrarpelicula y la funcion principal, alguna ayuda?


Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct Fecha
{
int dia, mes, any;
};

struct Pelicula
{
string nombre, genero;
int any_pelicula;
float precio;
Fecha fecha_alquiler;
};

int N = 5;

Pelicula IntroducirPelicula (void);
void MostrarPelicula (pelicula);
Fecha IntroducirFecha (void);
void MostrarFecha (Fecha f);
Fecha BorrarPelicula (void);
Fecha CompararFecha (Fecha, Fecha);

int main();
{
ofstream f;
f.opem(videoclub.txt)

int n;

cout << "Introduce el numero de peliculas que deseas alquilar" << endl;
cin >> n;

cout << "La pelicula mas cara es:" << endl;



system ("pause");
return;
}

Pelicula IntroducirPelicula (void);
{
    Pelicula p;
   
    cout << "Introducir el nombre de la pelicula." << endl;
    cin >> p.nombre;
   
    return p;
}

void MostrarPelicula (pelicula)
{



    cout << "El nombre de la pelicula es" << p.nombre << endl;
    cout << "Su fecha de estreno es" << endl;
    MostrarFecha (p.fecha);
    cout << "Su genero es" << p.genero << endl;
   
    return;
}

Fecha IntroducirFecha (void)
{
    Fecha f;
   
    cout << "Introducir el dia " << endl;
    cin >> f.dia;
    cout << "Introducir el mes " << endl;
    cin >> f.mes;
    cout << "Introducir el año " << endl;
    cin >> f.any;
   
    return f;
}

void MostrarFecha (Fecha f)
{
    cout << f.dia << " / " << f.mes << " / " << f.any << endl;
   
    return;
}





Fecha BorrarPelicula (void)



Fecha CompararFecha (Fecha, Fecha)





Mod: Los códigos deben ir en etiquetas GeSHi

Sr_Malweriks

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.
"Mientras tu duermes, hay otra persona en otro lugar del planeta trabajando para ser mejor en lo que tu quieres llegar a ser"

Gunhack

Bueee esta es mi sulución... Solo sería modificar para que se ordenen por precios  ;D

Dvd.h
Código (cpp) [Seleccionar]
#ifndef DVD_H_INCLUDED
#define DVD_H_INCLUDED

#include <iostream>

using namespace std;

class DVD {
public:
  DVD(string _Titulo, string _Categoria, string _Tiempo, string _Fecha, string _Precio):
    Titulo(_Titulo), Categoria(_Categoria), Tiempo(_Tiempo), Fecha(_Fecha), Precio(_Precio){}
  DVD():
    Titulo("Sin Titulo"), Categoria("General"), Tiempo("00:00:00"), Fecha("01/01/1990"), Precio("$0"){}

  string dar_Titulo() const { return Titulo;}
  string dar_Categoria() const { return Categoria;}
  string dar_Tiempo() const { return Tiempo;}
  string dar_Fecha() const { return Fecha;}
  string dar_Precio() const { return Precio;}

  void mod_Titulo(const string &_Titulo) {Titulo = _Titulo;}
  void mod_Categoria(const string &_Categoria) {Categoria = _Categoria;}
  void mod_Tiempo(const string &_Tiempo) {Tiempo = _Tiempo;}
  void mod_Fecha(const string &_Fecha) {Fecha = _Fecha;}
  void mod_Precio(const string &_Precio) {Precio =_Precio;}

private:
  string Titulo;
  string Categoria;
  string Tiempo;
  string Fecha;
  string Precio;
};


#endif // DVD_H_INCLUDED


Coleccion.h
Código (cpp) [Seleccionar]
#ifndef COLECCION_H_INCLUDED
#define COLECCION_H_INCLUDED

#include "DVD.h"
#include <fstream>

using namespace std;

class Coleccion {
public:
  Coleccion(const string &_NArch): N_Arch(_NArch), tamano(0), capacidad(0),modificado(0) {}
  ~Coleccion(){}
  void cargar_datos();
  void modif(const string &dato, int pos, int selec);
  void anadir(const DVD _Dvd);
  string buscar_Tit(const string &Titulo);
  string eliminar(const string &Titulo);
  string datos(int i);
  string datos(int i, int sel);
  int buscarn(const string &Titulo);

  void mod_Titulo(int i, const string &_Dato){ Dvd[i].mod_Titulo(_Dato);}
  void mod_Categoria(int i, const string &_Dato) { Dvd[i].mod_Categoria(_Dato);}
  void mod_Tiempo(int i, const string &_Dato) { Dvd[i].mod_Tiempo(_Dato);}
  void mod_Fecha(int i, const string &_Dato) { Dvd[i].mod_Fecha(_Dato);}
  void mod_Precio(int i, const string &_Dato) { Dvd[i].mod_Precio(_Dato);}

  void ordenar();
  string ordenar_cat();
  string ordenar_ano();
  void guardar();
  friend ostream& operator<<(ostream &os, const Coleccion &Col);
private:
  int buscar(const string &Titulo) const;
  void agregar(const DVD &_Dvd);
  void eliminar(int num);
  void memoria();
  DVD* Dvd;
  int tamano;
  int capacidad;
  string N_Arch;
  bool modificado;
};

#endif // COLECCION_H_INCLUDED


Coleccion.cpp
Código (cpp) [Seleccionar]
#include "Coleccion.h"
#include <fstream>
#include <sstream>
#include <conio.h>

using namespace std;

void Coleccion::cargar_datos() {
  int i=0;
  string Data[5];
  ifstream in("Coleccion.txt");
  if(in.fail()){
    cerr << "Error al cargar archivos!";
  }
  while(!in.eof()){
    if(getline(in,Data[i],'\n')){
    }
    if(Data[i][0]=='\0'){
      i=0;
      continue;
    }
    i++;
    if(i>=5){
      DVD _Dvd(Data[0], Data[1], Data[2], Data[3], Data[4]);
      agregar(_Dvd);
      i=0;
    }
  }
}

int Coleccion::buscarn(const string &Titulo){
  int n=buscar(Titulo);
  return n;
}

void Coleccion::modif(const string &dato, int pos, int selec) {
  string Dato_ant;
  switch(selec){
  case 1: Dvd[pos].mod_Titulo(dato); break;
  case 2: Dvd[pos].mod_Categoria(dato); break;
  case 3: Dvd[pos].mod_Tiempo(dato); break;
  case 4: Dvd[pos].mod_Fecha(dato); break;
  case 5: Dvd[pos].mod_Precio(dato); break;
  }
  ordenar();
}

void Coleccion::anadir(const DVD _Dvd){
    agregar(_Dvd);
    ordenar();
}

string Coleccion::buscar_Tit(const string &Titulo) {
  int num=buscar(Titulo);
  if(num!=-1){
    string Datos=datos(num);
    return Datos;
  } else {
    return "";
  }
}

string Coleccion::datos(int i) {
  string Datos;
  ostringstream os;
  os<<"Titulo: "<<Dvd[i].dar_Titulo()<<endl;
  os<<"Categoria: "<<Dvd[i].dar_Categoria()<<endl;
  os<<"Duracion: "<<Dvd[i].dar_Tiempo()<<endl;
  os<<"Fecha: "<<Dvd[i].dar_Fecha()<<endl;
  os<<"Precio: $"<<Dvd[i].dar_Precio()<<endl<<endl;
  Datos=os.str();
  return Datos;
}
string Coleccion::datos(int i, int sel ) {
  string Datos;
  ostringstream os;
  os<<"Titulo: "<<Dvd[i].dar_Titulo()<<endl;
  if(sel==2)
    os<<"Categoria: "<<Dvd[i].dar_Categoria()<<endl;
  os<<"Duracion: "<<Dvd[i].dar_Tiempo()<<endl;
  os<<"Fecha: "<<Dvd[i].dar_Fecha()<<endl;
  os<<"Precio: $"<<Dvd[i].dar_Precio()<<endl<<endl;
  Datos=os.str();
  return Datos;
}

string Coleccion::eliminar(const string &Titulo) {
  string Datos_ant="";
  int num=buscar(Titulo);
  if(num!=-1){
    Datos_ant=datos(num);
    eliminar(num);
  }
  ordenar();
  return Datos_ant;
}

void Coleccion::ordenar() {
    for(int i=0;i<tamano-1;i++){
    for (int j=i;j<tamano;j++){
      if(Dvd[i].dar_Titulo()>Dvd[j].dar_Titulo()){
        DVD Aux;
        Aux=Dvd[i];
        Dvd[i]=Dvd[j];
        Dvd[j]=Aux;
      }
    }
  }
  modificado=true;
  guardar();
}

string Coleccion::ordenar_cat(){
  ostringstream os;
  string categorias[]={"Comedia","SiFi","Romantica","Otras"};
  for(int i=0;i<4;i++){
    os << categorias[i]<< endl;
    for(int j=0;j<tamano;j++){
      if(Dvd[j].dar_Categoria()==categorias[i]){
        os<<datos(j,1)<<endl<<endl;
      }
    }
  }
  string cats=os.str();
  return cats;
}

string Coleccion::ordenar_ano(){
  ostringstream os;
  for(int i=0;i<tamano-1;i++){
    for (int j=i;j<tamano;j++){
      if(Dvd[i].dar_Fecha()>Dvd[j].dar_Fecha()){
        DVD Aux;
        Aux=Dvd[i];
        Dvd[i]=Dvd[j];
        Dvd[j]=Aux;
      }
    }
  }
  for(int i=0;i<tamano;i++){
    os<<datos(i)<<endl;
  }
  for(int i=0;i<tamano-1;i++){
    for (int j=i;j<tamano;j++){
      if(Dvd[i].dar_Titulo()>Dvd[j].dar_Titulo()){
        DVD Aux;
        Aux=Dvd[i];
        Dvd[i]=Dvd[j];
        Dvd[j]=Aux;
      }
    }
  }
  string cats=os.str();
  return cats;
}

void Coleccion::guardar() {
  if (modificado){
    ofstream out(N_Arch.c_str());
    for(int i=0; i<tamano; i++){
      out<<Dvd[i].dar_Titulo()<<endl;
      out<<Dvd[i].dar_Categoria()<<endl;
      out<<Dvd[i].dar_Tiempo()<<endl;
      out<<Dvd[i].dar_Fecha()<<endl;
      out<<Dvd[i].dar_Precio()<<endl;
    }
    out.close();
    modificado=false;
  }
}

ostream& operator<<(ostream &os, const Coleccion &Col) {
  for(int i=0;i<Col.tamano;i++){
    os<<"Titulo: "<<Col.Dvd[i].dar_Titulo()<<endl;
    os<<"Categoria: "<<Col.Dvd[i].dar_Categoria()<<endl;
    os<<"Duracion: "<<Col.Dvd[i].dar_Tiempo()<<endl;
    os<<"Fecha: "<<Col.Dvd[i].dar_Fecha()<<endl;
    os<<"Precio: $"<<Col.Dvd[i].dar_Precio()<<endl<<endl;
  }
  return os;
}

int Coleccion::buscar(const string &Titulo) const {
    for(int i=0; i<tamano; i++){
    if (Dvd[i].dar_Titulo()==Titulo)
      return i;
  }
  return -1;
}

void Coleccion::agregar(const DVD &_Dvd) {
  if(tamano==capacidad)
    memoria();
  Dvd[tamano]=_Dvd;
  tamano++;
}

void Coleccion::eliminar(int num) {
  tamano-=1;
  for(int i=num;i<tamano;i++){
    Dvd[i]=Dvd[i+1];
  }
}

void Coleccion::memoria() {
  if(capacidad==0){
    capacidad+=1;
    Dvd=new DVD[capacidad];
  }
  capacidad*=2;
  DVD* nuevo_Dvd=new DVD[capacidad];
  for(int i=0; i<tamano; i++){
    nuevo_Dvd[i]=Dvd[i];
  }
  delete[] Dvd;
  Dvd=nuevo_Dvd;
}


Main.cpp
Código (cpp) [Seleccionar]
#include "Coleccion.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <limits>

using namespace std;

void comandos(Coleccion &);
int anadir_cambiar(Coleccion&);
void crear_DVD(Coleccion &);
int mod_DVD(Coleccion &);
void buscarNom(Coleccion &);
void eliminarPel(Coleccion &);
void mostrarCol(Coleccion &);
void ordenarf(Coleccion &);
void ordenarc(Coleccion &);

int main()
{
  Coleccion Col("Coleccion.txt");
  Col.cargar_datos();
  comandos(Col);
}

void comandos(Coleccion &Col){
  string comandoss[]={"Cambiar o Agregar Pelicula","Buscar Pelicula","Eliminar Pelicula","Mostrar Coleccion","Ordenar por Fecha",
  "Ordenar por Categoria","Salir" };
  const int COMANDOS=7;
  int selec=COMANDOS-1;
  do{
    system("cls");
    for (int i=0;i<COMANDOS;i++){
      cout << "Seleccion: "<< i << " "<< comandoss[i]<<endl;
    }
    cin>> selec;
    cin.ignore(numeric_limits<int>::max(),'\n');
    switch(selec){
      case 0: system("cls"); anadir_cambiar(Col); break;
      case 1: system("cls"); buscarNom(Col); break;
      case 2: system("cls"); eliminarPel(Col); break;
      case 3: system("cls"); mostrarCol(Col); break;
      case 4: system("cls"); ordenarf(Col); break;
      case 5: system("cls"); ordenarc(Col); break;
      case 6: exit(0);
    }
  }while(selec<COMANDOS-1);
}
void buscarNom(Coleccion &Col){
  string Titulo;
  cout << "Ingrese el Titulo: ";
  getline(cin,Titulo,'\n');
  string Data= Col.buscar_Tit(Titulo);
  if(Data==""){
    cout << "No se encuentra la pelicula";
  } else {
    cout <<Data;
  }
  getch();
}
void eliminarPel(Coleccion &Col){
  string Titulo;
  cout << "Ingresa el Nombre:";
  getline(cin, Titulo,'\n');
  string Data=Col.eliminar(Titulo);
  if(Data!=""){
    cout << Col.buscar_Tit(Titulo);
    cout << "ha sido eliminada\n";
  } else {
    cout << Titulo << " No se encuentra en la Coleccion!\n";
  }
  getch();
}

void mostrarCol(Coleccion &Col){
  cout << Col;
  getch();
}

void ordenarf(Coleccion &Col){
  cout << Col.ordenar_ano();
  getch();
}
void ordenarc(Coleccion &Col){
  cout << Col.ordenar_cat();
  getch();
}

int anadir_cambiar(Coleccion &Col){
  int select;
  do{
    system("cls");
    cout << "Que desea hacer?\n1)Modificar\n2)Agregar\n3)Salir\n";
    cin >> select;
    cin.ignore(numeric_limits<int>::max(),'\n');
    switch (select)
    {
      case 1: mod_DVD(Col); break;
      case 2: crear_DVD(Col);break;
      case 3: return 1; break;
    }
  }while (select!=3);
}

void crear_DVD (Coleccion &Col) {
  string Titulo,Categoria,Tiempo,Fecha,Precio;
  cout << "Ingrese el Titulo: ";
  getline(cin,Titulo,'\n');
  cout << "Ingrese la Categoria: ";
  getline(cin,Categoria,'\n');
  cout << "Ingrese el Tiempo: ";
  getline(cin,Tiempo,'\n');
  cout << "Ingrese la Fecha: ";
  getline(cin,Fecha,'\n');
  cout << "Ingrese el Precio: ";
  getline(cin,Precio,'\n');
  DVD _Dvd(Titulo, Categoria, Tiempo, Fecha, Precio);
  Col.anadir(_Dvd);
}

int mod_DVD(Coleccion &Col) {
  string op[]={"Modificar Titulo","Modificar Categoria","Modificar Tiempo","Modificar Fecha","Modificar Precio","Salir" };
  string Dato;
  int sel;
  system("cls");
  cout << "Ingrese el Titulo: ";
  getline(cin,Dato,'\n');
  int num=Col.buscarn(Dato);

  if(num!=-1){
    do{
      system("cls");
      for(int i=0;i<6;i++){
        cout << i+1 <<") " <<op[i]<< endl;
      }
      cin>> sel;
      cin.ignore(numeric_limits<int>::max(),'\n');
      switch (sel){
        case 1: cout << "Ingresa el Nuevo Titulo: "; break;
        case 2: cout << "Ingresa la Nueva Categoria: "; break;
        case 3: cout << "Ingresa la Nueva Duración: "; break;
        case 4: cout << "Ingresa la Nueva Fecha: "; break;
        case 5: cout << "Ingresa el Nuevo Precio: "; break;
        case 6: return 1; break;
      }
      getline(cin,Dato,'\n');
      Col.modif(Dato,num,sel);
    }while(sel!=6);
    }else{
      cout << "La pelicula no está en la base de datos.";
      getch();
    }
}