车辆管理系统实验报告.docx
《车辆管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《车辆管理系统实验报告.docx(67页珍藏版)》请在冰豆网上搜索。
车辆管理系统实验报告
成绩:
《C++程序设计实践》报告
专业:
软件工程
班级:
学号:
姓名:
日期:
2016年06月26日
一、设计目的
(1)要求学生能够熟练掌握C++语言的基本知识和技能。
(2)基本掌握面向对象程序设计的基本思路和方法。
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
所做题目:
4题:
车辆管理系统主要负责各种车辆的常规信息管理工作。
系统中的车辆主要有大客车、小轿车和卡车。
每种车辆有车辆编号、车牌号、车辆制造公司、车辆购买时间、车辆型号(大客车、小轿车和卡车)、总公里数、耗油量/公里、基本维护费用、养路费、累计总费用等信息。
大客车还有载客量信息,小轿车还有厢数信息,卡车还有载重量信息。
每台车辆当月总费用=油价*耗油量/公里+基本维护费用。
基本维护费用:
客车:
2000元/月;小轿车:
1000元/月;卡车:
1500元/月
功能要求:
A.添加车辆
B.查询车辆
C.显示车辆信息库
D.修改车辆
E.删除车辆
F.统计功能
G.保存车辆
H.读取车辆
二、总体设计
(1)定义基类base,设计出函数框架;
(2)派生car类、truck类、bus类,在其中具体实现函数功能;
(3)分别设计轿车、卡车、客车管理子菜单,主函数中设计添加总菜单,解决问题。
模块图1:
base
public
car
truck
bus
read()
show()
add()
modify(int)
del(int)
save()
car_manage()
truck_manage()
bus_manage()
search()
search_number()
main
模块图2:
类图:
base
+count_mun:
int=0
+base():
void
+~base():
void
+read()
+add()
+modify():
int
+del():
int
+save()
+show()
+js()
car
truck
bus
+a:
string
+a:
string
+a:
string
+b:
string
+b:
string
+b:
string
+c:
string
+c:
string
+c:
string
+d:
string
+d:
string
+d:
string
+e:
string
+e:
string
+e:
string
+f:
double
+f:
double
+f:
double
+g:
double
+g:
double
+g:
double
+h:
double
+h:
double
+h:
double
+i:
double
+i:
double
+i:
double
+zfy:
double
+zfy:
double
+zfy:
double
+l:
int
+l:
int
+j:
int
+count_carmun:
int
+count_truckmun:
int
+count_busmun:
int
+car()
+truck()
+bus()
+~car()
+~truck()
+~bus()
+car(string,string,string,string,string,double,double,double,double,int)
+truck(string,string,string,string,string,double,double,double,double,int)
+bus(string,string,string,string,string,double,double,double,double,int)
+read():
void
+read():
void
+read():
void
+add():
void
+add():
void
+add():
void
+modify():
int
+modify():
int
+modify():
int
+del():
int
+del():
int
+del():
int
+save():
void
+save():
void
+save():
void
+show():
void
+show():
void
+show():
void
+js():
void
+js():
void
+js():
void
三、详细设计(以car类为例)
car.cpp:
1.构造函数car():
功能:
用于定义一个空的对象方便操作。
2.重载构造函数car(string,string,string,string,string,double,double,double,double,int):
参数:
string编号,string车牌号,string制造公司,string购买时间,string型号,double总公里数,double油价,double耗油量/公里,double养路费,int厢数。
功能:
用于初始化对象,在文件中直接提取数据形成对象。
3.析构函数~car():
功能:
释放对象内存。
4.read()函数:
功能:
从预设的文本文件中提取数据,初始化成car类对象并一一存入vector容器中。
5.add()函数:
功能:
通过新建car对象存入vector容器中,便于在后续操作中写入文件。
6.modify()函数:
参数:
intindex。
功能:
通过index确定要操作的vector数据位置,进行修改。
7.del()函数:
参数:
intindex。
功能:
通过index确定要操作的vector数据位置,进行删除。
8.save()函数:
功能:
打开文本文件进行写入,完成后关闭文件。
9.show()函数:
功能:
输出vector容器中的所有对象。
10.js()函数:
功能:
计算车辆的当月总费用(车辆总费用=油价*耗油量/公里+基本维护费用)
车辆信息管理系统.cpp
1.main()函数
功能:
输出总菜单。
2.car_manage()函数
功能:
输出轿车管理子菜单。
3.truck_manage()函数
功能:
输出卡车管理子菜单。
4.bus_manage()函数
功能:
输出客车管理子菜单。
5.search()函数
功能:
输出车辆查询子菜单。
6.search_number()函数
功能:
输出预先统计的各类车辆总数。
四、测试与调试
调试成功,各功能均可实现。
1)在调试过程中遇到的问题:
1.将数据写入文件。
在设计文件的输入输出时遇到了较大的阻力,不明白怎么将输入到内存里的数据怎么再输入到文件里,而且还可以继续用。
2.添加和修改菜单的报错问题。
总是无法完美的实现输入错误编号时的错误提醒输出。
3.文件的再读取。
运行完一遍程序后再运行就报错。
2)解决办法:
1.查看老师的程序,同时借鉴别人输入输出的方法,完美的解决了自己的问题。
2.通过对bool值的死循环套用,令函数在bool为真时才能跳出,bool为假时可以提醒使用者输入正确的编号,解决了这一问题,实现了良好的输出。
3.改save()函数中的分隔符””为”\t”后解决问题。
五、源程序清单和执行结果
A.车辆信息管理系统.cpp:
#include"stdafx.h"
#include
#include
#include"base.h"
#include"car.h"
#include"truck.h"
#include"bus.h"
#include"iostream"
usingnamespacestd;
intbase:
:
count_num=0;
intcar:
:
count_carnum=0;
inttruck:
:
count_trucknum=0;
intbus:
:
count_busnum=0;
vectorvec_car;
vectorvec_truck;
vectorvec_bus;
//字符串分割函数
vectorsplit(stringstr,stringpattern)
{
string:
:
size_typepos;
vectorresult;
str+=pattern;//扩展字符串以方便操作
unsignedintsize=str.size();
for(unsignedinti=0;i{
pos=str.find(pattern,i);
if(pos{
strings=str.substr(i,pos-i);
result.push_back(s);
i=pos+pattern.size()-1;
}
}
returnresult;
}
base*p=NULL;
charout;
//轿车管理子菜单
voidcar_manage()
{
system("title轿车管理子菜单");//设置窗口标题
system("color3F");//设置子菜单背景色:
湖蓝色,字体颜色:
亮白色
intchoice,i=0;
boolquit=false;
while
(1)
{
system("cls");
cout<<"**********轿车管理子菜单**********"<cout<<"1.查看车辆信息"<cout<<"2.添加车辆信息"<cout<<"3.修改车辆信息"<cout<<"4.删除车辆信息"<cout<<"5.统计车辆数"<cout<<"0.退出"<cout<<"**********************************"<cout<<"请输入所要操作的编号:
";
cin>>choice;
switch(choice)
{
case1:
{
carc1;
p=&c1;
cout<<"\n编号"<<"车牌号"<<"制造商"<<"购买时间"<<"型号"<<"公里数"<<"油价"<<"耗油量"<<"养路费"<<"厢数"<<"总费用"<p->show();
system("pause");
break;
}
case2:
{
stringa,b,c,d,e,j;
doublef,g,h,i;intl;
cout<<"\n编号"<<"车牌号"<<"制造商"<<"购买时间"<<"型号"<<"公里数"<<"油价"<<"耗油量"<<"养路费"<<"厢数"<<"总费用"<vector:
:
iteratorit;
for(it=vec_car.begin();it!
=vec_car.end();++it)
cout<a<<""<b<<""<c<<""<d<<""<e<<""<f<<""<g<<""<h<<""<i<<""<l<<""<zfy<while
(1)
{
cout<<"\n请依次输入要添加的信息:
\n";
cin>>a>>b>>c>>d>>e>>f>>g>>h>>i>>l;
carc2(a,b,c,d,e,f,g,h,i,l);
p=&c2;
boolflag=true;
for(it=vec_car.begin();it!
=vec_car.end();++it)
{
if(!
it->pare(a))
{
cout<<"\n此车辆的编号已存在,需重新输入!
"<flag=false;
break;
}
}
if(flag)
{
cout<<"\n是否保存此次修改?
(y/n)\n";
cin>>j;
if(j=="y")
{
p->add();
p->save();
}
}
if(j=="y")
break;
}
system("pause");
break;
}
case3:
{
carc3;
p=&c3;
intindex=0,l;
doublef,g,h,k;
stringb,c,d,e,j;
cout<<"\n编号"<<"车牌号"<<"制造商"<<"购买时间"<<"型号"<<"公里数"<<"油价"<<"耗油量"<<"养路费"<<"厢数"<<"总费用"<vector:
:
iteratorit;
for(it=vec_car.begin();it!
=vec_car.end();++it)
cout<a<<""<b<<""<c<<""<d<<""<e<<""<f<<""<g<<""<h<<""<i<<""<l<<""<zfy<cout<<"\n请填写要修改的车辆编号:
\n";
cin>>c3.a;
unsignedintiq=0;
for(boolflag=false;!
flag;)
{
for(it=vec_car.begin();it!
=vec_car.end();++it)
{
iq++;
if(!
it->pare(c3.a))
{
index=iq;
flag=true;
break;
}
if(it->pare(c3.a)&&iq==vec_car.size())
{
cout<<"您输入的编号不存在,请重新操作!
\n";iq=0;
system("pause");break;
}
}
if(flag)
{
cout<<"请依次输入要修改的信息:
\n";
cin>>b>>c>>d>>e>>f>>g>>h>>k>>l;
carc(c3.a,b,c,d,e,f,g,h,k,l);
p=&c;
cout<<"是否保存此次修改?
(y/n)\n";
cin>>j;
if(j=="y")
{
p->modify(index);
p->save();
system("pause");
}
else
{
system("pause");break;
}
}break;
}break;
}
case4:
{
carc4;
p=&c4;
intindex=0;
stringid;
cout<<"\n编号"<<"车牌号"<<"制造商"<<"购买时间"<<"型号"<<"公里数"<<"油价"<<"耗油量"<<"养路费"<<"厢数"<<"总费用"<vector:
:
iteratorit;
for(it=vec_car.begin();it!
=vec_car.end();++it)
cout<a<<""<b<<""<c<<""<d<<""<e<<""<f<<""<g<<""<h<<""<i<<""<l<<""<zfy<cout<<"\n请选择要删除的车辆编号:
\n";
cin>>id;
unsignedinti=0;
for(boolflag=false;!
flag;)
{
for(it=vec_car.begin();it!
=vec_car.end();++it)
{
i++;
if(!
it->pare(id))
{
flag=true;
index=i;
}
if(it->pare(id)&&i==vec_car.size())
{
cout<<"您输入的编号不存在,请重新操作!
\n";
system("pause");i=0;break;
}
}
if(flag)
{
cout<<"\n是否保存此次修改?
(y/n)\n";
cin>>out;
if(out=='y')
{
p->del(index);
p->save();
system("pause");
}
else
{
system("pause");break;
}
}break;
}break;
}
case5:
{
cout<<"\n所有车辆总数为:
"<:
count_num<<"其中:
"<cout<<"轿车总数为:
"<:
count_carnum<<"\n"<system("pause");
break;
}
case0:
quit=true;system("color8F");break;
default:
cout<<"\n请输入0~5之间的数字!
\n"<}
if(quit==true)
break;
}
system("cls");
return;
}
//卡车管理子菜单
voidtruck_manage()
{
system("title卡车管理子菜单");//设置窗口标题
system("color3F");//设置子菜单背景色:
湖蓝色,字体颜色:
亮白色
intchoice,i=0;
boolquit=false;
while
(1)
{
system("cls");
cout<<"**********卡车管理子菜单**********"<cout<<"1.查看车辆信息"<cout<<"2.添加车辆信息"<cout<<"3.修改车辆信息"<cout<<"4.删除车辆信息"<cout<<"5.统计车辆数"<cout<<"0.退出"<cout<<"**********************************"<cout<<"请输入所要操作的编号:
";
cin>>choice;
switch(choice)
{
case1:
{
truckc1;
p=&c1;
cout<<"\n编号"<<"车牌号"<<"制造商"<<"购买时间"<<"型号"<<"公里数"<<"油价"<<"耗油量"<<"养路费"<<"载重量"<<"总费用"<p->show();
system("pause");
break;
}
case2:
{
stringa,b,c,d,e,j;
doublef,g,h,i;intl;
cout<<"\n编号"<<"车牌号"<<"制造商"<<"购买时间"<<"型号"<<"公里数"<<"油价"<<"耗油量"<<"养路费"<<"载重量"<<"总费用"<vector:
:
iteratorit;
for(it=vec_truck.begin();it!
=vec_truck.end();++it)