资源描述
数据结构课程设计报告
项目名称:停车管理系统
安徽大学
计算机科学与技术学院
姓名:鉏飞祥
学号:E21414018
专业:软件工程
2016—6-28
1 。需求分析
1.1问题描述
停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序.
1.2基本要求
(1) 输入的形式和输入值的范围;
七位字符车牌号 空格 时间(12:30)
如:A123456 12:30
(2) 输出的形式;
车牌号 时间
如:A123456 12:30
(3) 程序所能达到的功能.
模拟车子排队和进出车库的情况,并且根据时间计费,随时显示当前车库车辆情况。
2。 概要设计
(1) 数据结构
每个汽车的基本元素:
struct car
{
char id[8];
int h;/*时*/
int m;/*分*/
struct car *next;
};
栈的基本元素:
structsqstack
{
struct car *base;
struct car *top;
intstacksize;
};
(2)程序模块
void intstack(structsqstack &S)/*构造栈*/
voidpush_stack(structsqstack &S,struct car *e)
/*e入栈*/
voidpop_stack(structsqstack &S,struct car *e)
/*出栈顶元素到e*/
void creat_q()/*创建队列*/
void push_q(struct car *p)/*车辆入队*/
struct car * pop_q()/*车辆出队*/
void come_in()/*车辆离开*/
void go_out()/*车辆进入*/
void interface()/*主菜单*/
(4) 各模块之间的调用关系以及算法设计
Interface
输入:
1
2
3
0
Intstack push—stack
Creat_q push—q
Come-in
Go_out
Pop_stack pop_q
Print
Return 0
3。 详细设计
流程图及模块调用如下:
开始
创建队列,栈
结束程序
主菜单
0
22
3
输出车库车辆
21
车辆离开
车辆进入
是否在栈中
进入队列
栈是否满
是
否
进入栈
否
是否在队列
是
元素出列
显示费用
否
找不到
4。 测试与分析
主界面如下:
车库中假设最多停三辆车,加入进入四辆车abcd,则d需要在便道排队:
此时若b车开走,显示费用信息,则在便道的d车进入车库:
若此时有车进入,则继续在便道排队
:
5。 附录
源程序清单:
#include〈stdio。h>
#include<stdlib。h>
#include<malloc。h〉
#include<string。h〉
#define MAX 3 /*宏定义车库最大车辆*/
struct car
{
char id[8];
int h;/*时*/
int m;/*分*/
struct car *next;
};
int n=0;/*当前车库内的车辆数*/
int m=0;/*当前便道的车辆数*/
struct car *p1;
structsqstack
{
struct car *base;
struct car *top;
intstacksize;
};
structsqstack S1,S2;
voidintstack(structsqstack &S)
{
S。base=(struct car *)malloc(MAX*sizeof(struct car));
S。top=S。base;
S。stacksize=MAX;
}
voidpush_stack(structsqstack &S,struct car *e)
{
strcpy(S。top—〉id,e—>id);
S。top-〉h=e-〉h;
S.top—〉m=e—〉m;
S.top++;
}
voidpop_stack(structsqstack &S,struct car *e)
{
S。top-—;
strcpy(e—〉id,S。top—〉id);
e-〉h=S.top—〉h;
e-〉m=S。top—〉m;
}
voidcreat_q()
{
p1=(struct car *)malloc(sizeof(struct car));
p1—〉next=NULL;
}
voidpush_q(struct car *p)
{
struct car *p2;
p2=p1;
while(p2—>next!=NULL)
{
p2=p2—〉next;
}
p2—>next=p;
p—〉next=NULL;
}
struct car * pop_q()
{
struct car *p;
p=p1->next;
p1—〉next=p1—〉next—〉next;
return p;
}
voidcome_in()
{
void interface();
printf("请输入7位车辆车牌号和进入时间\n例如:\nA123456 12:30\n");
if(n==MAX)
{
struct car *p;
p=(struct car*)malloc(sizeof(struct car));
scanf("%s",p—〉id);
scanf(”%d:%d”,&p—〉h,&p—〉m);
push_q(p);
m++;
}
else
{
struct car *p;
p=(struct car*)malloc(sizeof(struct car));
scanf("%s”,p-〉id);
scanf("%d:%d”,&p->h,&p->m);
push_stack(S1,p);
n++;
}
interface();
}
voidgo_out()
{
struct car* pop_q();
void interface();
printf("请输入7位车牌号和离开时间\n”);
char b[8];
int h1;
int m1;
scanf("%s",b);
scanf(”%d:%d”,&h1,&m1);
inti;
intbiaozhi=0;
for(i=0;i〈n;i++)
{
if(strcmp(b,(S1。base+i)-〉id)==0)
{
printf(”%s 已离开\n计费信息:\n进入时间%d:%d,离开时间%d:%d,(每分钟1元)\n”,b,(S1。base+i)—>h,(S1.base+i)-〉m,h1,m1);
printf(”费用为:%d元\n”,(60*(h1—(S1。base+i)->h)+m1—(S1。base+i)—〉m)*1);
int j;
for(j=0;j〈n-i;j++)
{
struct car *p2;
p2=(struct car *)malloc(sizeof(struct car));
pop_stack(S1,p2);
push_stack(S2,p2);
}
struct car *pp;
pop_stack(S2,pp);
for(j=1;j〈n—i;j++)
{
pop_stack(S2,pp);
push_stack(S1,pp);
printf(”222\n");
}
n—-;
biaozhi=1;
if(p1-〉next!=NULL) /*若便道有车,则便道的车进入车库*/
{
struct car *ppp;
ppp=pop_q();
push_stack(S1,ppp);
n++;
}
break;
}
}
if(biaozhi==0)
{
struct car *p,*pp;
pp=p1;
while(pp—〉next!=NULL)
{
p=pp;
pp=pp—>next;
if(strcmp(b,pp-〉id)==0)
{
printf(”%s 已离开\n",b);
printf(”%s 已离开\n计费信息:\n进入时间%d:%d,离开时间%d:%d,(每分钟1元)\n”,b,pp->h,pp—〉m,h1,m1);
printf(”费用为:%d元\n",(60*(h1-pp->h)+m1—pp—>m)*1);
p-〉next=pp->next;
m——;
biaozhi=1;
break;
}
}
}
if(biaozhi==0)
printf(”找不到%s\n”,b);
interface();
}
void print()
{
voidpush_stack(structsqstackS,struct car *e);
voidpop_stack(structsqstackS,struct car *e);
void interface();
if(n==0)
printf("没有车辆\n”);
else
{
printf("**车库现有车辆信息:\n");
inti;
for(i=0;i<n;i++)
printf(” %s %d:%d\n",(S1.base+i)—〉id,(S1。base+i)-〉h,(S1。base+i)—>m);
struct car *p;
p=p1;
if(p—>next==NULL)
printf("**便道无车辆\n”);
else
{
printf("**便道现有车辆信息:\n”);
while(p—〉next!=NULL)
{
p=p—〉next;
printf(” %s %d:%d\n",p->id,p-〉h,p—〉m);
}
}
}
interface();
}
void interface()
{
inti;
printf(” 请输入操作指令\n\n 1:汽车开入\n 2:车辆离开\n 3:显示当前车辆信息\n 0:结束程序\n*******************\n");
scanf(”%d",&i);
switch(i)
{
case 0:return ;break;
case 1:come_in();break;
case 2:go_out();break;
case 3:print();break;
};
}
int main()
{
system("color a0"); //可以写成 red 调出颜色组
system(”title 车库管理系统”); //设置cmd窗口标题
printf(” ****************欢迎使用停车管理系统*********************\n\n");
system("date /T”);
system(”TIME /T”);
creat_q();
intstack(S1);
intstack(S2);
interface();
return 0;
}
6. 用户使用手册
欢迎使用车辆管理系统.
输入1,表示车辆进入
输入七位车牌号和进入时间,如:
A123789 12:30
输入2,表示车辆离开
输入离开车牌号和时间
输入3,表示显示车库信息
输入0,结束程序
谢谢使用!
8
鉏飞祥E21414018
展开阅读全文