数据结构c语言版课程设计停车场管理系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计:停车场

c语言版本的数据结构课程设计,要求用栈模拟停车场,用队列模拟便道,实现停车场的收费管理系统

停车场停满车后车会停在便道上面下面附上源码,vc:(下编译

#include

//#include //malloc

#include //获取系统时间所用函数#include //getch()

#include //设置光标信息mallco #define MaxSize 5 /*定义停车场栈长度*/

#define PRICE 0.05 /*每车每分钟收费值*/

#define BASEPRICE 0.5 //基础停车费

#define Esc 27 //退出系统

#define Exit 3 //结束对话

#define Stop 1 //停车

#define Drive 2 //取车

int jx=0,jy=32; //全局变量日志打印位置

typedef struct

{int hour;

int minute;

}Time,*PTime; /*时间结点*/

typedef struct /*定义栈元素的类型即车辆信息结点*/

{int num ; /*车牌号*/

Time arrtime; /*到达时刻或离区时刻*/

}CarNode;

typedef struct /*定义栈,模拟停车场*/

{CarNode stack[MaxSize];

int top;

}SqStackCar;

typedef struct node /*定义队列结点的类型*/

{int num; /*车牌号*/

struct node *next;

}QueueNode;

typedef struct /*定义队列,模拟便道*/ {QueueNode *front,*rear;

}LinkQueueCar;

/*函数声明*/

PTime get_time();

CarNode getcarInfo();

void qingping(int a);

void gotoxy(int x,int y);

void printlog(Time t,int n,int io,char ab,int po,double f);

void printstop(int a,int num,int x0,int y0);

void printleave(int a,int po,int num);

/*初始化栈*/

void InitSeqStack(SqStackCar *s)

{

s->top=-1;

}

/* push入站函数*/

int push(SqStackCar *s,CarNode x) //数据元素x入指针s所指的栈{

if(s->top==MaxSize-1)

return(0); //如果栈满,返回0 else

{

s->stack[++s->top]=x; //栈不满,到达车辆入栈

return(1);

}

}

/*栈顶元素出栈*/

CarNode pop(SqStackCar *s)

{

CarNode x;

if(s->top<0)

{

x.num=0;

x.arrtime.hour=0;

x.arrtime.minute=0;

return(x); //如果栈空,返回空值

}

else

{

s->top--;

return(s->stack[s->top+1]); //栈不空,返回栈顶元素

}

}

/*初始化队列*/

void InitLinkQueue(LinkQueueCar *q)

{

q->front=(QueueNode*)malloc(sizeof(QueueNode)); //产生一个新结点,作头结点

if(q->front!=NULL)

{

q->rear=q->front;

q->front->next=NULL;

q->front->num=0; //头结点的num保存队列中数据元素的个数

}

}

/*数据入队列*/

void EnLinkQueue(LinkQueueCar *q,int x)

{

QueueNode *p;

p=(QueueNode*)malloc(sizeof(QueueNode)); //产生一个新结点

p->num=x;

p->next=NULL;

q->rear->next=p; //新结点入队列

q->rear=p;

q->front->num++; //队列元素个数加1

}

/*数据出队列*/

int DeLinkQueue(LinkQueueCar *q)

{

QueueNode *p;

int n;

if(q->front==q->rear) //队空返回0

return(0);

else

{

p=q->front->next;

q->front->next=p->next;

if(p->next==NULL)

q->rear=q->front;

n=p->num;

free(p);

q->front->num--;

return(n); //返回出队的数据信息}

}

/********************* 车辆到达***************************/

//参数:停车栈停车队列车辆信息

//返回值:空

//功能:对传入的车辆进行入栈栈满则入队列

void Arrive(SqStackCar *stop,LinkQueueCar *lq,CarNode x)

{

int f;

f=push(stop,x); //入栈

if (f==0) //栈满

{

EnLinkQueue(lq,x.num); //入队

printstop(1,lq->front->num,0,23);

printlog(x.arrtime,x.num,1,'B',lq->front->num,0);

qingping(0); printf("您的车停在便道%d号车位上\n",lq->front->num); //更新对话

}

else

{

printstop(0,stop->top+1,0,23);

printlog(x.arrtime,x.num,1,'P',stop->top+1,0);

qingping(0); printf("您的车停在停车场%d号车位上\n",stop->top+1); //更新对话

}

qingping(1); printf("按任意键继续");

getch();

}

/************************** 车辆离开*************************************/

//参数:停车栈指针s1,暂存栈指针s2,停车队列指针p,车辆信息x

//返回值:空

//功能:查找栈中s1的x并出栈,栈中没有则查找队p中并出队,打印离开收费信息

void Leave(SqStackCar *s1,SqStackCar *s2,LinkQueueCar *p,CarNode x)

{

double fee=0;

int position=s1->top+1; //车辆所在车位

int n,f=0;

CarNode y;

QueueNode *q;

相关文档
最新文档