已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中国地质大学(武汉) C语言课程设计论文 学 院 计算机学院 专 业 网络工程 题 目 停车场管理1 班 级 姓 名 学 号 指导老师 2010年6月29日 目录1. 中文摘要32. 设计提示33. 总体设计34. 数据结构设计45. 详细设计5主函数main 5arrive函数6leave函数 7公共函数86. 运行插图97. 总结及感想118. 源代码119. 参考文献15停车场管理1 摘要 设有一个可以停放n辆车的狭长停车场,它只有一个大门可以供车辆进出,车辆按到达停车时间的早晚一次从停车场最里面向大门口停放(最先到达的一辆车停在最里面)。如果停车场已放满n辆车,则后来的车辆只能够在停车场大门外等候的便道上等候,一旦停车场内有车开出,则排在停车场的第一辆车就进入停车场,停车场内如有某辆车要开走,在它之后进来的车辆必须先退出停车场为它让路,待其开出停车场后,这些车辆再按原来的次序进场,每辆车在离开停车场时,都应根据它在停车场内停留时间长短缴费。如果停留在便道上的车辆未进入停车场就要离去,允许其离去,且不需要交费,并且其他在便道上等候的车辆的次序不变。编制一程序模拟停车场管理。1.【提示】汽车模拟输入信息格式可以是:到达/离去,汽车牌照号码,到达/离去的时刻。EX:(A,1, 5)表示1号牌照车在5这个时刻到达,而(D,5,20)表示5号车牌车在20时刻离开,(E,0,0)表示退出程序。 基本要求:要求程序输出每辆车到达后的停放位置(停车场或便道上),以及某辆车离开停车场时应缴纳的费用和它在停车场停留的时间。根据题目要求,停车场可以用一个长度为n的堆栈来模拟,由于停车场内如果有某辆车要开走,在它之后进来的车辆都必须先退出停车场为它让路,待其离开停车场后,这些车辆再依原来的次序进入停车场。所以可以设计两个堆栈。2.总体设计总体功能模块程序功能介绍和操作提示模块汽车进入停车位的管理模块汽车离开停车位的管理模块查看停车场状态的查询模块3.数据结构设计(1)为了便于区分每辆车并了解每辆车当前所处的位置,需要记录汽车的牌照号码和汽车当前的状态。 typedef struct int car_num; int time; car_info; (2)为了便于停车场管理,要为每一个车位分配一个固定的编号。 typedef struct car_info *base; car_info *top; status stacksize; sqstack;(3) 当停车场的停车位上都已停满车,又有新的车到来时要把它调度到便道上,便道上的车辆要按照进入便道的先后顺序顺次序放在便道上。为便道上的每个位置分配一个固定的编号。当有车从停车位上离开的时候。便道上第一辆汽车就立即进入停车位上的某个车位。 typedef struct Qnode int car_num; int time; struct Qnode *next; QNode,*QueuePtr; typedef struct QueuePtr front; QueuePtr rear; int lenth; LinkQueue;(4)当某辆车离开停车场的时候,比它后进停车位的的车要为它让路,而且当它开走之后让路的车还要按照原来的停放顺序再次进入停车位的某个位子。(要利用下面介绍的函数模块进行实现) leave(sqstack *tcc,sqstack *dcc,LinkQueue *p,car_info a,float pay) car_info x,ss; QueuePtr b; int find=1,arrivetime=0; float cost=0.0; while(find) ss=pop(tcc); push(dcc,ss); if(ss.car_num=a.car_num) find=0; cost=(a.time-ss.time)*pay; arrivetime=ss.time; pop(dcc); /把临时堆栈的第一辆车(要离开的)去掉; while(dcc-stacksize) x=pop(dcc); push(tcc,x); if(tcc-stacksizelenth!=0) b=DeQueue(p); x.car_num=b-car_num; x.time=b-time; push(tcc,x); printf(车牌号为%d的车辆由便道进入停车场%d号车道n,x.car_num,tcc-stacksize); 4.详细设计(1).主函数 在主函数中设计出程序功能介绍和操作提示模块,然后利用switch函数选择程序中车辆是进入,离开还是退出程序。 主函数中switch函数中选取字符表示车辆离开,执行arrive函数表示车辆离开,执行leave函数表示任务完成,退出该系统A/aD/dE/evoid main() / 主函数sqstack tcc,dcc; LinkQueue p; car_info a; int sum=1000,n; float pay; char sign; printf(n|*停车场管理*|n); printf(|*A/a:车辆到达*D/d:车辆离开*E/e:推出系统*|nn); Initstack(&tcc); Initstack(&dcc); InitQueue(&p); printf(请先输入停车场的车位总数,收费标准(元/小时):); scanf(%d%f,&n,&pay); getchar(); printf(n请输入A/D/E,车牌号,时刻:); scanf(%c%d%d,&sign,&a.car_num,&a.time); getchar(); while(sum) switch(sign) case a: case A:arrive(&tcc,&p,a,n);break; case D: case d:leave(&tcc,&dcc,&p,a,pay);break; case e: case E:exit(OVERFLOW);break; printf(n请输入A/D/E,车牌号,时刻:); scanf(%c%d%d,&sign,&a.car_num,&a.time); getchar(); sum-; (2)arrive函数设计一个arrive函数表示车辆到达时车辆的停放的位置以及进入的时间;void arrive(sqstack *s,LinkQueue *p,car_info a,int n) if(s-stacksizestacksize); else EnQueue(p,&a); printf(n停车场已满,车牌号为%d的车辆停在便道的%d号位置n,a.car_num,p-lenth); (3)leave函数 设计一个leave函数表示车辆离开时的车牌号码、进站时刻、出站时刻、停留时间、和停车费用。void leave(sqstack *tcc,sqstack *dcc,LinkQueue *p,car_info a,float pay) car_info x,ss; QueuePtr b; int find=1,arrivetime=0; float cost=0.0; while(find) ss=pop(tcc); push(dcc,ss); if(ss.car_num=a.car_num) find=0; cost=(a.time-ss.time)*pay; arrivetime=ss.time; pop(dcc); /把临时堆栈的第一辆车(要离开的)去掉; while(dcc-stacksize) x=pop(dcc); push(tcc,x); if(tcc-stacksizelenth!=0) b=DeQueue(p); x.car_num=b-car_num; x.time=b-time; push(tcc,x); printf(车牌号为%d的车辆由便道进入停车场%d号车道n,x.car_num,tcc-stacksize); printf(n*n); printf(|车牌号码|进站时刻|出站时刻|停留时间|停车费用|n); printf(|%-6d |%-6d |%-6d |%-6d |%-6.2f |n,a.car_num,arrivetime,a.time,a.time-arrivetime,cost); printf(*n); (4)公共函数此函数中的函数包括如下模块:1. 栈的初始化函数(包括申请空间) void Initstack(sqstack *s) s-base=(car_info *)malloc(STACK_INIT_SIZE*sizeof(car_info); if(!s-base) exit(OVERFLOW); s-top=s-base; s-stacksize=0; 2. 进栈操作函数 void push(sqstack *s,car_info e) / 进站函数 *s-top+=e; s-stacksize+; 3. 出栈操作函数 car_info pop(sqstack *s) car_info e; if(s-top=s-base) printf(停车场内没有该车辆!n); exit(0) ; e=*-s-top; s-stacksize-; return e; 4. 队列的初始化函数(申请空间) status InitQueue(LinkQueue *Q) Q-front=Q-rear=(QueuePtr)malloc(sizeof(QNode); if(!Q-front)exit(OVERFLOW); Q-front-next=NULL; Q-lenth=0; return OK; 5. 进队列函数 void EnQueue(LinkQueue *Q,car_info *a ) QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode); if(!p)exit(OVERFLOW); p-car_num=a-car_num; p-time=a-time; p-next=NULL; Q-rear-next=p; Q-rear=p; Q-lenth+; 6. 出对列函数 QueuePtr DeQueue(LinkQueue *Q) QueuePtr p,e,s=0; if(Q-front=Q-rear) printf(便道上没有车辆!n); return s; p=Q-front-next; e=p; Q-front-next=p-next; Q-lenth-; if(Q-rear=p)Q-front=Q-rear; /free(p); return e; 5.运行插图编译运行第一步 输入车辆进入相关信息后的抓图当有车辆离开的时候的抓图6.总结及感想该程序设计所用到的知识是我们没有学过的,通过这次课程设计使得我的自学能力进一步加强,并且了解了一部分C的数据结构,包括堆栈、队列以及其它的一些相关知识;通过该程序的设计,让我对利用函数进行模块化设计的思想有了更深刻的理解,并且对整个编程的思想有了初步梗概的了解。7.源代码#define OVERFLOW -2 #define OK 1 #define ERROR 0 #define STACK_INIT_SIZE 1 typedef int status ; #include #include #include #include typedef struct int car_num; int time; car_info; typedef struct car_info *base; car_info *top; status stacksize; sqstack; void Initstack(sqstack *s) s-base=(car_info *)malloc(STACK_INIT_SIZE*sizeof(car_info); if(!s-base) exit(OVERFLOW); s-top=s-base; s-stacksize=0; void push(sqstack *s,car_info e) / 进站函数 *s-top+=e; s-stacksize+; car_info pop(sqstack *s) car_info e; if(s-top=s-base) printf(停车场内没有该车辆!n); exit(0) ; e=*-s-top; s-stacksize-; return e; typedef struct Qnode int car_num; int time; struct Qnode *next; QNode,*QueuePtr; typedef struct QueuePtr front; QueuePtr rear; int lenth; LinkQueue; status InitQueue(LinkQueue *Q) Q-front=Q-rear=(QueuePtr)malloc(sizeof(QNode); if(!Q-front)exit(OVERFLOW); Q-front-next=NULL; Q-lenth=0; return OK; void EnQueue(LinkQueue *Q,car_info *a ) QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode); if(!p)exit(OVERFLOW); p-car_num=a-car_num; p-time=a-time; p-next=NULL; Q-rear-next=p; Q-rear=p; Q-lenth+; QueuePtr DeQueue(LinkQueue *Q) QueuePtr p,e,s=0; if(Q-front=Q-rear) printf(便道上没有车辆!n); return s; p=Q-front-next; e=p; Q-front-next=p-next; Q-lenth-; if(Q-rear=p)Q-front=Q-rear; /free(p); return e; void arrive(sqstack *s,LinkQueue *p,car_info a,int n) if(s-stacksizestacksize); else EnQueue(p,&a); printf(n停车场已满,车牌号为%d的车辆停在便道的%d号位置n,a.car_num,p-lenth); void leave(sqstack *tcc,sqstack *dcc,LinkQueue *p,car_info a,float pay) car_info x,ss; QueuePtr b; int find=1,arrivetime=0; float cost=0.0; while(find) ss=pop(tcc); push(dcc,ss); if(ss.car_num=a.car_num) find=0; cost=(a.time-ss.time)*pay; arrivetime=ss.time; pop(dcc); /把临时堆栈的第一辆车(要离开的)去掉;while(dcc-stacksize) x=pop(dcc); push(tcc,x); if(tcc-stacksizelenth!=0) b=DeQueue(p); x.car_num=b-car_num; x.time=b-time; push(tcc,x); printf(车牌号为%d的车辆由便道进入停车场%d号车道n,x.car_num,tcc-stacksize); printf(n*n); printf(|车牌号码|进站时刻|出站时刻|停留时间|停车费用|n); printf(|%-6d |%-6d |%-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年南宁职业技术学院单招职业技能测试必刷测试卷及答案解析(名师系列)
- 2026年南昌影视传播职业学院单招职业技能考试必刷测试卷及答案解析(名师系列)
- 2026年浙江金华科贸职业技术学院单招综合素质考试必刷测试卷及答案解析(名师系列)
- 2026年天府新区航空旅游职业学院单招职业适应性测试题库及答案解析(夺冠系列)
- 2026年上海对外经贸大学单招职业适应性测试必刷测试卷附答案解析
- 2026年大兴安岭职业学院单招职业技能测试题库附答案解析
- 2026年四川航天职业技术学院单招职业适应性考试必刷测试卷及答案解析(名师系列)
- 2026年大兴安岭职业学院单招职业倾向性测试题库及答案解析(夺冠系列)
- 2026年安徽卫生健康职业学院单招职业倾向性考试题库带答案解析
- 2026年广西演艺职业学院单招综合素质考试必刷测试卷带答案解析
- T/CAPE 10107-2024设备完整性管理规则
- 奇妙的通信之旅-儿童通信知识科普
- 普通高中英语课程标准(2020版vs2025日常修订版)核心变化对照表
- 2025年11月福建厦门市住房和建设局及所属部分事业单位招聘非在编辅助岗位人员10人考试笔试模拟试题及答案解析
- 公安保密培训课件
- 2025辽宁朝阳市公安机关招聘警务辅助人员301人笔试考试备考试题及答案解析
- 三级安全教育旋挖钻机试题及答案
- 智能电网技术论文
- 2025至2030全球与中国OTA测试行业市场调研与前景趋势报告
- 向以前说拜拜课件
- 2025年风光储电站新能源发电项目投资合同协议
评论
0/150
提交评论