C语言课程设计报告停车场管理系统Word文档下载推荐.docx

上传人:b****6 文档编号:19473418 上传时间:2023-01-06 格式:DOCX 页数:28 大小:172.88KB
下载 相关 举报
C语言课程设计报告停车场管理系统Word文档下载推荐.docx_第1页
第1页 / 共28页
C语言课程设计报告停车场管理系统Word文档下载推荐.docx_第2页
第2页 / 共28页
C语言课程设计报告停车场管理系统Word文档下载推荐.docx_第3页
第3页 / 共28页
C语言课程设计报告停车场管理系统Word文档下载推荐.docx_第4页
第4页 / 共28页
C语言课程设计报告停车场管理系统Word文档下载推荐.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告停车场管理系统Word文档下载推荐.docx

《C语言课程设计报告停车场管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告停车场管理系统Word文档下载推荐.docx(28页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告停车场管理系统Word文档下载推荐.docx

编制一程序模拟停车场管理。

[提示]

汽车的模拟输入信息格式可以是:

(到达/离去,汽车牌照号码,到达/离去时刻)。

例如:

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

基本要求:

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

根据题目要求,停车场可以用一个长度为n的堆栈来模拟。

由于停车场内如有某辆车要开走,在它之后进来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。

所以可以设两个堆栈。

二、题目分析

由于停车场是一个狭窄通道,而且只有一个大门可供汽车进出,问题要求汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列。

由此很容易联想到用结构体数组来存储车库信息。

又每个汽车的车牌号都不一样,这样一来就可以根据车牌号准确找到汽车位置。

当停车场内某辆车要离开时,在他之后进入的汽车必须再按原次序进入车库。

这是一个一退一进的过程,而且让道的汽车必须保持原有的先后顺序,因此可再设计一个结构体数组,用来暂时存放为出站汽车暂时让道的汽车车牌号。

当车库满后,继续进来的汽车需要停放在车库旁边的便道上等候,若车库满后,继续进来的汽车需要停放在车库旁边的便道上等候,若车有汽车开走,这完全是一个先进先出模型,因此可以设计一个队列来模拟便道,队列中的数据元素仍然设计成汽车的车牌号。

另外,停车场是根据汽车在停车场内停放的总长来收费的,在便道上的时间不计费,因此必须记录车辆进入车库时的时间,车辆离开车库时的时间不需要记录,当从终端输入时可直接使用。

另外,题目提示中的表示方法[(’A’,1,5)表示1号牌照车在5这个时刻到达]有两点不好;

一、对用户友好程度不高,用起来并不方便;

二、不接近实际情况,生活中表示时间的格式为“--:

--”,完全可以建立一个时间结点来实现。

因此,实际编程中将对这一方面予以优化。

三、数据结构说明

根据题意,停车场中的空间分为车库和便道。

这里用结构体来模拟车库和便道,按照从端读入数据序进行管理。

模拟车库和模拟便道中分别用结构体数组和链表来存储车辆信息。

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

Moni_cheku

结构体

CarNode*stack[MAX+1]

结构体数组

charnum[10]

Timereach

inthour

intmin

Timeleave

inttop

表1模拟车库的数据结构

Moni_biandao

QueueNode

*head

链表

CarNode*data

数组

charnum[10]

Structcar*next

QueueNode*rear

表2模拟便道的数据结构

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

typedefstructtime

{

inthour;

intmin;

}Time;

/*时间结点*/

typedefstructnode

charnum[10];

Timereach;

Timeleave;

}CarNode;

/*车辆信息结点*/

typedefstructNODE

CarNode*stack[MAX+1];

inttop;

}Moni_Cheku;

typedefstructcar

CarNode*data;

structcar*next;

}QueueNode;

typedefstructNode

QueueNode*head;

QueueNode*rear;

}Moni_Biandao;

四、各函数算法分析

(1)主函数

voidmain()

Moni_ChekuEnter,Temp;

Moni_BiandaoWait;

intch;

InitStack(&

Enter);

/*初始化车站*/

Temp);

/*初始化让路的临时链表*/

InitQueue(&

Wait);

/*初始化便道*/

printf("

\n"

);

^_^欢迎进入停车场管理系统1!

^_^\n"

提示!

(1).该车库的最大容量为:

%d;

MAX);

(2).该车库的收费标准为:

%4.2f元/(辆*分钟).\n"

price);

while

(1)

{

********************主菜单********************\n"

1.车辆到达"

2.车辆离开"

3.列表显示"

4.退出系统\n"

**********************************************\n"

请选择(1-4):

[]\b\b"

scanf("

%d"

&

ch);

if(ch>

=1&

&

ch<

=4)break;

elseprintf("

错误!

请重选(1-4):

}

switch(ch)

{

case1:

Arrival(&

Enter,&

break;

/*车辆到达*/

case2:

Leave(&

Temp,&

/*车辆离开*/

case3:

List(Enter,Wait);

/*打印列表信息*/

case4:

exit(0);

/*退出主程序*/

default:

break;

}

主菜单

(2)车辆到达函数

intArrival(Moni_Cheku*Enter,Moni_Biandao*W)/*车辆到达*/

CarNode*p;

QueueNode*t;

p=(CarNode*)malloc(sizeof(CarNode));

flushall();

请输入车牌号(例如:

中CUG888):

"

gets(p->

num);

if(Enter->

top<

MAX)/*车库未满,车进车库*/

Enter->

top++;

该车在车库位置%d.\n"

Enter->

top);

请输入到达时间(**:

**):

%d:

(p->

reach.hour),&

reach.min));

