Acrobat Distiller, Job 6

Anuncio
Escuela Superior de Ingenieros - Tecnun - Paul Bustamante
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream.h>
#include <string.h>
#include <stdio.h>
//para gets()
// **** Clase Agencia ****
class Agencia
{
private:
char *nombre;
//el constr. pide el nombre
long duracion;
//debe pedirlo la clase derivada
protected:
static double precio;
//precio del hotel
public:
Agencia(){
//constructor
char tmp[80];
cout << "Dar el nombre:"<<flush;
gets(tmp);
nombre = new char[strlen(tmp)+1];
strcpy(nombre,tmp);
}
virtual ~Agencia(){ delete [] nombre; }
//destructor virtual
void SetDuracion(long d){ duracion = d; }
long GetDuracion() { return duracion; }
virtual void Display(){
cout << "Nombre: " << nombre << " Dias:" << duracion;
}
double Costo(){ return 0;}
};
// **** Clase Turismo ****
class Turismo:public Agencia
{
protected:
int tipo;
static int plazas;
public:
Turismo(){
//constructor
long dur;
cout << "Dar Duracion del viaje (dias):";
cin >> dur;
cout << "Alojamiento: 1-SA 2-AD 3-MP 4-PC ?";
cin >> tipo;
SetDuracion(dur);
//Actualizar variable duracion
plazas--;
}
~Turismo() { plazas++; }
//libera plazas
void Display(){
cout << "Reserva Turismo:\n\t" ;
Agencia::Display();
cout << " Alojam.:";
switch(tipo){
case 1: cout << "SA"; break;
case 2: cout << "AD"; break;
case 3: cout << "MP"; break;
case 4: cout << "PC"; break;
}
cout << " Costo: " << Costo() << endl;
}
double Costo(){
double costo=0;
switch(tipo){
case 1: costo = precio; break;
case 2: costo = precio*1.1; break;
//10%
case 3: costo = precio*1.2; break;
case 4: costo = precio*1.4; break;
}
if (GetDuracion()>=7) costo *= 0.9;
//10% de dcto
return costo*GetDuracion();
}
static int GetPlazas() { return plazas;}
};
// **** Clase Libre ****
Escuela Superior de Ingenieros - Tecnun - Paul Bustamante
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
class Libre: public Agencia
{
private:
char *hotel;
protected:
static int plazas;
public:
Libre(){
//Constructor
char tmp[80];
long dur;
cout << "Dar Duracion del viaje (dias):";
cin >> dur;
SetDuracion(dur);
plazas--;
cout << "Hotel:"<<flush;
gets(tmp);
hotel = new char[strlen(tmp)+1];
strcpy(hotel,tmp);
}
~Libre(){ delete [] hotel; plazas++; }
//destructor
void Display(){
cout << "Reserva Libre:\n\t" ;
Agencia::Display();
cout << " Hotel: " << hotel;
cout << " Costo: " << Costo() << endl;
}
double Costo(){
double costo;
long dias=GetDuracion();
if (dias >= 5) costo = precio*dias*0.9;
//10% dcto.
else costo = precio*dias;
return costo;
}
static int GetPlazas() { return plazas;}
};
// **** Inicializacion de variables estaticas ****
int Turismo::plazas = 5;
int Libre::plazas = 5;
double Agencia::precio = 50;
//50 euros la noche
#define NUM 20
// **** Main() ****
void main()
{
int opc,num=0,i=0;
Agencia *lista[NUM];
while(true){
cout << "\n*** Menu ***\n";
cout << "1. Ver Plazas Libres\n";
cout << "2. Ver Reservas\n";
cout << "3. Reserva de Turismo\n";
cout << "4. Reserva Libre\n";
cout << "5. Salir\n";
cout << "\tOpcion:";
cin >> opc;
switch(opc){
case 1:
cout << "*** Plazas Libres:\n";
cout << "\tTurismo:" << Turismo::GetPlazas() << endl;
cout << "\tLibre:" << Libre::GetPlazas() << endl;
break;
case 2:
//reservas
if (num<1) cout << ">>No hay reservas todavia\n";
for (i=0;i<num;i++) lista[i]->Display();
break;
case 3:
if (Turismo::GetPlazas() > 0) { lista[num] = new Turismo; num++; }
else cout << "No hay más plazas libres\n" ;
break;
case 4:
if (Libre::GetPlazas() > 0) { lista[num] = new Libre; num++; }
Escuela Superior de Ingenieros - Tecnun - Paul Bustamante
141
142
143
144
145
146
147 }
else cout << "No hay más plazas libres\n" ;
break;
case 5: for (i=0;i<num;i++) delete lista[i];
//liberar memoria
return;
}
}
Descargar