您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据结构与算法 > 数据结构停车场模拟管理程序的设计与实现源代码课程设计报告模板
数据结构课程设计报告1河南科技大学课程设计说明书课程名称数据结构课程设计题目停车场模拟管理程序的设计与实现院系_国际教育学院____班级__计算机科学与技术101_学生姓名____刘鹏飞______指导教师刘中华李艳霞日期_2012.6.1--2012.6.19__数据结构课程设计报告2数据结构课程设计任务书课程设计题目停车场模拟管理程序的设计与实现姓名刘鹏飞学号10125020125专业班级计算机科学与技术101组别组长同组成员指导教师刘中华李艳霞课程设计目的进一步理解栈和队列的逻辑结构和存储结构,提高使用理论知识指导解决实际问题的能力。课程设计环境386以上的微机上进行,运行环境为TurboC课程设计任务和要求设计停车场模拟管理程序,要求实现4个大的功能模块1.程序功能介绍和操作提示2.汽车进入停车位的管理模块3.汽车离开停车位的管理模块4.查看停车厂停车状态的的查询模块参考文献1、杨秀金等.数据结构(C语言版).西安电子科技大学出版社20042、谭浩强.C语言程序设计.清华大学出版社.20023、李春保.数据结构教程上机实验指导.清华大学出版社.2005时间进度安排序号起止日期工作内容12012.6.1~2012.6.5下达课程设计任务、查阅资料、确定方案22012.6.6~2012.6.14编写程序、调试、运行32012.6.15验收42012.6.16~2012.6.18撰写课程设计报告52012.6.19提交文档数据结构课程设计报告3停车场模拟管理程序的设计与实现一、简介1.设计目的:理解线性表的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。2.问题的描述:设停车场只有一个可停放几辆汽车的狭长通道,只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车辆开走,则排在便道上的第一辆汽车即可进入;当停车场内某辆汽车要开走时,由于停车场是狭长的通道,在它之后开入的车辆必须先推出车场为他让路,待车辆开出大门,为他让路的车辆再按原次序进入车场。试设计这样一个停车场模拟管理程序。二、数据结构的设计:typedefstructtime{inthour;intmin;}Time;定义一个时间结点,以便区分车辆typedefstructnode{charnum[10];Timereach;Timeleave;}CarNode;对车的信息进行定义,且车只有一个车牌号typedefstructNODE{CarNode*stack[MAX+1];inttop;}SeqStackCar;定义一个栈,用以表示车位typedefstructcar{CarNode*data;structcar*next;}QueueNode;/*队列元素*/typedefstructNode{QueueNode*head;数据结构课程设计报告4QueueNode*rear;}LinkQueueCar;/*队列*/定义一个队列,并定义头尾指针voidInitStack(SeqStackCar*s)/*初始化栈*/{inti;s-top=0;for(i=0;i=MAX;i++)s-stack[s-top]=NULL;}创建一个栈,并初始化intInitQueue(LinkQueueCar*Q)/*初始化便道*/{Q-head=(QueueNode*)malloc(sizeof(QueueNode));if(Q-head!=NULL){Q-head-next=NULL;Q-rear=Q-head;return(1);}elsereturn(-1);}创建一个队列,并初始化intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/{CarNode*p;QueueNode*t;p=(CarNode*)malloc(sizeof(CarNode));flushall();printf(\n请输入车的车牌号(例:豫C1234):);gets(p-num);if(Enter-topMAX)/*车场未满,车进车场*/{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);数据结构课程设计报告5}else/*车场已满,车进便道*/{printf(\n该车须在便道等待!);t=(QueueNode*)malloc(sizeof(QueueNode));t-data=p;t-next=NULL;W-rear-next=t;W-rear=t;return(1);}}有车进入停车场,车场有空位则进入,否则进入便道等待voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W){/*车辆离开*/inti,room;CarNode*p,*t;QueueNode*q;/*判断车场内是否有车*/if(Enter-top0)/*有车*/{while(1)/*输入离开车辆的信息*/{printf(\n请输入车在车场的位置/1--%d/:,Enter-top);scanf(%d,&room);if(room=1&&room=Enter-top)break;}while(Enter-toproom)/*车辆离开*/{Temp-top++;Temp-stack[Temp-top]=Enter-stack[Enter-top];Enter-stack[Enter-top]=NULL;Enter-top--;}for(i=1;i=Temp-top;i++){printf(\n车牌号为%s车为其让路\n,Temp-stack[i]-num);}p=Enter-stack[Enter-top];Enter-stack[Enter-top]=NULL;Enter-top--;数据结构课程设计报告6while(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-topMAX)/*便道的车辆进入车场*/{q=W-head-next;t=q-data;Enter-top++;if(roomEnter-top){for(i=1;iEnter-top;i++){printf(\n车牌号为%s的车进入第%d号的位置.\n,Enter-stack[i]-num,i);}}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{for(i=1;i=Enter-top;i++){printf(车牌号为%s的车进入第%d号车位\n,Enter-stack[i]-num,i);}printf(\n便道里没有车.\n);}}elseprintf(\n车场里没有车.);/*没车*/}有离开车位:1.进行查找,从栈的最后一个开始查找,若有不符合的,则让其离开,到辅助栈。2.查找成功,将其出栈,辅助栈中的汽车重新回到车位中;道上的的汽车进入车位,将车位补满。3.查找失败,进行上方的else,将进入辅助栈的车重新回到车位中,并显示没有此车。flag=1;数据结构课程设计报告7while(flag){printf(\n请选择1|2|3:);printf(\n1.车场\n2.便道\n3.返回\n);while(1){scanf(%d,&tag);if(tag=1||tag=3)break;elseprintf(\n请选择1|2|3:);}switch(tag){case1:List1(&S);break;/*列表显示车场信息*/case2:List2(&W);break;/*列表显示便道信息*/case3:flag=0;break;default:break;}}}用的是一个switch语句实现输入不同的操作选项,调用不同的函数进入不同的操作板块三.功能(函数)设计一.本程序从总体上分为四个功能模块,分别为:一:(1)程序功能介绍和操作提示模块:该模块是为了让用户了解本程序的用途。菜单中含有“汽车进入停车位”“汽车离开停车位”“查看停车场状态”及“退出”四个选项。(2)汽车进入停车位模块:在这一模块主要完成记录停车场汽车的车牌号和对该车进入车位过程中状态改变的记录。(3)汽车离开停车位模块:此模块主要用来完成对停车位上的车停开停车场的过程及其他汽车的状态的改变的记录。(4)查看停车场状态的查询模块:此模块主要用来显示停车位即便道上的状态。二.流程图如下(1)程序功能介绍和操作提示模块数据结构课程设计报告8(2)汽车进入停车位的管理模块(3)汽车离开停车位的管理模块操作选项菜单车辆进入车辆离开列表信息退出程序车辆进入车站输入车牌号判断车站内车辆是否已满进入便道进入车站YN数据结构课程设计报告9四、界面设计:1.欢迎界面车辆离开车站输入车牌号判断车站是否有该车该车是否在停车位上该车不存在于车站YN该车离开该车不存在YN便道车按顺序进入数据结构课程设计报告102.系统界面3.车辆到达界面数据结构课程设计报告114.车辆离开界面数据结构课程设计报告12本程序所得界面描述如下:1:到达汽车。2:离开汽车。3:列表信息。4:退出程序。--------------------------------请选择一个数1/2/3/4:可以清楚地显示车辆的状态,而且简单易懂。五、程序设计:1.主函数流程图2.主要函数:Arrival函数:有车辆进入停车场的实现Leave函数:有车辆离开停车场的实现List函数:对停车场的车位信息的实现Print函数:打印出车的各种信息编写代码期间遇到的问题:1.在定义函数时,定义了不同的指针,出现了不同的错误,程序运行时出现定义错误等错误信息指示。2.在车辆进出车站时,需要不停的调用查找函数以及出栈函数,要进行出栈与临时栈的数据转存,需要设置不同的标志量和判断函数进行出栈进栈的函数的调用,此过程细节非常复杂,比较容易出现错误。MainArrivalLeaveCheck、输入车牌号判断车站内车辆是否已满进入便道进入车站YN输入车牌号该车是否存在该车离开Y该车不存在N其他车按顺序进入车站站内信息便道信息退出程序数据结构课程设计报告13解决办法:通过查找程序中隐藏得错误,加上重新温习C语言和其他资料,进一步对程序有了深入的了解。先在保证各函数准确的情况下,调用函数,画出程序的流程图,对照流程图进行判断条件的编写和函数的调用。‘六、运行与测试:1.运行结果如下数据结构课程设计报告14数据结构课程设计报告152、运行与测试期间遇到的问题及其解决办法。(1).问题1:忽视了车牌号中含有字母导致刚开始的程序不合题意,只能输入数字而无法输入字母;通过复习C语言知识及请教别人才得以解决(2).问题2:输入车牌号时不小心加入了运算符号,使程序运行进入死循环;仔细检查后,加以修改才得以解决。(3).问题
本文标题:数据结构停车场模拟管理程序的设计与实现源代码课程设计报告模板
链接地址:https://www.777doc.com/doc-3871879 .html