车辆管理系统.docx

上传人:b****6 文档编号:7758205 上传时间:2023-01-26 格式:DOCX 页数:23 大小:45.15KB
下载 相关 举报
车辆管理系统.docx_第1页
第1页 / 共23页
车辆管理系统.docx_第2页
第2页 / 共23页
车辆管理系统.docx_第3页
第3页 / 共23页
车辆管理系统.docx_第4页
第4页 / 共23页
车辆管理系统.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

车辆管理系统.docx

《车辆管理系统.docx》由会员分享,可在线阅读,更多相关《车辆管理系统.docx(23页珍藏版)》请在冰豆网上搜索。

车辆管理系统.docx

车辆管理系统

C++项目:

车辆管理系统

目标:

写一个小程序,要求到用标准模板库中的list容器和迭代器,可以使用到多继承来进行实验。

1.1General(概述)

1.在写代码之前要仔细阅读作业要求

2.要求对不正确的输入做检查

3.在你写完一个类之后,要紧接着写这个类的测试函数,因此,当你调试你写的代码

的时候,你能够很容易的对你的代码做重复检查。

这样才能够保证你当前写的代码

能够准确无误的执行。

可能出于某些原因你要对你写过的代码作一此些修改,这样

你重新测试你修改的代码就相比照较容易。

4.添加完成你的任务所需要的函数。

1.2Introduction(简介):

渥太华这个城市正在创建一个有关交通工具的“数据库”,来为它的议会(委员会)做

预算提供较好的参考。

这个城市有许多不同种类的机动车辆:

客车,货车,卡车,

紧急车辆(救护,消防等),在对这个城市了解之后,要求你设计一个有下列图要求的层次的系统。

2Implementthefollowingfunctionsforeachclass:

为每个类实现以下函数

2.1(Vehicle类)(属性:

所有的属性要求为私有的)

charlicensePlate[]属性:

车的车牌(执照)作为它的id,一个车牌最多可由8组成。

char*type属性:

车辆类型(例如:

汽车,卡车,消防车)

char*make属性:

车辆的制造商

doublegasTankSize属性:

总油量

doublefuelConsumption属性:

单位路程耗油量

函数:

R1.构造函数vehicle(char*type,char*licensePlate,doublegasTankSize,doublefuelConsumption)

Tppe的默认值为:

car

licensePlate的默认值为:

ottawa01

gasTankSize的默认值为:

100

fuelConsumption的默认值为:

10

所有其他不在构造函数中的参数要求置0或置空

R2.voidsetMake(char*make);

设置制造商的值

R3.setFuelData(doublegasTankSize,doublefuelConsumption)–设置燃料的有关信息(总油量,单位路程耗油量)

R4.setType(char*type)–设置车辆类型

R5.setLicensePlate(char*license)–设置车辆的车牌

R6.virtualprintSpecifications()-打印车辆的具体信息,例如:

制造商、类型,车牌,燃油量和油箱容积

R7.virtualdoublecomputeTravelDistance()–这个函数计算车辆可能行使的距离,

计算公式为:

gasTankSize*fuelConsumption(总油量*单位路程耗油量)

ClassLoadVehicle:

(LoadVehicle类)

Attributes(属性)

•intnumberOfWheels–containsthenumberofwheelsthatthevehiclehas.

intnumberOfWheels属性:

车辆的车轮个数

•doubleloadCapacity–theloadweightthatthevehiclecancarry(inkg)

doubleloadCapacity:

车辆的负荷

•doubletowingCapacity–thetotalweightthatthevehiclecantow(inkg)

doubletowingCapacity:

车辆能够拖曳的重量

Functions

R8.loadVehicle(char*type,intnumberOfWheels,doubleloadCapacity,double

towingCapacity,doublegasTankSize,doublefuelConsumption).

Aconstructorfortheclass.ThedefaultvaluesfornumberOfWheels,loadCapacityand

towingCapacityare6,500kgand5000kgrespectively.Thedefaultvaluesfor

gasTankSizeandfuelConsumptionare200and6respectively.Theconstructorwill

initializeallthefieldsoftheclassasrequired.Allothermembervariablesthatarenot

initializedshouldbesettothedefaultvaluesofthebaseclass(es),or,ifnodefault

valuesexist,to0orNULL.

这个类的构造函数,各个属性的默认值:

loadCapacity的默认值:

6,500kg

towingCapacity的默认值:

5000kg

gasTankSize的默认值:

200

fuelConsumption的默认值:

6

其他没有初始化的成员变量应该设置为基类的默认值一致,如果没有默认值,则应

置0或置空

R9.setLoadData(doubletowingCapacity,doubleloadCapacity)

设置负荷,拖曳量

R10.printSpecifications()–printthespecificationofthevehicle(thevehicle

specificationfromthevehicleclass,thetowingcapacity,theloadcapacityandthe

numberofwheels).

打印出车辆的具体信息,包括从基类继承的和它自身的。

R11.doublecomputeTravelDistance–everypairofwheelsabovefourreducesthe

traveldistanceby5%(travelDistance=gasTankSize*fuelConsumption*(100-

(numberOfWheels-4)/2*5)/100).Forexample:

ifthegasTankSizeif100litres,the

fuelConsumptionis10km/landthereare10wheelsthenthetravelDistance=

100*10*(100-(10-4)/2*5)/100=1000*85/100=850km.

超过4个车轮,每增加两个车轮,车辆可行使的车程以5%减少.

例如:

总油量为100公升,耗油量为10km/公升,该车车辆有10个车轮,它可行使的车程为:

100*10*(100-(10-4)/2*5)/100=1000*85/100=850km.

2.3ClasspassengerVehicle:

(passengerVehicle类)

Attributes

•intnumberOfPassengers–containsthenumberofpassengersthatthevehiclecan

Carry

intnumberOfPassengers属性:

车辆可搭乘的乘客的数量

Functions(函数)

R12.passengerVehicle(char*type,intnumPassengers,doublegasTankSize,double

fuelConsumption)

–ThedefaultvaluesfornumPassengersis5.Thedefaultvalues

forgasTankSizeandfuelConsumptionare100and11respectively.Theconstructor

willinitializeallthefieldsoftheclassasrequiredusingdefaultvaluesofbase

classes.Allothervariablesthatarenotinitializedaresetto0orNULL.

该类的构造函数,成员变量的默认值:

numPassengers的默认值:

5

gasTankSize的默认值:

100

fuelConsumption的默认值:

11

要用基类的构造函数对要求有默认值的属性进行初始化,没其他没有初始化的成员

要置0或置空

R13.setNumPassengers(intnumPassengers)

设置可搭乘的乘客人数

R14.printSpecifications()–printthespecificationofthevehicle(thevehicle

specificationfromthevehicleclass,andthenumberofpassengers).

打印车辆的具体信息

R15.computeTravelDistance()–超过5个人每多搭乘1个人行程将以2.5%减少

例如:

总油量为100公升,燃油量为10km/公升,有7个乘客,则可行使的路程为:

100*10*(100-(7-5)*2.5)/100=1000*95/100=950km.

2.4ClassemergencyVehicle(emergencyVehicle类)

Attributes(属性)

intnumWorkers属性:

为每辆车分配的工作人员

char*driver属性:

为车辆分配的驾驶员

char*station属性:

车辆停靠的车站

Functions

R16.emergencyVehicle(char*type,char*driver,char*station,intnumPassengers,doublegasTankSize,doublefuelConsumption)

–构造函数,部分属性平的默认值:

fornumPassengers的默认值:

5

gasTankSize的默认值:

100

fuelConsumption的默认值:

11

wheels的默认值:

6

其他没有给初始值的属性要求置0或置空.

R17.setAssignment(char*driver,char*station)设置分配(司机,停靠站)

R18.printSpecifications()–打印的车辆〔车辆标准规格从车辆类,该loadvehcile,客运车辆和emergencyequipment类〕。

打印车辆的具体信息

R19.computeTravelDistance()–行程是loadVehicle和passengerVehicle中较小的行程

2.5ClassEmgergencyEquipmen(紧急设备类)

Attributes〔属性〕

intsirenNoiseDistance–汽笛能够被听到的距离,默认为500m

intnumBeds–可以同时供应病人的床位,默认值为2

Functions

R20.emergencyEquipment(intsirenNoiseDistance,intnumBeds)–构造函数给汽笛的可听见距离,床位初始化

R21.getBedsNum()–返回床位数

R22.printSpecifications()–打印汽笛的可听见距离,床位数

2.6Containerclass(容器类)

要求使用标准模板库中的list容器,list容器要求可以存储指向对

象的指针,这样所有不同类型的车辆可以在同一个容器中

(iterator-迭代器的使用)

2.7Decisionclass(决策类)

使用相应的迭代器对容器遍历,使用dynamiccasting〔运行时类型信息〕进行不同类之间的类型转型

(如将指向不同派生类对象的基类指针转为派生类对象指针),可以对相应不同类的

成员函数的调用,这个类由城市的议会用来做决定

Attributes〔属性〕

list&vehicleList:

各类车辆的指针

Functions〔方法〕

R23.decision(list&)–构造函数:

接收存储各类车辆信息的容器

R24.printVehiclesSpecifications-打印所有车辆的具体信息

R25.printEmergencyVehicles()-单独打印紧急车辆的紧急数据信息

