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

合集下载

停车场模拟管理程序的设计与实现源代码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元。

数据结构课程设计 停车场模拟管理系统报告(含源码)

数据结构课程设计 停车场模拟管理系统报告(含源码)

数据结构课程设计停车场模拟管理系统报告(含源码)《数据结构课程设计》报告专业:软件工程班级: 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,表示退出程序。

车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍。

(三)数据结构本课程设计使用的数据结构有:顺序栈和链式队列。

数据结构课程设计 停车场模拟管理系统报告(含源码)

数据结构课程设计 停车场模拟管理系统报告(含源码)

《数据结构课程设计》报告专业:软件工程班级: T1123-03学号:姓名: XXX课设题目:停车场模拟管理系统指导教师:马春江成绩:2013-07-03目录一、设计题目 (1)二、设计目的 (1)三、总体设计 (1)(一)问题描述 (1)(二)设计要求 (1)(三)数据结构 (1)四、详细设计 (2)(一)分析与实现 (2)(二)系统模块设计 (2)(三)界面设计 (3)五、设计结果与分析 (4)六、总结(收获和不足) (5)(一)课设的不足 (5)(二)课设的收获 (5)附录程序源码 (5)参考文献: (16)指导教师意见 (17)一、设计题目停车场模拟管理系统。

二、设计目的利用所学的知识,模拟设计一个停车场管理系统.通过程序设计,了解停车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场的情况,和收费情况。

三、总体设计(一)问题描述假设停车场可以停放n辆车的狭长通道,而且只有一个入口出口,汽车进入停车场的停放按照先进先放的顺序,依次排满车道。

当停车场已经停满时(已存放了n辆汽车),想进入停车场的车就只能在便道上等待,等到停车有车离开时,便道上的第一辆车进入停车场.当停车场内的某辆车要离开时,在它后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场,车辆离开时,按时间缴纳费用。

(二)设计要求用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据的方式进行模拟管理。

输入1,表示车辆到达;输入2,表示车辆离开;输入3,表示列表显示停车场内外情况;输入4,表示系统帮助;输入5,表示查询车辆;输入0,表示退出程序.车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍.(三)数据结构本课程设计使用的数据结构有:顺序栈和链式队列.四、详细设计(一)分析与实现1、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、到达时间、离开时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在顺序栈和链式队列中定义结点类型为车辆信息结点类型。

停车场管理系统代码

停车场管理系统代码

