#include <iostream>
using namespace std;
class Time {
private:
int hours, min;
char time_id[13];
public:
Time(){hours = 0; min = 0;};
Time(int h, int m){hours = h; min = m;}
Time(int m){hours = m/60; min = m % 60;} // can handle "71 minutes" and will change it to 1:11 h
~Time(){cout << "DTOR time called" << endl;}
Time scale( float mult_sc) const; // scales a Time object
Time Time::add( Time & t ) ; // adds two Time objects
// changes 011220001032 to Time : 10:32 h
Time id2time(char*);
void show(){cout << hours << ":" << min << "h";}
};
class Date {
private:
int day, month, year;
char date_id[15];
public:
Date(){day = 0; month = 0; year = 0;};
Date(int d, int m, int y){day = d; month = m; year = y;}
~Date(){cout << "DTOR date called" << endl;};
// changes 011220001032 to Date : 1.1.2000
Date id2date(char*id2d);
void show(){cout << day << "." << month << "." << year;}
};
class Pump {
int power_of_pump; // power of the pump
char* pump_id; //011220001032 means first of December 2000 at 10:32h
Time time_built; // Time variable, when the pump was built
Date date_built; // Date variable, when the pump was built
public:
Pump();
Pump(int pow_p, char *s);
~Pump();
void show(){cout << "Pump ID : " << pump_id << " , Pump manufactured: "; date_built.show(); cout << " at "; time_built.show(); cout << endl;}
//…
};
class Motor {
int power_of_motor;// power of the motor
char* motor_id;//011220001032 means first of December 2000 at 10:32h
Time time_built;// Time variable, when the motor was built
Date date_built;// Date variable, when the motor was built
public:
Motor();
Motor(int pow_m, char *s);
~Motor();
void show(){cout << "Motor ID : " << motor_id << " , Motor manufactured: "; date_built.show(); cout << " at "; time_built.show(); cout << endl;}
//…
};
class Dishwasher {
Pump pump; // the pump inside the dishwasher
Motor motor;// the motor inside the dishwasher
char* washer_id;//011220001032 means first of December 2000 at 10:32h
Time time_built;// Time variable, when the Dishwasher was built
Date date_built;// Date variable, when the Dishwasher was built
int washer_running;// 0 not running, 1 running
bool door_is_open; // 1 for yes
float max_load; // in kg
float act_load; // in kg
float detergent_needed; // in gram
float detergent_available; // in gram
Time washing_time; // a time object, like 1:15 h
Date id_2_date(char*); // converts string into Date/Time objects
float calc_detergent(); // = (act_load)*(act_load) in gram
// = 0:20:00 + 6 * int(act_load) : Example: act_load = 8.5 kg -> 71 min
Time calc_washing_time();
public:
Dishwasher(Pump, Motor, char*, float);
~Dishwasher();
// Dishwasher(Dishwasher&dw);
void start(); // only if door is closed
void close_door(){door_is_open = 0;}
void open_door(){door_is_open = 1;}
void load_dishes(float); // up to max_load kg...
void fill_in_detergent(float);
void show();
};
//----------------CTOR/DTOR---TIME-----------------//
//----------------FUNCTIONS----TIME-----------------//
Time Time::scale( float mult_sc) const {
Time New_time;
long total_minutes = hours * mult_sc *60 + min * mult_sc;
New_time.hours = total_minutes / 60;
New_time.min = total_minutes % 60 ;
return New_time;
}
Time Time::add(Time & t )
{
Time total;
total.min = min + t.min;
total.hours = hours + t.hours + total.min / 60;
total.min %= 60 ;
return total;
}
Time Time::id2time(char *s_id2t){
hours = (s_id2t[8] - '0') * 10 + (s_id2t[9] - '0') ;
min = (s_id2t[10] - '0') * 10 + (s_id2t[11] - '0') ;
return *this;
}
//----------------CTOR/DTOR---DATE-----------------//
//----------------FUNCTIONS----DATE-----------------//
Date Date::id2date(char *s_id2d){
day = (s_id2d[0] - '0') * 10 + (s_id2d[1] - '0') ;
month = (s_id2d[2] - '0') * 10 + (s_id2d[3] - '0') ;
year = (s_id2d[4] - '0') * 1000 + (s_id2d[5] - '0') * 100 + (s_id2d[6] - '0') * 10 + (s_id2d[7] - '0');
return *this;
}
//----------------CTOR/DTOR---PUMP-----------------//
Pump::Pump(int pow_p, char *s){
power_of_pump = pow_p;
pump_id = new char [(strlen(s)+1)];
strcpy (pump_id,s);
time_built.id2time(pump_id);
date_built.id2date(pump_id);
}
Pump::~Pump(){
delete [] pump_id;
}
//----------------FUNCTIONS----PUMP-----------------//
//----------------CTOR/DTOR---MOTOR-----------------//
Motor::Motor(int pow_m, char *s){
power_of_motor = pow_m;
motor_id = new char [(strlen(s)+1)];
strcpy (motor_id,s);
time_built.id2time(motor_id);
date_built.id2date(motor_id);
}
Motor::~Motor(){
delete [] motor_id;
}
//----------------FUNCTIONS----MOTOR-----------------//
//----------------CTOR/DTOR---DISHWASHER-----------------//
Dishwasher::Dishwasher(Pump p, Motor m, char *str, float f) : pump(p), motor(m), max_load(f)
{
act_load = 0;
detergent_available = 0;
washer_id = new char [(strlen(str)+1)];
strcpy (washer_id,str);
time_built.id2time(washer_id);
date_built.id2date(washer_id);
}
Dishwasher::~Dishwasher(){
delete [] washer_id;
}
//----------------FUNCTIONS----DISHWASHER-----------------//
void Dishwasher::show(){
cout << "Dishwasher Status: NOT running ... " << endl;
cout << "Dishwasher ID: " << washer_id << "," << endl;
cout << "Dishwasher manufactured: "; date_built.show(); cout << " at "; time_built.show();
cout << "Dishwasher motor:" << endl;
motor.show();
cout << "Dishwasher pump:" << endl;
pump.show();
cout << "Max load is " << max_load << " kg" << endl;
cout << "Actual load is " << act_load << " kg" << endl;
cout << "Detergent available is " << detergent_available << " gram" << endl;
//estimated washing time 0:20h
}
//-------------------------------------------------------------------
void main(){
// just to test Time class
Time time1(1,31); // 1:31 h
time1 = time1.scale(2); // 3:02 h
time1.show();
cout << endl;
Time time2(71); // 1:11 h
time2.show();
time1 = time2.add(time1);
time1.show();
Time time3;
time3.id2time("011219991143");
time3.show();
Date date1;
date1.id2date("111229991143");
date1.show();
cout << endl;
// just to test
Pump pump1(160, "011219991143");
pump1.show();
Motor motor1(1100, "020119590932");
motor1.show();
// Siemens dishwasher
cout << "------------siemens 1) ----------------------------" << endl;
// Siemens dishwasher:
// - contains a pump with 160 watts, pump ID "011219991143"
// - contains a motor with 1300 watts, motor ID "081220031201"
// - the ID of the dishwasher is "010720081032"
// - capacity is 17.5 kg
Dishwasher siemens(
Pump(160, "011219991143"),
Motor(1300, "081220031201"),
"010720081032",
17.5);
siemens.show();/*
siemens.start();
siemens.close_door();
siemens.start();
siemens.load_dishes(10);
siemens.close_door();
siemens.start();
siemens.fill_in_detergent(20);
siemens.start();
siemens.fill_in_detergent(80);
siemens.start();
cout << "------------------siemens 2) --------------------" << endl;
siemens.open_door();
siemens.load_dishes(3);
siemens.start();
siemens.close_door();
siemens.fill_in_detergent(80);
siemens.start();
siemens.show();
cout << "siemens done..." << endl;
/*
// main() will continue during the lab with aMiele dishwasher
// Miele dishwasher
cout << "-------------------------------miele 1) -------------------------------" << endl;
Dishwasher miele( Pump(500, "010919931011"), Motor(2000, "071120021007"), "010920071152", 20.5);
miele.show();
miele.start();
miele.load_dishes(15);
miele.close_door();
miele.start();
miele.fill_in_detergent(120);
miele.start();
miele.fill_in_detergent(80);
miele.start();
cout << "-------------------------------miele 2) -------------------------------" << endl;
miele.load_dishes(6);
miele.start();
miele.open_door();
miele.load_dishes(3);
miele.start();
miele.close_door();
miele.fill_in_detergent(480);
miele.start();
miele.show();
cout << "miele done..." << endl;
*/
}