停车场管理系统(数据结构与算法课设)(C语言版)

        本文是程设计——《停车场管理系统》课题的一个分享。使用了顺序表和栈的数据结构,这也是数据结构与算法课设专栏的第六篇博客,我觉得不应当只是提供要求与原代码,还应当提供一些说明和思维导图的引导。如果您还有别的建议和想法,欢迎评论和私信。

目录

1.设计内容与要求

 2.程序总体设计

(1).数据结构设计

 (2).程序总体框架

1.计时功能实现

2.车辆停入与离开流程实现

 (3).函数原型清单

3.系统运行结果与调试

4.代码实现

 变量声明

1.车辆停入

2.车辆驶离

3.信息显示

4.菜单与主函数

*5.完整代码

5.问题反思与总结


1.设计内容与要求

设计内容:

 设有一个可以停放n(n>=5)辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制模拟该停车场的管理的程序。

设计要求:

(1) 符合课题要求,实现相应功能;

(2) 要求界面友好美观,操作方便易行;

(3) 注意程序的实用性、安全性;


 2.程序总体设计

(1).数据结构设计

typedef struct car {
    char licen[50];        // 车牌号
    time_t startTime ;     // 到达时间
    time_t endTime ;       // 离开时间
    double time = 0.0 ;    // 停放时间(秒)
    double cost = 0.0;     // 停车费用
}Car;

typedef struct ParkingLot {
    Car Spots[n];         // 停车位数组
    Car Queue[m];         // 便道上的车辆队列
    int num_Parked = 0;   // 停车位上停放的车辆数 //当做指针使用
    int num_Waiting = 0;  // 便道上等待的车辆数

}ParkingLot;

        程序使用的数据结构有两个,一个是顺序栈Sports(栈最大长度已知,所以使用顺序栈),另一个是一个不完全的队列Queue,除了支持队列的基本功能,还支持队内元素自由弹出。二者和各自的指针num_Parked和num_waiting封装在结构体ParkingLot中。


 (2).程序总体框架

1.计时功能实现

       如果使用时车辆进入和离开停车场的时间都要靠键盘输入的话,实际使用太过繁琐。所以,提出一个新的想法。当车辆进入停车场时,通过使用time函数记录车辆进入停车场的时刻startTime。当车辆离开停车场时,再记录一下车辆离开的时刻endtTme。这样就可以去计算出车辆在停车场的停留时间并记录到time中。这样不仅避免了多次输入的繁琐,还跟贴近实际生活。

time_t startTime = time(NULL);
Sleep(5000);
time_t endTime = time(NULL);
double timeDiff = difftime(endTime, startTime);  //计时原理
printf("费用:%3.1f", (timeDiff) * poice);

        课题中还提到,停车场的大门尽允许一辆车通行,当停车场内部的车要离开时,靠近外面的车都要先离开车场腾开位置。这段等待的时间就不能计入车辆的停车时间中,等待时间的计算其实很简单。

        

    (这其实只是我们规则假设的一种情况,方便我们去计算等候时间,按照实际情况,不可能所有车移动和等候的时间是规则的,如果想更贴近这种情况,可以去定义一个函数:当车辆离开停车场时,记录当前时刻并将该车辆的标记值设为1(默认为0)等车辆回到停车场时再记录时刻,去计算等待时间。我们在系统中可以使用输入1来表示让一辆车离开,输入0表示一辆车进入。当然,这也只是模拟的一个过程,本次程序并没有实现这个功能,欢迎有实现了该功能的同学在评论区分享交流) 


2.车辆停入与离开流程实现

     


 (3).函数原型清单

void Pop_sports(); 
void Pop_queue();
void Push_sports();
void Push_queue();
void Pop();
void Push();
void p_money();
void Menu();
void Menuport();

3.系统运行结果与调试

        运行时为了方便观察,设置的停车场可停放车辆为2,使用时建议更改到符合要求的>=5

    开始运行,打印菜单,进行选择。

        开始进行停入操作,三张分别是停入停车场,停入车道,无法停入的操作显示 。

        执行车辆驶离操作,让第一个停入的车离开并结算停车费,发现能够正常运行和计算。(后续输入时间在120秒,停留时间是正确的) 

        让车道上的车辆也驶离一辆。

        这时候,再进行显示操作,不仅发现驶离的车辆已经不再显示,车道中的第一辆车也已经进入了停车场中。说明我们的功能是正常实现的。 

4.代码实现

 变量声明

#define n 5
#define m 5
#define length_1 13
#define length_2 18


#define poice 5 //系统实际安排应该是一小时的费用 这里为了方便演示 以一秒钟5元计入

typedef struct car {
    char licen[50];            // 车牌号
    time_t startTime ;        // 到达时间
    time_t endTime ;          // 离开时间
    double time = 0.0 ;       // 停放时间(秒)
    double cost = 0.0;        // 停车费用
}Car;

typedef struct ParkingLot {
    Car Spots[n];               // 停车位数组
    Car Queue[m];               // 便道上的车辆队列
    int num_Parked = 0;         // 停车位上停放的车辆数 //应该可以当做指针使用
    int num_Waiting = 0;        // 便道上等待的车辆数

}ParkingLot;

ParkingLot Park;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值