数据结构c语言版课程设计停车场管理系统
课程设计:停车场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); //如果栈满 ,返回 0else{s-stack[++s-top]=x; //栈不满 ,到达车辆入栈return(1);}} /*栈顶元素出栈*/CarNode pop(SqStackCar *s) {CarNode x;if(s-toptop--;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) //队空返回 0return(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,S