- /***********************************************
- * 课题名称: 停车场管理
- ***********************************************/
- #include<stdio.h>
- #include<stdlib.h>
- #include<malloc.h>
- #define maxsize 3 //定义只有3个停车位
- #define MAX 100 //限制便车道
- /***************汽车基本信息***************/
- typedef struct{
- int CarNum; //记录车牌
- char al[2]; //到达或离开
- int a_time; //到达的时间
- int l_time; //离开的时间
- }CarInfo;
- /*************停车场便道结构体*************/
- //结构体定义
- typedef struct node{
- CarInfo data;
- struct node *next;
- }Qnode,*PQNode;
- typedef struct{
- PQNode front,rear; //头、尾指针
- int length;
- }LinkQueue,*PLinkQueue;
- /************停车场结构体******************/
- typedef struct{
- CarInfo data1[maxsize];
- CarInfo data2[maxsize];//暂存汽车信息
- CarInfo zancun;
- int top;
- } SeqStack,*PSeqStack;
- /************进入便道**************/
- //初始化一个空队列
- PLinkQueue Init_LinkQueue(void)
- {
- PLinkQueue Q;
- Q=(PLinkQueue)malloc(sizeof(LinkQueue));
- if(Q)
- {
- Q->front=NULL;
- Q->rear=NULL;
- Q->length=1;
- }
- return Q;
- }
- //判断队空
- int Empty_LinkQueue(PLinkQueue Q)
- {
- if(Q && Q->front==NULL && Q->rear==NULL)
- return 1;
- else
- return 0;
- }
- /**进入便车道(队列)**/
- int In_LinkQueue(PLinkQueue Q,CarInfo *x)
- { /*入队参数:链队列和待入队元素x*/
- PQNode p=(PQNode)malloc(sizeof(Qnode));
- if(!p)
- {
- printf("\\n>>>>Overloading!<<<<\\n");
- return (0);
- }
- printf("_________________________________________________________________________________\\n");
- printf(" 顾客,您好!欢迎来到便车道等候!\\n");
- printf("--------------------------------------------------------------------------------\\n");
- p->data=*x;
- p->next=NULL;
- if(Empty_LinkQueue(Q))
- {
- Q->rear=Q->front=p;
- printf("\\n\\t目前您的车可停在便车道上的位置是:1.\\n");
- printf("--------------------------------------------------------------------------------");
- Q->length++;
- return 1;
- }
- else
- {
- Q->rear->next=p;
- Q->rear=p;
- printf("\\n\\t目前您的车子可停在便车道上的位置是: %d.\\n",Q->length);
- Q->length++;
- return 1;
- }
- }
- /**出队进入停车场**/
- int Out_LinkQueue(PLinkQueue Q,PSeqStack x)
- {
- PQNode p;
- if(Empty_LinkQueue(Q))
- {
- printf("\\n目前便车道上面没有车!\\n");
- return 0;
- }
- if(x->top<maxsize)
- {
- printf("\\n通知:停在便车道上的第一辆车请注意。停车场有车离开,现在您可以进入。\\n");
- x->data1[x->top-1]=Q->front->data; /**队列头进入停车场头**/
- p=Q->front;/***将Q的头指针暂存在p中***/
- Q->front=Q->front->next;
- printf("请输入您到达这里的时间:\\t");
- scanf("%d",&(x->data1[x->top-1].a_time));
- printf("\\n\\t您好!欢迎进入停车场!让您久等了!非常感谢您的等待!");
- }
- free(p);
- if(!Q->front)
- Q->rear=NULL;
- return 1;
- }
- /***********计算停车费用************/
- int CostSum(int a_time,int l_time)
- {
- int hourly_fee=10;
- int sum;
- printf("\\n每个小时,我们会收取:%d 元",hourly_fee);
- sum=hourly_fee*((l_time)-(a_time));
- printf("\\t所以,您一共需要支付 %d 元\\n",sum);
- printf("-------------------------------------------------------------------------------");
- return(sum);
- }
- //初始化
- PSeqStack Init_SeqSrack(void)
- {
- PSeqStack S;
- S=(PSeqStack)malloc(sizeof(SeqStack));
- if(S)
- S->top=-1;
- return S;
- }
- int Empty_SeqStack(PSeqStack S)
- {/*判断栈是否为空;入口参数:顺序栈;返回值:1表示为空,0表示非空*/
- if(S->top==-1)
- return 1;//栈空
- else
- return 0;
- }
- /***********进入停车场***********/
- int Push_SeqStack(PLinkQueue Q,PSeqStack S,CarInfo *m)
- {/*在栈顶插入一新元素x;入口参数:顺序栈;返回值:1表示成功,0表示失败*/
- if(S->top==maxsize-1)
- {
- printf("\\n*******************************************************************************");
- printf("\\n 亲,实在很抱歉。由于停车场已满,请在便车道上等候。谢谢合作。\\n");
- printf("*******************************************************************************");
- /*调用队列函数,进入便道中*/
- In_LinkQueue(Q,m);
- return 1;
- }
- else
- {
- S->top++;
- S->data1[S->top]=*m;
- printf("\\t车牌号码是 [ ");
- printf("%d ] 的车子在停车场第 %d 个位置。\\n\\n",S->data1[S->top].CarNum,S->top+1);
- printf("--------------------------------------------------------------------------------");
- return 1;
- }
- }
- /***********离开停车场***********/
- int Pop_SeqStack(PSeqStack S,CarInfo *x)
- {
- int i,j,t;
- int m=0;
- if(Empty_SeqStack(S))
- {
- printf("\\n目前停车场没有车!\\n");
- printf("-------------------------------------------------------------------------------");
- return 0;
- }
- else
- {
- for(i=0;i<=S->top;i++)
- {
- if(x->CarNum==S->data1[i].CarNum)
- {
- /************计算费用************/
- *x=S->data1[i];/**将之前进入车场的信息给x**/
- printf("\\n\\t\\t系统检测到您的车在我们停车场里。\\n");
- printf("________________________________________________________________________________");
- printf("\\n\\t\\t欢迎进入消费统计系统。\\n");
- printf("请输入现在您离开的时间是:");
- scanf("%d",&(x->l_time));
- printf("-------------------------------------------------------------------------------");
- printf("\\n\\t您到达这里的时间是:%d",x->a_time);
- printf("\\t您离开的时间是:%d",x->l_time);
- CostSum(x->a_time,x->l_time);
- /**********第i辆车要出去**********/
- S->zancun=S->data1[i];
- for(j=S->top;j>i;j--)
- for(t=0;t<i;t++)
- {
- S->data2[t]=S->data1[j]; //前j辆汽车移出
- m++;
- }
- for(j=S->top-1;j>=i;j--)
- for(t=m;t>=0;t--)
- {
- S->data1[j]=S->data2[t]; //将j辆车重新移进车库
- }
- return 1;
- }//if
- else continue;
- } //for
- printf("\\n停车场没有此牌号的车!\\n");
- printf("-------------------------------------------------------------------------------");
- return 0;
- }//else
- }//:~
- /*********每个汽车的基本信息*********/
- int Init_Car(PSeqStack S,PLinkQueue Q,CarInfo *tr)
- {
- int i;
- for(i=0;i<20;i++)
- {
- jmp2:printf("\\n(a/l?)Input Here :");
- scanf("%s",&(tr->al[2]));
- switch(tr->al[2])
- {
- case 'a':
- case 'A':
- printf("--------------------------------------------------------------------------------");
- printf("\\n 您好!欢迎进入停车场! \\n");
- printf("请输入您的车牌号码:");
- scanf("%d",&(tr->CarNum));
- printf("请输入您到达这里的时间:");
- scanf("%d",&(tr->a_time));
- printf("________________________________________________________________________________");
- printf("\\n\\n你到达这里的时间是:%d",tr->a_time);
- /*调用进入停车场系统函数*/
- Push_SeqStack(Q,S,tr);
- break;
- case 'l':
- case 'L':
- printf("\\n请输入您的车牌号:");
- scanf("%d",&(tr->CarNum));
- Pop_SeqStack(S,tr);/**离开停车场**/
- Out_LinkQueue(Q,S);/**便车道进栈**/
- break;
- default:
- printf("\\n输入有误!请重新输入!\\n");
- goto jmp2;//跳回到输入部分
- }//switch
- }
- return 1;
- }
- int main()
- {
- CarInfo *trr;
- trr=(CarInfo*)malloc(sizeof(CarInfo));
- PLinkQueue Q=Init_LinkQueue();
- PSeqStack S=Init_SeqSrack();
- printf("\\n================================================================================\\n");
- printf(" 您好!欢迎登陆停车场管理系统!我们将竭诚为您服务! \\n");
- printf(" 您是要进入还是要离开?(提示:a代表近入,l代表离开) ");
- printf("\\n================================================================================\\n");
- Init_Car(S,Q,trr);
- return 1;
- }
- //该片段来自于http://www.codesnippet.cn/detail/120320148984.html
来源: http://www.codesnippet.cn/detail/120320148984.html