//Park.h class Automobile //各种车的基类 { public: virtual void Pay()=0;//纯虚函数,用于显示车辆信息和计价提示 void disp(); //用于输出车牌号和已使用年数的信息 int gettype(); //车辆类型 ~Automobile(); protected: int type; //车辆类型:1:Truck 2:Carriage 3:Car char *autoNo; //车牌号 int yearUsed; //车辆已使用年数 }; ///park class Park { public: Park(); //构造函数,给指针数组和车位号赋初值 void distribute(Automobile *); //为新来车辆分配停车位并记录进场时间 float parkfee(int num); //开走车辆(输入车位编号)时付费 void count(); //显示停车场中各类车辆的数量 int gethour(int,int,int,int,int,int); //计算车辆停在停车场的小时数 private: Automobile *chewei[3]; //定义一个指向三个车位的指针数组 int autoNum; //停车场停车位号 int inday[3],inhour[3],inminute[3]; //车开进车场的天、小时、分钟 int outday,outhour,outminute; //车开出车场的天、小时、分钟 }; // stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 // 特定于项目的包含文件 // #pragma once #include "targetver.h" #include <stdio.h> #include <tchar.h> // TODO: 在此处引用程序需要的其他头文件 //Park.cpp #include "stdafx.h" #include "park.h" #include <iostream> using namespace std; //-----------------------------------------------------Automobile--------------------------------- void Automobile::disp() { cout<<" 车牌号:"<<autoNo<<endl; cout<<" 车辆已使用年数:"<<yearUsed<<endl; } int Automobile::gettype() { return type; } Automobile::~Automobile() { delete []autoNo; } //-----------------------------------------------------Park--------------------------------------- Park::Park()//构造 { for(int i=0;i<3;i++)//3个停车位 { chewei[i]=NULL; } autoNum=1; } void Park::distribute(Automobile *vehicle)//分配 { if(chewei[0]!=NULL && chewei[1]!=NULL && chewei[2]!=NULL) cout<<" 停车场已满,无法为该车分配车位!"<<endl; for(int i=0;i<3;i++) { if(chewei[i]==NULL) { chewei[i]=vehicle; autoNum=i+1; cout<<" 分配给该车的停车位为:"<<autoNum<<endl; cout<<" 请输入此时时间(输入的日、时、分(24时制)之间用空格隔开):"; cin>>inday[i]>>inhour[i]>>inminute[i]; cout<<" 该车进入停车场时间为:"<<inday[i]<<"日"<<inhour[i]<<"时"<<inminute[i]<<"分"<<endl; break; } } } float Park::parkfee(int num) { cout<<" 请输入此时时间(输入的日、时、分(24时制)之间用空格隔开):"; cin>>outday>>outhour>>outminute; cout<<" 该车开出停车场时间为:"<<outday<<"日"<<outhour<<"时"<<outminute<<"分"<<endl; float fee; if(chewei[num-1]->gettype()==1) fee=gethour(inday[num-1],inhour[num-1],inminute[num-1],outday,outhour,outminute)*2.0;//Truk else if(chewei[num-1]->gettype()==2) fee=gethour(inday[num-1],inhour[num-1],inminute[num-1],outday,outhour,outminute)*1.5;//Carriage else if(chewei[num-1]->gettype()==3) fee=gethour(inday[num-1],inhour[num-1],inminute[num-1],outday,outhour,outminute)*1.0;//Car chewei[num-1]=NULL; return fee; } void Park::count()//显示 { int trucknum=0; int carriagenum=0; int carnum=0; for(int i=0;i<3;i++) { if(chewei[i]!=NULL) { if(chewei[i]->gettype()==1) trucknum++; if(chewei[i]->gettype()==2) carriagenum++; if(chewei[i]->gettype()==3) carnum++; } } cout<<" 停车场中卡车的数量为:"<<trucknum<<endl; cout<<" 停车场中客车的数量为:"<<carriagenum<<endl; cout<<" 停车场中小轿车的数量为:"<<carnum<<endl; } int Park::gethour(int ind,int inh,int inm,int outd,int outh,int outm)//(日,时,分。日,时,分) { int geth; //保留停车的小时数 if (ind==outd) { if (inh==outh) { geth=1; } else { if(inm>=outm) geth=outh-inh; else geth=outh-inh+1; } } else { if(outh>=inh) { if(inm>=outm) geth=outh-inh+(outd-ind)*24; else geth=outh-inh+1+(outd-ind)*24; } else { if(inm>=outm) geth=(outd-ind)*24-(inh-outh); else geth=(outd-ind)*24+1-(inh-outh); } } return geth; } // stdafx.cpp : 只包括标准包含文件的源文件 // 1102.pch 将作为预编译头 // stdafx.obj 将包含预编译类型信息 #include "stdafx.h" // TODO: 在 STDAFX.H 中 // 引用任何所需的附加头文件,而不是在此文件中引用 //main.cpp // 1102.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <ctime> #include "park.h" #include <iostream> using namespace std; //-------------------------Car--------------------------- class Car:public Automobile { public: Car() { type=3; } void Pay(); friend istream& operator >> (istream&,Car&); private: float exhaust; //排气量 }; void Car::Pay() { disp(); cout<<" 排气量:"<<exhaust<<"L"<<endl; cout<<" 收费标准:1元/小时"<<endl; } istream& operator >> (istream& input,Car& car) { cout<<" 请输入车牌号:"; car.autoNo=new char[10]; cin>>car.autoNo; cout<<" 请输入车辆已使用年数:"; input>>car.yearUsed; cout<<" 请输入排气量(单位为升):"; input>>car.exhaust; return input; } //-----------------------Truck--------------------------- class Truck:public Automobile { public: Truck() { type=1; } void Pay(); friend istream& operator >> (istream&,Truck&); private: float weight; //载重量 }; void Truck::Pay() { disp(); cout<<" 载重量:"<<weight<<"t"<<endl; cout<<" 收费标准:2元/小时"<<endl; } istream& operator >> (istream& input,Truck& truck) { cout<<" 请输入车牌号:"; truck.autoNo=new char[10]; //车牌号 cin>>truck.autoNo; cout<<" 请输入车辆已使用年数:"; input>>truck.yearUsed; cout<<" 请输入载重量(单位为吨):"; input>>truck.weight; return input; } //----------------------Carriage------------------------ class Carriage:public Automobile { public: Carriage() { type=2; } void Pay(); friend istream& operator >> (istream&,Carriage&); private: int passengers; //人数 }; void Carriage::Pay() { disp(); cout<<" 乘坐人数:"<<passengers<<endl; cout<<" 收费标准:1.5元/小时"<<endl; } istream& operator >> (istream& input,Carriage& carriage) { cout<<" 请输入车牌号:"; carriage.autoNo=new char[10]; cin>>carriage.autoNo; cout<<" 请输入车辆已使用年数:"; input>>carriage.yearUsed; cout<<" 请输入乘坐人数:"; input>>carriage.passengers; return input; } //========================Main()======================= int _tmain(int argc, _TCHAR* argv[]) { /*time_t inTime,outTime; time(&inTime); cout<<inTime<<endl;*/ /*cout << system("date") << endl;*/ time_t t = time(0); char tmp[64]; strftime( tmp, sizeof(tmp), " %Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) ); puts( tmp ); cout<<"/n 欢迎使用/n"<<endl; /* SYSTEMTIME curTime; GetLocalTime(&curTime); printf("%d %d %d",curTime.wHour,curTime.wMinute,curTime.wSecond);*/ int choice; //所要选择的序号 int type; //车的类型 int no; //车位号 Truck *truck; Carriage *carriage; Car *car; Park park; while(1) { cout<<endl; cout<<" 1.分配停车位 "<<endl; cout<<" 2.车辆离开停车场 "<<endl; cout<<" 3.显 示 "<<endl; cout<<" 4.退 出 "<<endl; cout<<endl; cout<<" 请选择序号(1-4):"; cin>>choice; switch(choice) { case 1: cout<<endl; cout<<endl; cout<<" 1--Truck; 2--Carriage;3--Car"<<endl; cout<<" 请输入车辆类型:"; cin>>type; cout<<"/n/n/n/n"<<endl; if(type==1) { truck=new Truck; cin>>*truck; truck->Pay(); park.distribute(truck); } else if(type==2) { carriage=new Carriage; cin>>*carriage; carriage->Pay(); park.distribute(carriage); } else if(type==3) { car=new Car; cin>>*car; car->Pay(); park.distribute(car); } break; case 2: cout<<" 请输入要开出停车场的车所停的车位号:"; cin>>no; if(no != 1 &&no != 2 &&no != 3) { cout<<endl; cout<<" 警告:"<<endl; cout<<" 错误代码:A000(输入有误)"<<endl; cout<<endl; cout<<" "; system("pause"); } else cout<<" 该车需交纳停车费为:"<<park.parkfee(no)<<"元"<<endl; break; case 3: park.count(); break; default: cout<<endl; cout<<" 警告:"<<endl; cout<<" 错误代码:A000(输入有误)"<<endl; cout<<endl; cout<<" "; system("pause"); break; } } }