




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
装订线长 春 大 学 课程设计纸目 录一、设计目的2二、设计内容2三、设计分析2四、总体设计3五、详细设计5六、程序调试6七、总结18八、参考文献18 1、 设计目的1了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2、 设计内容设计一个停车场,停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等待,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。基本要求是以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。3、 设计分析这个设计要实现的是停车场的模拟系统的一些功能。功能如下:1、 车辆进入停车场,要给出其停车位置或停于便道上。2、 车辆离开停车场,要给出其停车时间及停车费用的多少。3、 停车场满时,一旦有车开走,则排在便道上的第一辆车即可开入。4、 车辆退出停车场,在它之后进入的车辆必须先退出车场为它让路,待该车开出大门外,再按原次序进入车场。四、总体设计1、模块之间的主要关系和调用关系的流程图 开始输入最大停车停车量n 输入操作选择用switch语句判断是要进行哪个操作N Y根据要进行的操作进入相应的函数里,进行操作。结束2、 抽象数据类型的定义 设定栈的抽象数据类型定义为: ADT stack数据对象:D=ai|aicharset,i=1,2,n,n=0数据关系:R1=|ai-1,aiD,i=2,n基本操作:InitStack(&S)操作结果:构造一个空栈S。Push(&S,e)初始条件:栈S已经存在。操作结果:在栈S的栈顶插入新的栈顶元素e。Pop(&S,&e)初始条件:栈S已经存在。操作结果:删除S的栈顶元素,并以e返回其值。StackTraverse(S,visit()初始条件:栈S已经存在。操作结果:从栈底到栈顶依次对S中的每一个元素调用函数 visit().ADT stack设定队列的抽象数据类型定义为:数据对象:D=ai|aiElemset,i=1,2,n,n=0数据关系:R1=|ai-1,aiD,i=2,n约定其中ai为队列头,an为队列尾.基本操作:InitQueue(&Q)操作结果:构造一个空队列Q.DestroyQueue(&Q)初始条件:队列Q已存在.操作结果:队列Q被销毁,不再存在.ClearQueue(&Q)初始条件:队列Q已存在.操作结果:将Q清为空队列.QueueEmpty(Q)初始条件:队列Q已存在.操作结果:若Q为空队列,则返回True,否则返回False.QueueLength(Q)初始条件:队列Q已经存在.操作结果:返回Q的元素个数,即队列的长度.GetHead(Q,&e)初始条件:Q为非空队列.操作结果:用e返回Q的对头元素.EnQueue(&Q,e)初始条件:队列Q已存在.操作结果:插入元素e为Q新的队尾元素.DeQueue(&Q,&e)初始条件:Q为非空队列.操作结果:删除Q的队头元素,并用e返回其值.QueueTraverse(Q,visit()初始条件:Q已存在且非空.操作结果:从队头到队尾,依次对Q的每一个数据元素调用函数visit().一旦visit()失败,则操作失败. ADT Queue5、 详细设计 1. 时间结点类型typedef struct time int hour; int min; Time; /*时间结点*/ 2.车辆进出站信息类型typedef struct node char num10;Time reach; Time leave; CarNode; /*车辆信息结点*/ 3.停车场和便道信息类型typedef struct NODE CarNode *stackMax+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 n); /*声明栈*/初始化,创建两个新栈S,S1int InitQueue(LinkQueueCar *); /*声明便道*/初始化,创建一个队列Q用于便道int Arrival(SeqStackCar *,LinkQueueCar *,int n); /*车辆进站*/void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *,int n); /*车辆 出站*/void List(SeqStackCar,LinkQueueCar); /*显示存车信息*/ void InitStack(SeqStackCar *s,int n) /*初始化栈*/4.主函数和其它函数的伪码算法void main()/主程序initialization(); /初始化while(1)scanf(.);/根据提示信息输入想要的操作switch(k)/根据输入的数调用不同的函数case 1:case 2:.typedef struct */用于创建不同结构体类型的指针与变量void PRINT(CarNode *p)/调用输出函数Leave(*p,n).根据求解时间值来求得费用,并通过收据打印出来六、程序调试程序完整代码如下:#include#include #include#include#define Max 20int getn()int n;printf(欢迎光临本停车场,);printf(本停车场管理实行24小时制,停车每分钟0.1元.n); printf(请输入停车场可容纳的车(最多20辆):);scanf(%d,&n);while(n20) printf(输入的车辆数不在要求范围内,请重新输入!); scanf(%d,&n); return n;typedef struct time int hour; int min; Time; /*时间结点*/ typedef struct node char num10;Time reach; Time leave; CarNode; /*车辆信息结点*/ typedef struct NODE CarNode *stackMax+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 n); /*声明栈*/int InitQueue(LinkQueueCar *); /*声明便道*/int Arrival(SeqStackCar *,LinkQueueCar *,int n); /* 车辆进站*/void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *,int n); /*车辆出站*/void List(SeqStackCar,LinkQueueCar); /*显示存车信息 */ void InitStack(SeqStackCar *s,int n) /*初始化栈*/ int i; s-top=0; for(i=0;istacks-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 A1,A2,B1,B2;int a,b,c; printf(n请输入离开的时间:/*:*/); scanf(%d:%d,&(p-leave.hour),&(p-leave.min);while(p-leave.hourreach.hour |(p-leave.hour=p-reach.hour & p-leave.minreach.min)printf(输入离开时间比进站时间早,请重新输入!n);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);while(p-leave.hourleave.hour=24 |p-leave.minleave.min=60)printf(输入的时间格式有错,请重新输入!); scanf(%d:%d,&(p-leave.hour),&(p-leave.min);A1=p-reach.hour; A2=p-reach.min; B1=p-leave.hour; B2=p-leave.min;a=(B1-A1)*60+B2-A2;if(a=60)b=a/60;c=a-60*b;elseb=0;c=a;printf(= =n);printf( 出车场车 车牌号:);puts(p-num);printf(n);printf( 停留时间: %d:%d 应付(元):%2.1fn,b,c,0.1*a);printf(=n);free(p); int Arrival(SeqStackCar *Enter,LinkQueueCar *W,int n) /*车辆到达*/ CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode); printf(n请输入车牌号(4位数,例:1234):n);gets(p-num);fflush(stdin); if(Enter-toptop+; printf(n车辆在车场第%d位置.,Enter-top); fflush(stdin);printf(n请输入到达时间,形如|*:*|:); scanf(%d:%d,&(p-reach.hour),&(p-reach.min);fflush(stdin); /清除缓冲区while(p-reach.hourreach.hour=24 | p-reach.minreach.min=60)printf(输入的时间格式有错,请重新输入!); scanf(%d:%d,&(p-reach.hour),&(p-reach.min); fflush(stdin);Enter-stackEnter-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 n) /*车辆离开*/ int room; CarNode *p,*t; QueueNode *q; /*判断车场内是否有车*/ if(Enter-top0) /*有车*/ while(1) /*输入离开车辆的信息*/ printf(n请输入要离开的车在车场的位置/1-%d/: ,Enter-top);scanf(%d,&room);fflush(stdin); if(room=1&roomtop) break; while(Enter-toproom) /*车辆离开*/ Temp-top+; Temp-stackTemp-top=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; p=Enter-stackEnter-top; Enter-stackEnter-top=NULL; Enter-top-; while(Temp-top=1) Enter-top+; Enter-stackEnter-top=Temp-stackTemp-top; Temp-stackTemp-top=NULL; Temp-top-; PRINT(p);/*判断通道上是否有车及车站是否已满*/ if(W-head!=W-rear)&Enter-tophead-next; t=q-data; Enter-top+; printf(n现在便道上的车牌号为:);puts(t-num);printf(进入车场第%d位置.,Enter-top);printf(n请输入现在的时间(即该车进站的时 间)/*:*/:);scanf(%d:%d,&(t-reach.hour),&(t-reach.min);fflush(stdin); doif(t-reach.hourreach.hour=24 |t-reach.minreach.min=60)printf(输入的时间格式有错,请重新输入!); scanf(%d:%d,&(t-reach.hour),&(t-reach.min); fflush(stdin);elsebreak;while(t-reach.hourreach.hour=24 |t-reach.minreach.min=60);W-head-next=q-next; if(q=W-rear) W-rear=W-head; Enter-stackEnter-top=t; free(q); else printf(n目前便道里没有车.n); else printf(n目前车场里没有车,来车请直接进入车 场!); /*没车*/ void List1(SeqStackCar *S) /*列表显示车场存车信息*/ int i; if(S-top0) /*判断车站内是否有车*/ printf(n车场:); printf(n 位置 到达时间 车牌号n); for(i=1;itop;i+) printf( %d ,i); printf(%d:%d ,S-stacki-reach.hour,S-stacki-reach.min); puts(S-stacki-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; printf(n); else printf(n目前便道里没有车.); void List(SeqStackCar S,LinkQueueCar W) int flag,tag; flag=1; while(flag) printf(n1.车场 2.便道 3.返回n); while(1) printf(n请选择 1|2|3:); scanf(%d,&tag);fflush(stdin);doif(tag3)printf(输入有误,请按要求重新输入!); scanf(%d,&tag); fflush(stdin);elsebreak;while(tag3 & tag4 | ch4 | ch1);break;switch(ch) c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程征用土地合同
- 有限公司内部股权转让协议
- 2025-2026年北京市中考英语综合提高练习试卷3
- DB43-T 3160-2024 新能源汽车废旧动力蓄电池综合利用规范企业评价方法
- 2025企业租赁合同诉讼状范本
- 生长发育规律授课田甜工作单位山东医学高等专科学校84课件
- 机电设备安装冷却系统方案
- 水粉基础知识课件
- 建筑工程项目施工人员健康管理方案
- 输电线路系统集成与调度方案
- 软件对接方案
- 普通高中语文课程标准解读课件
- 有机化学第十版
- 肾功能不全患者合理用药课件
- 纤维支气管镜(可弯曲支气管镜)临床应用指南(草案)
- 2022年新高考II卷高考语文试卷试题深度解读及答案详解(精校版)
- 一次调频综合指标计算及考核度量方法
- 车辆段平面布置设计
- 数字媒体艺术概论-第一章-概述
- 四大会计师事务所面试题
- GB/T 4669-2008纺织品机织物单位长度质量和单位面积质量的测定
评论
0/150
提交评论