Está en la página 1de 42

OBJETIVO: Simular un Sistema de Informacin usando las herramientas hasta ahora

aprendidas de C++.
Declaracin del problema: Su Negocio
Requerimientos:
- Identificar la informacin que usted necesitara para administrar su negocio; Esta deber
aparecer en su reporte inmediatamente despus de la descripcin de su negocio;
- Identificar los mdulos que habrn de componer su aplicacin; En su reporte deber
incluir un breve esquema grfico del diseo del conjunto de mdulos usados indicando su
Interactuacin, esto es, qu mdulo usa a cual o cuales mdulos. Deber usar
Compilacin por separado para su desarrollo;
- En su reporte debe incluir un listado de sus mdulos indicando el nombre de la funcin
que lo implementa, las precondiciones y las postcondiciones
- Usando archivos binarios, implementar los registros necesarios para almacenar y
recuperar la informacin; Usar <fstream> para implementar los archivos, no se aceptar
otro estilo de creacin y procesamiento de archivos que no sea mediante la librera
<fstream>;
- Usando los archivos como tablas de registros, desarrollar funciones cuyo desempeo sea
parecido al de la sentencia SELECT ... FROM y WHERE condicion_booleana de SQL hacer
query a sus tablas para obtener la informacin que usted identifico como necesaria
para administrar su negocio.
ENTREGA

ESTRICTAMENTE, MUY ESTRICTAMENTE: SU TRABAJO DEBE SER INDIVIDUAL

FECHA: Da del examen final (Mircoles 15 Dic)
HORA: La del examen final ( 1900 )
LUGAR: El que se establezca para el examen final (AB-208)
FORMATO: Esta hoja impresa, como primera pgina de su informe, con sus datos llenos, tambin
impresos GRAPADA, GRAPADA a otra(s) hoja(s) similar(es) de su reporte, en formato IMPRESO,
IMPRESO en hojas blancas, blancas, de 8 X 11, identificadas cada una en la esquina superior
derecha con su matrcula y nombre, y con el nmero de hojas en el formato X de Y; SU TRABAJO
DEBE LLEGAR LISTO PARA LA ENTREGA, NO SE ACEPTARN TRABAJOS HECHOS MANUALMENTE y
A LTIMO MOMENTO EN EL AULA. La segunda pgina de su entrega debe ser la declaracin
de su negocio.

Gestin de una Tienda de Alquiler de Pelculas
ABC Movies

1. Resumen
En este documento se explica una brevemente la razn de negocio y las funciones que
desempea una pequea tienda de renta de pelculas, con fines de analizar sus funciones
operativas y poder disear una solucin informtica que automatice todos los procedimientos
que se realizan en el da a da del negocio.
2. Definicin del Negocio
Una tienda de alquiler de pelculas de Santo Domingo posee alrededor de 5000 pelculas de
los que requiere llevar registro.
Cada una de las pelculas tiene en su cartula un nmero que la identifica. Para cada pelcula,
se necesita conocer ttulo, duracin, director y la categora segn la siguiente clasificacin:
drama, accin, suspenso, comedia, guerra y ciencia-ficcin, documental. Existen muchas
copias de la mayora de las pelculas, Se le asigna a cada pelcula un identificador especfico,
y as se puede saber dnde se encuentra esta pelcula. Una pelcula puede ser tanto formato
DVD Blue Ray. Siempre se tiene por lo menos un DVD Blue Ray de cada pelcula que se
registra. Algunas de las pelculas son muy largas, as que se tienen pelculas que ocupan
mltiples discos.
Nuestros clientes al momento de solicitar en alquiler un DVD o Blue Ray preguntan por su
ttulo, pero frecuentemente preguntan por los protagonistas de la pelcula que quiere alquilar.
As, que se debe llevar el registro de los actores que aparecen en cada pelcula. No todas las
pelculas tienen actores (Ej. Los documentales) Estas sern almacenadas por compaa
productora.
La tienda de renta de pelculas tiene muchos clientes y solamente alquila pelculas a personas
que sean socias de la tienda. Para que una persona pueda ser socio debe afiliarse, para lo
cual se le asigna un nmero que lo identifica y se deben registrar sus nombres y apellidos,
nmero telefnico, direccin de residencia.
Se necesita llevar el registro de qu DVD Pelcula ha alquilado cada socio en un momento
determinado. Un cliente puede alquilar varios DVDs simultneamente.
Necesitamos registrar el histrico de todos los alquileres realizados. Cada vez que un cliente
alquila un DVD o Blue Ray, se debe registrar la fecha de alquiler y el da que regresar el
disco. Todos los discos deben ser regresados a la tienda a ms tardar tres das despus de
su alquiler, y en caso de no entregarse a tiempo, se cobrar una multa de $200 por pelcula y
da de mora.




3. Objetivos del sistema
En este documento vamos a definir una lista con los diferentes objetivos que se esperan
alcanzar cuando el sistema software a desarrollar est en produccin. Sern especificados
mediante una plantilla para objetivos.
Objetivos
Pelculas Obj-1

Gestionar las Pelculas
Descripcin El sistema deber gestionar los DVDs y Blue Rays disponibles en
la tienda: adquisiciones, retiradas, disponibilidad, Descripcin, etc.
Comentarios ninguno