stack[Enter->

top]=p;

return

(1);

else/*车库已满,车进便道*/

该车须在便道等待!

t=(QueueNode*)malloc(sizeof(QueueNode));

t->

data=p;

next=NULL;

W->

rear->

next=t;

rear=t;

(3)车辆离开函数

voidLeave(Moni_Cheku*Enter,Moni_Cheku*Temp,Moni_Biandao*W)/*车辆离开*/

inti,room;

CarNode*p,*t;

QueueNode*q;

/*判断车库内是否有车*/

top>

0)/*有车*/

请输入车在车库的位置(1--%d):

/*输入车辆离开的信息*/

room);

if(room>

room<

=Enter->

top)break;

请重选:

while(Enter->

room)/*车辆离开*/

Temp->

stack[Temp->

top]=Enter->

top];

top]=NULL;

top--;

p=Enter->

while(Temp->

=1)

top]=Temp->

}

PRINT(p,room);

/*判断通道上是否有车及车库是否已满*/

if((W->

head!

=W->

rear)&

Enter->

MAX)/*便道的车辆进入车库*/

q=W->

head->

next;

t=q->

data;

\n便道的%s号车进入车场第%d位置."

t->

num,Enter->

\n请输入现在的时间(**:

(t->

next=q->

if(q==W->

rear)W->

rear=W->

head;

top]=t;

free(q);

\n便道里没有车.\n"

车库里没有车!

/*没车*/

(4)列表显示函数

voidList(Moni_ChekuS,Moni_BiandaoW)

intflag,tag;

flag=1;

while(flag)

**********查看**********\n"

1.车库2.便道3.返回\n"

************************\n"

请选择(1-3):

tag);

f(tag>

tag<

=3)break;

请重选(1-3):

switch(tag)

List1(&

S);

/*列表显示车库信息*/

List2(&

W);

/*列表显示便到信息*/

flag=0;

voidList1(Moni_Cheku*S)/*列表显示车库信息*/

inti;

if(S->

0)/*判断车库内是否有车*/

车库:

\n位置到达时间车牌号\n"

for(i=1;

i<

=S->

top;

i++)

%d"

i);

%d:

%d"

S->

stack[i]->

reach.hour,S->

reach.min);

puts(S->

车库里没有车\n"

voidList2(Moni_Biandao*W)/*列表显示便道信息*/

QueueNode*p;

p=W->

if(W->

rear)/*判断便道上是否有车*/

在便道里等待的车辆的号码为:

while(p!

=NULL)

puts(p->

data->

p=p->

便道里没有车.\n"

五、程序测试

(1)测试信息对错误的处理

(2)进入2辆车,进入车库,道上无车,并进行列表显示。

(3)再进入3辆车,第一辆车进车库,后2辆车在便道等待,同时输出等待的提示作息,最后列表显示以查寻结果,此时车库已满,便道上有2辆车在等待。

(4)离开停车位1和停车位2上的2辆车,同时输入它们离开的时间,并计算它们的应交费用。

离开后,车库里便有空出2个停车位,这时便道里的前2辆车就可进入车库,便道里的进入车库里要记录它们进去的时间,开始计时收费。

说明:

该系统仍可继续工作,随时在主菜单中选择4便可退出系统。

六、课程设计感悟与收获

(1)在此次课程设计中第一次真正体会到了编程的感觉,当投入其中时,感觉不到时间的流逝,只有突然会发现一个下午或是一个晚上过去了。

(2)由于课本上只介绍了数组、结构体、链表的用法,而此次课程设计中要用到堆、栈、队列的知识,因此我利用课余时间查找这方面的内容,通过自学不仅了解到了一些这方面的知识,还锻炼了自己的自学能力。

(3)这次课程设计不同于平时的练习,平时的练习都是一些小程序,虽然知道模块化

编程的好处,但从没有这一次体会得深。

七、源代码

#include<

stdio.h>

stdlib.h>

string.h>

#defineMAX3/*车库容量*/

#defineprice0.5/*每车每分钟费用*/

voidInitStack(Moni_Cheku*);

/*初始化车库*/

intInitQueue(Moni_Biandao*);

intArrival(Moni_Cheku*,Moni_Biandao*);

voidLeave(Moni_Cheku*,Moni_Cheku*,Moni_Biandao*);

voidList(Moni_Cheku,Moni_Biandao);

/*显示车库和便道的存车信息*/

voidInitStack(Moni_Cheku*s)/*初始化车库*/

s->

top=0;

for(i=0;

=MAX;

stack[s->

intInitQueue(Moni_Biandao*Q)/*初始化便道*/

Q->

head=(QueueNode*)malloc(sizeof(QueueNode));

if(Q->

rear=Q->

elsereturn(-1);

voidPRINT(CarNode*p,introom)/*输出出库车的信息*/

intA1,A2,B1,B2;

请输入离开的时间:

/**:

**/"

leave.hour),&

leave.min));

离开车辆的车牌号为:

其到达时间为:

%d\n"

p->

reach.hour,p->

离开时间为:

leave.hour,p->

leave.min);

A1=p->

reach.hour;

A2=p->

reach.min;

B1=p->

leave.hour;

B2=p->

leave.min;

应交费用为:

%4.2f元"

((B1-A1)*60+(B2-A2))*price);

free(p);

n

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1