[原创]停车场管理程序
<P>请各位高手指点</P><P><br>#define STACK_INIT_SIZE 100<br>#include "iostream.h"<br>#include "stdlib.h"<br>#define OK 1<br>#define ERROR 0<br>#define OVERFLOW -2</P>
<P>struct car{<br> int carno;<br> float intime;<br> float outtime;<br>};//停车场内的汽车</P>
<P>struct stack{<br> car *base;<br> car *top;<br> int stacksize;<br>};//车库</P>
<P>struct QNode{<br> car data;<br> QNode* next;<br>};//通道上的汽车</P>
<P>struct Queue{<br> QNode *front;<br> QNode *rear;<br>};//通道</P>
<P>void Input(car * car2 ,char i,int o){ //输入函数<br> cout << "汽车状态:"<<i<<endl;<br> cout << "汽车牌号:"<<car2->carno<<endl;<br> cout << "汽车停留的时间(小时):"<< car2->outtime-car2->intime<<endl;<br> cout << "汽车收费:"<<(car2->outtime-car2->intime)*o<<"元"<<endl<<endl;<br>} </P>
<P>int InitStack(stack &s){ <br> s.base=(car *)malloc (STACK_INIT_SIZE *sizeof(car));<br> if(!s.base) exit(-1);<br> s.top=s.base;<br> s.stacksize=STACK_INIT_SIZE;<br> return 1;<br>}//构造空栈<br> <br>int Push(stack *s,car &car1)<br>{<br> if(s->top-s->base >= s->stacksize) //栈满<br> cout<<"车库已满,外面等待"<<endl;<br> <br> *s->top++=car1;<br> return 1;<br>}//进车库</P>
<P>int Pop(stack *s,car &car1){<br> if(s->top==s->base) return ERROR;<br> car1=*(--s->top);<br> return OK;<br>}//出栈顶 </P>
<P>int OutPopIn(stack *s1, stack *s2,car *car2,car *car1,int i,int n)<br>{ <br> int m=n;<br> for(;i<n;n--)<br> {<br> Pop(s1,*car1);<br> Push(s2,*car1);//进入临时停车区<br> }<br> Pop(s1,*car2);</P>
<P> for(;i<m;m--)<br> {<br> Pop(s2,*car1);<br> Push(s1,*car1);//从临时停车区返回<br> }<br> return OK;<br>}//出栈的任意元素</P>
<P>int InitQueue(Queue &q)<br>{<br> q.front=q.rear=(QNode *)malloc(sizeof(QNode));<br> if(!q.front) exit(-1);<br> q.front->next=NULL;<br> return 1;<br>}//构造空队列</P>
<P>int EnQueue(Queue *q,QNode &car2)<br>{<br> QNode *p;<br> p=(QNode *)malloc(sizeof(QNode));<br> if(!p) exit(OVERFLOW);<br> *p=car2;<br> p->next=NULL;<br> q->rear->next=p;<br> q->rear=p;<br> return OK;<br>}//插入队列元素</P>
<P>int DeQueue(Queue *q,QNode &car1)<br>{<br> QNode *p;<br> if(q->front==q->rear) cout<<"外无车"<<endl;<br> else {<br> p=q->front->next;<br> car1=*p;<br> q->front->next=p->next;<br> if(q->rear==p) q->rear=q->front;<br> }<br> return OK;<br>}//出队列</P>
<P>void main()<br>{<br> stack s1,s2;//s1表示车库,s2表示临时车库<br> Queue q3;//表示停车便道<br> car car1,car2;<br> QNode car3,car4;<br> QNode *Q1;<br> int l,o,z;<br> char i;<br> int n=0,m=1,x=0,y=0;<br> InitStack(s1);//车库<br> InitStack(s2);//等车区<br> InitQueue(q3);//通道<br> cout<<"********************************车库管理系统*****************************"<<endl<<endl;<br> cout<<"请输入车库的容量:";<br> cin>>s1.stacksize;<br> cout<<"请输入汽车收费单价:";<br> cin>>o;<br>do{<br> cout<<"请输入汽车状态('A'表示到达,'D'表示离去,'E'表示输入结束):";<br> cin>>i;<br> if(i=='A')//进车<br> {<br> Q1=&car3;<br> cout <<"请输入汽车牌号 :";<br> cin>>car3.data.carno; <br> EnQueue(&q3,car3); <br> if(s1.top-s1.base<s1.stacksize) <br> { <br> DeQueue(&q3,car4);<br> cout<<"请输入该车进入车库的时间(小时):";<br> cin >> car4.data.intime;<br> Push(&s1,car4.data);<br> n=s1.top-s1.base;//车库现有车辆数<br> cout<<"车库停车位为:"<<n<<endl;<br> }<br> else if(s1.top-s1.base==s1.stacksize) <br> { <br> z=x-y-s1.stacksize;//z为便道上汽车数<br> m=z;<br> cout<<"车库已满,外面等待,便道停车位为:"<<++m<<endl;<br> }<br> x++ ; // 计数器 统计汽车总数<br> }<br> else if(i=='D')//出车<br> {<br> loop: <br> if(s1.top-s1.base==0) {cout<<"车库内无车!"<<endl;}<br> else{ <br> cout<<"要出车库的车的停车位:"<<endl; <br> cin>>l;<br> if(l>s1.stacksize) {cout<<"输入错误!注意车库容量!"<<endl;goto loop;}<br> if(l>s1.top-s1.base){cout<<"该车位无车重新输入!"<<endl;goto loop;}<br> if(s1.top-s1.base>l)<br> { <br> OutPopIn(&s1,&s2,&car2,&car1,l,s1.top-s1.base); //车位不在栈顶,输出car2<br> cout<<"请输入该车离开车库的时间(小时):";<br> cin>>car2.outtime;<br> Input(&car2,i,o);<br> }<br> else<br> {<br> Pop(&s1,car2);//车位为栈顶<br> cout<<"请输入汽车离开车库的时间(小时):";<br> cin>>car2.outtime;<br> Input(&car2,i,o);<br> }<br> y++; //计数器 统计出库车数<br> if(q3.front!=q3.rear&&x-y!=0&&s1.top-s1.base<s1.stacksize)//注意如何判断队列元素个数<br> { <br> DeQueue(&q3,car4);//便道上的车辆进车库<br> cout<<"车库有空车位,便道上1号车位的车进库"<<endl;<br> cout<<"该车车号为:"<<car4.data.carno<<endl;<br> cout<<"请输入该车进入车库的时间(小时):";<br> cin>>car4.data.intime;<br> Push(&s1,car4.data);<br> }<br> }<br> <br> }<br> else if(i=='E') break;<br> else cout<<"重新输入汽车状态:"<<endl;<br>}while(1);<br>}<br></P>
[align=right][color=#000066][此贴子已经被作者于2005-10-29 17:45:28编辑过][/color][/align]
[align=right][color=#000066][此贴子已经被作者于2005-10-29 20:45:02编辑过][/color][/align]
哥,我看不懂!!![em09] 看很长的程序不是那么容易看的。一般来说从主函数开始看起。然后你要明白每一行代码的作用。每段代码所实现的功能。你一个一个模快来看。弄的很透彻后在看另外一个模快。这个也要看你的毅力和耐力。你看没2分钟就没心情看下去了。那怎么能明白了。所以首先要调整好自己的心态。如果是初学者。那你根本就没必要看这么长的程序。从简单是入手。当到了一定水平在来研究它。[em01] <P>激情说得没有错,尽量不要用goto语句,你的goto语句完全可以用while加上continue来实现,从这条题可以看出楼主的C语言学得不错.<BR>不过如果是用C++来写的会更加简单,高效率.希望楼主以后多多发贴</P>[em01][em01][em22] <P>怎么没有MANI()<BR>那才是我需要的地方呢?<BR></P> 干吗不用STL写啊,<BR>那样不是更省事吗?<BR> <P>我这个菜鸟还是开哈腔!!加经的我肯定要看!!两位斑竹对你这东西做出了这么高的评价!!不错!!<BR><BR><BR><BR> </P> 为什么不用STL写?那你去问问作者吧。我本人不太会STL。现在还在努力学着。 [em11][em10][em10] <P>能有能力写出这样的程序可以拿个月薪多少啊?[em29]</P>
[分享]
[em17][em17][em17] 哎~~~~~~我到现在还没去学STL.....沉沦了。..在也不像以前那样有激情了。出来工作真累人.下班后根本不想动.....不过上班的时候学了不少开发的东西了. <P>都是高手,厉害~~~小弟佩服~~~!</P> <P>有没有这个的C程序呀,急用</P> 程序不错,但是你应该把它分隔成几个互相联系的文件模块,这样调试和读程都会方便的.程序最终写出来是给别人看的,你说是吗?[em01] 程序不错 <P>我也是建议用C++来写程序,这样看起来更加清楚有条理<BR></P> <P>我好像在网上搜了这个代码后给老师验收。老师让我们改下。要机器时间,要异常处理。栈要车牌号。不是车位。唉,郁闷啊</P> <P>谢谢了,支持一下!留下慢慢看.</P>页:
[1]
2