Socios Obj-2
Gestionar los socios
Descripcin El sistema deber gestionar las socios de la tienda de Pelculas:
Suscripcin, Cancelacin de Suscripcin, modificaciones de datos,
multas, cuentas, etc.
Comentarios ninguno

Alquileres Obj-3
Gestionar los alquileres
Descripcin El sistema deber gestionar los alquileres entregas, devoluciones,
disponibilidad, etc.
Comentarios ninguno




4. Requisitos de almacenamiento de informacin
Esta seccin contiene la lista de requisitos de almacenamiento de informacin que se han
identificado, utilizando para especificarlos la plantilla para requisitos de almacenamiento de
informacin. Especificaremos toda la informacin que debemos almacenar en nuestro
sistema.

Informacin sobre Alquileres
Objetivos
asociados
OBJ 03 Gestionar la renta de Pelculas

Requisitos
asociados
Precondicin:
Suscripcin de socio
Registro de pelculas

Requisito:
Consulta de un socio

Funciones:
Alquiler de DVDs y Blue Rays
Devolucin de Discos
Consulta de pelculas rentadas


Descripcin El sistema deber almacenar la informacin correspondiente a los
alquileres de los socios de la tienda de pelculas. En concreto:
Datos
especficos
Id del registro de alquiler
Id del Socio
Fecha de alquiler
Fecha de entrega
Ingresos realizados en la cuenta, indicando fecha y cantidad
Cantidad de Pelculas rentadas y devueltas.
Pagos por mora, indicando el balance de la multa; en este caso
indicar tambin la pelcula alquilada y la fecha del alquiler.

Comentarios ninguno



Informacin sobre Pelculas
Objetivos
asociados
OBJ 01 Gestionar las pelculas y discos
Requisitos
asociados
Precondicin:
Ninguna

Funciones:
Andir pelculas
Alquiler de DVDs y Blue Rays
Devolucin de Discos
Consulta de pelcula

Descripcin El sistema deber almacenar la informacin correspondiente a las
pelculas de la tienda de Pelculas. En concreto:
Datos
especficos
Ttulo de la pelcula
Cantidad de discos de la pelcula alquiladas en cada momento
Cantidad de discos de la pelcula disponibles para ser alquiladas
en cada momento.
Formato de Disco (DVD Blue Ray)
Nmero de identificacin (nico para cada Pelcula)
Cantidad de discos dentro de la cartula
Tipo de la pelcula: infantil, accin, ciencia-ficcin o adultos
Duracin de la pelcula, en horas y minutos
Actores principales de la pelcula
Director de la pelcula
Productora de la pelcula
Ao de produccin de la pelcula
Comentarios ninguno

















Informacin sobre Socios
Objetivos
asociados
OBJ 02 Gestionar los socios
Requisitos
asociados
Precondicin:
Ninguna

Funciones:
registrar socios
Modificacin de datos de un socio
Consulta de un socio
Consulta de pelculas rentadas

Descripcin El sistema deber almacenar la informacin correspondiente a los
socios de la tienda de Pelculas. En concreto:
Datos
especficos
Nmero de socio, que deber ser nico para cada socio
Nmero del documento de identidad
Nombre y apellidos
Fecha de nacimiento
Sexo
Fecha de suscripcin como socio
Direccin
Telfonos

Comentarios ninguno






















Mdulo Socios
En el mdulo de socios estn las funciones que permitirn agregar nuevos registros de socios,
consultar, modificar la informacin de dichos registros, etc.




Estructura de los archivos de Datos

Socios
(socios.dat)
struct Socio{
int id_socio;
char cedula[15];
char nombre[50];
char apellido[50];
char fecha_nacimiento[15];
char sexo[2];
char fecha_suscripcion[15];
char direcion[100];
char telefono[16];
};


Funciones

void escribir_socio(); Crea un nuevo registro de socio.
void buscar_socio(); Realiza la bsqueda de un socio en particular.
void listar_socio(); Lista todos los socios registrados en el sistema.
void modificar_socio(); modifica la informacin contenida en el registro del socio.


















Mdulo Pelculas
En este mdulo se administran los registros de las pelculas (discos) del negocio. Se
encuentran disponibles las funciones para dar entrada a nuevas pelculas, modificar los
registros, consultar, etc.



Estructura de los archivos de Datos

Pelculas
(pelculas.dat)
struct Pelicula{
char titulo[80];
int cant_alquilada;
int cant_disponible;
char formato[10];
char id_pelicula[8];
int cant_discos;
char tipo[80];
char duracion[15];
char actores_p[100];
char director[36];
char productora[45];
int anio;
char status;
};



Funciones

void listar_pelicula(); Lista todas las pelculas que tienen estatus disponible.
void escribir_pelicula(); Crea un nuevo registro de pelcula.
void modificar_pelicula(char id[8]); Modifica el estatus de la pelcula, R=rentada
D=disponible.
void buscar_pelicula(); Realiza la bsqueda de una pelcula en particular, por el nmero de
ID de la pelcula.
void recibir_pelicula(void); Esta funcin se utiliza para darle entrada a los discos cuando
son devueltos por el cliente y modifica a la vez el estatus a disponible.














