| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 597 人关注过本帖
标题:停车管理系统
只看楼主 加入收藏
为了学好C
Rank: 1
等 级:新手上路
帖 子:52
专家分:8
注 册:2010-4-3
结帖率:95%
收藏
已结贴  问题点数:10 回复次数:2 
停车管理系统
//停车管理系统:注以栈模拟停车场,以顺序队模拟候车场
#include "stdio.h"
#include "malloc.h"
#define N 3  // 停车场内最多的停车数
#define M 4//候车场最多的停车数
#define price 2 //单位时间内的停车价格
typedef struct
{   int CarNo[N];  //车牌号
    int CarTime[N]; //车辆到达时间
    int top;
}sqstack;
typedef struct
{   int CarNo[M];//车牌号
    int front,rear;//队首和队尾指针
}sqqueue;
/*--------顺序栈基本算法-----*/
void initstack(sqstack *s)     //初始化栈
{  
    s=(sqstack*)malloc(sizeof(sqstack));
    s->top =-1;
}
int stackempty(sqstack *s)   //判栈空
{return (s->top==-1);}

int stackfull(sqstack *s)   //判栈满
{return (s->top==N-1);}

int push(sqstack *s,int x1,int x2)  //进栈
{   if (s->top ==N-1)
    return 0;
    else
        s->top ++;
        s->CarNo[s->top]=x1;
        s->CarTime [s->top ]=x2;
        return 1;
}
int pop(sqstack *s,int x1,int x2)  //出栈
{   if(s->top ==-1)
    return 0;
    else
        x1=s->CarNo[s->top--];
        x2=s->CarTime[s->top--];
        return 1;
}
void dispstack(sqstack *s)   //从栈顶到栈底输出元素
{
    int i;
    for (i=s->top ;i>=0;i--)
        printf("%d",s->CarNo[i]);
    printf("\n");
}
/*--------队列的基本算法-----*/
void initqueue(sqqueue *q)    //初始化队列
{
    q=(sqqueue*)malloc(sizeof(sqqueue));
    q->front =q->rear=0;
}
int queueempty(sqqueue *q)   //判队列空
{
    if(q->front==q->rear)
        return 1;
    else
        return (q->front==q->rear);
}
int queuefull(sqqueue *q)   //判队满
{
    if((q->rear +1)%M==q->front )
        return 1;
    else
        return ((q->rear +1)%M==q->front);
}
int enqueue(sqqueue *q,int x)  //进队
{
    if((q->rear +1)%M==q->front )
        return 0;
    else
    {
        q->rear =(q->rear +1)%M;
        q->CarNo[q->rear]=x;
        return 1;
    }
}
int outqueue(sqqueue *q,int x)    //出队列
{
    if(q->front ==q->rear)
        return 0;
    else
        q->front =(q->front +1)%M;
        x=q->CarNo[q->front];
        return 1;
}
void dispqueue(sqqueue *q)
{
    int i;
    i=(q->front+1)%M;
    printf("%d ",q->CarNo[i]);
    while ((q->rear-i+M)%M>0)
    {
        i=(i+1)%M;
        printf("%d ",q->CarNo[i]);
    }
    printf("\n");
}
void main()
{
    int choice;
    int no,x1,time,x2;
    int i,j;
    sqstack *st,*st1;
    sqqueue *qu;
    initstack(st);
    initstack(st1);
    initqueue(qu);
    while(choice)
    {
        printf("输入指令(1:到达 2:离开 3:停车场 4:便道 0:退出):\n");
        scanf("%d%d%d",&choice,&no,&time);
        switch(choice)
        {
        case 1:
            if(!stackfull(st))
            {
                push(st,no,time);
                printf(">>停车位置:%d\n",st->top+1);
            }
            else
            {
                if(!queuefull(qu))
                {
                    enqueue(qu,no);
                    printf(">>便道位置:%d\n",qu->rear);
                }
                else
                    printf(">>便道已满,不能停车:");
            }
            break;
        case 2:
            for(i=0;i<=st->top &&st->CarNo[i]==no;i++)
                if(i>st->top )
                    printf(">>未找到该编号汽车");
                else
                {
                    for(j=i;j<st->top ;j++)
                    {
                        pop(st,x1,x2);
                        push(st1,x1,x2);   //st1为临时栈
                    }
                    pop(st,x1,x2);         //该汽车离开
                    printf(">>%d汽车停车费用:%d\n",no,(time-x2)*price);
                    while(!stackempty(st1))
                    {
                        pop(st1,x1,x2);
                        push(st,x1,x2);
                    }
                    if(!queueempty(qu))
                    {
                        outqueue(qu,x1);
                        push(st,x1,time);
                    }
                }
        break;
        case 3:
            if(!stackempty(st))
            {  
                printf(">>停车场中的为车辆:");
                dispstack(st);
            }
            else
                printf(">>停车场无车辆");
            break;
        case 4:
            if(!queueempty(qu))
            {
                printf(">>便道上的车辆为:");
                dispqueue(qu);
            }
            else
                printf(">>便道上无车辆:");
            break;
        case 0:
            if(!stackempty(st))
            {  
                printf(">>停车场中的为车辆:");
                dispstack(st);
            }
            if(!queueempty(qu))
            {
                printf(">>便道上的车辆为:");
                dispqueue(qu);
            }
            break;
        default:
            printf(">>输入的命令错误:");
            break;
        }
    }
}

设有一个可停放N辆汽车的狭长汽车厂,只有一个大门供车辆出入,车辆按先后到达顺序从最里面向大门口停放,如果以放满N辆汽车,再来的车辆只能放在候车场里,一旦有汽车从停车里离开,排在候车场里的汽车便可以依次进入停车场。停车场中的某辆汽车要离开,在它之后进入停车场的都要让路,使他退出停车场,等该车离开后,其他车辆按原来的次序进入停车场。每辆车载离开时都要收费,停在候车场里的不用收费,在候车场里车辆保持原来的次序
。。内存错误,,帮忙看下


        


   



   
搜索更多相关主题的帖子: 系统 停车 管理 
2010-04-24 16:30
清风凌波
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:104
专家分:147
注 册:2009-9-24
收藏
得分:7 
好!!不错……
2010-04-24 17:37
为了学好C
Rank: 1
等 级:新手上路
帖 子:52
专家分:8
注 册:2010-4-3
收藏
得分:0 
有错的啊。。求助啊。。谁帮忙调试下哦。。。谢谢!!!
2010-04-24 18:34
快速回复:停车管理系统
数据加载中...
 
   



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

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