停车场模拟管理程序设计报告(附源代码)
停车场管理系统源代码

int main(){
int i=1;
int j=1;
int status;
float time,money;
LinkQueue Q;
Car car_I,car_D,car_M;
SqStack S;
SqStack2 S2;
InitStack(S);
InitStack2(S2);
InitQueue(Q);
}
time=car_D.time-car_I.time;
if(time<0.0) {
printf("输入时间有错!请重新输入!");
}
if(time>0.0&&time<=3.0){
money=time*4;
}
else money=time*6;
printf("你的车牌为%d的车,应收费%5.2f元。",car_D.CarNum,money);
printf("\t\t位置:%d",l++);
printf("\n");
q++;
}
return OK;
}
//备用车道(顺序栈)
typedef struct {
Car2 *top2;
Car2 *base2; //
int stacksize2;
}SqStack2;
//初始化
int InitStack2(SqStack2 &S2){
if(!StackFull(S)){
DeQueue(Q,car_M); //便道上的车离开后进入停车场,那么后面的车的位置都得变。
C语言停车场管理实验报告

设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。
汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
试为停车场编制按上述要求进行管理的模拟程序。
功能描述以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
栈以顺序结构实现,队列以链表实现系统设计及实现1.头文件及宏定义#include <conio.h>#include <malloc.h>#include <stdio.h>#include <stdlib.h>#include <windows.h>#define ClearScreen() system( "cls" ) // 清空当前屏幕#define setcolor() system("color 2f")//设置背景前景颜色#define Pause( szPrompt ) printf( "%s", szPrompt ),getch()2.时间和汽车信息结构体的定义(部分代码)typedef struct carinformation // 车辆信息{char szRegistrationMark[64]; // 车牌号char szArrivalTime[16]; // 到达时间char szEntranceTime[16]; // 进入停车场(开始计费)时间char szDepartureTime[16]; // 离开时间} TCARINFORMATION, *LPTCARINFORMATION;3.栈和队列的定义(部分代码)typedef struct carqueue // 链队{LPTCARNODE lpHead; // 头结点LPTCARNODE lpRear; // 指向当前队尾的指针int nEffectiveSize; // 当前队中元素个数} TCARQUEUE, *LPTCARQUEUE;4.栈和队列的初始化(部分代码)void InitQueue( LPTCARQUEUE &lpCarQueue ){lpCarQueue = ( LPTCARQUEUE ) malloc( sizeof( TCARQUEUE ) );lpCarQueue->lpHead = ( LPTCARNODE) malloc( sizeof( TCARNODE ) );lpCarQueue->lpHead->lpNext = NULL;lpCarQueue->lpRear = lpCarQueue->lpHead;lpCarQueue->nEffectiveSize = 0;}实现过程1.开始界面:输入车库容量2.输入车辆到达信息3.当车库停满车时临时停到便道上不收车费4.车辆离开后车库有车位便道上的车进入车库并显示离去车的收费记录5.显示车库及便道信息6.停止输入显示制作者信息及退出程序实训心得通过这次实训我对课本上的理论知识有了更深层次的了解,可能在仅一周的时间内学到的东西有限,不过却也是受益非浅,实训本来就是对平常所学的理论知识通过具体的实现表示出来是在完成理论课程学习之后安排的综合实践训练,任何一个优秀的程序员都是从实践中获得经验和教训的。
停车场模拟管理系统报告(附源代码)

实训报告专业:班级:学号:姓名:课设题目:停车场模拟管理系统指导教师:目录一、需求分析 (1)二、总体设计 (1)2.1系统功能概述 (1)三、到达停车场准备进入停车场 (2)3.1进入停车场函数 (3)四、离开停车场 (3)五、详细设计 (6)5.1函数的调用关系 (6)5.2主要算法的流程图 (6)六、软件说明: (8)6.1使用环境:Visual C++ 6.0. (8)操作要求:程序运行后,用户根据所要进行的操作选择是进入停车场还是离开停车场并输入车牌号和时间 (8)6.2测试图: (8)七、总结 (10)附录:程序代码 (10)一、需求分析停车场模拟管理系统现在很多的大型超市等都有智能的停车场当你进入停车场门口就会自动的显示里面还有多少的空位并且指引你走到空的车位停下避免了把车辆开进去并且找不到空的车位和因为车子在停车场内乱走而导致想出来的车没有足够的时间出来。
导致空间和时间各种不必要的麻烦所以急需我们做一个停车场管理系统。
我们的停车场模拟管理系统有以下方面功能:1记录进入停车场的车辆的车牌号从而进入后可以知道其所停的停车位。
2车子离开停车场根据离开时间和进入时间从而计算出所需要交的费用。
3如果队列已经满了可以让要进入停车场的车子停在旁边的等候队列。
二、总体设计2.1系统功能概述(1)如果选择进入停车场就要判断停车场是否已经满了,如果未满直接进入,如果满了的话就直接排在旁边的便道上等待有车子离开停车场从而进入停车场。
(2)同时改程序还设立多了一个位置以便与有车进入同时有车离开可以停留在这里等候车子离开再进入。
(以防止车子停车场内的车未能离开进入的车又正在进入从而导致停车场堵塞的情况)(3)离开的时候根据离开的车牌号从而把它从停车场中的位置移开并且通过离开时间和进入停车场的时间来计算出该车子所需要交纳的费用。
2.11 总体设计图三、到达停车场准备进入停车场void parkingmanagement::arrival(carstack &cs,carqueue &cq,int cnum,double ctime){int pos;if(!(cs.full())){ 到达停车场的车子首先输入其判int fl(0),i; 断停车场是否已经满了如果则直for(i=0;i<=cs.top;i++){ 接进入等候车道否则就进入停场if(cs.s[i].number==cnum){fl=1;break;}}if(fl==1)cout<<"输入错误!请重新输入!如果到达的车的车牌号!=栈内已有车辆的车牌号"<<endl;else{pos=pushstack(cs,cnum,ctime);//入栈,返回车位信息cout<<"该停车场还有空位,请到"<<pos<<"号车位进行泊车"<<endl;cout<<endl;}}else{pos=pushqueue(cq,cnum,ctime);cout<<"该停车场已满,请将车停到便道"<<pos<<"号车位上"<<endl;cout<<endl;}}3.1进入停车场函数int parkingmanagement::pushstack(carstack &cs,int cnum,double ctime){if(cs.top==Max-1){cout<<"停车场已满!"<<endl;return Max;}else{cs.top++;(cs.s[cs.top]).number=cnum;(cs.s[cs.top]).time=ctime;return (cs.top+1);}}四、离开停车场void parkingmanagement::leave(carstack &cs,carqueue &cq,int cnum,double ctime){int i,flag(0),pstack,count(1),outcarnum;double hour;car *p;for(i=0;i<=cs.top;i++)if((cs.s[i]).number==cnum){flag=1;break;}if(flag){popstack(cs,cnum);hour=ctime-popstacktime;outcarnum=popqueue(cq);/pstack=pushstack(cs,outcarnum,ctime);cout<<"该车在本停车场内停留时间为"<<hour<<"分钟,应付金额"<<hour*(price/60)<<"元!"<<endl;cs.top--;}else{p=cq.front;while(p!=NULL) //如果所输入的车牌号的车子并不是 { 在停车内而是在等候车道内就可直接开走无需收费count++;p=p->next;if(p->number==cnum){deletequeue(cq,count);if(count>Max){cout<<"您的车在便道上的位置为"<<count<<"号车位,请自行驶离,无需付费!"<<endl;break;}}}if(p==NULL) cout<<"您的车不在本停车场内,或输入有误,请重新输入!"<<endl;}}五、详细设计5.1函数的调用关系如下图:图5.11 函数调用5.2主要算法的流程图主程序模块判断进入还是离开离开函数调到达函数输出模块图5.22主要算法图六、软件说明:6.1使用环境:Visual C++ 6.0.操作要求:程序运行后,用户根据所要进行的操作选择是进入停车场还是离开停车场并输入车牌号和时间6.2测试图:程序开始运行:图 6.1 程序主界面进入停车场输入选项和车牌号和时间:图6.2 进入停车场离开停车场输入D 车牌号时间:(根据车牌号找到相应的车)图6.3离开停车场显示结果七、总结在这一次的实训中才知道什么叫做真真正正的体会到什么叫做你看得懂程序听得懂课拿着中上的成绩你就口可以说你懂数据结构懂C++懂C了,无数次在修改代码无数次在询问老师问题同学问题,每一次编译错误减少一小个心里乐得跟开了花似的。
模拟停车场——c语言源代码

模拟停车场——c语⾔源代码实验3 栈与队列的实现及应⽤各模块名称以及功能说明:input_car(top)函数:停车函数,当有车辆驶⼊时记录停车场的停车记录,以栈的⽅式,在停车上限之前每次有车来就堆栈,最后返回栈顶指针。
input_line_car(front,counter2)函数:候车函数,当有车来时,但停车场已满,则利⽤此函数记录便车道上的停车记录,以队列的⽅式,先驶⼊的车排前⾯,后驶⼊的车排后⾯,当停车场中有车驶出时,最后返回⾸指针。
output_car(top,front,counter2)函数:以输⼊要驶出的车的车牌为⽐较标准,从栈顶不断向下查找,建⽴辅助栈,在向下查找的过程中,将要驶出的车后⾯的车村如辅助栈,等该车出栈后,在将辅助栈⾥的元素重新记录到停车场的栈中,同时判断便车道中的停车数,若有停车,则将便车道上最先候车的车停⼊最后的位置,该函数返回栈顶指针。
out_line_car(front)函数:便车道⾸指针后移,返回⾸指针。
show(top,front)函数:表⽰停车场以及便车道情况的函数,停车场是通过栈顶不断向下输出停车情况,便车道通过由⾸指针不断向后输出便车道情况,⽆返回值。
主要功能函数的程序流程图:input_car(top):input_line_car(front,counter2)out_line_car(front)函数:show(top,front)函数:源代码:#include#include#include#define FEE 3 /*每⼩时收费标准*/#define MAX 5 /*停车场容量*/struct node /*停车场中每辆车的表⽰*/ {int number,time;struct node *link;};typedef node NODE;struct queue /*便车道中每辆车的表⽰*/ {struct queue *next;};typedef queue QUEUE;NODE *input_car(NODE *top) /*停车函数*/ {NODE *p;p=(NODE *)malloc(sizeof(NODE));if(p==NULL){printf("没有内存了!\n");exit(1);}else{printf("请输⼊车牌号:");scanf("%d",&p->number);printf("输⼊您停车的时刻:");scanf("%d",&p->time);p->link=top;top=p;}return top;}QUEUE *input_line_car(QUEUE *front,int counter2) /*候车函数*/ {QUEUE *rear,*p;int i,n;if(counter2==0){p=(QUEUE *)malloc(sizeof(QUEUE));printf("请输⼊车牌号:");scanf("%d",&p->number);p->next=NULL;front=p;}{rear=front;for(i=0;i{rear=rear->next;}p=(QUEUE *)malloc(sizeof(QUEUE));printf("请输⼊车牌号:");scanf("%d",&p->number);rear->next=p;p->next=NULL;}return front;}NODE *output_car(NODE *top,QUEUE *front,int counter2)/*车辆开出函数*/ { NODE *p,*q,*s,*t,*m,*n;q=(NODE *)malloc(sizeof(NODE));q=NULL;int a,b;if(top==NULL){printf("泊车位⽆停车情况!\n");}else{printf("请输⼊要出停车场的车的车牌号:");scanf("%d",&a);while(top->number!=a)/*寻找应该驶出的车辆*/{p=(NODE *)malloc(sizeof(NODE));p->number=top->number;p->time=top->time;p->link=q;q=p;if(top==NULL){printf("输⼊有误停车场内没有该车\n\n");top=NULL;while(q!=NULL){m=(NODE *)malloc(sizeof(NODE));m->number=q->number;m->time=q->time;m->link=top;top=m;q=q->link;}printf("请再输⼊正确车牌号:");scanf("%d",&a);q=NULL;while(top->number!=a){n=(NODE *)malloc(sizeof(NODE));n->number=top->number;n->time=top->time;n->link=q;q=n;top=top->link;}break;}}printf("请输⼊出停车场的时间:");scanf("%d",&b);printf("\n车牌为%d的车开出停车场,停车时间%d点⾄%d点收费%d元\n",a,top->time,b,FEE*(b-top->time));printf("\n此时便车道上最先候车的车进⼊停车场,进⼊时间:%d\n",b); top=top->link;{s=(NODE *)malloc(sizeof(NODE));s->number=q->number;s->time=q->time;s->link=top;top=s;q=q->link;}if(counter2>0)/*若便车道上有车,则驶⼊停车场*/{t=(NODE *)malloc(sizeof(NODE));t->number=front->number;t->time=b;t->link=top;top=t;}}return top;}QUEUE *out_line_car(QUEUE *front)/*便车道的车开⼊停车场函数*/{QUEUE *p;p=front;front=p->next;free(p);return front;}void show(NODE *top,QUEUE *front)/*停车场以及便车道停车情况函数*/ int x,y;if(top==NULL){printf("⽆泊车记录!\n");}elseprintf("停车位的停车情况为(右边为先停⼊的车):"); while(top!=NULL){x=top->number;printf("%5d",x);top=top->link;}printf("\n");}if(front==NULL){printf("⽆车停于便车道!\n");}else{printf("便车道的停车情况为(左边为先候车的车):"); while(front!=NULL){y=front->number;printf("%5d",y);front=front->next;}printf("\n");}}int main(){int chioce,flag=1;int counter1=0;/*停车场停车数*/int counter2=0;/*便车道停车数*/NODE *top,*p;QUEUE *front,*q;top=NULL;front=NULL;printf("\n");printf("请输⼊您的操作:车辆到达2车辆离开3显⽰停车场内及便道上的停车情况4退出系统\n"); printf("\n"); while(flag){scanf("%d",&chioce);switch(chioce){case 1:{if(counter1{p=input_car(top);counter1++;top=p;}else{printf("停车场已满,此时只能停车于便车道!\n");q=input_line_car(front,counter2);counter2++;front=q;}}break;case 2:{p=output_car(top,front,counter2);top=p;if(counter2>0){q=out_line_car(front);counter2--;front=q;}}break;case 3:show(top,front); break;case 4:flag=0;}printf("\n");printf("请继续操作!\n"); }printf("\n");printf("谢谢使⽤!\n\n"); return 0;}。
C语言停车场管理系统源代码.doc

#include<stdio.h>#include<stdlib.h>#define stacksize 2 //车站//容量///////////////////////////////////////////////////////typedef struct Snode{int number;float int_time[2];float bian_time[2];}record;typedef struct {record *base;record *top;int size;}Stack;/////////////////////////////////////////////////////typedef struct Qnode{int number;float int_time[2];struct Qnode *next;}Qnode,*Queue;typedef struct {Queue front;Queue rear;}Linkqueue;void xunhuan(Stack L,Linkqueue Q);void jixu(Stack L,Linkqueue Q);//////////////////////////////////////////////////////////////////////////////////////////////////////////void InitStack(Stack &L) //堆栈操作{L.base=(record*)malloc(sizeof(Snode)*stacksize);if(!L.base)exit(0);L.top=L.base;L.size=stacksize;}/////////////////////////////////////////////////////void input(Stack &L,record h){*L.top++=h;}///////////////////////////////////////////////////Snode output(Stack &L,record &e){e=*--L.top;return e;}int Stackman(Stack L){if(L.top-L.base==L.size)return 0;elsereturn 1;}int StackEmpty(Stack L){if(L.base==L.top)return 0;elsereturn 1;}////////////////////////////////////////////////////////////////////////////////////////////////////void Initque(Linkqueue &Q) //队列操作{Q.front=Q.rear=(Queue)malloc(sizeof(Qnode));if(!Q.front)exit(0);Q.front->next=NULL;}//////////////////////////////////////////////////void enqueue(Linkqueue &Q,int number,float time[]){Queue q;printf("停车场已满,请将车辆停入便道!\n");q=(Queue)malloc(sizeof(Qnode));q->int_time[0]=time[0];q->int_time[1]=time[1];q->number=number;q->next=NULL;Q.rear->next=q;Q.rear=q;}///////////////////////////////////////////////////void outqueue(Linkqueue &Q,Queue &e) //此处有点问题??????????????{// Qnode *q;// q=(Queue)malloc(sizeof(Qnode));e=Q.front->next;// Q.front->next=q->next;//delete q;Q.front->next=Q.front->next->next;if(Q.rear==e){Q.front=Q.rear;// Q.front=NULL;}}int QEmpty(Linkqueue Q){if(Q.rear==Q.front)return 0;elsereturn 1;}//////////////////////////////////////////////////// //停车场管理操作////////////////////////////////////////////////////void jixu(Stack L,Linkqueue Q){int n;fflush(stdin);scanf("%d",&n);switch(n){case 1:printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");xunhuan(L,Q);break;case 2:printf("****************************退出管理系统*****************************\n");default:printf("\n输入错误,请重新输入: ");jixu(L,Q);break;}}void jiaofei(float time[],float time1[],float time2[]) //缴费操作{float data1,data2;double money;if(time2[0]!=0&&time2[1]!=0)data2=(time1[0]-time2[0]-1)*60+60-time2[1]+time1[1];elsedata2=0;data1=(time[0]-time1[0]-1)*60+60-time1[1]+time[1];// printf("进入车场时间%f,退出车场时间%f\n",time1[1],time[1]);printf("你的停车时间为%lf小时,在便道停留时间%f小时\n",data1/60,data2/60);money=data1/60*5.0+data2/60*2.0;printf("请交纳%lf元\n",money);/* if(data1<=60.0)printf("请交纳5元。
实验三 停车场模拟管理程序的设计与实现

实验三停车场模拟管理程序的设计与实现一、问题描述设停车场只有一个可停放几辆汽车的狭长通道,只能停放五辆车,另外还有一个便道,可停放无数辆车,停车场只能单向进出,设计一个管理停车场的系统。
二、数据结构实现停车位栈:typedef struct{char name[10];}carname;typedef struct{carname car[6];int top;}seqstackcar;便道队列typedef struct node{carname car[100];int front,rear;int num;}queuenode;三、功能设计1.车进入函数void arrive(seqstackcar *stop,queuenode *lq,carname x)2.车离开函数int leave(seqstackcar *s1,seqstackcar *s2,queuenode *p,carname x)3.查询车函数void chaxun(seqstackcar *s1)四、界面设计可以为用户提供采用多选择式管理停车位使用户使用本系统方便快捷。
五、运行与调试1.汽车进入时的场景2.离开和查询时的场景3.容错检测#include<iostream.h>#include<stdlib.h>#include<string.h>#define maxsize 5typedef struct{char name[10];}carname;carname name1;typedef struct{carname car[6];int top;}seqstackcar;typedef struct node{carname car[100];int front,rear;int num;}queuenode;seqstackcar *init_car(){seqstackcar *s;s=new seqstackcar;if(!s)return NULL;else{s->top=0;return s;}}int push(seqstackcar *s,carname x) {if(s->top==maxsize)return 0;else{s->top++;s->car[s->top]=x;return 1;}carname pop(seqstackcar *s){if(s->top==0){return name1;}else{s->top--;return s->car[s->top+1];}}queuenode *initqueue(){queuenode *q;q=new queuenode;q->front=q->rear=0;q->num=0;return q;}int inqueue(queuenode *q,carname x){if(q->num==100)return 0;else{q->rear=q->rear+1;q->car[q->rear]=x;q->num++;return 1;}}carname outqueue(queuenode *q){if(q->num==0){cout<<"候车处已经没车了"<<endl;return name1;}else{q->front++;q->num--;return q->car[q->front];}}void arrive(seqstackcar *stop,queuenode *lq,carname x){int f;f=push(stop,x);if(f==1)cout<<<<"车在"<<stop->top<<"车位上"<<endl;else{inqueue(lq,x);cout<<<<"车在候车处"<<lq->rear-lq->front<<"车位上"<<endl;}}int leave(seqstackcar *s1,seqstackcar *s2,queuenode *p,carname x){char *b=;int n,f=0;carname y;char *a=;while(s1->top>0&&f!=-1){y=pop(s1);a=;if(strcmp(a,b)!=0&&[0]!='\0')n=push(s2,y);else{f=-1;break;}}if(strcmp(a,b)==0&&[0]!='\0'){cout<<<<"车已经离开停车位"<<endl;while(s2->top!=0){y=pop(s2);push(s1,y);}if(p->rear-p->front>0){y=outqueue(p);push(s1,y);}elsecout<<"候车处没有车"<<endl;}else{cout<<"没有此车"<<endl;while(s2->top!=0){push(s1,y);y=pop(s2);}}return 0;}void chaxun(seqstackcar *s1){if(s1->top==0)cout<<"停车位没有车"<<endl;else{for(int i=1;i<=s1->top;i++)cout<<s1->car[i].name<<"在"<<i<<"车位"<<endl;}}int main(){char ch;seqstackcar *s1,*s2;queuenode *p;int flag;s1=init_car();s2=init_car();p=initqueue();flag=1;while(1){cout<<"请输入字母,A:车进入,L:车退出,E:退出,P:查询"<<endl;cin>>ch;switch(ch){case 'A':{carname q;cout<<"请输入车的名字"<<endl;cin>>;arrive(s1,p,q);}break;case 'L':{carname q1;cin>>;leave(s1,s2,p,q1);}break;case 'E':{cout<<"exit"<<endl;flag=0;}break;case 'P':chaxun(s1);break;default:cout<<"输入错误请重新输入!"<<endl;if(flag==0)break;}}return 0;}。
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的堆栈来模拟。
由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。
数据结构课程设计 停车场模拟管理系统报告(含源码)

数据结构课程设计停车场模拟管理系统报告(含源码)《数据结构课程设计》报告专业:软件工程班级: T1123-03学号:姓名: XXX课设题目:停车场模拟管理系统指导教师:马春江成绩:2013-07-03目录一、设计题目 (1)二、设计目的 (1)三、总体设计 (1)(一)问题描述 (1)(二)设计要求 (2)(三)数据结构 (2)四、详细设计 (2)(一)分析与实现 (2)(二)系统模块设计 (3)(三)界面设计 (4)五、设计结果与分析 (6)六、总结(收获和不足) (6)(一)课设的不足 (6)(二)课设的收获 (7)附录程序源码 (7)参考文献: (19)指导教师意见 (20)一、设计题目停车场模拟管理系统。
二、设计目的利用所学的知识,模拟设计一个停车场管理系统。
通过程序设计,了解停车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场的情况,和收费情况。
三、总体设计(一)问题描述假设停车场可以停放n辆车的狭长通道,而且只有一个入口出口,汽车进入停车场的停放按照先进先放的顺序,依次排满车道。
当停车场已经停满时(已存放了n辆汽车),想进入停车场的车就只能在便道上等待,等到停车有车离开时,便道上的第一辆车进入停车场。
当停车场内的某辆车要离开时,在它后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场,车辆离开时,按时间缴纳费用。
(二)设计要求用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据的方式进行模拟管理。
输入1,表示车辆到达;输入2,表示车辆离开;输入3,表示列表显示停车场内外情况;输入4,表示系统帮助;输入5,表示查询车辆;输入0,表示退出程序。
车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍。
(三)数据结构本课程设计使用的数据结构有:顺序栈和链式队列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
停车场模拟管理程序的设计与实现一、简介1.设计目的:理解线性表的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。
2.问题的描述:设停车场只有一个可停放几辆汽车的狭长通道,只有一个大门可供汽车进出。
汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车辆开走,则排在便道上的第一辆汽车即可进入;当停车场内某辆汽车要开走时,由于停车场是狭长的通道,在它之后开入的车辆必须先推出车场为他让路,待车辆开出大门,为他让路的车辆再按原次序进入车场。
试设计这样一个停车场模拟管理程序。
二、数据结构的设计:(1)为了便于区分每辆汽车并了解每辆车当前所处的位置,需要记录汽车的牌照号码和汽车当前的状态。
(2)为了便于停车场的管理,要为每个车位分配一个固定的编号。
(3)当停车场的停车位上都已停满了汽车,又有新的汽车到来时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺次序放在便道上,为便道上的每个位置分配一个固定的编号。
当有车从停车位上离开后,便道上的第一辆汽车就立即进入停车位上的某个车位。
(4)当某辆车离开停车场的时候,比他后进停车位的车要为他让路,而且当他开走之后让路的车还要按照原来的停放次序再次进入停车位的某个车位上,为完成这项功能,定义一个结构体。
三、功能(函数)设计:本程序从总体上分为四个功能模块,分别为:(1)程序功能介绍和操作提示模块(2)汽车进入停车位的管理模块(3)汽车离开停车位的管理模块(4)查看停车场状态的查询模块四、界面设计:本程序界面本着易于操作简单整洁而不失美观的理念,采用数字对应功能选项,结合详细的操作提示,使得操作方便快捷,界面清晰明朗。
五、程序设计: 1车辆进入停车场模块:Arrive 函数Enter->top<MAX?执行语句实现进入便道执行语句实现进入车站Y N·Arrive 函数:有车进入停车厂;·Enter->top<MAX :对栈进行判满,Y 表示栈满,进入便道;N 表示栈不满,进入车站;2车辆离开停车场模块:·Leave函数:有车的话就要离开车位。
·scanf("%d",&room):输入需要离开的车所在的位置,如果Enter->top>room,车辆出站。
·W->head!=W->rear)&&Enter->top<MAX:便道上有车且车位没有满,便道上的车进入车站。
3停车场信息显示模块:·List函数:查询车辆信息。
·flag:如果flag=1,则执行List1函数;如果flag=2,则执行List2函数;如果flag=3,则返回,退出函数。
·List1函数:查询车站信息。
·s->top>0:判断车站内有没有车,如果Y,用for循环打印出站内的车位和车牌号的信息;如果N,则输入车场没有车,返回List函数。
·List2函数:查询便道信息。
·w->head!=w->rear:判断便道内有没有车,如果Y,用while循环打印出便道上车的信息;如果N,则输出便道内没有车,返回List 函数。
六、运行与测试:1、测试的数据及其结果:(1)前五辆车到达进入停车位:(2)后来的两辆车在便道等候:(3)牌照为CF003的车离开,CF004,CF005需要让道,CF006进入5号车位:(4)查询车场和便道里的信息(5)退出程序:2、运行与测试期间遇到的问题及其解决办法。
问题1:在车辆离开时不能显示车辆让道的信息;解决办法:在离开函数中一个while循环中增加一个printf 语句,通过循环可以显示全部需要让道的车辆。
问题2:在进行进场出场信息的输入时,只能进行一次;解决办法:设置一个标志量flag和while循环,在每一次操作后返回到操作步骤。
问题3:运行显示程序简介后,继续输入时没有清屏操作,导致运行结果不方便观察:解决办法:增加getch(); system("cls");语句,实现按任意键继续,并清屏。
七、结论:本停车场管理系统,可以进行车辆进入停车场和退出停车场以及停车厂内部车位和便道上的停车信息的显示三个步骤的操作。
在车辆进入停车场进入模块中,如果进入停车场的车辆大于5,即车位里停放的车辆已满,后面的车自动进入便道等候;在车辆离开停车场模块中,在查找车辆过程中如果没有对应车辆能够显示出“对不起,输入有误,请重新输入!”,并有辅助栈保证从车位上出来的车不会改变顺序;车位出现空位时,便道上的车能自动进入车位,同时,便道上的车也可以直接离开停车场;信息查询模块,能够显示停车场车位和便道上等待车的信息。
并有错误操作的信息提示。
同样此程序存在一些不足之处。
在显示模块,没有显示出开出停车场车辆的信息,在进一步修改补充时,可以添加车辆开出停车场的显示模块;车辆的信息过于简单,只有一个车牌,可以添加更加详细的车辆信息以及添加收费操作等功能。
八、设计后的思考:此次课程设计,付出了很多的时间和经历,编程过程中,我看到了自己许多不足,例如程序编写的有点杂乱,造成编译时错误不好找到,没有足够的耐心,有点急功近利,修改编译错误时不能做到系统的分析,造成程序越改越乱,影响了情绪,丢掉了信心。
同时,我也深切感受到了程序员的艰辛,明白了作为一个程序员应该尽可能的为用户考虑,缜密的思维,让程序不断地人性化,可操作性强,界面尽可能的友好,把完美作为自己的目标。
对于程序本身,我看到了良好的程序编写风格对于程序员的重要性,函数之间调用的便利与简洁,以及循环套用的魅力之所在。
总之,不管简单还是复杂的程序设计,都要求扎实的基础知识,因为各种程序都是由简单的一块块的函数结构组成的,并加强实践,从程序的编写中进一步加强对书本知识的掌握。
而且,需要耐心,做程序的编写时比较枯燥的,会出现许多错误,需要我们细心并耐心的进行修改。
回顾编程的过程,我也学到了许多程序之外的东西,编程的过程对一个人的耐心和毅力是一种极大地考验,不停地编译,不停地改错,不停地被打击,信心被一点点的消磨,如果放弃,将前功尽弃。
所以我选择了停一停稍作休息然后坚持下去,终于在完成的那一瞬间,内心充满了自豪和成就感。
这次任务完成的过程给我上了生动而难忘的一课,面对一次次的挫折与打击,我会选择咬牙坚持;为了远方的目标,我会不懈的努力,一点点的去接近。
参考文献:[1]谭浩强,C语言设计(第三版). 北京: 清华大学出版社, 2005[2]严蔚敏吴伟民,数据结构(C语言版).北京:清华大学出版社,2007附:源代碼#include<stdio.h>#include <conio.h>#include<stdlib.h>#include<string.h>#define MAX 5/*车库容量*/typedef struct node{char num[10];}CarNode;/*车辆信息结点*/typedef struct NODE{CarNode *stack[MAX+1];int top;}SeqStackCar; /*模拟车站*/typedef struct car{CarNode *data;struct car *next;}QueueNode;typedef struct Node{QueueNode *head;QueueNode *rear;}LinkQueueCar; /*模拟通道*/void InitStack(SeqStackCar *); /*初始化栈*/int InitQueue(LinkQueueCar *); /*初始化便道*/int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/void List(SeqStackCar,LinkQueueCar); /*显示存车信息*/int j=0;void main(){SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;int j=0;InitStack(&Enter); /*初始化车站*/InitStack(&Temp); /*初始化让路的临时栈*/InitQueue(&Wait); /*初始化通道*/printf("|**************************************|\n");printf("|**************************************|\n");printf("|******** ********|\n");printf("|********欢迎进入停车场管理系统********|\n");printf("|******** ********|\n");printf("|**************************************|\n");printf("|**************************************|\n");printf("|注:本程序操作容易,请注意跟随操作提示|\n");printf("————————————————————\n");printf("请按任意键继续......");getch();system("cls");while(1){printf("请输入对应的数字选择您需要的功能:\n");printf("\n********************\n");printf("*****1.车辆到达*****\n");printf("*****2.车辆离开*****\n");printf("*****3.查询信息*****\n");printf("*****4.退出系统*****\n");printf("********************\n");while(1){scanf("%d",&ch);if(ch==4) printf("谢谢您的使用,再见!\n");elseif(ch>=1&&ch<=4)break;else printf("\n对不起,您的输入有误!\n");break;}switch(ch){ case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/ case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/case 3:List(Enter,Wait);break; /*列表打印信息*/case 4:exit(0); /*退出主程序*/default: break;}}}void InitStack(SeqStackCar *s) /*初始化栈*/{ int i;s->top=0;for(i=0;i<=MAX;i++)s->stack[s->top]=NULL;}int InitQueue(LinkQueueCar *Q) /*初始化便道*/{Q->head=(QueueNode *)malloc(sizeof(QueueNode));if(Q->head!=NULL){Q->head->next=NULL;Q->rear=Q->head;return(1);}else return(-1);}void PRINT(CarNode *p) /*打印出站车的信息*/{printf("\n离开车辆的车牌号为:");puts(p->num);}int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达{CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode));flushall();printf("\n请输入车牌号(例:DS888):\n");gets(p->num);if(Enter->top<MAX) /*车场未满,车进车场*/{Enter->top++;printf("\n车辆停入车场第%d位置.\n\n",Enter->top); Enter->stack[Enter->top]=p;return(1);}else /*车场已满,车进便道*/{ printf("\n对不起,车场已满,该车须在便道等待!\n"); t=(QueueNode *)malloc(sizeof(QueueNode)); j++;t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;printf("车进入%d号便道\n\n",j);return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)/*车辆离开*/{int i, room;CarNode *p,*t;QueueNode *q;/*判断车场内是否有车*/if(Enter->top>0) /*有车*/{ while(1) /*输入离开车辆的信息*/{printf("\n请输入车在车场的位置/1--%d/:",Enter->top);scanf("%d",&room);if(room>=1&&room<=Enter->top) break;}while(Enter->top>room) /*车辆离开*/{printf("\n牌号为%s的车需要让道\n",Enter->stack[Enter->top]);Temp->top++;Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;}p=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;while(Temp->top>=1){Enter->top++;Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--;}PRINT(p);/*判断通道上是否有车及车站是否已满*/if((W->head!=W->rear)&&Enter->top<MAX) /*便道的车辆进入车场*/{ q=W->head->next;t=q->data;Enter->top++;printf("\n便道的%s号车进入车场第%d位置.\n",t->num,Enter->top);W->head->next=q->next;if(q==W->rear) W->rear=W->head;Enter->stack[Enter->top]=t;free(q);}else printf("\n对不起,便道里没有车.\n");}else printf("\n对不起,车场里没有车."); /*没车*/ } void List1(SeqStackCar *S) /*列表显示车场信息*/{int i;if(S->top>0) /*判断车站内是否有车*/{printf("\n车场:");printf("\n 位置车牌号\n");for(i=1;i<=S->top;i++){printf(" %d ",i);puts(S->stack[i]->num);}}else printf("\n车场里没有车!\n");}void List2(LinkQueueCar *W) /*列表显示便道信息*/{ QueueNode *p;p=W->head->next;if(W->head!=W->rear) /*判断通道上是否有车*/{printf("\n等待车辆的号码为:\n");while(p!=NULL){puts(p->data->num);p=p->next;}}else printf("\n便道里没有车."); }void List(SeqStackCar S,LinkQueueCar W){int flag,tag;flag=1;while(flag){printf("\n请输入对应的数字选择你要查询的内容:");printf("\n1.查询车场\n2.查询便道\n3.返回\n");while(1){ scanf("%d",&tag);if(tag>=1||tag<=3) break;else printf("请输入对应的数字选择你要查询的内容\n"); }switch(tag){case 1:List1(&S);break; /*列表显示车场信息*/case 2:List2(&W);break; /*列表显示便道信息*/case 3:flag=0;break;default: break; }}}。