// 1、停车场管理.cpp : Defines the entry point for the console application. //^include stdafx.h*'^include vcon 1o.h>^include <malloc・h>^include <stdio.h>^include <stdlib.h>^include <windows. h>//清空当前屏幕#define ClearScreen() system( 'cls M )〃设置背景前景颜色//#define setcolor() system(u color 2f )//显不字符串szPrompt并等待用户按下任意键#define Pause( szPrompt) printf( %s: szPrompt ),getch()typedef struct carinformation // 车辆信息{char szRegistrationMark[64]; // 车牌号char szArrivalTime[16]; // 到达时间char szEntranceT1me[16]; //进入停车场(开始计费)时间char szDepartureTime[16]; // 离开时间} TCARINFORMATION, *LPTCARINFORAAATION;typedef struct carstack{LPTCARINFORMATION IpCarlnformation; // 车辆信息int nTop; //栈顶元素下标int nStackSize; // 栈容量} TCARSTACK, *LPTCARSTACK;//初始化栈IpCarStack,将其容量设置为nSizevoid ln1tStack( LPTCARSTACK ftlpCarStack, int nSize ){IpCarStack = ( LPTCARSTACK ) malloc( sizeof ( TCARSTACK ));lpCarStack->lpCarlnformation = ( LPTCARINFORMATION ) malloc( nSize * sizeof ( TCARINFORAAATION ));lpCarStack->nTop = -1;lpCarStack->nStackSize = n Size;}// 车辆信息carinfo 入栈IpCarStackvoid Push( LPTCARSTACK ftlpCarStack, TCARINFORAAATION carinfo ){IpCarStack-Top++;lpCarStack->lpCarl nformation [lpCarStack->nTop] = carinfo;}//车辆信息从栈IpCarStack中弹出并存入carinfovoid Pop( LPTCARSTACK ftlpCarStack, TCARINFORMATION &carinfo ) {carinfo = lpCarStack->lpCarlnformation[lpCarStack-> nTop];IpCarStack->nTop・・;}//若栈IpCarstack空,返回TRUE;否贝!J,返回FALSEBOOL IsStackEmptyf LPTCARSTACK IpCarStack ){return IpCarStackjnTop == -1;}//若栈IpStackFull满,返回TRUE;否则,返回FALSEBOOL IsStackFulK LPTCARSTACK IpCarStack ) return lpCarStack->nTop == ( lpCarStack->nStackSize • 1 );}// 销毁栈IpCarStack,将指针IpCarStack 置为NULLvoid DestroyStack( LPTCARSTACK &IpCarStack ){free( lpCarStack->lpCarlnformation );free( IpCarStack );IpCarStack = NULL;}typedef struct carnode // 链队结点信息{TCARINFORMATION carinfo; // 车辆信息struct carnode *lpNext; //指向下一个元素的指针} TCARNODE, *LPTCARNODE;typedef struct carqueue // ¥连队{LPTCARNODE IpHead; // 头结点LPTCARNODE IpRear; //指向当前队尾的指针int nEffectivesize; //当前队中元素个数} TCARQUEUE, *LPTCARQUEUE;//初始化链队IpCarQueuevoid lnitQueue( LPTCARQUEUE ftlpCarQueue ){IpCarQueue = ( LPTCARQUEUE ) malloc( sizeof( TCARQUEUE )); lpCarQueue->lpHead = ( LPTCARNODE) malloc( sizeof( TCARNODE ));lpCarQueue->lpHead->lpNext = NULL;lpCarQueue->lpRear = lpCarQueue->lpHead;IpCarQueue-EffectiveSize = 0;}// 车辆信息carinfo 入队IpCarQueuevoid EnQueue( LPTCARQUEUE ftlpCarQueue, TCARINFORMATION carinfo ) {LPTCARNODE IpCarNode = ( LPTCARNODE ) malloc( sizeof( carnode )); lpCarNode->car1nfo = cari nfo;lpCarNode->lpNext = NULL;lpCarQueue->lpRear->lpNext = IpCarNode;lpCarQueue->lpRear = lpCarQueue->lpRear->lpNext;IpCarQueue->n EffectiveSize++;}//队头元素从链队IpCarQueue中出队并存入carinfovoid DeQueue( LPTCARQUEUE ftlpCarQueue, TCARINFORMATION ftcarinfo ) { LPTCARNODE IpTemp = lpCarQueue->lpHead->lpNext;carinfo = IpTemp ・>cari nfo;lpCarQueue->lpHead->lpNext = IpTemp ・> IpNext;free( IpTemp );IpCarQueue->n EffectiveSize-;}//若链队IpCarQueue为空,返回TRUE;否则,返回FALSEBOOL lsQueueEmpty( LPTCARQUEUE IpCarQueue ){return LpCarQueue->nEffect1veSize == 0;}//销毁链队IpCarQueuevoid DestroyQueue( LPTCARQUEUE EtlpCarQueue )LPTCARNODE IpNextCarNode = NULL;for ( LPTCARNODE IpCarNode = lpCarQueue->lpHead; IpCarNode != NULL; IpCarNode = IpNextCarNode ){IpNextCarNode = lpCarNode->lpNext;free( IpCarNode );}free( IpCarQueue );IpCarQueue = NULL;}//将字符串时间格式转换为数字(分钟)格式,例如12:36将被转换为756 (12 * 60 + 36)int ConvertTimeFormat( char *lpTime ){Int nHour = 0;int nMinute = 0;sscanf( IpTime, “%d:%d; 8tnHour, SnMinute );return nHour * 60 + nMinute;}//根据在停车场内的停留时间nContinuanceMinutes (分钟)计算费用double CalculateExpense( int nContinuanceMinutes ){return nContinuanceMinutes * ( 5.0 / 60 );}int main( void ){// setcolor();Int nParkCapability = 0; // 停车场容量putchar( \n*);PHns)jscanf(・•衣d jppnparkcapabujry「LPTCARSTACK -pear-stack"NULL"二®世曲生需更蹦-njrsrack 二pcarsrack 》nparkcmpmbsrty)八LPTCARQUEUE 【Pear-Queue =NULL"、二冊®曲爲兰赫更-njrQueue(-pcarQueue)jcharcCommandTypeHNULLj二劭3淋起 charSzuser-npuru28jH宀NULLY二a l}^> do宀Qearscreenoj二 seccoor(rpurchar(An ・rI .... );I -n -)j1 ->・-W 養区);purs(d ・W S B J F)jI H ・)」1-0・)」pucchar( -\n ・)一purs(=0辽)j P U £・A S§A 3926N 3W 3・・rPUS ・・9SPA3926二 444・・);puts(ni・);puts( © );putchar( \rf );printf(“请输入命令:“);seanf( “%s", szllserlnput);puts(H ................. “);char szCarlnformation[128] = { NULL};sscanff szllserlnput, //将命令类型与车辆信息分开存放”%c,%s“,&cCommandType, //用户输入的前半部分,即命令类型szCarlnformation //用户输入的后半部分,即车辆信息);char *LpCommaLocation = NULL; //车辆信息字符串中的逗号位置for ( IpCommaLocation = szCarlnformation; *lpCommaLocation != *\0'; lpCommaLocation++ ){if (*lpCommaLocation ==){break;}}*lpCommaLocati on = \0';TCARINFORMATION carinfo = { NULL }; //存储本次用户输入的车辆信息strcpy( carinfo.szRegistrationMark, szCarlnformation );if ( cCommandType == A )strcpy( carinfo.szArrivalTime, IpCommaLocation + 1 );if ( FALSE == lsStackFull( IpCarStack )){strcpy( carinfo.szEntranceTime, carinfo.szArrivalTime ); Push( IpCarStack, carinfo );printf(“已进入停车场第%d个车位\n“,lpCarStack->nTop + 1);printf("车牌号:\t\t%s\n", carinfo.szRegistrationMark ); printf("进入时间:\t%s\n", carinfo.szEntranceTime ); puts(“是否收费:\t是“);}else{EnQueue( IpCarQueue, carinfo );printf(“停车场已满,已停放在便道的第%d个车位\n“,lpCarQueue->nEffectiveS1ze);printf("车牌号:\t\t%s\n", carinfo.szRegistrationMark ); printf("停放时间:\t%s\n", carinfo.szArrivalTime );puts( ••是否收费:\t否”);}}else if ( cCommandType == 'D')strcpy( carinfo.szDepartureTime, IpCommaLocation + 1 );LPTCARSTACK IpTempCarStack = NULL;lnitStack( IpTempCarStack, nParkCapability );TCARINFORMATION carinfoOut = { NULL };BOOL blsCarFound = FALSE;while ( FALSE == lsStackEmpty( IpCarStack )){Pop( IpCarStack, carinfoOut);if ( 0 != strcmp( carinfoOut.szRegistrationMark, carinfo.szRegistrationMark )) {Push( IpTempCarStack, carinfoOut);}else{blsCarFound = TRUE;break;}}while ( FALSE == IsStackEmptyf IpTempCarStack )){TCARINFORAAATION tempcarinfo = { NULL };Pop( IpTempCarStack, tempcarinfo );Push( IpCarStack, tempcarinfo );} if ( FALSE == blsCarFound ) printf(1车牌号为%s 的车未进入停车场・\n;carinfo.szRegistrationMark );Pause(M.................... \n按任意键输入下 V信息…\n“);continue;strcpy( carinfoOut.szDepartureTime, carinfo.szDepartureTime );int nEntranceTime = ConvertTimeFormat( carinfoOut.szEntranceTime ); Int nDepartureTIme = ConvertTimeFormat( carinfoOut.szDepartureTime ); int nContinuanceMinutes = nDepartureTime • nEntranceTime;printf("计费时段:\t%s - %s (共%d 分钟)\n",carinfoOut.szE ntran ceTime,carinfoOut.szDepartureTime, nContinu anceMinutes);double rExpense = CalculateExpense( nContinuanceMinutes );printf("应交纳的费用:\t%.1 If 7E\n", rExpense );if ( FALSE == lsQueueEmpty( IpCarQueue )){TCARINFORAAATION tempcarinfo = { NULL };DeQueue( IpCarQueue, tempcarinfo );strcpy( tempcarinfo.szEntranceTim® carinfoOut.szDepartureTime ); Push( IpCarStack, tempcarinfo );puts(" .................... ”);printf(“停放在便道的第1个车位,车牌号为%s的车已进入停车场\n“,tempcarinfo. szRegistrati on Markelse if ( cCommandType == E )puts( "********************"puts(H :吴远彦\n M);puts「学号:\n u);Uts( M********************" )•break;else if ( cCommandType == 0*){ClearScree n();//setcolor();putchar( *\n );puts( “[停车场使用情况]\n“);puts( •[车位]\t[车牌号]\t倒达时间]\t[进入(开始计费)时间]\n“); for (in t i = 0; i <= IpCarStack-Top; i++ ){printf( M%d\t%s\t\t%s\t\t%s\n\i + 1,IpCarStack- > IpCar I nformati on [i]・ szRegistratio nAAark, lpCarStack->lpCarlnformat1 on [i].szArrivalTime,lpCarStack->lpCarlnformation[i].szE ntranceTime);}putchar( \n );putchar( \n );putchar( \n );puts( •■[便道使用情况]\n“);puts( •[车位]\t[车牌号]\t[到达时间]\t[进入(开始计费)时间]\n“); int nNum = 0;for ( LPTCARNODE IpCarNode = lpCarQueue->lpHead->lpNext; IpCarNode != NULL; IpCarNode = lpCarNode->lpNext ){n Num++;printf( ,,%d\t%s\t\t%s\t\t%s\n\n Num,lpCarNode->carinfo.szRegistratio nMark,lpCarNode->carinfo.szArrivalTime,lpCarNode->carinfo.szEntra nceTime);}putchar( \n );}else{puts(“输入信息有误.第f 字符只能为'A'或D或E或0'(区分大宵) }Pause(”.................... \n按任意键输入下一息.\n“);} while ( TRUE );DestroyStack( IpCarStack );DestroyQueue( IpCarQueue );Pause( “\n按任意键退出程序...\n“);return 0;。

