停车场管理系统(C语言)
1、问题描述
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排以便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场时,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
2、设想
该停车场管理系统由两个栈和两个队列实现,一个栈作为停车场,另一个栈作为临时停车点,便于让停车场内汽车离开,一个队列作为便道,另一个队列作为临时便道,便于让便道内汽车离开。
3、软件
使用的软件是Dev-C++,版本为5.11版本,部分版本可能会提示出错。
4、要求
(1)系统功能以菜单方式显示;
(2)车辆编号为字符型;
(3)设置屏幕字体颜色;
(4)单位时间收费值可以修改。
5、系统的构想
(1)该停车场管理系统分为一个总系统和1两个子系统,分别是停车场管理总系统、停车场管理员系统和停车场消费者系统;
(2)由停车场管理总系统可以进入两个子系统;
(3)停车场管理员系统功能
①查看停车场内车辆信息,输出该停车场所有车辆的车牌号、位序、进入时间和消费金额;
②查看停车场便道内车辆信息,输出该停车场便道内车辆的车牌号和位序;
③查找车辆的目前的信息,客户输入车牌号,可输出目前该车牌号在停车场内的所有信息(前 提:该停车场内存在客户输入的车牌号的车辆),否则输出该车牌号不存在;
④更改收费标准;
⑤返回停车场总系统;
⑥直接退出程序;
(4)停车场消费者系统功能
①查看停车场车辆数量,输出该停车场内共有多少辆车;
②查看便道的车辆数量,输出该停车场便道内共有多少量车
③进入停车场,客户进入该停车场停车(前提:停车场或便道有停车位),否则停车失败;
④离开停车场,客户输入车牌号码,相应车牌的车辆出停车场;
⑤离开停车场便道,客户输入车牌号码,相应车牌的车辆出便道;
⑥返回停车场总系统;
⑦直接退出程序。
6、运行结果
(1)首页界面
(2)停车场管理员系统界面
(3)停车场消费者系统
(4)输入选择错误的情况
(5)停车场管理系统部分功能
(6)退出系统
7、代码部分
#include
#include
#include
#include
#include
#define MAX1 5
#define MAX2 MAX1-1
typedef struct{
int TimeIn;
int TimeOut;
char ct[50];
char Lincense[10];
}Car;
typedef struct{
Car Stop[MAX1];
int top;
}Stopping;
typedef struct{
Car Pave[MAX2];
int count;
int front, rear;
}Pavement;
typedef struct{
Car Let[MAX1];
int top;
}Buffer;
typedef struct{
Car Wait[MAX2];
int count;
int front, rear;
}Waiting;
float price=1;
Stopping s;
Pavement p;
Buffer b;
Car c;
Waiting w;
char C[10];
void C_Play1();
void C_Play2();
void C_Play3();
void C_Play3_1();
void C_Play3_2();
void C_Play4();
void C_Play4_1();
void C_Play5();
void C_Play5_1();
void A_Play1();
void A_Play2();
void A_Play3();
void A_Play4();
void A_Play5();
void C_Play1()
{
int i=0,j=0;
i=s.top;
j=i+1;
if(j>0)
{
printf("\n\t该停车场内共有%d辆车\n",s.top+1);
}
else
{
printf("\n\t该停车场内无车辆");
}
}
void C_Play2()
{
int i=0;
i=p.count;
if(i>0)
{
printf("\n\t该停车场便道内共有%d辆车\n",i);
}
else if(i 0)
{
strcpy(s.Stop[++s.top].Lincense, b.Let[--b.top].Lincense);
printf("\n\t车牌号码为【%s】的汽车重新进入停车场,位置为第%d位",b.Let[b.top].Lincense,s.top+1);
}
while(s.top0)
{
i=p.front;
if(strcmp(p.Pave[i].Lincense,C)==0)
{
break;
}
printf("\n\t由于停车场便道后面的车辆需要出去,车牌号为【%s】的汽车暂时从停车场便道进入临时便道\n",p.Pave[p.front].Lincense);
strcpy(w.Wait[w.rear].Lincense, p.Pave[p.front].Lincense);
p.front++;
w.rear++;
w.count++;
p.count--;
}
printf("\n\t车牌号为【%s】的汽车从停车场便道上开走,不收取任何费用!\n\n",p.Pave[i].Lincense);
p.front++;
p.count--;
while(p.count>0)
{
printf("\n\t由于便道内的车辆需要出便道,车牌号为【%s】的汽车暂时从停车场便道进入临时便道\n",p.Pave[p.front].Lincense);
strcpy(w.Wait[w.rear].Lincense, p.Pave[p.front].Lincense);
p.front++;
w.rear++;
w.count++;
p.count--;
}
while(w.count>0)
{
printf("\n\t牌照为【%s】的汽车返回便道\n",w.Wait[w.front].Lincense);
strcpy(p.Pave[p.rear].Lincense, w.Wait[w.front].Lincense);
w.front++;
p.rear++;
w.count--;
p.count++;
}
}
void A_Play1()
{
int i=0;
i=s.top;
time_t t1;
long int t=time(&t1);
if(i>=0)
{
printf("\n\t停车场内车辆信息如下:\n");
printf("\t车牌号 位置 停放时间 目前要支付的停车费用");
for(i;i>=0;i--)
{
printf("\n\t%s 第%d位 %d分%d秒 %0.2f元\n\n",s.Stop[i].Lincense,i+1,(t-s.Stop[i].TimeIn)/60,(t-s.Stop[i].TimeIn)%60,price*(t-s.Stop[i].TimeIn)/60);
}
}
else if(i=1)
{
printf("\t%s 第%d位\n", p.Pave[i].Lincense, k++);
i++;
}
}
}
void A_Play3()
{
int i=0,j=0,k=0,f=0,g=0,h=0,z=0;
i=s.top;
f=p.count;
g=p.front;
h=p.rear;
z=(p.rear)-(p.front);
k=1;
time_t t1;
long int t=time(&t1);
if(s.top>=0||p.count>0)
{
printf("\t请输入要搜索的车牌号:");
fflush(stdin);
scanf("%s",&C);
}
if(s.top>=0)
{
while(i!=-1)
{
if(strcmp(s.Stop[i].Lincense, C)==0)
{
printf("\n\t此汽车在停车场内,信息如下:\n");
printf("\t车牌号 位置 停车费用 进入时间");
printf("\n\t%s 第%d个 %0.2f元 %s",s.Stop[i].Lincense,i+1,price*(t-s.Stop[i].TimeIn)/60,s.Stop[i].ct);
break;
}
i--;
}
}
if(p.count>0)
{
while(g!=h)
{
if(strcmp(p.Pave[g].Lincense,C)==0)
{
printf("\n\t此汽车在停车场便道上,信息如下:");
printf("\n\t车牌号 位置\n");
printf("\t%s 第%d位",p.Pave[g].Lincense,k);
break;
}
g++;
k++;
}
}
if(s.top