Mdulo Alquileres
En este modulo se gestiona todo acerca del alquiler de discos de pelculas, crear nuevos
alquileres, modificarlos, realizar consultas, etc. Adems de efectuar cobro por alquiler de
pelculas y listar todos los alquileres activos en el sistema.



Estructura del archivo de Datos

Alquiler
(alquileres.dat)
struct Alquiler{
char id[8];
int id_socio;
char id_pelicula[8];
time_t fecha_de_alquiler;
time_t fecha_de_entrega;
char status; // C (cerrado) A(activo) P(pendiente)

};




Funciones

void escribir_alquiler(); Crea un nuevo registro de alquiler
void listar_alquiler(); Lista todos los alquileres activos en el sistema (where satus=A)
void buscar_alquiler(); Realiza la bsqueda de un alquiler por ID de pelcula o Socio.
void modificar_alquiler(char id[8]); Modifica el estatus de un alquiler del valor por defecto
P=pendiente a A=activo C=cerrado.
void cobrar(); procesa el cobro por las pelcula seleccionadas para un cliente especfico.





















MODULO SOCIOS

void escribir_socio();
void buscar_socio();
void listar_socio();
void modificar_socio();


Diagrama de Mdulos del sistema y su iteractuacin


























MODULO ALQUILER
Lectura();

Escritura();
Llama func(); Llama func();



void leer_alquiler();
void escribir_alquiler();
void listar_alquiler();
void buscar_alquiler();
void modificar_alquiler(char id[8]);



void cobrar();

















cobrar();
alquileres.d
at
modificar_alquiler(); menu_alquiler();
MODULO PELICULAS
void listar_pelicula();
void leer_pelicula();
void escribir_pelicula();
void modificar_pelicula(char id[8]);
void buscar_pelicula();






























MODULO ALQUILER




MODULO PELICULAS
Escritura();

Llama func();
Escritura();
Llama func();





























escribir_alquiler();
alquileres.d
at
modificar_pelicula(); menu_alquiler();
peliculas.
dat
MODULO PELICULAS
void recibir_pelicula():
MODULO ALQUILER
Escritura();
Llama func();
Lectura();

Escritura();
Llama func();
Llama func();































recibir_pelicula();
alquileres.d
at
modificar_alquiler();
modificar_pelicula();
peliculas.
dat
menu_pelicula();
CDIGO
cabecero.cpp

/*
Archivo cabecero

*/

#include <iostream>
#include <stdio>
#include <stdlib>
#include <string>
#include <fstream>
#include <conio>

using namespace std;

#define F_SOCIOS "socios.dat"
#define F_PELICULAS "peliculas.dat"
#define F_ALQUILERES "alquileres.dat"
#define TAB '\t'

struct Socio{
int id_socio;
char cedula[15];
char nombre[50];
char apellido[50];
char fecha_nacimiento[15];
char sexo[2];
char fecha_suscripcion[15];
char direcion[100];
char telefono[16];
};

struct Alquiler{
char id[8];
int id_socio;
char id_pelicula[8];
time_t fecha_de_alquiler;
time_t fecha_de_entrega;
char status; // C (cerrado) A(activo) P(pendiente)

};















struct Pelicula{
char titulo[80];
int cant_alquilada;
int cant_disponible;
char formato[10];
char id_pelicula[8];
int cant_discos;
char tipo[80];
char duracion[15];
char actores_p[100];
char director[36];
char productora[45];
int anio;
char status;
};



void menu_principal(void);
void menu_socio(void);
void menu_alquiler(void);
void menu_pelicula(void);

void escribir_socio();
void buscar_socio();
void listar_socio();
void modificar_socio();

void listar_pelicula();
void escribir_pelicula();
void modificar_pelicula(char id[8]);
void buscar_pelicula();
void recibir_pelicula(void);

void escribir_alquiler();
void listar_alquiler();
void buscar_alquiler();
void modificar_alquiler(char id[8]);
void cobrar();













main.cpp


/*
Funcin Main

*/

#include "cabecero.h"
int main (){

menu_principal();


return 0;

}

































menuprincipal.cpp
/*
Funcin Men Principal
*/
#include "cabecero.h"

void menu_principal(void){

char respuesta;
string error;

do{
system("cls");

cout <<endl <<endl <<"\t\t\t\tABC Movies" <<endl <<endl <<endl;

cout <<"\t\t\tSistema de Alquiler de peliculas" <<endl <<endl;

cout <<"\t\t\t\tMenu principal" <<endl <<endl <<endl;

cout <<"\t\t\t1<- Socios" <<endl <<endl;

cout <<"\t\t\t2<- Peliculas" <<endl <<endl;

cout <<"\t\t\t3<- Alquileres" <<endl <<endl;

cout <<"\t\t\t0<- Salir" <<endl;

cout <<error <<endl;

cout <<"\t\t\tElija una opcion:";
cin >>respuesta;

switch(respuesta){
case '1':{
menu_socio();
}break;
case '2':{
menu_pelicula();
}break;
case '3':{
menu_alquiler();
}break;
default:{
error =" Opcion invalida, intentelo otra vez!";
}
}break;

}while(respuesta =='0');


}


menualquiler.cpp

/*
Funcin Men Alquiler
*/

#include "cabecero.h"

