Professional Documents
Culture Documents
2CM18
Programacin Orientada a
Objetos
Proyecto Parcial 2
PROYECTO PARCIAL 2
INTRODUCCION
Este proyecto forma parte de una serie de conocimientos adquiridos en las clases impartidas en el
segundo departamental en los siguientes programas hacemos uso de los conocimientos
mencionados . En el desarrollo de un proyecto informatico uno de los aspectos mas importantes es la
eleccion del lenguaje ms apropiado para su implementacin y las herramientas a utilizar. Existe
mltiples herrmamientas informaticas y multiples lenguajes de programacion dependiendo del area
de estudio. El lenguaje propuesto por la maestra ha sido el lenguaje C++, y el compilador es Dev +
+, una vez que tenemos el lenguaje, se ha de recabar informacin sobre las herramientas disponibles
y hacer uso de ellas.
OBJETIVOS
Implementar
Implementar
Implementar
Implementar
Implementar
Implementar
clases
estructuras
herencias
herencias multiples
Juego didactico
Reportes
Si logramos alcanzar todos los objetivos, abremos hecho uso de los conocimientos enseados en
clase con la finalidad de hacer un proyecto final.
MARCO TEORICO
QU ES UNA CLASE?
Una clase est formada por miembros que son los atributos y mtodos. Donde los atributos
representan las caractersticas relevantes del objeto o concepto descrito, mientras que los mtodos
representan las acciones u operaciones permitidas para almacenar o manipular los datos.
Una variable de tipo clase o una instancia de la clase se llama objeto. Donde un objeto contiene
datos es decir atributos y comportamiento es decir mtodos.
Estos objetos se crean mediante la ejecucin o como comnmente se dice el objeto se crea en
tiempo de ejecucin.
NIVELES DE SEGURIDAD DE UNA CLASE.
En una clase se manejan tres tipos de seguridad que son:
Privada: (private)
Publica: (public)
Protegida: (protected)
variable.
Un registro es una variable declarada por un nuevo tipo de dato definida por una estructura.
La palabra reservada struct introduce la definicin de la estructura. El identificador tiempo es la
etiqueta de la estructura que da nombre a la definicin de la estructura y se utiliza para declarar las
variables del tipo de la estructura. En este ejemplo el nuevo tipo de dato es llamado Persona.
Los nombres declarados entre las llaves de la definicin de la estructura son los miembros de la
estructura se le llama dato miembro o campo.
Caractersticas:
Los miembros de la misma estructura deben tener nombres nicos, pero dos estructuras
diferentes pueden contener miembros con el mismo nombre sin conflicto alguno.
La definicin de estructura termina con un (;).
La definicin de persona tiene tres miembros de tipo entero.//
Los miembros de la estructura pueden ser de cualquier tipo.
Una estructura no puede contener una instancia de s mismo.
La asignacin de una variable de un tipo estructura crea una copia del valor que se asigne.
HERENCIA.
La herencia permite compartir atributos y mtodos entre clases y clases derivadas (subclases).
Heredan atributos y mtodos de las clases superiores que reciben el nombre de sper-clase (clase
base).
DEFINICIN DE APUNTADOR.
Cuando se declara una variable, el compilador reserva un espacio de memoria para ella y asocia el
nombre de esta a la direccin de memoria desde donde comienzan los datos de esa variable. Las
direcciones de memoria se suelen describir como nmeros en hexadecimal.
Un apuntador es una variable cuyo valor es la direccin de memoria de otra variable. Se dice que un
apuntador apunta a la variable cuyo valor se almacena a partir de la direccin de memoria que
contiene el apuntador. Por ejemplo, si un apuntador p almacena la direccin de una variable x, se
dice que p apunta a x.
Son variables que se usan para almacenar direcciones de memoria, los operadores que se usan son:
La referenciacin es la
obtencin
de
la
direccin de una variable. En C y C++ esto se hace a travs del operador (&), aplicado a la variable
a la cual se desea saber su direccin. Ntese que se trata de un operador unario. Ejemplo:
Este cdigo imprime un valor del estilo 0x4fffd34. Este valor puede variar durante cada ejecucin
del programa, debido a que el programa puede reservar distintos espacios de memoria durante cada
ejecucin.
Declaracin de un apuntador.
Para declarar un apuntador se especifica el tipo de dato al que apunta, el operador (*), y el nombre
del apuntador. La sintaxis es la siguiente:
<Tipo de dato apuntado> *<nombre de apuntador>.
DESARROLLO
CODIGO 1:
//programa de registros
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <climits>
#include <vector>
using namespace std;
class Articulo {
public:
string referencia;
string nombre;
int existente;
int compra;
int venta;
Articulo() {}
bool operator==(const Articulo &articulo) const{
return this==&articulo || this->referencia==articulo.referencia;
}
bool operator<(const Articulo &articulo) const{
return this->referencia<articulo.referencia;
}
Articulo& operator=(const Articulo &articulo){
if (this!=&articulo){
this->referencia = articulo.referencia;
this->nombre = articulo.nombre;
this->existente = articulo.existente;
this->compra = articulo.compra;
this->venta = articulo.venta;
}
return *this;
}
//imprimir en pantalla
static void imprimir (Articulo &articulo, int *contador){
cout << " referencia
cout << " cantidad existente: " << articulo.existente << endl;
cout << " precio de compra : " << articulo.compra << endl;
cout << " precio de venta : " << articulo.venta << endl;
cout << endl;
(*contador)++;
}
//imprimir en archivo
static void imprimir_en_archivo (Articulo &articulo, ostream *archivo){
*archivo << articulo.referencia.c_str() << "\t";
*archivo << articulo.nombre.c_str() << "\t";
*archivo << articulo.existente << "\t";
*archivo << articulo.compra << "\t";
*archivo << articulo.venta << endl;;
}
};
//funciones
string leer_cadena (const char *mensaje);
int
bool leer_campo
int main(){
system ("color 4F");
Articulo *dato, articulo;
vector<Articulo> arreglo;
int i, n, opcion, contador=0;
char campo[255], ruta[] = "Lista_Articulos.txt"; //nombre del archivo .txt a crear en carpeta para
almacenamiento de informacin
ifstream entrada (ruta);
if (entrada!=NULL){
while (leer_campo (entrada, campo, '\t')){
articulo.referencia = campo;
leer_campo (entrada, campo, '\t');
articulo.nombre = campo;
leer_campo (entrada, campo, '\t');
articulo.existente = atoi (campo);
leer_campo (entrada, campo, '\t');
articulo.compra = atoi (campo);
leer_campo (entrada, campo, '\n');
articulo.venta = atoi (campo);
arreglo.push_back (articulo);
}
entrada.close();
}
do {
system ("cls");
//menu en pantalla
cout << "\n\t\t\t ****Programa para registrar articulos****\n\n"<< endl <<"\t\t\t\t **** MENU
PRINCIPAL ****\n" << endl << "\t\t\t1. Ingresar nuevo registro"
<< endl << "\t\t\t2. Consultar registro existente"
<< endl << "\t\t\t3. Modificar registro existente" << endl << "\t\t\t4. Eliminar Registro
existente" << endl
<< "\t\t\t5. Ordenar registros existentes" << endl << "\t\t\t6. Editar registros existente"
<< endl <<"\t\t\t7. Guardar registros y Salir del sistema"
<< endl << "\n\n\nNota: Para guardar los registros es necesario al final seleccionar la
opcion: " << endl;
opcion = leer_entero ("\nSeleccione una opcion:", 1, 7);
cout << endl;
//condicionales
// opcion 2: consulta de registros
//aparece "no existen registros" cuando el archivo credo esta vaio
if (arreglo.empty() && opcion!=1 && opcion!=7){
cout << endl << " No existen registros." << endl << endl;
system (" pause");
continue;
}
// ingreso de articulo
if (opcion<5){
articulo.referencia = leer_cadena (" Ingrese la referencia del articulo: ");
dato = vector_buscar (arreglo, articulo);
if (dato!=NULL)
Articulo::imprimir (*dato, &contador);
}
//busca el articulo en archivo para ver si esta creado
//sino, continua con el ingreso de datos
if (dato!=NULL && opcion==1)
cout << endl << " Registro Existente.";
arreglo.erase (arreglo.begin()+i);
return;
}
}
//vector que valida numeros negativos
template <class T>
void quick_sort (vector<T> &arreglo, int inicio, int fin){
int menor = inicio, mayor;
if (fin==-1)
fin = arreglo.size()-1;
mayor = fin;
T pivote;
if (fin>inicio){
for (pivote=arreglo[(inicio+fin)/2]; menor<=mayor;){
for (; menor<fin && arreglo[menor]<pivote; menor++);
for (; mayor>inicio && pivote<arreglo[mayor]; mayor--);
if (menor<=mayor){
pivote = arreglo[menor];
arreglo[menor] = arreglo[mayor];
arreglo[mayor] = pivote;
menor++;
mayor--;
}
}
if (inicio<mayor)
quick_sort (arreglo, inicio, mayor);
if (menor<fin)
quick_sort (arreglo, menor, fin);
}
}
// valida cualquier caracter
string leer_cadena (const char *mensaje){
char cadena[255];
cout << mensaje << "";
cin.getline (cadena, sizeof (cadena));
char *salto = strchr (cadena, '\n');
if (salto!=NULL)
*salto = '\0';
string str(cadena);
return str;
}
//valida solo enteros
CODIGO 2:
//cilindro
{
cout << "Ingresa el punto x: ";
#include<iostream>
cin >> X;
#include<math.h>
#include<cmath>
cin >> Y;
cout << endl;
}
cout <<"Punto ("<< X << ", " << Y << " )"
<< endl;
private:
double X,Y;
}
//**********************************************
***************
public:
Punto(double x=0,double y=0);
class Circulo
void Leer(void);
void Imprimir(void);
};
private:
double R;
public:
Circulo(double r=1);
void Leer(void);
void Punto::Leer(void)
double CalP(void);
double CalD(void);
double CalA(void);
void Imprimir(void);
void Circulo::Imprimir(void)
{
};
// Punto::Imprimir();
Circulo::Circulo(double r):R(r)
void Circulo::Leer(void)
//**********************************************
********
{
//Punto::Leer();
cout <<" Cual es el Radio del circulo?: ";
cin >> R;
double H;
}
public:
double Circulo::CalP(void)
void Leer(void);
return(2*M_PI*R);
double CalAl(void);
double CalAt(void);
double CalV(void);
double Circulo::CalD(void)
void Imprimir(void);
};
return(R * 2);
}
double Circulo::CalA(void)
{
Punto::Imprimir();
Circulo::Imprimir();
Punto::Leer();
Circulo::Leer();
cin >> H;
cout <<endl;
}
double Cilindro::CalAl(void)
{
return (H*CalP());
Cilindro Cili;
Cili.Leer();
Cili.Imprimir();
return (CalAl() + 2*CalA());
system("pause");
}
double Cilindro ::CalV(void)
return 1;
{
return (CalA() * H);
}
void Cilindro::Imprimir(void)
{
CODIGO 3:
//librerias
int Num_vidas = 3;
#include <windows.h>
int Corazones = 3;
#include <iostream>
#include <conio.h>
int ix = 40;
#include <stdio.h>
int iy = 19;
//definir teclas
int y = 8;
#define IZQUIERDA 75
int x = 12;
#define DERECHA 77
int yy = 12;
int xx = 17;
int x1 = 58;
int y1 = 6;
int x2 = 70;
int y2 = 9;
int i,v;
int dd=0;
//tiempo de nivel
int repeticion = 0;
int nivel = 1;
int xb;
COORD dwPos;
dwPos.X = x;
dwPos.Y = y;
Sleep (380);
hCon =
GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hCon,dwPos);
//funcion vidas
void vidas (int vi)
Sleep (380);
{
gotoxy(2,1);
//funcion jugar
gotoxy (72,1); printf (" ");
gotoxy (73,1); printf (" ");
gotoxy (74,1); printf (" ");
//rutina asteroides
gotoxy (x,y); printf ("%c",2);
gotoxy (72+v,1);
printf ("%c",3);
}
}
//funcion nave que explote
Sleep (70);
y1=4;
x1=(rand ()%70)+6;
//rutina disparo
y2=4;
if (iy+dd <5)
x2=(rand ()%70)+6;
}
dd=0;
disparo = false;
if (kbhit())
// rutina asterioides
switch (tecla)
{
y=4;
case IZQUIERDA:
x=(rand () %70)+6;
if (ix>4)
if (y == 4)
gotoxy (ix,iy);puts
condicion = false;
(borrar_avion);
gotoxy (ix,iy+1);puts
(borrar_avion);
gotoxy (ix,iy+2);puts
(borrar_avion);
{
yy=4;
xx=(rand ()%70)+6;
gotoxy (ix,iy);puts
(avion_l1);
gotoxy (ix,iy+1);puts
(avion_l2);
gotoxy (ix,iy+2);puts
(avion_l3);
Barra_salud (Corazones);
break;
printf ("\a");
}
case DERECHA:
if (ix<70)
(borrar_avion);
gotoxy (ix,iy+1);puts
(borrar_avion);
gotoxy (ix,iy+2);puts
if (!Corazones)
{
(borrar_avion);
Num_vidas --;
vidas (Num_vidas);
ix+=2;
Explocion ();
Corazones = 3;
Barra_salud (Corazones);
(avion_l1);
gotoxy (ix,iy+1); puts
(avion_l2);
gotoxy (ix,iy+2); puts
(avion_l3);
}
break;
case 'd':
disparo = true;
break;
}//fin switch
}//fin if
condicion = true;
}
if (repeticion == 4)
{
nivel ++;
iy -= 2;
y++;
yy++;
y1++;
y2++;
int main ()
{
vidas (Num_vidas);
Barra_salud (Corazones);
gotoxy (35,1); printf ("NIVEL %i", nivel);
//funcion jugar