停车场模拟管理系统
来源:互联网 发布:dwg文件编辑软件 编辑:程序博客网 时间:2024/04/29 09:24
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
#define park_size 5
#define lan_size 2
#define size park_size+lan_size
typedef struct carlane //停车场进出栈
{
char carnum[6];
int car_locat;
}clane;
typedef struct ca_in
{
clane date;
int sum;
int top;
int base;
}cinfo;//停车场的栈结构
cinfo c_pk[park_size+1];
typedef struct car_in
{
clane date;
int sum;
int rear;
int front;
}c_info;//便道的队列结构
c_info c_la[lan_size+1];
void choseing(); //主选择界面
int inseting(cinfo p0[park_size+1],c_info p1[lan_size+1]); //初始化停车场和便道
void inst(); //打印前段说明
int display(cinfo p3[park_size+1],c_info p4[lan_size+1]); //打印车辆信息
int checking(cinfo p0[park_size+1]); //计算停车场中已用车位数
void addinfo(cinfo p0[park_size+1],c_info p1[lan_size+1]); //添加车辆信息
void outparking(cinfo p0[park_size+1],c_info p1[lan_size+1],int site); //汽车出停车场
int sumzhan(c_info p1[lan_size+1]); //求便道队列的长度
/***************************************************************/
int checking(cinfo p0[park_size+1]) //检查停车场可用空间 m 为已用空间
{
int m=0;
if(p0[0].top==p0[0].base)//栈空停车场空
{
m=0;
return m;
}
for(int i=1;i<=p0[0].top;i++)
{
if(p0[i].date.car_locat==0)
continue;
else
{
m++;
}
}
return m;
}
void addinfo(cinfo p0[park_size+1],c_info p1[lan_size+1]) //汽车进站操作
{
if(checking(p0)<park_size)
{
cinfo p2[park_size+1];
p2[0].top=p2[0].base=0;
cinfo p4;
printf("请输入进站车的车牌号:/n");
scanf("%s",p4.date.carnum);
p0[0].top++;
p0[p0[0].top].date.car_locat=p0[0].top;
strcpy(p0[p0[0].top].date.carnum,p4.date.carnum);
printf("车牌号为%s的车已进站。/n",p4.date.carnum);
p0[0].sum++;
}
else
if(sumzhan(p1)<lan_size) //便道上还有位置可用
{
cinfo p4;
printf("该停车场已满,请在便道等候。请输入车牌号:/n");
scanf("%s",p4.date.carnum);
strcpy(p1[p1[0].rear].date.carnum,p4.date.carnum);
p1[0].rear++;
p1[0].rear=p1[0].rear%(lan_size+1);
printf("车牌号为%s的车已进入便道。/n",p4.date.carnum);
p1[0].sum++;
}
else
{
printf("此停车场已无位置可用。/n");
printf("请另寻其他停车场。再见!!!");
}
}
void outparking(cinfo p0[park_size+1],c_info p1[lan_size+1],int site)
{
cinfo p2[park_size+1];
p2[0].base=p2[0].top=0;
for(;p0[0].top>site;p0[0].top--)//从栈顶向下一次出栈到site位置并复制到p2中
{
if(p0[p0[0].top].date.car_locat!=0)//当车位不空是表现出让路将其移到p2中
{
++p2[0].top;
strcpy(p2[p2[0].top].date.carnum,p0[p0[0].top].date.carnum);
printf("车牌号为%s的车出站让路。/n",p0[p0[0].top].date.carnum);
}
}
printf("车牌号为%s的车出站。/n 其余车辆进站。/n",p0[site].date.carnum);
for(;p2[0].top!=p2[0].base;p2[0].top--)
{
p0[p0[0].top].date.car_locat=p0[0].top;
strcpy(p0[p0[0].top].date.carnum,p2[p2[0].top].date.carnum);
printf("车牌号为%s的车进站。/n",p0[p0[0].top].date.carnum);
p0[0].top++;
}
while(p0[0].top<=park_size&&(p1[0].rear!=p1[0].front))
{
p0[p0[0].top].date.car_locat=p0[0].top;
strcpy(p0[p0[0].top].date.carnum,p1[p1[0].front].date.carnum);
printf("车牌号为%s的车进站。/n",p1[p1[0].front].date.carnum);
p1[0].front++;
p1[0].front=p1[0].front%(lan_size+1);
p0[0].top++;
p1[0].sum--;
}
p0[0].top--;
}
void inst() //打印前段说明
{
printf(" This is system for searching and controlling a parkint lot./n");
printf(" This parking lot has six place./n ");
printf(" Every site has its car ./n");
printf(" If the parking lot is full,others shuold be wait out of the parking lot/n");
printf(" When a car in the parking lot want go out,the car on the lane shuold/n");
printf(" give its place to the outing car./n");
printf(" /n本停车场共有%d个可用车位,其中停车场内车位%d个 场外便道车位%d个。/n",size,park_size,lan_size);
printf("/n");
}// inst
int inseting(cinfo p0[park_size+1],c_info p1[lan_size+1])
{
printf("本停车场有%d个场内车位,%d个便道车位。/n如果选择自己初始化添加请输入 1 /t快速添加输入 2/n",park_size,lan_size);
int choice1=0;
scanf("%d",&choice1);
switch(choice1)
{
case 1:
{
p0[0].base=0;
p0[0].top=0;
p1[0].front=p1[0].rear=0;
p0[0].sum=0;
p1[0].sum=0;
printf("现在对停车场进行初始化。如果结束,输入: 0 /n");
while(p0[0].top<park_size)
{
char num[6];
printf("请输入停在停车场的车牌号码:/n");
scanf("%s",num);
if(!strcmp(num,"0"))
{
printf("已初始化完毕。/n");
return OK;
}
p0[0].top++;
p0[p0[0].top].date.car_locat=p0[0].top;
strcpy(p0[p0[0].top].date.carnum,num);
}
printf("现在对便道进行初始化。如果结束,输入车牌号 0 /n");
int n=0;
while((p1[0].rear+1)%(lan_size+1)!=p1[0].front)
{
printf("请输入便道车牌号:/n");
char num[6];
scanf("%s",&num);
if(!strcmp(num,"0"))
{
printf("已初始化完毕。/n");
return OK;
}
strcpy(p1[p1[0].rear].date.carnum,num);
p1[p1[0].rear].date.car_locat=++n;
p1[0].rear=(++p1[0].rear)%(lan_size+1);
p1[0].sum++;
}
printf("已初始化完毕。/n");
return OK;
}
case 2:
{
strcpy(p0[1].date.carnum,"CF001");
p0[1].date.car_locat=1;
strcpy(p0[2].date.carnum,"CF002");
p0[2].date.car_locat=2;
strcpy(p0[3].date.carnum,"CF003");
p0[3].date.car_locat=3;
strcpy(p0[4].date.carnum,"CF004");
p0[4].date.car_locat=4;
strcpy(p0[5].date.carnum,"CF005");
p0[5].date.car_locat=5;
strcpy(p1[0].date.carnum,"CF006");
p1[0].date.car_locat=1;
strcpy(p1[1].date.carnum,"CF007");
p1[1].date.car_locat=2;
p0[0].top=park_size;
p0[0].base=0;
p1[0].rear=lan_size;
p1[0].front=0;
p0[0].sum=park_size;
p1[0].sum=lan_size;
printf("已初始化完毕。/n");
return OK;
}
default:return ERROR;
}
}
void choseing() // 打印主菜单
{
printf("/n");
printf("***********************************************/n");
printf("********* main menu *******/n");
printf("***********************************************/n");
printf("* 1: 汽车进停车场 */n");
printf("* */n");
printf("* 2: 汽车出停车场 */n");
printf("* */n");
printf("* 3: 初始化栈 */n");
printf("* */n");
printf("* 4: 查询位置信息 */n");
printf("* */n");
printf("* 0: 退出系统 */n");
printf("***********************************************/n");
}//choseing
int sumzhan(c_info p1[lan_size+1])//求队列的长度
{
int m=0;
int i=p1[0].front;
while(i!=p1[0].rear)
{
i++;
i=i%(lan_size+1);
m++;
}
return m;
}
int display(cinfo p3[park_size+1],c_info p4[lan_size+1]) //打印车辆信息
{
if(checking(p3)==0)
{
printf("该停车场处于空闲状态。/n");
}
else
{
printf("该停车场现有%d个可用车位。/n",park_size-checking(p3));
}
if((p4[0].rear+1)%(lan_size+1)==p4[0].front)
{
printf("便道处于已停满状态。/n");
}
else
{
printf("该便道现有%d个可用车位。/n",lan_size-sumzhan(p4));
}
if(p3[0].top!=p3[0].base)
{
printf("停车场内的车位信息为:/n");
for(int i=1;i<=p3[0].top;i++)
{
printf("车牌号为 %s,车位号位 %d。/n",p3[i].date.carnum,p3[i].date.car_locat);
}
}
else;
int i=p4[0].front;
if(i==p4[0].rear)
{
return OK;
}
int m=1;
printf("便道处的车位信息为:/n");
while(i!=p4[0].rear)
//for(int i=p4[0].front;i<p4[0].rear;i++)
{
printf("车牌号为 %s,车位号位 %d。/n",p4[i].date.carnum,m);
p4[i].date.car_locat=m;
m++;
i++;
i=i%(lan_size+1);
}
return OK;
}//display
void main()
{
inst();
printf("/n首次操作请务必先初始化。/n");
while(1)
{
choseing();
int chosen=0;
printf("请输入你选的功能项序号:/n");
fflush(stdin);
scanf("%d",&chosen);
switch(chosen)
{
case 1:
{
addinfo(c_pk,c_la);
break;
}
case 2:
{
printf("请输入要开走的车的车位号:/n");
int num;
scanf("%d",&num);
if(checking(c_pk)<num)
{
printf("你输入的车位号没有车。");
break;
}
outparking(c_pk,c_la,num);
break;
}
case 3:
{
inseting(c_pk,c_la);
break;
}
case 4:
{
display(c_pk,c_la);
break;
}
case 0:
{
return ;
}
default:
{
printf("您输入错误,请重新输入。/n");
break;
}
}
}
}
- 停车场模拟管理系统
- 模拟停车场管理系统
- 模拟停车场管理
- 停车场管理模拟程序
- 停车场管理模拟
- 停车场模拟管理问题
- 停车场管理系统
- 停车场管理系统
- 课程设计---停车场管理系统
- 停车场管理系统
- 停车场管理系统
- 停车场管理系统
- 停车场管理系统
- 停车场管理系统
- 停车场管理系统
- 停车场管理系统
- C 停车场管理系统
- 课程设计---停车场管理系统
- 告别09
- 新手上路~
- 成功的条件
- 笑口常开
- AIDL-AndRoid接口描述语言实现跨进程通讯
- 停车场模拟管理系统
- 网页设计中字体排版(大小、间距)
- java:读取文件、控制台显示
- weather
- 回顾自己
- 回顾自己
- 在线看电影,在线看视频运用p2p技术加快网速
- IP报头
- 课程设计3