void menu_alquiler(){

char respuesta;
string error;

do{
system("cls");

cout <<endl <<endl <<"\t\t\t\tABC Movies" <<endl <<endl <<endl;

cout <<"\t\t\tSistema de Alquiler de peliculas" <<endl <<endl;

cout <<"\t\t\t\tMenu Alquileres" <<endl <<endl <<endl;

cout <<"\t\t\t1<-Seleccionar Peliculas para alquilar" <<endl <<endl;

cout <<"\t\t\t2<- Devolver Pelicula" <<endl <<endl;

cout <<"\t\t\t3<- Historal de Alquileres" <<endl <<endl;

cout <<"\t\t\t4<- Modificar Alquiler" <<endl <<endl;

cout <<"\t\t\t5<- Cobrar" <<endl <<endl;

cout <<"\t\t\t0<- Menu principal" <<endl <<endl;

cout <<error <<endl;

cout <<"\t\t\tElija una opcion:";

cin >>respuesta;












switch(respuesta){
case '1':{
escribir_alquiler();
}break;
case '2':{
buscar_alquiler();;
}break;
case '3':{
listar_alquiler();
}break;
case '4':{
// modificar_alquiler();
}break;
case '5':{
// cobrar();
}break;
case '0':break;
default:{
error =" Opcion invalida, intentelo otra vez!";
}
}break;

}while(respuesta =='0');

menu_principal();
}
























menupelicula.cpp

/*
menu pelicula;
*/

#include "cabecero.h"

void menu_pelicula(){

char respuesta;
string error;

do{
system("cls");

cout <<endl <<endl <<"\t\t\t\tABC Movies" <<endl <<endl <<endl;

cout <<"\t\t\tSistema de Alquiler de peliculas" <<endl <<endl;

cout <<"\t\t\t\tMenu Peliculas" <<endl <<endl <<endl;

cout <<"\t\t\t1<- Registrar Nueva Pelicula" <<endl <<endl ;

cout <<"\t\t\t2<- Modificar datos de Pelicula" <<endl <<endl;

cout <<"\t\t\t3<- Informacion sobre Peliculas" <<endl <<endl;

cout <<"\t\t\t4<- Recibir Pelicula" <<endl <<endl;

cout <<"\t\t\t0<- Menu principal" <<endl <<endl;

cout <<error <<endl;

cout <<"\t\t\tElija una opcion:";


cin >>respuesta;














switch(respuesta){
case '1':{
escribir_pelicula();
}break;
case '2':{
modificar_pelicula();
}break;
case '3':{
buscar_pelicula();
}break;
case '4':{
recibir_pelicula();
}break;
case '0':break;
default:{
error =" Opcion invalida, intentelo otra vez!";
}
}break;
}while(respuesta =='0');

menu_principal();

}






























menusocio.cpp
/*
Funcin men Socio
*/
#include "cabecero.h"

void menu_socio(){

char respuesta;
string error;

do {
system("cls");

cout <<endl <<endl <<"\t\t\t\tABC Movies" <<endl <<endl <<endl;

cout <<"\t\t\tSistema de Alquiler de peliculas" <<endl <<endl;

cout <<"\t\t\t\tMenu Socio" <<endl <<endl <<endl;

cout <<"\t\t\t1<- Registrar nuevo Socio" <<endl <<endl;

cout <<"\t\t\t2<- Informacion sobre Socios" <<endl <<endl;

cout <<"\t\t\t3<- Modificar datos de Socio" <<endl <<endl;

cout <<"\t\t\t0<- Menu principal" <<endl <<endl;

cout <<error <<endl;

cout <<"\t\t\tElija una opcion:";

cin >>respuesta;

switch(respuesta){
case '1':{
escribir_socio();
}break;
case '2':{
listar_socio();
}break;
case '3':{
modificar_socio();
}break;
case '0':break;
default:{
error =" Opcion invalida, intentelo otra vez!";
}
}break;

}while(respuesta =='0');
menu_principal();
}

escribirsocio.cpp
/*
Escribir Socio:
Esta funcin crea un nuevo registro de socio; utiliza el archivo socios.dat en modo escritura.
*/
#include "cabecero.h"

void escribir_socio(){

char respuesta;

fstream Escritura(F_SOCIOS, ios::out | ios::binary | ios::ate);

do{

system("cls");
cout <<"Registro de Nuevo Socio\n\n";
Socio s;

cout <<"Identificador: ";
cin >>s.id;
cout <<"Cedula: ";
cin.ignore();
cin.getline(s.cedula , 15);
cout <<"Nombre: ";
cin.getline(s.nombre,50);
cout <<"Apellido: ";
cin.getline(s.apellido,50);
cout <<"Fecha de nacimiento[##-##-##]: ";
cin.getline(s.fecha_nacimiento,15);
cout <<"Sexo[M/F]: ";
cin.getline(s.sexo,2);
//cin.ignore();
cout <<"Fecha de suscripcion[##-##-##]: ";
cin.getline(s.fecha_suscripcion,15);
cout <<"Direccion:";
cin.getline(s.direcion ,100);
cout <<"Telefono[###-###-####]: ";
cin.getline(s.telefono,16);

//delete &s;
Escritura.write((char*)(&s), sizeof(Socio));

cout <<"\n\n Desea Registrar otro Socio[S/N]: ";
cin >>respuesta;

}while( respuesta =='S' || respuesta =='s' );

Escritura.close();
menu_socio();
}

