包含随机数生成的停车管理系统模拟

来源:互联网 发布:全球云计算市场 编辑:程序博客网 时间:2024/04/27 18:08

  为了简单,赶着交,没怎么考虑便道的事情,要是车来了,没位子,自个儿找便道吧,便道都没了,那就另觅他处吧。


#include<iostream>#include<stdlib.h>//需要用到随机数生成函数rand()#include<ctime>//随机数种子用到(时间作为随机数种子)using namespace std;//时 间 类 的 定 义class TIME{friend class DOPARK;//友元类的声明,后面用到friend class BOSS;private:int day;//天,其实可以不要,繁琐了int hour;public:TIME(){ day=0; hour=0;}void settime(int x,int y){day=x;hour=y;}//设定时间void printtime(){cout<<"时间是: "<<day<<"日"<<hour<<"时"<<endl;}//打印时间void addtime(){hour++;}//每过一小时小时加1};/*--------------------------------------------------------------------------------*///car  类 的 定 义struct CAR{int name;//车名int number;//车位号int mark;//标记,表示停留时间(0,1,2,3,4)TIME reach;//到来离去时间TIME leave;CAR *next;};/*----------------------------------------------------------------------------------*///收 入 统 计 类class BOSS{friend class DOPARK;//友元类声明private:int car_income;TIME clock;public:BOSS();void showclock();//显示当前时间void addclock();//时间每小时++void printboss();//打印收入void bosstest();//为了模拟而做的初始化void setincome(int x){car_income=car_income+x;}};BOSS::BOSS()//构造函数{car_income=0;clock.settime(5,1);}void BOSS::printboss()//打印停车总量{cout<<"车场总收入: "<<car_income<<endl;}void BOSS::showclock(){clock.printtime();}void BOSS::addclock(){clock.addtime();}void BOSS::bosstest(){car_income=0;}/*-----------------------------------------------------------------------------------------------*///车 道 链 表 类class DOPARK{private:CAR * head;int car_in;int length;//链表长度固定下来public:DOPARK();void showout(CAR *q);//展示离开车辆时为了缩减规模的函数,防止重复代码void creat(int len);//创建30长度的车道void print_park();//打印车道void car_add();void car_leave(BOSS *B);//检车并打印走掉的车void check_park();void showcoming();//展示有多少辆车来到void car_plus();//每过一小时时对车道中的车的已停小时的+1void car_test();//为测试而给车道初始化void clear(CAR *);};DOPARK::DOPARK()//构造函数{head=NULL;car_in=0;length=30;}void DOPARK::creat(int len)//初始化链表{CAR * p1,*p2;int i=0;head=new CAR;head->name=-1;head->mark=1;head->number=1;p1=head;p2=head;while(i<len){i++;p1=new CAR;p2->next=p1;head->name=-1;p1->mark=1;p1->number=i+1;p2=p1;};p2->next=NULL;}void DOPARK::print_park()//打印车道{CAR *p;p=head;while(p!=NULL){if(p->name==-1){p=p->next;}else{cout<<"车位号"<<p->number<<"车名"<<p->name<<endl;p=p->next;};}}void DOPARK::showout(CAR *q)//另外设定函数缩减代码规模{BOSS b;CAR *p;b.addclock();p=q;cout<<"汽车"<<p->number<<"车名"<<p->name<<"离开";cout<<"其到达";p->reach.printtime();cout<<"其离开";p->leave.printtime();cout<<"停车费是"<<30*p->mark<<endl;}void DOPARK::clear(CAR *q)//车离开后初始化车位,归零。{CAR *p;p=q;p->name=-1;p->mark=0;p->reach;p->leave;}void DOPARK::car_leave(BOSS *X)//检车并打印走掉的车,因为用到类,所以麻烦的用到了对象的指针。{srand((unsigned)time(NULL));CAR *p;BOSS *BO;BO=X;int i,j;p=head;while(p!=NULL){i=p->mark;switch(i){case 1:{j=rand()%4;if(j==0){showout(p);(*BO).setincome(30);clear(p);}}break;case 2:{j=rand()%2;if(j==0){showout(p);(*BO).setincome(60);clear(p);}};break;case 3:{j=rand()%4;if(j==0||j==1||j==2){showout(p);(*BO).setincome(90);clear(p);}};break;case 4:{showout(p);(*BO).setincome(120);clear(p);};break;default:break;}p=p->next;}}void DOPARK::showcoming()//展示来到的车{int coming;srand((unsigned)time(NULL));coming=rand()%21;car_in=coming;cout<<"---------另外现在有"<<car_in<<"车要来----------"<<endl;cout<<endl;cout<<endl;}void DOPARK::car_plus()//每过一小时时对车道中的车的已停小时的+1{CAR *p;p=head;while(p!=NULL){if(p->name==-1){p=p->next;}else{p->mark++;p->leave.addtime();p=p->next;};};return ;}void DOPARK::car_test()//为了测试,于是给车道初始化了。{srand((unsigned)time(NULL));CAR *p;p=head;while(p!=NULL){p->name=(rand()%(2000-1000)+1000);p->mark=0;p->reach.settime(5,1);p->leave.settime(5,1);p=p->next;}}void DOPARK::car_add()//车到来,加入车道{srand((unsigned)time(NULL));int free=0;int temp;CAR *p;p=head;while(p!=NULL)////判断空位{if(p->name==-1){free++;};p=p->next;};cout<<free<<endl;p=head;if(free==0)//若没有空位{cout<<"车道已满!"<<endl;}else if(free>=car_in)//空位富足{cout<<"车道充足"<<endl;while(p!=NULL&&car_in!=0){if(p->name==-1){p->name=(rand()%(2000-1000)+1000);p->mark=0;cout<<"汽车"<<p->name<<"进入"<<p->number<<"车道"<<endl;car_in--;p=p->next;}else{p=p->next;};};}else if(free<car_in)//空位少于来车数{cout<<"只有"<<free<<"辆车能进入车道"<<endl;while(p!=NULL){if(p->name==-1){p->name=(rand()%(2000-1000)+1000);p->mark=0;cout<<"汽车"<<p->name<<"进入"<<p->number<<"车道"<<endl;free--;p=p->next;}else{p=p->next;}};};}/*-------------------------------------------------------------------------------------------------------*///主函数*****************************************int main(){class DOPARK x,y;class BOSS b;BOSS *B;B=&b;b.bosstest();x.creat(29);x.car_test();y.creat(4);y.car_test();int choice;while(1){cout<<"||*******停车场管理系统*******||"<<endl;cout<<"    当前时间:";b.showclock();cout<<"        "<<endl;cout<<"1.查询当前车道情况"<<endl;cout<<"2.查询当前便道情况"<<endl;cout<<"3.查询当前总车场统计"<<endl;cout<<"4.我想看下一小时"<<endl;cout<<"5.退出系统"<<endl;cout<<"||*****************************||"<<endl;cout<<"请选择:";cin>>choice;switch(choice){case 1:{x.print_park();};break;case 2:{y.print_park();};break;case 3:{b.printboss();};break;case 4:{b.addclock();x.car_plus();x.car_leave(B);x.showcoming();x.car_add();};break;case 5: exit(0);default: break;}}return 0;}


原创粉丝点击