已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
立体化停车场设计书1.1 课题任务设停车场有地下和地面两层,统一管理。地下停车场采用单入口和单出口。地上停车场采用南北方向的双口,每个口都有一个入口和出口。停车顺序先地面,后地下。地面入口处各有一个单车道的等候通道,并允许等候的车辆因急事从等候通道直接开走。具体的设计任务如下:(1)采用栈、队列和有序表等数据结构。(2)等候车辆的管理。(3)地下、地上停车位的管理。(4)停车计费功能。1.2 课题原理针对本次课程设计的具体要求,我们设计了如下方案:停车场内部选择栈作为基本数据结构,充分利用栈后进先出的数据结构特点,停车场外部的等候区域,针对其“先到先出”的工作特点,选择队列作为基本数据结构。同时设计了计时计费功能,会员制度,针对不同型号,是否为会员的车辆进行分类收费。2 需求分析2.1 课题调研为了完成本次课程设计任务,我们对校园周边的停车场运作状况进行了一系列的前期调研,包括停车场的管理系统的运行原理,收费标准等等,为本次课程设计任务的完成打下了良好的基础。2.2 功能需求此次设计任务,要求停车场分为上下两层,上层为南北双向入口和出口,下层为单向入口出口,并要求我们设计等待区域。对于收费标准,我们将不同型号的车分类收费,同时增加会员管理制度,对于多次在本停车场停车的会员给予优惠。3 方案设计3.1 总体功能设计本次课程设计共分为四个主要功能:(1)进入停车场(2)离开停车场(3)查看停车场现状 (4)计费功能 针对进入停车场的功能,我们设计了“先地上,后地下”,的停放顺序,当地上南北双向任一停车场停满后,再向该停车场进车,会显示“停车场已满”等提示信息,并将车辆停入有剩余车位的其他停车场。当所有停车场均无停车位时,到来车辆将会进入等待区域,一旦有车辆离开停车场,最先到达等待的区域的车辆将会进入停车场。针对离开停车场的功能,可选择任一停车场出车,并会根据停车时长,车辆类型,以及是否为会员等信息给出本次停车的费用。针对查看停车场现状的功能,将显示车牌号,何处停车等相关信息。此外,我们还设计了计费功能,利用windows系统自带函数获取时间,免去了人工手动输入时间的繁琐步骤,同时,针对不同车型,是否享受会员优惠等差异制定了不同的收费标准,使停车场的运行更为规范化,合理化。3.2 数据结构设计本次课程设计主要使用了栈和队列两种数据结构,具体的设计方案和操作过程将在个人报告中给出,在此不再赘述。3.3 函数原型设计int main() system(color E1); coutendl; cout endl; cout endl; cout” endl; coutendl; coutendl; coutendl; coutendl;coutendl; Car w; int t = 1;s1.sInitStack();s2.sInitStack();temt1.sInitStack(); s3.InitStack(&s3); temp1.InitStack(&temp1); shortcut.InitQueue(); while (t) cout = endl; cout * 1.进入停车场 * endl;cout * 2.离开停车场 * endl;cout * 3.查看停车场现状 * endl; cout * 0.退出 * endl; cout = endl;coutendl;coutt; switch (t) case 1: CarIn(&s3,&s1,&s2, &shortcut); break; case 2: CarOut(&s3,&temp1,&s1,&s2,&temt1 ,&shortcut); break; case 3: LookNow(&s3, &temp1, &s1, &s2, &temt1, &shortcut,&w); break; case 0: break; return 0;3.4 用户界面设计运行时为DOS界面,通过增加字符画,更换背景颜色等方法增加界面的美观度。4 方案实现4.1 开发环境与工具开发环境:VisualC+6.04.2 个人设计实现(按组员分小节)4.2.1 曹奕设计实现队列类的实现:typedef struct QueueNode /队列结构 Car data; struct QueueNode *next;QueueNode;class Queue /定义队列类 public:QueueNode *front, *rear; Queue()cout构造函数endl;Queue();int InitQueue();int DestroyQueue(Queue *Q);int EnterQueue(Queue *Q, Car c); int EmptyQueue(Queue*Q); int DeleteQueue(Queue *Q,Car *c);int QueueLength(Queue *Q);Queue:Queue()cout析构函数endl;int Queue:EmptyQueue(Queue *Q)if (front=rear)cout队列为空endl;return (TRUE);elsecout队列不为空next = NULL;cout构造了一个空队列next;free(front);front=rear; cout销毁队列成功next = (QueueNode *)malloc(sizeof(QueueNode); if (rear-next = NULL) cout车辆入队失败next; rear-data = c;/rear-data.licence= rear-data.leaved; cout车辆入队成功countnext = NULL; count+; return (TRUE); int Queue:DeleteQueue(Queue *Q,Car *c)/删除队列元素 QueueNode *t; if (EmptyQueue( Q)cout要查找车辆不存在!next; if (rear = t)rear = front;(*c)= t-data;front-next = t-next;free(t);cout车辆删除成功endl;count-;return (TRUE);int Queue:QueueLength(Queue *Q) if (front!=rear) cout此时队列长队为count-1endl; return 1; else return 0;4.2.2 王卓君设计实现Time类:#include #include #include #include#include #include #include using namespace std;class Time /时间类 private:SYSTEMTIME LocalTime;int month;int day; int hour; int minuet;int second;public:Time() GetLocalTime(&LocalTime); /取系统时间void OutputTime(); /输出时间函数int getmonth() return LocalTime.wMonth;intgetday() return LocalTime.wDay;int gethour() return LocalTime.wHour;int getminute() return LocalTime.wMinute;int getsecond() return LocalTime.wSecond;void save()month=getmonth();day=getday(); hour=gethour();minuet=getminute();second=getsecond();Time();void Time:OutputTime() /输出当前系统时间cout当前时间为:getmonth()月getday()日gethour()时getminute()分getsecond()秒endl;/主函数void main()Time t;t.OutputTime();cout现在是t.getmonth()月t.getday()日t.gethour()时t.getminute()分t.getsecond()秒endl;Guest类:#include #include #include #include#include #include #include static int carfre100=0; /static int carid=0; using namespace std;class Time /时间类 private:SYSTEMTIME LocalTime;int month;int day; int hour; int minuet;int second;public:Time() GetLocalTime(&LocalTime); /取系统时间void OutputTime(); /输出时间函数int getmonth() return LocalTime.wMonth;intgetday() return LocalTime.wDay;int gethour() return LocalTime.wHour;int getminute() return LocalTime.wMinute;int getsecond() return LocalTime.wSecond;void save()month=getmonth();day=getday(); hour=gethour();minuet=getminute();second=getsecond();Time();void Time:OutputTime() /输出当前系统时间cout当前时间为:getmonth()月getday()日gethour()时getminute()分endl;#define MAXSIZE 100 /链表的最大长度typedef struct /线性表的静态单链表的存储结构/char data10;int data;int cur;component,SLinkListMAXSIZE;typedef struct Car int leaved; char licenceLICENCESIZE;Time arrive; Time leave;Car;class Guest:public Time /客户类,继承Time类public:Time t1,t2;SLinkList carid; /该数组存车牌号/char e10;int e;int j,k,v;int cartype; /车辆类型:1客车 2货车 3轿车 4越野车 5跑车float price;public:Guest()for(int i=1,m=0;i=100,m100;i+,m+)caridm.cur=i;/caridi.data = 0000000;/j=0;Guest()int LocateElem(SLinkList carid,int *e); /线性表定位函数,查找值为e的元素void saveid(Car *c,int v); /该函数储存会员的车牌号和停车次数float fee(Time t1,Time t2); /计算价格函float cutprice(float price,int v); /计算打折价格函数;int Guest:LocateElem(SLinkList carid,int *e) /在静态单链线性表中查找第1个值为i的元素若找到,则返回它在表中的位序,否则返回下一位k=0;/while(k&strcmp(caridk.data,e)!=0) /在表中顺链查找while(caridk.data != *e) k=caridk.cur;if(!caridk.data)j=k;k=0;return j+1;return k+1;/LocateElemfloat Guest:fee(Time t1,Time t2) /计算普通价格if(t1.getmonth()!=t2.getmonth()price=(t2.getmonth()-t1.getmonth()*3000;else if(t1.getday()!=t2.getday()price=(t2.getday()-t1.getday()*500;elseprice=(t2.gethour()-t1.gethour()*3600+(t2.getsecond()-t1.getsecond()*60+(t2.getsecond()-t1.getsecond()*CHARGE;cout您的车是什么类型?1客车 2货车 3轿车 4越野车 5跑车cartype;switch(cartype) /1客车 2货车 3轿车 4越野车 5跑车case 1:case 2:price=price*2;break;case 3:price=price;break;case 4:price=price*1.5;break;case 5:price=price*1.2;break;return price;float Guest:cutprice(float price,int v) /计算会员打折后的价格/int i = LocateElem(carid,*e); /调用线性表定位函数if(carfrev-1=100)price=price*0.55;else if(carfrev-1=50)price=price*0.7;else if(carfrev-1=20)price=price*0.85;elseprice=price*0.95;return price;/LocateElem函数的测试函数void main()Guest guest;int e;SLinkList carid;for(int n=0,x=1111;n5,x=5555;n+,x=x+1111)caridn.data=x;for(int i=1,m=0;i=100,m100;i+,m+)caridm.cur=i;for(int y=5;y100;y+)caridy.data=0;coute;cout结果是存在第guest.LocateElem(carid,&e)位endl;4.2.3 张小玉设计实现void CarOut1(SqStack *parking1,SqStack *parking2,SqStack *temt, Queue *shortcutt)int a;char licenceLICENCESIZE; Car c; Time t2;t2.save();Guest guest; t2.OutputTime(); cout请输入车牌号:; gets(licence);printf(南停车场出车请输入0,北停车场出车请输入1.n);scanf(%d%*c, &a);if(!(a=1) int i = 0;s1.sPop(&s1, &c);while (strcmp(c.licence, licence) != 0 & s1.top!=0)temt1.sPush(&temt1, c);s1.sPop(&s1, &c);i+;c.leave=t2; int x; float price; coutx; if(x=1) price=guest.fee(c.arrive,c.leave); price=guest.cutprice(); else price=guest.fee(guest.t1,guest.t2); cout该车应付fabs(price)元endl;while (!s1.sEmpty(&s1)temt1.sPop(&temt1, &c);s1.sPush(&s1, c);if (!shortcut.EmptyQueue( &shortcut)shortcut.DeleteQueue(&shortcut,& c); s1.sPush(&s1, c);c.leave=t2;printf(n);elses2.sPop(&s2,&c); while (strcmp(c.licence, licence) != 0)temt1.sPush(&temt1, c);s2.sPop(&s2, &c); c.leave=t2; int x; float price; coutx; if(x=1) price=guest.fee(c.arrive,c.leave); price=guest.cutprice(); else price=guest.fee(guest.t1,guest.t2); cout该车应付fabs(price)元endl;while (!temt1.sEmpty(&temt1)temt1.sPop(&temt1, &c);s2.sPush(&s2, c);if (!shortcut.EmptyQueue(&shortcut)shortcut.DeleteQueue(&shortcut,& c);s2.sPush(&s2, c);printf(n);void CarOut2(Stack *park, Stack *temp,Queue *Q)char licenceLICENCESIZE; Car c; Time t2;t2.save();Guest guest; t2.OutputTime(); cout请输入车牌号:; gets(licence); s3.Pop(&s3, &c); while (strcmp(c.licence, licence) != 0) temp1.Push(&temp1, c); s3.Pop(&s3, &c); c.leave=t2; int x; float price; coutx;if(x=1) price=guest.fee(c.arrive,c.leave); price=guest.cutprice();elseprice=guest.fee(guest.t1,guest.t2);cout该车应付fabs(price)元endl; while (!s3.EmptyStack(&temp1) temp1.Pop(&temp1, &c); s3.Push(&s3, c); if (!shortcut.EmptyQueue( Q) shortcut.DeleteQueue(&shortcut, &c); s3.Push(&s3, c); printf(n);void CarOut(Stack *park, Stack *temp,SqStack *parking1,SqStack *parking2,SqStack *temt ,Queue *shortcut) int P;cout地上停车场出车请输入1,地下停车场出车请输入2;scanf(%d%*c, &P);switch(P)case 1:CarOut1(parking1, parking2,temt, shortcut );break;case 2:CarOut2(park, temp, shortcut);break;4.2.4 赵天舒设计实现typedef struct Car int licence;Car;class SqStackpublic: Car dataSTACKSIZE; int top;int base;SqStack(); void InitSqStack(SqStack *s); int EmptySqStack(SqStack *s); int FullSqStack(SqStack *S); int SGetTop(SqStack *s,Car c); int SPush(SqStack *s,Car c);int SPop(SqStack *s,Car *c);SqStack:SqStack()/析构函数int SqStack:EmptySqStack(SqStack *s) if (base=top)cout地上停车场现无车,栈为空!endl; return (TRUE); elsecout地上停车场现有车,栈不为空!endl;return (FALSE);int SqStack:FullSqStack(SqStack *S) if (top = STACKSIZE - 1)cout地上停车场车辆已满,栈满!endl;return (TRUE); elsecout地上停车场还有空位,栈未满!endl;return (FALSE);int SqStack:SPush(SqStack *S, Car c) if (FullSqStack(S) return (FALSE); else top+; datatop = c;cout车辆已入栈,成功停入地上停车场内!endl; return (TRUE); int SqStack:SPop(SqStack *S, Car *c) if (EmptySqStack(S) return (FALSE); else (*c) = datatop; top-;cout车辆已出栈,离开地上停车场,欢迎下次光临!endl; return (TRUE); int SqStack:SGetTop(SqStack *s,Car c) if(top=base)return FALSE; elsec=datatop-1;top-;return (TRUE);/若栈非空,则返回s的栈顶元素;否则返回ERRORvoid SqStack:InitSqStack(SqStack *s)top=0;base=0;cout现构造一个空栈!endl;/置栈一个空栈Sclass Stackpublic: Car dataSTACKSIZE; int top;int base;Stack(); void InitStack(Stack *s); int EmptyStack(Stack *s); int FullStack(Stack *S); int GetTop(Stack *s,Car c); int Push(Stack *s,Car c);int Pop(Stack *s,Car *c);Stack:Stack()cout现已构造一个栈类endl;/析构函数int Stack:EmptyStack(Stack *S) if (base=top)cout地下停车场现无车,栈为空!endl; return (TRUE); elsecout地下停车场现有车,栈不为空!endl;return (FALSE);int Stack:FullStack(Stack *S) if (top = STACKSIZE - 1)cout地下停车场车辆已满,栈满!endl;return (TRUE); elsecout地下停车场还有空位,栈未满!endl;return (FALSE);int Stack:Push(Stack *S, Car c) if (FullStack(S) return (FALSE); else top+; datatop = c;cout车辆已入栈,成功停入地下停车场内!endl; return (TRUE); int Stack:Pop(Stack *S, Car *c) if (EmptyStack(S) return (FALSE); else (*c) = datatop; top-;cout车辆已出栈,离开地下停车场,欢迎下次光临!endl; return (TRUE); int Stack:GetTop(Stack *s,Car c) if(top=base)return FALSE; elsec=datatop-1;top-;return (TRUE);/若栈非空,则返回s的栈顶元素;否则返回ERRORvoid Stack:InitStack(Stack *s)top=0;base=0;cout现构造一个空栈!endl;/置栈一个空栈S4.2.5 崔嘉文设计实现void CarIn(Stack *park, SqStack *parking1,SqStack *parking2,Queue *shortcuttt)int q=1; Car c; Time t1;Guest guest; t1.OutputTime();t1.save(); c.arrive=t1;coutendl;guest.saveid(&c); if (s3.FullStack(&s3)=1)&(s1.sFullStack(&s1)=1)&(s2.sFullStack(&s2)=1) cout停车场已满,新来的车在过道等待!endl; shortcut.EnterQueue( &shortcut, c); else if(s1.sFullStack(&s1)=1)&(s2.sFullStack(&s2)=1) cout地上停车场已满,请停入地下停车场endl;cout车已在停车场停车,现在开始计时;coutendl;s3.Push(&s3, c);system(pause);elseif(s1.sFullStack(&s1)=0)&(s2.sFullStack(&s2)=0)cout南北停车场均有车位endl;coutendl; cout请选择车辆进口编号,南:1,北:2endl;cout请输入入口方向:;scanf(%d%*c, &q);switch(q)case 1:s1.sPush(&s1,c);break;case 2:s2.sPush(&s2, c);break;else if(s1.sFullStack(& s1)=0)&(s2.sFullStack(& s2)=1)cout北入口已满,车辆进入南入口endl; s1.sPush(&s1,c);system(pause);else if(s1.sFullStack(parking1)=1)&(s2.sFullStack(parking2)=0)cout南入口已满,车辆进入北入口endl;s2.sPush(&s2, c);system(pause); cout车已在停车场停车,现在开始计时!endl;cout请按任意键继续操作!;getchar();system(cls); system(color b0);printf(n);void LookNow(Stack *park, Stack *temp,SqStack *parking1,SqStack *parking2,SqStack *temt,Queue *shortcut,Car *c) QueueNode *p;while (!s1.sEmpty(&s1) s1.sPop(&s1,c); temt1.sPush(&temt1,* c); while (!temt1.sEmpty(&temt1) temt1.sPop(&temt1, c); cout车辆停车信息 licence:地上南停车场停车endl;s1.sPush(&s1,* c); while (!s2.sEmpty(&s2) s2.sPop(&temt1, c); temt1.sPush(&temt1, *c); while (!temt1.sEmpty(&temt1) temt1.sPop(&temt1, c); cout车辆停车信息 licence:地上北停车场停车endl; s2.sPush(&s2, *c); while (!s3.EmptyStack(&s3) s3.Pop(&s3, c); temp1.Push(&temp1, *c); while (!
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家禽饲养员岗中核心技能考核试卷含答案
- 煤层气集输工安全技能能力考核试卷含答案
- 服装及纺织品整烫工岗前岗位安全考核试卷含答案
- 自然保护区社区共管联络工达标模拟考核试卷含答案
- 井下作业工具工安全生产能力考核试卷含答案
- 顺丁橡胶装置操作工道德强化考核试卷含答案
- 2026年生物识别技术工程师安全知识库建设
- 白马镇安全管理方案讲解
- 专家安全责任手册讲解
- 传染病患者护理循证实践护理查房
- 2026贵州双龙航空港经济区选聘社区工作者9人笔试题库加答案详解
- 2026年甘肃省兰州市公安局兰州新区分局招聘警务辅助人员40人考试参考题库及答案详解
- 2026年餐饮店员工劳动合同范本(甲乙双方)二篇
- 2026 融媒体采编岗事业单位面试试题招聘考试参考题库 含答案
- 2026年广东省中考语文试卷(含答案)
- 国投丰乐种业股份有限公司招聘笔试题库2026
- 2026年国家义务教育质量监测八年级科学(生物)基础测试题
- 中国抗血栓药物相关出血诊疗规范专家共识总结2026
- 2026年江苏省考C类申论真题及范文(含深度解析)
- 风电场值班制度培训
- 2026年医师定期考核妇产科试题及答案解析
评论
0/150
提交评论