版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 .PAGE16 / NUMPAGES16课程设计:停车场c语言版本的数据结构课程设计,要求用栈模拟停车场,用队列模拟便道,实现停车场的收费管理系统停车场停满车后车会停在便道上面下面附上源码,vc:(下编译#include /#include /malloc#include /获取系统时间所用函数 #include /getch()#include /设置光标信息 mallco#define MaxSize 5 /*定义停车场栈长度*/#define PRICE 0.05 /*每车每分钟收费值*/#define BASEPRICE 0.5 /基础停车费#define Esc 27 /退出系统#
2、define Exit 3/结束对话#define Stop 1/停车#define Drive 2/取车int jx=0,jy=32; /全局变量日志打印位置typedef structint hour; int minute;Time,*PTime; /*时间结点*/typedef struct /*定义栈元素的类型即车辆信息结点*/int num ; /*车牌号*/ Time arrtime; /*到达时刻或离区时刻*/CarNode;typedef struct /*定义栈,模拟停车场*/CarNode stackMaxSize; int top;SqStackCar;typedef
3、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(
4、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);/如果栈满,返回0elses-stack+s-top=x;/栈不满,到达车辆入栈return(1); /*栈顶元素出栈*/CarNode pop(SqStackCar *s) Car
5、Node x;if(s-toptop-;return(s-stacks-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) Queue
6、Node *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);elsep=q-front-next;q-front-next=p-next;if(p-next=NULL)q-rear=q-front;
7、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);
8、qingping(0);printf(您的车停在便道%d号车位上n,lq-front-num);/更新对话elseprintstop(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中并出队,打印离开收
9、费信息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;while(s1-top -1)&(f!=1) /当栈不空且未找到xy=pop(s1);if(y.num!=x.num) n=push(s2,y);position-;elsef=1;if(y.num=x.num) /找到xgotoxy(33,17);printf(%d:%-2d,(x.arrtime.ho
10、ur-y.arrtime.hour),(x.arrtime.minute-y.arrtime.minute) );fee=(x.arrtime.hour-y.arrtime.hour)*60+(x.arrtime.minute-y.arrtime.minute)*PRICE+BASEPRICE;gotoxy(48,17);printf(%2.1f元n,fee);qingping(0);printf(确认您的车辆信息);qingping(1); printf(按任意键继续);getch();while(s2-top-1) y=pop(s2);f=push(s1,y);n=DeLinkQueue(
11、p);if(n!=0)y.num=n;y.arrtime=x.arrtime;f=push(s1,y);printleave(p-front-num+1,position,s1-top+1); /出栈动画ji队列成员入栈printlog(x.arrtime,x.num,0,P,position,fee);printlog(y.arrtime,y.num,1,P,s1-top+1,0);elseprintleave(0,position,s1-top+2);printlog(x.arrtime,x.num,0,P,position,fee);else /若栈中无x while(s2-top -1
12、) /还原栈 y=pop(s2); f=push(s1,y);q=p-front;f=0;position=1;while(f=0&q-next!=NULL) /当队不空且未找到xif(q-next-num!=x.num)q=q-next;position+;else /找到xq-next=q-next-next;p-front-num-;if(q-next=NULL)p-rear=p-front;gotoxy(33,17);printf(0:0);gotoxy(48,17);printf(0元);qingping(0);printf(您的车将离便道);qingping(1);printf(按
13、任意键继续);getch();printleave(-1,position,p-front-num+1); /出队动画printlog(x.arrtime,x.num,0,B,position,0);f=1;if(f=0) /未找到xqingping(0);printf(停车场和便道上均无您的车);qingping(1);printf(按任意键继续);getch();/*获取系统时间*/返回PTime类型PTime get_time()Time *t;t=new Time;time_t timer; struct tm *tblock; timer=time(NULL); tblock=loc
14、altime(&timer); t-minute=tblock-tm_min;t-hour=tblock-tm_hour;return t;/*移动光标*/光标移动到(x,y)点void gotoxy(int x,int y)COORD coord;coord.X=x;coord.Y=y+3;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);/*画图*/画出系统界面void panitPL()gotoxy(20,4);printf(*对话框*);int x=18,y=6; /起始点int a24=2,0,0,1,-2
15、,0,0,-1; /方向for(int i=0;i2 ;i+)for(int j=0; j20; j+)x+=ai0;y+=ai1;gotoxy(x,y);printf();x+=ai0;y+=ai1;gotoxy(x,y);if(i=0) printf();elseprintf();for(j=0; j); c=getch();if(c=13) return y-10;/enter键返回当前选项if(c!=-32)continue;/不是方向键进行下次循环c=getch(); if(c=72) if(y11) y-; /上if(c=80) if(y13) y+; /下/输入车辆信息CarNo
16、de getcarInfo()PTime T;CarNode x;qingping(0);printf(请输入您的车牌号n);qingping(1);printf(在下面输入车辆信息);qingping(2);scanf(%d,&(x.num);T=get_time();x.arrtime=*T;gotoxy(48,15);printf(%d:%d,x.arrtime.hour,x.arrtime.minute);getch();return x;/打印停车场void printcar()gotoxy(0,20);/ printf();printf( 出场暂放区 1 2 3 4 5 );pri
17、ntf( );printf( 主车道 );printf( );printf( 12 11 10 9 8 7 6 5 4 3 2 1 );printf( );printf( );printf( 便道 停车区 1 2 3 4 5 );printf( );printf( 停车场管理日志nn);printf( 时间 车牌号 进(1)/出(0) 车位(B便道P停车场) 收费(元) );/打印日志记录void printlog(Time t,int n,int io,char ab,int po,double f)jy+;gotoxy(jx,jy);/printf( 时间 车牌号 进(1)/出(0) 车位
18、(B便道P停车场) 收费(元) );if(io=0)printf( / %2.1f,f);gotoxy(jx,jy);printf( / %d / %c:%d,io,ab,po);gotoxy(jx,jy);printf( %d:%d / %d,t.hour,t.minute,n); void printstop(int a,int num,int x0,int y0)static char *car=;/int x0=0,y0=23;int x=0,y=28;if(a=0)x=(num+6)*6;for(;x072;x0+)gotoxy(x0,y0);printf(%s,car);Sleep
19、(30);gotoxy(x0,y0);printf( );for(;y0 x;x0-)gotoxy(x0,y0);printf(%s,car);Sleep(50);gotoxy(x0,y0);printf( );gotoxy(x,y);printf(%s,car);elsex=(12-num)*6;y=y-3;for(;x0num)gotoxy(12-num)*6,y);printf( );gotoxy(x,y);printf(%s,car);for(;xx0;x-)gotoxy(x,y-2); printf(%s,car);Sleep(30);gotoxy(x,y-2);printf( );
20、elsei=num+1;for(;numpo;num-)x=(num+6)*6;y=28;for(;x21;y-)gotoxy(x,y);printf(%s,car);Sleep(50);gotoxy(x,y);printf( );for(;x(i-num+6)*6;x-)gotoxy(x,y);printf(%s,car);Sleep(30);gotoxy(x,y);printf( );gotoxy(x,y);printf(%s,car);x=(po+6)*6;y=28; for(;x23;y-)gotoxy(x,y);printf(%s,car);Sleep(50);gotoxy(x,y)
21、;printf( );for(;x0;x-)gotoxy(x,y);printf(%s,car);Sleep(30);gotoxy(x,y);printf( );num+;for(;i-num0;num+)x=(i-num+6)*6;y=21;for(;x72;x+)gotoxy(x,y);printf(%s,car);Sleep(30);gotoxy(x,y);printf( );for(;y(num-1+6)*6;x-)gotoxy(x,y);printf(%s,car);Sleep(30);gotoxy(x,y);printf( );gotoxy(x,y);printf(%s,car);if(a0)x=66;y=25;gotoxy(x,y);printf( );gotoxy(x,y-2); printf(%s,car);Sleep(100);if(12a)gotoxy(12-a)*6,y);printf( );if(a1) gotoxy(x,y);printf(%s,car);printstop(0,i-1,x,y-2);/* main */ int main(void)SqStackCar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 桥梁工程终止合同协议
- 桥梁建设监理协议
- 贝雷片租赁清洁合同
- 办公室租赁定金合同
- 装潢设计师聘用协议书
- 消防设施预付款保障协议
- 城市公共交通设施建设合同协议
- 农业项目招投标违规追究规定
- 旅游业试用期合同风险防范
- 灯光音响租赁终止转租协议
- 2024年肠道传染病培训课件:疾病预防新视角
- 2024年度拼多多店铺托管经营合同2篇
- 2023年北京肿瘤医院(含社会人员)招聘笔试真题
- 2024年化学检验员(中级工)技能鉴定考试题库(附答案)
- 旅行社分店加盟协议书(2篇)
- 勘察工作质量及保证措施
- 城镇燃气经营安全重大隐患判定及燃气安全管理专题培训
- 个人和企业间资金拆借合同
- 重大火灾隐患判定方法
- 2024年除雪服务定制协议样本版
- 七年级地理上册 3.2海陆变迁说课稿 (新版)商务星球版
评论
0/150
提交评论