


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算法与数据结构课程设计题目:停车场的收费管理系统组长:张赛组员:王佳琪,袁洁莹,张瑜完成日期: 2013 年 12 月 25 日数据结构大作业一、设计目的与内容1.问题描述任务:停车场可以同时停放M 辆车,停车场的入口和出口可分别有N 辆车排队。停车每小时收费 5 元,每天不超过50 元,停车不满半小时不收费,超过半小时按一小时收费。功能要求:完成停车场进出车的收费管理以及查询每辆车的停车记录(按照车牌号查询);停车场目前的状况(满或空的车位数)。规定:输入数据形式和范围:车牌号、停车开始时间输出形式:有中文提示,停车的时间长短、离开停车场的时间、费用界面要求:有合理的提示。存储结构:学生自己
2、根据系统功能要求自己设计,但是要求停车记录要存储在数据文件中。测试数据:要求使用 1、全部合法数据; 2、整体非法数据; 3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;2. 基本要求( 1)停车场管理主要实现以下几个功能:、停车场车位的划分。、车辆进出管理及收费功能。、停车场车辆信息查询功能。、退出系统。( 2)以栈模拟停车场 ,以队列模拟车场外的便道 ,按照从终端读入的输入数据序列进行模拟管理。( 3)栈以顺序结构实现,队列以链表结构实现。3. 目的:程序所能达到的功能:程序主要服务于停车场使用者和停车场管理者。对于使用停车场的停车者 ,在其等待期
3、间 ,系统为使用者提供查询,修改,删除车辆信息的操作。当使用者想要离开停车场, 停车场自动计算出停车费用, 并自动让正在等待的使用者有序进入停车位。而管理者可以通过本系统查询过场,在场,等待的车辆信息,也可以统计24 小时内的停车收入。停车场的管理系统利用栈和队列的这些特点来实现模拟停车场和便道。二、算法的基本思想1. 数据结构定义(1)队列数据类型定义:ADT Queue数据对象: D=ai|ai ElemSet, i=1,2,n,n 0数据关系: R1=|ai-1,ai D,i=2,n基本操作:3数据结构大作业InitQueue(&Q)操作结果:构造一个空队列Q。DestroyQu
4、eue(&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(&
5、amp;Q, &e)初始条件: Q为非空队列。操作结果:删除Q的队头元素,并用e 返回其值。QueueTraverse(Q, visit()初始条件: Q已存在且非空。操作结果: 从队头到队尾, 依次对 Q的每个数据元素调用函数 visit() 。一旦 visit() 失败,则操作失败。ADT Queue(2)栈数据类型定义ADT stack数据对象: D=ai|ai charset, i=1,2,n,n 0数据关系: R1=|ai-1,ai D,i=2,n基本操作:initstack(&S, n)操作结果:构造一个空栈S, 该栈可存放n 个元素。push(&S, e)
6、初始条件:栈S 已存在。操作结果:在栈S 的栈顶插入新的栈顶元素e。pop(&S, &e)初始条件:栈S 已存在。操作结果:删除S 的栈顶元素,并以e 返回其值。DestroyStack(&S)初始条件:栈S 已存在。操作结果:销毁栈S。3数据结构大作业ClearStack(&S)初始条件:栈S 已存在。操作结果:将S 清为空栈。StackLength(&S)初始条件:栈S 已存在。操作结果:返回栈 S 的长度。StackEmpty(&S)初始条件:栈S 已存在。操作结果:若S 为空栈,则返回TRUE,否则返回 FALSE。GetTop(S, &
7、amp;e)初始条件:栈S 已存在。操作结果:若栈S 不空,则以 e 返回栈顶元素。StackTraverse(S, visit()初始条件:栈S 已存在。操作结果:从栈底到栈顶依次对S 中的每个元素调用函数 visit() 。ADT stack2. 主程序流程基本框架:入栈驶入入队列驶出出栈出队列查询过场、在场与等待车辆信息查找(栈数组)操作修改在场车辆信息修改(栈)删除等待车辆队列删除(队列)统计已收取的总停车费用(1) 车辆信息类型typedef struct int Htime;int Mtime;Time; /简单模拟时间信息,记录小时和分钟typedef struct 3数据结构大
8、作业char num20;Time reachtime;Time leavetime;carinfo;(2) 栈类型typedef struct stack carinfo car5;int top;Stack;int inistack(Stack *S)/初始化栈S->top=-1;return 1;void Push(Stack *S,carinfo x)/进栈操作S->top+; S->carS->top=x;printf("进站成功 !n");void Pop(Stack *S,carinfo x)/出栈操作 if(S->top=-1)
9、printf("空栈,无法出栈!");x=S->carS->top;S->top-;printf("出栈成功 !n");int IsEmpty(Stack *S)/判断栈空 if(S->top=-1)return 1;elsereturn 0;(3)队列类型(便道)typedef struct Nodecarinfo data;struct Node *next;QueueNode;typedef struct QueueNode *front;QueueNode *rear;Queue,*linkQueue;int EnterQ
10、(Queue *Q,carinfo x);int iniQueue(Queue *Q)/初始化便道 Q->front=(QueueNode *)malloc(sizeof(QueueNode);/申请节点3数据结构大作业if(Q->front!=NULL) Q->rear=Q->front; Q->front->next=NULL;return 1;else return 0;int EnterQ(Queue *Q,carinfo x)/进便道QueueNode *newNode;newNode=(QueueNode *)malloc(sizeof(Queu
11、eNode);if(newNode!=NULL)newNode->data=x;newNode->next=NULL;Q->rear->next=newNode;Q->rear=newNode;return 1;else return 0;int DeleteQ(Queue *Q,carinfo x)/出便道QueueNode *p;p=Q->front->next;if(Q->front=Q->rear)/判断便道是否有车return 0;x=p->data;if(p->next=Q->rear)Q->rear=Q
12、->front;Q->front->next=NULL;Q->front->next=p->next;free(p);return 1;(4)主函数及其他函数的算法void main()Queue *Q;Stack *S=NULL;S=(Stack *)malloc(sizeof(Stack);/申请栈节点Q=(linkQueue)malloc(sizeof(Queue);/申请便道节点int i;3数据结构大作业iniQueue(Q);/初始化调用inistack(S);/初始化调用printf("n*欢迎使用停车场管理界面*n");p
13、rintf("*本停车场每小时收费2 元 , 停车不满半小时不收费,超过半小时按一小时收费 *");printGraph();while(1)printf("n请输入操作 ");scanf("%d",&i);switch(i)case 1:Arrive(S,Q);printGraph(); break;case 2:Departure(S,Q);printGraph();break;case 3:Print(S);printGraph();break;case 0:exit(1);break;case 4:PrintQ(Q);
14、break;case 5:Search(S);break;default :printf("重新输入 ");printGraph();void Lpush(Stack *S,carinfo x)Push(S,x);/进临时栈void LPop(Stack *S,carinfo x)Pop(S,x);int Arrive(Stack *S,Queue *Q) /车辆到达carinfo x;int a;printf("输入车牌号:");scanf("%s",x.num);printf("请输入进车场的时间(*:*): "
15、;);scanf("%d:%d",&x.reachtime.Htime,&x.reachtime.Mtime);if(S->top=Size-1)printf("车场已满,不能进入,进便道n");3数据结构大作业a=EnterQ(Q, x);/递归调用进便道操作if(a=1)printf("OKn");elseprintf("No!n");elsePush(S,x);return 1;int Departure(Stack *S,Queue *Q)/车辆离开操作carinfo a;int pa
16、rktime,paytime;char x20;Time leavetime;Stack *p=NULL;int point1=S->top;int point2=S->top;printf("请输入要离去的车牌号:");scanf("%s",x);while(point1!=-1&&point2!=-1)if(strcmp(S->carpoint1.num,x)=0)/匹配函数,是否输入的信息与车场信息匹配printf("请输入要离开的时间(*:*): ");scanf("%d:%d&qu
17、ot;,&leavetime.Htime,&leavetime.Mtime);for(;point1!=S->top;point1+,point2+)/扫描直到结束S->carpoint1=S->carpoint2;/如果找到了,出车S->top-;printf("成功出车场 n");parktime=(leavetime.Htime-S->carpoint1.reachtime.Htime)*60+(leavetime.Mtime-S ->carpoint1.reachtime.Mtime);if(leavetime.H
18、time-S->carpoint1.reachtime.Htime>=10)paytime=10;elseif(leavetime.Mtime-S->carpoint1.reachtime.Mtime<=30)paytime=leavetime.Htime-S->carpoint1.reachtime.Htime;else paytime=leavetime.Htime-S->carpoint1.reachtime.Htime+1;printf("其在停车场内停留时间为%d分钟,实际按照 %d小时计费, 所需付费为: %d元。 n",pa
19、rktime,paytime,paytime*2);3数据结构大作业point2=-1;elsepoint2=point1;point1-;if(Q->front!=Q->rear) a=Q->front->next->data;printf("从便道进入停车场的车牌号:%s",a.num);printf(" 请输入进车场的时间: %d:%d",leavetime.Htime,leavetime.Mtime); scanf("%d:%d",&a.reachtime.Htime,&a.rea
20、chtime.Mtime);Push(S,a);DeleteQ(Q,Q->front->next->data);if(point1=-1)/如果到结束了,还没有找到,则输出信息printf("此车没有在停车场!n");return 1;void Print1(carinfo x)/简单的输出操作printf("车牌号: %sn",x.num);printf("进车场的时间:%d:%dn",x.reachtime.Htime,x.reachtime.Mtime);printf("n-n");void
21、 Print(Stack *S)/打印车场信息carinfo x;int point=S->top;/从栈头开始if(S->top=-1)printf("车场没有车辆登记进入!n");else while(point!=-1)printf("n-n");printf("车的位置号: %dn",point);x=S->carpoint;/把依次扫描到的信息赋值给xPrint1(x);/调用输出函数point-;/输出所有的车场信息printf("显示车场信息成功!n");3数据结构大作业void P
22、rintQ(Queue *Q)/打印便道车辆信息QueueNode *p;/p=(QueueNode *)malloc(sizeof(Queue); /申请结点p=Q->front->next;if(Q->front!=Q->rear)/*判断通道上是否有车*/printf("n等待车辆的车牌号为: ");while(p!=NULL)/判断是否到结尾printf("%s",p->data.num);p=p->next;/如果没找到,继续向下找printf("n");elseprintf("
23、nttt便道里没有车。n");int Search(Stack *S)/按车牌号查找车辆信息char x20; Time leavetime;Stack *p=NULL;carinfo a;int point1=S->top;int point2=S->top;printf("请输入要查找的车牌号:");scanf("%s",x);while(point1!=-1&&point2!=-1)if(strcmp(S->carpoint1.num,x)=0)/匹配函数,是否输入的信息与车场信息匹配 for(;poin
24、t1!=S->top;point1+,point2+)/扫描直到结束S->carpoint1=S->carpoint2;/如果找到了,输出信息printf("该车目前在停车场中。n");point2=-1;elsepoint2=point1;point1-;3数据结构大作业if(point1=-1)/如果到结束了,还没有找到,则输出信息printf("此车没有在停车场!");return 1;void printGraph()int i;printf("n");for(i=0;i<80;i+) printf(&
25、quot;-");printf("nttt*请选择操作序号*");printf("nnttt -车辆到达请选1-");printf("nnttt -车辆离开请选2-");printf("nnttt -查询停车场信息请选3-");printf("nnttt -查询便道信息请选4-");printf("nnttt -按车牌号查找请选5-");printf("nnttt -退出系统请选0-");printf("nn");for(i=
26、0;i<80;i+) printf("-");3. 各模块之间的调用关系主函数 void main()初始化调用iniQueue(Q);inistack(S);调用到达函数Arrive(S,Q);调用离开函数Departure(S);调用打印信息函数printGraph()三、测试数据全部合法数据:1.主界面3数据结构大作业2.到达:3数据结构大作业3.离开:3数据结构大作业3数据结构大作业(若便道有车等待)输出从便道中进入停车场的车牌号、进车场时间 (即为从便道中出车的时间)、进站成功!3数据结构大作业4.输出车场信息5 输出便车道信息3数据结构大作业6、按车牌号查
27、找信息3数据结构大作业非法数据1.主界面:3数据结构大作业2.车辆到达:3.车辆离开3数据结构大作业四、源程序及系统文件使用说明#include<stdio.h>#include<stdlib.h>#include<string.h>#define Size 2#define price 5typedef struct int Htime;int Mtime;Time;/简单模拟时间信息,记录小时和分钟typedef struct char num20;3数据结构大作业Time reachtime;Time leavetime;carinfo;/通过结构来保
28、存来车的车牌号,到达时间,离开时间typedef struct stackcarinfo car5;int top;Stack;typedef struct Nodecarinfo data;struct Node *next;QueueNode;/结点的定义typedef struct QueueNode *front;QueueNode *rear;Queue,*linkQueue;/定义队列结点int EnterQ(Queue *Q,carinfo x);int inistack(Stack *S)/初始化栈S->top=-1;return 1;void Push(Stack *S
29、,carinfo x)/进栈操作S->top+;S->carS->top=x;printf(" 进站成功 !n");void Pop(Stack *S,carinfo x)/出栈操作if(S->top=-1)printf(" 空栈,无法出栈!");x=S->carS->top;S->top-;printf(" 出栈成功 !n");int IsEmpty(Stack *S)/ 判断栈空if(S->top=-1)3数据结构大作业return 1;elsereturn 0;int iniQue
30、ue(Queue *Q)/初始化便道Q->front=(QueueNode *)malloc(sizeof(QueueNode);/申请节点if(Q->front!=NULL)Q->rear=Q->front;Q->front->next=NULL;return 1;else return 0;int EnterQ(Queue *Q,carinfo x)/进便道QueueNode *newNode;newNode=(QueueNode *)malloc(sizeof(QueueNode);if(newNode!=NULL)newNode->data=x
31、;newNode->next=NULL;Q->rear->next=newNode;Q->rear=newNode;return 1;else return 0;int DeleteQ(Queue *Q,carinfo x)/ 出便道QueueNode *p;p=Q->front->next;if(Q->front=Q->rear)/判断便道是否有车return 0;x=p->data;if(p->next=Q->rear)Q->rear=Q->front;Q->front->next=NULL;Q-&g
32、t;front->next=p->next;free(p);return 1;3数据结构大作业void Lpush(Stack *S,carinfo x)Push(S,x);/进临时栈void LPop(Stack *S,carinfo x)Pop(S,x);int Arrive(Stack *S,Queue *Q) /车辆到达carinfo x;int a;printf(" 输入车牌号: ");scanf("%s",x.num);printf(" 请输入进车场的时间(*:*):");scanf("%d:%d&q
33、uot;,&x.reachtime.Htime,&x.reachtime.Mtime);if(S->top=Size-1)printf(" 车场已满,不能进入,进便道n");a=EnterQ(Q, x);/ 递归调用进便道操作if(a=1)printf("OKn");elseprintf("No!n");elsePush(S,x);return 1;int Departure(Stack *S,Queue *Q)/车辆离开操作carinfo a;int parktime,paytime;char x20;Time
34、 leavetime;Stack *p=NULL;int point1=S->top;int point2=S->top;printf(" 请输入要离去的车牌号:");scanf("%s",x);3数据结构大作业while(point1!=-1&&point2!=-1)if(strcmp(S->carpoint1.num,x)=0)/ 匹配函数,是否输入的信息与车场信息匹配printf(" 请输入要离开的时间(*:*): ");scanf("%d:%d",&leavetim
35、e.Htime,&leavetime.Mtime);for(;point1!=S->top;point1+,point2+)/扫描直到结束S->carpoint1=S->carpoint2;/如果找到了,出车S->top-;printf(" 成功出车场 n");parktime=(leavetime.Htime-S->carpoint1.reachtime.Htime)*60+(leavetime.Mtime-S->carpoint 1.reachtime.Mtime);if(leavetime.Htime-S->carpo
36、int1.reachtime.Htime>=10)paytime=10;elseif(leavetime.Mtime-S->carpoint1.reachtime.Mtime<=30)paytime=leavetime.Htime-S->carpoint1.reachtime.Htime;else paytime=leavetime.Htime-S->carpoint1.reachtime.Htime+1;printf(" 其在停车场内停留时间为 %d 分钟,实际按照 %d 小时计费,所需付费为: %d 元。 n",parktime,payti
37、me,paytime*2);point2=-1;elsepoint2=point1;point1-;if(Q->front!=Q->rear)a=Q->front->next->data;printf(" 从便道进入停车场的车牌号:%s",a.num);printf(" 请输入进车场的时间: %d:%d",leavetime.Htime,leavetime.Mtime); scanf("%d:%d",&a.reachtime.Htime,&a.reachtime.Mtime);Push(S
38、,a);DeleteQ(Q,Q->front->next->data);if(point1=-1)/ 如果到结束了,还没有找到,则输出信息printf(" 此车没有在停车场!n");return 1;void Print1(carinfo x)/简单的输出操作printf(" 车牌号: %sn",x.num);3数据结构大作业printf(" 进车场的时间: %d:%dn",x.reachtime.Htime,x.reachtime.Mtime); printf("n-n");void Print
39、(Stack *S)/ 打印车场信息carinfo x;int point=S->top;/从栈头开始if(S->top=-1)printf(" 车场没有车辆登记进入!n");elsewhile(point!=-1)printf("n-n");printf(" 车的位置号:%dn",point);x=S->carpoint;/ 把依次扫描到的信息赋值给xPrint1(x);/ 调用输出函数point-;/输出所有的车场信息printf(" 显示车场信息成功!n");void PrintQ(Queu
40、e *Q)/打印便道车辆信息QueueNode *p;/p=(QueueNode *)malloc(sizeof(Queue);/ 申请结点p=Q->front->next;if(Q->front!=Q->rear)/* 判断通道上是否有车*/printf("n 等待车辆的车牌号为:");while(p!=NULL)/ 判断是否到结尾printf("%s",p->data.num);p=p->next;/ 如果没找到,继续向下找printf("n");elseprintf("nttt便道里
41、没有车。n");3数据结构大作业int Search(Stack *S)/按车牌号查找车辆信息char x20;Time leavetime;Stack *p=NULL;carinfo a;int point1=S->top;int point2=S->top;printf(" 请输入要查找的车牌号:");scanf("%s",x);while(point1!=-1&&point2!=-1)if(strcmp(S->carpoint1.num,x)=0)/ 匹配函数,是否输入的信息与车场信息匹配for(;point1!=S->top;point1+,point2+)/扫描直到结束S->carpoint1=S->carpoint2;/如果找到了,输出信息printf(" 该车目前在停车场中。n");point2=-1;elsepoint2=point1;point1-;if(point1=-1)/ 如果到结束了,还没有找到,则输出信息
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版卫星通信系统建设项目合同
- 2025版工业自动化控制系统设备监造与维护合同
- 2025年度网络安全产品保密协议范本
- 2025建筑工程劳务合同样本
- 2025年私人住宅渗水修复合同协议
- 2025企业合同管理指南合同履行与监督实施细则文档模板
- 语文专业知识培训心得
- 红色船员基础知识培训课件
- 红色家书课件带稿
- 企业资产保理融资合同
- GB/T 5907.4-2015消防词汇第4部分:火灾调查
- GB 31701-2015婴幼儿及儿童纺织产品安全技术规范
- 健身理论与指导课件讲义
- 浙江省科学作业本2022版四年级上册作业本参考答案
- 2023年中远海运船员管理有限公司招聘笔试题库及答案解析
- 美国共同基金SmartBeta布局及借鉴
- 企业劳动用工法律风险与防范
- 普通逻辑ppt课件(完整版)
- 2022年08月安徽省芜湖市招考大学生科技特派员岗位冲刺题(带答案)
- 国家城镇救援队伍能力建设与分级测评指南
- DB32∕T 4065-2021 建筑幕墙工程技术标准
评论
0/150
提交评论