1、 《数据结构课程设计》报告 专 业: 软件工程 班 级: T1123—03 学 号: 姓 名:XXX 课设题目:停车场模拟管理系统 指导教师: 马春江 成 绩: 2013—07—03 目 录 一、设计题目1 二、设计目的1 三、总体设计1 (一)问题描述1 (二)设计要求1 (三)数据结构1 四、详细设计2 (一)分析与实现2 (二)系统模块设计2 (三)界面设计3 五、设计结果与分析4 六、总结(收获和不足)5 (一)课设的不
2、足5 (二)课设的收获5 附录程序源码5 参考文献:16 指导教师意见16 一、设计题目 停车场模拟管理系统. 二、设计目的 利用所学的知识,模拟设计一个停车场管理系统。通过程序设计,了解停车场的工作情况以及是怎么实现停车的,模拟车辆的进入停车场、离开停车场的情况,和收费情况。 三、总体设计 (一)问题描述 假设停车场可以停放n辆车的狭长通道,而且只有一个入口出口,汽车进入停车场的停放按照先进先放的顺序,依次排满车道。当停车场已经停满时(已存放了n辆汽车),想进入停车场的车就只能在便道上等待,等到停车有车离开时,便道上的第一辆车进入停车场.当停车场内的某辆车要离开时,在它
3、后面的车必须离开让出一条道路来,待车开走后,让路的车依次进入停车场,车辆离开时,按时间缴纳费用。 (二)设计要求 用栈模拟停车场,用队列模拟停车场外面的等车便道,按照终端输入数据的方式进行模拟管理。输入1,表示车辆到达;输入2,表示车辆离开;输入3,表示列表显示停车场内外情况;输入4,表示系统帮助;输入5,表示查询车辆;输入0,表示退出程序。车辆进入停车时,要输入车牌号码和到达时间;车辆离开时,要输入停车场车位号和离开时间,并显示应收费额;车辆查询时,要输入车牌号码;系统帮助,则是一些关于本系统的操作介绍. (三)数据结构 本课程设计使用的数据结构有:顺序栈和链式队列。 四、详细设计
4、 (一)分析与实现 1、模拟停车场的车辆进出需要输入车辆的信息,比如车辆的车牌号码、到达时间、离开时间,因此,可以定义一个车辆信息结点类型和一个时间节点类型,在顺序栈和链式队列中定义结点类型为车辆信息结点类型。 2、车辆离开时,需要打印输出车辆的车位号、到达时间、离开时间以及应缴纳的费用。定义print()函数实现. 3、车辆到达时要输入车辆的信息,并以此存放在停车场内;没进入一辆车,要判断停车场(顺序栈)是否已经停满,若已满,则提示该车要在便道上等待;若未满,则进行进栈操作. 4、车辆的离开,要另外设计一个栈,当一辆汽车要离开时,在其后的车辆要给其让路,让路的汽车就暂时停放在这个栈
5、中。车辆离开后,要判断便道上是否有车辆在等待,若有则进行入栈操作,即将车辆的信息结点进行入栈操作,这时要输入当前时间,今儿进行出队操作,表示车辆已经离开便道进入停车场。 5、系统帮助则只需设计一个函数instruct(),将要说明的东西写进去,可以直接调用。 6、车辆的查询,既可以查询停车场内的车辆,也可以查询便道上等待的车辆,查询时要输入正确的车牌号码,并显示车辆的当前情况。 (二)系统模块设计 主函数 用户操作界面 车辆到达 车辆离开 列表显示 车辆查询 系统帮助 退出程序 (三)界面设计 1、主菜单界面 图 1 2、车辆到达界面
6、图 2 3、车辆离开界面 图 3 4、列表显示界面 图 4 列表显示菜单 图 5 停车场情况 图 6 便道等待情况 5、车辆查询界面 图 7 五、设计结果与分析 测试结果已达到我预期的结果,可以模拟实现车辆的进入、离开停车场,可以大体上让人了解到停车场的工作情况。 六、总结(收获和不足) (一)课设的不足 本次课程设计完成的系统,只能简单的模拟停车场的车辆进出、收费情况和查询功能,没有将进入停车场的车辆信息进行存盘保存.而且功能单一,有车离开时,还有可能要其他的车退出停车场让车(不够人性化);模拟的停车场只是一个狭长的通道,存放的车辆只能是一种类型的,即
7、占地面积是一样的;按道理停车场可以存放各种类型的车,各种车的收费标准也应该不一样,这都应该是要完善的. (二)课设的收获 历时四天,终于把数据结构课程设计做完了! 本次课设,我还是挑了比较简单的题目(停车场模拟管理系统)来做,在这个题目里,只用到了两个数据结构:顺序栈和链式队列。顺序栈模拟停车场,队列模拟便道.通过这次课设,确实对自己的水平提高了很多,至少再次熟悉了本学期所学的栈和队列的使用和应用.记得在刚开始的时候,看到课设指导书上面的题目,感觉自己什么都做不出来,所以迟迟不敢动手。当时间一天天逼近时,不能再拖了,就只能开工了.抱着试一试的心态,我参考着资料上面的指示,一步一步地做,居
8、然做出了一个简单的系统;最后通过请教XX同学,对系统做了些完善(虽然还不是很完善),在此对他表示感谢!
通过这次课设,我再次强烈的感受到:只要敢于尝试,很多我们自己认为做不到的事情都是可能做到的.勇于尝试,定有收获!
附录 程序源码
#include 〈iostream。h〉
#include 〈fstream.h>
#include 9、o{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 * 10、 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(L 11、INKQUEUECAR * 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〈<"请输入车辆离 12、开的时间(时和分用空格隔开):”;
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〈 number;
cout<〈"\n该车辆到达的时间为:”;
if(p—〉reach。hour<1 13、0)
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”〈 14、inute〈10)
cout<<"0"<〈p—>leave.minute〈〈endl;
else
cout〈〈p->leave.minute< 15、e〈〈”元"〈 16、
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;
ret 17、urn ok;
}
else
{
cout〈〈"\n该车辆需在便道等待!\n"〈 18、 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;
e 19、nter—>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;
20、
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-〉reac 21、h.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〈 22、 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——; 23、
}
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"〈 24、—〉reach.minute〈10)
cout〈〈"0"< 25、 break;
}
p=p->next;
}
if(flag)
{
cout〈<”\n 车牌号 状态\n”;
cout〈<” "〈〈p—〉data-〉number〈<”\t\t等待中”<〈endl〈 26、nt 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<<” ”〈reach。hour〈10)
cout〈〈”0"〈〈s—>stack[i]—〉reach。hour〈<”:";
else
cout〈 27、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〈 28、st2(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便道里没有车!”〈 29、QSTACKCAR s,LINKQUEUECAR w)//列表显示
{
int flag,tag;
flag=1;
while(flag)
{
system(”cls");
cout〈〈"**************************”〈〈endl;
cout〈〈"| 列表显示菜单 |”〈 30、
cout〈〈”| 2.便道车辆等待情况 |”< 31、ase 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<〈” ============ 32、欢迎阅读系统说明=========================”<〈endl;
cout〈<" || ||"< 33、本系统设置车位数固定,车位数为2(便于操作); ||”〈 34、后,便道的第一辆车进入停车场; ||”<〈endl;
cout<〈" || 6、车辆停留时间最长为一天,驶离时间应大于驶入时间; ||”<〈endl;
cout〈〈" || ||"〈〈endl;
cout〈〈" =======================停车场,谢谢阅读=======================”〈〈endl;
return 0;
}
int main()
{
SEQSTACKCAR ent 35、er,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〈〈" | 36、 2013。7。1 | ”〈〈endl;
cout〈〈”╰─────────────╯"〈〈endl;
cout〈<” =========================== "< 37、| ”〈 38、ut<〈" =========================== ”〈〈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 39、 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〈<”谢谢使用本系统!"<
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818