停车场管理系统代码

停车场管理系统代码

停车场管理系统代码#include#include#include#define MaxChe 3#define Chefei 0.5using namespace std;class Time{public:int year;int mouth;int day;int hour;int minute;int second;void setTime(){cout<<"Time"<<endl;< p="">cout<<"year:";cin>>year;cout<<"mouth:";cin>>mouth;cout<<"day:";cin>>day;cout<<"hour:";cin>>hour;cout<<"minute:";cin>>minute;cin>>second;}void showTime(){cout<<year<<mouth<<day<<hour<<minute<<second;< p="">}};class Che{public:string ID;string Color;string CheXing;Time aTime;Che *Next;Che(){}void Set(){cout<<"ID=";cin>>ID;cout<<"Color=";cin>>Color;cout<<"CheXing=(xiaoqiche xiaoka zhongka daka)"<<endl;< p="">cin>>CheXing;aTime.setTime();}void show(){cout<<color;< p="">cout<<chexing;< p="">aTime.showTime();}~Che(){}};void Shouye();//首页void Input();//车辆进入停车场void Output();//车辆离开停车场并计算停车费用void Chaxun();//按车牌查询停车信息void Xianshi();//显示车库中的车辆信息void Tongji();//统计车库中的车void Bianji();//修改车库中的车的信息void Cuo1();//void main(){Shouye();}void Shouye()//首页{int i;cout<<"**************************\";cout<<"\"<<"1.汽车进停车场\";cout<<"\"<<"2.汽车出停车场\";cout<<"\"<<"3.汽车信息查询\";cout<<"\"<<"4.显示所有汽车\";cout<<"\"<<"5.汽车信息统计\";cout<<"\"<<"选择操作:";cin>>i;{case 1:{system("cls"); Input(); break;}break;case 2:{system("cls"); Output(); break;}break;case 3:{system("cls"); Chaxun(); break;}break;case 4:{system("cls"); Xianshi(); break;}break;{system("cls");Tongji();break;}break;default:{cout<<"无此选项!"<<endl;< p="">cout<<"1.返回首页从新选择"<<endl;< p=""> string h;cin.clear();cin>>h;if(h=="1"){system("cls");Shouye();}else{Cuo1();}}}}void Input()//车辆进入停车场{ifstream fin("text.txt",ios::in);if(!fin){cout<<"文件打开失败!"<<endl;< p="">}int i;fin>>i;cout<<"停车场中已有车"<<i<<"辆"<<endl;< p="">Che p[MaxChe];for(int j=0;j<i;j++)< p="">{fin>>p[j].ID>>p[j].Color>>p[j].CheXing>>p[j].aTime.year> >p[j].aTime.mouth >>p[j].aTime.day>>p[j].aTime.hour>>p[j].a Time.minute>>p[j].aTime.second;cout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"-"<<<"-"<=""><<p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<<<endl;<=" " p="">}fin.close();if(i<maxche)< p="">{cout<<"车辆可以进入停车场"<<endl;< p="">p[i].Set();ofstream fout("text.txt",ios::out);fout<<i+1<<endl;< p="">for(int j=0;j<i+1;j++)< p="">{fout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"\"<<="" p=""><<"\"<<p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j]. atime.minute<<"\"<<<"\";<="" p="">}fout.close();cout<<"***************************************************"< <endl;< p="">cout<<"1.继续停车"<<endl;< p="">cout<<"2.返回首页"<<endl;< p="">int h;cin>>h;if(h==1)Input();if(h==2){system("cls");Shouye();}if(h!=1&&h!=2)Cuo1();}else{cout<<"****************************************************";cout<<"停车场已满!"<<endl;< p="">cout<<"1.返回首页"<<endl;< p="">int h;cin>>h;if(h==1){system("cls");Shouye();}elseCuo1();}}void Output()//车辆离开停车场并计算停车费用{ifstream fin("text.txt",ios::in);if(!fin){cout<<"文件打开失败!"<<endl;< p="">}int i;fin>>i;cout<<"停车场中已有车"<<i<<"辆"<<endl;< p="">Che p[MaxChe];for(int j=0;j<i;j++)< p="">{fin>>p[j].ID>>p[j].Color>>p[j].CheXing>>p[j].aTime.year> >p[j].aTime.mouth >>p[j].aTime.day>>p[j].aTime.hour>>p[j].a Time.minute>>p[j].aTime.second;cout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"-"<<<"-"<=""><<p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<<<endl;<=" " p="">}fin.close();if(i!=0){string cp;cout<<"按车牌查询"<<endl;< p="">cout<<"离开停车场车牌:";cin>>cp;cout<<"出场时间"<<endl;< p="">Time bTime;bTime.setTime();ofstream fout("text.txt",ios::out);fout<<i-1<<endl;< p="">for(j=0;j<i;j++)< p="">{if(p[j].ID==cp){cout<<"****************************************************** *******"<<endl;< p="">cout<<"该车进入停车场时间为:";cout<<p[j].atime.year<<"-"<<p[j].atime.mouth<<"-"<<p[j].atime.day<<"--"< p=""><<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<<p[j].ati me.second<<endl;< p="">cout<<"每分钟"<<chefei<<"元钱"<<endl;< p="">int money;money=(bTime.year-p[j].aTime.year)*12*31*24*60+(bTime.mouth-p[j].aTime.mouth)*31*2 4*60+(bTime.day-p[j].aTime.day)*24*60+(bTime.hour-p[j].aTime.hour)*60+(bTime.minute-p[j]. aTime.minute)*10;cout<<"共计:"<<money<<"元钱"<<endl;< p="">}}for(j=0;j<i;j++)< p="">{if(p[j].ID==cp){int a;a=j;for(j=0;j<a;j++)< p="">{fout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"\"<<<"\"<="" p=""><<p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<<<endl;<="" p="">}for(int j=a+1;j<i;j++)< p="">{fout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"\"<<<"\"<="" p=""><<p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<<<endl;<="" p="">}cout<<"离场成功*******************"<<endl;< p="">cout<<"1.返回首页";int h;cin>>h;if(h==1){system("cls");Shouye();}elseCuo1();}}fout.close();}else{cout<<"停车场中无车"<<endl;< p=""> cout<<"1.车辆进入停车场"<<endl;< p=""> cout<<"2.返回首页"<<endl;< p="">int h;cin>>h;if(h==1)Input();if(h==2){system("cls");Shouye();}if(h!=1&&h!=2)Cuo1();}}void Chaxun()//按车牌查询停车信息{ifstream fin("text.txt",ios::in);if(!fin){cout<<"文件打开失败!"<<endl;< p="">}fin>>i;cout<<"停车场中已有车"<<i<<"辆"<<endl;< p="">Che p[MaxChe];for(int j=0;j<i;j++)< p="">{fin>>p[j].ID>>p[j].Color>>p[j].CheXing>>p[j].aTime.year> >p[j].aTime.mouth >>p[j].aTime.day>>p[j].aTime.hour>>p[j].a Time.minute>>p[j].aTime.second;cout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"-"<<<"-"<=""><<p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<<<endl;<=" " p="">}fin.close();if(i!=0){string cx;cout<<"按车牌查询"<<endl;< p="">cout<<"车牌号:";cin>>cx;for(j=0;j<i;j++)< p="">{if(p[j].ID==cx){cout<<"****************************************************** *******"<<endl;< p="">cout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"-"<<<"-"<=""><<p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<<<endl;<=" " p="">cout<<"*****"<<endl;< p="">cout<<"1.删除该车信息"<<endl;< p="">cout<<"2.修改该车信息"<<endl;< p="">cout<<"3.返回首页"<<endl;< p="">int h;cin>>h;if(h==1){ofstream fout("text.txt",ios::out);int a;a=j;fout<<i-1<<endl;< p="">for(j=0;j<a;j++)< p="">{fout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"\"<<<"\"<="" p=""><<p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<<<endl;<="" p="">}for(int j=a+1;j<i;j++)< p="">{fout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"\"<<<"\"<="" p=""><<p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<<<endl;<="" p="">}fout.close();cout<<"删除成功!"<<endl;< p="">cout<<"1.返回首页"<<endl;< p="">int o;cin>>o;if(o==1){system("cls");Shouye();}elseCuo1();}if(h==2){cout<<"******************************"<<endl;< p=""> cout<<"1.修改单种信息"<<endl;< p="">cout<<"2.修改多种信息"<<endl;< p="">int h;cin>>h;if(h==1){cout<<"******************************"<<endl;< p=""> cout<<"1.修改车牌"<<endl;< p="">cout<<"2.修改车色"<<endl;< p="">cout<<"3.修改车型"<<endl;< p="">cout<<"4.修改车辆入场时间"<<endl;< p="">int o;cin>>o;if(o==1){cout<<"ID:";cin>>p[j].ID;}if(o==2){cout<<"Color";cin>>p[j].Color;}if(o==3){cout<<"CheXing";cin>>p[j].CheXing;}if(o==4){cout<<"year";cin>>p[j].aTime.year;cout<<"mouth";cin>>p[j].aTime.mouth;cout<<"day";cin>>p[j].aTime.day;cout<<"hour";cin>>p[j].aTime.hour;cout<<"minute";cin>>p[j].aTime.minute;cout<<"second";cin>>p[j].aTime.second;}if(o!=1&&o!=2&&o!=3&&o!=4) Cuo1();break;}if(h==2){cout<<"ID:";cin>>p[j].ID;cout<<"Color";cin>>p[j].Color;cout<<"CheXing";cin>>p[j].CheXing;cout<<"year";cin>>p[j].aTime.year;cout<<"mouth";cin>>p[j].aTime.mouth;cout<<"day";cin>>p[j].aTime.day;cout<<"hour";cin>>p[j].aTime.hour;cout<<"minute";cin>>p[j].aTime.minute;cout<<"second";cin>>p[j].aTime.second;}if(h!=1&&h!=2&&h!=3)Cuo1();ofstream fout("text.txt",ios::out); int a;a=j;fout<<i-1;< p="">for(j=0;j<i;j++)< p="">fout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"\"<<<"\"<="" p=""><<p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<<<endl;<="" p="">}fout.close();}if(h==3){system("cls");Shouye();}if(h!=1&&h!=2&&h!=3)Cuo1();break;}if(j==i-1){cout<<"停车场中无该车"<<endl;< p="">cout<<"1.车辆进入停车场"<<endl;< p="">cout<<"2.返回首页"<<endl;< p="">int h;cin>>h;if(h==1)Input();if(h==2){system("cls");Shouye();if(h!=1&&h!=2)Cuo1();}}}else{cout<<"停车场中无车"<<endl;< p=""> cout<<"1.车辆进入停车场"<<endl;< p=""> cout<<"2.返回首页"<<endl;< p="">int h;cin>>h;if(h==1)Input();if(h==2){system("cls");Shouye();}if(h!=1&&h!=2)Cuo1();}}void Xianshi()//显示车库中的车辆信息{ifstream fin("text.txt",ios::in);if(!fin){cout<<"文件打开失败!"<<endl;< p="">int i;fin>>i;cout<<"停车场中已有车"<<i<<"辆"<<endl;< p="">Che p[MaxChe];for(int j=0;j<i;j++)< p="">{fin>>p[j].ID>>p[j].Color>>p[j].CheXing>>p[j].aTime.year> >p[j].aTime.mouth >>p[j].aTime.day>>p[j].aTime.hour>>p[j].a Time.minute>>p[j].aTime.second;cout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"-"<<<"-"<=""><<p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<<<endl;<=" " p="">}fin.close();cout<<"1.返回首页"<<endl;< p="">int h;cin>>h;if(h==1){system("cls");Shouye();}elseCuo1();}void Tongji()//统计车库中的车{ifstream fin("text.txt",ios::in);if(!fin){cout<<"文件打开失败!"<<endl;< p="">}int i;fin>>i;cout<<"停车场中已有车"<<i<<"辆"<<endl;< p="">Che p[MaxChe];for(int j=0;j<i;j++)< p="">{fin>>p[j].ID>>p[j].Color>>p[j].CheXing>>p[j].aTime.year> >p[j].aTime.mouth >>p[j].aTime.day>>p[j].aTime.hour>>p[j].a Time.minute>>p[j].aTime.second;cout<<p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"< <p[j].atime.year<<"-"<<<"-"<=""><<p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<<<endl;<=" " p="">}fin.close();cout<<"按车型统计"<<endl;< p="">cout<<"1.按总数统计"<<endl;< p="">cout<<"2.按车型统计"<<endl;< p="">int h;cin>>h;if(h==1){cout<<"停车场共停车"<<i<<"辆"<<endl;< p="">}if(h==2){int a=0,b=0,c=0,d=0;for(int j=0;j<i;j++)< p="">{if(p[j].CheXing=="xiaoqiche")a++;if(p[j].CheXing=="xiaoka")b++;if(p[j].CheXing=="zhongka")c++;if(p[j].CheXing=="daka")d++;}cout<<"小汽车一共"<<a<<"辆"<<endl;< p=""> cout<<"小卡一共"<<b<<"辆"<<endl;< p=""> cout<<"中卡一共"<<c<<"辆"<<endl;< p=""> cout<<"大卡一共"<<d<<"辆"<<endl;< p=""> }if(h!=1&&h!=2){Cuo1();}cout<<"1.返回首页"<<endl;< p="">cin>>h;if(h==1){system("cls");Shouye();}elseCuo1();}void Cuo1(){string h;cout<<"输入错误"<<endl;< p=""> cout<<"1.返回首页"<<endl;< p=""> cin>>h;if(h=="1"){system("cls");Shouye();}else{Cuo1();}}</endl;<></endl;<></endl;<></d<<"辆"<<endl;<></c<<"辆"<<endl;<></b<<"辆"<<endl;<></a<<"辆"<<endl;<></i;j++)<></i<<"辆"<<endl;<></endl;<></endl;<></endl;<></p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"-"<</i;j++)<></i<<"辆"<<endl;<></endl;<></endl;<></p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"-"<</i;j++)<></i<<"辆"<<endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"\"<</i;j++)<></i-1;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"\"<</i;j++)<></p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"\"<</a;j++)<></i-1<<endl;<></endl;<></endl;<></endl;<></endl;<></p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"-"<</endl;<></i;j++)<></endl;<></p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"-"<</i;j++)<></i<<"辆"<<endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"\"<</i;j++)<></p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"\"<</a;j++)<></i;j++)<></money<<"元钱"<<endl;<></chefei<<"元钱"<<endl;<></p[j].atime.hour<<":"<<p[j].atime.minute<<":"<<p[j].atim e.second<<endl;<></p[j].atime.year<<"-"<<p[j].atime.mouth<<"-"<<p[j].atime.day<<"--"<></endl;<></i;j++)<></i-1<<endl;<></endl;<></p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"-"<</i;j++)<></i<<"辆"<<endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></endl;<></p[j].atime.day<<"\"<<p[j].atime.hour<<"\"<<p[j].atime. minute<<"\"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"\"<</i+1;j++)<></i+1<<endl;<></endl;<></maxche)<></p[j].atime.day<<"--"<<p[j].atime.hour<<":"<<p[j].atime.minute<<":"<</p[j].id<<"\"<<p[j].color<<"\"<<p[j].chexing<<"\"<<p[j]. atime.year<<"-"<</i;j++)<></i<<"辆"<<endl;<></endl;<></endl;<></chexing;<></color;<></id;<></endl;<></year<<mouth<<day<<hour<<minute<<second;<> </endl;<>。

