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

合集下载

停车场模拟管理程序的设计与实现源代码a

停车场模拟管理程序的设计与实现源代码a

#include<iostream.h>#include<stdlib.h>class carstack{private:int car[5];int pos;public:carstack(void);void input(int n);void output(void);int showpos(void);int empty(void);};int carstack::empty(void) {return car[0];}carstack::carstack(void) {pos=0;for(int i=0;i<5;i++)car[i]=0;}void carstack::input(int n) {car[pos]=n;pos=pos+1;}void carstack::output(void) {pos--;car[pos]=0;}int carstack::showpos(void) {return pos;}class carqueue{private:int *waitcar;int begin;int end;public:carqueue(void);int reset(int b);int showpos(void);void putin(int b);void putout(void);~carqueue(void);};carqueue::carqueue(void){waitcar=new int[5];begin=end=0;if(waitcar==NULL)exit(1);}carqueue::~carqueue(void){delete[] waitcar;}void carqueue::putin(int b) //b=1;{if(end==0)waitcar[begin]=b;waitcar[end]=b;end++;}void carqueue::putout(void) //b是位置。

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

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

停车场模拟管理程序的设计与实现一、简介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函数:有车的话就要离开车位。

停车场管理系统实验报告

停车场管理系统实验报告
实现提示:以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模
拟管理。每一组输入数据包括三个数据项:汽车到达”或离去”信息、汽车牌照号码及到达或离去的
时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上 的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间 不收费)。栈以顺序结构实现,队列以链表(带头结点)实现。
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实 现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照 号码和进入停车场的时刻。
设n=2,输入数据为:(A',1,5), (A'2,10), (D',1,15), (A'3,20),(A'4,25),
cout<<x<<"";
}
cout<<"出队成功!!"<<endl;
}
//创建队
void CreatQueue(SqQueue &sq)
{
In itQueue(sq);
int nu m,i=1;
cout<<"以000表示输入结束! !"<<endl; while(1)
{
cout<<"请输入第"<<i<<"个元素:";cin»num;
{ ls=NULL;
}
//进栈,相当于头插法
void Push(Li nkStack *&ls,i nt x)

模拟停车场——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;}。

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

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

实训报告专业:班级:学号:姓名:课设题目:停车场模拟管理系统指导教师:目录一、需求分析 (1)二、总体设计 (1)2.1系统功能概述 (1)三、到达停车场准备进入停车场 (2)3.1进入停车场函数 (3)四、离开停车场 (3)五、详细设计 (6)5.1函数的调用关系 (6)5.2主要算法的流程图 (6)六、软件说明: (7)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了,无数次在修改代码无数次在询问老师问题同学问题,每一次编译错误减少一小个心里乐得跟开了花似的。

停车场管理系统源程序

停车场管理系统源程序

#include <stdio.h>/*包含了与标准I/O库有关的变量定义和宏定义*/#include <stdlib.h>/*文件包含所用的文件*/#include<conio.h>#include<io.h>#include <stdlib.h>int cars[12][4]={{1234,1,1,20},{2345,1,2,15},{3456,1,3,10},{4567,1,4,5},{0,1,5,0},{0,1,6,0},{0,2,1,0},{0,2,2,0},{0,2,3,0},{0,2,4,0},{0,2,5,0},{0,2,6,0}};/*二维数组代表停车信息*/void save(){FILE *fp;int i,j;if((fp=fopen("car.dat","w"))==NULL){printf("cannot open file\n");return;}for(i=0;i<12;i++)for(j=0;j<4;j++)if(fwrite(cars,2,1,fp)!=1)printf("file write error\n");fclose(fp);getchar();}void car_park(void)/*停车操作*/{int x,i,j;printf("\n ^-^ 欢迎您的光临! ^-^\n ");printf(" \n\n 请输入车牌号:\n\n");printf("\n 注意:车牌号要在1000至9999之间\n 输入错误的车牌号将返回菜单\n\n"); scanf("%d",&x);/*输入要停车的车牌号*/for (i=0;i<12;i++)if(cars[i][0]==x||x<1000||x>9999)break;if(i!=12){printf("\n错误的号码或已经停过了!!!\n");getchar();}/*如果此车号以在,打印此车已停*/else if(i==12&&x>=1000&&x<=9999){for (i=0;i<12;i++)if(cars[i][0]==0) {cars[i][0]=x;save();printf("\n\n成功\n\n");printf("层=%d,车位=%d\n",cars[i][1],cars[i][2]);printf("\n\n\nTwo times 'Enter' to end...");break;}/*如果此车号不在,则进行停车操作*/for (i=0;i<12;i++)if(cars[i][0]!=0) cars[i][3]+=5;/*所有停车时间+5*/save();/*保存以上信息到文件*/}}void car_get(void)/*取车操作*/{int i,y;float paid;int a;printf("\n 取车\n\n\n 输入车牌号:\n\n\n\n");printf("\n 车牌号在1000至9999之间\n 错误的号码\n\n"); scanf("%d",&y);/*输入要取车的车牌号*/for(i=0;i<12;i++){for(i=0;i<12;i++)if(cars[i][0]==y){cars[i][0]=0;/*取车后车牌号清零*/paid=0.2*cars[i][3]/5;/*计算停车费用*/printf("\n 计费(1--是2或任意键--否)\n\n\n");scanf("%d",&a);{switch(a){case 1:printf("\n\n\n价格是%8.2fyuan\n",paid);/*打印停车费用*/ cars[i][3]=0;/*时间清零*/save();break;case 2:printf("欢迎您下次光临");cars[i][3]=0;/*时间清零*/save();break;default: break;}}}else;break;}if(i==12)printf("\n此车不在停车场!!!\n");/*如果此车不在,打印号码不在*/}void printfdata()/*停车信息*/{int i,j;FILE *fp;fp=fopen("car.dat","r");/*打开文件"car.dat"*/printf(" \n Number Floor Position Time\n");for(i=0;i<12;i++){for(j=0;j<4;j++){fread(cars,2,1,fp);/*读文件*/printf(" %6d",cars[i][j]);}printf("\n");}fclose(fp);/*关闭文件"car.dat"*/}void save();void car_park(void);void car_get(void);void printfdata();char readcommand();void initialization();int main(){char c;printf("*******************************停车场管理操作程序*******************************\n");printf("设计者:秦民凯专业:岩土工程学号:20081002763 日期: 2010/9/2\n");;printf("--------------------------------------------------------------------------------\n");printf("按'enter'开始\n");while(1){initialization(); /*初始化界面*/c=readcommand(); /*读取停车场状况*/system("cls");switch(c){case 'p': car_park(); break;/*停车操作*/case 'P': car_park(); break;/*停车操作*/case 'g': car_get(); break;/*取车操作*/case 'G': car_get(); break;/*取车操作*/case 'd': printfdata();printf("\n\n please press 'Enter' to continue....\n");scanf("%c",&c); break;/*停车信息*/case 'D': printfdata(); /*停车信息*/printf("\n\n rreupklfdkplease press 'Enter' to continue....\n");scanf("%c",&c); break;case 'e': printf("\n\n\n\n Press 'Enter' to continue...");exit(0); break;case 'E': printf("\n\n\n\n Press 'Enter' to continue...");exit(0); break;default : printf("ERROR! Press 'Enter' to continue..."); getchar(); break;}}}/****************************************************************************** **/void initialization() /*初始函数*/{int i;getchar();printf("\n*********************************************************************** *********\n");printf(" 1. 停车--p 2. 取车--g 3. 停车时间--d 4.退出--E");printf("\n\n********************************************************************** **********\n");}char readcommand() /*选择函数*/{char c;while((c!='p')&&(c!='P')&&(c!='g')&&(c!='G')&&(c!='d')&&(c!='D')&&(c!='e')&&(c!='E')) {printf("输入p,g,d,e 选择!!\n");c=getchar();printf("\n");break;}return c;}。

停车场管理系统源代码【范本模板】

停车场管理系统源代码【范本模板】

//停车场管理系统#include〈stdio。

h>#include<stdlib.h〉#define OVERFLOW 0#define ERROR 0#define OK 1#define STACKSIZE 2 //车库容量//时间节点typedef struct time{int hour;int min;}Time;//车辆信息typedef struct{char CarNum;float time;int pos_a; //车在停车场中的位置int pos_b; //车在便道上的位置int flag;}Car,Car2;//车库信息(顺序栈)typedef struct{Car *top;Car *base;int stacksize;}SqStack;//初始化int InitStack(SqStack &S){S。

base=new Car[STACKSIZE];if(!S。

base) exit(OVERFLOW);S。

top=S.base;S。

stacksize=STACKSIZE;return OK;}//判空int StackEmpty(SqStack S){if(S。

