C++数据结构停车场管理

合集下载

数据结构 停车场管理 C++实现

数据结构 停车场管理 C++实现

实验报告一、实验目的1.掌握栈的数据类型描述及栈的特点。

2.掌握栈的顺序和链式两种存储结构的特点及算法描述。

3.掌握五种基本运算及算法在两种不同存储结构上的实现。

4.掌握队列的数据类型描述及链式存储结构的特点和算法描述。

5.掌握队列的五种基本运算及在链式存储结构上的实现。

二、实验内容停车场管理。

设有一个可以停放n辆汽车的狭长停车场(先进后出),它直有一个大门可以供车辆进出。

车辆按到停车场的时间先后依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已经放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车离开,则排在便道上的第一辆车就可以进入停车场。

停车场若有其它车辆要离开,在它之后进入停车场的车必须先退出停车场为它让路,待其车开出停车场后,这些车在按原来的次序进停车场。

每辆车在离开停车场时,都应该根据它在停车场内停留的时间长短交费。

如果停留在便道上的车没进停车场就要离开,允许其离开,不收停车费,并且仍然保持在便道上的车辆次序。

试编程模拟停车场管理。

三、实验与算法分析可以将停车场定义为一个顺序栈s1,便道定义为一个链队列q,而停车场中的某个车辆要离开,则在它后面进入停车场的车必须让道,让其离开,故还必须有一个临时的顺序栈s2,存放让道的车辆。

当有车辆进停车场时,直接进入s1栈,若s1栈满,则进入便道(链队列q)。

若有s1中车辆x离开时,先让在x后面进栈的车从s1退栈,并进栈到s2中,让x离开并收取停车费,然后,再把s2中的所有元素退栈并重新进栈s1,最后,将链队列q的队头元素进栈到s1中,并删除队头元素。

若有链队列q(便道)中的元素y离开时,从链队列中删除该元素即可,不收停车费。

车辆的数据可以表示为(车辆编号,到达/离开时间)。

根据问题要求,在停车场内选择栈结构,来管理车辆,这样可以满足题目要求,让车辆先进后出。

停车位满后,停在便道上的车辆用队列这种结构,可以先来先进停车场。

C++数据结构停车场管理

C++数据结构停车场管理

数据结构实验报告实验题目:停车场管理学生姓名:班级:学号:问题描述设有一个停车场,它是利用一个南北向的狭窄通道建成,北端封闭,大门在最南端。

最先到达的汽车停放在最北端,后面到达的汽车从北至南依次顺序停放。

停车场只能停放n 辆汽车。

当停车场停满n辆车后,后面到达的汽车只能在门外的便道上等候。

一旦有汽车开走,便道上等候的第一辆车就可以开入停车场停放。

当停车场内某辆汽车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该车开出大门外,其他汽车再按原次序返回车场。

每辆停放在车场内的汽车在离开时必须按它停放时间的长短交纳费用。

例题分析每到达一辆汽车,先检查停车场栈是否已满,若未满则该车进入停车场停放(入栈操作),并将该车的车号和停放时刻记录在停车场栈的相应元素中,同时显示该车在停车场内的停放位置。

反之,若停车场已满,则该车排到便道上等候的汽车队列最后(入队列操作),并将该车的车号信息记录在汽车队列的相应结点内,同时显示该车在便道上的停放位置。

若要取一辆汽车,则需依次进行下述操作:将阻挡在它后面的汽车退出(停车场栈的出栈操作),并将这些汽车临时存放在另一个辅助栈中(辅助栈的入栈操作);开走要取的汽车(停车场栈的出栈操作),并显示该车应交纳的费用;依次从辅助栈中开出汽车(辅助栈出栈操作),开回停车场中(停车场栈的入栈操作);这时停车场已有一个空车位,便道上等候的第一辆汽车则可以开进停车场内停放(汽车队列的出队列操作和停车场栈的入栈操作)。

程序源代码#include<iostream>#include<conio.h>#include<iomanip>#include<fstream>#include<string>#include <stdlib.h>#include <windows.h>using namespace std;#define Max_Size 2//停车的最大容量#define HourFare 2 //每小时的停车费用int CountForStack=0; //栈里现有的车数int CountForQueue=0; //排队等候的车数typedef struct{char Condition;//到达或者离开的状态int Arrivetime;//到达时间,默认为-1,表示没有到达int Leavetime;//离开时间,默认为-1,表示没有离开int License;//车牌号}CarNode;//保存每辆车的信息typedef struct//栈的定义{CarNode *base;//栈底指针CarNode *top;//栈顶指针int Stacksize;//栈的最大容量}CarStack;typedef struct QNode{char Condition;//到达或者离开的状态int Arrivetime;//到达时间,默认为-1,表示没有到达int Leavetime;//离开时间,默认为-1,表示没有离开int License;//车牌号QNode *next;}QNode;typedef struct//队列的定义QNode *front;//对头指针QNode * rear;//队尾指针}Queue;bool InitStack(CarStack &S1)//初始化栈S1{S1.base=(CarNode*)malloc(Max_Size*sizeof(CarNode));if(!S1.base){cout<<"栈S1 内存分配失败"<<endl;return false;}S1.top=S1.base;S1.Stacksize=Max_Size;return true;}bool InitQueue(Queue &Q){Q.front=(QNode*)malloc(sizeof(QNode));if(!Q.front){cout<<"队列Q 内存分配失败!"<<endl;return false;}Q.rear=Q.front;Q.front->next=NULL;return true;}bool EnQueue(Queue &Q,QNode &e)//插入元素e 为Q 的新的队尾元素QNode *p=(QNode *)malloc(sizeof(QNode));if(!p){cout<<"p 内存分配失败"<<endl;return false;}p->Arrivetime=e.Arrivetime;p->Leavetime=e.Leavetime;p->Condition=e.Condition;p->License=e.License;//将e 赋给Pp->next=NULL;Q.rear->next=p;Q.rear=p;return true;}bool DeQueue(Queue &Q,QNode &t)//出队列函数{if(Q.front==Q.rear){cout<<"队列为空!"<<endl;return false;}QNode *p=Q.front->next;t.Arrivetime=p->Arrivetime;t.Condition=p->Condition;t.Leavetime=p->Leavetime;t.License=p->License;Q.front->next=p->next;if(Q.rear==p)Q.rear=Q.front;}free(p);return true;}void InitCarNode(CarNode &C,char condition,int arrivetime,int leavetime,int license) {C.Arrivetime=arrivetime;C.Condition=condition;C.Leavetime=leavetime;C.License=license;}bool Push(CarStack &S1,CarNode &car)//插入新的元素car 为的栈顶元素{if(S1.top-S1.base>=S1.Stacksize){cout<<"此栈已满,不能压入新的信息"<<endl;return false;}(*S1.top).Arrivetime=car.Arrivetime;(*S1.top).Condition=car.Condition;(*S1.top).Leavetime=car.Leavetime;(*S1.top).License=car.License;++S1.top;//栈顶指针上移return true;}bool Pop(CarStack &S1,CarNode &t)//出栈操作{if(S1.top==S1.base)cout<<"栈S1 为空,不能执行出栈操作"<<endl;return false;}--S1.top;//栈顶指针下移t.Arrivetime=(*S1.top).Arrivetime;t.Condition=(*S1.top).Condition;t.Leavetime=(*S1.top).Leavetime;t.License=(*S1.top).License;return true;}bool IsStackFull(CarStack &S1)//判断S1 栈是否已满{if(S1.top-S1.base>=S1.Stacksize)return true;elsereturn false;}bool IsStackEmpty(CarStack &S1)//判断S1 栈是否已空{if(S1.top==S1.base)return true;elsereturn false;}bool IsQueueEmpty(Queue &Q)//判断队列是否为空{if(Q.front==Q.rear)return true;elsereturn false;}bool SearchInStack(CarStack &S1,int a)//a 表示要查找的车牌号,如果在停车场里面,就返回true{bool tag=false;if(!IsStackEmpty(S1))//如果栈S1 非空{CarNode *p=S1.top-1;while(p!=S1.base){if((*p).License==a)tag=true;--p;}if((*p).License==a)tag=true;}return tag;}bool SearchInQueue(Queue &Q,int a)//a 表示要查找的车牌号,如果在通道里面,就返回true{bool tag=false;if(!IsQueueEmpty(Q))//如果队列非空{QNode *p=Q.front->next;while(p!=Q.rear){if((*p).License ==a)tag=true;p=p->next;}//退出此while 循环时p 指向最后一个元素if((*p).License ==a)tag=true;}return tag;}void InCar(CarStack &S1,Queue &Q,int a1,int a2)//表示进入车辆,a1 表示到达时间,a2 表示车牌号码{if(SearchInStack(S1,a2)){cout<<"车号"<<a2<<"已经存在于停车场内,输入有误"<<endl;return;}if(SearchInQueue(Q,a2)){cout<<"车号"<<a2<<"已经存在于通道内,输入有误"<<endl;return;}if(IsStackFull(S1))//如果堆栈已满,说明停车场已满,需要停车在通道里面{QNode qnode;qnode.Arrivetime=-1;//在通道里面不收费,所以不计时qnode.Condition='A';qnode.Leavetime=-1;//定义为-1,说明还没有开始离开qnode.License=a2;EnQueue(Q,qnode);//停在通道上++CountForQueue;cout<<"车号:"<<qnode.License<<"停在通道的第"<<CountForQueue<<"号位置"<<endl;}else{CarNode carnode;carnode.Arrivetime=a1;carnode.Condition='A';carnode.Leavetime=-1;carnode.License=a2;Push(S1,carnode);++CountForStack;cout<<"车号:"<<carnode.License<<",到达时间:"<<carnode.Arrivetime<<" 点,停在停车场的第"<<CountForStack<<"号位置"<<endl;}}void Sreach(CarStack &S1,Queue &Q,int a){if(SearchInStack(S1,a)){cout<<"车号:"<<a<<"已存在停车场里面的第"<<CountForStack<<"号位置"<<endl;return;}if(SearchInQueue(Q,a)){cout<<"停车场已满,车号"<<a<<"存在于通道里面的第"<<CountForQueue<<"号位置,在次等候"<<endl;return;}else{cout<<"对不起!你查找的车号不在停车场里面"<<endl;return;}}void OutCar(CarStack &S1,Queue &Q,int a1,int a2)//出车函数,a1 表示离开时间,a2 表示车牌号码{if(SearchInQueue(Q,a2)){cout<<"车号"<<a2<<"存在于通道里面,还没有进入停车场,不能离开"<<endl;return;}if(!SearchInStack(S1,a2)){cout<<"车号"<<a2<<"该车不在停车场内"<<endl;return;}CarStack tempstack;InitStack(tempstack);//新建一个栈,存放让路的汽车bool tag1=false;//标志这个停车场出车以前是否已满,默认为没有满tag1=IsStackFull(S1);bool tag2=true;//标志通道是否有汽车在等待,默认为通道为空tag2=IsQueueEmpty(Q); CarNode temp;//用来保存暂时取出的汽车bool tag3=false;while(1){Pop(S1,temp);if(temp.License==a2){if(a1<temp.Arrivetime){cout<<"离开失败!"<<endl;tag3=true;Push(tempstack,temp);}else{cout<<"车号:"<<a2<<"现在离开停车场,所用时间为:"<<a1-temp.Arrivetime<<"小时,应收RMB 为:"<<(a1-temp.Arrivetime)*HourFare<<"元"<<endl;}break;}elsePush(tempstack,temp);//进入暂存栈} 则把前面倒出的车再次放while(!IsStackEmpty(tempstack))//如果临时栈不空,入停车场{Pop(tempstack,temp);Push(S1,temp);}QNode tempqnode;//用来暂时保存从通道出来的汽车if(tag1==true&&tag2==false&&tag3==false)//如果出车前停车场已满,并且通道不为空,并且离开没有失败{DeQueue(Q,tempqnode);--CountForQueue;temp.Arrivetime=a1;temp.Condition=tempqnode.Condition;temp.Leavetime=tempqnode.Leavetime;temp.License=tempqnode.License;Push(S1,temp);}if(tag3==false)//如果停车通道是空的,停车场没有满,并且离开成功{--CountForStack;}}}void showmenu(CarStack &S1,Queue &Q){cout<<"******************************选择菜单*******************************"<<endl;cout<<" 1: 停车"<<endl;cout<<" 2: 离开停车场"<<endl;cout<<" 3: 查看车辆信息"<<endl;cout<<" 4: 退出系统"<<endl;cout<<"*****************************请按键选择******************************"<<endl;int tag;cin>>tag;while(tag!=1&&tag!=2&&tag!=3&&tag!=4)cin>>tag;int a1;unsigned int a2;switch(tag){case 1:cout<<"请输入到达的车号:"<<endl;cin>>a1;cout<<"请输入到达的时间:"<<endl;cin>>a2;InCar(S1,Q,a2,a1);Sreach(S1,Q,a1);break;case 2:cout<<"请输入离开的车号:"<<endl; cin>>a1;cout<<"请输入离开的时间:"<<endl; cin>>a2;OutCar(S1,Q,a2,a1);break;case 3:cout<<"请输入你要查看的车号:"<<endl;cin>>a1;Sreach(S1,Q,a1);break;case 4:return;break;}showmenu(S1,Q);}void main(){CarStack carstack;InitStack(carstack);//建立并且初始化用于停车场的堆栈Queue carQueue;InitQueue(carQueue);//建立并且初始化用于通道的队列showmenu(carstack,carQueue);}。