buscarsocio.cpp
/*
Esta funcin realiza la bsqueda de un socio en especfico. Utiliza el archivo socios.dat en
modo lectura.
*/

#include "cabecero.h"

void buscar_socio(){

fstream Lectura(F_SOCIOS, ios::in | ios::binary);

unsigned long longarchivo;
unsigned long cant_socios;
Lectura.seekg(0, ios::end);
longarchivo =Lectura.tellg();
cant_socios=longarchivo/sizeof(Socio);
Lectura.seekg(0, ios::beg);


int id;
char respuesta;

do{

system("cls");

cout <<"Total de socios " <<cant_socios <<endl <<endl;
cout <<"Introduzca el ID del socio: ";
cin >>id;
Socio s;
Lectura.read( (char*)(&s), sizeof(Socio));

while(!Lectura.eof()){

Lectura.read( (char*)(&s), sizeof(Socio));
cout <<id <<" " <<s.id <<endl;
if (id==s.id){
cout <<"-->" <<s.nombre <<endl;

}
}


cout <<"Buscar otro Socio? ",
cin >>respuesta;
}while(respuesta =='S' || respuesta =='s' );

menu_socio();
}



listarsocio.cpp
/*
Listar Socios:
Esta funcin lista todos los registros de socios disponibles en el sistema; utiliza el archivo
socios.dat en modo lectura.
*/

#include "cabecero.h"

void listar_socio(){

system("cls");

fstream Lectura(F_SOCIOS, ios::in | ios::binary);

if(Lectura.fail()){
cout <<"El archivo " <<F_SOCIOS <<" No Existe" <<endl <<endl;
exit(0);
}

unsigned long longarchivo;
unsigned long cant_socios;
Lectura.seekg(0, ios::end);
longarchivo =Lectura.tellg();
cant_socios=longarchivo/sizeof(Socio);
Lectura.seekg(0, ios::beg);


char respuesta;
unsigned numreg;
cout <<"cantidad de socios " <<cant_socios <<endl;
cout <<"Id\tNombre\t\tApellido\tfecha de creacion\tTelefono\n\n";
Socio s;

while(!Lectura.eof()){
Lectura.read( (char*)(&s), sizeof(Socio));

cout <<s.id <<TAB;
//cout <<s.cedula <<TAB;
cout <<s.nombre <<TAB <<TAB;
cout <<s.apellido <<TAB <<TAB;
//cout <<s.fecha_nacimiento <<endl;
//cout <<s.sexo <<endl;
cout <<s.fecha_suscripcion <<TAB <<TAB;
//cout <<s.direcion <<endl;
cout <<s.telefono <<endl;
};

Lectura.close();
system("pause");
menu_socio();
}


modificarsocio.cpp
/*
Modificar Socio:
Esta funcin se utiliza para modificar los datos de un socio especfico. Esta escribe y lee en el
archivo socios.dat
*/

#include "cabecero.h"

void modificar_socio(){


fstream Lectura(F_SOCIOS, ios::in | ios::binary);
fstream Escritura(F_SOCIOS, ios::out | ios::binary | ios::ate);

unsigned long longarchivo;
unsigned long cant_socios;
Lectura.seekg(0, ios::end);
longarchivo =Lectura.tellg();
cant_socios=longarchivo/sizeof(Socio);
Lectura.seekg(0, ios::beg);


int id;
char respuesta;
cout <<"Total de socios " <<cant_socios <<endl <<endl;
do{
cout <<"Introduzca el ID del Socio: ";
cin >>id;
Socio s;
Lectura.read( (char*)(&s), sizeof(Socio));

while(!Lectura.eof()){

Lectura.read( (char*)(&s), sizeof(Socio));

if (id==s.id){


cout <<"Cedula: ";
cin.ignore();
cin.getline(s.cedula , 15);
cout <<"Nombre: ";
cin.getline(s.nombre,50);
cout <<"Apellido: ";
cin.getline(s.apellido,50);
cout <<"Fecha de nacimiento[##-##-##]: ";
cin.getline(s.fecha_nacimiento,15);
cout <<"Sexo[M/F]: ";
cin.getline(s.sexo,2);
//cin.ignore();
cout <<"Fecha de suscripcion[##-##-##]: ";
cin.getline(s.fecha_suscripcion,15);
cout <<"Direccion:";
cin.getline(s.direcion ,100);
cout <<"Telefono[###-###-####]: ";
cin.getline(s.telefono,16);

delete &s;
Escritura.write((char*)(&s), sizeof(Socio));


}
}


cout <<"Buscar otro socio? ",
cin >>respuesta;
}while(respuesta =='S' || respuesta =='s' );

}


































escribirpelicula.cpp
/*
Escribir Pelcula:
Esta funcin crea un nuevo registro de pelcula; utiliza el archivo peliculas.dat en modo
escritura.
*/

#include "cabecero.h"