top==S。

base) return OK;else return ERROR;}//判满int StackFull(SqStack S){if(S.top—S。

base〉=S。

stacksize) return OK;else return ERROR;}//入栈int Push(SqStack &S,Car e){if(S。

top-S。

base==S。

stacksize) return ERROR;*S。

top++=e;return OK;}//出栈int Pop(SqStack &S,Car &e){if(S。

top==S.base) return ERROR;e=*——S.top;return OK;}//遍历栈int StackTraverse(SqStack S){Car *p=S。

C语言停车场管理系统源代码.doc

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元。

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

实训报告专业:班级:学号:姓名:课设题目:停车场模拟管理系统指导教师:目录一、需求分析 (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了,无数次在修改代码无数次在询问老师问题同学问题,每一次编译错误减少一小个心里乐得跟开了花似的。

非常的感谢同学和老师在QQ上不厌其烦的一次又一次的回答我的问题哪怕是一个马虎的分号的错误。

正所谓勤能补拙往后的我要更加的努力去学习了。

附录:程序代码#include<iostream>using namespace std; const int Max=10;const double price=30;class car{public:double time;int number;car *next;};class carstack{friend class parkingmanagement;public:carstack();int empty();int full();car *s;int top;};carstack::carstack(){top=-1;s=new car[Max];if(s==NULL){cout<<"栈空间分配不成功!"<<endl;exit(1);}}int carstack::full(){return top==Max-1;}class carqueue{friend class parkingmanagement;public:carqueue();int full();car *front,*rear;};carqueue::carqueue(){rear=front=NULL;}class parkingmanagement{public:int pushstack(carstack &cs,int cnum,double ctime);void popstack(carstack &cs,int cnum);int pushqueue(carqueue &cq,int cnum,double ctime);int popqueue(carqueue &cq);void arrival(carstack &cs,carqueue &cq,int cnum,double ctime);void leave(carstack &cs,carqueue &cq,int cnum,double ctime);void deletequeue(carqueue &cq,int i);int popstacknumber;double popstacktime;};int parkingmanagement::pushstack(carstack &cs,int cnum,double ctime){if(cs.top==Max-1){//Max从1开始,top从0开始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::popstack(carstack &cs,int cnum) {int i;car p;carstack stemp;for(i=0; i<=cs.top; i++)if((cs.s[i]).number==cnum) break;p=cs.s[i];while(cs.top>i) stemp.s[++(stemp.top)]=cs.s[(cs.top)--];popstacknumber=p.number;int popstacknumber()popstacktime=p.time;double popstacktime()cs.top--;while(stemp.top>=0)cs.s[++(cs.top)]=stemp.s[(stemp.top)--];}int parkingmanagement::pushqueue(carqueue &cq,int cnum,double ctime){car *p,*countp;int count(1);p=new car;p->number=cnum;p->time=ctime;p->next=NULL;if (cq.front==NULL){cq.front=cq.rear=p;}else{p->next=(cq.rear)->next;(cq.rear)->next=p;cq.rear=(cq.rear)->next;}countp=(cq.front)->next;while(countp!=NULL){count++;countp=countp->next;}return count;}int parkingmanagement::popqueue(carqueue &cq){car p;if(cq.front!=NULL){p.number=((cq.front)->next)->number;p.time=((cq.front)->next)->time;p.next=((cq.front)->next)->next;}return p.number;}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;}}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++;//如果在过道中找到该车,则该车的位置为过道中的第count位置(count从1开始)p=p->next;if(p->number==cnum){ deletequeue(cq,count);if(count>Max){cout<<"您的车在便道上的位置为"<<count<<"号车位,请自行驶离,无需付费!"<<endl;break;}}}if(p==NULL) cout<<"您的车不在本停车场内,或输入有误,请重新输入!"<<endl;}}void parkingmanagement::deletequeue(carqueue &cq,int i){ car *p,*q;int j(0);p=cq.front;while(p && j<i-1){p=p->next;j++;}if(!p || !p->next) cout<<"i不合法";else{q=p->next;p->next=q->next;delete q;}}void print(){cout<<"= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ="<<endl;cout<<"= 欢迎光临!="<<endl;cout<<"= ="<<endl;cout<<"= 本停车场收费标准为:30元/小时;车库容量为:10 ="<<endl;cout<<"= ="<<endl;cout<<"= 请输入您的泊车信息:格式为:(到达/离去/退出);车牌号;现在时刻 ="<<endl;cout<<"= 其中,A:到达;D:离去;E:退出系统="<<endl;cout<<"= = = = = = = = = = = = = = = = = = = = = = = = == = = = = = = = = ="<<endl;}int main(){char acc;int carnum;double cartime;parkingmanagement park;carstack cars;carqueue carq;while(1){print();cin>>acc>>carnum>>cartime;if(acc=='A') park.arrival(cars,carq,carnum,cartime);else if(acc=='D') park.leave(cars,carq,carnum,cartime);else if(acc=='E') break;elsecout<<"您的输入有误,请重新输入!"<<endl;}}。

相关文档
最新文档