停车场管理c语言pta

停车场管理c语言pta

停车场管理c语言pta
停车场管理系统是一个常见的项目,可以使用C语言来实现。

这个系统可以包括车辆进入和离开的记录、收费计算、停车位管理
等功能。

在PTA(Programming Teaching Assistant)上实现停车
场管理系统可以通过以下步骤进行:
1. 数据结构设计,首先,需要设计合适的数据结构来存储车辆
信息、停车位状态等。

可以使用结构体来表示车辆信息,使用数组
或链表来管理停车位的状态。

2. 车辆进入和离开记录,编写函数来处理车辆进入和离开的记录,包括记录车辆的进入时间、离开时间,以及相应的费用计算。

3. 收费计算,根据停车时间和车辆类型(例如小型车、大型车)来计算停车费用。

可以设置不同的收费标准,并编写函数来进行费
用计算。

4. 停车位管理,设计算法来管理停车位的分配和释放,确保停
车场的停车位能够合理利用。

5. 用户界面,可以使用C语言的控制台来实现简单的用户界面,让用户可以输入车辆信息、查询停车费用等操作。

在PTA上实现停车场管理系统需要考虑到输入输出的格式,以
及对各种异常情况的处理。

同时,还需要编写测试用例来验证程序
的正确性和稳定性。

总之,通过合理的数据结构设计、功能模块划分和用户界面实现,可以在PTA上使用C语言实现停车场管理系统。

这样的项目可
以帮助学生加深对C语言的理解,并锻炼编程能力。

数据结构(C语言版)停车场管理(完美版)

数据结构(C语言版)停车场管理(完美版)

数据结构(C语言版)停车场管理(完美版)#include#include#include#define OK 1#define OVERFLOW -2#define SIZE 2 //停车场位置数typedef int Status;typedef struct Car1{int number; //车号int ar_time; //到达时间}CarNode;typedef struct{CarNode *base; //堆栈底CarNode *top; //堆栈顶int stacksize;}Park;typedef struct Car2{int number; //车号int ar_time; //到达时间struct Car2 *next;}*CarPtr;typedef struct{ //便道CarPtr front; //便道的队列的对头CarPtr rear; //便道的队列的队尾int length;}Shortcut;Status InitStack(Park &P){ //初始化停车场P.base=(CarNode*)malloc(SIZE*sizeof(Car1));if(!P.base)exit(OVERFLOW);P.top=P.base;P.stacksize=0;return OK;}Status Push(Park &P,CarNode e){ //车进入停车场*P.top++=e;++P.stacksize;return OK;}Status Pop(Park &P,CarNode &e){ //车离开停车场if(P.top==P.base)printf("停车场为空");else{e=*--P.top;--P.stacksize;}return OK;}Status InitQueue(Shortcut &S){ //初始化便道S.front=S.rear=(CarPtr)malloc(sizeof(Car2));if(!S.front||!S.rear)exit(OVERFLOW);S.front->next=NULL;S.length=0;return OK;}Status EnQueue(Shortcut &S,int number,int ar_time){ //车进入便道CarPtr p;p=(CarPtr)malloc(sizeof(Car2));if(!p)exit(OVERFLOW);p->number=number;p->ar_time=ar_time;p->next=NULL;S.rear->next=p;S.rear=p;++S.length;return OK;}Status DeQueue(Shortcut &S,CarPtr &w){ //车离开便道if(S.length==0)printf("通道为空");else{w=S.front->next;S.front->next=w->next;--S.length;}return OK;}//对进栈车辆的处理Status Arrival(Park &P,Shortcut &S){int number,ar_time;printf("请输入车牌号:");scanf("%d",&number);printf("请输入进停车场的时刻:");scanf("%d",&ar_time);if(P.stacksize<size){CarNode c;c.number=number;c.ar_time=ar_time;Push(P,c);printf("该车停在第%d号车道\n",P.stacksize);}else{EnQueue(S,number,ar_time);printf("停车场已满,暂时停在便道的第%d个位置。

数据结构课程方案设计书(c 版)--停车场管理系统

数据结构课程方案设计书(c  版)--停车场管理系统

~《数据结构》一.课程设计题目某停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在最北端),若停车场内已经停满n 辆车,则后来的汽车只能在门外的便道即候车场上等候,一旦有车开走,则排在便道上的第一辆车即可开入。

当停车场内某辆车要离开时。

在它之后进入的车辆必须先退出车场为它让路,该车辆开出大门外,其它车辆再按原次序进入停车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

试为该停车场编制按上述要求进行管理的模拟程序。

二.流程及图示停车场(栈1)栈2三、程序运行及截图1.开始界面首先是登陆界面,只要用户名跟密码一样就可以登陆,输入正确后,有一个延迟程序,让使用者感觉更真实如果输入错误了,就是直接退出了2.主界面登录成功后,则是如下的功能界面:3 . 停车场管理系统你可以选择停车,离开,或者查看,当操作完了,可以直接选择退出。

当你输入1 后,会提示你输入停车的车号:在这里输入你想要停车的车号,然后会提示你停车的时间:输入停车时间后,则会显示你刚停车的详细的信息:4.离开输入 2,则会提示你要离开的车号:然后输入离开的车号后,会提示你输入该车离开的时间,输入离开的时间,则会出现如下界面:5 停车场管理系统系统则会把你刚离开的车俩的详细信息给你打印出来:拉开的车号,所用时间以及应收的费用。

