| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 12513 人关注过本帖, 2 人收藏
标题:[原创]停车场管理程序
只看楼主 加入收藏
processor
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-10-27
收藏(2)
 问题点数:0 回复次数:29 
[原创]停车场管理程序

请各位高手指点


#define STACK_INIT_SIZE 100
#include "iostream.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2

struct car{
int carno;
float intime;
float outtime;
};//停车场内的汽车

struct stack{
car *base;
car *top;
int stacksize;
};//车库

struct QNode{
car data;
QNode* next;
};//通道上的汽车

struct Queue{
QNode *front;
QNode *rear;
};//通道

void Input(car * car2 ,char i,int o){ //输入函数
cout << "汽车状态:"<<i<<endl;
cout << "汽车牌号:"<<car2->carno<<endl;
cout << "汽车停留的时间(小时):"<< car2->outtime-car2->intime<<endl;
cout << "汽车收费:"<<(car2->outtime-car2->intime)*o<<"元"<<endl<<endl;
}

int InitStack(stack &s){
s.base=(car *)malloc (STACK_INIT_SIZE *sizeof(car));
if(!s.base) exit(-1);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return 1;
}//构造空栈

int Push(stack *s,car &car1)
{
if(s->top-s->base >= s->stacksize) //栈满
cout<<"车库已满,外面等待"<<endl;

*s->top++=car1;
return 1;
}//进车库

int Pop(stack *s,car &car1){
if(s->top==s->base) return ERROR;
car1=*(--s->top);
return OK;
}//出栈顶

int OutPopIn(stack *s1, stack *s2,car *car2,car *car1,int i,int n)
{
int m=n;
for(;i<n;n--)
{
Pop(s1,*car1);
Push(s2,*car1);//进入临时停车区
}
Pop(s1,*car2);

for(;i<m;m--)
{
Pop(s2,*car1);
Push(s1,*car1);//从临时停车区返回
}
return OK;
}//出栈的任意元素

int InitQueue(Queue &q)
{
q.front=q.rear=(QNode *)malloc(sizeof(QNode));
if(!q.front) exit(-1);
q.front->next=NULL;
return 1;
}//构造空队列

int EnQueue(Queue *q,QNode &car2)
{
QNode *p;
p=(QNode *)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
*p=car2;
p->next=NULL;
q->rear->next=p;
q->rear=p;
return OK;
}//插入队列元素

int DeQueue(Queue *q,QNode &car1)
{
QNode *p;
if(q->front==q->rear) cout<<"外无车"<<endl;
else {
p=q->front->next;
car1=*p;
q->front->next=p->next;
if(q->rear==p) q->rear=q->front;
}
return OK;
}//出队列

void main()
{
stack s1,s2;//s1表示车库,s2表示临时车库
Queue q3;//表示停车便道
car car1,car2;
QNode car3,car4;
QNode *Q1;
int l,o,z;
char i;
int n=0,m=1,x=0,y=0;
InitStack(s1);//车库
InitStack(s2);//等车区
InitQueue(q3);//通道
cout<<"********************************车库管理系统*****************************"<<endl<<endl;
cout<<"请输入车库的容量:";
cin>>s1.stacksize;
cout<<"请输入汽车收费单价:";
cin>>o;
do{
cout<<"请输入汽车状态('A'表示到达,'D'表示离去,'E'表示输入结束):";
cin>>i;
if(i=='A')//进车
{
Q1=&car3;
cout <<"请输入汽车牌号 :";
cin>>car3.data.carno;
EnQueue(&q3,car3);
if(s1.top-s1.base<s1.stacksize)
{
DeQueue(&q3,car4);
cout<<"请输入该车进入车库的时间(小时):";
cin >> car4.data.intime;
Push(&s1,car4.data);
n=s1.top-s1.base;//车库现有车辆数
cout<<"车库停车位为:"<<n<<endl;
}
else if(s1.top-s1.base==s1.stacksize)
{
z=x-y-s1.stacksize;//z为便道上汽车数
m=z;
cout<<"车库已满,外面等待,便道停车位为:"<<++m<<endl;
}
x++ ; // 计数器 统计汽车总数
}
else if(i=='D')//出车
{
loop:
if(s1.top-s1.base==0) {cout<<"车库内无车!"<<endl;}
else{
cout<<"要出车库的车的停车位:"<<endl;
cin>>l;
if(l>s1.stacksize) {cout<<"输入错误!注意车库容量!"<<endl;goto loop;}
if(l>s1.top-s1.base){cout<<"该车位无车重新输入!"<<endl;goto loop;}
if(s1.top-s1.base>l)
{
OutPopIn(&s1,&s2,&car2,&car1,l,s1.top-s1.base); //车位不在栈顶,输出car2
cout<<"请输入该车离开车库的时间(小时):";
cin>>car2.outtime;
Input(&car2,i,o);
}
else
{
Pop(&s1,car2);//车位为栈顶
cout<<"请输入汽车离开车库的时间(小时):";
cin>>car2.outtime;
Input(&car2,i,o);
}
y++; //计数器 统计出库车数
if(q3.front!=q3.rear&&x-y!=0&&s1.top-s1.base<s1.stacksize)//注意如何判断队列元素个数
{
DeQueue(&q3,car4);//便道上的车辆进车库
cout<<"车库有空车位,便道上1号车位的车进库"<<endl;
cout<<"该车车号为:"<<car4.data.carno<<endl;
cout<<"请输入该车进入车库的时间(小时):";
cin>>car4.data.intime;
Push(&s1,car4.data);
}
}

}
else if(i=='E') break;
else cout<<"重新输入汽车状态:"<<endl;
}while(1);
}

