C++实现数据结构-停车场管理

设停车场是一个可停放”辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满”辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开人;当停车场内某辆车要离开时,在它之后进人的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进人车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

代码:

#include<string.h>  
#include<ctype.h>  
#include<malloc.h>  
#include<limits.h>  
#include<stdio.h>  
#include<stdlib.h>  
#include<io.h>  
#include<math.h>  
#include<process.h>  
#include<iostream>  
using namespace std;
#define TRUE 1  
#define FALSE 0  
#define OK 1  
#define ERROR 0  
#define STACK_INIT_SIZE 20  
#define STACK_INCREMENT 2  
typedef int SElemType;  
typedef int Status;  
//定义车的基本信息  
typedef struct  
{
     
    int arrive[2];  
    int leave[2];  
    char num[10];  
}car;  
//定义队列  
typedef struct QNode  
{
     
    car data;  
    QNode *next;  
}QNode, *QueuePtr;  
typedef struct  
{
     
    QueuePtr front;  
    QueuePtr rear;  
  
}LinkQueue;  
//定义栈  
typedef struct StackNode  
{
     
    SElemType data;  
    struct StackNode *next;  
}StackNode, *StackPtr;  
typedef struct SqStack  
{
     
    int base;  
    int top;  
    car parkcar[STACK_INIT_SIZE];  
    int stacksize;  
}SqStack;  
//-------------------------------------------------------  
//构造一个空栈一个空队列即创建一个停车场  
void CreatePark(SqStack &S, LinkQueue &Q)  
{
     
    S.base = S.top = 0;  
    Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));  
    if (!Q.front)  
        exit(0);  
    Q.front->next = NULL;  
    printf("恭喜停车场创建成功!\n");  
}  
  
