C++面向对象程序设计
课 程 设 计 报 告
课程名称 C++面向对象程序设计 课题名称 车辆管理系统 专 业 班 级 学 号 姓 名 指导教师
年 月 日
(一)、课程设计题目:
题目4 车辆管理系统
(二)、目的与要求:
1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次;
(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法; (4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
(三)、设计方法和基本原理:
功能要求: 1)添加车辆
程序主要完成车辆信息的添加,要求编号唯一。如果添加了重复编号的物品时,则提示用户数据添加重复并取消添加;如果车辆信息库已满,则提示不能再添加新的车辆信息。
2)查询车辆
可按照三种方式进行物品的查询。 ·按车辆制造公司查询: ·按编号查询: ·按类别查询:
如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 3)显示车辆信息库
可显示当前车辆信息库中所有的车辆信息。 4)修改车辆
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。 5)删除车辆
对已添加的车辆信息进行删除。如果当前车辆信息库为空,则提示“车辆信息库为空!”并返回操作;否则输入要删除的编号,根据编号删除该车辆信息,如果没有找到该车辆信息,则提示“该编号不存在”。
6)统计功能
输出当前车辆信息库中总车辆数,以及按车辆类别,统计出当前车辆信息库中各类别的车辆数并显示。
7)保存车辆
将当前系统中车辆信息存入文件中。 8)读取车辆
将保存在文件中的车辆信息读入到当前系统中,以供用户使用。
在完成以上基本功能的基础上,可自行进行扩展或完善。 3、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计; 2)分析系统中的各个实体以及它们之间的关系; 3)根据问题描述,设计系统的类层次; 4)完成类层次中各个类的描述; 5)完成类中各个成员函数的定义; 6)完成系统的应用模块; 7)功能调试;
8)完成系统总结报告。
目 录
1. 系统需求分析 错误!未指定书签。 2. 总体设计 错误!未指定书签。
3. 详细设计及实现 错误!未指定书签。 4. 系统调试 错误!未指定书签。 5. 结论 错误!未指定书签。 6. 心得体会 错误!未指定书签。 7. 参考书目 错误!未指定书签。 系统需求分析
1.1系统设计的目的与意义:
随着社会的进步和人们生活水平的提高,车辆作为交通工具,已经成为人们日常生活中不可
缺少的一部分.大大增加了交通压力,同时,也对车辆里的管理有了一个更高的要求.因此,需要一个车辆管理系统来对各种车辆的各种信息进行统一管理.
1.2 系统功能需求:
本系统有三个类:Car类、Truck类、Bus类,存储小轿车信息、卡车信息、大客车信息。
1添加车辆
程序主要完成车辆信息的添加,要求编号唯一。如果添加了重复编号的物品时,则提示用户数据添加重复并取消添加;如果车辆信息库已满,则提示不能再添加新的车辆信息。
2查询车辆
可按照三种方式进行物品的查询。 ·按车辆制造公司查询: ·按编号查询: ·按类别查询:
如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 3显示车辆信息库
可显示当前车辆信息库中所有的车辆信息。 4修改车辆
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。 5删除车辆
对已添加的车辆信息进行删除。如果当前车辆信息库为空,则提示“车辆信息库为空!”并返回操作;否则输入要删除的编号,根据编号删除该车辆信息,如果没有找到该车辆信息,则提示“该编号不存在”。
6统计功能
输出当前车辆信息库中总车辆数,以及按车辆类别,统计出当前车辆信息库中各类别的车辆数并显示。
7保存车辆
将当前系统中车辆信息存入文件中。 8读取车辆
将保存在文件中的车辆信息读入到当前系统中,以供用户使用。 总体设计
2.1 系统功能分析:
系统通过调用函数来实现信息录入、信息修改、信息删除、信息查询以及数据保存文件等功能。add()函数用于录入信息;modify()函数用来修改信息;del()函数用来修改信息;search()函数用来查询车辆信息;read()函数用于将文件中的数据读取到内存中;save()函数用于将内存中的信息存入文件内;主函数main()用于调用这些函数。
2.2系统功能模块划分与设计:
系统定义了Car类、Truck类、Bus类这三个类,定义了add()、modify()、del()、read()、save()、search()等函数来实现系统所需功能。
2.3 系统功能模块图:
车辆信息管理系统 小卡轿车车信信息息管管理 小小小小小小卡卡卡卡卡卡轿轿轿轿轿轿车车车车车车车车车车车车信信信信信信信信信信信信息息息息息息息息息息息息读添修删保查读添修删保查取 加 改 除 存 询 取 加 改 除 存 询
2.4 类的设计
(1)Base类(抽象类)的设计:
Basevirtual void read()=0;图 3.1 Base 类 (2)小轿车类的设计virtual void add()=0;: virtual void modify(int)=0; virtual void del(int)=0;virtual void save()=0;double carFee;图 3.2Car小轿车类 (3)卡车类的设计: char carID[20];virtual void search()=0; char carName[20]; void read();Truck char truckID[20];void add(); 图 3.3卡车类 (4)大客车类的设计:char truckName[20]; void modify(int); int truckNum;void del(int); void read();void save();详细设计及实现 void add(); char busName[20];void search();图 3.4 大卡车类 Bus void modify(int); char busID[20]; 3.1 Base类(抽象类)的实现void del(int);int busNum; void save();void read(); void search();void add(); void modify(int); void del(int); 大客车信息管大大大大大大客客客轿客客车车车车车车信信信信信信息息息息息息读添修删查保取 加 改 除 询 存 class Base {
public:
virtual void read()=0; virtual void add()=0;
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); void 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].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].carID,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; }
count_car--; }
void Car::search() {
for(int i=0;i if(strcmp(car[i].carID,carID)==0||strcmp(car[i].carName,carName)==0) { cout<<\轿车车牌号 \轿车品牌 \轿车油耗费用\ cout< cout<<\无此轿车数据!\ } } void Car::save() { ofstream carfile; carfile.open(\轿车信息.txt\ for(int i=0;i<=count_car-1;i++) carfile< 3.3 卡车类的实现 Truck.h class Truck:public Base { public: 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].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() { //存入对象数组中 strcpy(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].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 if(strcmp(truck[i].truckID,truckID)==0) { cout<<\卡车车牌号 \卡车品牌\卡车载重数(吨)\ cout< cout<<\无此卡车数据!\ } } void Truck::save() { ofstream truckfile; truckfile.open(\卡车信息.txt\ for(int i=0;i<=count_truck-1;i++) truckfile< 3.4大客车类的实现 Bus.h class Bus:public Base { public: char busName[20]; char busID[20]; int busNum; void read(); void add(); void modify(int); void del(int); void save(); void search(); }; Bus.cpp void Bus::read() { fstream busfile(\客车信息.txt\ busfile>>bus[count_bus].busID>>bus[count_bus].busName>>bus[count_bus].busNum; while(!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; count_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(bus[i-1].busName,bus[i].busName); bus[i-1].busNum=bus[i].busNum; } count_bus--; } void Bus::search() { for(int i=0;i if(strcmp(bus[i].busID,busID)==0) { cout<<\客车车牌号 \客车品牌 \客车最大载客数(人)\ cout< cout<<\无此客车数据!\ } } void Bus::save() { ofstream busfile; busfile.open(\客车信息.txt\ for(int i=0;i<=count_bus-1;i++) busfile< 3.5 main.cpp #include Truck truck[MAXtruck]; Bus bus[MAXbus]; int count_car=0; int count_truck=0; int count_bus=0; Base *p=NULL; char c; //轿车管理子菜单 void car_manage() { int choice,i=0; bool quit=false; while(1) { system(\ cout<<\轿车管理子菜单**********\ cout<<\添加轿车信息\ cout<<\修改轿车信息\ cout<<\删除轿车信息\ cout<<\查询轿车信息\ cout<<\显示所有轿车信息\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: { Car car1; p=&car1; cout<<\请输入轿车车牌号、轿车品牌、油耗费用:\ cin>>car1.carID>>car1.carName>>car1.carFee; cout<<\是否保存轿车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->add(); p->save(); } break; } case 2: { Car car2; p=&car2; int index; for(int i=0;i cout< cout<<\请选择轿车序号:\ cin>>index; cout<<\请输入要修改的轿车车牌号、轿车品牌、油耗费用:\ cin>>car2.carID>>car2.carName>>car2.carFee; cout<<\是否保存轿车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->modify(index); p->save(); } break; } case 3: { Car car3; p=&car3; int index; for(int i=0;i cout< cout<<\请选择要修改的轿车车牌号、轿车品牌、油耗费用的序列号:\ cin>>index; cout<<\是否保存轿车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->del(index); p->save(); } break; } case 4: { Car car4; p=&car4; cout<<\请输入轿车的车名:\ cin>>car4.carName; car4.search(); system(\ break; } case 5: { cout<<\轿车车牌号 \轿车品牌 \轿车油耗费用\ for(int i=0;i cout< system(\ if(count_car==0) cout< case 0:quit=true;break; default:cout<<\请输入0~5之间的数字!\ } if(quit==true) break; } system(\ return; } //卡车管理子菜单 void truck_manage() { int choice; bool quit=false; while(1) { system(\ cout<<\卡车管理子菜单**********\ cout<<\添加卡车信息\ cout<<\修改卡车信息\ cout<<\删除卡车信息\ cout<<\查询卡车信息\ cout<<\显示所有卡车信息\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: { Truck truck1; p=&truck1; cout<<\请输入卡车的车牌号、卡车品牌、载重数(吨):\ cin>>truck1.truckID>>truck1.truckName>>truck1.truckNum; cout<<\是否保存卡车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->add(); p->save(); } break; } case 2: { Truck truck2; p=&truck2; int index; for(int i=0;i cout< cout<<\请选择要修改的卡车信息的序列号:\ cin>>index; cout<<\请输入要修改卡车的车牌号、卡车品牌、载重数(吨):\ cin>>truck2.truckID>>truck2.truckName>>truck2.truckNum; cout<<\是否保存卡车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->modify(index); p->save(); } break; } case 3: { Truck truck3; p=&truck3; int index; for(int i=0;i cout< cout<<\请选择要删除的卡车信息序列号:\ cin>>index; cout<<\是否保存卡车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c='n'||c=='N') { p->del(index); p->save(); } break; } case 4: { Truck truck4; cout<<\请输入卡车的车牌号:\ cin>>truck4.truckID; truck4.search(); system(\ break; } case 5: { cout<<\卡车车牌号 \卡车品牌 \卡车载重数(吨)\ for(int i=0;i cout< if(count_truck==0) cout< case 0:quit=true;break; default:cout<<\请输入0~5之间的数字!\ } if(quit==true) break; } system(\ return; } //客车管理子菜单 void bus_manage() { int choice; bool quit=false; while(1) { system(\ cout<<\客车管理子菜单**********\ cout<<\添加客车信息\ cout<<\修改客车信息\ cout<<\删除客车信息\ cout<<\查询客车信息\ cout<<\显示所有客车信息\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: { Bus bus1; p=&bus1; cout<<\请输入要添加的客车的车牌号、客车品牌、最大载客数(人):\ cin>>bus1.busID>>bus1.busName>>bus1.busNum; cout<<\是否保存客车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->add(); p->save(); } break; } case 2: { Bus bus2; p=&bus2; int index; for(int i=0;i cout< cout<<\请选择要修改的客车信息序列号:\ cin>>index; cout<<\请输入要修改的客车车牌号、客车品牌、最大载客数(人):\ cin>>bus2.busID>>bus2.busName>>bus2.busNum; cout<<\是否保存客车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->modify(index); p->save(); } break; } case 3: { Bus bus3; p=&bus3; int index; for(int i=0;i cout< cout<<\请选择要删除的客车信息序列号:\ cin>>index; cout<<\是否保存客车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->del(index); p->save(); } break; } case 4: { Bus bus4; cout<<\请输入客车的车牌号:\ cin>>bus4.busID; bus4.search(); system(\ break; } case 5: { cout<<\客车车牌号 \客车品牌 \客车最大载客数(人)\ for(int i=0;i cout< system(\ if(count_bus==0) cout< case 0:quit=true;break; default:cout<<\请输入0~5之间的数字!\ } if(quit==true) break; } system(\ return; } //主函数内容 void main() { //将各个文件中的数据依次读入内存 Car (car); (car).read(); Truck (truck); (truck).read(); Bus (bus); (bus).read(); int choice=1; //显示主菜单 while(1) { cout<<\主菜单**************\ cout<<\轿车信息管理\ cout<<\卡车信息管理\ cout<<\客车信息管理\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: car_manage();break; case 2: truck_manage();break; case 3: bus_manage();break; case 0: cout<<\谢谢您的使用!\ default:cout<<\请输入0~3之间的数字!\ } system(\ } } //小轿车管理子菜单 void car_manage() { int choice,i=0; bool quit=false; while(1) { system(\ cout<<\轿车管理子菜单**********\ cout<<\添加轿车信息\ cout<<\修改轿车信息\ cout<<\删除轿车信息\ cout<<\查询轿车信息\ cout<<\显示所有轿车信息\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: { Car car1; p=&car1; cout<<\请输入轿车车牌号、轿车品牌、油耗费用:\ cin>>car1.carID>>car1.carName>>car1.carFee; cout<<\是否保存轿车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->add(); p->save(); } break; } case 2: { Car car2; p=&car2; int index; for(int i=0;i cout< cout<<\请选择轿车序号:\ cin>>index; cout<<\请输入要修改的轿车车牌号、轿车品牌、油耗费用:\ cin>>car2.carID>>car2.carName>>car2.carFee; cout<<\是否保存轿车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->modify(index); p->save(); } break; } case 3: { Car car3; p=&car3; int index; for(int i=0;i cout< cout<<\请选择要修改的轿车车牌号、轿车品牌、油耗费用的序列号:\ cin>>index; cout<<\是否保存轿车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->del(index); p->save(); } break; } case 4: { Car car4; p=&car4; cout<<\请输入轿车的车名:\ cin>>car4.carName; car4.search(); system(\ break; } case 5: { cout<<\轿车车牌号 \轿车品牌 \轿车油耗费用\ for(int i=0;i cout< system(\ if(count_car==0) cout< case 0:quit=true;break; default:cout<<\请输入0~5之间的数字!\ } if(quit==true) break; } system(\ return; } //卡车管理子菜单 void truck_manage() { int choice; bool quit=false; while(1) { system(\ cout<<\卡车管理子菜单**********\ cout<<\添加卡车信息\ cout<<\修改卡车信息\ cout<<\删除卡车信息\ cout<<\查询卡车信息\ cout<<\显示所有卡车信息\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: { Truck truck1; p=&truck1; cout<<\请输入卡车的车牌号、卡车品牌、载重数(吨):\ cin>>truck1.truckID>>truck1.truckName>>truck1.truckNum; cout<<\是否保存卡车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->add(); p->save(); } break; } case 2: { Truck truck2; p=&truck2; int index; for(int i=0;i cout<>index; cout<<\请输入要修改卡车的车牌号、卡车品牌、载重数(吨):\ cin>>truck2.truckID>>truck2.truckName>>truck2.truckNum; cout<<\是否保存卡车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->modify(index); p->save(); } break; } case 3: { Truck truck3; p=&truck3; int index; for(int i=0;i cout< cout<<\请选择要删除的卡车信息序列号:\ cin>>index; cout<<\是否保存卡车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c='n'||c=='N') { p->del(index); p->save(); } break; } case 4: { Truck truck4; cout<<\请输入卡车的车牌号:\ cin>>truck4.truckID; truck4.search(); system(\ break; } case 5: { cout<<\卡车车牌号 \卡车品牌 \卡车载重数(吨)\ for(int i=0;i cout< cout< case 0:quit=true;break; default:cout<<\请输入0~5之间的数字!\ } if(quit==true) break; } system(\ return; } //大客车管理子菜单 void bus_manage() { int choice; bool quit=false; while(1) { system(\ cout<<\客车管理子菜单**********\ cout<<\添加客车信息\ cout<<\修改客车信息\ cout<<\删除客车信息\ cout<<\查询客车信息\ cout<<\显示所有客车信息\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: { Bus bus1; p=&bus1; cout<<\请输入要添加的客车的车牌号、客车品牌、最大载客数(人):\ cin>>bus1.busID>>bus1.busName>>bus1.busNum; cout<<\是否保存客车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->add(); p->save(); } break; } case 2: { Bus bus2; p=&bus2; int index; for(int i=0;i cout< cout<<\请选择要修改的客车信息序列号:\ cin>>index; cout<<\请输入要修改的客车车牌号、客车品牌、最大载客数(人):\ cin>>bus2.busID>>bus2.busName>>bus2.busNum; cout<<\是否保存客车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->modify(index); p->save(); } break; } case 3: { Bus bus3; p=&bus3; int index; for(int i=0;i cout< cout<<\请选择要删除的客车信息序列号:\ cin>>index; cout<<\是否保存客车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->del(index); p->save(); } break; } case 4: { Bus bus4; cout<<\请输入客车的车牌号:\ cin>>bus4.busID; bus4.search(); system(\ break; } case 5: { cout<<\客车车牌号 \客车品牌 \客车最大载客数(人)\ for(int i=0;i cout< system(\ if(count_bus==0) cout< case 0:quit=true;break; default:cout<<\请输入0~5之间的数字!\ } if(quit==true) break; } system(\ return; } //显示主菜单 while(1) { cout<<\主菜单**************\ cout<<\轿车信息管理\ cout<<\卡车信息管理\ cout<<\客车信息管理\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: car_manage();break; case 2: truck_manage();break; case 3: bus_manage();break; case 0: cout<<\谢谢您的使用!\ default:cout<<\请输入0~3之间的数字!\ } system(\ } 系统调试 4.1 在调试过程中,出现了下面一些错误: 4.2 具体调试过程: (1) 显示主菜单 (1)(1) (1)(1)(1) (重复以上操作分别输入红旗、大众、三菱和现代) (1)(1)(2) (1)(1)(2)(3) (1)(1)(3) (1)(1)(4) (1)(1)(5) (1)(1)(0) 以上只演示了三个车辆类小轿车、卡车、大客车中的小轿车。其他两个类的操作基本类似,就不一一列举了。 5、结论 程序总共设计了三个类,满足了课题对类的要求,在设计的过程中,建立了较为清晰的类层次, 也利用了面向对象的方法以及C++的编程思想来完成系统的设计,做到了用文件存储车辆信息、从文件中读取车辆信息、修改信息、查询信息、删除信息显示文件中存储的信息等要求。而且界面简洁,容易操作。但是程序不太条理,不够简练,导致出现错误很难发现和修改。同时,发现一个难点,那就是类的封装。一个可以运行的程序要把它成功的封装起来也很困难。系统的错误提示难以识别,错误点不易找到,导致程序的耗时量大大增加。 6、心得体会 这次课程设计历经两个星期左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,也有很多闻所未闻的东西,从而更加明白知识扎实的重要性,理解实践能力的重要性!因为基础知识的不扎实让我在这次课程设计中走了许多弯路,不过我认为是值得的,它大大的补充了我知识不足的那一面,我始终相信付出必有收获。 这次的课程设计,可以说是苦乐交加。在程序设计过程中,不仅检验、巩固了我所学的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。 它为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生运用所学知识解决实际问题的能力。课程设计这类实践训练是我们迈向社会,从事职业工作前一个必不少的过程。“千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。 通过这次车辆管理系统的设计,我在多方面都有所提高。首先,整体与局部的把握,在系统设计前,需要整体思考车辆管理系统所包含的信息及其实现的功能,在设计过程中,再思考局部功能实现的完整性与整个程序的结合。其次,在实现用户权限设置这个功能时,通过查阅课本、资料,实践,对字符串的使用(strcmp(mm,\)更加熟悉、了解,能够熟练运用字符串,而且加强了对类中参数传值的使用,巩固了类定义,函数成员使用等知识,并通过条件语句实现不同的人设置不同的操作,在实现查找功能时,更熟练了指针对象的使用。最后,在整个程序运行时,考虑到屏幕出现的效果,查阅资料及其前人的登录系统代码,了解了库函数中的屏幕清零函数(system(\),并能正确使用。课程设计使我对c++课程又进行了系统的复习,独立思考的能力也有了提高。 通过这次编程使我们认识到在以后的学习中要多做练习增加自己的知识面才能更好的适应自己的工作,在其中由最初的沮丧中出来,充满信心地去解决问题。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。而且这次课程设计也让我受益匪浅,真切感觉到任何事情都需要细心和耐心,二者缺一不可。没有细心,做事情永远都是事倍功半,一旦某个细节错了,就会导致某个部分应用不了额,甚至可能导致整个系统都运行不了。没了耐心,可能就会导致这件事不能够完成,经常半途而废。 七、参考书目 1、谭浩强. C++程序设计教程 清华大学出版社 2、谭浩强. C++面向对象程序设计 清华大学出版社 3、Visual C++ 从入门到精通 八、附录(关键程序代码) #include public: virtual void read()=0; virtual void add()=0; virtual void modify(int)=0; virtual void del(int)=0; virtual void save()=0; virtual void search()=0; }; class Car:public Base { public: double carFee; char carID[20]; char carName[20]; void read(); void add(); void modify(int); void del(int); void save(); void search(); }; 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].carName>>car[count_car].carFee; while(!carfile.eof()) { count_car++; carfile>>car[count_car].carID>>car[count_car].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].carID,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; } count_car--; } void Car::search() { for(int i=0;i if(strcmp(car[i].carID,carID)==0||strcmp(car[i].carName,carName)==0) { cout<<\轿车车牌号 \轿车品牌 \轿车油耗费用\ cout< cout<<\无此轿车数据!\ } } void Car::save() { ofstream carfile; carfile.open(\轿车信息.txt\ for(int i=0;i<=count_car-1;i++) carfile< class Truck:public Base { public: char truckID[20]; char truckName[20]; int truckNum; void read(); void add(); void modify(int); void del(int); void save(); void search(); }; const int MAXtruck=10; extern Truck truck[MAXtruck]; extern int count_truck; void Truck::read() { ifstream truckfile; truckfile.open(\卡车信息.txt\ truckfile>>truck[count_truck].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() { //存入对象数组中 strcpy(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].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 if(strcmp(truck[i].truckID,truckID)==0) { cout<<\卡车车牌号 \卡车品牌\卡车载重数(吨)\ cout< else cout<<\无此卡车数据!\ } } void Truck::save() { ofstream truckfile; truckfile.open(\卡车信息.txt\ for(int i=0;i<=count_truck-1;i++) truckfile< class Bus:public Base { public: char busName[20]; char busID[20]; int busNum; void read(); void add(); void modify(int); void del(int); void save(); void search(); }; const int MAXbus=10; extern Bus bus[MAXbus]; extern int count_bus; void Bus::read() { fstream busfile(\客车信息.txt\ busfile>>bus[count_bus].busID>>bus[count_bus].busName>>bus[count_bus].busNum; while(!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; count_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(bus[i-1].busName,bus[i].busName); bus[i-1].busNum=bus[i].busNum; } count_bus--; } void Bus::search() { for(int i=0;i if(strcmp(bus[i].busID,busID)==0) { cout<<\客车车牌号 \客车品牌 \客车最大载客数(人)\ cout< cout<<\无此客车数据!\ } } void Bus::save() { ofstream busfile; busfile.open(\客车信息.txt\ for(int i=0;i<=count_bus-1;i++) busfile< Car car[MAXcar]; Truck truck[MAXtruck]; Bus bus[MAXbus]; int count_car=0; int count_truck=0; int count_bus=0; Base *p=NULL; char c; //轿车管理子菜单 void car_manage() { int choice,i=0; bool quit=false; while(1) { system(\ cout<<\轿车管理子菜单**********\ cout<<\添加轿车信息\ cout<<\修改轿车信息\ cout<<\删除轿车信息\ cout<<\查询轿车信息\ cout<<\显示所有轿车信息\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: { Car car1; p=&car1; cout<<\请输入轿车车牌号、轿车品牌、油耗费用:\ cin>>car1.carID>>car1.carName>>car1.carFee; cout<<\是否保存轿车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->add(); p->save(); } break; } case 2: { Car car2; p=&car2; int index; for(int i=0;i cout< cout<<\请选择轿车序号:\ cin>>index; cout<<\请输入要修改的轿车车牌号、轿车品牌、油耗费用:\ cin>>car2.carID>>car2.carName>>car2.carFee; cout<<\是否保存修改信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->modify(index); p->save(); } break; } case 3: { Car car3; p=&car3; int index; for(int i=0;i cout< cout<<\请选择要删除的轿车车牌号、轿车品牌、油耗费用的序列号:\ cin>>index; cout<<\是否确定删除该信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->del(index); p->save(); } break; } case 4: { Car car4; p=&car4; cout<<\请输入轿车的车名:\ cin>>car4.carName; car4.search(); system(\ break; } case 5: { cout<<\轿车车牌号 \轿车品牌 \轿车油耗费用\ for(int i=0;i cout< system(\ if(count_car==0) cout< } case 0:quit=true;break; default:cout<<\请输入0~5之间的数字!\ } if(quit==true) break; } system(\ return; } //卡车管理子菜单 void truck_manage() { int choice; bool quit=false; while(1) { system(\ cout<<\卡车管理子菜单**********\ cout<<\添加卡车信息\ cout<<\修改卡车信息\ cout<<\删除卡车信息\ cout<<\查询卡车信息\ cout<<\显示所有卡车信息\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: { Truck truck1; p=&truck1; cout<<\请输入卡车的车牌号、卡车品牌、载重数(吨):\ cin>>truck1.truckID>>truck1.truckName>>truck1.truckNum; cout<<\是否保存卡车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->add(); p->save(); } break; } case 2: { Truck truck2; p=&truck2; int index; for(int i=0;i cout<>index; cout<<\请输入要修改卡车的车牌号、卡车品牌、载重数(吨):\ cin>>truck2.truckID>>truck2.truckName>>truck2.truckNum; cout<<\是否保存修改信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->modify(index); p->save(); } break; } case 3: { Truck truck3; p=&truck3; int index; for(int i=0;i cout< cout<<\请选择要删除的卡车信息序列号:\ cin>>index; cout<<\是否确定删除该信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c='n'||c=='N') { p->del(index); p->save(); } break; } case 4: { Truck truck4; cout<<\请输入卡车的车牌号:\ cin>>truck4.truckID; truck4.search(); system(\ break; } case 5: { cout<<\卡车车牌号 \卡车品牌 \卡车载重数(吨)\ for(int i=0;i cout< cout< case 0:quit=true;break; default:cout<<\请输入0~5之间的数字!\ } if(quit==true) break; } system(\ return; } //客车管理子菜单 void bus_manage() { int choice; bool quit=false; while(1) { system(\ cout<<\客车管理子菜单**********\ cout<<\添加客车信息\ cout<<\修改客车信息\ cout<<\删除客车信息\ cout<<\查询客车信息\ cout<<\显示所有客车信息\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: { Bus bus1; p=&bus1; cout<<\请输入要添加的客车的车牌号、客车品牌、最大载客数(人):\ cin>>bus1.busID>>bus1.busName>>bus1.busNum; cout<<\是否保存客车信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->add(); p->save(); } break; } case 2: { Bus bus2; p=&bus2; int index; for(int i=0;i cout< cout<<\请选择要修改的客车信息序列号:\ cin>>index; cout<<\请输入要修改的客车车牌号、客车品牌、最大载客数(人):\ cin>>bus2.busID>>bus2.busName>>bus2.busNum; cout<<\是否保存修改信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->modify(index); p->save(); } break; } case 3: { Bus bus3; p=&bus3; int index; for(int i=0;i cout< cout<<\请选择要删除的客车信息序列号:\ cin>>index; cout<<\是否确定删除该信息?(不区分大小写)是(y/Y)否(n/N)\ cin>>c; if(c=='y'||c=='Y') { p->del(index); p->save(); } break; } case 4: { Bus bus4; cout<<\请输入客车的车牌号:\ cin>>bus4.busID; bus4.search(); system(\ break; } case 5: { cout<<\客车车牌号 \客车品牌 \客车最大载客数(人)\ for(int i=0;i cout< system(\ if(count_bus==0) cout< case 0:quit=true;break; default:cout<<\请输入0~5之间的数字!\ } if(quit==true) break; } system(\ return; } //主函数内容 void main() { //将各个文件中的数据依次读入内存 Car (car); (car).read(); Truck (truck); (truck).read(); Bus (bus); (bus).read(); int choice=1; //显示主菜单 while(1) { cout<<\主菜单**************\ cout<<\轿车信息管理\ cout<<\卡车信息管理\ cout<<\客车信息管理\ cout<<\退出\ cout<<\ cout<<\请输入所要操作的编号:\ cin>>choice; switch(choice) { case 1: car_manage();break; case 2: truck_manage();break; case 3: bus_manage();break; case 0: cout<<\谢谢您的使用!\ default:cout<<\请输入0~3之间的数字!\ } system(\ } }