这个时间管理员,可以对照表收费了。

6.查看当你要查看停车场所停车的信息时,你可以选择 3。

同样,选择 3 确定后会提示你要查看的车号,然后则会把信息打印在界面上:系统会告诉你这俩停在停车场里面的那个位置上。

7.退出当你一切操作完了后,就可以选择退出了,输入 4 停车场管理系统随便按个键就退出该系统了。

四、程序代码#include<iostream>#include<conio.h>#include<iomanip>#include<fstream>#include<string>#include <stdlib.h>#include <windows.h>using namespace std。

数据结构-停车场管理程序代码

数据结构-停车场管理程序代码

源程序代码:#include <stdio.h>#include <stdlib.h>#include <iostream.h>#include <time.h>#define MaxSize 5#define fee 2#define L 10000#define M 20000typedef int ElemType;ElemType tmpnum=0;ElemType tmptime=0;typedef struct {ElemType car_num[MaxSize];ElemType car_time[MaxSize];int top;}STACK;typedef struct qnode {ElemType car_num;ElemType car_time;struct qnode *next;}QTYPT;typedef struct qptr {QTYPT *front;QTYPT *rear;}SQUEUE;SQUEUE LQ;void InitStack(STACK *S){S->top = -1;}int Full(STACK *S){if(S->top==MaxSize-1){printf("\n Stack is full! Push");return 0;}return 1;}int Push(STACK *S,ElemType num,ElemType time){ if(S->top==MaxSize-1){printf("\n Stack is full! Push");return 0;}S->top++;S->car_num[S->top]=num;S->car_time[S->top]=time;return 1;}int Empty(STACK *S){return (S->top==-1 ? 1:0);}int Pop(STACK *S,ElemType *num,ElemType *time){if(Empty(S)){puts("Stack is free Pop");return 0;}*num=S->car_num[S->top];*time=S->car_time[S->top];S->top--;return 1;}int GetTop(STACK *S,ElemType *num,ElemType *time){ if(Empty(S)){puts("Stack is free Gettop");}*num=S->car_num[S->top];*time=S->car_time[S->top];return 1;}void InitQueue(SQUEUE *LQ){QTYPT *p=NULL;p=(QTYPT *)malloc(sizeof(QTYPT));p->next=NULL;LQ->front=LQ->rear=p;}int EnQueue(SQUEUE *LQ,ElemType num,ElemType time){ QTYPT *s;s=(QTYPT *)malloc(sizeof(QTYPT));s->car_num=num;s->car_time=time;s->next=LQ->rear->next;LQ->rear->next=s;LQ->rear=s;return 1;}int CountQueue(SQUEUE *LQ){int i=1;QTYPT *mfront=NULL;QTYPT *mrear=NULL;mfront=LQ->front;mrear=LQ->rear;while(!(LQ->front==LQ->rear)){i++;LQ->front=LQ->front->next;}LQ->front=mfront;return i;}int Empty_Q(SQUEUE *LQ){return (LQ->front==LQ->rear?1:0);}int OutQueue(SQUEUE *LQ,ElemType *num,ElemType *time){ QTYPT *p;if(Empty_Q(LQ)){puts("Quenue is free OutQuenue");return 0;}p=LQ->front->next;*num=p->car_num;*time=p->car_time;LQ->front->next=p->next;if(LQ->front->next==NULL)LQ->rear=LQ->front;free(p);return 1;}int GetHead(SQUEUE *LQ,ElemType *num,ElemType *time){ if(Empty_Q(LQ)){puts("Quenue is free GetHead");return 0;}*num=LQ->front->next->car_num;*time=LQ->front->next->car_time;return 1;}void sleep(int time){clock_t goal;goal=time*(CLOCKS_PER_SEC)+clock();while(goal > clock()){;}}int chackinput(STACK *S,int pnum){int i=0;int num;num = pnum;i=S->top;for(;!(i==-1);i--)if(S->car_num[i]==num)return 1;return 0;}int chacktime(STACK *S,int ptime){return S->car_time[S->top] <= ptime ? 1 : 0;}int displaystats(STACK *S,int pinput){void displayhead(void);int i = 0;i = S->top;switch(pinput){case 10000:{if(!Empty(S))for(;!(i==-1);i--)printf("<===%d时%d号车停与%d车位===>\n",S->car_time[i],S->car_time[i],i+1);elsecout<<"停车场为空";printf("还有车%d个位\n",MaxSize-S->top-1);break;}case 20000:{displayhead();break;}default:{return 1;}}return 0;}void displayhead(void){cout<<'\n'<<"<===============CT停车场管理系统===================>"<<endl;cout<<"<==操作说明: ******* ==>"<<endl;cout<<"<==A:停车命令 ******* ==>"<<endl;cout<<"<==D:出车命令 *** ==>"<<endl;cout<<"<==E:退出程序 *** ==>"<<endl;cout<<"<==L: 显示停车场内状况 "<<endl;cout<<"<==============================================>"<<endl;}void displayChange(STACK *S,ElemType pnum,int ptime){printf(" (单价 %d元/小时 )\n",fee);printf("<======================电子收据===================>\n");printf("<==停车时间:--------------------------%d小时==>\n",ptime-tmptime);printf("<==车牌号码:--------------------------%d==>\n",tmpnum);printf("<==应收费用:--------------------------%d 元==>\n",(ptime-tmptime)*fee);printf("<====================谢谢=欢迎下次再来=============>\n");printf("正在打印收据请稍等\n");for(int count=1; count < 1;count++){printf("=");fflush(stdout);sleep(1);}printf(">\n");sleep(1);}void wait(char *string){printf("%s\n",string);for(int count=1; count < 1;count++){printf("-");fflush(stdout);sleep(1);}printf(">\n");}int outparkstation(STACK *S1,STACK *TS,ElemType pnum){int t_num=0;int t_time=0;while(1){Pop(S1,&t_num,&t_time);if(t_num == pnum){tmpnum=t_num;tmptime=t_time;while(!Empty(TS)){Pop(TS,&t_num,&t_time);Push(S1,t_num,t_time);}return 1;}Push(TS,t_num,t_time);}return 0;}int inparkstation(STACK *S){int parknum;int parktime;printf("还有车%d个位\n",MaxSize-S->top-1);printf("请输入车牌号码:");cin>>parknum;while(chackinput(S,parknum)){ printf("车牌号码重复,请输入%d1或者其他",parknum);cin>>parknum;}printf("请输入停车时间:");cin>>parktime;printf("%d号车于%d时停靠在%d位\n",parknum,parktime,S->top+2);Push(S,parknum,parktime);return 1;}int inbiandao(SQUEUE *SQ,STACK *S){int parknum ;printf("对不起,停车场已满,请您到便道等待.您将第");printf("%d进入停车场\n",CountQueue(SQ));printf("请输入车牌号码:");cin>>parknum;while(chackinput(S,parknum)) { printf("车牌号码重复,请输入%d1或者其他",parknum);cin>>parknum;} EnQueue(SQ,parknum,0);return 1;}int OutParkingStation(SQUEUE *biandao,STACK *car,STACK *tmp){int parknum = 0;int parktime = 0;int buf=0;if(!Empty(car)){displaystats(car,10000);printf("请输入您要调出的车牌号码:");cin>>parknum;while(!chackinput(car,parknum)) { printf("没有您要的%d的车牌号码,请输入正确的车牌号码:",parknum);cin>>parknum;} outparkstation(car,tmp,parknum); printf("%d时%d号车进入停车场\n",tmptime,tmpnum);printf("请输入现在的时间:");cin>>parktime;while(!chacktime(car,parktime)) { cout<<"输入时间小于停车时间,请重新输入:";cin>>parktime; }displayChange(car,parknum,parktime); if(biandao->front==biandao->rear) { }else{ printf("%d号车位空开\n",car->top+2);printf("%d时便道上的%d号汽车驶入%d号车位",parktime,biandao->front->next->car_num,car->top+2);OutQueue(biandao,&parknum,&buf); Push(car,parknum,parktime); }return 2;}printf("停车场为空\n"); return 1; };int main(int argc,char* agv[]){char chance='A';STACK car;InitStack(&car);STACK tmp;InitStack(&tmp);SQUEUE biandao;InitQueue(&biandao);loop:while(1){displayhead();cout<<"=>:";cin>>chance;switch(chance) {case 'A':{wait("正在查询车位,请稍等:");if(Full(&car))inparkstation(&car);elseinbiandao(&biandao,&car);break;}case 'D':{OutParkingStation(&biandao,&car,&tmp);break;}case 'L':{displaystats(&car,10000);break;}case 'M':{displaystats(&car,20000);break;}case 'E':{wait("正在保存数据程序即将退出\n命令执行中:"); exit(0);}default:{cout<<"输入错误"<<endl;goto loop;}}}system("PAUSE");return 0;}。

C程序设计-停车场管理系统(流程设计图)

C程序设计-停车场管理系统(流程设计图)

