慕标琳琳
这是我的停车场的程序,你看看吧:#include <iostream>#include<assert.h>using namespace std;struct CAR{int num;int time;};class Stack{private:int top,maxsize;CAR *car_part;public:Stack();Stack(int size);~Stack();int get_len(); //获取停车场内的汽车数量bool IsFull(); //停车场的车位是否满了bool IsEmpty(); //停车场是否有车停放void push(CAR *pcar); //将车停入停车场void pop(CAR* pcar); //将车开出停车场int get_Rlen(); //查询停车场还有几个车位int find(CAR *pcar); //查找某辆车并返回该车所在的位子};///////////////////////////////////////////////////Stack::Stack(){}Stack::Stack(int size){assert(size>0);top=-1;maxsize=size;car_part=new CAR[maxsize];assert(car_part!=NULL);}Stack::~Stack(){delete[] car_part;top=-1;}int Stack::get_len(){return top+1;}bool Stack::IsFull(){return (top+1==maxsize);}bool Stack::IsEmpty(){return (top==-1);}void Stack::push(CAR *pcar){assert(!IsFull());top++;(car_part+top)->num=pcar->num;(car_part+top)->time=pcar->time;}void Stack::pop(CAR* pcar){assert(!IsEmpty());pcar->num = (car_part+top)->num;pcar->time = (car_part+top)->time;top--;}int Stack::get_Rlen(){ return (maxsize-top-1); }int Stack::find(CAR *pcar){int i=-1;//+++++++++++++++++++++++++++++++while(++i <= top+1){if((car_part+i)->num == pcar->num) return top-i;//+++++++++++++++++++++++}return -1;}////////////////////////////////////////////////////class Queue{private:struct td{CAR car;td *link;};td *first,*last;int curr_len;public:Queue();~Queue();void enQueue(CAR *pcar);void outQueue(CAR *pcar);int get_len();bool IsEmpty();int find(CAR *pcar);void getcar(CAR *pcar);};///////////////////////////////////////////////////Queue::Queue(){curr_len=0;first=NULL;last=first;}Queue::~Queue(){td *p;while(first!=NULL){p=first;first=first->link;delete p;}}void Queue::enQueue(CAR *pcar){td *p=new td;assert(p!=NULL);p->car.num=pcar->num;p->car.time=pcar->time;if(first == NULL)first = p;else last->link=p;last=p;last->link=NULL;curr_len++;}void Queue::outQueue(CAR *pcar){assert(!IsEmpty());td *p;p=first;first=first->link;if(first == NULL) last =NULL;//+++++++++++++++++++++++pcar->num=p->car.num;pcar->time=p->car.time;curr_len--;delete p;}int Queue::get_len(){return curr_len;}bool Queue::IsEmpty(){return (curr_len==0);}int Queue::find(CAR *car){int j=0;td *q=first;while(q){j++;if(q->car.num==car->num) return j;q=q->link;}return -1;}void Queue::getcar(CAR *pcar){td *q=NULL,*p=first;while(p!=NULL){if(p->car.num == pcar->num){if(p == first) first = p->link;//+++++++++++++++++++++++++if (p == last )//++++++++++++++++++++++++++++{if( q == NULL)//++++++++++++++++++++++++++{last = NULL;pcar->time = p->car.time;delete p;curr_len--;break;}else{last = q;pcar->time = p->car.time;delete p;curr_len--;break;}}if( q != NULL) q->link = p->link;//+++++++++++++++++++++++pcar->time = p->car.time;delete p;curr_len--;break;}q = p;p=p->link;}}void input(char a,int num,int time,Stack &carpart1,Stack &carpart2,Queue &tongdao){assert(a=='a' || a=='A' || a=='D' || a=='d');CAR q,p;q.num=num;q.time=time;if(a=='a' || a=='A'){if(!carpart1.IsFull()){carpart1.push(&q);}else{tongdao.enQueue(&q);}}else if(a=='d' || a=='D'){int i,j;i=carpart1.find(&q);j=tongdao.find(&q);if(i!=-1){for(int o=0;o<i;o++){CAR tmpcar;carpart1.pop(&tmpcar);carpart2.push(&tmpcar);}carpart1.pop(&p);while(!carpart2.IsEmpty()){CAR tmpcar;carpart2.pop(&tmpcar);carpart1.push(&tmpcar);}if(!tongdao.IsEmpty()){//++++++++++++++++++++++++++++++++++CAR tmpcar;tongdao.outQueue(&tmpcar);tmpcar.time=time;carpart1.push(&tmpcar);}cout<<"您的车号是"<<p.num<<endl;cout<<"您的车是"<<p.time<<"点进入停车场的,现在的时间是:"<<time<<"点"<<endl;cout<<"您应该付费:"<<((time-(p.time))*2)<<"元,谢谢您的惠顾!"<<endl;}else if(j!=-1){tongdao.getcar(&q);cout<<"您的车号是"<<q.num<<endl;cout<<"您的车是"<<q.time<<"点到达的!"<<endl;}elsecout<<"没有找到这辆车!"<<endl;}}////////////////////////////////////////////////////////////int main(){int sum,iput,num,findnum,time,o,w;cout<<"************************欢迎进入停车场管理系统**************************"<<endl;cout<<"***本系统的收费规则是在停车场内的收费为每小时2元,在通道内停车收费0元***"<<endl;cout<<"********当停车场内有空的车位的时候我们会将您的车自动开入停车场!********"<<endl;cout<<"输入停车场的停车泊位数:"<<endl;cin>>sum;Stack carpart1(sum);Stack carpart2(sum);Queue tongdao;iput=0;while(iput!=6){do{cout<<"[1] 开 车 进 入 "<<endl;cout<<"[2] 开 车 离 去 "<<endl;cout<<"[3] 查询停车场的剩余泊位 "<<endl;cout<<"[4] 查询当前停车通道中的汽车数量"<<endl;cout<<"[5] 查询特定车牌号的汽车位置 "<<endl;cout<<"[6] 退出该停车系统 "<<endl;cin>>iput;}while(iput>6 || iput<1);switch(iput){case 1:cout<<"请输出您的汽车牌号:";cin>>num;cout<<"请输入您的停车时间:";cin>>time;input('A',num,time,carpart1,carpart2,tongdao);continue;case 2:cout<<"请输入你要离去的车牌号:";cin>>num;cout<<"请输入您离去的时间:";cin>>time;input('D',num,time,carpart1,carpart2,tongdao);continue;case 3:cout<<"当前停车场内的汽车数量为:";cout<<carpart1.get_Rlen()<<endl;;continue;case 4:cout<<"当前通道内的汽车的数量为:";cout<<tongdao.get_len()<<endl;;continue;case 5:cout<<"请输入您要查询的车牌号:";cin>>findnum;CAR p;p.num=findnum;o=carpart1.find(& p);w=tongdao.find(& p);if(o>=0)cout<<"您的车目前停放在停车场的"<<o<<"号泊位!"<<endl;else if(w>=0)cout<<"您的车目前停放在通道的"<<w<<"号泊位!"<<endl;elsecout<<"当前没有查讯到该车,请查证后再输入!"<<endl;continue;case 6:cout<<"欢迎您再次光临!"<<endl;system("PAUSE");}}return EXIT_SUCCESS;}/*input('A',1234,2,carpart1,carpart2,tongdao);input('A',1235,3,carpart1,carpart2,tongdao);input('A',1236,4,carpart1,carpart2,tongdao);input('A',1237,5,carpart1,carpart2,tongdao);input('A',1238,6,carpart1,carpart2,tongdao);input('A',1239,7,carpart1,carpart2,tongdao);input('A',1230,7,carpart1,carpart2,tongdao);input('A',1231,7,carpart1,carpart2,tongdao);input('D',1235,9,carpart1,carpart2,tongdao);input('D',1238,11,carpart1,carpart2,tongdao);input('d',1234,12,carpart1,carpart2,tongdao);input('d',1235,13,carpart1,carpart2,tongdao);input('d',1236,14,carpart1,carpart2,tongdao);input('d',1237,15,carpart1,carpart2,tongdao);input('d',1238,16,carpart1,carpart2,tongdao);input('d',1239,17,carpart1,carpart2,tongdao);input('d',1235,13,carpart1,carpart2,tongdao);input('d',1236,14,carpart1,carpart2,tongdao);input('d',1237,15,carpart1,carpart2,tongdao);input('d',1238,16,carpart1,carpart2,tongdao);input('d',1239,17,carpart1,carpart2,tongdao);*/