数据结构实验报告模拟停车场管理

数据结构实验报告模拟停车场管理

数据结构实验报告模拟停车场管理实验目的:通过模拟停车场管理的过程,理解数据结构的应用和实际工程问题的解决思路。

实验内容:1.设计停车场类和车辆类,并实现相关操作方法。

2.模拟停车场管理的过程,包括车辆的进入和离开。

3.根据实际需求设计停车场管理算法,如何选择停车位和调度车辆等。

实验步骤:1.设计停车场类停车场类需要保存停车位的信息,可以使用数组或链表实现。

需要提供以下方法:- void addCar(Car car):将车辆添加到停车场,如果停车场已满,则禁止入场。

- void removeCar(Car car):将车辆从停车场移除,并更新停车位信息。

- int getAvailableSpaces(:返回停车场中当前可用的停车位数量。

2.设计车辆类车辆类需要保存车辆的信息,如车牌号、车型等。

3.实现停车场管理算法停车场管理需要考虑车辆进入和离开的顺序,以及停车位的选择等问题。

可以使用队列或堆栈等数据结构来保存车辆的进出顺序。

停车位的选择可以根据具体算法进行,如先到先得、最近最便等原则。

4.完成模拟停车场管理过程的代码根据实际需求,编写代码模拟车辆进入和离开停车场的过程。

可以通过输入车辆信息和操作指令来模拟。

5.测试与优化对停车场管理算法进行测试,并根据实际情况进行优化。

可以通过增加数据量、调整车辆进出顺序等方式进行测试,并根据测试结果进行优化。

实验结果:经过实验测试,停车场管理系统可以良好地处理车辆的进入和离开,并正确计算可用停车位的数量。

通过合理的停车位选择算法,确保了车辆进出的顺序。

实验总结:通过本次实验,我们学习了如何利用数据结构来实现停车场管理系统。

停车场管理系统是一种常见的实际应用,对于解决停车难问题具有重要意义。

在实验过程中,我们掌握了设计和实现停车场类、车辆类以及停车场管理算法的方法,加深了对数据结构的理解和应用。

在实验过程中,我们还发现停车场管理算法可以通过不同的策略进行优化,如最大化停车利用率、最小化顾客等待时间等。

停车场管理程序实验报告

停车场管理程序实验报告

停车场管理程序实验报告一实验题目: 停车场管理程序二实验要求:编写一个程序实现停车场的管理功能。

并且,以栈模拟停车场,以队列模拟车场外到达便道的过程,按照从终端读入的输入数据序列进行模拟管理。

栈以顺序结构实现,队列顺序循环结构实现。

用户输入的命令有以下5种:(1)汽车到达;(2)汽车离去输出停车场中的所有汽车牌号;(3)输出候车场中的所有汽车牌号;(4)退出系统运行。

三实验内容:3.1 栈的抽象数据类型:ADT Stack{数据对象:D={ai|ai∈ElemSet, i=1,2, …,n, n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D, i=1,2, …,n }约定an端为栈顶,a1端为栈底。

基本操作:{InitStack( &S )操作结果:构造一个空栈S。

DestroyStack ( &S )初始条件:栈S已存在。

操作结果:销毁栈S。

ClearStack( &S )初始条件:栈S已存在。

操作结果:将S清为空栈。

StackEmpty( S )初始条件:栈S已存在。

操作结果:若S为空栈,则返回TRUE,否则返回FALSE。

StackLength( S )初始条件:栈S已存在。

操作结果:返回S的数据元素个数,即栈的长度。

GetTop( S, &e )初始条件:栈S已存在且非空。

操作结果:用e返回S的栈顶元素。

Push( &S, e )初始条件:栈S已存在。

操作结果:插入元素e为新的栈顶元素。

Pop( &S, &e )初始条件:栈S已存在且非空。

操作结果:删除S的栈顶元素,并用e返回其值。

StackTraverse( S, visit() )初始条件:栈S已存在且非空。

操作结果:从栈底到栈顶依次对S的每个数据元素调用函数visit()。

一旦visit()失败,则操作失败。

}ADT Stack3.2存储结构的定义;#define N 3#define M 4#define price 2typedef struct{int carno[N];int cartime[N];int top;}SqStack;typedef struct{int carno[M];int front,rear;}SqQueue;3.3基本操作实现:/* 创建栈 */void InitStack(SqStack *&s){s = (SqStack *)malloc(sizeof(SqStack)); s->top = -1;}/* 摧毁栈 */void DestroyStack(SqStack *&s){free(s);}/* 查看栈是否为空 */bool StackEmpty(SqStack *s){return s->top==-1;}/* 进栈 */bool Push(SqStack *&s,int e1,int e2){if(s->top == N - 1){return false;}s->top++;s->carno[s->top] = e1;s->cartime[s->top] = e2;// printf(">>停车场中位置:%d\n",e1);return true;}bool StackFull(SqStack *s){return s->top == N-1;}/* 出栈 */bool Pop(SqStack *&s,int &e1,int &e2){if(s->top == -1)return false;e1 = s->carno[s->top];e2 = s->cartime[s->top];s->top--;return true;}void DispStack(SqStack *s){printf(" >>停车场中的车辆为:");int i;for(i = s->top; i >= 0; --i){printf("%d ",s->carno[i]);}printf("\n");}/***************** 以下为队列 *****************//* 初始化队列 */void InitQueue(SqQueue *&q){q = (SqQueue *)malloc(sizeof(SqQueue));q->front=q->rear=0;}/* 释放队列 */void DestroyQueue(SqQueue *&q){free(q);}/* 查看队列是否为空 */bool QueueEmpty(SqQueue *q){return q->front == q->rear;}bool QueueFull(SqQueue *q){return (q->rear + 1)% M == q->front; }/* 进队 */bool enQueue(SqQueue *&q,int e){if((q->rear + 1) % M == q->front)return false;q->rear=(q->rear + 1)%M;q->carno[q->rear] = e;return true;}/* 出队 */bool deQueue(SqQueue *&q,int &e){if(q->front == q->rear)return false;q->front = (q->front + 1) % M;e = q->carno[q->front];return true;}3.4解题思路:1.通过栈模拟停车场2.通过队列模拟候车场3.然后全程模拟即可。

停车场管理系统源代码

停车场管理系统源代码

/*停车场管理系统*/#include<stdio.h>#include<stdlib.h>#include<string.h>/*------------------------------------------------------------------------------*/#define MAX 2 /*车库容量*/#define price 0.05 /*每车每分钟费用*/typedef struct time{int hour;int min;}Time; /*时间结点*/typedef struct node{char num[10];Time reach;Time leave;}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); /*显示存车信息*//*------------------------------------------------------------------------------*/void main(){SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter); /*初始化停车场*/InitStack(&Temp); /*初始化让路的临时栈*/InitQueue(&Wait); /*初始化便道*/while(1){printf("\n\t************欢迎使用停车场系统************\n"); printf("\n\t\t制作小组:软件12-6组\n");printf("\n1. 车辆到达");printf(" 2. 车辆离开");printf(" 3. 列表显示");printf(" 4. 退出系统\n");while(1){scanf("%d",&ch);if(ch>=1&&ch<=4)break;else printf("\n请选择: 1|2|3|4.");}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,int room) /*打印出栈车的信息*/{int A1,A2,B1,B2;printf("\n请输入离开的时间:/**:**/");scanf("%d:%d",&(p->leave.hour),&(p->leave.min));printf("\n离开车辆的车牌号为:");puts(p->num);printf("\n其到达时间为: %d:%d",p->reach.hour,p->reach.min);printf("离开时间为: %d:%d",p->leave.hour,p->leave.min);A1=p->reach.hour;A2=p->reach.min;B1=p->leave.hour;B2=p->leave.min;printf("\n应交费用为: %2.1f元",((B1-A1)*60+(B2-A2))*price);free(p);}int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/{CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode));flushall();printf("\n请输入车牌号(例:辽P1234):");gets(p->num);if(Enter->top<MAX) /*车场未满,车进车场*/{Enter->top++;printf("\n车辆在车场第%d位置.",Enter->top);printf("\n请输入到达时间:/**:**/");scanf("%d:%d",&(p->reach.hour),&(p->reach.min));Enter->stack[Enter->top]=p;return(1);}else /*车场已满,车进便道*/{printf("\n该车须在便道等待!");t=(QueueNode *)malloc(sizeof(QueueNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;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) /*车辆离开*/{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,room);/*判断通道上是否有车及停车场是否已满*/if((W->head!=W->rear)&&Enter->top<MAX) /*便道的车辆进入停车场*/ {q=W->head->next;t=q->data;Enter->top++;printf("\n便道的%s号车进入车场第%d位置.",t->num,Enter->top); printf("\n请输入现在的时间/**:**/:");scanf("%d:%d",&(t->reach.hour),&(t->reach.min));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);printf("%d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min); puts(S->stack[i]->num);}}else printf("\n车场里没有车");}void List2(LinkQueueCar *W) /*列表显示便道信息*/{QueueNode *p;p=W->head->next;if(W->head!=W->rear) /*判断通道上是否有车*/{printf("\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请选择1|2|3:");printf("\n1.车场\n2.便道\n3.返回\n");while(1){scanf("%d",&tag);if(tag>=1||tag<=3) break;else printf("\n请选择1|2|3:");}switch(tag){case 1:List1(&S);break; /*列表显示车场信息*/ case 2:List2(&W);break; /*列表显示便道信息*/ case 3:flag=0;break;default: break;}}}。

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

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

河南财经政法大学集中实践报告院系:班级:指导老师:小组:小组成员:目录(一)设计目的 (3)(二)问题描述 (3)(三)概要设计 (4)(四)详细设计 (8)(五)调试分析 (9)(六)测试分析 (10)(七)心得体会 (11)(八)附录(源代码) (12)(一)设计目的1.通过课程设计,了解并掌握数据结构的设计方法,具备初步的独立分析和设计能力;2.通过课程设计,初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.通过课程设计,提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.通过课程设计,训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

(二)问题描述及要求基本要求以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。

每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。

对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

栈以顺序结构实现,队列以链表结构实现。

测试数据设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。

其中:‘A’表示到达(arrival);‘D’表示离去(departure);‘E’表示输出结束(end)。

实现提示需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。

输入数据按到达或离去的时刻有序。

栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。

此外还要实现:(1)两个栈共享空间,思考应开辟数组的空间是多少?(2)汽车可有不同种类,则他们的占地面积不同,收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。

停车场管理系统设计源代码

停车场管理系统设计源代码

附录源代码1.头文件Car.h#ifndef CAR#define CAR#include <iostream>using namespace std;typedef struct Node{void *data;struct Node *link;}nodeS;typedef struct Sta{nodeS *top;int count;}Stack;typedef struct NodeQ{void *dataptr;struct NodeQ *next;}nodeQ;typedef struct Queues{int count;nodeQ *front;nodeQ *rear;}Que;Stack *Createstack();void* pop(Stack *stack);void push(Stack *stack,void *data);void DestroyStack(Stack *stack);Que *CreateQueue();void Enqueue(Que *queue);void *Dequeue(Que *queue);void Destroyqueue(Que *queue);#endif2.实现文件Car.cpp#include "Car.h"Stack *Createstack(){Stack *stack;stack = new Stack;if(stack == NULL)return NULL;stack->count = 0;stack->top = NULL;return stack;}void push(Stack *stack,void *data){nodeS *node;node = new nodeS;if(node == NULL || stack == NULL)return ;node->data = data;node->link = stack->top;stack->top = node;stack->count++;}void* pop(Stack *stack){void *data;nodeS *node;node = new nodeS;if(stack->count == 0)return NULL;data = stack->top->data;node = stack->top;stack->top = node->link;stack->count--;return data;}void DestroyStack(Stack *stack){nodeS *node;if(stack->count == 0)return ;while(stack->count == 0){delete stack->top->data;node = stack->top;stack->top = node->link;stack->count--;}delete stack;}Que *CreateQueue(){Que *queue;queue = new Que;if(queue == NULL)return NULL;queue->count = 0;queue->front = NULL;queue->rear = NULL;return queue;}void Enqueue(Que *queue){nodeQ *node;node = new nodeQ;if(node == NULL || queue == NULL) return ;node->next = NULL;if(queue->count == 0){queue->front = node;}else{queue->rear->next = node;}queue->rear = node;queue->count++;}void *Dequeue(Que *queue){void *dataptr;if(queue->count == 0)return NULL;dataptr = queue->front->dataptr;if(queue->count == 1)queue->front = queue->rear = NULL;elsequeue->front = queue->front->next;queue->count--;return dataptr;}void Destroyqueue(Que *queue){nodeQ *node;if(queue->count == 0)return ;while(queue->count == 0){delete queue->front->dataptr;node = queue->front;queue->front = node->next;queue->count--;}delete queue;}3.主文件ThePort.cpp#include "Car.h"#include <CTime>#include <fstream>#include <string>typedef struct InFor{string num;int hour;int min;int sec;int year;int mon;int day;}Infor;int face();int Face();bool Book(Stack *stack,Que *queue,int max);void bookface();time_t compare(Infor *infor);void Display(Infor *infor);time_t arrival(Stack *stack,Infor *infor,Que *queue,int max); void leave(Stack *stack,Que *queue,time_t inform);void Getmoney(Infor *infor,int Bianhao,time_t inform); void checknum(string num);void InforBook(Stack *stack,Que *queue,int max);int Inforface();void Inforstack();void Inforleave();void Inforqueue(Que *queue);int main(){ofstream fout("estdout.txt",ios::trunc);ofstream fout2("leaveout.txt",ios::trunc);bookface();fout.close();fout2.close();return 0;}void bookface(){Stack *stack;Que *queue;stack = Createstack();queue = CreateQueue();int max;bool flag = false;while(max = face()){if(max > 20 || max <= 0){cout<<"\t\t\t输入错误,请重新输入!"<<endl;system("pause");system("cls");}else{flag = Book(stack,queue,max);}if(flag == true){break;system("pause");}}}int face(){cout<<endl<<endl;cout<<"请输入停车场的最大容量(1-20):";int max;cin>>max;return max;}int Face(){system("cls");cout<<endl;cout<<"\t\t\t*************************************"<<endl;cout<<"\t\t\t* *"<<endl;cout<<"\t\t\t* 1、停车登记2、离开结算*"<<endl;cout<<"\t\t\t* *"<<endl;cout<<"\t\t\t* 3、登记记录4、退出系统*"<<endl;cout<<"\t\t\t* *"<<endl;cout<<"\t\t\t*************************************"<<endl;cout<<"\t\t请输入你的业务:";int choose;cin>>choose;return choose;}bool Book(Stack *stack,Que *queue,int max){int choose;bool flag = false;time_t inform;while(choose = Face()){Infor *infor;infor = new Infor;if(choose > 4 || choose <= 0){cout<<"\t\t\t输入错误,请重新输入!"<<endl;system("pause");system("cls");}else{switch(choose){case 1:inform = arrival(stack,infor,queue,max);max--;break;case 2:leave(stack,queue,inform);break;case 3:InforBook(stack,queue,max);break;case 4:cout<<endl;cout<<"\t\t\t谢谢使用,欢迎下次再来"<<endl;flag = true;break;}if(flag == true)break;system("pause");}}return flag;}time_t arrival(Stack *stack,Infor *infor,Que *queue,int max){time_t inform;if(max > 0){inform = compare(infor);push(stack,infor);Display(infor);return inform;}else{cout<<endl<<"\t\t\t对不起停车场已满,请停靠在便道上"<<endl;Enqueue(queue);}}time_t compare(Infor *infor){time_t now;struct tm *inform;time(&now);inform = localtime(&now);infor->hour = inform->tm_hour;infor->min = inform->tm_min;infor->sec = inform->tm_sec;infor->year = inform->tm_year;infor->mon = inform->tm_mon;infor->day = inform->tm_mday;cout<<endl;cout<<"请输入你的车牌号<B23548>:";cin>>infor->num;checknum(infor->num);return now;}void Display(Infor *infor){ofstream fout("estdout.txt",ios::app);cout<<endl;cout<<"\t\t\t车牌号:"<<infor->num<<endl;cout<<"\t\t\t当前年月:"<<infor->year+1900<<"/"<<infor->mon+1<<"/"<<infor->day<<endl;cout<<"\t\t\t当前时刻: "<<infor->hour<<":"<<infor->min<<":"<<infor->sec<<endl;fout<<infor->num<<" "<<infor->year+1900<<" "<<infor->mon+1<<" "<<infor->day<<" "<<infor->hour<<" "<<infor->min<<""<<infor->sec<<endl;fout.close();}void leave(Stack *stack,Que *queue,time_t inform){Stack *stacktemp;stacktemp = Createstack();Infor *temp,*a;temp = new Infor;a = new Infor;string num;int m;bool flag;m = stack->count;if(m <= 0){cout<<endl;cout<<"\t\t\t停车场没有车!"<<endl;return ;}else{cout<<endl;cout<<"请输入将要离开的车的车牌号:";cin>>num;while(1){checknum(num);for(int i=0;i<m;i++){temp = (Infor *)pop(stack);push(stacktemp,temp);for(int k=0;k<6;k++){if(temp->num[k] != num[k]){flag = false;break;}elseflag = true;}if(flag == true){if(m == 1){Getmoney(temp,m,inform);}else{a = (Infor *)pop(stacktemp);Getmoney(a,i,inform);for(int j=0;j<i;j++){a = (Infor *)pop(stacktemp);push(stack,a);}if(queue->count > 0){a = (Infor *)Dequeue(queue);compare(a);push(stack,a);}}}}if(flag == false){cout<<endl;cout<<"没有此车的车牌号或车牌号错误,请重新输入:";cin>>num;for(int n=0;n<m;n++){temp = (Infor *)pop(stacktemp);push(stack,temp);}}else break;}}return ;}void checknum(string num){while(1){bool flag = true;if(num.length() != 6 || num[0] > 'Z' || num[0] < 'A'){flag = false;}for(int i=1;i<num.length();i++){if(num[i] > '9' || num[i] < '0'){flag = false;break;}}if(flag == false){cout<<endl;cout<<"你输入的车牌类型,请重新输入你的车牌号<B23548>:";cin>>num;continue;}elsebreak;}}void Getmoney(Infor *infor,int Bianhao,time_t inform){time_t now;struct tm *inform2;time(&now);inform2 = localtime(&now);double pay;ofstream fout("leaveout.txt",ios::app);pay = (difftime(now,inform)*1)/10;cout<<endl;cout<<"\t\t编号:"<<Bianhao<<endl;cout<<"\t\t车牌号:"<<infor->num<<endl;cout<<"\t\t起始年月:"<<infor->year+1900<<"/"<<infor->mon+1<<"/"<<infor->day<<endl;cout<<"\t\t起始时刻:"<<infor->hour<<":"<<infor->min<<":"<<infor->sec<<endl;cout<<"\t\t当前年月:"<<inform2->tm_year+1900<<"/"<<inform2->tm_mon+1<<"/"<<inform2->tm_mday<<endl;cout<<"\t\t当前时刻:"<<inform2->tm_hour<<":"<<inform2->tm_min<<":"<<inform2->tm_sec<<endl;cout<<"\t\t你的需要缴纳的费用:"<<pay<<"元"<<endl;fout<<Bianhao<<" "<<infor->num<<" "<<inform2->tm_year+1900<<""<<inform2->tm_mon+1<<" "<<inform2->tm_mday<<" "<<inform2->tm_hour<<" "<<inform2->tm_min<<" "<<inform2->tm_sec<<" "<<pay<<endl;fout.close();}void InforBook(Stack *stack,Que *queue,int max){int choose;while(choose = Inforface()){if(choose > 4 || choose <= 0){cout<<"\t\t\t输入错误,请重新输入!"<<endl;system("pause");system("cls");}else{switch(choose){case 1:Inforstack();break;case 2:Inforleave();break;case 3:Inforqueue(queue);break;case 4:Book(stack,queue,max);break;}}}}int Inforface(){system("cls");cout<<endl;cout<<"\t\t\t*************************************"<<endl;cout<<"\t\t\t* *"<<endl;cout<<"\t\t\t* 1、今天登记情况2、离开车辆记录*"<<endl;cout<<"\t\t\t* *"<<endl;cout<<"\t\t\t* 3、便道信息查询4、返回主页面*"<<endl;cout<<"\t\t\t* *"<<endl;cout<<"\t\t\t*************************************"<<endl;cout<<"\t\t请输入你的业务:";int choose;cin>>choose;return choose;}void Inforstack(){ifstream fin("estdout.txt");if(fin.eof() == NULL){cout<<endl;cout<<"\t\t\t当前没有停车记录!"<<endl;system("pause");return ;}while(fin.eof() != NULL){Infor *infor;infor = new Infor;fin>>infor->num>>infor->year>>infor->mon>>infor->day>>infor->hour>>infor->min>>infor->sec;cout<<endl;cout<<"\t\t\t车牌号:"<<infor->num<<endl;cout<<"\t\t\t当前年月:"<<infor->year+1900<<"/"<<infor->mon+1<<"/"<<infor->day<<endl;cout<<"\t\t\t当前时刻:"<<infor->hour<<":"<<infor->min<<":"<<infor->sec<<endl;}system("pause");fin.close();}void Inforleave(){ifstream fin("leaveout.txt");if(fin.eof() == NULL){cout<<endl;cout<<"\t\t\t当前没有离开记录!"<<endl;system("pause");return ;}while(fin.eof() != NULL){Infor *infor;int Bianhao;int money;infor = new Infor;fin>>Bianhao>>infor->num>>infor->year>>infor->mon>>infor->day>>infor->hour>>infor->min>>infor->sec>>money;cout<<endl;cout<<"\t\t编号:"<<Bianhao<<endl;cout<<"\t\t车牌号:"<<infor->num<<endl;cout<<"\t\t当前年月:"<<infor->year+1900<<"/"<<infor->mon+1<<"/"<<infor->day<<endl;cout<<"\t\t当前时刻:"<<infor->hour<<":"<<infor->min<<":"<<infor->sec<<endl;cout<<"\t\t缴纳的费用:"<<money<<"元"<<endl;}system("pause");fin.close();}void Inforqueue(Que *queue){if(queue->count == 0){cout<<endl;cout<<"\t\t\t便道里面没有车!"<<endl;system("pause");return ;}cout<<"\t\t\t便道里面停有"<<queue->count<<"辆车!"<<endl;system("pause");return ;}。

数据结构实验报告模拟停车场管理(含代码)

数据结构实验报告模拟停车场管理(含代码)

模拟停车场管理班级:物联网姓名:XXX 学号:XXXXXXX 日期:4月9日一、需求分析1、程序的功能描述按照从终端输入的数据序列进行模拟管理。

1)狭道停车用栈来实现,并且用的顺序栈,等车位的便道用队列来实现,并用链式存储。

2)每一组输入信息包含三个数据项,汽车的“到达”和“离去”的信息,汽车牌照号码,汽车“到达”或“离去”的时刻。

3)对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出车辆在停车场内或便道上的停车位置;若是车子离去,则输出车辆在停车场内停留的时间和缴纳的费用。

(假设在便道等车的时间不收费)4)选作内容:(1)便道也是要收费的,仅仅比狭道收费便宜点。

(2)狭道上的车可以直接开走。

2、输入/输出的要求首先选择操作的模块,根据提示输入车牌和到达时间,程序会告知是否停满或者停车车位。

车牌为10个字符以内的字符串,时间的输入中间有冒号把时分隔开。

3、测试数据1 苏D543 1:101 苏Q123 1:201 苏D145 1:30二、概要设计1、本程序所用的抽象数据类型的定义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;//便道上等候的队列定义2、主模块的流程及各子模块的主要功能○1车辆到达:int Arrival(SeqStackCar *Enter,LinkQueueCar *W)首先定义一个栈和队列的结构体指针为:*p , *t 。

然后申请一个车辆信息的内存空间,并把它赋给栈指针。

车辆到达时就输入车牌号,并通过if(Enter->top<MAX)来判断该车是进车场内还是进便道上,如果是进车场内就把top 加1,显示在车场内的位置,还要输入进车场的时间,然后把该节点进栈。

  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;}}。

相关文档
最新文档