3 2
N
Y
是否继续
N
退出程序 退出程序
主菜单
主菜单
Y
退出程
主菜单 出站模块流程图
停车场管理 1
主菜单
浏览、显示信息
入站
出站
退站
系统功能模块图
主函数
主菜单
主函数流程图
显示一系列功能选项
输入 n 判断 n 是否为 0~4
N
Y 根据 n 的值调用其他功能模块函数 主菜单模块流程图
浏览、显示模块
从文件中读取站内车辆信息
显示所读信息
从文件中读取便道停车信
显示所读信息
是否继续
N
Y
返回主菜单
退出程序
查询、显示模块程图
入站模块
从文件中读出站内停车信息
Y
记录空位信息
查询站内是否有空位
N
从文件中读出便道停车信息
车辆入站,记录信息
查询便道是否有空位
将信息存入文件
记录空位信息
是否继续
Y
是否继续
N
N
车辆入站,记录信息
主菜单
Y
主菜单 Y
退出 退出程序
将信息存入文件
程序
是否继续
N
Y
主菜单 入站模块流程图
退出程序
出站模块
输入车辆车牌
从文件中读取站内车辆信息
查询该车所在的位
Y
输出该车的信息,安排出站
该车是否在站内
N
从文件中读取便道停车信息
安排该车出站,更新站内信息
查询该车所在的位
从文件中读取便道停车信息 该车是否在便道内
N
便道内是否有 车
输出该车的信息,安排出站

C语言课程设计报告停车场管理系统

C语言课程设计报告停车场管理系统

算法与数据结构课程设计题目:停车场管理专业班级:软件四班姓名:学号:指导教师:成绩:______________目录一、题目及要求 (2)二、题目分析 (3)三、数据结构说明 (4)四、各函数算法分析 (5)(1)主函数 (5)(2)车辆到达函数 (7)(3)车辆离开函数 (8)(4)列表显示函数 (10)五、程序测试 (14)(1)测试信息对错误的处理 (14)(2)列表显示 (15)(3)同时输出等待的提示作息 (16)(4)计算它们的应交费用 (17)六、课程设计感悟与收获 (18)七、源代码 (19)八、参考文献 (25)一、题目及要求[要求]设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。

车辆按到达停车场时间的早晚依次从停车场最里面向大门口停放(最先到达的第一辆车放在停车场的最里面)。

如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆国就进入停车场。

停车场内如有某辆车要走,在它之后进来的车都必须退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。

每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。

如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且其他在便道上等待的车辆的次序不变。

编制一程序模拟停车场管理。

[提示]汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去时刻)。

例如:(’A’,1,5)表示1号牌照车在5这个时刻到达,而(’D’,5,20)表示5号牌照车在20这个时刻离去,整个程序可以在输入信息为(’E’,0,0)时结束。

基本要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交的费用和它在停车场内停留的时间。

根据题目要求,停车场可以用一个长度为n的堆栈来模拟。

由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。

数据结构-停车场管理系统实验报告

数据结构-停车场管理系统实验报告

数据结构-停车场管理系统实验报告数据结构停车场管理系统实验报告一、实验目的本次实验旨在通过设计和实现一个停车场管理系统,深入理解和应用数据结构的知识,包括栈、队列、链表等,提高编程能力和解决实际问题的能力。

二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、需求分析1、停车场内有固定数量的停车位。

2、车辆进入停车场时,记录车辆信息(车牌号、进入时间)。

3、车辆离开停车场时,计算停车费用并输出相关信息。

4、能够显示停车场内车辆的停放情况。

四、数据结构设计1、为了实现车辆的先进先出,选择队列来存储停车场内的车辆信息。

2、用栈来存储临时停放的车辆信息,以便在停车场已满时进行处理。

五、算法设计1、车辆进入停车场检查停车场是否已满。

如果未满,将车辆信息加入队列,并记录进入时间。

2、车辆离开停车场在队列中查找要离开的车辆。

计算停车时间和费用。

将车辆从队列中删除。

3、显示停车场内车辆停放情况遍历队列,输出车辆信息。