[此贴子已经被作者于2005-10-29 17:45:28编辑过]

搜索更多相关主题的帖子: 管理程序 停车场 car struct define 
2005-10-29 17:41
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
   我随便看了一下。我就随便说说我的意见。说的不好不要介意。首先:“请输入汽车状态” 你的一定要大写字母。这里比较不方便。建议你加上判断小写字母的功能(只是为了程序更好)。建议不要使用c风格的语句。你明明用c++来写。但你偏偏用c风格。那不如直接用c。用c++来写。就要用类。要不就没意义。尽量不要使用#define 很多时候无意义的。如果你要用常量就用const 来定义。还有。不要用goto语句(能不用就不用)。好的地方就是你加了注释。这个我非常欣赏。让大家一看就明白。谢谢你发的帖子了。(胡乱说的)

[此贴子已经被作者于2005-10-29 20:45:02编辑过]



生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-10-29 20:33
楠木头
Rank: 1
等 级:新手上路
帖 子:51
专家分:0
注 册:2005-10-18
收藏
得分:0 
哥,我看不懂!!!

2005-10-30 14:40
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
   看很长的程序不是那么容易看的。一般来说从主函数开始看起。然后你要明白每一行代码的作用。每段代码所实现的功能。你一个一个模快来看。弄的很透彻后在看另外一个模快。这个也要看你的毅力和耐力。你看没2分钟就没心情看下去了。那怎么能明白了。所以首先要调整好自己的心态。如果是初学者。那你根本就没必要看这么长的程序。从简单是入手。当到了一定水平在来研究它。

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-10-30 21:56
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

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


c++/C + 汇编 = 天下无敌
2005-10-31 12:00
qzxm
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2005-11-3
收藏
得分:0 

怎么没有MANI()
那才是我需要的地方呢?


一切皆有可能!
2005-11-18 19:27
badstreams
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2005-11-23
收藏
得分:0 
干吗不用STL写啊,
那样不是更省事吗?
2005-11-24 23:37
cranky
Rank: 1
等 级:新手上路
威 望:1
帖 子:89
专家分:0
注 册:2005-11-21
收藏
得分:0 

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




一个不知道天高地厚,想问什么时候才是满壶水的鬼 --------------半壶水响叮当
2005-11-25 00:06
激情依旧
Rank: 1
等 级:新手上路
威 望:2
帖 子:524
专家分:0
注 册:2005-4-4
收藏
得分:0 
  为什么不用STL写?那你去问问作者吧。我本人不太会STL。现在还在努力学着。

生是编程人!!!!死是编程鬼!!!!颠峰人生!!!焚尽编程!!! 爱已严重死机!情必须重新启动!情人已和服务器断开连接!网恋也需要重新拨号!-----激情依旧
2005-11-30 11:44
zhffvv
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-12-10
收藏
得分:0 
2005-12-10 20:36
快速回复:[原创]停车场管理程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029493 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved