。
实验题目:实验六 停车场管理
班级:11计算机2班 姓名:仇越 学号:11070204 日期:10.30
一、 需求分析
1. 程序的功能:
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
(1)建立静态数组栈作为模拟停车场,动态链表栈作为模拟便道。 (2)车辆到达,停入停车场或者便道,记录车牌号,到达时间。
(3)车辆离开,记录离开时间,输出停车时间和收费。将便道内车停入停车场,记录进入时间。 (4)列表显示停车场,便道内车辆情况。
(5)列表显示历史记录(已经离开车的车牌号,到达离开时间,收费)。 2. 输入输出的要求:
(1)输入:字符串车牌号,到达时间,离开时间
(2)输出:停车时间和收费,停车场和便道的停车情况,历史记录。 3. 测试数据:
1 2 3 停车场:车牌号 苏A1111 到达时间12:20 离开时间13:00 停车场:车牌号 苏A1111 到达时间12:20 离开时间13:00;车牌号 苏A2222 到达时间13:00 离开时间14:00 选择停车场内1号位离开,再选择停车场内2号位离开 停车场:车牌号 苏A1111 到达时间12:20 离开时间13:00;车牌号 苏A2222 到达时间13:00 离开时间14:00 便道:车牌号苏A3333 到达时间12:30 离开时间13:00;车牌号 苏A4444 到达时间13:00 离开时间15:00 选择停车场内2号位离开,再选择选择停车场内2号位离开 4 停车场:车牌号 苏A1111 到达时间12:20 离开时间13:00;车牌号 苏A2222 到达时间13:00 离开时间14:00 便道:车牌号苏A3333 到达时间12:30 离开时间13:00;车牌号 苏A4444 到达时间13:00 离开时间15:00 输出停车场内和便道的停车情况 5 停车场:车牌号 苏A1111 到达时间12:20 离开时间13:00;车牌号 苏A2222 到达时间13:00 离开时间14:00 便道:车牌号苏A3333 到达时间12:30 离开时间13:00;车牌号 苏A4444 到达时间13:00 离开时间15:00 让苏A1111和苏A2222离开后,再输出停车场内和便道的停车情况,以及历史记录 6 选择4退出系统 -可编辑修改-
。
二.概要设计
4. 本程序所用的抽象数据类型的定义 ADT Stack{
数据对象:D={ai|ai为ElemSet,i为正整数}
数据关系:R1={
基本操作:InitStack(&S) //构建一个空栈S DestroyStack(&S) //S 被销毁
StackLength(S) //返回 S 的元素个数,即栈的长度。
StackEmpty(s) //若栈 S 为空栈,则返回 TRUE,否则 FALE。 GetTop(S, &e) //用 e 返回 S 的栈顶元素 ClearStack(&S) //将 S 清为空栈
Push(&S, e) //入元素 e 为新的栈顶元素。
Pop(&S, &e) //删除 S 的栈顶元素,并用 e 返回其值
2. 主程序的流程及各程序模块之间的层次关系
1输出菜单“1.车辆达到 2.车辆离开 3.列表显示 4.退出系统” (1)流程:○。
2先选择1,输入车牌号,输出车在停车场的位置,再输入到达时间。 ○
3随意选择1,2,3,4。若选1,停车场满后停在便道上,输入车牌号。 ○
4选择2,输入要离开的车辆在停车场的位置和离开时间。输出停车时间和费用。若便 ○
道上有车,将一辆车移到停车场,输入现在时间。
5选择3,输出菜单“1.停车场 2.便道 3.历史记录 4.返回” ○。选择1,2,3,分别显示停
车场,便道,历史记录的情况。选择4返回到开始菜单。
6最后选择4结束程序。 ○
-可编辑修改-
二、 详细设计
1. 采用c语言定义相关的数据类型 (1)typedef struct time
{ int hour;
int min;
}Time; /*时间结点*/ (2)typedef struct node
{ char num[10]; Time reach;
Time leave;
int time;//车停在停车场的总时间}CarNode; /*车辆信息结点*/ (3)typedef struct NODE
{ CarNode stack[MAX+1];
int top;
}SeqStackCar; /*模拟车站*/ (4)typedef struct car
{
CarNode data;
。
-可编辑修改-
。
struct car *next;
}QueueNode; (5)typedef struct Node
{
QueueNode *head; QueueNode *rear;
}LinkQueueCar; /*模拟通道*/ 2.写出各模块的伪码算法
(1)主函数 void main() {
SeqStackCar Enter,Temp; LinkQueueCar Wait,Leavecar; int ch;
InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/
InitQueue(&Leavecar); /*初始化离开的车*/ while(1) {
printf(\printf(\车辆到达\
-可编辑修改-
。
printf(\车辆离开\printf(\列表显示\printf(\退出系统\\n\
printf(\
while(1) { }
switch(ch) {
case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/
case 2:Leave(&Enter,&Temp,&Wait,&Leavecar);break; /*车辆离开*/ case 3:List(&Enter,&Wait,&Leavecar);break; /*列表打印信息*/ case 4:exit(0); /*退出主程序*/ default: break; }}}
scanf(\if(ch>=1&&ch<=4)break;
else printf(\请选择: 1|2|3|4.\
(2)初始化栈
void InitStack(SeqStackCar *carstack) /*初始化栈*/ {
carstack->top=0;
-可编辑修改-