六、主要代码实现```cppinclude <iostream>include <string>include <ctime>using namespace std;//车辆结构体struct Car {string licensePlate; //车牌号time_t entryTime; //进入时间};//队列类class Queue {private:Car data;int front, rear, capacity;public:Queue(int size) {capacity = size;data = new Carcapacity;front = rear = 0;}~Queue(){delete data;}bool isFull(){return (rear + 1) % capacity == front;}bool isEmpty(){return front == rear;}void enqueue(Car car) {if (isFull()){cout <<"停车场已满!"<< endl; return;}datarear = car;rear =(rear + 1) % capacity;}Car dequeue(){if (isEmpty()){cout <<"停车场为空!"<< endl;return Car();}Car car = datafront;front =(front + 1) % capacity;return car;}void display(){if (isEmpty()){cout <<"停车场内没有车辆。

数据结构 停车场管理系统

数据结构 停车场管理系统

一、设计目的1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2.初步掌握软件开辟过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开辟普通规范进行软件开辟,培养软件工作者所应具备的科学的工作方法和作风。

二、设计内容设停车场是一个可停放n辆汽车的狭长通道,且惟独一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,挨次由北向南罗列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等待,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

试为停车场编制按上述要求进行管理的摹拟程序。

三、设计要求按照从终端读入的输入数据进行摹拟管理,每一组输入数据包括三个数据项:汽车“进站”或者“出站”信息、汽车牌照号码以及进站或者出站的时刻,对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或者便道上的停车位置;若是车辆离去,则输出汽车在停车场内逗遛的时间和应交纳的费用(在便道上停留不收费),按以顺序结构实现,队列以链表结构实现。

四、设计过程1、算法思想分析由于停车场是一个狭窄通道,而且惟独一个大门可供汽车进出,问题要求汽车停车场内按车辆到达时间的先后顺序,挨次由北向南罗列。

由此很容易联想到数据结构中的堆栈模型,因此可首先设计一个堆栈,以堆栈来摹拟停车场,又因为每一个汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素我设计成汽车的车牌号。

当停车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。

停车场管理系统(数据结构。C语言版)

停车场管理系统(数据结构。C语言版)
//从队头到队尾依次对队列Q中每个元素调用函数visit()。一旦visit()失败,则操作失败。
//---------------基本操作---------------------
Status InitQueue(LinkQueue &Q){
//构造空队列Q
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
#define FEIYONG 0.05 //停车费用单价
#define MAXSIZE 5 //停车场容量
//--------------系统库函数------------------
#include "stdlib.h"
//--------------通用变量、常量、类型声明------------------
//插入元素e为新的队尾元素
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->data = e; p->next = NULL;
Q.rear->next = p;
Q.rear = p;
//当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车长为它让路,待该车开出大门外,
//其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
//基本要求:以栈模拟停车场,以队列模拟车场外的便道
//部分源代码(栈和队列的数据结构自己定义,在清华版的数据结构课本上有详细的描述)
return OK;
}//DestroyStack

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

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

课程设计:停车场c语言版本的数据结构课程设计,要求用栈模拟停车场,用队列模拟便道,实现停车场的收费管理系统停车场停满车后车会停在便道上面下面附上源码,vc:(下编译#include <stdio.h>//#include <stdlib.h> //malloc#include <time.h> //获取系统时间所用函数#include <conio.h> //getch()#include <windows.h> //设置光标信息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) //队空返回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,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)) //当栈不空且未找到x{y=pop(s1);if(y.num!=x.num){n=push(s2,y);position--;}elsef=1;}if(y.num==x.num) //找到x{gotoxy(33,17);printf("%d:%-2d",(x.arrtime.hour-y.arrtime.hour),(x.arrtime.minute-y.arrtime.minute) );fee=((x.arrtime.hour-y.arrtime.hour)*60+(x.arrtime.minute-y.arrtime.minute))*PRICE+BASEP RICE;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(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);}else{printleave(0,position,s1->top+2);printlog(x.arrtime,x.num,0,'P',position,fee);}}else //若栈中无x{while(s2->top > -1) //还原栈{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 //找到x{q->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("按任意键继续");getch();printleave(-1,position,p->front->num+1); //出队动画printlog(x.arrtime,x.num,0,'B',position,0);f=1;}if(f==0) //未找到x{qingping(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=localtime(&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 a[2][4]={2,0,0,1,-2,0,0,-1}; //方向for(int i=0;i<2 ;i++){for(int j=0; j<20; j++){x+=a[i][0]; y+=a[i][1];gotoxy(x,y);printf("═");}x+=a[i][0]; y+=a[i][1];gotoxy(x,y);if(i==0)printf("╗");elseprintf("╚");for(j=0; j<12; j++){x+=a[i][2]; y+=a[i][3];gotoxy(x,y);printf("║");}x+=a[i][2]; y+=a[i][3];gotoxy(x,y);if(i==0)printf("╝");elseprintf("╔");}gotoxy(22,8);printf("小王:");gotoxy(22,11);printf("顾客:");gotoxy(22,14); printf("*********** 停车信息***********");gotoxy(23,15); printf("车牌号:");gotoxy(42,15); printf("时间:");gotoxy(23,17); printf("停车时长:");gotoxy(42,17); printf("收费:");}/*清屏函数*///更新对话框前将原对话晴空void qingping(int a){if(a==0) //清空小王的对话{gotoxy(28,8); printf(" ");gotoxy(28,9); printf(" ");gotoxy(28,8);}else if(a==1) //清空顾客的对话{gotoxy(28,11); printf(" ");gotoxy(28,12); printf(" ");gotoxy(28,13); printf(" ");gotoxy(28,11);}else //清空车辆信息{gotoxy(31,15); printf(" ");gotoxy(48,15); printf(" ");gotoxy(33,17); printf(" ");gotoxy(48,17); printf(" ");gotoxy(31,15);}}//用上下键移动选择int getkey(){char c;int x=28,y=11;while(1){gotoxy(x,11); printf(" ");gotoxy(x,12); printf(" ");gotoxy(x,13); printf(" ");gotoxy(x,y); printf(">>");c=getch();if(c==13) return y-10; //enter键返回当前选项if(c!=-32)continue; //不是方向键进行下次循环c=getch();if(c==72) if(y>11) y--; //上if(c==80) if(y<13) y++; //下}}//输入车辆信息CarNode 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 ║");printf("---------------------------------------------------------------------- ║");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(" 停车场管理日志\n\n");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) 车位(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(;x0<72;x0++){gotoxy(x0,y0); printf("%s",car); Sleep(30);gotoxy(x0,y0); printf(" ");}for(;y0<y;y0++){gotoxy(x0,y0); printf("%s",car); Sleep(100);gotoxy(x0,y0); printf(" ");}for(;x0>x;x0--){gotoxy(x0,y0); printf("%s",car); Sleep(50);gotoxy(x0,y0); printf(" ");}gotoxy(x,y);printf("%s",car);}else{x=(12-num)*6;y=y-3;for(;x0<x;x0++){gotoxy(x0,y0); printf("%s",car); Sleep(30);gotoxy(x0,y0); printf(" ");}gotoxy(x,y);printf("%s",car);}}void printleave(int a,int po,int num){static char *car="【█】";int x0=0,y0=23;int x=0,y=28;int i;if(a==-1){x=(12-po)*6;y=y-3;gotoxy(x,y); printf(" ");gotoxy(x,y-2); printf("%s",car);Sleep(100);if(12>num){gotoxy((12-num)*6,y);printf(" ");}gotoxy(x,y); printf("%s",car);for(;x>x0;x--){gotoxy(x,y-2); printf("%s",car); Sleep(30);gotoxy(x,y-2); printf(" ");}}else{i=num+1;for(;num>po;num--){x=(num+6)*6; y=28;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y>21;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(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y>23;y--){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>0;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}num++;for(;i-num>0;num++){x=(i-num+6)*6; y=21;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y<28;y++){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>(num-1+6)*6;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}gotoxy(x,y); printf("%s",car);}if(a>0){x=66;y=25;gotoxy(x,y); printf(" ");gotoxy(x,y-2); printf("%s",car); Sleep(100);if(12>a){gotoxy((12-a)*6,y);printf(" ");}if(a>1){gotoxy(x,y); printf("%s",car);}printstop(0,i-1,x,y-2);}}}/************************************************************ main ********************************************************/int main(void){SqStackCar s1,s2; //停车栈和暂存栈LinkQueueCar p; //队列InitSeqStack(&s1);InitSeqStack(&s2);InitLinkQueue(&p);printf(" 停车场管理系统\n\n");printf("************************* 欢(=^_^=)迎***************************\n");printf(" 收费标准:基础费0.5元,每分钟收取0.05元,收费精确到0.1元\n");printf(" PS:车牌号由阿拉伯数字组成");panitPL();printcar(); gotoxy(0,-3);char c=0; //接受按键while(1) //按ESC退出系统{for(int i=2;i>-1 ;i--) //初始化对话框qingping(i);printf("按ESC退出系统,其它键开始对话");c=getch();if(c==Esc){qingping(0);break;}while(1){qingping(2);gotoxy(28,8); printf("欢迎来到停车场!我是管理员小王。

C语言停车场管理器程序_数据结构课程设计

C语言停车场管理器程序_数据结构课程设计

做完了课程设计,用C语言写的。

不过挑了个容易点的,停车场管理系统。

不过写得好繁琐啊,好耐无用C语言了。

请大家指教,也帮帮急需的朋友们。

呵呵···终于可以放假啦,嘿嘿·····/*******************************停车场管理器*************************************/#include<stdio.h>#include<stdlib.h>#include<string.h>#include <conio.h>/********************************************************************************/#define MAXSTACKSIZE 2 /*车库容量*/#define price 0.1 /*每车每分钟费用*/typedef struct time{int hour;int min;}Time; /*时间结点*/typedef struct {char num[10];Time reach;Time leave;}CarNode; /*车辆信息结点*/typedef struct {CarNode *base;CarNode *top;int stacksize;}SqStackCar; /*模拟车站*/typedef struct car{CarNode *data;struct car *next;}QueueNode;typedef struct {QueueNode *front;QueueNode *rear;}LinkQueueCar; /*模拟通道*/int QueueEmpty(LinkQueueCar Q) /*便道判空函数*/{if(Q.front==Q.rear) return 1;else return 0;}/********************************************************************************/ void InitStack(SqStackCar *s) /*初始化栈*/{s->base=(CarNode *)malloc(MAXSTACKSIZE*sizeof(CarNode));if(!s->base) exit(0);/*分配失败*/s->top=s->base;s->stacksize=MAXSTACKSIZE;}int Push(SqStackCar *s,CarNode *e) /*进站函数*/{if(s->top-s->base>=s->stacksize) return 0;else *s->top++=*e;return 1;}int Pop(SqStackCar *s,CarNode *e) /*出站函数*/{if(s->top==s->base) return 0;*e=*--s->top;return 1;}int StackEmpty(SqStackCar s) /*判空函数*/{if(s.base==s.top) return 1;else return 0;}int InitQueue(LinkQueueCar *Q) /*初始化便道*/{Q->front=Q->rear=(QueueNode *)malloc(sizeof(QueueNode));if(!Q->front) exit(0);Q->front->next=NULL;return 1;}/**************************************************************/ int EnQueue(LinkQueueCar *Q,CarNode *e) /*便道插入函数*/{QueueNode *p;p=(QueueNode *)malloc(sizeof(QueueNode));if(!p) exit(0);p->data=e;p->next=NULL;Q->rear->next=p;Q->rear=p;return 1;}int DeQueue(LinkQueueCar *Q,CarNode *e) /*便道删除函数*/{QueueNode *p;if(Q->front==Q->rear) return 0;p=Q->front->next;e=p->data;Q->front->next=p->next;if(Q->rear==p) Q->rear=Q->front;free(p);return 1;}/********************************************************************************/ int Arrive(SqStackCar *In,LinkQueueCar *Wait) /*车辆到达函数*/{CarNode *i;QueueNode *w;i=(CarNode *)malloc(sizeof(CarNode));flushall();printf("Input the car number:");gets(i->num);if(In->top-In->base<MAXSTACKSIZE) /*车场未满,车辆进栈*/{printf("\nThe time the car arrive(00:00): ");scanf("%d:%d",&i->reach.hour,&i->reach.min);Push(In,i);printf("\nCar in success!!");sleep(1);return 1;}else /*停车场已满,车进便道*/{w=(QueueNode *)malloc(sizeof(QueueNode));w->data=i;w->next=NULL;Wait->rear->next=w;printf("The PART is full,car must wait in the road!");sleep(1);return 1;}return 0;}/********************************************************************************/ int Departure(SqStackCar *In,SqStackCar *temp,LinkQueueCar *Wait) /*车辆离开函数*/{int flag=0,a1,a2,b1,b2, money;CarNode *p,*t;QueueNode *q;p=(CarNode *)malloc(sizeof(CarNode));flushall();printf("Input the out car number: ");gets(p->num);while(!StackEmpty(*In)){t=(CarNode *)malloc(sizeof(CarNode));Pop(In,t);if(strcmp(p->num,t->num)==0) /*比较车场中有无这辆车,有即出站*/{printf("Input the time the car out(00:00):");scanf("%d:%d",&p->leave.hour,&p->leave.min);printf("The ");printf("%s",p->num);printf(" Car out the part!");a1= p->leave.hour;a2= t->reach.hour;b2= t->reach.min;money = ((a1-a2+24)%24*60+(b1-b2+60)%60)*price; /*计算车辆需要的费用*/printf("\nThe time the car arrive: %d:%d",t->reach.hour,t->reach.min);printf("\nThe time the car leave: %d:%d",p->leave.hour,p->leave.min);printf("\nNeed: %d yuan",money);flag=1;getch();free(t);break;}elsePush(temp,t);} /*while*/if(!flag){printf("No this car!!");getch();}while(!StackEmpty(*temp)){Pop(temp,p);Push(In,p);}free(p);if(flag&&Wait->front!=Wait->rear) /*车站中有空位,便道有车,车入站*/ {q=(QueueNode *)malloc(sizeof(QueueNode));q=Wait->front->next;t=q->data;if(q!=NULL){Push(In,t);printf("\nThe ");printf("%s",t->num);printf(" car in part!");printf("\nInput the time the car arrive(00:00): ");scanf("%d:%d",&t->reach.hour,&t->leave.min);}Wait->front->next=q->next;if(q==Wait->rear) Wait->rear=Wait->front;free(q);}return 1;}/****************************************************************************** **/void Print(SqStackCar *In,SqStackCar *Temp,LinkQueueCar *Wait) /*打印函数*/{int c=0;int count=1;CarNode *p,*t;QueueNode *q;q=(QueueNode *)malloc(sizeof(QueueNode));p=(CarNode *)malloc(sizeof(CarNode));t=(CarNode *)malloc(sizeof(CarNode));while(1&&c!='3'){clrscr();gotoxy(1,10);printf("1. Print the road!");gotoxy(1,11);printf("2. Print the part!");gotoxy(1,12);printf("3. return.");do{printf("\nInput your choice:");c = getche();printf("\n");}while(c!='1'&&c!='2'&&c!='3');if(c=='2') /*打印停车场*/{printf("The car in the part!\n");count=1;while(!StackEmpty(*In)){Pop(In,t);}while(!StackEmpty(*Temp)){Pop(Temp,t);printf("The ");printf("%d",count);printf(" car number is: ");count++;puts(t->num);Push(In,t);}printf("Press any key to continue...");getch();}if(c=='1') /*打印便道*/{printf("The car in the road!\n");count=1;q=Wait->front->next;if(Wait->front!=Wait->rear) /**/{while(q!=NULL){p=q->data;printf("The ");printf("%d",count);printf(" Car number is: ");puts(p->num);count++;}}else printf("\nNo car in the road.");printf("Press any key to continue...");getch();}}}/***************************主程序***********************************************/ int Arrive(SqStackCar *In,LinkQueueCar *Wait);int Departure(SqStackCar *In,SqStackCar *temp,LinkQueueCar *Wait);void Print(SqStackCar *In,SqStackCar *temp,LinkQueueCar *Wait);void initialization();char readcommand();void interpret(char cmd);main(){char cmd;SqStackCar part,temp;LinkQueueCar road;InitStack(&part);InitStack(&temp);InitQueue(&road);printf("Press any key to continue......");getch();while(1){initialization(); /*初始化界面*/cmd = readcommand(); /*读取停车场状况*/clrscr();switch(cmd){case 'a': Arrive(&part,&road); break;case 'A': Arrive(&part,&road); break;case 'd': Departure(&part,&temp,&road); break;case 'D': Departure(&part,&temp,&road); break;case 'p': Print(&part,&temp,&road); break;case 'P': Print(&part,&temp,&road); break;case 'e': printf("Press any to continue...");getch();exit(0); break;case 'E': printf("Press any to continue...");getch();exit(0); break;default : printf("ERROR!"); break;}}}/********************************************************************************/ void initialization() /*初始函数*/{int i;clrscr();gotoxy(0,0);for(i=1;i<=240;i++)printf("\1");gotoxy(15,8);printf("THIS IS A CAR PART MANAGE SYSYTEM!");gotoxy(15,12);printf("NAME: LIYONGJUN.");gotoxy(15,13);printf("NUM: 3104006893.");;.. gotoxy(15,14);printf("GRADE: 2004.");gotoxy(15,15);printf("CLASS: COMPUTER SCIENCE AND TECHNOLOGY 10"); gotoxy(1,20);printf("\n********************************************************************************");printf("1. Car Arrive--A 2. Car Departure--D 3. Print Car--P 4.Exit--E");printf("\n********************************************************************************");printf("Input C,D,P,E choose!!\n");}char readcommand() /*选择函数*/{char cmd;do{printf("Input your choice:");cmd = getche();printf("\n");}while((cmd!='a')&&(cmd!='A')&&(cmd!='d')&&(cmd!='D')&&(cmd!='p')&&(cmd!='P')&&(cmd!='E')&&( cmd!='e'));return cmd;}。

C++数据结构停车场管理

C++数据结构停车场管理

C++数据结构停车场管理一、引言本文档旨在介绍C++数据结构停车场管理系统的设计和实现过程。

停车场管理系统是一个用于管理停车场车辆进出、计费等相关功能的软件,可以提高停车场管理的效率和精确度。

二、需求分析⒈功能需求⑴车辆入场管理:记录车辆的入场时间、车牌号等信息。

⑵车辆出场管理:根据车牌号查询车辆的停车时间并计费,同时将车辆从停车场中移除。

⑶停车位管理:实时显示停车场内还有多少空闲停车位。

⑷支付管理:提供支付功能,支持现金、信用卡等多种支付方式。

⑸数据统计:停车场的使用统计报表,包括停车次数、收入等信息。

⒉性能需求⑴系统响应时间应尽可能短,以满足用户快速进出停车场的需求。

⑵数据存储和查询速度应尽可能快,以保证系统的实时性和准确性。

三、系统设计⒈数据结构设计⑴车辆信息:使用结构体保存车辆的信息,包括车牌号、入场时间、离场时间等。

⑵停车位状态:使用数组或链表表示停车位的状态,空闲或占用。

⑶支付记录:使用结构体保存支付的相关信息,包括支付方式、支付时间等。

⒉模块设计⑴车辆入场管理模块:负责记录车辆的入场时间和车牌号,并将车辆信息添加到停车场管理系统中。

⑵车辆出场管理模块:接受用户输入车牌号查询车辆的停车时间并计费,同时将车辆从停车场中移除。

⑶停车位管理模块:实时更新停车位的状态,显示停车场内还有多少空闲停车位。

⑷支付管理模块:提供支付功能,支持现金、信用卡等多种支付方式。

⑸数据统计模块:停车场的使用统计报表,包括停车次数、收入等信息。

四、系统实现⒈系统流程图插入系统流程图⒉模块实现略\t五、测试与验证⒈单元测试:对每个模块进行独立测试,确保其功能的正确性和稳定性。

⒉集成测试:将所有模块整合在一起进行测试,验证系统的功能和性能是否符合需求。

六、部署与维护⒈部署:将停车场管理系统部署到指定的服务器或计算机上,配置相关的数据库和网络连接。

⒉维护:定期检查系统的稳定性和性能表现,及时修复错误和进行系统更新。

七、文档附件本文档涉及附件,请参考附件部分。

C语言数据结构停车场管理系统 课题设计报告书

C语言数据结构停车场管理系统 课题设计报告书

一.需求分析(1).任务:设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内,按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端)。

若车场内已停满n辆汽车,则后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入。

当停车场内某辆车要离开时,在它之后进入的车辆必须先退出班车场为它让路,待该车开出大门后。

其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用(在变道上停留的时间不收费)。

(2).基本要求:①以栈模拟停车场,以队列模拟车场外的便道。

②从终端读入汽车到达或离去的数据,每组包括三项:1.是“到达”还是“离去”;2.汽车牌照号码;3.“到达”或“离去”的时刻;(3).市场需求:这个软件可以合理的安排停车场车辆的存放,查询目前在停车辆,以及计费。

同时当停车场内部车辆方满之后,我们可以根据在外部等待的车辆的先来后到的顺序,当车场空闲之后,再安排等待的车辆进入。

同时在计费的反面,是按分钟计费的,较为公平。

最后收费,将小于0.1元部分四舍五入。

二.概要设计模块大致划分:界面:main函数;Memu函数(主要界面)计算函数1.进入函数GoIn();2离开函数GoOut().;查看函数3.查看车场LookChang();4.查看变道LookDao();遇到的疑难问题1.根据题目要求,停车场需要用栈,而变道要用的是列队。

由于变道的原则是先到先离开,这和列队的原理是一样的,所以变道的建立是方便的,只要实现变道(列队)和停车场(栈)之间的数据连接即可。

但是栈是后入先出的,而停车场呢的车辆的离开时没有规律的,这样删除数据是十分不方便的2.同时在车辆的离去方面有,根据题目的要求,我们要计算出车俩的停车费用。

由于时间是60进制,而车辆的停车的费用是同过车辆的的停车时长来求的,那么便是通过离去的时间减去进入的时间来得出中间的时间,最后求出来的。

c语言数据结构停车场系统实验报告

c语言数据结构停车场系统实验报告

实验题目:实验六停车场管理一、需求分析1.程序的功能:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列〔大门在最南端,最先到达的第一辆车停放在车场的最北端〕,假设车场内已停满n辆汽车,那么后来的汽车只能在门外的便道上等候,一旦有车开走,那么排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

〔1〕建立静态数组栈作为模拟停车场,动态链表栈作为模拟便道。

〔2〕车辆到达,停入停车场或者便道,记录车牌号,到达时间。

〔3〕车辆离开,记录离开时间,输出停车时间和收费。

将便道内车停入停车场,记录进入时间。

〔4〕列表显示停车场,便道内车辆情况。

〔5〕列表显示历史记录〔已经离开车的车牌号,到达离开时间,收费〕。

2.输入输出的要求:(1)输入:字符串车牌号,到达时间,离开时间(2)输出:停车时间和收费,停车场和便道的停车情况,历史记录。

3.测试数据:二.概要设计4.本程序所用的抽象数据类型的定义ADT Stack{数据对象:D={ai|ai为ElemSet,i为正整数}数据关系:R1={<ai-1,ai>|ai-1,ai都属于D,i为正整数}根本操作:InitStack(&S) //构建一个空栈SDestroyStack(&S) //S 被销毁StackLength(S) //返回S 的元素个数,即栈的长度。

StackEmpty(s) //假设栈S 为空栈,那么返回TRUE,否那么FALE。

GetTop(S, &e) //用e 返回S 的栈顶元素ClearStack(&S) //将S 清为空栈Push(&S, e) //入元素e 为新的栈顶元素。

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

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

课程设计:停车场c语言版本的数据结构课程设计,规定用栈模拟停车场,用队列模拟便道,实现停车场的收费管理系统停车场停满车后车会停在便道上面下面附上源码,vc:(下编译#include <stdio.h>//#include <stdlib.h> //malloc#include <time.h> //获取系统时间所用函数#include <conio.h> //getch()#include <windows.h> //设立光标信息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) //队空返回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,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)) //当栈不空且未找到x{y=pop(s1);if(y.num!=x.num){n=push(s2,y);position--;}elsef=1;}if(y.num==x.num) //找到x{gotoxy(33,17);printf("%d:%-2d",(x.arrtime.hour-y.arrtime.hour),(x.arrtime.minute-y.arrtime.minute) );fee=((x.arrtime.hour-y.arrtime.hour)*60+(x.arrtime.minute-y.arrtime.minute))*PRICE+BASEP RICE;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(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);}else{printleave(0,position,s1->top+2);printlog(x.arrtime,x.num,0,'P',position,fee);}}else //若栈中无x{while(s2->top > -1) //还原栈{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 //找到x{q->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("按任意键继续");getch();printleave(-1,position,p->front->num+1); //出队动画printlog(x.arrtime,x.num,0,'B',position,0);f=1;}if(f==0) //未找到x{qingping(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=localtime(&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 a[2][4]={2,0,0,1,-2,0,0,-1}; //方向for(int i=0;i<2 ;i++){for(int j=0; j<20; j++){x+=a[i][0]; y+=a[i][1];gotoxy(x,y);printf("═");}x+=a[i][0]; y+=a[i][1];gotoxy(x,y);if(i==0)printf("╗");elseprintf("╚");for(j=0; j<12; j++){x+=a[i][2]; y+=a[i][3];gotoxy(x,y);printf("║");}x+=a[i][2]; y+=a[i][3];gotoxy(x,y);if(i==0)printf("╝");elseprintf("╔");}gotoxy(22,8);printf("小王:");gotoxy(22,11);printf("顾客:");gotoxy(22,14); printf("*********** 停车信息***********");gotoxy(23,15); printf("车牌号:");gotoxy(42,15); printf("时间:");gotoxy(23,17); printf("停车时长:");gotoxy(42,17); printf("收费:");}/*清屏函数*///更新对话框前将原对话晴空void qingping(int a){if(a==0) //清空小王的对话{gotoxy(28,8); printf(" ");gotoxy(28,9); printf(" ");gotoxy(28,8);}else if(a==1) //清空顾客的对话{gotoxy(28,11); printf(" ");gotoxy(28,12); printf(" ");gotoxy(28,13); printf(" ");gotoxy(28,11);}else //清空车辆信息{gotoxy(31,15); printf(" ");gotoxy(48,15); printf(" ");gotoxy(33,17); printf(" ");gotoxy(48,17); printf(" ");gotoxy(31,15);}}//用上下键移动选择int getkey(){char c;int x=28,y=11;while(1){gotoxy(x,11); printf(" ");gotoxy(x,12); printf(" ");gotoxy(x,13); printf(" ");gotoxy(x,y); printf(">>");c=getch();if(c==13) return y-10; //enter键返回当前选项if(c!=-32)continue; //不是方向键进行下次循环c=getch();if(c==72) if(y>11) y--; //上if(c==80) if(y<13) y++; //下}}//输入车辆信息CarNode 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 ║");printf("---------------------------------------------------------------------- ║");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(" 停车场管理日记\n\n");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) 车位(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(;x0<72;x0++){gotoxy(x0,y0); printf("%s",car); Sleep(30);gotoxy(x0,y0); printf(" ");}for(;y0<y;y0++){gotoxy(x0,y0); printf("%s",car); Sleep(100);gotoxy(x0,y0); printf(" ");}for(;x0>x;x0--){gotoxy(x0,y0); printf("%s",car); Sleep(50);gotoxy(x0,y0); printf(" ");}gotoxy(x,y);printf("%s",car);}else{x=(12-num)*6;y=y-3;for(;x0<x;x0++){gotoxy(x0,y0); printf("%s",car); Sleep(30);gotoxy(x0,y0); printf(" ");}gotoxy(x,y);printf("%s",car);}}void printleave(int a,int po,int num){static char *car="【█】";int x0=0,y0=23;int x=0,y=28;int i;if(a==-1){x=(12-po)*6;y=y-3;gotoxy(x,y); printf(" ");gotoxy(x,y-2); printf("%s",car);Sleep(100);if(12>num){gotoxy((12-num)*6,y);printf(" ");}gotoxy(x,y); printf("%s",car);for(;x>x0;x--){gotoxy(x,y-2); printf("%s",car); Sleep(30);gotoxy(x,y-2); printf(" ");}}else{i=num+1;for(;num>po;num--){x=(num+6)*6; y=28;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y>21;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(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y>23;y--){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>0;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}num++;for(;i-num>0;num++){x=(i-num+6)*6; y=21;for(;x<72;x++){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}for(;y<28;y++){gotoxy(x,y); printf("%s",car); Sleep(50);gotoxy(x,y); printf(" ");}for(;x>(num-1+6)*6;x--){gotoxy(x,y); printf("%s",car); Sleep(30);gotoxy(x,y); printf(" ");}gotoxy(x,y); printf("%s",car);}if(a>0){x=66;y=25;gotoxy(x,y); printf(" ");gotoxy(x,y-2); printf("%s",car); Sleep(100);if(12>a){gotoxy((12-a)*6,y);printf(" ");}if(a>1){gotoxy(x,y); printf("%s",car);}printstop(0,i-1,x,y-2);}}}/************************************************************ main ********************************************************/int main(void){SqStackCar s1,s2; //停车栈和暂存栈LinkQueueCar p; //队列InitSeqStack(&s1);InitSeqStack(&s2);InitLinkQueue(&p);printf(" 停车场管理系统\n\n");printf("************************* 欢(=^_^=)迎***************************\n");printf(" 收费标准:基础费0.5元,每分钟收取0.05元,收费精确到0.1元\n");printf(" PS:车牌号由阿拉伯数字组成");panitPL();printcar(); gotoxy(0,-3);char c=0; //接受按键while(1) //按ESC退出系统{for(int i=2;i>-1 ;i--) //初始化对话框qingping(i);printf("按ESC退出系统,其它键开始对话");c=getch();if(c==Esc){qingping(0);break;}while(1){qingping(2);gotoxy(28,8); printf("欢迎来到停车场!我是管理员小王。

数据结构上机--停车场管理问题

数据结构上机--停车场管理问题

实习指导[实习题目]:停车场管理。

[实习内容]:首先,实现栈和队列的基本操作,在此基础上,实现停车场管理。

停车场管理问题描述:设停车场是一个可停放 n 辆车的狭长通道,且只有一个大门可供汽车进出。

在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)若车场内已停满 n 辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。

当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门后,其它车辆再按原次序返回车场。

每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费)。

试编写程序,模拟上述管理过程。

要求以顺序栈模拟停车场,以链队列模拟便道。

从终端读入汽车到达或离去的数据,每组数据包括三项:①是“到达”还是“离去”;②汽车牌照号码;③“到达”或“离去”的时刻。

与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。

(提示:需另设一个栈,临时停放为让路而从车场退出的车。

)[实习目的]:通过实习,熟悉栈和队列的基本特点,掌握利用栈和队列解决具体问题的方法。

[实习步骤]:1.实现顺序栈的基本操作基本思路首先实现一个整型顺序栈的初始化、判栈空、进栈、出栈等基本操作,并在主程序中调用这些操作。

基本框架#include <stdio.h>#define TRUE 1#define FALSE 0#define Stack_Size 50typedef int StackElementType; typedef structStackElementType elem[Stack_Size];int top; }SeqStack;/* 以下是函数原形说明。

注意函数头后面有分号。

*/ void InitStack(SeqStack *s); int IsEmpty(SeqStack *s);int Push(SeqStack *s, StackElementType e);int Pop(SeqStack *s, StackElementType *e);/* 以下是函数定义。

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

数据结构实验报告实验题目:停车场管理学生姓名:班级:学号:问题描述设有一个停车场,它是利用一个南北向的狭窄通道建成,北端封闭,大门在最南端。

最先到达的汽车停放在最北端,后面到达的汽车从北至南依次顺序停放。

停车场只能停放n 辆汽车。

当停车场停满n辆车后,后面到达的汽车只能在门外的便道上等候。

一旦有汽车开走,便道上等候的第一辆车就可以开入停车场停放。

当停车场内某辆汽车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该车开出大门外,其他汽车再按原次序返回车场。

每辆停放在车场内的汽车在离开时必须按它停放时间的长短交纳费用。

例题分析每到达一辆汽车,先检查停车场栈是否已满,若未满则该车进入停车场停放(入栈操作),并将该车的车号和停放时刻记录在停车场栈的相应元素中,同时显示该车在停车场内的停放位置。

反之,若停车场已满,则该车排到便道上等候的汽车队列最后(入队列操作),并将该车的车号信息记录在汽车队列的相应结点内,同时显示该车在便道上的停放位置。

若要取一辆汽车,则需依次进行下述操作:将阻挡在它后面的汽车退出(停车场栈的出栈操作),并将这些汽车临时存放在另一个辅助栈中(辅助栈的入栈操作);开走要取的汽车(停车场栈的出栈操作),并显示该车应交纳的费用;依次从辅助栈中开出汽车(辅助栈出栈操作),开回停车场中(停车场栈的入栈操作);这时停车场已有一个空车位,便道上等候的第一辆汽车则可以开进停车场内停放(汽车队列的出队列操作和停车场栈的入栈操作)。

程序源代码#include<iostream>#include<conio.h>#include<iomanip>#include<fstream>#include<string>#include <stdlib.h>#include <windows.h>using namespace std;#define Max_Size 2//停车的最大容量#define HourFare 2 //每小时的停车费用int CountForStack=0; //栈里现有的车数int CountForQueue=0; //排队等候的车数typedef struct{char Condition;//到达或者离开的状态int Arrivetime;//到达时间,默认为-1,表示没有到达int Leavetime;//离开时间,默认为-1,表示没有离开int License;//车牌号}CarNode;//保存每辆车的信息typedef struct//栈的定义{CarNode *base;//栈底指针CarNode *top;//栈顶指针int Stacksize;//栈的最大容量}CarStack;typedef struct QNode{char Condition;//到达或者离开的状态int Arrivetime;//到达时间,默认为-1,表示没有到达int Leavetime;//离开时间,默认为-1,表示没有离开int License;//车牌号QNode *next;}QNode;typedef struct//队列的定义QNode *front;//对头指针QNode * rear;//队尾指针}Queue;bool InitStack(CarStack &S1)//初始化栈S1{S1.base=(CarNode*)malloc(Max_Size*sizeof(CarNode));if(!S1.base){cout<<"栈S1 内存分配失败"<<endl;return false;}S1.top=S1.base;S1.Stacksize=Max_Size;return true;}bool InitQueue(Queue &Q){Q.front=(QNode*)malloc(sizeof(QNode));if(!Q.front){cout<<"队列Q 内存分配失败!"<<endl;return false;}Q.rear=Q.front;Q.front->next=NULL;return true;}bool EnQueue(Queue &Q,QNode &e)//插入元素e 为Q 的新的队尾元素QNode *p=(QNode *)malloc(sizeof(QNode));if(!p){cout<<"p 内存分配失败"<<endl;return false;}p->Arrivetime=e.Arrivetime;p->Leavetime=e.Leavetime;p->Condition=e.Condition;p->License=e.License;//将e 赋给Pp->next=NULL;Q.rear->next=p;Q.rear=p;return true;}bool DeQueue(Queue &Q,QNode &t)//出队列函数{if(Q.front==Q.rear){cout<<"队列为空!"<<endl;return false;}QNode *p=Q.front->next;t.Arrivetime=p->Arrivetime;t.Condition=p->Condition;t.Leavetime=p->Leavetime;t.License=p->License;Q.front->next=p->next;if(Q.rear==p)Q.rear=Q.front;}free(p);return true;}void InitCarNode(CarNode &C,char condition,int arrivetime,int leavetime,int license) {C.Arrivetime=arrivetime;C.Condition=condition;C.Leavetime=leavetime;C.License=license;}bool Push(CarStack &S1,CarNode &car)//插入新的元素car 为的栈顶元素{if(S1.top-S1.base>=S1.Stacksize){cout<<"此栈已满,不能压入新的信息"<<endl;return false;}(*S1.top).Arrivetime=car.Arrivetime;(*S1.top).Condition=car.Condition;(*S1.top).Leavetime=car.Leavetime;(*S1.top).License=car.License;++S1.top;//栈顶指针上移return true;}bool Pop(CarStack &S1,CarNode &t)//出栈操作{if(S1.top==S1.base)cout<<"栈S1 为空,不能执行出栈操作"<<endl;return false;}--S1.top;//栈顶指针下移t.Arrivetime=(*S1.top).Arrivetime;t.Condition=(*S1.top).Condition;t.Leavetime=(*S1.top).Leavetime;t.License=(*S1.top).License;return true;}bool IsStackFull(CarStack &S1)//判断S1 栈是否已满{if(S1.top-S1.base>=S1.Stacksize)return true;elsereturn false;}bool IsStackEmpty(CarStack &S1)//判断S1 栈是否已空{if(S1.top==S1.base)return true;elsereturn false;}bool IsQueueEmpty(Queue &Q)//判断队列是否为空{if(Q.front==Q.rear)return true;elsereturn false;}bool SearchInStack(CarStack &S1,int a)//a 表示要查找的车牌号,如果在停车场里面,就返回true{bool tag=false;if(!IsStackEmpty(S1))//如果栈S1 非空{CarNode *p=S1.top-1;while(p!=S1.base){if((*p).License==a)tag=true;--p;}if((*p).License==a)tag=true;}return tag;}bool SearchInQueue(Queue &Q,int a)//a 表示要查找的车牌号,如果在通道里面,就返回true{bool tag=false;if(!IsQueueEmpty(Q))//如果队列非空{QNode *p=Q.front->next;while(p!=Q.rear){if((*p).License ==a)tag=true;p=p->next;}//退出此while 循环时p 指向最后一个元素if((*p).License ==a)tag=true;}return tag;}void InCar(CarStack &S1,Queue &Q,int a1,int a2)//表示进入车辆,a1 表示到达时间,a2 表示车牌号码{if(SearchInStack(S1,a2)){cout<<"车号"<<a2<<"已经存在于停车场内,输入有误"<<endl;return;}if(SearchInQueue(Q,a2)){cout<<"车号"<<a2<<"已经存在于通道内,输入有误"<<endl;return;}if(IsStackFull(S1))//如果堆栈已满,说明停车场已满,需要停车在通道里面{QNode qnode;qnode.Arrivetime=-1;//在通道里面不收费,所以不计时qnode.Condition='A';qnode.Leavetime=-1;//定义为-1,说明还没有开始离开qnode.License=a2;EnQueue(Q,qnode);//停在通道上++CountForQueue;cout<<"车号:"<<qnode.License<<"停在通道的第"<<CountForQueue<<"号位置"<<endl;}else{CarNode carnode;carnode.Arrivetime=a1;carnode.Condition='A';carnode.Leavetime=-1;carnode.License=a2;Push(S1,carnode);++CountForStack;cout<<"车号:"<<carnode.License<<",到达时间:"<<carnode.Arrivetime<<" 点,停在停车场的第"<<CountForStack<<"号位置"<<endl;}}void Sreach(CarStack &S1,Queue &Q,int a){if(SearchInStack(S1,a)){cout<<"车号:"<<a<<"已存在停车场里面的第"<<CountForStack<<"号位置"<<endl;return;}if(SearchInQueue(Q,a)){cout<<"停车场已满,车号"<<a<<"存在于通道里面的第"<<CountForQueue<<"号位置,在次等候"<<endl;return;}else{cout<<"对不起!你查找的车号不在停车场里面"<<endl;return;}}void OutCar(CarStack &S1,Queue &Q,int a1,int a2)//出车函数,a1 表示离开时间,a2 表示车牌号码{if(SearchInQueue(Q,a2)){cout<<"车号"<<a2<<"存在于通道里面,还没有进入停车场,不能离开"<<endl;return;}if(!SearchInStack(S1,a2)){cout<<"车号"<<a2<<"该车不在停车场内"<<endl;return;}CarStack tempstack;InitStack(tempstack);//新建一个栈,存放让路的汽车bool tag1=false;//标志这个停车场出车以前是否已满,默认为没有满tag1=IsStackFull(S1);bool tag2=true;//标志通道是否有汽车在等待,默认为通道为空tag2=IsQueueEmpty(Q); CarNode temp;//用来保存暂时取出的汽车bool tag3=false;while(1){Pop(S1,temp);if(temp.License==a2){if(a1<temp.Arrivetime){cout<<"离开失败!"<<endl;tag3=true;Push(tempstack,temp);}else{cout<<"车号:"<<a2<<"现在离开停车场,所用时间为:"<<a1-temp.Arrivetime<<"小时,应收RMB 为:"<<(a1-temp.Arrivetime)*HourFare<<"元"<<endl;}break;}elsePush(tempstack,temp);//进入暂存栈} 则把前面倒出的车再次放while(!IsStackEmpty(tempstack))//如果临时栈不空,入停车场{Pop(tempstack,temp);Push(S1,temp);}QNode tempqnode;//用来暂时保存从通道出来的汽车if(tag1==true&&tag2==false&&tag3==false)//如果出车前停车场已满,并且通道不为空,并且离开没有失败{DeQueue(Q,tempqnode);--CountForQueue;temp.Arrivetime=a1;temp.Condition=tempqnode.Condition;temp.Leavetime=tempqnode.Leavetime;temp.License=tempqnode.License;Push(S1,temp);}if(tag3==false)//如果停车通道是空的,停车场没有满,并且离开成功{--CountForStack;}}}void showmenu(CarStack &S1,Queue &Q){cout<<"******************************选择菜单*******************************"<<endl;cout<<" 1: 停车"<<endl;cout<<" 2: 离开停车场"<<endl;cout<<" 3: 查看车辆信息"<<endl;cout<<" 4: 退出系统"<<endl;cout<<"*****************************请按键选择******************************"<<endl;int tag;cin>>tag;while(tag!=1&&tag!=2&&tag!=3&&tag!=4)cin>>tag;int a1;unsigned int a2;switch(tag){case 1:cout<<"请输入到达的车号:"<<endl;cin>>a1;cout<<"请输入到达的时间:"<<endl;cin>>a2;InCar(S1,Q,a2,a1);Sreach(S1,Q,a1);break;case 2:cout<<"请输入离开的车号:"<<endl; cin>>a1;cout<<"请输入离开的时间:"<<endl; cin>>a2;OutCar(S1,Q,a2,a1);break;case 3:cout<<"请输入你要查看的车号:"<<endl;cin>>a1;Sreach(S1,Q,a1);break;case 4:return;break;}showmenu(S1,Q);}void main(){CarStack carstack;InitStack(carstack);//建立并且初始化用于停车场的堆栈Queue carQueue;InitQueue(carQueue);//建立并且初始化用于通道的队列showmenu(carstack,carQueue);}。

相关文档
最新文档