资源描述
______________________________________________________________________________________________________________
软件学院
课程设计报告
设计名称: C++课程设计
选题名称: 车辆信息管理系统
姓 名: 王海洋
学 号: 1515925530
专业班级 移动二班
系 (院): 软件学院
设计时间: 2016.6.13~2016.6.17
设计地点: 15#505
1.课程设计目的
(1)基本掌握面向对象程序设计的基本思路和方法;
(2)达到熟练掌握C++语言的基本知识和技能;
(3)能够利用所学的基本知识和技能,解决简单的程序设计问题
·
2.课程设计任务与要求:
任务
设计题目从任务书所列选题表中选取,每人1题。
要求:
基本要求:
(1) 要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2) 要求在设计的过程中,建立清晰的类层次;
(3) 在系统中至少要定义三个类,每个类中要有各自的属性和方法;
(4) 在系统的设计中,至少要用到面向对象的一种机制。
创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
3.课程设计说明书
一 需求分析
需要进行车辆信息的录入,然后进行查询、修改、删除、插入操作,最后要向文件中写入全部的车辆信息,完成这些基本功能后,进行一些菜单美化操作,加上一些特殊功能,例如密码登录等等。
二 系统设计
利用了C++完成了这个车辆信息管理系统。在设计中采用文件的记忆功能可以对已输入的货物信息进行二次操作。系统首先是数据的录入并将数据储存在二进制文件中
基本功能:
(1)添加车辆:主要完成车辆信息的添加,要求编号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加;当车辆信息库已满,则提示不能再添加新的数据。
(2)查询车辆:
可按照三种方式来查询物品,分别为:
按车辆制造公司查询:输入车辆制造公司,输出所查询的信息,若不存在该记录,则提示“该车辆制造公司不存在!”;
按编号查询:输入编号,输出所查询的信息,若不存在该记录,则提示“该编号不存在!”;
按类别查询:输入类别,输出所查询的信息,若不存在记录,则提示“该类别没有车辆!”;
(3)显示车辆信息库:输出当前车辆信息库中所有车辆信息,每条记录占据一行
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除车辆:主要完成车辆信息的删除。如果当前车辆信息库为空,则提示“车辆信息库为空!”,并返回操作;否则,输入要删除的编号,根据编号删除该车辆的记录,如果该编号不在车辆信息库库中,则提示“该编号不存在”。
(6)插入车辆
在已有车辆信息中插入一个新车辆信息,根据编号判断插入位置,若编号不存在,提示”该车辆不存在!”;
(7)统计信息
输出当前车辆信息库中总物品数,以及按车辆类别,统计出当前车辆信息库中各类别的物品数并显示。
有功能模块图和流程图
车辆信息管理系统
轿车管理
卡车管理
客车管理
添加车辆信息
插入车辆信息
查找车辆信息
修改车辆信息
文件中读取车辆信息
车辆信息写入文件
显示车辆信息
删除车辆信息
按车牌号查找
按公司查找
类关系图
cho=1
1. 查询函数流程图。
按车牌号查询
Y
N
cho=2
按公司查询
Y
无车辆信息
输出车辆信息
Index<=count_***
重新选择
N
2.插入信息。
2. 删除函数。
3.修改信息。
三 详细设计
1、首先写入头文件
#include<iostream>
#include<windows.h>
#include<cstring>
#include<cstdlib>
//#include<iomanip>
#include <fstream>
using namespace std;
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.轿车类的实现。
class 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;//总公里数
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_corporation>>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_corporation>>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("轿车信息.txt");
for(i=0;i<=count_car-1;i++)
{
carfile<<car[i].carID<<" "<<car[i].car_corporation<<" "<<car[i].car_year<<" "<<car[i].car_month<<" ";
carfile<<car[i].car_day<<" "<<car[i].car_kilo<<" "<<car[i].car_oil<<" "<<car[i].car_road<<" "<<car[i].box<<endl;
}
carfile.close();
}
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].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].car_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++)
{
strcpy(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;
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);
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(car[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;
car[index].car_road=car_road;
count_car++;
}
void Car::search()
{
int i,m=0;
int cho;
char corporation[20],ID[20];
cout<<"请选择查询方式:"<<endl;
cout<<"1.按公司查询" <<endl;
cout<<"2.按车牌号查询"<<endl;
cin>>cho;
switch(cho)
{
case 1:
cout<<"请输入公司名称:"<<endl;
cin>>corporation;
break;
case 2:
cout<<"请输入车牌号 :"<<endl;
cin>>ID;
break;
default:
cout<<"选择1或2!"<<endl;
}
for(i=0;i<count_car;i++)
{
if(strcmp(car[i].carID,ID)==0 || strcmp(car[i].car_corporation,corporation)==0)
{
cout<<"编号 车牌号 公司 购买日期 公里数 耗油量 养路费 厢数 总费用"<<endl;
cout<<"["<<i+1<<"] ";
cout<<car[i].carID<<" "<<car[i].car_corporation<<" "<<car[i].car_year<<"/";
cout<<car[i].car_month<<"/"<<car[i].car_day<<" "<<car[i].car_kilo<<" ";
cout<<car[i].car_oil<<" "<<car[i].car_road<<" "<<car[i].box<<" ";
cout<<car[i].car_oil*5+1000<<endl;
m++;
}
}
if(m==0)
cout<<"不存在该轿车"<<endl;
}
4、卡车类的实现
class Truck:public Base
{
public:
void read();
void add();
void modify(int);
void del(int);
void insert(int);
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[MAXtruck];
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].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[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()
{
ofstream truckfile;
int i;
truckfile.open("卡车信息.txt");
for(i=0;i<=count_truck-1;i++)
{
truckfile<<truck[i].truckID<<" "<<truck[i].truck_corporation<<" ";
truckfile<<truck[i].truck_year<<" "<<truck[i].truck_month<<" ";
truckfile<<truck[i].truck_day<<" "<<truck[i].truck_kilo<<" ";
truckfile<<truck[i].truck_oil<<" "<<truck[i].truck_road<<" "<<truck[i].load<<endl;
}
truckfile.close();
}
void Truck::add()
{
strcpy(truck[count_truck].truckID,truckID);
strcpy(truck[count_truck].truck_corporation,truck_corporation);
truck[count_truck].load=load;
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::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].truck_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_corporation);
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[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_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[i+1].truck_road=truck[i].truck_road;
truck[i+1].load=truck[i].load;
}
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[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<<"请选择查询方式:"<<endl;
cout<<"1.按公司查询" <<endl;
cout<<"2.按车牌号查询"<<endl;
cin>>cho;
switch(cho)
{
case 1:
cout<<"请输入公司名称:"<<endl;
cin>>corporation;
break;
case 2:
cout<<"请输入车牌号 :"<<endl;
cin>>ID;
break;
default:
cout<<"选择1或2!"<<endl;
}
for(i=0;i<count_truck;i++)
{
if(strcmp(truck[i].truckID,ID)==0 || strcmp(truck[i].truck_corporation,corporation)==0)
{
cout<<"编号 车牌号 公司 购买日期 公里数 耗油量 养路费 载重量 总费用"<<endl;
cout<<"["<<i+1<<"] ";
cout<<truck[i].truckID<<" "<<truck[i].truck_corporation<<" ";
cout<<truck[i].truck_year<<"/"<<truck[i].truck_month<<"/"<<truck[i].truck_day;
cout<<" "<<truck[i].truck_kilo<<" "<<truck[i].truck_oil;
cout<<" "<<truck[i].truck_road<<" "<<truck[i].load<<" ";
cout<<truck[i].truck_oil*5+1500<<endl;
m++;
}
}
if(m==0)
cout<<"不存在该卡车!"<<endl;
}
5.客车类的实现。
class 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;//总公里数
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>>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_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;
int i;
busfile.open("客车信息.txt");
for(i=0;i<=count_bus-1;i++)
{
busfile<<bus[i].busID<<" "<<bus[i].bus_corporation<<" ";
busfile<<bus[i].bus_year<<" "<<bus[i].bus_month<<" ";
busfile<<bus[i].bus_day<<" "<<bus[i].bus_kilo<<" ";
busfile<<bus[i].bus_oil<<" "<<bus[i].bus_road<<" "<<bus[i].busload<<endl;
}
busfile.close();
}
void Bus::add()
{
strcpy(bus[count_bus].busID,busID);
strcpy(bus[count_bus].bus_corporation,bus_corporation);
bus[count_bus].busload=busload;
bus[count_bus].bus_year=bus_year;
bus[count_bus].bus_month=bus_month;
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);
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<=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-
展开阅读全文