资源描述
《数据结构课程设计》报告
专 业: 软件工程
班 级: T1123—03
学 号:
姓 名:XXX
课设题目:停车场模拟管理系统
指导教师: 马春江
成 绩:
2013—07—03
目 录
一、设计题目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、系统帮助则只需设计一个函数instruct(),将要说明的东西写进去,可以直接调用。
6、车辆的查询,既可以查询停车场内的车辆,也可以查询便道上等待的车辆,查询时要输入正确的车牌号码,并显示车辆的当前情况。
(二)系统模块设计
主函数
用户操作界面
车辆到达
车辆离开
列表显示
车辆查询
系统帮助
退出程序
(三)界面设计
1、主菜单界面
图 1
2、车辆到达界面
图 2
3、车辆离开界面
图 3
4、列表显示界面
图 4 列表显示菜单
图 5 停车场情况
图 6 便道等待情况
5、车辆查询界面
图 7
五、设计结果与分析
测试结果已达到我预期的结果,可以模拟实现车辆的进入、离开停车场,可以大体上让人了解到停车场的工作情况。
六、总结(收获和不足)
(一)课设的不足
本次课程设计完成的系统,只能简单的模拟停车场的车辆进出、收费情况和查询功能,没有将进入停车场的车辆信息进行存盘保存.而且功能单一,有车离开时,还有可能要其他的车退出停车场让车(不够人性化);模拟的停车场只是一个狭长的通道,存放的车辆只能是一种类型的,即占地面积是一样的;按道理停车场可以存放各种类型的车,各种车的收费标准也应该不一样,这都应该是要完善的.
(二)课设的收获
历时四天,终于把数据结构课程设计做完了!
本次课设,我还是挑了比较简单的题目(停车场模拟管理系统)来做,在这个题目里,只用到了两个数据结构:顺序栈和链式队列。顺序栈模拟停车场,队列模拟便道.通过这次课设,确实对自己的水平提高了很多,至少再次熟悉了本学期所学的栈和队列的使用和应用.记得在刚开始的时候,看到课设指导书上面的题目,感觉自己什么都做不出来,所以迟迟不敢动手。当时间一天天逼近时,不能再拖了,就只能开工了.抱着试一试的心态,我参考着资料上面的指示,一步一步地做,居然做出了一个简单的系统;最后通过请教XX同学,对系统做了些完善(虽然还不是很完善),在此对他表示感谢!
通过这次课设,我再次强烈的感受到:只要敢于尝试,很多我们自己认为做不到的事情都是可能做到的.勇于尝试,定有收获!
附录 程序源码
#include 〈iostream。h〉
#include 〈fstream.h>
#include <iomanip.h〉
#include 〈windows。h〉
#include 〈stdio。h>
#include <math.h〉
#define maxnum 5
#define price 0.5
enum returninfo{ok,error};
typedef struct time//时间结构体
{
int hour;
int minute;
}TIME;
typedef struct nodea//汽车结构体
{
char number[10];
TIME reach;
TIME leave;
}CARNODE;
typedef struct nodeb//停车场
{
CARNODE *stack[maxnum+1];
int top;
}SEQSTACKCAR;
typedef struct car//车场中已停有的车链表结点
{
CARNODE * data;
struct car * next;
}QUEUENODE;
class LINKQUEUECAR//链表,存放等待进入停车场的车
{
public:
QUEUENODE * head;
QUEUENODE * rear;
LINKQUEUECAR()
{
head=rear=NULL;
};
};
void stackpark(SEQSTACKCAR * s)
{
int i;
s->top=0;
for(i=0;i<=maxnum;i++)
s—>stack[i]=NULL;
}
int queuehall(LINKQUEUECAR * q)//
{
if (q—〉head==NULL)
{
q->head=(QUEUENODE *)malloc(sizeof(QUEUENODE));
q—〉head->next=NULL;
q->rear=q—〉head;
return ok;
}
else
return error;
}
void print(CARNODE * p,int room)//已选中的停车场中的车,确定其离开的时间,并显示计费
{
int a1,a2,b1,b2;
double Price;
cout〈<"请输入车辆离开的时间(时和分用空格隔开):”;
cin>〉p-〉leave.hour>〉p—〉leave。minute;
while(p—〉leave.hour〈0||p—>leave.hour〉24||p—〉leave。minute〈0||p—〉leave。minute〉60)
{
cout<〈”时间输入有错,请重新输入:”;
cin>〉p—〉leave。hour〉〉p—〉leave.minute;
}
cout<<"\n离开车辆的车牌号码:”;
cout〈<p—>number;
cout<〈"\n该车辆到达的时间为:”;
if(p—〉reach。hour<10)
cout〈<"0”<〈p—>reach。hour〈〈”:";
else
cout〈〈p-〉reach.hour<<”:”;
if(p—〉reach。minute<10)
cout〈<"0”<〈p—>reach。minute<〈endl;
else
cout〈〈p-〉reach。minute〈〈endl;
cout〈<"离开时间为:”;
if(p-〉leave.hour〈10)
cout<〈”0”〈<p->leave。hour〈<":”;
else
cout<〈p—〉leave。hour〈<":”;
if(p—〉leave。minute〈10)
cout<<"0"<〈p—>leave.minute〈〈endl;
else
cout〈〈p->leave.minute<<endl;
a1=p—>reach。hour;
a2=p—〉reach。minute;
b1=p—>leave.hour;
b2=p-〉leave。minute;
Price=((b1—a1)*60+(b2-a2))*price;
if(Price〈1)
Price=1;
cout〈〈"\n该车应交费用为:"〈〈setprecision(2)〈<setiosflags(ios::fixed)<〈Price〈〈”元"〈<endl;
free(p);
}
int Arrive(SEQSTACKCAR * enter,LINKQUEUECAR *w)//车进入停车场
{
CARNODE * p;
QUEUENODE * t;
p=(CARNODE *)malloc(sizeof(CARNODE));
cout<<"请输入车牌号码(鄂C12345):”;
cin>〉p-〉number;
if(enter-〉top<maxnum)
{
enter->top++;
cout<<”\n车辆在停车场的第”<<enter—〉top<〈"个位置。”<<endl;
cout〈〈”请输入车辆到达的时间的时和分(用空格隔开):";
cin>>p—〉reach。hour〉〉p—〉reach.minute;
while(p->reach。hour<0||p—〉reach.hour>24||p—〉reach。minute<0||p—〉reach.minute〉60)
{
cout<<”时间输入有错,请重新输入:”;
cin〉〉p—〉reach.hour〉〉p—〉reach。minute;
}
enter->stack[enter—〉top]=p;
cout〈〈"车辆停放完毕!"<〈endl;
return ok;
}
else
{
cout〈〈"\n该车辆需在便道等待!\n"〈<flush;
t=(QUEUENODE *)malloc(sizeof(QUEUENODE));
t-〉data=p;
t—〉next=NULL;
w—〉rear-〉next=t;
w—>rear=t;
return ok;
}
}
void Leave(SEQSTACKCAR * enter,SEQSTACKCAR * temp,LINKQUEUECAR * w)//确定要离开的车所在的车道
{
int room;
CARNODE *p,* t;
QUEUENODE * q;
if (enter—〉top〉0)
{
while (1)
{
cout<<”\n请输入车所在停车场的位置:”;
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——;
}
print(p,room);
cout<〈”\n车辆已离开!"<〈endl;
system("pause");
if ((w—〉head!=w—〉rear)&&enter-〉top〈maxnum)
{
q=w->head—〉next;
t=q—>data;
enter—〉top++;
cout〈〈"\n便道的”〈〈t—〉number〈〈”号车进入停车场”〈〈enter->top<<”号位置."〈〈endl;
cout〈<”请输入现在的时间(时和分用空格隔开):”;
cin〉〉t—〉reach。hour〉>t—〉reach。minute;
while(t—〉reach.hour<0||t-〉reach.hour>24||t—>reach.minute〈0||t—>reach。minute〉60)
{
cout〈〈"时间输入有错,请重新输入:”;
cin〉〉t->reach。hour>>t->reach.minute;
}
w—〉head-〉next=q—〉next;
if(q==w—〉rear)
w—>rear=w—>head;
enter->stack[enter—>top]=t;
free(q);
}
}
else
{
cout<〈”停车场里没有车!"〈〈endl〈<flush;
system("pause");
}
}
int searchcar(SEQSTACKCAR * enter,LINKQUEUECAR * w)
{
char num[256]="”;
int pos=enter—〉top,flag=0;
QUEUENODE *p=NULL;
cout<<"请输入要查询的车牌号:”<〈endl;
cin>>num;
while(pos〉0)
{
if(!strcmp(enter—>stack[pos]—〉number,num))
{
flag=1;
break;
}
pos——;
}
if(flag)
{
cout〈〈”车位号 到达时间 车牌号\n";
if(pos<10)
cout<〈” ”〈〈”0”〈〈pos〈〈"\t\t”;
else
cout〈<" "〈〈pos〈<”\t\t";
if(enter—>stack[pos]—〉reach。hour〈10)
cout<〈"0"〈<enter-〉stack[pos]-〉reach.hour〈〈":”;
else
cout〈〈enter—〉stack[pos]—〉reach。hour〈<”:";
if(enter—>stack[pos]—〉reach.minute〈10)
cout〈〈"0"<<enter->stack[pos]—〉reach。minute;
else
cout<〈enter—〉stack[pos]—>reach。minute;
cout〈<" \t\t"〈〈enter-〉stack[pos]—〉number〈<endl;
system(”pause");
}
else
{
p=w—〉head—>next;
while(p)
{
if(!strcmp(p—〉data—〉number,num))
{
flag=1;
break;
}
p=p->next;
}
if(flag)
{
cout〈<”\n 车牌号 状态\n”;
cout〈<” "〈〈p—〉data-〉number〈<”\t\t等待中”<〈endl〈<endl;
system(”pause");
}
else
{
cout〈<”停车场内没有此车!”<〈endl;
system(”pause");
}
}
return flag;
}
void list1(SEQSTACKCAR * s)//显示停车场中的停车情况
{
int i;
if (s—〉top〉0)
{
cout〈<”\n停车场:"〈〈endl;
cout〈〈”车位号 到达时间 车牌号\n”;
for (i=1;i〈=s-〉top;i++)
{
if(i〈10)
cout〈〈" 0”〈〈i〈<”\t\t ”;
else
cout<<” ”〈<i〈<"\t\t ”;
if(s-〉stack[i]—>reach。hour〈10)
cout〈〈”0"〈〈s—>stack[i]—〉reach。hour〈<”:";
else
cout〈<s—〉stack[i]—〉reach.hour<〈”:”;
if(s—>stack[i]—>reach。minute<10)
cout〈<"0"〈〈s-〉stack[i]—〉reach。minute<〈"\t\t";
else
cout〈〈s-〉stack[i]-〉reach.minute〈〈”\t\t”;
cout<〈s->stack[i]—〉number〈〈endl;
}
cout〈<endl;
}
else
{
cout<<”\n停车场里没有车!”〈〈endl;
system("pause”);
}
}
void list2(LINKQUEUECAR * w)//显示正在等待进入停车场的车
{
QUEUENODE * p;
p=w->head—〉next;
if(w—>head!=w—〉rear)
{
cout<<”\n等待车辆的号码有:";
while(p!=NULL)
{
cout<〈p->data—〉number〈〈” ”;
p=p—〉next;
}
cout〈〈endl;
}
else
{
cout<<”\n便道里没有车!”〈<endl;
system("pause");
}
}
void list(SEQSTACKCAR s,LINKQUEUECAR w)//列表显示
{
int flag,tag;
flag=1;
while(flag)
{
system(”cls");
cout〈〈"**************************”〈〈endl;
cout〈〈"| 列表显示菜单 |”〈<endl;
cout〈〈”**************************"<〈endl;
cout〈<”| |”〈<endl;
cout<<"| 1.车场停车情况 |”<<endl;
cout〈〈”| 2.便道车辆等待情况 |”<<endl;
cout〈〈”| 3。返回主菜单 |”〈〈endl;
cout〈<”| |”〈〈endl;
cout〈〈"**************************"〈〈endl;
cout〈<”请输入你的选择:";
cin〉〉tag;
while(tag〈1||tag>3)
{
cout〈<”你的输入有错!请重新输入:”;
cin〉〉tag;
}
switch(tag)
{
case 1:
system("cls");
list1(&s);
system(”pause”);
break;
case 2:
system(”cls");
list2(&w);
system("pause”);
break;
case 3:
system(”cls");
flag=0;
break;
default:
break;
}
}
}
int instruct()//说明
{
rewind(stdin);
cout<〈” =====================欢迎阅读系统说明=========================”<〈endl;
cout〈<" || ||"<<endl;
cout〈〈” || 请仔细阅读以下说明: ||"〈〈endl;
cout〈〈” || ||”〈<endl;
cout<<” || 1、本系统设置车位数固定,车位数为2(便于操作); ||”〈<endl;
cout<〈” || 2、该停车场最低收费1元,小于1元均按1元收费; ||”〈〈endl;
cout〈<" || 3、时间输入:按24进制输入,时和分用空格隔开; ||"<<endl;
cout〈<” || 4、车牌输入:先输入一个省号简称和字母,后输入一串数字 ;||”〈<endl;
cout〈〈" || 5、车辆离开:当输入车位号时,再输入离开的时间; ||”<〈endl;
cout<<" || 车辆离开后,便道的第一辆车进入停车场; ||”<〈endl;
cout<〈" || 6、车辆停留时间最长为一天,驶离时间应大于驶入时间; ||”<〈endl;
cout〈〈" || ||"〈〈endl;
cout〈〈" =======================停车场,谢谢阅读=======================”〈〈endl;
return 0;
}
int main()
{
SEQSTACKCAR enter,temp;
LINKQUEUECAR wait;
int choice;
system(”color f0”);
stackpark(&enter);
stackpark(&temp);
queuehall(&wait);
while(1)
{
system(”cls");
cout<〈" ╭────────────╮ ”<〈endl;
cout〈〈” | 停车场模拟管理系统 | "<〈endl;
cout<<" | T1123—03— | ”<〈endl;
cout〈〈" | 2013。7。1 | ”〈〈endl;
cout〈〈”╰─────────────╯"〈〈endl;
cout〈<” =========================== "<<endl;
cout〈〈" ||*******功能菜单********|| "〈〈endl;
cout〈<" || || ”〈〈endl;
cout〈〈” || 1。车辆到达 || ”<〈endl;
cout<〈" || 2。车辆离开 || ”〈〈endl;
cout〈〈" || 3.列表显示 || ”〈<endl;
cout〈〈" || 4.系统帮助 || ”〈〈endl;
cout〈<” || 5。车辆查询 || ”〈〈endl;
cout〈<" || 0.退出系统 || "〈<endl;
cout<〈” || || ”〈〈endl;
cout〈〈” || 收费说明:0。5元/分 || ”〈〈endl;
cout〈<" || 竭诚为您服务! || ”<〈endl;
cout<<" || || ”〈<endl;
cout<〈" =========================== ”〈〈endl;
cout〈〈" 请选择操作:";
cin>>choice;
rewind(stdin);
while (choice<0||choice〉5)
{
cout<〈"你的输入有错,请重新输入:”;
cin>>choice;
}
switch(choice)
{
case 1:
system(”cls”);
Arrive(&enter,&wait);
system(”pause”);
break;
case 2:
system(”cls");
Leave(&enter,&temp,&wait);
break;
case 3:
system(”cls");
list(enter,wait);
break;
case 4:
system(”cls”);
instruct();
system("pause”);
break;
case 5:
system("cls");
searchcar(&enter,&wait);
break;
case 0:
system(”cls”);
cout〈<”谢谢使用本系统!"<<endl;
exit(0);
default:
break;
}
}
return 0;
}
参考文献:
[1] 谭浩强。C程序设计(第三版).清华大学出版社.
[2] 马春江,付勇智,孟繁军。数据结构与程序构建。清华大学出版社。
[3] 滕国文。数据结构课程设计。清华大学出版社.
指导教师意见
第 15 页 共 17 页
展开阅读全文