精选优质文档-----倾情为你奉上 实习报告题目:停车场管理一. 需求分析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’表示到达,’D’表示离去,’E’表示输入结束5. 程序执行的命令为:1. 创建栈和队列 2.对车辆的行为进行相应的处理 3.输出车辆的信息二. 概要设计1. 设定栈的抽象数据类型定义:ADT Stack{ 数据对象:D={ai|ai属于Elem,i=1,2……,n, n>=0} 数据关系:R1={| ai-1,ai属于D,i=2,……,n} 基本操作: initStack(&S) 操作结果:构造一个空栈S. pop(&S,&e) 初始条件:栈S已存在。
操作结果:删除S的栈顶元素,并以e返回其值 push(&S,&e ) 初始条件:栈S已存在 操作结果:在栈S的栈顶插入新的栈顶元素e lengthstack(S) 初始条件:栈S已存在 操作结果:返回S中的元素个数,即栈的长度}ADT Stack;2. 设定队列的抽象数据类型定义:ADT Queue{ 数据对象:D={ai| ai属于Elem, i=1,2,……,n, n>=0} 数据关系:R1={| ai-1,ai 属于D,i=2,……,n} 基本操作: initqueue(&Q) 操作结果:构造一个空队列Q. enqueue(&Q, e) 初始条件:队列Q已存在 操作结果:插入元素e为Q的新的队尾元素 dequeue(&Q, &e) 初始条件:Q为非空队列 操作结果:删除Q的对头元素,并用e返回其值 Lengthqueue(Q) 初始条件:队列Q已存在 操作结果:返回Q的元素个数,即队列的长度。
}ADT Queue3. 本程序主要包括三个模块1. 主程序模块;int main(){ 初始化; do{ 接受命令; 处理命令; }while(命令!=退出);}2. 处理车辆到达模块;3. 处理车辆离开模块;各模块之间的调用关系如下: 处理车辆到达模块主程序模块处理车辆离开模块三. 详细设计 设计程序如下:#include#define n 2 //将停车场的容量设为2;#define cost 10//将单位时间的停车费设为10,车道里不收费; #define OVERFLOW -2 #define ERROR 0//分配栈的存储空间失败;using namespace std;typedef struct Elem{//定义元素数据结构类型 int carnum; int time;}Elem;typedef struct QNode{//队列 struct QNode *next; Elem Qelem;}QNode,*QueuePtr;typedef struct{ QueuePtr front;//队头指针 QueuePtr rear;//队尾指针}LinkQueue;void initqueue(LinkQueue &Q){//构造一个空队列 Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q.front)exit(OVERFLOW); Q.front->next=Q.rear->next=NULL;}void enqueue(LinkQueue &Q,int carnum,int time){//入队操作 QueuePtr p=(QueuePtr)malloc(sizeof(QNode)); p->Qelem.carnum=carnum; p->Qelem.time=time; p->next=NULL; Q.rear->next=p; Q.rear=p;}int lengthqueue(LinkQueue Q){ int i=0; QueuePtr p; p=Q.front->next; while(p!=Q.rear) { i++; p=p->next; } i++; return i;}void dequeue(LinkQueue &Q,Elem &e){//从对头离队操作,并返回其值 QueuePtr p=(QueuePtr)malloc(sizeof(QNode)); if(Q.front==Q.rear) cout<<"车道中没有车辆!"<next; e=p->Qelem; Q.front->next=p->next; if(Q.rear==p) Q.rear=Q.front; free(p); }}typedef struct{ Elem *base; Elem *top; int stacksize;}Sqstack;void initStack(Sqstack &S){//创建一个空栈 S.base=(Elem*)malloc(n*sizeof(Elem)); if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize=n;}int push(Sqstack &S,Elem &e)//插入新的元素{ Elem *temp; if(S.top-S.base==S.stacksize) return 1; else { temp=S.top; temp->carnum=e.carnum; temp->time=e.time; S.top++; return 0; }}int lengthstack(Sqstack S){//当前栈的长度 return S.top-S.base;}int pop(Sqstack &S,Elem &e) {//删除栈顶元素,并返回其值if(S.top==S.base) return ERROR; e=*--S.top; return 1;}void carin(Sqstack &S,LinkQueue &Q,Elem car){ int k=0;//输入数据正确 QueuePtr r; Elem *temp; temp=S.base; while(temp!=S.top)/在栈中寻找是否有同一编号的车; { if(temp->carnum==car.carnum) { cout<<"该车号在停车场中已存在,请重新输入!"<next; //队头 while(r&&r->Qelem.carnum!=car.carnum) {r=r->next;} if(r&&r->Qelem.carnum==car.carnum) {cout<<"该车号在车道中已存在,请重新输入!"<carnum=car.carnum; S.top->time=car.time; S.top++; cout<<"请进入停车场"<carnum==car.carnum) { int temp_cost; temp_cost=(car.time-temp->time)*cost; ture=1;//在栈中找到 cout<<"您的停车时间为"<time<<"小时,请交纳费用!"<carnum=e.carnum; S.top->time=car.time; S.top++;。