void escribir_pelicula(){

char respuesta;
fstream Escritura(F_PELICULAS, ios::out | ios::binary | ios::ate);

Pelicula p;

do{
system("cls");
cout <<"\n\nFormulario para registrar pelicula\n" <<endl;

cout <<"Titulo: " ;
cin.getline(p.titulo ,80);
//cin >>p.titulo;
cout <<"Cantidad de peliculas para alquilar: " ;
cin >>p.cant_alquilada;
cout <<"Cantidad de peliculas: " ;
cin >>p.cant_disponible;
cin.ignore();
cout <<"Formato de la pelicula[DVD/BlueRay]: " ;
//cin >> p.formato;
cin.getline(p.formato,10);
cout <<"Identificador: " ;
//cin >> p.id;
cin.getline(p.id,8);
cout <<"Cantidad de discos: " ;
cin >>p.cant_discos;
cout <<"Tipo de pelicula: " ;
cin.ignore();
cin.getline(p.tipo,80);
//cin >> p.tipo;
cout <<"Duracion de la pelicula: " ;
cin.getline(p.duracion,15);
//cin >> p.duracion;
cout <<"Actores de la pelicula: " ;
cin.getline(p.actores_p ,100);
//cin >> p.actores_p;
cout <<"Director de la pelicula: " ;
cin.getline(p.director ,36);
//cin >> p.director;
cout <<"Productora de la pelicula: " ;
cin.getline(p.productora , 45);
//cin >> p.productora;
cout <<"Anio de poduccion de la pelicula: " ;
cin >>p.anio;


Escritura.write((char*)(&p), sizeof(Pelicula));

cout <<"\n\n Desea registrar otra pelicula[S/N]: ";
cin >>respuesta;

}while( respuesta =='S' || respuesta =='s' );

Escritura.close();

menu_pelicula();
}


































buscarpelicula.cpp
/*
Esta funcin efecta la bsqueda de una pelcula en especifico utilizando el ID. La funcin
utiliza el archivo peliculas.dat en modo lectura.
*/

#include "cabecero.h"

void buscar_pelicula(){

fstream Lectura(F_PELICULAS, ios::in | ios::binary);

unsigned long longarchivo;
unsigned long cant_peliculas;
Lectura.seekg(0, ios::end);
longarchivo =Lectura.tellg();
cant_peliculas=longarchivo/sizeof(Pelicula);
Lectura.seekg(0, ios::beg);


int id;
char respuesta;

do{

system("cls");

cout <<"Total de Peliculas " <<cant_peliculas <<endl <<endl;
cout <<"Introduzca el ID del pelicula: ";
cin >>id;
Pelicula s;
Lectura.read( (char*)(&s), sizeof(Pelicula));

while(!Lectura.eof()){

Lectura.read( (char*)(&s), sizeof(Pelicula));
cout <<id <<" " <<s.id <<endl;
if ((char *)id==s.id){
cout <<"-->" <<s.titulo <<endl;

}
}


cout <<"Buscar otra Pelicula? ",
cin >>respuesta;
}while(respuesta =='S' || respuesta =='s' );

Lectura.close();

menu_pelicula();
}

listarpeliculas.cpp

Listar Pelculas:
Esta funcin lista todos los registros de pelculas disponibles en el sistema; utiliza el archivo
peliculas.dat en modo lectura.
*/

#include "cabecero.h"

void listar_pelicula(){

system("cls");

fstream Lectura(F_PELICULAS, ios::in | ios::binary);

if(Lectura.fail()){
cout <<"el archivo " <<F_PELICULAS <<" no existe" <<endl <<endl;
exit(0);
}

unsigned long longarchivo;
unsigned long cant_peliculas;
Lectura.seekg(0, ios::end);
longarchivo =Lectura.tellg();
cant_peliculas=longarchivo/sizeof(Socio);
Lectura.seekg(0, ios::beg);


char respuesta;
unsigned numreg;
cout <<"cantidad de peliculas " <<cant_peliculas <<endl;
cout <<"id\ttitulo\tAlquilada\tformato\t\ttipo\tduracion\n";
Pelicula p;
Lectura.read( (char*)(&p), sizeof(Pelicula));
while(!Lectura.eof()){

cout <<p.id <<TAB;
cout <<p.titulo <<TAB;
cout <<p.cant_alquilada <<TAB <<TAB;
cout <<p.formato <<TAB <<TAB;
cout <<p.tipo <<TAB;
cout <<p.duracion <<endl;


Lectura.read( (char*)(&p), sizeof(Pelicula));
};

Lectura.close();
system("pause");

menu_pelicula();
}

modificarpelicula.cpp
/*
Modificar Pelcula:
Esta funcin es una funcin auxiliar de las funciones escribir_alquiler() y recibir_pelicula() y su
objetivo es modificar el estatus de la pelcula por "R" o "D", segn sea el caso; esta escribe en
el archivo peliculas.dat
R=rentada
D=disponible
*/

#include "cabecero.h"

void modificar_pelicula(char id[8]){

fstream Escritura(F_PELICULAS, ios::in | ios::binary); // Abre el archivo peliculas.dat en
modo escritura
Lectura.seekg(0, ios::beg); //Se posiciona al inicio del archivo

Pelicula p;
//Busca el registro por el id de pelcula y escribe una "R" o una "D"

while(!Lectura.eof()){

Escritura.read( (char*)(&p), sizeof(Pelicula));
unsigned long posicion(Escritura.tellp);

if (id==p.id_pelicula){

if(p.status =='D'){
p.status ='R';
}else if(p.status =='R'){
p.status ='D';
}
Lectura.seekg(posicion - sizeof(Pelicula), ios::beg);
Escritura.write((char*)(&p), sizeof(Pelicula));
}
}

}














