1、 软件学院 课程设计报告 设计名称: C++课程设计 选题名称: 车辆信息管理系统 姓 名: 王海洋 学 号: 1515925530 专业班级 移动二班
2、系 (院): 软件学院 设计时间: 2016.6.13~2016.6.17 设计地点: 15#505 1.课程设计目的 (1)基本掌握面向对象程序设计的基本思路和方法; (2)达到熟练掌握C++语言的基本知识和技能; (3)能够利用所学的基本知识和技能,解决简单的程序设计问题 · 2.课程设计任务与要求: 任务 设计题目从任务书所列选题表中选取,每人1题。 要求: 基本要求: (1) 要求利用面向对象的方法以及C++的编程思想来完成系统的设计
3、 (2) 要求在设计的过程中,建立清晰的类层次; (3) 在系统中至少要定义三个类,每个类中要有各自的属性和方法; (4) 在系统的设计中,至少要用到面向对象的一种机制。 创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 3.课程设计说明书 一 需求分析 需要进行车辆信息的录入,然后进行查询、修改、删除、插入操作,最后要向文件中写入全部的车辆信息,完成这些基本功能后,进行一些菜单美化操作,加上一些特殊功能,例如密码登录等等。 二 系统设计 利用了C++完成了这个车辆信息管理系统。在设计中采用文
4、件的记忆功能可以对已输入的货物信息进行二次操作。系统首先是数据的录入并将数据储存在二进制文件中 基本功能: (1)添加车辆:主要完成车辆信息的添加,要求编号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加;当车辆信息库已满,则提示不能再添加新的数据。 (2)查询车辆: 可按照三种方式来查询物品,分别为: 按车辆制造公司查询:输入车辆制造公司,输出所查询的信息,若不存在该记录,则提示“该车辆制造公司不存在!”; 按编号查询:输入编号,输出所查询的信息,若不存在该记录,则提示“该编号不存在!”; 按类别查询:输入类别,输出所查询的信
5、息,若不存在记录,则提示“该类别没有车辆!”; (3)显示车辆信息库:输出当前车辆信息库中所有车辆信息,每条记录占据一行 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。 (5)删除车辆:主要完成车辆信息的删除。如果当前车辆信息库为空,则提示“车辆信息库为空!”,并返回操作;否则,输入要删除的编号,根据编号删除该车辆的记录,如果该编号不在车辆信息库库中,则提示“该编号不存在”。 (6)插入车辆 在已有车辆信息中插入一个新车辆信息,根据编号判断插入位置,若编号不存在,提示”该车辆不存在!”; (7)统计信息 输出当前车辆信息库中总物品数,以及按车辆类别,
6、统计出当前车辆信息库中各类别的物品数并显示。 有功能模块图和流程图 车辆信息管理系统 轿车管理 卡车管理 客车管理 添加车辆信息 插入车辆信息 查找车辆信息 修改车辆信息 文件中读取车辆信息 车辆信息写入文件 显示车辆信息 删除车辆信息 按车牌号查找 按公司查找 类关系图 cho=1 1. 查询函数流程图。 按车牌号查询 Y N cho=2 按公司查询 Y
7、
无车辆信息
输出车辆信息
Index<=count_***
重新选择
N
2.插入信息。
2. 删除函数。
3.修改信息。
三 详细设计
1、首先写入头文件
#include
8、2、抽象类 class Base { public: virtual void read()=0;//从文件中读取 virtual void save()=0;//写入文件中 virtual void add()=0;//添加新信息 virtual void modify(int)=0;//修改 virtual void del(int)=0;//删除 virtual void insert(int)=0;//插入 virtual void search()=0;//查询 }; 3.轿车类的实现。 clas
9、s Car:public Base { public: void read(); void add(); void modify(int); void del(int); void insert(int); void search(); void save(); char carID[20];//车牌号 char car_corporation[20];//公司 double car_year,car_month,car_day;//购买时间 double car_kilo;//总公里数
10、 double car_oil;//耗油量 double car_road;//养路费 char box[10];//车厢数 }; const int MAXcar=10; extern Car car[MAXcar]; extern int count_car;//车辆信息的最后一个,判断添加的位置 void Car::read()//读取文件 { ifstream carfile; carfile.open("轿车信息.txt"); carfile>>car[count_car].carID>>car[count_car].car_c
11、orporation>>car[count_car].car_year>>car[count_car].car_month; carfile>>car[count_car].car_day>>car[count_car].car_kilo>>car[count_car].car_oil>>car[count_car].car_road>>car[count_car].box; while(!carfile.eof()) { count_car++; carfile>>car[count_car].carID>>car[count_car].car_corp
12、oration>>car[count_car].car_year>>car[count_car].car_month; carfile>>car[count_car].car_day>>car[count_car].car_kilo>>car[count_car].car_oil>>car[count_car].car_road>>car[count_car].box; } carfile.close(); } void Car::save()//写入文件 { ofstream carfile; int i; carfile.open(
13、"轿车信息.txt");
for(i=0;i<=count_car-1;i++)
{
carfile< 14、e();
}
void Car::add()//添加新信息
{
strcpy(car[count_car].carID,carID);
strcpy(car[count_car].car_corporation,car_corporation);
strcpy(car[count_car].box,box);
car[count_car].car_year=car_year;
car[count_car].car_month=car_month;
car[count_car].car_day=car_day;
car[count_car]. 15、car_kilo=car_kilo;
car[count_car].car_oil=car_oil;
car[count_car].car_road=car_road;
count_car++;
}
void Car::modify(int index)//轿车修改函数
{
strcpy(car[index-1].carID,carID);
strcpy(car[index-1].car_corporation,car_corporation);
strcpy(car[count_car].box,box);
car[index-1].ca 16、r_year=car_year;
car[index-1].car_month=car_month;
car[index-1].car_day=car_day;
car[index-1].car_kilo=car_kilo;
car[index-1].car_oil=car_oil;
car[index-1].car_road=car_road;
}
void Car::del(int index)//删除函数
{//删除车辆信息之后均前移
int i;
for(i=index;i<=count_car-1;i++)
{
strc 17、py(car[i-1].carID,car[i].carID);
strcpy(car[i-1].car_corporation,car[i].car_corporation);
strcpy(car[i-1].box,car[i].box);
car[i-1].car_year=car[i].car_year;
car[i-1].car_month=car[i].car_month;
car[i-1].car_day=car[i].car_day;
car[i-1].car_kilo=car[i].car_kilo;
18、 car[i-1].car_oil=car[i].car_oil;
car[i-1].car_road=car[i].car_road;
}
count_car--;
}
void Car::insert(int index)
{
int i;
for(i=count_car-1;i>=index;i--)
{
strcpy(car[i+1].carID,car[i].carID);
strcpy(car[i+1].car_corporation,car[i].car_corporation);
19、 strcpy(car[i+1].box,car[i].box);
car[i+1].car_year=car[i].car_year;
car[i+1].car_month=car[i].car_month;
car[i+1].car_day=car[i].car_day;
car[i+1].car_kilo=car[i].car_kilo;
car[i+1].car_oil=car[i].car_oil;
car[i+1].car_road=car[i].car_road;
}
strcpy(c 20、ar[index].carID,carID);
strcpy(car[index].car_corporation,car_corporation);
strcpy(car[index].box,box);
car[index].car_year=car_year;
car[index].car_month=car_month;
car[index].car_day=car_day;
car[index].car_kilo=car_kilo;
car[index].car_oil=car_oil;
21、car[index].car_road=car_road;
count_car++;
}
void Car::search()
{
int i,m=0;
int cho;
char corporation[20],ID[20];
cout<<"请选择查询方式:"< 22、l;
cin>>corporation;
break;
case 2:
cout<<"请输入车牌号 :"< 23、 {
cout<<"编号 车牌号 公司 购买日期 公里数 耗油量 养路费 厢数 总费用"< 24、].car_road<<" "< 25、void search();
void save();
char truckID[20];//车牌号
char truck_corporation[20];//公司
double truck_year,truck_month,truck_day;//购买时间
double truck_kilo;//总公里数
double truck_oil;//耗油量
double truck_road;//养路费
double load;//载重量
};
const int MAXtruck=10;
extern Truck truck[MAX 26、truck];
extern int count_truck;
void Truck::read()
{
ifstream truckfile;
truckfile.open("卡车信息.txt");
truckfile>>truck[count_truck].truckID>>truck[count_truck].truck_corporation;
truckfile>>truck[count_truck].truck_year>>truck[count_truck].truck_month;
truckfile>>truck[count_truck 27、].truck_day>>truck[count_truck].truck_kilo;
truckfile>>truck[count_truck].truck_oil>>truck[count_truck].truck_road>>truck[count_truck].load;
while(!truckfile.eof())
{
count_truck++;
truckfile>>truck[count_truck].truckID>>truck[count_truck].truck_corporation;
truckfile>>truck[ 28、count_truck].truck_year>>truck[count_truck].truck_month;
truckfile>>truck[count_truck].truck_day>>truck[count_truck].truck_kilo;
truckfile>>truck[count_truck].truck_oil>>truck[count_truck].truck_road>>truck[count_truck].load;
}
truckfile.close();
}
void Truck::save()
{
ofstrea 29、m truckfile;
int i;
truckfile.open("卡车信息.txt");
for(i=0;i<=count_truck-1;i++)
{
truckfile< 30、<" ";
truckfile< 31、truck[count_truck].truck_year=truck_year;
truck[count_truck].truck_month=truck_month;
truck[count_truck].truck_day=truck_day;
truck[count_truck].truck_kilo=truck_kilo;
truck[count_truck].truck_oil=truck_oil;
truck[count_truck].truck_road=truck_road;
count_truck++;
}
void Truck: 32、modify(int index)
{
strcpy(truck[index-1].truckID,truckID);
strcpy(truck[index-1].truck_corporation,truck_corporation);
truck[index-1].load=load;
truck[index-1].truck_year=truck_year;
truck[index-1].truck_month=truck_month;
truck[index-1].truck_day=truck_day;
truck[index-1].tr 33、uck_kilo=truck_kilo;
truck[index-1].truck_oil=truck_oil;
truck[index-1].truck_road=truck_road;
}
void Truck::del(int index)
{
int i;
for(i=index;i<=count_truck-1;i++)
{
strcpy(truck[i-1].truckID,truck[i].truckID);
strcpy(truck[i-1].truck_corporation,truck[i].truck_corpor 34、ation);
truck[i-1].load=truck[i].load;
truck[i-1].truck_year=truck[i].truck_year;
truck[i-1].truck_month=truck[i].truck_month;
truck[i-1].truck_day=truck[i].truck_day;
truck[i-1].truck_kilo=truck[i].truck_kilo;
truck[i-1].truck_oil=truck[i].truck_oil;
truck[ 35、i-1].truck_road=truck[i].truck_road;
}
count_truck--;
}
void Truck::insert(int index)
{
int i;
for(i=count_truck-1;i>=index;i--)
{
strcpy(truck[i+1].truckID,truck[i].truckID);
strcpy(truck[i+1].truck_corporation,truck[i].truck_corporation);
truck[i+1].truck_y 36、ear=truck[i].truck_year;
truck[i+1].truck_month=truck[i].truck_month;
truck[i+1].truck_day=truck[i].truck_day;
truck[i+1].truck_kilo=truck[i].truck_kilo;
truck[i+1].truck_oil=truck[i].truck_oil;
truck[i+1].truck_road=truck[i].truck_road;
truck[i+1].load=truck[i].l 37、oad;
}
strcpy(truck[index].truckID,truckID);
strcpy(truck[index].truck_corporation,truck_corporation);
truck[index].truck_year=truck_year;
truck[index].truck_month=truck_month;
truck[index].truck_day=truck_day;
truck[index].truck_kilo=truck_kilo;
truck[ 38、index].truck_oil=truck_oil;
truck[index].truck_road=truck_road;
truck[index].load=load;
count_truck++;
}
void Truck::search()
{
int i,m=0;
int cho;
char corporation[20];
char ID[20];
cout<<"请选择查询方式:"< 39、 40、strcmp(truck[i].truckID,ID)==0 || strcmp(truck[i].truck_corporation,corporation)==0)
{
cout<<"编号 车牌号 公司 购买日期 公里数 耗油量 养路费 载重量 总费用"< 41、].truck_month<<"/"< 42、ass Bus:public Base
{
public:
void read();
void add();
void modify(int);
void del(int);
void insert(int);
void search();
void save();
char busID[20];//车牌号
char bus_corporation[20];//公司
double bus_year,bus_month,bus_day;//购买时间
double bus_kilo;//总公里数 43、
double bus_oil;//耗油量
double bus_road;//养路费
double busload;//载客量
};
const int MAXbus=10;
extern Bus bus[MAXbus];
extern int count_bus;
void Bus::read()
{
ifstream busfile;
busfile.open("客车信息.txt");
busfile>>bus[count_bus].busID>>bus[count_bus].bus_corporation;
busfile>> 44、bus[count_bus].bus_year>>bus[count_bus].bus_month;
busfile>>bus[count_bus].bus_day>>bus[count_bus].bus_kilo;
busfile>>bus[count_bus].bus_oil>>bus[count_bus].bus_road>>bus[count_bus].busload;
while(!busfile.eof())
{
count_bus++;
busfile>>bus[count_bus].busID>>bus[count_bus].bus_ 45、corporation;
busfile>>bus[count_bus].bus_year>>bus[count_bus].bus_month;
busfile>>bus[count_bus].bus_day>>bus[count_bus].bus_kilo;
busfile>>bus[count_bus].bus_oil>>bus[count_bus].bus_road>>bus[count_bus].busload;
}
busfile.close();
}
void Bus::save()
{
ofstream busfile;
46、 int i;
busfile.open("客车信息.txt");
for(i=0;i<=count_bus-1;i++)
{
busfile< 47、us_road<<" "< 48、h;
bus[count_bus].bus_day=bus_day;
bus[count_bus].bus_kilo=bus_kilo;
bus[count_bus].bus_oil=bus_oil;
bus[count_bus].bus_road=bus_road;
count_bus++;
}
void Bus::modify(int index)
{
strcpy(bus[index-1].busID,busID);
strcpy(bus[index-1].bus_corporation,bus_corporation);
49、bus[index-1].busload=busload;
bus[index-1].bus_year=bus_year;
bus[index-1].bus_month=bus_month;
bus[index-1].bus_day=bus_day;
bus[index-1].bus_kilo=bus_kilo;
bus[index-1].bus_oil=bus_oil;
bus[index-1].bus_road=bus_road;
}
void Bus::del(int index)
{
int i;
for(i=index;i< 50、count_bus-1;i++)
{
strcpy(bus[i-1].busID,bus[i].busID);
strcpy(bus[i-1].bus_corporation,bus[i].bus_corporation);
bus[i-1].busload=bus[i].busload;
bus[i-1].bus_year=bus[i].bus_year;
bus[i-1].bus_month=bus[i].bus_month;
bus[i-1].bus_day=bus[i].bus_day;
bus[i-






