📄 tingchechang.rar.txt
字号:
}
Dequeue(q,x);//把最后一元素出队
Enqueue(u,x);//在入到新队
pop(s,y);
push(y,s);
for(sp=0;sp<qq;sp++)//把所有有元素从新队列进入原来的队列里面
{
Dequeue(u,x);
Enqueue(q,x);
}
//判断时间是否比上一辆车的时间晚
if(r.reach.hour>x.reach.hour||(r.reach.hour==x.reach.hour&&r.reach.min>=x.reach.min))
if(r.reach.hour>y.carreach.hour||(r.reach.hour==y.carreach.hour&&r.reach.min>=y.carreach.min))
if(r.reach.hour>w.carleave.hour||(r.reach.hour==w.carleave.hour&&r.reach.min>=w.carleave.min))
if(r.reach.hour>h.leave.hour||(r.reach.hour==h.leave.hour&&r.reach.min>=h.leave.min))
{
Enqueue(q,r);
break;
}
else
printf("\n进走道的时间应该比上一辆离开车库时间要晚");
else
printf("\n进走道的时间比上一辆离开走道时间要晚");
else
printf("这辆车辆不能比上一辆车进入车站时间早");
else
printf("这辆车辆不能比上一辆车进入车站时间早");
}
}
}
//进入停车场的函数
void jr(carsqstack &s,linkqueuecar &q,int t,int &qq,float &price1,float &price,carsqstack &p,linkqueuecar &u,time &money1,time &money2,carnode &r,carnode &h,carnode &w,carnode &he,carnode &we)
{
int s0=0,i;
printf("请输入车牌号码(例:桂A12345):");
while(1)
{
scanf("%s",&r.carnumber);
i=strlen(r.carnumber);
if(i>15)
printf("\n数据太长,输入数据无效,请重新新输入车牌号码(例:桂A12345):");
else
{
pdcp(s,q,p,u,r,s0,qq);
if(s0==0)break;
else
printf("\n车牌号不能相同,请重新新输入车牌号码(例:桂A12345): ");
}
}
if(s.top-s.base<t)//判断车站是否满了。
zk(s,r,price,money1,money2,w);
else
{
cjzd(q,r,price1,qq,s,u,money1,money2,h,w);
qq++;//走道上车的计数器
}
}
//如果没有在走道上停车的车辆的总费用
void zt(carsqstack &s,carsqstack &p,linkqueuecar &q,int &qq,int &z,float &price1,float &price,int t,int o,int hq,carnode &w)
{
int a,b,c,d;
float zw;
carnode w123;
//出入车库的车辆的各项数据
printf("\n离开的汽车的车牌好是%s",w.carnumber);
printf("\n该车到达的时间是%d:%d",w.carreach.hour,w.carreach.min);
printf("\n该车离开的时间是%d:%d",w.carleave.hour,w.carleave.min);
a=w.carreach.hour;
b=w.carreach.min;
c=w.carleave.hour;
d=w.carleave.min;
zw=((c-a)*60+(d-b))*price;
printf("\n该车需要付%2.2f元",zw);
for(o=0;o<hq;o++)
{
pop(p,w123);
push(w123,s);
}
}
//在走道停过的车辆离开车库的总费用
void tgzd(carsqstack &s,carsqstack &p,linkqueuecar &q,int &qq,int &z,float &price1,float &price,int t,int o,int hq,carnode &w)
{
int a,b,c,d,a1,b1,c1,d1;
carnode w123;
//出入车库的车辆的各项数据
printf("\n该车在走道等待过");
printf("\n离开的汽车的车牌好是%s",w.carnumber);
printf("\n该车到达的时间是%d:%d",w.carreach.hour,w.carreach.min);
printf("\n该车离开的时间是%d:%d",w.carleave.hour,w.carleave.min);
printf("\n该车到达走道的时间是%d:%d",w.reach.hour,w.reach.min);
printf("\n该车离开走道的时间是%d:%d",w.leave.hour,w.leave.min);
a=w.carreach.hour;
b=w.carreach.min;
c=w.carleave.hour;
d=w.carleave.min;
a1=w.reach.hour;
b1=w.reach.min;
c1=w.leave.hour;
d1=w.leave.min;
//在走道上停过的车,要付在走道上停车的钱和在车库里面停的钱
printf("\n该车需要付%2.2f元",((c-a)*60+(d-b))*price+((c1-a1)*60+(d1-b1))*price1);
hq=p.top-p.base;
for(o=0;o<hq;o++)
{
pop(p,w123);
push(w123,s);
}
}
//车库不满,走道上有车,走道上的车辆将会自动进入车库
void zdjz(carsqstack &s,carsqstack &p,linkqueuecar &q,int &qq,int &z,float &price1,float &price,int t,carnode &r,time &money2,time &money1,carnode &h,carnode &w)
{ carnode e,g;
Dequeue(q,e);
g=e;
pop(s,e);
push(e,s);
printf("\n车牌号码为%s的车子进入车库每分钟收费为%2.2f元",g.carnumber,price);
//实现小时必须大于等于0小于24,分钟在0与60之间
while(1)
{
sj1(g);
if(g.carreach.hour>w.carleave.hour||(g.carreach.hour==w.carleave.hour&&g.carreach.min>=w.carleave.min))
break;
else
printf("\n进站时间应该比上一辆离开车库时间要晚");
}
//进入停车场车库的时间等于离开停车场走道的时间
g.leave.hour=g.carreach.hour;
g.leave.min=g.carreach.min;
push(g,s);
qq--;//队列的计数器
}
//离开停车场的函数
void lcar(carsqstack &s,carsqstack &p,linkqueuecar &q,int &qq,int &z,float &price1,float &price,int t,time &money1,time &money2,carnode &r,carnode &h,carnode &w,carnode &he,carnode &we)
{
int i=0,n,o,hq,w5,w1;
if(s.top-s.base==0)//判断停车场车库是否有车,没有车的话,自动返回停车场管理系统。
printf("\t****WARN:停车场车库没有车辆可以离开,自动返回停车场管理系统\n");
else
{
printf("哪一位的车辆需要离开,请输入1到%d: ",s.top-s.base);
//防止越界
while(1)
{
pdok(w5,w1);
n=w5;
if(w1==0&&n>0&&n<=s.top-s.base)break;
else
printf("\n请输入车库车位1到%d位:",s.top-s.base);
}
hq=s.top-s.base-n;//把要离开车辆前面车辆的数字附值给h
for(o=0;o<hq;o++)
{
pop(s,w);
push(w,p);
}
pop(s,w);//把需要离开的那辆车出栈
printf("\t\t请输入汽车离开的时间\n");
//实现小时必须大于等于0小于24,分钟在0与60之间
while(1)
{
sj3(w);
if(w.carleave.hour>money1.hour||(w.carleave.hour==money1.hour&&w.carleave.min>=money1.min))
if(w.carleave.hour<money2.hour||(w.carleave.hour==money2.hour&&w.carleave.min<=money2.min))
if(w.carreach.hour<w.carleave.hour||(w.carreach.hour==w.carleave.hour&&w.carreach.min<=w.carleave.min))
if(w.carleave.hour>r.carreach.hour||(w.carleave.hour==r.carreach.hour&&w.carleave.min>=w.carreach.min))
if(w.carleave.hour>r.reach.hour||(w.carleave.hour==r.reach.hour&&w.carleave.min>=r.reach.min))
if(w.carleave.hour>h.leave.hour||(w.carleave.hour==h.leave.hour&&w.carleave.min>=h.leave.min))
if(w.carleave.hour>we.carleave.hour||(w.carleave.hour==we.carleave.hour&&w.carleave.min>=we.carleave.min))
{
we=w;
break;
}
else
printf("\n离开走道的时间要比上一辆离开走道的时间要晚");
else
printf("\n离开走道的时间要比上一辆离开车库的时间要晚");
else
printf("车辆离开的时间应该比刚进入的车辆的时间晚:\n");
else
printf("车辆离开的时间应该比刚进入的车辆的时间晚:\n");
else
printf("车辆离开的时间要比该车进来的时间要晚:\n");
else
printf("%d:%d将开始营业,%d:%d将停止营业,输入时间请在这个之间 :\n",money1.hour,money1.min,money2.hour,money2.min);
else
printf("%d:%d将开始营业,%d:%d将停止营业,输入时间请在这个之间 :\n",money1.hour,money1.min,money2.hour,money2.min);
}
if(w.reach.hour==0&&w.reach.min==0&&w.leave.hour==0&&w.leave.min==0)//判断是否在走道上停过
zt(s,p,q,qq,z,price1,price,t,o,hq,w);
else
tgzd(s,p,q,qq,z,price1,price,t,o,hq,w);
if(s.top-s.base<z&&q.front!=q.rear)//判断如果栈不满,队列不满的情况
zdjz(s,p,q,qq,z,price1,price,t,r,money2,money1,h,w);
}
}
//离开停车场走道的函数
void lzd(linkqueuecar &q,linkqueuecar &u,int &qq,float &price1,float &price,int t,carsqstack &s,time &money1,time &money2,carnode &r,carnode &h,carnode &w,carnode &he,carnode &we)
{
int n,nn,a,b,c,d,w5,w1;
carnode h1,h0;
if(qq==0)//qq是队列的计数器,判断队列是否为空
printf("\t***WARN:停车场走道没有车辆可以离开,自动返回停车场管理系统\n");
else
{
pop(s,h1);
push(h1,s);
printf("在走道上哪一位需要离开,请输入车辆1到%d位: ",qq);
//走道上有车的车位才能离开
while(1)
{
pdok(w5,w1);
n=w5;
if(w1==0&&n>0&&n<=qq)break;
else
printf("\n输入无效,请输入走道车位1到%d:",s.top-s.base);
}
for(nn=1;nn<n;nn++)
{
Dequeue(q,h);
Enqueue(u,h);
}
Dequeue(q,h);
qq--;
printf("请输入该车离开走道的时间:\n");
//实现小时必须大于等于0小于24,分钟在0与60之间
while(1)
{
sj4(h);
if(h.leave.hour>h1.carreach.hour||(h.leave.hour==h1.carreach.hour&&h.leave.min>=h1.carreach.min))
if(h.leave.hour>money1.hour||(h.leave.hour==money1.hour&&h.leave.min>=money1.min))
if(h.leave.hour<money2.hour||(h.leave.hour==money2.hour&&h.leave.min<=money2.min))
if(h.reach.hour<h.leave.hour||(h.reach.hour==h.leave.hour&&h.reach.min<=h.leave.min))
if(h.leave.hour>r.reach.hour||(h.leave.hour==r.reach.hour&&h.leave.min>=r.reach.min))
if(h.leave.hour>w.carleave.hour||(h.leave.hour==w.carleave.hour&&h.leave.min>=w.carleave.min))
if(h.leave.hour>he.leave.hour||(h.leave.hour==he.leave.hour&&h.leave.min>=he.leave.min))
{
he=h;
break;
}
else
printf("\n离开走道的时间要比上一辆离开走道的时间要晚");
else
printf("\n离开走道的时间要比上一辆离开车库的时间要晚");
else
printf("\n离开走道的时间要比最新进入车道的时间要晚");
else
printf("\n离开的时间应该比进入的时间要晚");
else
printf("%d:%d将开始营业,%d:%d将停止营业,输入时间请在这个之间 :\n",money1.hour,money1.min,money2.hour,money2.min);
else
printf("%d:%d将开始营业,%d:%d将停止营业,输入时间请在这个之间 :\n",money1.hour,money1.min,money2.hour,money2.min);
else
printf("\n离开走道的时间要比最新进入车道的时间要晚");
}
printf("\n离开的汽车的车牌好是%s",h.carnumber);
printf("\n该车到达的时间是%d:%d",h.reach.hour,h.reach.min);
printf("\n该车离开的时间是%d:%d",h.leave.hour,h.leave.min);
a=h.reach.hour;
b=h.reach.min;
c=h.leave.hour;
d=h.leave.min;
printf("\n该车需要付%2.2f元\n",((c-a)*60+(d-b))*price1);
for(nn=1;nn<n;nn++)
{
Dequeue(u,h0);
Enqueue(q,h0);
}
}
}
//查看停车场车库的函数
void seec(carsqstack &s,carsqstack &p)
{
int r;//r作为车库车位的计数器
carnode w;
if(s.top-s.base==0)//判断车库是否有车
printf("\n车库上没有任何车辆");
else
{
//让每一辆车都出栈,并输出它的信息,然后再把它压入一个新栈
for(r=s.top-s.base;r>0;r--)
{
pop(s,w);
printf("在车库%d位车牌是%s 进入车库的时间是%d:%d\n",r,w.carnumber,w.carreach.hour,w.carreach.min);
push(w,p);
}
//把每一辆车的信息从新栈压原来的栈
for(r=p.top-p.base;r>0;r--)
{
pop(p,w);
push(w,s);
}
}
}
//查看停车场走道上的信息的函数
void seezd(linkqueuecar &q,linkqueuecar &u,int &qq)
{
int i;
carnode h;
if(qq==0)//判断走道上有没有车
printf("\n走道上没有任何车辆");
else
{
//把停车场走道的车出队,输出它们的信息,再进入一个新队列
for(i=1;i<=qq;i++)
{
Dequeue(q,h);
printf("\n 在走道的%d位置上",i);
printf("车牌号为%s,进入走道的时间是%d:%d\n",h.carnumber,h.reach.hour,h.reach.min);
Enqueue(u,h);
}
//把新队列的信息在放到原来的队列里面
for(i=1;i<=qq;i++)
{
Dequeue(u,h);
Enqueue(q,h);
}
}
}
void prin()
{
printf("\n ******************************************************************");
printf("\n ****************欢迎您进入停车场管理系统!!!***********************");
printf("\n ******************************************************************");
}
//主函数
void main()
{
carsqstack s,p;
linkqueuecar q,u;
int x,z,qq=0,w5,w1;
float price,price1,zp;
char mima[20];
time money1,money2;
carnode r,w,we,h,he;
Initstack(s);
Initstack(p);
Initqueue(q);
Initqueue(u);
prin();
printf("\n \t\t请输入进入停车场管理系统的密码:(初始为AMD)");
while(1)
{
scanf("%s",&mima);
if(!strcmp(mima,"AMD"))
break;
else
printf("\n \t\t\tWARIN:密码错误!!!\n \t\t请输入进入停车场管理系统的密码:(初始为AMD)");
}
system("cls");
prin();
printf("\n 请输入停车场车库的车位有多少位:");
while(1)
{
pdok(w5,w1);
z=w5;
if(w1==0&&z<=10000&&z>0)
break;
else
printf("\n\t请输入不大于10000的正整数,请重新输入:");
}
printf("\n ********************请输入停车场的收费标准************************\n");
printf("\n 停车场车库的收费为每分钟多少元: ");
money(zp);
price=zp;
printf("\n 停车场走道的收费为每分钟多少元: ");
money(zp);
price1=zp;
printf(" \n\t营业开始时间为: ");
sj0(money1);
printf(" \n\t营业结束时间为:");
while(1)
{
sj0(money2);
if(money1.hour<money2.hour||(money1.hour==money2.hour&&money1.min<money2.min))
break;
else
printf("\n\t营业结束时间应该比营业开始时间晚,请重新输入:");
}
system("cls"); //清屏函数
printf("\n ********************************************************");
printf("\n ****停车场设置完毕,您可以开始使用停车场管理系统了!!****");
printf("\n ********************************************************\n");
//主菜单
printf("\n ******************************************************************");
printf("\n *** 欢迎您进入停车场管理系统!!! Ver5.0 ***");
printf("\n ******************************************************************\n");
while(1)
{
printf("\n\t1、进入停车场 2、离开车库 3、离开走道 4、查看车库 5、查看走道 6、退出\n");
printf("\n\t\t请选择你要实现的功能(请输入1到6进行选择):\n");
while(1)
{
pdok(w5,w1);
x=w5;
if(w1==0&&x>=1&&x<=6)
break;
else
printf("请输入1到7");
}
//函数选折
switch(x)
{
case 1:jr(s,q,z,qq,price1,price,p,u,money1,money2,r,h,w,he,we);break;//进入停车场
case 2:lcar(s,p,q,qq,z,price1,price,z,money1,money2,r,h,w,he,we);break;//离开停车场车库
case 3:lzd(q,u,qq,price1,price,z,s,money1,money2,r,h,w,he,we);break;//离开停车场走道
case 4:seec(s,p);break;//查看停车场车库的信息
case 5:seezd(q,u,qq);break;//查看停车场走道的信息
case 6:exit(0);break;//退出
default:break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -