C++课程设计汽车类的设计.docx
《C++课程设计汽车类的设计.docx》由会员分享,可在线阅读,更多相关《C++课程设计汽车类的设计.docx(24页珍藏版)》请在冰点文库上搜索。
C++课程设计汽车类的设计
1题目内容及设计要求
题目名称:
汽车类的设计
设计一个汽车类Vehicle,具有带参数的构造函数,保护型数据成员有:
车轮个数wheels和车重weight,有成员函数Show()显示数据;由此派生出Car类,其中包含数据:
品牌,载人数passenger,排气量,构造函数,成员函数Show()显示数据;由Vehicle再派生出truck类,其中包含数据:
品牌,载人数passenger,和载重量payload,构造函数,成员函数Show()显示数据;主函数中用基类指针调用派生类的Show()函数,能输入输出数据,输入若干Car类和truck类数据记录,到对象数组中,数据保存到文件中。
能显示所有数据,能删除记录,按品牌查找记录。
为了允许用户交替选择各功能,使用菜单实现选择功能。
2总体设计
2.1总体功能框图
图2-1总体功能框图
2.2类的设计说明
vehicle
-wheels:
int
-weight:
int
+vehicle(intwh,intwe):
void
+show():
void
+ShowMenu():
void
+set(intwh,intwe):
void
car
-passenger:
int
-brand:
string
-emmi:
int
+car(intpa,intem,stringbr,intwh,intwe):
void
+setcar(stringbr,intpa,intem,intwh,intwe):
void
+findcar():
void
+deletecar():
void
truck
-passenger_load:
int
-brand:
string
-pay_load:
int
+truck(intpa,intp_load,stringbr,intwh,intwe):
void
+settruck(stringbr,intpa,intp_load,intwh,intwe):
void
+findtruck():
void
+deletetruck():
void
图2-2UML图
解释说明:
Vehicle:
汽车管理类
私有类数据wheels:
int:
整型数据车轮个数
weight:
int:
整形数据车重
共有类成员vehicle(intwh,intwe):
void:
构造函数
show():
void:
显示数据的函数
ShowMenu():
void:
显示菜单函数
由Vehicle类派生出小汽车car类
私有数据:
passenger:
int:
整型数据载客人数
brand:
string:
字符串型数据品牌
emmi:
int:
整型数据排气量
共有成员:
car(intpa,intem,stringbr,intwh,intwe):
void:
构造函数
setcar(stringbr,intpa,intem,intwh,intwe):
void:
设置函数,完成新增轿车信息操作
indcar():
void:
能够查找轿车信息的成员函数
deletecar():
void:
能够删除轿车信息成员函数
由Vehicle类派生出小汽车truck类
私有数据:
passenger_load:
int:
整型数据载客人数
brand:
string:
字符串型数据品牌
pay_load:
int:
整型数据载重量
公有成员:
truck(intpa,intp_load,stringbr,intwh,intwe):
void:
构造函数
show():
void:
显示数据的函数
settruck(stringbr,intpa,intp_load,intwh,intwe):
void:
设置函数,完成新增卡车信息操作
findtruck():
void:
能够查找轿车信息的成员函数
deletetruck():
void:
能够删除轿车信息成员函数
3程序清单及注释
#include
#include//定义string类型数据
#include//调用system
#include//定义基本输入输出头文件
#include//定义关于文件的头文件完成文件文件读写操作
usingnamespacestd;//引入C++标准命名空间std
classVehicle//定义交通工具类Vehicle
{
protected:
intwheels;//车轮个数
floatweight;//车重
public:
Vehicle(intwh,floatwe)//声明构造函数
{wheels=wh;weight=we;}
voidshow()//声明显示数据的成员函数
{
cout<<"Thewheelsare"<cout<<"Theweightare"<}
voidShowMenu()//按指定格式显示菜单的成员函数
{
cout<<"********************************************************************************"<cout<<"〓〓〓〓〓〓〓〓〓〓☆汽车分类管理系统☆〓〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓★★★★★★★★★★★★★★★★★〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆1.新增轿车☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆2.新增卡车☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆3.查找轿车品牌☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆4.查找卡车品牌☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆5.删除轿车记录☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆6.删除卡车记录☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆0.安全退出系统☆★〓〓〓〓〓〓〓〓〓"<cout<<"\n\t\t\n\t\t请选择:
";
}
voidset(intwh,intwe)//设置信息
{wheels=wh;weight=we;}
};
classcar:
publicVehicle//vehicle的派生类car类的声明
{
private:
intpassenger;//载客人数
stringbrand;//品牌
intemmi;//排气量
public:
car(intpa,intem,stringbr,intwh,intwe):
Vehicle(wh,we)//定义构造函数
{
passenger=pa;
brand=br;
emmi=em;
}
voidsetcar(stringbr,intpa,intem,intwh,intwe)//设置轿车信息
{
passenger=pa;
brand=br;
emmi=em;
Vehicle:
:
set(wh,we);
ofstreamout;//定义输出流对象out
out.open("f:
\\vehicle.txt",ios:
:
app);//打开文件,并使输出追加到文件尾
if(!
out)//判断是否输入正确
{cout<<"can'topenfile!
"<out<<"品牌"<
out.close();//关闭文件
}
voidfindcar()//查找轿车信息的成员函数
{
cout<";
stringp;
cin>>p;//输入一个字符串,与文件中的每一段的第一个字符串进行比较
ifstreamreFile("f:
\\Vehicle.txt");//定义输入流对象reFile并打开vehicle文件
if(!
reFile)//检测文件打开是否成功
{
cerr<<"Error!
CannotopentheFile!
"<exit
(1);
}
boolDelet=false;
while(!
Delet)
{
if(brand==p)//比对输入的品牌与文件中的品牌
{
cout<<"您查找的的车辆档案信息如下:
"<cout<<"品牌"<Delet=true;
}
}
reFile.close();//关闭文件
system("pause");//暂停屏幕,以便观察结果
if(false==Delet)cout<<"Sorry!
没有您所要查找的车辆的档案信息,请仔细核对!
O(∩_∩)O谢谢!
"<}
voiddeletecar()//删除轿车信息的成员函数
{
cout<";
stringp;
cin>>p;//输入一个字符串,与文件中的每一段的第一个字符串进行比较
ifstreamreFile("f:
\\Vehicle.txt");//定义输入流对象,并打开文件
if(!
reFile)//检测文件打开是否成功
{
cerr<<"Error!
CannotopentheFile!
"<exit
(1);
}
boolDelet=false;
while(!
Delet)
{
if(brand==p)
{
cout<<"您想删除的车辆档案信息如下:
"<cout<<"品牌"<ofstreamtemFile1("f:
\\Vehicle.txt");
if(!
temFile1)
{cerr<<"Error!
CannotopentheFile!
"<exit
(1);
}
temFile1<temFile1.close();//关闭文件
Delet=true;//将Delet值改为true以结束循环
}
else
{
ofstreamtemFile2("f:
\\Vehicle.txt");
if(!
temFile2)
{
cerr<<"Error!
CannotopentheFile!
"<exit
(1);
}
temFile2<temFile2.close();
}
}
if(false==Delet)cout<<"Sorry!
没有您所要删除的车辆的档案信息,请仔细核对!
O(∩_∩)O谢谢!
"<reFile.close();
system("delf:
\\Vehicle.txt");
cout<<"该车辆档案信息已经删除!
"<system("pause");
}
};
classtruck:
publicVehicle//vehicle的派生类truck类的声明
{
private:
intpassenger;//载客人数
stringbrand;//品牌
intpayload;//载重量
public:
truck(intpa,intpload,stringbr,intwh,intwe):
Vehicle(wh,we)//定义构造函数
{
passenger=pa;
payload=pload;
brand=br;
}
voidsettruck(stringbr,intpa,intpload,intwh,intwe)//设置卡车类信息的函数
{
passenger=pa;
brand=br;
payload=pload;
Vehicle:
:
set(wh,we);
ofstreamout;//定义输出流对象out
out.open("f:
\\Vehicle.txt",ios:
:
app);//打开文件,并使输出追加到文件尾
if(!
out)//判断是否输入正确
{cout<<"can'topenfile!
"<out<<"品牌"<
out.close();//关闭文件
}
voidfindtruck()//查找卡车信息的函数
{
cout<";
stringp;
cin>>p;//输入一个字符串,与文件中的每一段的第一个字符串进行比较
ifstreamreFile("f:
\\Vehicle.txt");//定义输入流对象reFile并打开vehicle文件
if(!
reFile)//检测文件打开是否成功
{
cerr<<"Error!
CannotopentheFile!
"<exit
(1);
}
boolDelet=false;
while(!
Delet)
{
if(brand==p)//比对输入的品牌与文件中的品牌
{
cout<<"您查找的的车辆档案信息如下:
"<cout<<"品牌"<Delet=true;
}
}
reFile.close();
system("pause");
if(false==Delet)cout<<"Sorry!
没有您所要查找的车辆的档案信息,请仔细核对!
O(∩_∩)O谢谢!
"<}
voiddeletetruck()//删除卡车信息的函数
{
cout<";
stringp;
cin>>p;//输入一个字符串,与文件中的每一段的第一个字符串进行比较
ifstreamreFile("f:
\\Vehicle.txt");//定义输入流对象reFile并打开vehicle文件
if(!
reFile)//检测文件打开是否成功
{
cerr<<"Error!
CannotopentheFile!
"<exit
(1);
}
boolDelet=false;
while(!
Delet)
{if(brand==p)//比对输入的品牌与文件中的品牌
{cout<<"您想删除的车辆档案信息如下:
"<cout<<"品牌"<ofstreamtemFile1("f:
\\Vehicle.txt");
if(!
temFile1)
{cerr<<"Error!
CannotopentheFile!
"<exit
(1);
}
temFile1<temFile1.close();//关闭文件
Delet=true;//将Delet值改为true以结束循环
}
else
{
ofstreamtemFile2("f:
\\Vehicle.txt");
if(!
temFile2)
{cerr<<"Error!
CannotopentheFile!
"<exit
(1);
}
temFile2<temFile2.close();
}
}
if(false==Delet)cout<<"Sorry!
没有您所要删除的车辆的档案信息,请仔细核对!
O(∩_∩)O谢谢!
"<reFile.close();
system("delf:
\\Vehicle.txt");
cout<<"该车辆档案信息已经删除!
"<system("pause");
}
};
intmain()//主函数
{
intx,i=0;
intpa;stringbr;intem;intwh;intwe;intp_load;
vehicleve1(4,100);//定vehicle类对象ve1
carc(100,4,"fengtian",4,300);//派生类car的对象c
truckt(10,6,"wuzhou",4,300);//派生类truck的对象t
boolquit=false;
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§"<for(i=0;i<3;i++)
cout<<"\t\t◎\t\t\t\t\t\t◎"<cout<<"\t\t◎★★★★【欢迎进入汽车分类管理系统】★★★★◎"<for(i=0;i<3;i++)
cout<<"\t\t◎\t\t\t\t\t\t◎"<cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§\n"<cout<<"按任意键开始……";
getch();
while(!
quit)
{system("cls");//清屏
ve1.ShowMenu();//调用显示主菜单的成员函数
cin>>x;
switch(x)
{
case0:
quit=true;break;
case1:
cout<<"请输入新增轿车信息:
品牌载人数排气量车轮个数车重"<cin>>br>>pa>>em>>wh>>we;
c.setcar(br,pa,em,wh,we);break;//调用派生类car类中的成员函数
case2:
cout<<"请输入新增卡车信息:
品牌载人数载重量车轮个数车重"<cin>>br>>pa>>p_load>>wh>>we;
t.settruck(br,pa,p_load,wh,we);//调用派生类truck中的成员函数
break;
case3:
c.findcar();//调用派生类car类中的成员函数
break;
case4:
t.findtruck();//调用派生类truck中的成员函数
break;
case5:
c.deletecar();//调用派生类car类中的成员函数
break;
case6:
t.deletetruck();//调用派生类truck中的成员函数
break;
}
}
system("pause");
return0;
}
4运行结果与分析
欢迎界面由main主函数中输出,运行情况如图4-1;然后通过调用vehicle类的成员函数显示主菜单,主菜单界面如图4-2;通过switch结构由用户选择所需功能,功能实现分别通过调用car类和truck类成员函数实现,结果如图4-3~4-15。
运行程序,即出现界面,如图4-1
按任意键进入主菜单,如图4-2
按1选择新增轿车后,如图4-3
输入需要的轿车信息后,如图4-4
选择2新增卡车信息后,如图4-5
输入所需卡车信息后,如图4-6
选择3查找轿车品牌,如图4-7
输入所要查找的轿车品牌后如图4-8
选择4查找卡车品牌图4-9
输入要查找的卡车品牌后,如图4-10
选择5删除轿车记录,如图4-11
输入要删除的轿车品牌,如图4-12
选择6删除卡车记录,如图4-13
输入要删除的卡车品牌,如图4-14
选择0退出系统,如图图4-15
5总结
通过本学期对C++语言的学习以及对C++语言和C语言的对比,我对计算机语言有了更进一步的了解,这也使我在计算机语言的学习上有了更大的进步。
本次“汽车类的设计”课程设计使用了类,派生,文件的读写操作等方法,从多个侧面诠释C++语言程序在结构,内容以及设计思路上的特点,并且较好的达到了题目的设计要求。
虽然在设计过程中遇到了许多问题,但通过查阅相关资料和书籍,相关问题均得到了很好的解决。
本次课程设计不仅让我在课程中学习到的知识得到了实践,也使我得到了许多相关的额外知识,更重要的是,本次课程设计为我今后的学习和实践提供了宝贵的经验。
6参考文献
[1]李爱华,程磊著.面向对象程序设计(C++语言).北京:
清华大学出版社,2010
[2]刘振安,刘燕君著.C++程序设计课程设计.北京:
机械工业出版社,20