escribiralquiler.cpp
/*
Escribir Alquiler:
Esta funcin crea un nuevo registro de alquiler para cada pelcula seleccionada con status
pendiente (hasta que se ejecute la funcin cobrar()) y llama la funcin modificar_pelicula()
para cambiarle el estatus a alquilada. Esta funcin utiliza el archivo alquileres.dat en modo
escritura.
*/

#include "cabecero.h"

void escribir_alquiler(){

char respuesta;
unsigned long sizearchivo;
unsigned long cantreg;



fstream Escritura(F_ALQUILERES, ios::out | ios::binary | ios::ate); // lee el archivo
alquiler.dat

Escritura.seekg(0, ios::end);
sizearchivo =Escritura.tellg();
cantreg =sizearchivo/ sizeof(Alquiler);

Alquiler a;

cout <<"Numero de socio: " ; //Solicita el nmero de socio
cin >> a.int_socio;

//Bucle para ingresar las pelculas

do{
system("cls");
cout <<"\n\nFormulario para registrar un Alquiler\n" <<endl;



cout <<"ID de pelicula: " ;
cin >> a.id_pelicula;


time(&a.fecha_de_alquiler);



a.status ='P';
a.id =cantreg +1;


Escritura.write((char*)(&a), sizeof(Alquiler)); //Escribe en el archivo alquiler.dat

cout <<"\n\n Desea registrar otro alquiler[S/N]: ";
cin >>respuesta;

modificar_pelicula(a.id_pelicula); //Llama la funcin modificar pelcula para
modificar el estatus

}while( respuesta =='S' || respuesta =='s' );


Escritura.close();

menu_alquiler(); //Retorna al men alquiler


/*
int int_socio;
char id_pelicula[8];
time_t fecha_de_alquiler;
time_t fecha_de_entrega;
int devuelta;
int balance;*/


}





























buscaralquiler.cpp
*
busca los alquileres activos de un socio especificado
*/

#include "cabecero.h"

