停车场管理系统 程序设计
一、 停车场管理系统
1.1设计要求
1.1.1问题描述
设计一个停车场管理系统,模拟停车场的运作,此程序具有以下功能: ① 汽车到达,则显示汽车在停车场内或便道上的停车位置。
② 若车离去,则显示汽车在停车场内停留的时间和应缴纳的费用(在便道上停留的时间不收费)。
1.1.2基本要求
①要求以栈模拟停车场,以队列模拟车场外地便道,按照从终端读入的输入数据序列进行模拟管理。
② 求处理的数据元素包括三个数据项:汽车“到达”或“离去”信息。汽车牌照号码以及离去的时刻。
③ 要求栈以顺序结构实现,队列以链表实现。
1.1.3测试数据
自行设计一组在停车场上停车的数据和便道上停车的数据。
1.1.4实现提示
该停车场能容纳车辆的数量,便道上的停车数量。车辆到达对应栈的入栈操作,车辆离开对应栈的出栈操作。
1.2设计代码及注释
#include
#include
#include
#include
#include
using namespace std;
#define PASS 20
#define POT 20
struct passLot//便道队列数据结构
{
int num;//车位号
time_t timep;//停车时间
int carNum;//停车的车牌号码
};
struct potLot//停车场栈数据结构
int num;
time_t timep;
int carNum;
};
void printLine()//打印下划线(作为主界面图表的框架)
{
cout
return;
}
void printStar()//打印星号
{
cout
}
class erroFull//停车位满时异常类
{public:
};
class erroEmp//停车位空时异常类
{public:
}; erroEmp() { system("color 3c"); } void ex() { cout
class parkingLot//停车场类
{
public:
void passLG()//便道管理函数 { try { if(flag==20) throw erroFull();//如果停车位已满,则抛出车位慢得异常情况 system("cls"); printStar(); coutnum=i+1; a[i]->carNum=0; po=(potLot*)malloc(sizeof(potLot)); b[i]=po; b[i]->num=i+1; b[i]->carNum=0; "
cout
} } catch(erroFull &err) { err.ex(); } a[rear]->timep=time(NULL); cout>b[top]->carNum; } catch(erroFull &err) { err.ex(); } b[top]->timep=time(NULL); coutnum
void arrive()//汽车到达
{
int choice=-1; for(;;) if(top==20&&flag==20) throw erroFull();
system("cls");
printStar();
cout
cout
}
int feep(time_t* tmp)//费用计算
{
int gap=0,m=0,hour=0,min=0,sec=0;//设置数据用来计算时间间隔,停车时、分、秒。
local=localtime(tmp);//将存储的时间转化为当地时间日历 tm_sectm_hourtm_mintm_hour;//保存停车时刻 min=local->tm_min; sec=local->tm_sec; now=time(NULL); couttm_hourtm_mintm_sec>choice; { case 1:potLG();break; case 2:passLG();break; case 3:break; default:system("color 3c");cout
hour = nowp->tm_hour-hour;//求出停车的时间间隔
min= nowp->tm_min-min;
sec= nowp->tm_sec-sec;
if(sec
}
void passOut()//便道离开
{
try
}
void potOut()//停车场离开
{
try
{ } catch(erroEmp &err) { err.ex(); } coutcarNum=0; front=(front+1)%PASS; flag--; couttimep)*0; { if(flag==0) throw erroEmp(); int fee=0; system("cls"); printStar(); cout
if(top==0) throw erroEmp(); int fee=0; top--; system("cls"); printStar(); cout
cout
coutcarNumnum
}
void depart()//汽车离开
{
int choice=-1; for(;;) { system("cls"); if(top==0&&flag==0) throw erroEmp(); } catch(erroEmp &err) { err.ex(); } fee=feep(&b[top]->timep)*8;//计费公式,每小时8元 coutcarNum=0; cout
system("color 3a");
printStar();
cout
printLine(); cout
cout
}
void searchNum()//查询车牌号码
{
}
void searchPot()
{
int potCar,nn; cout>numCar; for(;icarNum==numCar) { coutnumcarNum==numCar) { cout>choice; { case 1:potOut();break; case 2:passOut();break; case 3:break; default:system("color 3c");cout
cout
}
if((potCar100)||(potCar200)){ if(potCar/100==1){ if(b[nn]->carNum==0) coutcarNumcarNum==0) cout
void search()//号码查询
{
int choice=-1; for(;;) { system("cls"); if(top==0&&flag==0) throw erroEmp();
system("color 3a");
printStar();
cout
cout
cin>>choice; { case 1:searchNum();break; case 2:searchPot();break; case 3:break; default:system("color 3c");cout
}
} if(choice==3)break; } return;
private:
void main()//程序运行主函数
{
parkingLot a;
int choice=-1;
for(;;)//使主界面能够自动初始化和重复使用
{ system("cls");
system("color 3a");//设为主背景为湖蓝色
printStar(); cout
t=time(NULL); //获取当前系统的日历时间 cout
printLine(); cout>choice; { case 1: try{ cout
}
a.arrive(); }
catch (erroFull &erro) {
erro.ex(); } break;
case 2:a.depart();break; case 3:a.search();break; case 4:break;
default:system("color 3c");cout
if(choice==4) break;
_sleep(2000);;break;
return;
}
1.3测试结果以及运行情况
1.3.1运行主界面
1.3.2汽车到达界面
1.3.2.1停车场停车测试界面 测试数据(按输入的先后排序)
表1
输入情况界面(部分)
异常情况处理,当停车场已经满20位时,便抛出异常(界面显示为红色,并停止工作)
1.3.2.2便车道停车测试 测试数据
表2
异常情况处理,当停车场已经满20位时,便抛出异常(界面显示为红色,并停止工作)
1.3.3汽车离开界面
1.3.3.1停车场离开界面
当停车场为空时,抛出异常为空(颜色变红)
1.3.3.2便车道离开界面
当便车道为空时,抛出异常为空(颜色变红)
1.3.4号码查询界面
1.3.4.1根据车牌号码查询
1.3.4.2直接查询指定车位界面
1.4评估与改进
1.4.1评估
该系统能够完成题目要求的几项基本操作以及显示结果,并且显示的信息完全正确。在此基础上还加上了异常处理机制以及由异常处理导致的终端显示变异功能,同时在查询方面不仅完成了输入车牌号码查询功能,还能实现查找特定车位上停车情况的功能。
实验基本达到要求。 1.4.2改进
真正的停车场不可能只按栈或者队列的顺序来停车,故此系统具有一定的局限性。应根据停车场的具体情况对停车储存方式进行灵活地改善。
代码也比较冗余,希望能够不断简化。