R26.intnumberLongDistanceEmergencyVehicles()–打印不用中途加油能够行使800km以上的紧急车辆的数量

R30.intnumBeds()-确定以防紧急事件这个城市能够调遣的移动床位的数量

R27.intnumPassengers()–确定以防紧急事件这个城市可转移的乘客人数.

2.8Testing(测试)

主函数要求能够获得供议会做决定的计算结果

intmain()

{

listvehicleList;

LoadVehicle*lv1=newLoadVehicle(…);

back(lv1);

PassengerVehicle*pv1=newPassengeVehicle(…);

back(pv1);

….

EmergencyVehicle*ev1=newEmergencyVehicle(…);

back(ev1);

….

Decisiondecision(vehicleList);

();

();

();

();

();

deletelv1;

deletepv1;

deleteev1;

return0;

}

11.写一个学生类,从person类继承,增加的属性为成绩f和评语label〔字符串〕。

person:

name,age,print()

#include<>

classperson

{

private:

    char*name;

    intage;

public:

    person(char*name="",intage=0)

    {

        this->name=name;

        this->age=age;

    }

    voidprint()

    {

        cout<<":

"<

"<

    }

    ~person(){cout<<"Persondestructor"<

};

classstudent:

publicperson

{

private:

    doublef;

    char*label;

public:

    student(char*n="",inta=0,doubleb=0,char*c=""):

person(n,a),f(b),label(c){}

    voidprint()

    {

        person:

:

print();

        cout<<"  成绩:

"<

"<

    }

    ~student(){cout<<"Stuentdestructor"<

};

voidmain()

{

    persona1;

    studentd1("张三",16,89.5,"优秀");

    a1=d1;

    a1.print();

    cout<

    d1.person:

:

print();

    cout<

    d1.print();

}

运行结果:

张三  年龄:

16

张三  年龄:

16

张三  年龄:

16  成绩:

89.5  评语:

优秀

Stuentdestructor

Persondestructor

Pressanykeytocontinue

exercise15

12.Person为基类:

虚函数为dailywork()~Person()

定义三个子类:

StudentDoctor(char*label)Driver(char*label)

主函数:

定义基类指针数组,动态创建子类对象,调用成员函数,删除创建的对象。

#include<>

classPerson

{

public:

    Person(char*name="",intage=0)

    {

        this->name=name;

        this->age=age;

    }

    virtualvoiddailywork(){cout<<":

"<

"<

    virtual~Person(){cout<<"

ersondestructor"<

private:

    char*name;

    intage;

};

classStudent:

publicPerson

{

public:

    Student(char*n="",inta=0,char*c="")

erson(n,a),label(c){}

  voiddailywork()

    {

        Person:

:

dailywork();

        cout<<"  学生";

        cout<<"  评语:

"<

    }

      ~Student(){cout<<"Stuentdestructor"<

private:

    char*label;

};

classDoctor:

publicPerson

{

public:

    Doctor(char*n="",inta=0,char*c="")

erson(n,a),label(c){}

  voiddailywork()

    {

        Person:

:

dailywork();

        cout<<"  医生";

        cout<<"  评语:

"<

    }

      ~Doctor(){cout<<"Doctordestructor"<

private:

    char*label;

};

classDriver:

publicPerson

{

public:

  Driver(char*n="",inta=0,char*c="")

erson(n,a),label(c){}

  voiddailywork()

    {

        Person:

:

dailywork();

        cout<<"  司机";

        cout<<"  评语:

"<

    }

  ~Driver(){cout<<"Driverdestructor"<

private:

    char*label;

};

voidmain()

{

    Student*s=newStudent("张三",15,"好");

    Doctor*d1=newDoctor("李四",45,"认真");

    Driver*d2=newDriver("王五",35,"优秀");

    Person*array[3];

    array[0]=s;

    array[1]=d1;

    array[2]=d2;

    for(inti=0;i<3;i++)array[i]->dailywork();

    deletearray[0];

    deletearray[1];

    deletearray[3];

}

运行结果:

张三  年龄:

15  学生  评语:

李四  年龄:

45  医生  评语:

认真

王五  年龄:

35  司机  评语:

优秀

Stuentdestructor

Persondestructor

Doctordestructor

Persondestructor

Driverdestructor

Persondestructor

Pressanykeytocontinue

exercise16

13.修改类Figure,将Point对象指针作为属性组合进来,对Figure的子类也做相应的修改。

#include<>

classPoint

{

private:

    doublex,y;

public:

    Point(doublei,doublej):

x(i),y(j){}

    voidprint()const

    {

        cout<<"("<

    }

    ~Point(){cout<<"Point析构"<

};

classFigure

{

private:

    Point*str;

    Pointcenter;

p

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1