void buscar_alquiler(){

fstream Lectura(F_ALQUILERES, ios::in | ios::binary);

Lectura.seekg(0, ios::beg);

int id;
char respuesta;

do{

system("cls");
cout <<"Introduzca el ID del socio: ";
cin >>id;
Alquiler a;

cout <<"Socio\tPelicula\tFec.Alqui\tFec.Entre\Status\n";
while(!Lectura.eof()){

Lectura.read( (char*)(&a), sizeof(Alquiler));
if (id ==a.id && (a.status =='A' || a.status =='a' ){

cout <<a.int_socio <<"\t"<<
a.id_pelicula<<"\t"<<a.fecha_de_alquiler<<"\t"<<a.fecha_de_entrega<<"\t"<<a.status <<endl;

}
}
/*
struct Alquiler{
int int_socio;
char id_pelicula[8];
time_t fecha_de_alquiler;
time_t fecha_de_entrega;
char status; // C (cerrado) A(activo)

};

*/
cout <<"Buscar otra Pelicula? ",
cin >>respuesta;
}while(respuesta =='S' || respuesta =='s' );

Lectura.close();

menu_pelicula();
}


listaralquiler.cpp
/*
Listar Pelculas:
Esta funcin lista todos los registros de pelculas disponibles en el sistema; utiliza el archivo
peliculas.dat en modo lectura.
*/

#include "cabecero.h"

void listar_alquiler(){

system("cls");

fstream Lectura(F_ALQUILERES, ios::in | ios::binary);

if(Lectura.fail()){
cout <<"el archivo " <<F_ALQUILERES<<" no existe" <<endl <<endl;
exit(0);
}

unsigned long longarchivo;
unsigned long cant_alquiler;
Lectura.seekg(0, ios::end);
longarchivo =Lectura.tellg();
cant_alquiler=longarchivo/sizeof(Alquiler);
Lectura.seekg(0, ios::beg);

char respuesta;
unsigned numreg;
cout <<"cantidad de alquiladas " <<cant_alquiler <<endl;
cout <<"id\ttitulo\tAlquilada\tformato\t\ttipo\tduracion\n";
cout <<"Num.Socio\tID.Pelicula\tFec.Alqui\tFec.Entre\tDev.\tBal.\n";
Alquiler a;

while(!Lectura.eof()){
Lectura.read( (char*)(&a), sizeof(Alquiler));

cout <<endl <<endl;
cout << a.int_socio <<TAB;
cout << a.id_pelicula <<TAB;
cout << a.fecha_de_alquiler <<TAB;
cout << a.fecha_de_entrega <<TAB;
cout << a.status <<TAB;
};

Lectura.close();
system("pause");

menu_alquiler();

}


modificaralquiler.cpp
/*
Modifiicar Alquiler:
Esta funcin es una funcin auxiliar de las funciones cobrar() y recibir_pelicula() y su objetivo
es modificar el estatus de la pelcula por "A" o "C" segn sea el caso; esta escribe en el
archivo alquileres.dat
P=pendiente(valor por defecto cuando es creado el registro)
A=activo
C=cerrado
*/

#include "cabecero.h"

void modificar_alquiler(char id[8]){

fstream Escritura(F_ALQUILERES, ios::in | ios::binary); //Lee el archivo alquiler.dat

Lectura.seekg(0, ios::beg); //se posiciona al inicio del archivo para empezar a leer

Alquiler a;

while(!Lectura.eof()){

Escritura.read( (char*)(&a), sizeof(Alquiler));
unsigned long posicion(Escritura.tellp);

//Busca el id del alquiler y modifica el estatus cambindolo por una "C" o "A" segn sea el
caso.

if (id==a.id){

if(a.status =='P'){
a.status ='A';
}else if(p.status =='A'){
p.status ='C';
}
Lectura.seekg(posicion - sizeof(Alquiler), ios::beg);
Escritura.write((char*)(&s), sizeof(Alquiler));
}
}

}









cobrar.cpp
/*
Cobrar:
Esta funcin calcula el monto a pagar por cada pelcula seleccionada por el cliente en la
funcin escribir_alquiler(). Por cada registro de pelicula que tenga estatus pendiente, asociado
al ID del socio en el archivo alquiles.dat, se sumar un monto de 150 pesos en el total a pagar
por el cliente. Esta fucncin utiliza el archivo alquileres.dat en modo lectura y la funcin
auxiliar modificar_alquiler().


*/

void cobrar(void){

fstream Lectura(F_ALQUILERES, ios::in | ios::binary);

Lectura.seekg(0, ios::beg);

unsigned int acum(0)
int cant(0);
int id;
char respuesta;


cout <<"Introduzca el ID del socio: ";
cin >>id;

do{

system("cls");


Alquiler a;

cout <<"tPelicula\tFec.Alqui\tFec.Entre\Costo\n";
while(!Lectura.eof()){

Lectura.read( (char*)(&a), sizeof(Alquiler));
if (id ==a.id_socio && (a.status =='P' || a.status =='p' ){

cout <<a.id_pelicula<<"\t"<<a.fecha_de_alquiler<<"\t"<<endl;
cant++
total+=150;
}
}
//Llama la funcin auxiliar

modificar_alquiler(a.id);
//
cout <<"La cantida de pelculas alquiladas es es : " <<cant;
cout <<"El monto total es : " <<total;


/*
struct Alquiler{
int id_socio;
char id_pelicula[8];
time_t fecha_de_alquiler;
time_t fecha_de_entrega;
char status; // C (cerrado) A(activo) P(pendiente)

};

*/

cout <<"Buscar otra Pelicula? ",
cin >>respuesta;
}while(respuesta =='S' || respuesta =='s' );

Lectura.close();

menu_alquiler();
}





























recibirpeliculas.cpp

/*
Recibir Pelcula:
Esta funcin busca por el id del socio todos sus alquileres activos y calcula por cada registro
el monto a pagar por mora y al final lo totaliza. Por cada da de mora se cobrar un monto de
200 pesos.
Esta funcin lee el archivo alquileres.dat y llama dos funciones auxiliares modificar_pelicula()
para cambiar la pelcula al estatus disponible y modificar_alquiler() para cambiar el estatus a
cerrado.
*/

void recibir_pelicula(void){

fstream Lectura(F_ALQUILERES, ios::in | ios::binary); // Abre el alquileres.dat archivo
en modo lectura.

Lectura.seekg(0, ios::beg); // Se coloca al inicio del archivo


double totm(0),total(0);

time_t alquilado, devuelto;
time(&devuelto;);
double diasmora(0);

int id;
char respuesta;

do{

system("cls");

//Solicita el ID de la pelcula que el cliente est devolviendo
cout <<"Introduzca el ID de la pelicula: ";
cin >>id;
Alquiler a;

/*Busca el ID de la pelcula con la condicin de que est rentada, calcula la mora con la
diferencia entre la fecha del alquiler y la fecha de devolucin por el costo de la mora*/

cout <<"t\tSocio\tPelicula\tFec.Alqui\tFec.Entre\Mora\n";
while(!Lectura.eof()){

Lectura.read( (char*)(&a), sizeof(Alquiler));
if (id ==a.id_pelicula && (a.status =='R' || a.status =='r' ){

cout <<a.int_socio<<"\t"<<
a.id_pelicula<<"\t"<<a.fecha_de_alquiler<<"\t"<<total <<endl;
alquilado =a.fecha_de_alquiler;

diasmora =(devuelto - alquilado) / 86400.00;

if (diasmora =>4){
total =diasmora * 200.00
}else{
total =00.00;
}
totm +=total;

}
}



//Llama las funciones auxiliares

modificar_alquiler(a.id);
void modificar_pelicula(a.id_pelicula);


cout <<"\n\nEl monto total es : " <<totm;
/*
struct Alquiler{
int int_socio;
char id_pelicula[8];
time_t fecha_de_alquiler;
time_t fecha_de_entrega;
char status; // C (cerrado) A(activo)

};

*/

cout <<"\n\nRecibir otra Pelicula? ",
cin >>respuesta;
}while(respuesta =='S' || respuesta =='s' );

Lectura.close();

menu_pelicula();
}