//-------------------------------------------------------  
//-------------------------------------------------------  
//遍历栈和队列即显示停车情况  
//停车场的情况  
void ShowStack(SqStack &S)  
{
     
    int j = S.base;  
    while (j < S.top)  
    {
     
        cout << S.parkcar[j].num << "       " << S
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
******************* 实践教学 ******************* 理工大学 计算机与通信学院 2011年春季学期 C程序设计 课程设计 题 目: 专业班级: 姓 名: 学 号: 指导教师: 成 绩:__________________ 摘 要 在车辆销售管理当中,人工统计的速度慢,并且容易现差错。本车辆销售管理系统的自动化加速了统计工作,提高管理效率。本程序主要采用对输的相关信息进行自动分析,然后按组分类将数据保存到数组,这样的结构化非常便于程序后续的统计工作。统计具体过程涉及到车辆进价售价及利润排序等问题,将于正文中详细介绍。本程序实现了所有设计要求。 关键词:文件;排序;统计;C语言 目 录 一、需求分析 1 二、总体设计 2 三、详细设计 3 3.1 详细设计思路 3 3.2 算法流程图 3 四、编码 7 五、测试 8 六、设计总结 12 参考文献 13 致谢 14 附录 15 一、需求分析 本程序将用到文件系统,list.txt文件内容作为数据源,其中单行内容代表一张纸条。程序运行后首先将文件系统的原始数据读取并保存到程序的结构体数组当中,所以提供文件输的操作;由于纸条数据零散,所以要对原始数据进行分类操作并提供一个数组用于保存分类信息;在程序中要进行统计工作,所以要提供显示、排序等操作;另外提供键盘式选择菜单实现功能选择。 二、总体设计 图1 车辆销售管理系统功能模块图 三、详细设计 3.1 详细设计思路 1.main()主函数 设置了程序的流程,结束程序。 2.select ( ) 选择函数 选择所想运行的各个函数. 3.functionscan ( ) 输函数输便条的数据. 4.function1 ( ) 文件的数据输函数多次输数据 5. function2 ( ) 统计函数每种汽车销售量以及销售额的统计 6. functionpaixu2 ( )总额排序函数按销售额对汽车进行排序 7. function4() 总额统计函数统计每种汽车的总额 8. function5() 统计报表函数统计商品总额 9. function6() 清空文件函数 清空文件数据 3.2 算法流程图 3.2.1保存函数Save()的算法流程图如图2所示。 图2 保存函数Save()的算法流程图 3.2.2输函数input()的算法流程图如图3所示。 图3 输函数的算法流程图 3.2.3 输汽车信息 图4 输汽车信息 四、编码 原始数据有汽车编码,车名,进价,售价,销售数量。年所以定义一个全局结构体数组scrip用于保存原始数据。然后定义全局变量n保存纸条数目,定义数组s用于保存分类后的信息。源代码见附录 五、测试 1输新数据测试如图5所示 图5 输新数据测试 2按车名查找数据测试如图6所示 图6按车名查找数据测试 3按编号查找数据测试如图7所示 图7 按编号查找数据测试 4按车辆名称删除数据测试如图8所示 图8车辆名称删除数据测试 5列所有数据测试如图9所示 图9列所有数据测试 6统计各产品的收益和总收益测试如图10所示 图10统计各产品的收益和总收益测试 7按车辆销售额的大小排序并输排序后结果测试如图11所示 图11按车辆销售额的大小排序并输排序后结果测试 六、设计总结 通过这次C程序设计,我掌握了模块化设计方法,能够深的理解结构化程序设计思想,熟练运用结构化程序设计方法,提高了运用C语言进行程序设计的能力。 回顾起这次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多的东西。同时不仅可以巩固了以前所学到的知识,而且学到了很多在书本上所没有学到过的知识,通过这次课程设计使我懂得了理论与实际相结合是很重要的。只有理论知识是远远不够的,只有把所学的理论知识与实际相结合起来,从理论中得结论。才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,通过同学的帮助,逐渐克服各种问题,并且从中学习到了很多的东西。通过这次编程。我发现了很多的不足。让我了解到自身的问题。让我不断的进步。 参考文献 1 C/C++程序设计,王连相等,中国科学技术版社,2004 2 C语言程序设计,谭浩强,清华大学版社,1999 3 C程序设计题解与上机指导,谭浩强,清华大学版社,1999 4 C语言实用程序荟萃,西安电子科技大学版社,1993 5 C语言函数手册,机械工业版社,1999
实验二 停车场管理 班级:A0712 学号:12 姓名:冷清淼 成绩:__________ 指导教师签名:__________ 一、问题描述 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进。在停车场 ,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若停车场已停满 n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开 。当停车场某辆车要离开时,在它之后进车辆必须先退停车场为它让路,待该 辆车开大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,按其停留时 间的长短交费(在便道上停留的时间不收费)。 设计要求: 1.模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。 2.从终端读汽车到达或离去的数据,每组数据包括三项: (1)是"到达"还是"离开"; (2)汽车牌照; (3)"到达"或"离开"的时刻。 3.与每组输信息相的输信息为:如果是到达的车辆,则输其在停车场中或 便道上的位置;如果是离去的车辆,则输其在停车场中停留的时间和交的费用。 二、算法说明 1.数据结构说明 (1)用到两个堆栈:一个为车场栈;另一个为临时栈temp typedef struct NODE{ CarNode *stack[MAX+1]; int top; }SeqStackCar; /*模拟车场*/ 一个队列结构,存储便道车辆信息: typedef struct Node{ QueueNode *head; QueueNode *rear; }LinkQueueCar; /*模拟便道*/ 2.算法说明 (1) 功能模块说明:停车场管理系统含有三个模块,即:车辆到达、离开、列表显示 图1 (2)以模块为单位分析算法 1、"到达"模块:到达时有两种情况,即车场是否满,未满则直接进停车场;满时,到 便道等待。如图2。 图2 2."离开"模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。 图3 3. "显示"模块:显示模块有两个显示选项,即:车场与便道。如图4。 图4 三、测试结果 (一)测试用例(说明:测试用例要合理并且足够,既要有正确用例,也要有错误用例 ,同时检验程序的正确性和强壮性) 1.第一组测试用例 (1)测试输停车场车辆离开,如下表: "服务选择 "车牌号/车位 "到达/离开时间 " "1 "QH058 "15:25 " "1 "AB123 "18:45 " "1 "EA642 "23:15 " "2 "2 "0:30 " "2 "1 "0:65(错误) " (2)测试目的:测试离开方法时间格式控制以及费用计算是否正确。 (3)正确输:第一次离开的是AB123,交费3.45元。第二次时,当在输65时, 该提示输错误,重输。 (4)实际输: (5)错误原因:第一个错误是在计算时,一个数字错了;第二个是没有对时间格式 控制。 (6)当前状态:已改正 2.第二组测试用例 (1)测试输:连续6辆车到达,如下表: " 服务选 " 车牌号 " 到达时间 " "择 " " " "1 "A8828 "7:56 " "1 "S2296 "8:25 " "1 "WW666 "8:45 " "1 "HK456 "15:50 " "1 "GH999 "12:30 " "1 "DD555 "13:40 " 测试目的:测试到达方法与列表显示方法能否正确完成。 (3)正确输:先到达的五辆车先进停车场,最后到达的一辆在便道等候。 (4)实际输: (5)错误原因:没有作时间先后的判断,而是先输先进。 (6)当前状态:待修改 3.第三组测试用例 (1)测试输:接上一步输离开信息,下表: "服务选择"离开车位"离开时间"便道车进时 " " " " "间 " "2 "3 "13:30 "13:40 " (2)测试目的:测试离开方法功能是否成功以及便道进车场是否正确。 (3)正确输:输3号车位的车辆离开信息清单,便道1号车进停车场。 (4)实际输: 错误原因:没有错误。 (6)当前状态:通过 (二)测试结果分析 此停车管理系统基本可能实现一个小的停车场管理,其"到达"与"离开"方法都相对比 较完整,以及结算清单明了。尽管在时间先后上有现混乱,但当其用到实际用时, 那个时间先后就可以避免了。但在输数据时,要按照严格的格式输,否则有可能 现死去或崩溃。若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关 机等,而此系统的缺点却是没有保存功能,关闭之后就要重新建立了。会慢慢完善。 附录:源代码 ///系统说明:本系统适于小型停车场,且停车时间在一天之的短期停放停车场。 //在此系统中,车库容量设置为5,便于测

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值