数据结构课程实习报告
姓名: 王倩倩 学号: 20101002193 班号: 116102-12 指导老师:陈亮、陈占龙
中国地质大学信息工程学院 2012/2/13
实习报告内容
一、 停车场管理系统
(1)需求规格说明
【问题描述】:
设停车场是一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n 辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
【基本要求】:
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息,汽车牌照号以及到达或离去的时刻。对每一组输入的数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。
(2)总体分析与设计
【算法设计】
一、 设计思想:用栈来模拟停车场,队列用来模拟便道,根据主界面输入的数据来对停
车场进行管理,创立一个结构体Car用它来存储关于汽车的所有信息(车牌号、停入的时间信息等),当一个车进入停车场时把车子的信息存入结构体中,然后对结构体Car进行压栈,或压入队列,并输出车子的停车信息;当车子离开时,把结构体从栈中弹出,并根据离开时间计算出停车所需的停车费用。
二、 设计表示: 主界面 车 辆到 达 车辆离开
便道车辆查 询 停车费用查 询退出系统
Stack Add() Arrival() Add() IsFull() Delete() Leave() Queue IsEmpty () Delete() (3)程序结构分析:
因为停车场中,每辆车子都是按顺序停入的,要有先后顺序,且只有一个进出口,后进
先出,所以要用栈模拟的停车场,创建一个结构体存入车辆信息,车子进入停车场时用Stack的Add()函数把已存入车辆信息的结构体对象进行压栈,当停车场停满即栈满时,用Queue的Add()函数把车子停入另外一个便道,让车子在便道等候,等栈内有空位时,再将车停入停车场;当车辆离开时先用Leave()函数判断,车子是否在停车场中,若在Leave()函数调用Stack的Delete()函数,若不在输出“您要查找的车不在!”。
(4)编程遇到的问题计算法改进:
1、关于车辆信息的保存:因为车辆信息需要保存不止一项,所以需要建立一个可以保存信息的东西,刚开始我用的是类,信息虽然存进去了可是类却不会压栈,最后放弃,创建一个结构体Car,它功能和类差不多并且应用比较简单。
2、车辆离开时的判断:当车辆离开时,首先要判断车子是否在停车站内,当栈不为空时,从栈顶开始一个个判断输入的车牌号是否在栈内,这时就用到了Top()函数判等(park.Top().carnumber==Carnumber)若不等寻找下一个,若相等把它弹出栈。
(5)编码
定义结构体Car: struct Car {
int carnumber; int hour; int min; };
车辆到达时的Arrival()函数:
int Arrival() {
Car Ca;
cout<<\请输入车牌号:\ cin>>Ca.carnumber;
cout<<\请输入车辆停入时间:\
cin>>Ca.hour; cin>>Ca.min;
cout<<\当前时间为:\ if(park.IsFull()) {
cout<<\当前停车位已满,请到便道等候!\ wait.Add(Ca); i++;
cout<<\当前车子位置在:\ } Else
park.Add(Ca); j++;
cout<<\当前车子的位置在:\ return 0; }
车辆离开是的Leave()函数:
int Leave() {
// Stack
int Carnumber; int H,M;
cout<<\请输入车牌号:\ cin>>Carnumber; Car C; char m;
if(!park.IsEmpty ()) {
while(park.Top().carnumber!=Carnumber) {
park.Delete(C); j--;
tem.Add(C); m++;
if(park.IsEmpty ())
{cout<<\您要查找的车不在!\ }
if(park.Top().carnumber==Carnumber) {
park.Delete(C); j--;
cout<<\请输入车辆离开时间:\ cin>>H>>M;
cout<<\当前时间为:\ int price;
price=((H-C.hour)*60+(M-C.min))*5; cout<<\应缴费用为:\ } } else
cout<<\您要查找的车不在!\ return 0;
}
停车费用的计算:
cout<<\请输入车辆停入时间:\ int inhour,inmin; cin>>inhour>>inmin;
cout<<\请输入车辆离开时间:\ int ouhour,oumin; cin>>ouhour>>oumin; cout<<\应缴纳的费\
主界面的设计即main()函数:
int main() {
//LinkedQueue queue;
cout<<\欢迎进入停车场管理系统,很高兴为您服务! \ cout<<\请选择您要进行的操作: \ cout<<\车辆停入; \ cout<<\车辆离开; \ cout<<\便道车辆查询; \ cout<<\停车费用查询; \ cout<<\退出系统; \ char a; do{
cin>>a; {
switch(a) {
case 'A': Arrival();break; case 'D':Leave();break; case 'B':break;
case 'F':cout<<\请输入车辆停入时间:\
用为: