《数据构造c语言版课程设计停车场管理系统_2.docx》由会员分享,可在线阅读,更多相关《数据构造c语言版课程设计停车场管理系统_2.docx(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据构造c语言版课程设计停车场管理系统当前位置:文档视界数据构造c语言版课程设计停车场管理系统数据构造c语言版课程设计停车场管理系统当前位置:文档视界数据构造c语言版课程设计停车场管理系统数据构造c语言版课程设计停车场管理系统#defineEsc27/退出系统#defineExit3/结束对话#defineStop1/停车#defineDrive2/取车intjx=0,jy=32;/全局变量日志打印位置typedefstructinthour;intminute;Time,*PTime;/*时间结点*/typedefstruct/*定义栈元素的类型即车辆信息结点*/intnum;/*车牌号*/
2、Timearrtime;/*到达时刻或离区时刻*/CarNode;typedefstruct/*定义栈,模拟停车场*/CarNodestackMaxSize;inttop;SqStackCar;typedefstructnode/*定义队列结点的类型*/intnum;/*车牌号*/structnode*next;QueueNode;typedefstruct/*定义队列,模拟便道*/QueueNode*front,*rear;LinkQueueCar;/*函数声明*/PTimeget_time();CarNodegetcarInfo();voidqingping(inta);voidgotox
3、y(intx,inty);voidprintlog(Timet,intn,intio,charab,intpo,doublef);voidprintstop(inta,intnum,intx0,inty0);voidprintleave(inta,intpo,intnum);/*初始化栈*/voidInitSeqStack(SqStackCar*s)s-top=-1;/*push入站函数*/intpush(SqStackCar*s,CarNodex)/数据元素x入指针s所指的栈if(s-top=MaxSize-1)return(0);/假如栈满,返回0elses-stack+s-top=x;/
4、栈不满,到达车辆入栈return(1);/*栈顶元素出栈*/CarNodepop(SqStackCar*s)CarNodex;if(s-toptop-;return(s-stacks-top+1);/栈不空,返回栈顶元素/*初始化队列*/voidInitLinkQueue(LinkQueueCar*q)q-front=(QueueNode*)malloc(sizeof(QueueNode);/产生一个新结点,作头结点if(q-front!=NULL)q-rear=q-front;q-front-next=NULL;q-front-num=0;/头结点的num保存队列中数据元素的个数/*数据入队
5、列*/voidEnLinkQueue(LinkQueueCar*q,intx)QueueNode*p;p=(QueueNode*)malloc(sizeof(QueueNode);/产生一个新结点p-num=x;p-next=NULL;q-rear-next=p;/新结点入队列q-rear=p;q-front-num+;/队列元素个数加1/*数据出队列*/intDeLinkQueue(LinkQueueCar*q)QueueNode*p;intn;if(q-front=q-rear)/队空返回0return(0);elsep=q-front-next;q-front-next=p-next;i
6、f(p-next=NULL)q-rear=q-front;n=p-num;free(p);q-front-num-;return(n);/返回出队的数据信息/*车辆到达*/参数:停车栈停车队列车辆信息/返回值:空/功能:对传入的车辆进行入栈栈满则入队列voidArrive(SqStackCar*stop,LinkQueueCar*lq,CarNodex)intf;f=push(stop,x);/入栈if(f=0)/栈满EnLinkQueue(lq,x.num);/入队printstop(1,lq-front-num,0,23);printlog(x.arrtime,x.num,1,B,lq-f
7、ront-num,0);qingping(0);printf(您的车停在便道%d号车位上n,lq-front-num);/更新对话elseprintstop(0,stop-top+1,0,23);printlog(x.arrtime,x.num,1,P,stop-top+1,0);qingping(0);printf(您的车停在停车场%d号车位上n,stop-top+1);/更新对话qingping(1);printf(按任意键继续);getch();/*车辆离开*/参数:停车栈指针s1,暂存栈指针s2,停车队列指针p,车辆信息x/返回值:空/功能:查找栈中s1的x并出栈,栈中没有则查找队p中
8、并出队,打印离开收费信息voidLeave(SqStackCar*s1,SqStackCar*s2,LinkQueueCar*p,CarNodex)doublefee=0;intposition=s1-top+1;/车辆所在车位intn,f=0;CarNodey;QueueNode*q;while(s1-top-1)&(f!=1)/当栈不空且未找到xy=pop(s1);if(y.num!=x.num)n=push(s2,y);position-;elsef=1;if(y.num=x.num)/找到xgotoxy(33,17);printf(%d:%-2d,(x.arrtime.hour-y.a
9、rrtime.hour),(x.arrtime.minute-y.arrtime.minute);fee=(x.arrtime.hour-y.arrtime.hour)*60+(x.arrtime.minute-y.arrtime.minute)*PRICE+BASEPRICE;gotoxy(48,17);printf(%2.1f元n,fee);qingping(0);printf(确认您的车辆信息);qingping(1);printf(按任意键继续);getch();while(s2-top-1)y=pop(s2);f=push(s1,y);n=DeLinkQueue(p);if(n!=0
10、)y.num=n;y.arrtime=x.arrtime;f=push(s1,y);printleave(p-front-num+1,position,s1-top+1);/出栈动画ji队列成员入栈printlog(x.arrtime,x.num,0,P,position,fee);printlog(y.arrtime,y.num,1,P,s1-top+1,0);elseprintleave(0,position,s1-top+2);printlog(x.arrtime,x.num,0,P,position,fee);else/若栈中无xwhile(s2-top-1)/复原栈y=pop(s2)
11、;f=push(s1,y);q=p-front;f=0;position=1;while(f=0&q-next!=NULL)/当队不空且未找到xif(q-next-num!=x.num)q=q-next;position+;else/找到xq-next=q-next-next;p-front-num-;if(q-next=NULL)p-rear=p-front;gotoxy(33,17);printf(0:0);gotoxy(48,17);printf(0元);qingping(0);printf(您的车将离便道);qingping(1);printf(按任意键继续);getch();prin
12、tleave(-1,position,p-front-num+1);/出队动画printlog(x.arrtime,x.num,0,B,position,0);f=1;if(f=0)/未找到xqingping(0);printf(停车场和便道上均无您的车);qingping(1);printf(按任意键继续);getch();/*获取系统时间*/返回PTime类型PTimeget_time()Time*t;t=newTime;time_ttimer;structtm*tblock;timer=time(NULL);tblock=localtime(t-minute=tblock-tm_min;
13、t-hour=tblock-tm_hour;returnt;/*移动光标*/蒋光标移动到x,y点voidgotoxy(intx,inty)COORDcoord;coord.X=x;coord.Y=y+3;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);/*画图*/画出系统界面voidpanitPL()gotoxy(20,4);printf(*对话框*);intx=18,y=6;/起始点inta24=2,0,0,1,-2,0,0,-1;/方向for(inti=0;i/*清屏函数*/更新对话框前将原对话晴空voidqi
14、ngping(inta)if(a=0)/清空小王的对话gotoxy(28,8);printf();gotoxy(28,9);printf();gotoxy(28,8);elseif(a=1)/清空顾客的对话gotoxy(28,11);printf();gotoxy(28,12);printf();gotoxy(28,13);printf();gotoxy(28,11);else/清空车辆信息gotoxy(31,15);printf();gotoxy(48,15);printf();gotoxy(33,17);printf();gotoxy(48,17);printf();gotoxy(31,1
15、5);/用上下键移动选择intgetkey()charc;intx=28,y=11;while(1)gotoxy(x,11);printf();gotoxy(x,12);printf();gotoxy(x,13);printf();gotoxy(x,y);printf();c=getch();if(c=13)returny-10;/enter键返回当前选项if(c!=-32)continue;/不是方向键进行下次循环c=getch();if(c=72)if(y11)y-;/上if(c=80)if(yqingping(0);printf(请输入您的车牌号n);qingping(1);printf
16、(在下面输入车辆信息);qingping(2);scanf(%d,&(x.num);T=get_time();x.arrtime=*T;gotoxy(48,15);printf(%d:%d,x.arrtime.hour,x.arrtime.minute);getch();returnx;/打印停车场voidprintcar()gotoxy(0,20);/printf();printf(出场暂放区12345);printf(-);printf(主车道);printf(-);printf(121110987654321);printf();printf();printf(便道停车区12345);p
17、rintf();printf(停车场管理日志nn);printf(时间车牌号进(1)/出(0)车位(B便道P停车场)收费(元);/打印日志记录voidprintlog(Timet,intn,intio,charab,intpo,doublef)jy+;gotoxy(jx,jy);/printf(时间车牌号进(1)/出(0)车位(B便道P停车场)收费(元);if(io=0)printf(/%2.1f,f);gotoxy(jx,jy);printf(/%d/%c:%d,io,ab,po);gotoxy(jx,jy);printf(%d:%d/%d,t.hour,t.minute,n);voidprintstop(inta,intnum,intx0,inty0)staticchar*car=【】;/intx0=0,y0=23;intx=0,y=28;if(a=0)x=(num+6)*6;for(;x0x;x0-)gotoxy(x0,y0);printf(%s,car);Sleep(50);gotoxy(x0,y0);printf();gotoxy(x,y);printf(%s,car);elsex=(12-num)*6;y=y-3;for(;x0num)gotoxy(12-num)*6,y);printf();gotoxy(x,y);printf(%s,car);
限制150内