计算机专业停车场管理系统课程设计报告.docx
- 文档编号:17053266
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:19
- 大小:98.57KB
计算机专业停车场管理系统课程设计报告.docx
《计算机专业停车场管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算机专业停车场管理系统课程设计报告.docx(19页珍藏版)》请在冰点文库上搜索。
计算机专业停车场管理系统课程设计报告
******学院
本科生课程设计报告书
题 目停车场管理系统
姓 名
学 号
学 院
专 业 计算机科学与技术
指导教师
完成日期:
2009-7-10
一.需求分析
明确规定:
汽车停车场共有n个车位,且只有一个门可供汽车进出,汽车按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端)若车场内己停满,后来的车在外边的便道等候,若车场内有车开走,则外边车由第一辆开始按顺序进入车场内;当车场内有车离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。
1、输入的形式和输入值的范围;
停入(in)汽车的车牌号码停入时间
离开(out)汽车停车位置
选择汽车停入或者离开(inorout)
输入停入停车场(in)的汽车车牌号码、停入的时间
输入停在停车场里离开(out)汽车的停车位置
2、输出的形式;
停入(in)汽车的车牌号码停入时间停入地点(1-n)
离开(out)汽车的车牌号码停留时间缴纳费用
3、程序所能达到的功能;
完成停车的进入(in)和离开(out)
4、测试数据
车场:
位置到达时间车牌号码
1112345
2223456
二.概要设计
为实现上述程序功能,需要两个抽象数据类型:
栈和队列。
1.栈的抽象数据类型定义为:
ADTStack
{
数据对象:
D={ai|aiElemSet,i=1,2,...,n,n0}
数据关系:
Rl={
基本操作:
InitStack(&S)
操作结果:
构造一个空的栈S。
Push(&S,e)
初始条件:
栈S已存在。
操作结果:
插入元素e为新的栈顶元素。
StackEmpty(S)
初始条件:
栈S已存在。
操作结果:
若栈S为空栈,则返回True,否则返回False。
Pop(&S)
初始条件:
栈S已存在且非空。
操作结果:
删除S的栈顶元素。
Find(S,count)
初始条件:
栈S已存在。
操作结果:
查找是否存在序号为count的元素。
Creat(number,time)
初始条件:
栈S已存在。
操作结果:
初始化栈顶元素e,并返回其值。
TemStack(&S,&Q,e,number)
初始条件:
栈S已存在。
操作结果:
队列Q已存在,返回e的值。
Print_Car((&S,&Q)
初始条件:
栈S已存在。
操作结果:
队列Q已存在,返回其值。
}ADTStack
2.队列的抽象数据类型定义为:
ADTQueue
{
数据对象:
D={ai|aiElemSet,i=1,2,...,n,n0}
数据关系:
Rl={
基本操作:
InitQueue(&Q)
操作结果:
构造一个空队列Q。
DestroyQueue(&Q)
初始条件:
队列Q已存在。
操作结果:
队列Q被销毁,不再存在。
EnQueue(&Q,e)
初始条件:
队列Q已存在。
操作结果:
把新的元素e插入队尾。
DeQueue(&Q)
初始条件:
队列Q已存在。
操作结果:
删除队列队头元素。
Empty_DeQueue(Q)
初始条件:
队列Q已存在。
操作结果:
若队列Q空队列,则返回True,否则返回False。
}ADTQueue
3.本程序包含三个模块
1)主程序模块
intmain(){
初始化;
接受命令;
处理命令;
输出信息;
退出。
2)栈单元模块实现栈的抽象数据类型;
3)队列单元模块实现队列的抽象数据类型;
各模块之间的调用关系如下:
三.详细设计
#include
#include
#include
#defineMAX2/*车库容量*/
#defineprice3/*每车每时刻费用*/
typedefstructnode
{
intnum;
intreachtime;
intleavetime;
}CarNode;/*车辆信息结点*/
typedefstructNODE
{
CarNode*stack[MAX+1];
inttop;
}SeqStackCar;/*模拟车站*/
typedefstructcar
{
CarNode*data;
structcar*next;
}QueueNode;
typedefstructNode
{
QueueNode*head;
QueueNode*rear;
}LinkQueueCar;/*模拟通道*/
/*--------------------------------------------------------------------------*/
voidInitStack(SeqStackCar*);/*初始化栈*/
intInitQueue(LinkQueueCar*);/*初始化便道*/
intArrival(SeqStackCar*,LinkQueueCar*);/*车辆到达*/
voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);/*车辆离开*/
voidList(SeqStackCar,LinkQueueCar);/*显示存车信息*/
voidPRINT(CarNode*p);
/*--------------------------------------------------------------------------*/
voidmain()
{
SeqStackCarEnter,Temp;
LinkQueueCarWait;
intch;
InitStack(&Enter);/*初始化车站*/
InitStack(&Temp);/*初始化车站*/
InitQueue(&Wait);/*初始化通道*/
主页面选择车辆进入、离开或车辆信息:
while
(1)
{
printf("\n\n\t\t\t1.车辆到达选择1");
printf("\n\n\t\t\t2.车辆离开选择2");
printf("\n\n\t\t\t3.车辆信息选择3");
printf("\n\n\t\t\t4.退出系统选择4");
printf("\n\n\t\t\t请选择:
");
while
(1)
{
scanf("%d",&ch);
printf("\n");
if(ch>=1&&ch<=4)break;
else
printf("\n\t\t\t错误!
请再次选择!
\n\n\t\t\t");
}
switch(ch)
{
case1:
Arrival(&Enter,&Wait);break;/*车辆到达*/
case2:
Leave(&Enter,&Temp,&Wait);break;/*车辆离开*/
case3:
List(Enter,Wait);break;/*列表打印信息*/
case4:
exit(0);/*退出主程序*/
default:
break;
}
}
}
/*----------------------------------------------------------------------*/
voidInitStack(SeqStackCar*s)/*初始化栈*/
{
inti;
s->top=0;
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;
}
intInitQueue(LinkQueueCar*Q)/*初始化便道*/
{
Q->head=(QueueNode*)malloc(sizeof(QueueNode));
if(Q->head!
=NULL)
{
Q->head->next=NULL;
Q->rear=Q->head;
return
(1);
}
else
return(-1);
}
汽车离开时收到的信息函数:
voidPRINT(CarNode*p)/*打印出站车的信息*/
{
intA1,A2;
printf("\n\t\t\t请输入车辆离开时间:
");
scanf("%d:
%d",&(p->leavetime));
printf("\n\t\t\t离开车辆车牌号:
%d",p->num);
printf("\n\n\t\t\t离开车辆到达时间:
%d:
%d",p->reachtime);
printf("\n\n\t\t\t离开车辆离开时间:
%d:
%d",p->leavetime);
A1=p->reachtime;
A2=p->leavetime;
printf("\n\n\t\t\t停车场费用:
%d",(A2-A1)*price);
free(p);
}
车辆到达进入停车场函数:
intArrival(SeqStackCar*Enter,LinkQueueCar*W)/*车辆到达*/
{
CarNode*p;
QueueNode*t;
p=(CarNode*)malloc(sizeof(CarNode));
flushall();
printf("\t\t\t请输入到达车辆车牌号:
");
scanf("%d",&(p->num));
if(Enter->top { Enter->top++; printf("\n\t\t\t该车辆在停车场的位置是: %d\n",Enter->top); printf("\n\t\t\t请输入该车辆到达时间: "); scanf("%d: %d",&(p->reachtime)); Enter->stack[Enter->top]=p; return (1); } else/*车场已满,车进便道*/ { printf("\n\t\t\t停车场已满该车辆需要在便道上等到! "); t=(QueueNode*)malloc(sizeof(QueueNode)); t->data=p; t->next=NULL; W->rear->next=t; W->rear=t; return (1); } } 车辆离开函数: voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)/*车辆离开*/ { inti,room; CarNode*p,*t; QueueNode*q; /*判断车场内是否有车*/ if(Enter->top>0) {while (1) {printf("\t\t\t停车场里停放的车辆总数: %d",Enter->top); printf("\n\n\t\t\t请输入要离开车辆的位置: "); scanf("%d",&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); /*判断通道上是否有车及车站是否已满*/ if((W->head! =W->rear)&&Enter->top { q=W->head->next; t=q->data; Enter->top++; printf("\n\n\t\t\t便道的%d号车进入车场第%d位置.",t->num,Enter->top); printf("\n\n\t\t\t请输入现在的时间: "); scanf("%d: %d",&(t->reachtime)); W->head->next=q->next; if(q==W->rear) W->rear=W->head; Enter->stack[Enter->top]=t; free(q); } else printf("\n\n\t\t\t便道里没有车.\n"); } else printf("\n\n\t\t\t车场里没有车.");/*没车*/ } 车辆信息显示函数: voidList1(SeqStackCar*S) { inti; if(S->top>0) { printf("\n\t\t\t车场: "); printf("\n\n\t\t\t位置到达时间车牌号\n"); for(i=1;i<=S->top;i++) { printf("%26d",i); printf("%6d",S->stack[i]->reachtime); printf("%10d",S->stack[i]->num); printf("\n"); } } else printf("\n\t\t\t车场里没有车"); } voidList2(LinkQueueCar*W)/*列表显示便道信息*/ {QueueNode*p; p=W->head->next; if(W->head! =W->rear)/*判断通道上是否有车*/ { printf("\n\t\t\t等待车辆的号码: "); while(p! =NULL) { printf("%-10d",p->data->num); p=p->next;} printf("\n");} else printf("\n\t\t\t便道里没有车."); } voidList(SeqStackCarS,LinkQueueCarW) { intflag,tag; flag=1; while(flag) { printf("\n\t\t\t请选择1|2|3: "); printf("\n\n\t\t\t1.车场\n\n\t\t\t2.便道\n\n\t\t\t3.返回\n\n\t\t\t"); while (1) { scanf("%d",&tag); if(tag>=1||tag<=3)break; elseprintf("\n\t\t\t请选择1|2|3: "); } switch(tag) { case1: List1(&S);break;/*列表显示车场信息*/ case2: List2(&W);break;/*列表显示便道信息*/ case3: flag=0;break; default: break; } } } 四.调试分析 1.对数据结构的知识熟悉掌握,熟练进行栈和队列的运用 2.语句书写错误或是运用不当 3.函数的使用定义 五、用户手册 1.本程序的运行环绕为XP下的仿真DOS系统,执行文件为kcsj.exe 2.进入演示程序后即显示文本方式的用户界面: 1.车辆到达选择1 2.车辆离开选择2 3.车辆信息选择3 4.退出系统选择4 请选择: 3.按照提示,输入字符进行操作,结束符为"回车符"。 4.接受其他命令后即执行相应运算和显示相应结果。 六.测试结果 七、附录源程序文件名清单 adt.h//定义实现单元 tcc.h//栈、队列实现单元 main.cpp//主程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机专业 停车场 管理 系统 课程设计 报告