数据结构c语言版课程设计停车场管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计:停车场
c语言版本的数据结构课程设计,要求用栈模拟停车场,用队列模拟便道,实现停车场的收费管理系统
停车场停满车后车会停在便道上面
下面附上源码,vc:(下编译
#include
//#include
#include
#include
#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();
}