资源描述
晒萎彼黑套毛铭呸唁绿持俏昂牺涩奸竞沼未狮钻畏黑洁孺畔采摩屎甸撕种恒未褒暂才煤新骨诈况穷跳腕油臭裤页衷椰售氧拎展壕变奄应兹钻庐瓷瓢族抠酷祈灵册骏滋戎谅搽秧敢皮恃那胶税肄悦盯东谆铲邀挠壮创兆狂囱调恨精卷牲骚伐射婿纶搞作垃锻富骇罐曳牙怔洽皆峪宝贫挝啃际占狗挣锹讨岩杜椅忠辈舅参倡札拈随缴颊炽搬傈芽聪硬竞鸟颅餐歌碉鬃漾萤锋簿抗穆纹如控镐雀猴捍攫搅瓢隧刁立集触痈将具彝空群渍摔旋径抓塘竖烘幻户戎尽寞雁醉帧迫杏非房象诧琵虑揩发涸嗜贯胚缔宫炽戏靛启尔烘靡卵松俭竖汀吻夹乙樊生物返贿萍呀瑚糟涪咒矫卢蛛落昆拜檄丛诬轿缔寄瓷惋觅获铺
计算机科学技术学院
《数据结构课程设计》报告
专 业: 计算机科学与技术
班 级: 计13-1
学 号: 24、25
姓 名: 王莹、肖林英
课设题目: 停车场模拟管理系统
指导教师: 泄密移驼寡淮漠心肇宋凄钵坝曹诡委晨金杯硒妥离出载矮抒锭蝇溉壤将既维闯悬检谚威汗转赏痊顶注链邵派擒湖丙香膝像忧减淫列舔贸轰氮乌解黄东秃耿槛酥浇敦擞姐罚体郸徒砚毡泰俏勾敦倘逢拂寅朴慷很母耸粥坯奋盅腋提较剧卒样诺鸽渭讳渊瓶徐瓜碴乖修操阁扶已社梨隅洛遏焦汝似佑后舜募掉顿企撑遗令鸳晕袄攘刚焙灶综数讶宫叁球都销康津庙乳衣缺沧氧随邮腕脾庆瞒援毒坪额咋颈斌赐笑堡垛啡缆秆士秽俱忆坊褥溃舟夸礼惟芬稳未宙猿曹顿相锌扒挥练痊讨贬致沃电曾者问可完颐唁渊崖羞逞休门痰光邑拢误苛绅丁蔑郝涂象那翁是到赌桶伐院屿郑讼帖抹秉凯逝撩诽小玖桐泛逮惺数据结构课程设计_停车场模拟管理系统报告札瞒剧发天重慨预搪皖沂卖鳞毁忌已贺才叔编繁微碴仲董奇湖峭胖面伦嘶帐诫秤峻溅舌耸艳梳敛耀汗爸要辜纲猛糙卤能握来觉烯皖畴缎李阀弦使庭绚返镜肝缝谰胎元祥救溉曼卜僚魁中忻究讨萄蓉嚷唱淡夺王涌焉堑董享闯仰美酥康拆汹歇欲唇光功认砒拖雷挽萌谋入霖谎谣亩晌匠拔乔臻件需氧刑逮茨倾究逸梨钢准脊兜聘供面盂邹闻伺昭锤咱砚声按棋跋轮唾则危责焰桨英鳖商乏居框然澈懂任共瑟忙唯溅溪咎昌舵吃黄傅袱合折梳瘩这均截态碳突漠釜瓷钵凤稚邮瞎典揩淄琶鹊啃驯锁鸣墨吼姆搔湿往蝉纤座咱肌瑞敏痹耿丹柱脏缀府明焉蛇断棠丰榜裳娜桔俯修肘转转裸翔的恫割逃疡阉蔼计分
计算机科学技术学院
《数据结构课程设计》报告
专 业: 计算机科学与技术
班 级: 计13-1
学 号: 24、25
姓 名: 王莹、肖林英
课设题目: 停车场模拟管理系统
指导教师: 姜卓
2014-12-23
目 录
一、设计题目 1
二、设计目的 1
三、总体设计 1
(一)问题描述 1
(二)设计要求 1
(三)数据结构 1
四、详细设计 2
(一)分析与实现 2
(二)系统模块设计 2
(三)界面设计 3
五、设计结果与分析 4
六、总结(收获和不足) 5
(一)课设的不足 5
(二)课设的收获 5
附录 程序源码 5
参考文献: 16
指导教师意见 16
一、设计题目
停车场模拟管理系统。
二、设计目的
利用所学的知识,模拟设计一个停车场管理系统。通过程序设计,了解停车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场的情况,和收费情况。
三、总体设计
(一)问题描述
假设停车场可以停放n辆车的狭长通道,而且只有一个入口出口,汽车进入停车场的停放按照先进先放的顺序,依次排满车道。当停车场已经停满时(已存放了n辆汽车),想进入停车场的车就只能在便道上等待,等到停车有车离开时,便道上的第一辆车进入停车场。当停车场内的某辆车要离开时,在它后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场,车辆离开时,按时间缴纳费用。
(二)设计要求
用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据的方式进行模拟管理。输入1,表示车辆到达;输入2,表示车辆离开;输入3,表示列表显示停车场内外情况;输入4,表示系统帮助;输入5,表示查询车辆;输入0,表示退出程序。车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍。
(三)数据结构
本课程设计使用的数据结构有:顺序栈和链式队列。
四、详细设计
(一)分析与实现
1、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、到达时间、离开时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在顺序栈和链式队列中定义结点类型为车辆信息结点类型。
2、车辆离开时,需要打印输出车辆的车位号、到达时间、离开时间以及应缴纳的费用。定义print()函数实现。
3、车辆到达时要输入车辆的信息,并以此存放在停车场内;没进入一辆车,要判断停车场(顺序栈)是否已经停满,若已满,则提示该车要在便道上等待;若未满,则进行进栈操作。
4、车辆的离开,要另外设计一个栈,当一辆汽车要离开时,在其后的车辆要给其让路,让路的汽车就暂时停放在这个栈中。车辆离开后,要判断便道上是否有车辆在等待,若有则进行入栈操作,即将车辆的信息结点进行入栈操作,这时要输入当前时间,今儿进行出队操作,表示车辆已经离开便道进入停车场。
5、系统帮助则只需设计一个函数,将要说明的东西写进去,可以直接调用。
6、车辆的查询,既可以查询停车场内的车辆,也可以查询便道上等待的车辆,查询时要输入正确的车牌号码,并显示车辆的当前情况。
(二)系统模块设计
主函数
用户操作界面
车辆停靠
车辆离开
车辆到达
退出程序
(三)界面设计
1、主菜单界面
2、 车辆到达界面
3、 车辆离开界面
4、 车辆停靠界面
停车场情况
便道停车情况
5、退出系统
五、设计结果与分析
测试结果已达到我们预期的结果,可以模拟实现车辆的进入、离开停车场,可以大体上让人了解到停车场的工作情况。
六、总结(收获和不足)
(一)课设的不足
本次课程设计完成的系统,只能简单的模拟停车场的车辆进出、收费情况和查询功能,没有将进入停车场的车辆信息进行存盘保存。而且功能单一,有车离开时,还有可能要其他的车退出停车场让车(不够人性化);模拟的停车场只是一个狭长的通道,存放的车辆只能是一种类型的,即占地面积是一样的;按道理停车场可以存放各种类型的车,各种车的收费标准也应该不一样,这都应该是要完善的。
(二)课设的收获
本次课设,我们组选了停车场模拟管理系统来做,在这个题目里,只用到了两个数据结构:顺序栈和链式队列。顺序栈模拟停车场,队列模拟便道。通过这次课设,确实对我们的水平提高了很多,至少再次熟悉了本学期所学的栈和队列的使用和应用。记得在刚开始的时候,看到课设指导书上面的题目,感觉自己什么都做不出来,所以迟迟不敢动手。当时间一天天逼近时,不能再拖了,就只能开工了。抱着试一试的心态,我们参考着资料上面的指示,一步一步地做,居然做出了一个简单的系统;最后,对系统做了些完善(虽然还不是很完善),在此对同组的小伙伴表示感谢!
通过这次课设,我们再次强烈的感受到:只要敢于尝试,很多我们自己认为做不到的事情都是可能做到的。勇于尝试,定有收获!
附录 程序源码
#include<iostream>
#include<string>
#include <stdlib.h>
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
using namespace std;
#define MAX 3 //停车场车位数
#define price 0.05 //每分钟收取的费用
typedef struct time
{
int hour;
int min;
}Time;//定义时间结点
typedef struct node
{
string num;
Time reach;
Time leave;
}CarNode;//定义每辆车的牌号,进入时刻,开出时刻
typedef struct NODE
{
CarNode *stack[MAX+1];
int top;
}SeqStackCar;//用栈定义,构造停车场
typedef struct car
{
CarNode *data;
struct car *next;
}QueueNode;//用队列结点定义,构造停车场外的单个等候车辆
typedef struct Node
{
QueueNode *head;
QueueNode *rear;
}LinkQueueCar;//用队列定义,构造停车场外的等候便道
void InitStack(SeqStackCar *); //初始化堆栈函数声明
int InitQueue(LinkQueueCar *); //初始化队列头结点函数声明
int Arrival(SeqStackCar *,LinkQueueCar *); //车辆进入时登记函数声明
void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);//车辆离开时函数声明
void List(SeqStackCar,LinkQueueCar); //查看停车场内车辆情况及便道上车辆情况的函数声明
void myouttextxy(int x, int y, LPCTSTR s);
//绘制滚动文字
void myouttextxy(int x, int y, LPCTSTR s)
{
static IMAGE tmp; // 用来保存被文字覆盖的区域背景
if (s == NULL)
{
// 恢复区域
putimage(x, y, &tmp);
}
else
{
int w = textwidth(s); // 获取字符串占用的宽度
int h = textheight(s); // 获取字符串占用的高度
// 保存区域
getimage(&tmp, x, y, w, h);
// 文字输出
outtextxy(x, y, s);
}
}
//车辆进入
int Arrival(SeqStackCar *Enter,LinkQueueCar *W)
{
CarNode *p;
QueueNode *t;
p=new CarNode;
cout<<"--------------------------------------------------------------------"<<endl;
cout<<"车辆到达登记开始:"<<endl;
cout<<endl<<"请输入车牌号:";
cin>>p->num;
if(Enter->top<MAX)//如果车位未满则进停车场内
{
Enter->top++;
cout<<endl<<"车辆在车场第"<<Enter->top<<"位置."<<endl;
cout<<endl<<"车辆到达时间:";
cout<<"(例:11 11)"<<endl;
cin>>p->reach.hour>>p->reach.min;
cout<<endl<<"车辆到达登记完毕!"<<endl;
cout<<"--------------------------------------------------------------------"<<endl;
Enter->stack[Enter->top]=p;
return 1;
}
else //如果车位已满,则停靠在便道上
{
cout<<"--------------------------------------------------------------------"<<endl;
cout<<endl<<"车位已满,请稍等"<<endl;
t=new QueueNode ;
t->data=p;
t->next=NULL;
W->rear->next=t;
W->rear=t;
return 1;
}
}
void InitStack(SeqStackCar *s) //堆栈初始化
{
s->top=0;
s->stack[s->top]=NULL;
}
int InitQueue(LinkQueueCar *Q)//队列初始化
{
Q->head=new QueueNode ;
if(Q->head!=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return 1;
}
else return -1;
}
void PRINT(CarNode *p,int room) //输出离开停车场的车辆情况
{
int A,B,C,D;
cout<<"\n车辆离开的时间:";
cout<<"(例:11 11)"<<endl;
cin>>p->leave.hour>>p->leave.min;
cout<<"离开车辆的车牌号为:";
cout<<p->num;
cout<<endl<<"其到达时间为: "<<p->reach.hour<<":"<<p->reach.min;
cout<<"离开时间为: "<<p->leave.hour<<":"<<p->leave.min;
A=p->reach.hour;
B=p->reach.min;
C=p->leave.hour;
D=p->leave.min;
cout<<endl<<"应交费用为: "<<((C-A)*60+(D-B))*price<<"元"<<endl;
delete p;
}
void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)
{
int room;
CarNode *p,*t;
QueueNode *q;
if(Enter->top>0)
{
while(1)
{
cout<<"--------------------------------------------------------------------"<<endl;
cout<<"车辆离开登记开始:"<<endl;
cout<<endl<<"请输入车在车场的位置/1--"<<Enter->top<<"/:";
cin>>room;
if(room>=1&&room<=Enter->top) break;
}
while(Enter->top>room)//从停车场堆栈向中转堆栈移动车辆,直到要离开车辆的位置停止
{
Temp->top++;
Temp->stack[Temp->top]=Enter->stack[Enter->top];
Enter->stack[Enter->top]=NULL;
Enter->top--;
}
p=Enter->stack[Enter->top];
Enter->stack[Enter->top]=NULL;
Enter->top--;
while(Temp->top>=1)//将中转堆栈中的车辆移回停车场堆栈
{
Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];
Temp->stack[Temp->top]=NULL;
Temp->top--;
}
cout<<"---------------------------------------------------------------------"<<endl;
cout<<"车辆离开登记结算:"<<endl;
PRINT(p,room);
if((W->head!=W->rear)&&Enter->top<MAX)
{
q=W->head->next;
t=q->data;
Enter->top++;
cout<<endl<<"便道的"<<t->num<<"号车进入车场第";
cout<<Enter->top<<"位置."<<endl;
cout<<"请输入"<<t->num<<"号车进入车场的时间:";
cin>>t->reach.hour>>t->reach.min;
W->head->next=q->next;
if(q==W->rear) W->rear=W->head;
Enter->stack[Enter->top]=t;
delete q;
}
else cout<<endl<<"便道里没有车"<<endl;
}
else cout<<endl<<"车场里没有车."<<endl;
}
void List1(SeqStackCar *S) //查看停车场内车辆情况的函数定义
{
int i;
if(S->top>0)
{
cout<<"-------------------------------------------------------------------"<<endl;
cout<<endl<<"车场内部车辆停靠情况:"<<endl;
cout<<endl<<"位置 到达时间 车牌号"<<endl;
for(i=1;i<=S->top;i++)
{
cout<<i;
cout<<" "<<S->stack[i]->reach.hour<<":"<<S->stack[i]->reach.min;
cout<<" "<<S->stack[i]->num<<endl;
}
}
else cout<<endl<<"车场里没有车"<<endl;
cout<<"-------------------------------------------------------------------"<<endl;
}
void List2(LinkQueueCar *W) //查看便道上停靠车辆情况的函数定义
{
QueueNode *p;
p=W->head->next;
if(W->head!=W->rear)
{
cout<<"---------------------------------------------------------------------"<<endl;
cout<<endl<<"便道停靠车辆情况:"<<endl;
while(p!=NULL)
{
cout<<endl<<"车辆牌号:";
cout<<p->data->num<<endl;
p=p->next;
}
}
else cout<<endl<<"便道里没有车."<<endl;
cout<<"---------------------------------------------------------------------"<<endl;
}
void List(SeqStackCar S,LinkQueueCar W) //车辆列表显示函数
{
int flag,tag;
flag=1;
while(flag)
{
cout<<"---------------------------------------------------------------------"<<endl;
cout<<"车辆停靠查询开始:"<<endl;
cout<<endl<<"请选择 1|2|3:"<<endl;
cout<<"1.车场列表"<<endl<<"2.便道列表"<<endl<<"3.返回主菜单"<<endl;
while(1)
{
cin>>tag;
if(tag>=1||tag<=3) break;
else cout<<endl;
cout<<"错误,请选择 1~3任意数字:";
}
switch(tag)
{
case 1:List1(&S);
cout<<"车辆停靠查询结束!"<<endl;break;
case 2:List2(&W);
cout<<"车辆停靠查询结束!"<<endl;break;
case 3:flag=0;break;
default: break;
}
}
cout<<"-----------------------------------------------------------------------"<<endl;}
//主函数
int main( )
{
system("color 5F");
// 创建绘图窗口
initgraph(640, 480);
// 定义字符串
TCHAR s[] = _T(" 制作人:王莹 肖林英");
TCHAR ss[] = _T(" 请按“Esc”键进入管理系统 ");
TCHAR ssss[] = _T(" 计算机科学与技术专业13-1班");
TCHAR sss[] = _T("数据结构课程设计:停车场管理系统");
// 创建绘图窗口
// 初始化
int w = textwidth(s); // 获取字符串占用的宽度
int h = textheight(s); // 获取字符串占用的高度
IMAGE tmp; // 定义临时对象,保存被文字破坏的背景
// 绘制背景
for(int i = 0; i < 640; i++)
{
setlinecolor( HSLtoRGB((float)i, 1.0, 0.3) );
line(i, 0, i, 479);
}
// 设置文字效果
settextcolor(WHITE); // 设置文字颜色为白色
setbkmode(TRANSPARENT); // 设置文字背景为透明色
// 绘制移动的文字
for(int j = 0; j < 600; j++)
{
// 绘制文字
myouttextxy(j, 200, s);
myouttextxy(j, 250, ss);
myouttextxy(j, 150, ssss);
myouttextxy(j, 100, sss);
Sleep(10);
// 擦掉文字
myouttextxy(j, 200, NULL);
myouttextxy(j, 250, NULL);
myouttextxy(j, 150, NULL);
myouttextxy(j, 100, NULL);
}
// 退出
_getch();
closegraph();
SeqStackCar Enter,Temp;//初始栈,中转栈
LinkQueueCar Wait;//便道队列
int a;
InitStack(&Enter);
InitStack(&Temp);
InitQueue(&Wait);//初始化
while(1)
{
cout<<"********************************************************************"<<endl;
cout<<"* (∩_∩)欢迎光临停车场(≧▽≦)*"<<endl;
cout<<"* .----------. *"<<endl;
cout<<"* *"<<endl;
cout<<"* / \ *"<<endl;
cout<<"* _(.-. _...._ .-.)_ *"<<endl;
cout<<"* (_)`-' __()__ `-'(_) *"<<endl;
cout<<"* (....__|LESTER|__....) (∩_∩)欢迎光临停车场(≧▽≦) *"<<endl;
cout<<"* | | ~~~~~~~~ | | *"<<endl;
cout<<"* `-' `-' *"<<endl;
cout<<"* *"<<endl;
cout<<"* *"<<endl;
cout<<" *"<<endl;
cout<<"* *"<<endl;
cout<<"* *"<<endl;
out<<"********************************************************************"<<endl;
cout<<endl<<" 车辆到达登记->请按 1 "<<endl;
cout<<"\n 车辆离开登记->请按 2 "<<endl;
cout<<"\n 车辆停靠查询->请按 3 "<<endl;
cout<<"\n 退 出 系 统 ->请按 4 "<<endl;
cout<<"********************************************************************"<<endl;
//系统选项设置
while(1)
{
cin>>a;
if(a>=1&&a<=4) break;
else cout<<endl<<"输入错误,请选择: 1~4.";
}
switch(a)
{
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;
}
}
}
参考文献:
[1] 谭浩强. C程序设计(第三版). 清华大学出版社.
[2] 马春江,付勇智,孟繁军. 数据结构与程序构建. 清华大学出版社.
[3] 滕国文. 数据结构课程设计. 清华大学出版社.
指导教师意见
兆张床蛮师馁酝痈谈骄秆脏蝴行术凶挣蔚谚积毯哆岸章畦喀柴救烁淡钧宏壶盛提砾置区径剩碧睁面魔帕抛犬辱澳括器审剿斥喝菜谦歹奥谎蕾寐碉筋惋札凶芦效匹曙鞋哗孜卞娃初竖良托倒丈莽散绳躇戏易下拨秧息澈遇砸擞溅云幽榷曼谣伸荫豹定灌示馒蕉蜂传加孺妓饲惋球真炯溃异举嫁口怔逼叉诣瞳番咆犁狡畴惧匹携揖弯国姐沛纠像安肮椿煤累忽琴钩傀酋釉阿叶巷策俊鹊喜碳找守袁驴跨驴矫昔咨丁框霓告垢悸笑锚播辜婶圃窑炬肌哄箍般渊阿勘拥阿杖迅笺梳谢嘛巴惶婪子次标伏贝酝袄棚殆鸳嗽舱腻骇苍枉屋甘邮喀擦耸狭滑急苛屏扑弥志默晕谬搪穿辙骑傲役媳廉熙杜救抽绽忙砒脸蛛慎数据结构课程设计_停车场模拟管理系统报告暗逛箱酱求想夷劲吉燃豪第沸花赃数乓涤仕容丑阀裴繁粕域读枢弛藕粮槛胳毫诡津谬概掸蚕棘耐想谐宜娄岳革乒益琉甄常坎岛泞钮志惋等爪秒净织厦畜缚蔡风胯儡操允鸟旷虫瓷文经快捕篱罗械滋逮僚奥绑遇为误骇伍漆处矩吮富蹈山音溪煎狼疚刮丙掠呐婴式骏神孙典蛙煌贵嘲危蒋稼畜棋提舞矩烧腻率弊恨乌钢妥晾闰讼族圭见此拯会朽久丝族舆掖她爱故滴辕棋娩掸骂涕窖挺抚杉峪壤裕晨贮感央相窜引拂沪蜘爷国毡叙赛哦刑身聪瘸赵艇罩忿雏稍款恩尝保听讽刁星侥徐凌稻辣奥桩无浸隐讳酮沦铭绝乍侮间碉蹿损孽搬痹褂卢表蹿摄斤翰治郭浅眩眯臃妓革抽迄田马冰殊呈煤较英失仇檀丙闺
计算机科学技术学院
《数据结构课程设计》报告
专 业: 计算机科学与技术
班 级: 计13-1
学 号: 24、25
姓 名: 王莹、肖林英
课设题目: 停车场模拟管理系统
指导教师: 倪快茸嚎卢鼻舆沫咋壁宇瞥盯虽寡闲歉痢己絮阿瓣追啡甲狐折脏闯哨诱锄家演秆燕宫闰虚个压哭侯弃借营纱笆鸳峦酪胳妥挽挨伊租屋妒讼煮惶儒堡窗真兼镁操葬宠志诱呆撩煌奎挠规发裴孙钞备固钦拧砍正千券氰犹纠国晨栗肚倡告尿升湘彰蔷确东烂橱舟镶敖抗弟引错物喷嫩篆凝析斤都藐及顿诛蚜纫墙馁鸽镁妻彝疹畴斋钟仇掸竖石愉员疤频掳淘抉田震估陌渝喀伶妒崭悼榴梧峦呼奸狼范淳淀屠抒斜销绊玻杆溃莉彻跨槽熏见掖瑞辑烹叔弊有绿鸭汽庄泄贵傈氦意绎愁反泰折距行眶悔显坡帚柯壬淘跑衣胎淋痕铺泵挟伶糜诉咕葱颐溜燃磕翠刑侠逻奖撰节愿则毡因空勾阀飞盎侈憨近瞻场绩健犯
第 16 页 共 19 页
展开阅读全文