1 Case Studies and Review Lecture #14 Note: CIS 601 notes were originally developed by H. Zhu for...
-
date post
19-Dec-2015 -
Category
Documents
-
view
212 -
download
0
Transcript of 1 Case Studies and Review Lecture #14 Note: CIS 601 notes were originally developed by H. Zhu for...
1
Case Studies and Review
Lecture #14
Note: CIS 601 notes were originally developed by H. Zhu for NJIT DL Program. The notes were subsequently revised by M. Deek.
2
Case1: Vehicle Management system(P197)
Specifications A tracking program for company vehicles; Identifying how and when vehicles are checked out
for usage by employees. Cargo transportation, business trip, loaner cars, … Record ID number, date checked out, driver name,
mileage, type of usage, and contents. Company use: each trip is recorded including date, time,
miles driven, fuel cost, and the purpose of the trip. Personal use: the insurance information should be
recorded. Carrying passengers: list of passengers; Carrying cargo, an inventory of the vehicle contents
3
Analysis By Vehicle Usage
Vehicle
PersonalVehicle
Company Vehicle
Insurance Info
Triplog
4
Classify By Vehicle Contents
Vehicle
CargoVehicle
Passenger Vehicle
TripLog
Insurance Info
CompanyVehicle
PersonalVehicle
5
Vehicle classtypedef unsigned long ulong;class Vehicle {public: enum VehicleEnum { personal, company }; Vehicle( ulong idNum, VehicleEnum vtype ); Vehicle & Input(); void SetOdometer( ulong odom ); friend ostream & operator <<( ostream & os,const Vehicle & v );private: ulong id; // vehicle ID FString driver; // name of driver ulong odometer; // total mileage Date chkDate; // date checked out VehicleEnum vehicleType;};
6
CompanyVehicle class
class CompanyVehicle :public Vehicle {public: CompanyVehicle( ulong idNum ); CompanyVehicle & Input(); friend ostream & operator <<( ostream & os, const CompanyVehicle & cv );private: TripLog tripRecord; // a single trip record};
7
PersonalVehicle class
class PersonalVehicle :public Vehicle {
public:
PersonalVehicle( ulong id );
PersonalVehicle & Input();
friend ostream & operator <<( ostream & os, const PersonalVehicle & pv );
private:
InsuranceInfo insurance;
};
8
InsuranceInfo class
class InsuranceInfo {
public:
InsuranceInfo & Input();
friend ostream & operator <<(ostream & os,
const InsuranceInfo & I );
private:
FString company; // name of insurance company
FString policyNumber;
};
9
TripLog Classclass TripLog {public: TripLog(); TripLog & Input(); void SetMiles( unsigned m ); void SetFuelCost( float f ); friend ostream & operator <<( ostream & os, const TripLog & tLog );private: Date tDate; // date trip taken Time tTime; // time trip taken unsigned miles; // miles driven FString purpose; // why the trip was taken float fuelCost; // cost of fuel, in dollars};
10
Date class
class Date {public:Date( unsigned dy, unsigned mn, unsigned yr ); Date & Input(); friend ostream & operator <<( ostream & os, const Date & dType );private: unsigned year; // 0 - 2100 unsigned month; // 1 - 12 unsigned day; // 1 - 31 void SetDay( unsigned dy ); void SetMonth( unsigned mn ); void SetYear( unsigned yr );};
11
Time class
class Time {public:// Time(){hour =0; minute=0;}; Time( unsigned hr, unsigned mn ); Time & Input(); friend ostream & operator <<( ostream & os, const Time & tm );private: unsigned hour; // 0 - 23 unsigned minute; // 0 - 59 void SetHour( unsigned hr ); void SetMinute( unsigned mn );};
12
Implementation:Date
Date::Date( unsigned dy = 0, unsigned mn = 0, unsigned yr = 0 )
{ SetDay( dy );
SetMonth( mn );
SetYear( yr );
}
13
DateDate & Date::Input()
{ char temp[80];
char ch;
cout << "(mm/dd/yy format): ";
cin.getline( temp, '\n' );
istrstream input( temp, 80 );
input >> dec;
unsigned n;
input >> n;
SetMonth( n );
input.get( ch );
input >> n;
SetDay( n );
input.get( ch );
input >> n;
SetYear( n );
return *this;
}
14
Date
void Date::SetDay( unsigned d )
{ day = d;}
void Date::SetMonth( unsigned m )
{ month = m;}
void Date::SetYear( unsigned y )
{ year = y; }
ostream & operator <<( ostream & os, const Date & D )
{
os << D.month << "-" << D.day << "-" << D.year;
return os;
}
15
Time
Time::Time( unsigned hr = 0, unsigned mn = 0 )
{
SetHour( hr );
SetMinute( mn );
}
16
TimeTime & Time::Input(){ char temp[80]; char ch; cout << "(hh:mm format): "; cin.getline( temp, '\n' ); istrstream input( temp, 80 ); input >> dec;
// Force decimal input format, to allow the // user to type leading zeros in numbers.
unsigned n;
input >> n;
SetHour( n );
input.get( ch );
input >> n;
SetMinute( n );
return *this;
}
17
Timevoid Time::SetHour( unsigned h ){ hour = h;}void Time::SetMinute( unsigned m ){ minute = m;}ostream & operator <<( ostream & os, const Time & T ){ os << T.hour << ":" << T.minute; return os;}
18
InsuranceInfoInsuranceInfo & InsuranceInfo::Input()
{ cout << "Insurance Information:" << '\n' << "Insurance company: ";
company.GetLine( cin );
cout << "Policy Number: ";
policyNumber.GetLine( cin );
return *this;
}
ostream & operator <<( ostream & os, const InsuranceInfo & I )
{ os << "Insurance Information............." << '\n'
<< " Insurance company: " << I.company << '\n'
<< " Policy number: " << I.policyNumber << endl;
return os;
}
19
TripLog
TripLog::TripLog() :purpose(),tDate(0,1,1),tTime(0,0)
{
miles = 0;
fuelCost = 0.0;
}
20
TripLog
TripLog & TripLog::Input(){ cout << "Entering the trip log." << '\n' << " Date of trip "; tDate.Input(); cout << " Time "; tTime.Input(); cout << " Miles driven: ";
unsigned n; cin >> n; SetMiles( n ); cin.ignore( 255, '\n' ); cout << " Purpose: "; purpose.GetLine( cin );
cout << " Fuel cost: ";
float f;
cin >> f;
SetFuelCost( f );
cin.ignore( 255, '\n' );
return *this;
}
21
TripLog
void TripLog::SetMiles( unsigned m ){ miles = m;}void TripLog::SetFuelCost( float f ){ fuelCost = f;}ostream & operator <<( ostream & os, const TripLog & T ){ os << "Trip Log...................." << '\n' << " Date: " << T.tDate << '\n' << " Time: " << T.tTime << '\n' << " Miles: " << T.miles << '\n' << " Purpose: " << T.purpose << '\n' << " Fuel cost: " << T.fuelCost << endl; return os;}
22
Vehicle
Vehicle::Vehicle( ulong idVal, VehicleEnum vType )
:id(idVal), vehicleType(vType),chkDate(0,1,1)
{
SetOdometer( 0 );
}
23
VehicleVehicle & Vehicle::Input()
{ cout << "Driver name [last,first]: ";
driver.GetLine( cin );
cout << " Odometer reading: ";
long n;
cin >> n;
SetOdometer( n );
cin.ignore( 255, '\n' );
cout << " Date checked out ";
chkDate.Input();
return *this;
}
24
Vehicle
void Vehicle::SetOdometer( ulong od )
{ odometer = od;}
ostream & operator <<( ostream & os, const Vehicle & V )
{ const char * vstring[] = { "personal","company" };
os << " ID: " << V.id << '\n'
<< " Usage: " << vstring[V.vehicleType] << '\n'
<< " Driver: " << V.driver << '\n'
<< " Odometer: " << V.odometer << '\n'
<< " Date out: " << V.chkDate << endl;
return os;
}
25
CompanyVehicle
CompanyVehicle::CompanyVehicle( ulong idVal ) :Vehicle(idVal, company) { }CompanyVehicle & CompanyVehicle::Input(){ Vehicle::Input(); tripRecord.Input(); return *this;}ostream & operator <<( ostream & os, const CompanyVehicle & V ){ os << "Vehicle ....................." << '\n' << Vehicle( V ) << V.tripRecord << endl; return os;}
26
PersonalVehicle
PersonalVehicle::PersonalVehicle( ulong idVal ) :Vehicle( idVal, personal ) { }PersonalVehicle & PersonalVehicle::Input(){ Vehicle::Input(); insurance.Input(); return *this;}ostream & operator <<( ostream & os, const PersonalVehicle & V ){ os << "Vehicle ...................." << '\n' << Vehicle( V ) // display base object << V.insurance << endl; return os;}
27
Main program#include "Vehicle.h"#include <fstream.h>ofstream ofile("vehicle.out", ios::app );void Slicer( const Vehicle & V ){ cout << V << endl;}void Create_PersonalVehicle( ulong id ){ PersonalVehicle V(id); V.Input(); Slicer( V ); // demonstrate object slicing ofile << V << endl;}void Create_CompanyVehicle( ulong id ){ CompanyVehicle V(id); V.Input(); ofile << V << endl;}
28
Main programvoid Create_Vehicle(){ int usage; ulong id; cout << "Vehicle ID: "; cin >> id; cout << "Type of Usage (1)personal, (2)company:"; cin >> usage; cin.ignore( 255, '\n' ); if( usage == 1 ) Create_PersonalVehicle( id ); else if( usage == 2 ) Create_CompanyVehicle( id );}int main(){ Create_Vehicle(); return 0;}//cis601source/ch6/vehicle/main.cpp
29
30
31
32
33
Case2: Shape
Specification: Design a program that supports the
drawing, moving, computing the area and the perimeter of shapes such as circle, rectangle, triangle, etc.
34
Class HierarchyShape
interior_color, shadowmove(), draw(), paint(), area(),
perimeter(), color()
Trianglevertices
height(), base()
Rectangleupper_left, lower_right
width(), length()
Square
Circle
A
35
Circle
Shape
Point
Circle 1
1
36
Circle Object creation interaction diagram
Circle Shape PointCircle(x,y,r)
Shape(color)
Point(x,y)
Process initialization list: initialize base class
Process initialization list: initialize center
Complete initializationConstructor’s body
37
Rectangle and Square
Shape
Point
1
1Circle
Rectangle
Square
2 1
38
Square Object Creation interaction diagram
Square Rectangle ShapeSquare(x1,y1,x2,y2,color)
Rectangle()
Process initialization list: initialize shape segment
Process initialization list: initialize upper_left
Complete initialization Constructor’s body
Point
Constructor’s body
Shape(color)
Point(x1,y1)
Point(x2,y2)Process initialization list: initialize lower_right
Call base class constructor
39
Class Shape
typedef bool Boolean ;
enum Color{RED, BLUE, GREEN, WHITE, BLACK, YELLOW} ;
class Shape
{
private:
Color interior ;
Shape( const Shape & ) ;
Shape & operator =( const Shape & ) ;
protected:
inline Boolean change_color( Color new_color ) ;
40
Class Shape
public:
inline Shape( Color interior_color ) ;
virtual ~Shape() { } ; // do-nothing
inline Color color( void ) const ;
virtual Boolean draw( void ) const = 0 ;
virtual Boolean paint( Color new_color ) = 0 ;
virtual Boolean move( Coordinate x , Coordinate y ) = 0 ;
virtual float area( void ) const = 0 ;
virtual float perimeter( void ) const = 0 ;
} ;
41
Class Shape
inline Shape:: Shape( Color color ): interior ( color ) {};
inline Color Shape:: color( void ) const
{ return( interior ) ;}
inline Boolean Shape:: change_color( Color new_color )
{ Boolean accepted = true ;
if( interior != new_color )
{ interior = new_color ; }
else
{ accepted = false ; }
return( accepted ) ;
};
42
Class Circle
typedef short Radius ;
const double PI = acos( -1.0 ) ;
class Circle: public Shape
{ private:
Point center ; // center coordinate
Radius r ;
Boolean erase( void ) const ;
Circle( const Circle & ) ;
Circle & operator = ( const Circle & ) ;
43
Class Circlepublic:
Circle( Coordinate x, Coordinate y, Radius new_radius, Color interior_color);
~Circle( ) ;
inline Radius radius( void ) const ;
inline virtual Boolean draw( void ) const ;
virtual Boolean paint( Color new_color ) ;
virtual Boolean move( Coordinate x , Coordinate y ) ;
virtual float area( void ) const ;
virtual float perimeter( void ) const ;
} ;
inline Radius Circle:: radius( void ) const
{ return( r ) ;}
44
Class Rectangle
class Rectangle: public Shape{ private:
Point upper_left , lower_right ; Boolean erase( void ) const ;Rectangle( const Rectangle & ) ;Rectangle & operator = ( const Rectangle & ) ;
public:Rectangle( Coordinate x1, Coordinate y1, Coordinate
x2, Coordinate y2, Color interior_color ) ; virtual ~Rectangle( ) ;virtual Boolean draw( void ) const ;virtual Boolean paint( Color new_color ) ;virtual Boolean move( Coordinate x , Coordinate y ) ;virtual float area( void ) const ;virtual float perimeter( void ) const ;
} ;
45
Class Square
typedef unsigned short Length ;
class Square: public Rectangle
{ private:
Square( const Square & ) ;
Square & operator = ( const Square & ) ;
public:
Square( Coordinate x1, Coordinate y1, Length side,
Color interior_color ) ;
virtual ~Square( ) { } ;
virtual Boolean draw( void ) const ;
virtual Boolean paint( Color new_color ) ;
} ;
46
class Point
typedef float Coordinate ;class Point{ private:
Coordinate x , y ;public:
inline Point() ; // default constructorinline Point( Coordinate new_x, Coordinate
new_y ) ;inline Coordinate x_coordinate( void ) const ;inline Coordinate y_coordinate( void ) const ;
} ;
47
Main()
#define MAX_NUM_SHAPES 3int main( int , char ** ) ;Shape * make_shape( int i ) ;void delete_shape ( Shape *current ) ;Boolean process_shape( ostream &output_stream, Shape
*current ) ;int main( int , char ** ){ Shape *list[MAX_NUM_SHAPES] ;
int i ;for( i = 0 ; i < MAX_NUM_SHAPES ; i++ ){ list[i] = make_shape( i ) ; }
48
Main()
for( i = 0 ; i < MAX_NUM_SHAPES ; i++ ){ cout << "\n ** Shape No. " << i ;
process_shape( cout, list[i] ) ;}cout << endl ;for( i = 0 ; i < MAX_NUM_SHAPES ; i++ ){ cout << "\n ** Destroying Shape No. " << i ;
delete_shape( list[i] ) ;}return( 0 ) ;
}
49
process_shape(…)Boolean process_shape( ostream &output_stream, Shape *current ){ Boolean status ;
status = current->draw() ;if( !status ){output_stream << "\n\t Draw Tests ............. Failed " ; }status = current->paint( YELLOW ) ;if( !status ){output_stream << "\n\t Paint Tests ............. Failed " ; }status = current->move( 1 , 1 ) ;if( !status ){output_stream << "\n\t Move Tests .............. Failed " ;}output_stream << "\n\t Area of Shape:" << current->area() ;output_stream << "\n\t Perimeter of Shape:" << current->perimeter() ;return( status ) ;
}
50
make_shape(…)Shape * make_shape( int i )
{ Shape *current ;
if( i == 0 )
{ current = new Circle( 1 , 3 , 4 , RED ) ; }
else if( i == 1 )
{current = new Rectangle( 8, 5, 12, -2, GREEN ) ; }
else
{current = new Square( -6 , 3 , 3 , BLUE ) ;}
return( current ) ;
}
void delete_shape ( Shape *current )
{ delete current ;}//uo/draw/testshape.dsw
//draw/wzd.dsw
51
52