1、这个时间管理员,可以对照表收费了。6.查看 当你要查看停车场所停车的信息时,你可以选择 3。同样,选择 3 确定后会提 示你要查看的车号,然后则会把信息打印在界面上: 系统会告诉你这俩停在停车场里面的那个位置上。7.退出 当你一切操作完了后,就可以选择退出了,输入 4 停车场管理系统 随便按个键就退出该系统了。四、程序代码#includeconio.hiomanipfstreamstring#include windows.husing namespace std;#define Max_Size 2/停车的最大容量 #define HourFare 2 /每小时的停车费用 int Count
2、ForStack=0; /栈里现有的车数 int CountForQueue=0; /排队等候的车数 typedef struct char Condition;/到达或者离开的状态 int Arrivetime;/到达时间,默认为-1,表示没有到达 int Leavetime;/离开时间,默认为-1,表示没有离开 int License;/车牌号 CarNode;/保存每辆车的信息 typedef struct/栈的定义 CarNode *base;/栈底指针 CarNode *top;/栈顶指针 int Stacksize;/栈的最大容量 CarStack; typedef struct
3、QNode char Condition;/到达或者离开的状态 QNode *next; QNode; typedef struct/队列的定义 QNode *front;/对头指针 QNode * rear;/队尾指针 Queue; bool InitStack(CarStack &S1)/初始化栈 S1 S1.base=(CarNode*)malloc(Max_Size*sizeof(CarNode); if(!S1.base) cout栈 S1 内存分配失败endl; return false; S1.top=S1.base; S1.Stacksize=Max_Size; return
4、true; bool InitQueue(Queue &Q) Q.front=(QNode*)malloc(sizeof(QNode);Q.front) coutnext=NULL; bool EnQueue(Queue &Q,QNode &e)/插入元素 e 为 Q 的新的队尾元素 QNode *p=(QNode *)malloc(sizeof(QNode);p) p 内存分配失败 p-Arrivetime=e.Arrivetime;Leavetime=e.Leavetime;Condition=e.Condition;License=e.License;/将 e 赋给 P Q.rear-n
5、ext=p; Q.rear=p; bool DeQueue(Queue &t)/出队列函数 if(Q.front=Q.rear) 队列为空! QNode *p=Q.front-next; t.Arrivetime=p-Arrivetime; t.Condition=p-Condition; t.Leavetime=p-Leavetime; t.License=p-License;next=p- if(Q.rear=p) Q.rear=Q.front; free(p);void InitCarNode(CarNode &C,char condition,int arrivetime,int le
6、avetime,int license) C.Arrivetime=arrivetime; C.Condition=condition; C.Leavetime=leavetime; C.License=license; bool Push(CarStack &S1,CarNode &car)/插入新的元素 car 为的栈顶元素 if(S1.top-S1.base=S1.Stacksize)此栈已满,不能压入新的信息 return false; (*S1.top).Arrivetime=car.Arrivetime; (*S1.top).Condition=car.Condition; (*S
7、1.top).Leavetime=car.Leavetime; (*S1.top).License=car.License; +S1.top;/栈顶指针上移 bool Pop(CarStack &t)/出栈操作 if(S1.top=S1.base)栈 S1 为空,不能执行出栈操作 -S1.top;/栈顶指针下移 t.Arrivetime=(*S1.top).Arrivetime; t.Condition=(*S1.top).Condition; t.Leavetime=(*S1.top).Leavetime; t.License=(*S1.top).License; bool IsStackF
8、ull(CarStack &S1)/判断 S1 栈是否已满 return true; else bool IsStackEmpty(CarStack &S1)/判断 S1 栈是否已空 if(S1.top=S1.base) else bool IsQueueEmpty(Queue &Q)/判断队列是否为空 if(Q.front=Q.rear) bool SearchInStack(CarStack &S1,int a)/a 表示要查找的车牌号,如果在停车场里 面,就返回 true bool tag=false;IsStackEmpty(S1)/如果栈 S1 非空 CarNode *p=S1.to
9、p-1; while(p!=S1.base) if(*p).License=a) tag=true; -p; if(*p).License=a) tag=true; return tag; bool SearchInQueue(Queue &Q,int a)/a 表示要查找的车牌号,如果在通道里面,就 返回 trueIsQueueEmpty(Q)/如果队列非空 QNode *p=Q.front- while(p!=Q.rear) if(*p).License =a) tag=true; p=p- /退出此 while 循环时 p 指向最后一个元素 if(*p).License =a) void
10、 InCar(CarStack &S1,Queue &Q,int a1,int a2)/表示进入车辆,a1 表示到达时 间,a2 表示车牌号码 if(SearchInStack(S1,a2)车号a2已经存在于停车场内,输入有误 return; if(SearchInQueue(Q,a2)已经存在于通道内,输入有误 if(IsStackFull(S1)/如果堆栈已满,说明停车场已满,需要停车在通道里面 QNode qnode; qnode.Arrivetime=-1;/在通道里面不收费,所以不计时 qnode.Condition=A; qnode.Leavetime=-1;/定义为-1,说明还没
11、有开始离开 qnode.License=a2; EnQueue(Q,qnode);/停在通道上 +CountForQueue;车号:qnode.License停在通道的第CountForQueue号 位置 CarNode carnode; carnode.Arrivetime=a1; carnode.Condition= carnode.Leavetime=-1; carnode.License=a2; Push(S1,carnode); +CountForStack;车号: carnode.License, 到达时间:carnode.Arrivetime 点,停在停车场的第CountForS
12、tack号位置 void Sreach(CarStack &Q,int a) if(SearchInStack(S1,a) a已存在停车场里面的第号位 置 if(SearchInQueue(Q,a) cout停车场已满,车号存在于通道里面的第 号位置,在次等候 return; else 对不起!你查找的车号不在停车场里面 void OutCar(CarStack &Q,int a1,int a2)/出车函数,a1 表示离开时间, a2 表示车牌号码 if(SearchInQueue(Q,a2) 存在于通道里面,还没有进入停车场,不能离开 SearchInStack(S1,a2) 该车不在停车场
13、内 return; CarStack tempstack; InitStack(tempstack);/新建一个栈,存放让路的汽车 bool tag1=false;/标志这个停车场出车以前是否已满,默认为没有满 tag1=IsStackFull(S1); bool tag2=true;/标志通道是否有汽车在等待,默认为通道为空 tag2=IsQueueEmpty(Q); CarNode temp;/用来保存暂时取出的汽车 bool tag3=false; while(1) Pop(S1,temp); if(temp.License=a2) if(a1temp.Arrivetime) cout离
14、开失败! tag3=true; Push(tempstack,temp); else 现在离开停车场,所用时间为:a1-temp.Arrivetime小时,应收 RMB 为:(a1-temp.Arrivetime)*HourFaretag; while(tag!=1&tag!=2&=3&=4) int a1; unsigned int a2; switch(tag) case 1:请输入到达的车号: cina1;请输入到达的时间:a2; InCar(S1,Q,a2,a1); Sreach(S1,Q,a1); break; case 2:请输入离开的车号:请输入离开的时间: OutCar(S1,
15、Q,a2,a1); case 3:请输入你要查看的车号: Sreach(S1,Q,a1); case 4: showmenu(S1,Q); void loging(CarStack & char Administrator15,password15; int a; printf(t*n);t* *nt* 欢迎使用停车场管理系统 *n printf(nt(提示:账号跟密码一样就行)nnnnt 请输入管理员帐号: fflush(stdin); gets(Administrator);ttttttttttt 请输入密码: fflush(stdin); gets(password); /比较用户名和密
16、码 if(strcmp(Administrator,Administrator) = 0 & strcmp(password,Administrator) = 0) nnttt 您已成功登陆,请稍侯!nnttt / 延迟 for(a = 0;20;a+) Sleep(150); /进入页面时清屏 system(clsnnttt 您输入的帐号或者密码错误!void main() CarStack carstack; InitStack(carstack);/建立并且初始化用于停车场的堆栈 Queue carQueue; InitQueue(carQueue);/建立并且初始化用于通道的队列 lo
17、ging(carstack,carQueue);五、心的体会 在生活与工作中许多领域都用到数据结构,但关键是如何将问题模型转换,变换成我们熟知的知识应用,即抽象具体化。首先是要把所学的知识重新好 好巩固下,其次,每次课程设计总会有些东西不懂的,这时我们就要上网去查资 料,这样会让我们养成一个好的自主学习的习惯。这次的课程设计,我开始是分 析了这个系统需要做些什么,然后分析要用到哪些代码,哪些结构,哪些算法开 实现这些功能。它让我明白了栈和队列实 际会用在哪些方面,同时我有些不懂的,我会看书,或是在网上找,慢慢的也增 加了自己的知识量。 这次的停车场系统做的很简单,和真正的停车场系统来比,根本就不算什么 了。真正的停车场是不会那么退出停车场的,每次离开都要人家后面的让道,还不被
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1