processor 发表于 2005-10-29 17:41

[原创]停车场管理程序

<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 &lt;&lt; "汽车状态:"&lt;&lt;i&lt;&lt;endl;<br>      cout &lt;&lt; "汽车牌号:"&lt;&lt;car2-&gt;carno&lt;&lt;endl;<br>      cout &lt;&lt; "汽车停留的时间(小时):"&lt;&lt; car2-&gt;outtime-car2-&gt;intime&lt;&lt;endl;<br>      cout &lt;&lt; "汽车收费:"&lt;&lt;(car2-&gt;outtime-car2-&gt;intime)*o&lt;&lt;"元"&lt;&lt;endl&lt;&lt;endl;<br>} </P>
<P>int  InitStack(stack &amp;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 &amp;car1)<br>{<br>   if(s-&gt;top-s-&gt;base &gt;= s-&gt;stacksize) //栈满<br>   cout&lt;&lt;"车库已满,外面等待"&lt;&lt;endl;<br> <br>   *s-&gt;top++=car1;<br>   return 1;<br>}//进车库</P>
<P>int Pop(stack *s,car &amp;car1){<br>        if(s-&gt;top==s-&gt;base)  return ERROR;<br>        car1=*(--s-&gt;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&lt;n;n--)<br> {<br>   Pop(s1,*car1);<br>   Push(s2,*car1);//进入临时停车区<br> }<br>   Pop(s1,*car2);</P>
<P> for(;i&lt;m;m--)<br> {<br>   Pop(s2,*car1);<br>   Push(s1,*car1);//从临时停车区返回<br> }<br>   return OK;<br>}//出栈的任意元素</P>
<P>int InitQueue(Queue &amp;q)<br>{<br>   q.front=q.rear=(QNode *)malloc(sizeof(QNode));<br>   if(!q.front) exit(-1);<br>   q.front-&gt;next=NULL;<br>   return 1;<br>}//构造空队列</P>
<P>int EnQueue(Queue *q,QNode &amp;car2)<br>{<br>   QNode  *p;<br>   p=(QNode *)malloc(sizeof(QNode));<br>   if(!p) exit(OVERFLOW);<br>   *p=car2;<br>   p-&gt;next=NULL;<br>   q-&gt;rear-&gt;next=p;<br>   q-&gt;rear=p;<br>   return OK;<br>}//插入队列元素</P>
<P>int DeQueue(Queue *q,QNode &amp;car1)<br>{<br>    QNode *p;<br> if(q-&gt;front==q-&gt;rear) cout&lt;&lt;"外无车"&lt;&lt;endl;<br>    else {<br> p=q-&gt;front-&gt;next;<br> car1=*p;<br>    q-&gt;front-&gt;next=p-&gt;next;<br> if(q-&gt;rear==p) q-&gt;rear=q-&gt;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&lt;&lt;"********************************车库管理系统*****************************"&lt;&lt;endl&lt;&lt;endl;<br> cout&lt;&lt;"请输入车库的容量:";<br> cin&gt;&gt;s1.stacksize;<br> cout&lt;&lt;"请输入汽车收费单价:";<br> cin&gt;&gt;o;<br>do{<br> cout&lt;&lt;"请输入汽车状态('A'表示到达,'D'表示离去,'E'表示输入结束):";<br> cin&gt;&gt;i;<br> if(i=='A')//进车<br> {<br>      Q1=&amp;car3;<br>        cout &lt;&lt;"请输入汽车牌号 :";<br>     cin&gt;&gt;car3.data.carno;                                                                                                                                                                                                                                                                                                                                                                                                                                                       <br>        EnQueue(&amp;q3,car3); <br>      if(s1.top-s1.base&lt;s1.stacksize) <br>   { <br>   DeQueue(&amp;q3,car4);<br>   cout&lt;&lt;"请输入该车进入车库的时间(小时):";<br>            cin &gt;&gt; car4.data.intime;<br>            Push(&amp;s1,car4.data);<br>            n=s1.top-s1.base;//车库现有车辆数<br>   cout&lt;&lt;"车库停车位为:"&lt;&lt;n&lt;&lt;endl;<br>   }<br>       else if(s1.top-s1.base==s1.stacksize) <br>    {   <br>       z=x-y-s1.stacksize;//z为便道上汽车数<br>       m=z;<br>            cout&lt;&lt;"车库已满,外面等待,便道停车位为:"&lt;&lt;++m&lt;&lt;endl;<br>    }<br>        x++ ;                            // 计数器   统计汽车总数<br> }<br>   else  if(i=='D')//出车<br>   {<br>     loop: <br>     if(s1.top-s1.base==0)      {cout&lt;&lt;"车库内无车!"&lt;&lt;endl;}<br>  else{ <br>          cout&lt;&lt;"要出车库的车的停车位:"&lt;&lt;endl;  <br>          cin&gt;&gt;l;<br>       if(l&gt;s1.stacksize) {cout&lt;&lt;"输入错误!注意车库容量!"&lt;&lt;endl;goto loop;}<br>          if(l&gt;s1.top-s1.base){cout&lt;&lt;"该车位无车重新输入!"&lt;&lt;endl;goto loop;}<br>          if(s1.top-s1.base&gt;l)<br>    {  <br>     OutPopIn(&amp;s1,&amp;s2,&amp;car2,&amp;car1,l,s1.top-s1.base);     //车位不在栈顶,输出car2<br>     cout&lt;&lt;"请输入该车离开车库的时间(小时):";<br>     cin&gt;&gt;car2.outtime;<br>           Input(&amp;car2,i,o);<br>    }<br>       else<br>    {<br>         Pop(&amp;s1,car2);//车位为栈顶<br>               cout&lt;&lt;"请输入汽车离开车库的时间(小时):";<br>         cin&gt;&gt;car2.outtime;<br>         Input(&amp;car2,i,o);<br>    }<br>      y++;    //计数器  统计出库车数<br>      if(q3.front!=q3.rear&amp;&amp;x-y!=0&amp;&amp;s1.top-s1.base&lt;s1.stacksize)//注意如何判断队列元素个数<br>   {   <br>        DeQueue(&amp;q3,car4);//便道上的车辆进车库<br>     cout&lt;&lt;"车库有空车位,便道上1号车位的车进库"&lt;&lt;endl;<br>     cout&lt;&lt;"该车车号为:"&lt;&lt;car4.data.carno&lt;&lt;endl;<br>     cout&lt;&lt;"请输入该车进入车库的时间(小时):";<br>     cin&gt;&gt;car4.data.intime;<br>        Push(&amp;s1,car4.data);<br>   }<br>  }<br>   <br>   }<br>          else  if(i=='E') break;<br>            else  cout&lt;&lt;"重新输入汽车状态:"&lt;&lt;endl;<br>}while(1);<br>}<br></P>
[align=right][color=#000066][此贴子已经被作者于2005-10-29 17:45:28编辑过][/color][/align]

激情依旧 发表于 2005-10-29 20:33

   我随便看了一下。我就随便说说我的意见。说的不好不要介意。首先:“请输入汽车状态” 你的一定要大写字母。这里比较不方便。建议你加上判断小写字母的功能(只是为了程序更好)。建议不要使用c风格的语句。你明明用c++来写。但你偏偏用c风格。那不如直接用c。用c++来写。就要用类。要不就没意义。尽量不要使用#define 很多时候无意义的。如果你要用常量就用const 来定义。还有。不要用goto语句(能不用就不用)。好的地方就是你加了注释。这个我非常欣赏。让大家一看就明白。谢谢你发的帖子了。(胡乱说的)
[align=right][color=#000066][此贴子已经被作者于2005-10-29 20:45:02编辑过][/color][/align]

楠木头 发表于 2005-10-30 14:40

哥,我看不懂!!![em09]

激情依旧 发表于 2005-10-30 21:56

   看很长的程序不是那么容易看的。一般来说从主函数开始看起。然后你要明白每一行代码的作用。每段代码所实现的功能。你一个一个模快来看。弄的很透彻后在看另外一个模快。这个也要看你的毅力和耐力。你看没2分钟就没心情看下去了。那怎么能明白了。所以首先要调整好自己的心态。如果是初学者。那你根本就没必要看这么长的程序。从简单是入手。当到了一定水平在来研究它。[em01]

热情依然 发表于 2005-10-31 12:00

<P>激情说得没有错,尽量不要用goto语句,你的goto语句完全可以用while加上continue来实现,从这条题可以看出楼主的C语言学得不错.<BR>不过如果是用C++来写的会更加简单,高效率.希望楼主以后多多发贴</P>[em01][em01][em22]

qzxm 发表于 2005-11-18 19:27

<P>怎么没有MANI()<BR>那才是我需要的地方呢?<BR></P>

badstreams 发表于 2005-11-24 23:37

干吗不用STL写啊,<BR>那样不是更省事吗?<BR>

cranky 发表于 2005-11-25 00:06

<P>我这个菜鸟还是开哈腔!!加经的我肯定要看!!两位斑竹对你这东西做出了这么高的评价!!不错!!<BR><BR><BR><BR>    </P>

激情依旧 发表于 2005-11-30 11:44

  为什么不用STL写?那你去问问作者吧。我本人不太会STL。现在还在努力学着。

zhffvv 发表于 2005-12-10 20:36

[em11][em10][em10]

wanjie 发表于 2006-3-21 22:16

<P>能有能力写出这样的程序可以拿个月薪多少啊?[em29]</P>

忧伤的飞鸟 发表于 2006-4-28 23:41

[分享]

[em17][em17][em17]

激情依旧 发表于 2006-4-29 10:43

   哎~~~~~~我到现在还没去学STL.....沉沦了。..在也不像以前那样有激情了。出来工作真累人.下班后根本不想动.....不过上班的时候学了不少开发的东西了.

冰凰紫 发表于 2006-5-19 19:07

<P>都是高手,厉害~~~小弟佩服~~~!</P>

moyushion 发表于 2006-7-5 18:09

<P>有没有这个的C程序呀,急用</P>

hubin 发表于 2006-7-6 17:04

程序不错,但是你应该把它分隔成几个互相联系的文件模块,这样调试和读程都会方便的.程序最终写出来是给别人看的,你说是吗?[em01]

39393316a 发表于 2006-7-10 22:01

程序不错

似水年华 发表于 2006-11-25 18:39

<P>我也是建议用C++来写程序,这样看起来更加清楚有条理<BR></P>

爱上独 发表于 2006-12-25 14:35

<P>我好像在网上搜了这个代码后给老师验收。老师让我们改下。要机器时间,要异常处理。栈要车牌号。不是车位。唉,郁闷啊</P>

Liming_686 发表于 2007-1-3 10:12

<P>谢谢了,支持一下!留下慢慢看.</P>

页: [1] 2

编程论坛