1、 数据结构课程设计班 级 201315827 学 号 201315827 姓 名 谢东东 2015 年 9 月 14 日一 课程设计题目某停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆汽车停放在最北端) ,若停车场内已经停满n 辆车,则后来的汽车只能在门外的便道即候车场上等候,一旦有车开走,则排在便道上的第一辆车即可开入。 当停车场内某辆车要离开时。在它之后进入的车辆必须先退出车场为它让路,该车辆开出大门外,其它车辆再按原次序进入停车场, 每辆停放在车场的车在它离开停车场时必须按
2、它停留的时间长短交纳费用。试为该停车场编制按上述要求进行管理的模拟程序。二 流程及图示停车 显示信息 离开 收费系统查询 显示信息退出停车场(栈 1)栈 2通道(队列)三、程序运行及截图1.开始界面首先是登陆界面,只要用户名跟密码一样就可以登陆,输入正确后,有一个延迟程序,让使用者感觉更真实a 1a 2a 3 a n如果输入错误了,就是直接退出了2.主界面 登录成功后,则是如下的功能界面:3 . 停车场管理系统 你可以选择停车,离开,或者查看,当操作完了,可以直接选择退出。当你输入 1 后,会提示你输入停车的车号: 在这里输入你想要停车的车号,然后会提示你停车的时间: 输入停车时间后,则会显示
3、你刚停车的详细的信息: 4.离开 输入 2,则会提示你要离开的车号: 然后输入离开的车号后,会提示你输入该车离开的时间,输入离开的时间,则 会出现如下界面: 5 停车场管理系统 系统则会把你刚离开的车俩的详细信息给你打印出来:拉开的车号,所用时间 以及应收的费用。这个时间管理员,可以对照表收费了。 6.查看 当你要查看停车场所停车的信息时,你可以选择 3。同样,选择 3 确定后会提 示你要查看的车号,然后则会把信息打印在界面上: 系统会告诉你这俩停在停车场里面的那个位置上。7.退出 当你一切操作完了后,就可以选择退出了,输入 4 停车场管理系统 随便按个键就退出该系统了。四、程序代码#incl
4、ude #include #include#include#include #include #include using namespace std; #define Max_Size 2/停车的最大容量 #define HourFare 2 /每小时的停车费用 int CountForStack=0; /栈里现有的车数 int CountForQueue=0; /排队等候的车数 typedef struct char Condition;/到达或者离开的状态 int Arrivetime;/到达时间,默认为 -1,表示没有到达 int Leavetime;/离开时间,默认为 -1,表示没有
5、离开 int License;/车牌号 CarNode;/保存每辆车的信息 typedef struct/栈的定义 CarNode *base;/栈底指针 CarNode *top;/栈顶指针 int Stacksize;/栈的最大容量 CarStack; typedef struct QNodechar Condition;/到达或者离开的状态int Arrivetime;/到达时间,默认为 -1,表示没有到达 int Leavetime;/离开时间,默认为 -1,表示没有离开 int License;/车牌号 QNode *next; QNode; typedef struct/队列的定义
6、 QNode *front;/对头指针 QNode * rear;/队尾指针 Queue;bool InitStack(CarStack if(!S1.base) coutnext=NULL;return true; bool EnQueue(Queue if(!p) coutArrivetime=e.Arrivetime;p-Leavetime=e.Leavetime; p-Condition=e.Condition;p-License=e.License;/将 e 赋给 P p-next=NULL;Q.rear-next=p; Q.rear=p; return true; bool DeQ
7、ueue(Queue t.Arrivetime=p-Arrivetime;t.Condition=p-Condition;t.Leavetime=p-Leavetime; t.License=p-License; Q.front-next=p-next; if(Q.rear=p) Q.rear=Q.front;free(p); return true; void InitCarNode(CarNode C.Condition=condition;C.Leavetime=leavetime; C.License=license; bool Push(CarStack else return fa
8、lse; bool IsStackEmpty(CarStack elsereturn false; bool IsQueueEmpty(Queue else return false; bool SearchInStack(CarStack if(!IsStackEmpty(S1)/如果栈 S1 非空 CarNode *p=S1.top-1;while(p!=S1.base) if(*p).License=a) tag=true;-p; if(*p).License=a)tag=true;return tag; bool SearchInQueue(Queue if(!IsQueueEmpty
9、(Q)/如果队列非空 QNode *p=Q.front-next; while(p!=Q.rear) if(*p).License =a) tag=true;p=p-next;/退出此 while 循环时 p 指向最后一个元素 if(*p).License =a) tag=true; return tag; void InCar(CarStack while(tag!=1 int a1;unsigned int a2; switch(tag) case 1: couta1;couta2;InCar(S1,Q,a2,a1); Sreach(S1,Q,a1);break;case 2: couta
10、1; couta2;OutCar(S1,Q,a2,a1);break; case 3: couta1;Sreach(S1,Q,a1);break; case 4: return; break;showmenu(S1,Q); void loging(CarStack int a; printf(“t*n“);printf(“t*n“);printf(“t* *n“); printf(“t* 欢迎使用停车场管理系统 *n“); printf(“t* *n“); printf(“t* *n“);printf(“t*n“);printf(“t*n“); printf(“nt(提示:账号跟密码一样就行)
11、“);printf(“nnnnt 请输入管理员帐号:“); fflush(stdin); gets(Administrator);printf(“ttttttttttt 请输入密码:“);fflush(stdin); gets(password); /比较用户名和密码if(strcmp(Administrator,Administrator) = 0 / 延迟 for(a = 0;a“);Sleep(150); /进入页面时清屏 system(“cls“); showmenu(S1,Q); elseprintf(“nnttt 您输入的帐号或者密码错误 !nnttt“); return; voi
12、d main() CarStack carstack; InitStack(carstack);/建立并且初始化用于停车场的堆栈Queue carQueue; InitQueue(carQueue);/建立并且初始化用于通道的队列 loging(carstack,carQueue);五、心的体会在生活与工作中许多领域都用到数据结构,但关键是如何将问题模型转换,变换成我们熟知的知识应用,即抽象具体化。首先是要把所学的知识重新好 好巩固下,其次,每次课程设计总会有些东西不懂的,这时我们就要上网去查资 料,这样会让我们养成一个好的自主学习的习惯。这次的课程设计,我开始是分 析了这个系统需要做些什么,然后分析要用到哪些代码,哪些结构,哪些算法开 实现这些功能。它让我明白了栈和队列实 际会用在哪些方面,同时我有些不懂的,我会看书,或是在网上找,慢慢的也增 加了自己的知识量。 这次的停车场系统做的很简单,和真正的停车场系统来比,根本就不算什么 了。真正的停车场是不会那么退出停车场的,每次离开都要人家后面的让道,还不被人骂么?不过这次只是一次小小的试手,更难得还在后面,因此我们也需不断学习充实自己。六、参考资料Visual c+程序设计数据结构(c+版)