版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言课程设计实习报告目 录一. 题目要求二. 需求分析三. 总体设计四. 具体程序五. 上机操作及使用说明六. 存在问题与不足七. 学 习 心 得停车场管理一. 题目要求1.设计一个停车场用长度为N的堆栈来模拟。由于停车场内如有某辆车要开走 ,在它之后进来的车都必须先退出为它让道,待其开出停车场后,这些车再依原来的顺序进入。2.程序输出每辆车到达后的停车位置,以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。二. 需求分析根据题目要求首先设计一个堆栈,以堆栈来模拟停车场,又每辆汽车的车牌号都不一样,这样一来可以根据车牌号准确找到汽车位置,所以堆栈里的数据元素设计成汽车的车牌号。当停
2、车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入停车场。这是个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个堆栈,以之来暂时存放为出站汽车暂时让道的汽车车牌号。当停车场满后,继续进来的汽车需要停放在停车场旁边的便道上等候,若停车场有汽车开走,则按排队的先后顺序依次进站,最先进入便道的汽车将会最先进入停车场,这完全是一个先进先出模型,因此可设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场根据汽车在停车场内停放的总时长来收费的,在便道上的时间不计费,因此必须记录车辆进入停车场时的时间,车辆
3、离开停车场时的时间不需要记录,当从终端输入时可直接使用。由于时间不像汽车一样需要让道,可设计了一个顺序表来存放时间。又用顺序表用派生法设计了一个堆栈,恰好满足上面模拟停车场的需要。三. 总体设计车辆到达以堆栈来模拟停车场和以堆栈里的数据元素我设计成汽车的车牌号初始化车站, 初始化让路的临时栈, 初始化通道车场未满,车进车场车场已满,车进便道判断车场是否已满车输入车子到达时间,车牌号未满车进入车场判断车场内是否有车不做任何计算无点x有输入离开车辆的离开时间,进行停车费用的计算此车后面的车辆退出并进入临时栈车子离开四. 具体程序#include #include #define SIZE 3 #d
4、efine NULL 0 typedef struct int hour; int min; time; typedef struct int num; int position; time t; float money; Car; typedef struct Car elemSIZE+1; int top; Stack; typedef struct Node Car data; struct Node *next; CQueueNode; typedef struct CQueueNode *front; CQueueNode *rear; LinkQueue; void InitSta
5、ck(Stack *S) S-top=0; void Push(Stack *S,Car *r) S-top+; S-elemS-top.num=r-num; r-position=S-elemS-top.position=S-top; S-elemS-top.t.hour=r-t.hour; S-elemS-top.t.min=r-t.min; int IsEmpty(Stack* S) return(S-top=0?1:0); int IsFull(Stack *S) return(S-top=SIZE?1:0); int GetTop(Stack *S,Car *n) n-num=S-e
6、lemS-top.num; n-position=S-elemS-top.position; n-t.hour=S-elemS-top.t.hour; n-t.min=S-elemS-top.t.min; return 1; void InitQueue(LinkQueue *Q) Q-front=(CQueueNode*)malloc(sizeof(CQueueNode); if(Q-front!=NULL) Q-rear=Q-front; Q-front-next=NULL; int EnterQueue(LinkQueue *Q,Car *t) CQueueNode *NewNode;
7、NewNode=(CQueueNode*)malloc(sizeof(CQueueNode); if(NewNode!=NULL) NewNode-data.num=t-num; NewNode-data.t.hour=t-t.hour; NewNode-data.t.min=t-t.min; NewNode-next=NULL; Q-rear-next=NewNode; Q-rear=NewNode; return 1; else return 0; int DeleteQueue(LinkQueue *Q,Car *x) CQueueNode *p; if(Q-front=Q-rear)
8、return 0; p=Q-front-next; Q-front-next=p-next; if(Q-rear=p) Q-rear=Q-front; x-num=p-data.num; x-t.hour=p-data.t.hour; x-t.min=p-data.t.min; free(p); return 1; void print1(Stack *S) int tag; Car x; printf(停车场停车情况:n); if(IsEmpty(S) printf(无车!); for(tag=S-top;S-top0;S-top-) if(GetTop(S,&x) printf(车牌号 %
9、d,所在位置 %d,到达/离开时间 %d:%dn,x.num,x.position,x.t.hour,x.t.min); S-top=tag; void print2(LinkQueue *Q) CQueueNode *p; p=Q-front-next; for(;p!=NULL;p=p-next) printf(等待车牌号 %d, 到达/离开时间 %d:%d,p-data.num,p-data.t.hour,p-data.t.min); void TaM(Car *r,int h,int m) if(mr-t.min) r-t.min+=60;r-t.hour-=1; h=r-t.hour
10、-h; m=r-t.min-m; printf(n停车 %d小时 %d 分钟n,h,m); printf(每小时收费30元n); h=h*60;m=h+m; r-money=0.5*m; printf(请支付金额%.2f元n,r-money); void In(Stack *S,LinkQueue *Q,Car*r) if(IsFull(S) printf(车库已满,请等待!); EnterQueue(Q,r); else Push(S,r); printf(n您现在所在位置 %d,r-position); void Out(Stack *S,Stack *S0,Car *r,LinkQueu
11、e *Q) int tag=S-top; Car x; if(IsEmpty(S) printf(没有此车!); else for(;r-num!=S-elemtag.num&tag0;tag-) Push(S0,&S-elemtag); S-top-; if(r-num=S-elemtag.num) TaM(r,S-elemtag.t.hour,S-elemtag.t.min); S-top-; for(;S0-top0;S0-top-) Push(S,&S0-elemS0-top); if(S-topfront!=Q-rear) DeleteQueue(Q,&x); Push(S,&x);
12、 else if(tag=0) printf(未进入停车场应支付金额 0元!); for(;S0-top0;S0-top-) Push(S,&S0-elemS0-top); void print() printf(n*欢迎光临*n); printf(n 请选择:n); printf(n 1 :到达); printf(n 2 :离开); printf(n 3 :搜索); printf(n 4 :退出n); printf(n); int main() int n,m,i=1,j,flag=0; Car c10; Car x; Stack S,S0; LinkQueue Q; InitStack(&
13、S); InitStack(&S0); InitQueue(&Q); while(1) print(); scanf(%d,&m); switch(m) case 1:printf(n请输入车牌号:); scanf(%d,&ci.num); printf(n请输入到达/离开时间:); scanf(%d:%d,&ci.t.hour,&ci.t.min); In(&S,&Q,&ci);i+; break; case 2:printf(n请输入车牌号:); scanf(%d,&n); for(j=0;j10;j+) if(n=cj.num) break; printf(n请输入到达/离开时间:); scanf(%d:%d,&cj.t.hour,&cj.t.min); Out(&S,&S0,&cj,&Q); break; case 3: print1(&S);print2(&Q);break; case 4: flag=1; break; default:printf(n输入错误,请输入 1,2,3 或4); if(flag)break; return 0; 五. 上机操作及使用说明运行Microsoft Visual C+,进入运行状态:1.主菜单:根据页面提示,输入相应数字。2.车辆到达
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租借游艇问题课程设计
- 算法综合设计课程设计
- 补货管理的优化与实施方案计划
- 健身器材销售业绩总结
- 2024年烟花爆竹安全的应急预案
- 银行工作总结创新发展成果彰显
- 医药包材采购心得总结
- 娱乐活动行业顾问工作总结提升娱乐活动吸引力
- 服务业会计工作内容分析
- 2024年设备的管理制度范本
- 装配式钢筋混凝土简支T梁设计
- COMMERCIAL INVOICE 商业发票
- 大气课程设计-—袋式除尘器
- 普天超五类检测报告
- 会计师事务所业务培训制度
- CMM2-18锚杆机(新)说明书
- 12吨汽车起重机基本技术规格资料
- WEB开发基础-2021秋本-计算机科学与技术本复习资料-国家开放大学2022年1月期末考试复习资料
- 安徽省政协机关文件材料归档范围
- 本质安全理论综述研究
- 代建项目管理工作大纲
评论
0/150
提交评论