某学校实现进出校园的车辆管理,试用类的形式记录车辆的进出(类名为CampusAutos).有车进来时用new的方法构建一个新的对象,记录它的牌照(8个字符的字符串,licensetag),离开校园时即析构.在main()中设一循环,每次可以输入车辆进入及牌照号或某牌照号的车辆出去(校园内限N辆,暂设为5),同时报告校园内现有多少辆汽车及它们的牌照号.(用对象指针数组)
注意:程序中要实现数组溢出保护(车位已满),牌照输入错误(超8个字符)和查询失败报告(无此牌照).
某学校实现进出校园的车辆管理,试用类的形式记录车辆的进出(类名为CampusAutos).有车进来时用new的方法构建一个新的对象,记录它的牌照(8个字符的字符串,licensetag),离开校园时即析构.在main()中设一循环,每次可以输入车辆进入及牌照号或某牌照号的车辆出去(校园内限N辆,暂设为5),同时报告校园内现有多少辆汽车及它们的牌照号.(用对象指针数组)
注意:程序中要实现数组溢出保护(车位已满),牌照输入错误(超8个字符)和查询失败报告(无此牌照).
#include <iostream>
#include <string.h>
#include <conio.h>
class CampusAutos
{
public:
char *licensetag;
CampusAutos(char *p);
~CampusAutos();
void type();
};
CampusAutos::CampusAutos(char *p)
{
int i;
this->licensetag=new char[8];
if(strlen(p)>=8||strlen(p)==0)
{
std::cout<<"牌号出错"<<std::endl;
this->licensetag[0]=0;
return;
}
for(i=0;p[i]!=0;i++)
{
(this->licensetag)[i]=p[i];
}
(this->licensetag)[i]=0;
}
CampusAutos::~CampusAutos()
{
if(this->licensetag[0])
{
std::cout<<"出去车牌号:";
this->type();
}
delete[] this->licensetag;
}
void CampusAutos::type()
{
std::cout<<this->licensetag<<std::endl;
}
void main()
{
char name[128];
CampusAutos* list[5];
int i=0;
for(i=0;i<5;i++)
list[i]=NULL;
for(;;)
{
std::cout<<std::endl<<"1,进入"<<std::endl<<"2,离开"<<std::endl<<"3,显示当前所存车辆"<<std::endl
<<"4,退出程序"<<std::endl<<"输入:";
switch(getch())
{
case '1':
putch('\n');
for(i=0;i<5&&list[i];i++);
if(i==5)
std::cout<<"车库已满"<<std::endl;
else
{
std::cout<<"输入车牌号:";
std::cin>>name;
list[i]=new CampusAutos(name);
if(!list[i]->licensetag[0])
{
delete list[i];
list[i]=NULL;
break;
}
std::cout<<"位置为"<<i;
}
break;
case '2':
putch('\n');
std::cout<<"输入位置编号:";
std::cin>>i;
if(i<5&&list[i])
{
delete list[i];
list[i]=0;
}
else
std::cout<<"此位置无车"<<std::endl;
break;
case '3':
putch('\n');
std::cout<<"列表:"<<std::endl;
for(i=0;i<5;i++)
if(list[i])
(list[i])->type();
break;
default:
exit(0);
}
}
}