C语言课程设计报告停车场管理系统(1)

  • 格式:doc
  • 大小:207.00 KB
  • 文档页数:22

下载文档原格式

  / 22
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言课程设计报告

——停车场管理1

班级:

学号:

*名:**

指导教师:***

时间:2011年6月7日

C课程设计报告

目录

一、题目及要求

二、题目及要求

三、题目及要求

四、题目分析

五、数据结构说明

六、各函数算法分析

七、程序测试

八、课程设计感悟与收获

九、源代码

一、题目及要求

[要求]

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

[提示]

汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去时刻)。

例如:(’A’,1,5)表示1号牌照车在5这个时刻到达,而(’D’,5,20)表示5号牌照车在20这个时刻离去,整个程序可以在输入信息为(’E’,0,0)时结束。

基本要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交的费用和它在停车场内停留的时间。

根据题目要求,停车场可以用一个长度为n的堆栈来模拟。由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。所以可以设两个堆栈。

二、题目分析

由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列。由此很容易联想到用结构体数组来存储车库信息。又每个汽车的车牌号都不一样,这样一来就可以根据车牌号准确找到汽车位置。当停车场内某辆车要离开时,在他之后进入的汽车必须再按原次序进入车库。这是一个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个结构体数组,用来暂时存放为出站汽车暂时让道的汽车车牌号。当车库满后,继续进来的汽车需要停放在车库旁边的便道上等候,若车库满后,继续进来的汽车需要停放在车库旁边的便道上等候,若车有汽车开走,这完全是一个先进先出模型,因此可以设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。另外,停车场是根据汽车在停车场内停放的总长来收费的,在便道上的时间不计费,因此必须记录车辆进入车库时的时间,车辆离开车库时的时间不需要记录,当从终端输入时可直接使用。

另外,题目提示中的表示方法[(’A’,1,5)表示1号牌照车在5这个时刻到达]有两点不好;一、对用户友好程度不高,用起来并不方便;二、不接近实际情况,生活中表示时间的格式为“--:--”,完全可以建立一个时间结点来实现。因此,实际编程中将对这一方面予以优化。

三、数据结构说明

根据题意,停车场中的空间分为车库和便道。这里用结构体来模拟车库和便道,按照从端读入数据序进行管理。模拟车库和模拟便道中分别用结构体数组和链表来存储车辆信息。

模拟车库和模拟便道的数据结构如下表1和表2所示:

C课程设计报告

表1 模拟车库的数据结构

用C语言实现这一部分为:

typedef struct time

{

int hour;

int min;

}Time; /*时间结点*/

typedef struct node

{

char num[10];

Time reach;

Time leave;

}CarNode;/*车辆信息结点*/

typedef struct NODE

{

CarNode *stack[MAX+1];

int top;

}Moni_Cheku;

typedef struct car

{

CarNode *data;

struct car *next;

}QueueNode;

typedef struct Node

{

QueueNode *head;

QueueNode *rear;

}Moni_Biandao;

四、各函数算法分析

(1)主函数

void main()

{

Moni_Cheku Enter,Temp;

Moni_Biandao Wait;

int ch;

InitStack(&Enter); /*初始化车站*/

InitStack(&Temp); /*初始化让路的临时链表*/

InitQueue(&Wait); /*初始化便道*/

printf("\n");

printf(" ^_^欢迎进入停车场管理系统1!^_^\n");

printf("\n");

printf("提示! (1).该车库的最大容量为:%d;\n" ,MAX);

printf(" (2).该车库的收费标准为:%4.2f元/(辆*分钟).\n",price);

while(1)

{

printf("********************主菜单********************\n");

printf("1.车辆到达");

printf(" 2.车辆离开");

printf(" 3.列表显示");

printf(" 4.退出系统\n");

printf("**********************************************\n");

printf("请选择(1-4):[ ]\b\b");

while(1)

{

scanf("%d",&ch);

if(ch>=1&&ch<=4)break;

else printf("错误!请重选(1-4):[ ]\b\b");

}

switch(ch)

{

case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/

case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/

case 3:List(Enter,Wait);break; /*打印列表信息*/

case 4:exit(0); /*退出主程序*/

default: break;