1、C++面向对象程序设计 课 程 设 计 报 告 课程名称 C++面向对象程序设计 课题名称 车辆管理系统 专 业 班 级 学 号 姓 名 指导老师 年 月 日 (一)、课程设计题目: 题目4 车辆管理系统 (二)、目标和要求: 1、目标:
2、 (1)要求学生达成熟练掌握C++语言基础知识和技能; (2)基础掌握面向对象程序设计基础思绪和方法; (3)能够利用所学基础知识和技能,处理简单面向对象程序设计问题。 2、基础要求: (1)要求利用面向对象方法和C++编程思想来完成系统设计; (2)要求在设计过程中,建立清楚类层次; (3)在系统中最少要定义四个类,每个类中要有各自属性和方法; (4)在系统设计中,最少要用到面向对象一个机制。 3、创新要求: 在基础要求达成后,可进行创新设计,如依据查找结果进行修改功效。 (三)、设计方法和基础原理: 功效要求: 1) 添加车辆 程序关键完成
3、车辆信息添加,要求编号唯一。假如添加了反复编号物品时,则提醒用户数据添加反复并取消添加;假如车辆信息库已满,则提醒不能再添加新车辆信息。 2) 查询车辆 可根据三种方法进行物品查询。 ·按车辆制造企业查询: ·按编号查询: ·按类别查询: 假如未找到,给出对应提醒信息,假如找到,则显示对应统计信息。 3) 显示车辆信息库 可显示目前车辆信息库中全部车辆信息。 4) 修改车辆 可依据查询结果对对应统计进行修改,修改时注意编号唯一性。 5)删除车辆 对已添加车辆信息进行删除。假如目前车辆信息库为空,则提醒“车辆信息库为空!”并返回操作;不然输入要删除编号,依据编号删除该车辆
4、信息,假如没有找到该车辆信息,则提醒“该编号不存在”。 6)统计功效 输出目前车辆信息库中总车辆数,和按车辆类别,统计出目前车辆信息库中各类别车辆数并显示。 7) 保留车辆 将目前系统中车辆信息存入文件中。 8) 读取车辆 将保留在文件中车辆信息读入到目前系统中,以供用户使用。 在完成以上基础功效基础上,可自行进行扩展或完善。 3、问题处理方案: 依据系统功效要求,能够将问题处理分为以下步骤: 1)应用系统分析,建立该系统功效模块框图和界面组织和设计; 2)分析系统中各个实体和它们之间关系; 3)依据问题描述,设计系统类层次; 4)完成类层次中各个类描述;
5、 5)完成类中各个组员函数定义; 6)完成系统应用模块; 7)功效调试; 8)完成系统总结汇报。 目 录 1. 系统需求分析 5 2. 总体设计 6 3. 具体设计及实现 8 4. 系统调试 错误!未定义书签。 5. 结论 错误!未定义书签。 6. 心得体会 错误!未定义书签。 7. 参考书目 错误!未定义书签。 1. 系统需求分析 1.1系统设计目标和意义: 伴随社会进步和大家生活水平提升
6、车辆作为交通工具,已经成为大家日常生活中不可缺乏一部分.大大增加了交通压力,同时,也对车辆里管理有了一个更高要求.所以,需要一个车辆管理系统来对多种车辆多种信息进行统一管理. 1.2 系统功效需求: 本系统有三个类:Car类、Truck类、Bus类,存放小轿车信息、卡车信息、大客车信息。 1添加车辆 程序关键完成车辆信息添加,要求编号唯一。假如添加了反复编号物品时,则提醒用户数据添加反复并取消添加;假如车辆信息库已满,则提醒不能再添加新车辆信息。 2查询车辆 可根据三种方法进行物品查询。 ·按车辆制造企业查询: ·按编号查询: ·按类别查询: 假如未找到,给出对应提醒信
7、息,假如找到,则显示对应统计信息。 3显示车辆信息库 可显示目前车辆信息库中全部车辆信息。 4修改车辆 可依据查询结果对对应统计进行修改,修改时注意编号唯一性。 5删除车辆 对已添加车辆信息进行删除。假如目前车辆信息库为空,则提醒“车辆信息库为空!”并返回操作;不然输入要删除编号,依据编号删除该车辆信息,假如没有找到该车辆信息,则提醒“该编号不存在”。 6统计功效 输出目前车辆信息库中总车辆数,和按车辆类别,统计出目前车辆信息库中各类别车辆数并显示。 7保留车辆 将目前系统中车辆信息存入文件中。 8读取车辆 将保留在文件中车辆信息读入到目前系统中,以供用户使用。
8、 2. 总体设计 2.1 系统功效分析: 系统经过调用函数来实现信息录入、信息修改、信息删除、信息查询和数据保留文件等功效。add()函数用于录入信息;modify()函数用来修改信息;del()函数用来修改信息;search()函数用来查询车辆信息;read()函数用于将文件中数据读取到内存中;save()函数用于将内存中信息存入文件内;主函数main()用于调用这些函数。 2.2系统功效模块划分和设计: 系统定义了Car类、Truck类、Bus类这三个类,定义了add()、modify()、del()、read()、save()、search()等函数来实现系统所需功效。 2.
9、3 系统功效模块图: 车辆信息管理系统 小轿车信息管理 卡车信息管理 大客车信息管理 小轿车信息读取 小轿车信息添加 小轿车信息修改 小轿车信息删除 小轿车信息保留 卡车信息读取 卡车信息添加 卡车信息修改 卡车信息删除 卡车信息保留 大客车信息读取 大客车信息添加 大客车信息修改 大轿车信息删除 大客车信息保留 大客车信息查询 卡车信息查询 小轿车信息查询 2.4 类设计 (1)Base类(抽象类)设计: Base virtual void read()=0; virtual void add()=0; virtual void m
10、odify(int)=0; virtual void del(int)=0; virtual void save()=0; virtual void search()=0; 图 3.1 Base类 (2)小轿车类设计: Car double carFee; char carID[20]; char carName[20]; void read(); void add(); void modify(int); void del(int); void save(); void search();
11、 图 3.2小轿车类 (3)卡车类设计: Truck char truckID[20]; char truckName[20]; int truckNum; void read(); void add(); void modify(int); void del(int); void save(); void search(); 图 3.3卡车类 (4)大客车类设计: Bus char busN
12、ame[20]; char busID[20]; int busNum; void read(); void add(); void modify(int); void del(int); void save(); void search(); 图 3.4 大卡车类 3. 具体设计及实现 3.1 Base类(抽象类)实现 class Base { public: virtual void read()=0; virtual void add()=0;
13、virtual void modify(int)=0; virtual void del(int)=0; virtual void save()=0; virtual void search()=0; }; 3.2 小轿车类实现 Car.h class Car:public Base { public: double carFee; char carID[20]; char carName[20]; void read(); void add(); void modify(int); void del(int); voi
14、d save(); void search(); }; Car.cpp void Car::read() { ifstream carfile; carfile.open ("轿车信息.txt"); carfile>>car[count_car].carID>>car[count_car].carName>>car[count_car].carFee; while(!carfile.eof()) { count_car++; carfile>>car[count_car].carID>>car[count_car].
15、carName>>car[count_car].carFee; } carfile.close(); } void Car::add() { //存入对象数组中 strcpy(car[count_car].carID,carID); strcpy(car[count_car].carName,carName); car[count_car].carFee=carFee; count_car++; } void Car::modify(int index) { strcpy(car[index-1].carI
16、D,carID); strcpy(car[index-1].carName,carName); car[index-1].carFee=carFee; } void Car::del(int index) { //前移其后统计 for(int i=index;i<=count_car-1;i++) { strcpy(car[i-1].carID,car[i].carID); strcpy(car[i-1].carName,car[i].carName); car[i-1].carFee=car[i].carFee; } cou
17、nt_car--;
}
void Car::search()
{
for(int i=0;i 18、out<<"无此轿车数据!"< 19、ublic:
char truckID[20];
char truckName[20];
int truckNum;
void read();
void add();
void modify(int);
void del(int);
void save();
void search();
};
Truck.cpp
void Truck::read()
{
ifstream truckfile;
truckfile.open("卡车信息.txt");
truckfile>>truck[count_truck 20、].truckID>>truck[count_truck].truckName>>truck[count_truck].truckNum;
while(!truckfile.eof())
{
count_truck++;
truckfile>>truck[count_truck].truckID>>truck[count_truck].truckName>>truck[count_truck].truckNum;
}
truckfile.close();
}
void Truck::add()
{
//存入对象数组中
strcp 21、y(truck[count_truck].truckName,truckName);
strcpy(truck[count_truck].truckID,truckID);
truck[count_truck].truckNum=truckNum;
count_truck++;
}
void Truck::modify(int index)
{
strcpy(truck[index-1].truckID,truckID);
strcpy(truck[index-1].truckName,truckName);
truck[index-1] 22、truckNum=truckNum;
}
void Truck::del(int index)
{
//前移其后统计
for(int i=index;i<=count_truck-1;i++)
{
strcpy(truck[i-1].truckID,truckID);
strcpy(truck[i-1].truckName,truckName);
truck[i-1].truckNum=truckNum;
}
count_truck--;
}
void Truck::search()
{
for(int i=0;i 23、 24、m truckfile;
truckfile.open("卡车信息.txt");
for(int i=0;i<=count_truck-1;i++)
truckfile< 25、
void read();
void add();
void modify(int);
void del(int);
void save();
void search();
};
Bus.cpp
void Bus::read()
{
fstream busfile("客车信息.txt",ios::in|ios::out);
busfile>>bus[count_bus].busID>>bus[count_bus].busName>>bus[count_bus].busNum;
while(! 26、busfile.eof())
{
count_bus++;
busfile>>bus[count_bus].busID>>bus[count_bus].busName>>bus[count_bus].busNum;
}
busfile.close();
}
void Bus::add()
{
//存入对象数组中
strcpy(bus[count_bus].busID,busID);
strcpy(bus[count_bus].busName,busName);
bus[count_bus].busNum=busNum;
co 27、unt_bus++;
}
void Bus::modify(int index)
{
strcpy(bus[index-1].busID,busID);
strcpy(bus[index-1].busName,busName);
bus[index-1].busNum=busNum;
}
void Bus::del(int index)
{
//前移其后统计
for(int i=index;i<=count_bus-1;i++)
{
strcpy(bus[i-1].busID,bus[i].busID);
strcpy 28、bus[i-1].busName,bus[i].busName);
bus[i-1].busNum=bus[i].busNum;
}
count_bus--;
}
void Bus::search()
{
for(int i=0;i 29、busNum< 30、
#include 31、hoice,i=0;
bool quit=false;
while(1)
{
system("cls");
cout<<"**********轿车管理子菜单**********"< 32、 5.显示全部轿车信息"< 33、车品牌、油花费用:"< 34、ase 2:
{
Car car2;
p=&car2;
int index;
for(int i=0;i 35、"< 36、 Car car3;
p=&car3;
int index;
for(int i=0;i 37、大小写)是(y/Y)否(n/N)"< 38、"pause");
break;
}
case 5:
{
cout<<"轿车车牌号 "<<"轿车品牌 "<<"轿车油花费用"< 39、m("pause");
break;
}
case 0:quit=true;break;
default:cout<<"请输入0~5之间数字!"< 40、cls");
cout<<"***********卡车管理子菜单**********"< 41、"< 42、不区分大小写)是(y/Y)否(n/N)"< 43、<"."< 44、
if(c=='y'||c=='Y')
{
p->modify(index);
p->save();
}
break;
}
case 3:
{
Truck truck3;
p=&truck3;
int index;
for(int i=0;i 45、truckName<<" "< 46、uck4;
cout<<"请输入卡车车牌号:"< 47、[i].truckNum< 48、manage()
{
int choice;
bool quit=false;
while(1)
{
system("cls");
cout<<"***********客车管理子菜单**********"< 49、<<" 5.显示全部客车信息"< 50、 cin>>bus1.busID>>bus1.busName>>bus1.busNum;
cout<<"是否保留客车信息?(不区分大小写)是(y/Y)否(n/N)"<






