停车场管理系统代码
要想把停车场管理系统做到完美,在编写程序代码时候就得注重细节,根据目前停车场智能化的不断提高,在技术人员的不断努力下改写历史,在每一次技术升级都要做到精确无误。
北京同业兴创停车场管理系统最重要的功能包括以下几方面:录入车辆信息,包含进入的时间、车牌、品牌;实现显示功能,即显示停车场中剩余位置的信息、车停时长;实现计费功能;实现保存功能,即将输入的车辆信息保存到指定的磁盘文件中;实现加载功能,即加载磁盘文件中保存的内容。
代码如下:
#include<iostream.h>
#include<malloc.h>
#define STACK_INIT_SIZE 3//存储空间初始分配量
#define PRICE 2
//^^^^^^^^^^^车辆信息^^^^^^^^^^^^^^^^^
struct Car//车辆信息,栈
{
int num;//车牌号
int time[2];//存放到达和离开的时间,time[0]代表到达时间,time[1]代表离开时间
};
struct Node//队列信息,便道
{
Car car;
Node * next;
};
//^^^^^^^^^^^^^停车场栈^^^^^^^^^^^^^
typedef struct StopStack//停车场栈
{
Car * base;
Car * top;
int stacksize;//当前已分配的存储空间,以元素为单位
}StopStack;
//^^^^^^^^^^^^便道队列^^^^^^^^^^^^^
typedef struct BianQueue//便道队列
{
Node * front;//队头指针
Node * rear;//队尾指针
}BianQueue;
//***********************便道初始化——构造空队列S*************************
int InitQueue(BianQueue &Q)
{
Q.front=(Node *)malloc(sizeof(Node));
if(!Q.front)
{
cout<<endl<<"OVERFLOW!";
return(0);
}
Q.front->next=NULL;//Q.front是一个空结点
Q.rear=Q.front;
return 1;
}
//*****************车离开时仍在便道上**************************
void DeBian(BianQueue &Q,Car &e)
{
Node *p,*q;
p=Q.front;
while (p->next->car.num!=e.num)
{
p=p->next;
}
q=p->next;
p->next=q->next;
if(q==Q.rear) Q.rear=p;//若删除的是队尾元素
e=q->car;
free(q);
}
//*****************车辆编号**************************
void StackBianhao(StopStack &S)
{
cout<<"该车在停车场的位置为:"<<S.top-S.base<<endl;
cout<<"======================"<<endl<<endl<<endl;
}
void QueueBianhao(BianQueue &Q)
{
int i=0;
Node *q;
q=Q.front;
while(q!=Q.rear)
{
q=q->next;
i++;
}
cout<<"该车在便道的位置为:"<<i<<endl;
cout<<"======================"<<endl<<endl<<endl;
}
//***********************出便道——出队*************************
//出队 车辆e开出停车场
int DeQueue(BianQueue &Q,Car &e)//若队列不为空,则删除Q的队头元素,用e返回其值,并返回OK否则返回ERROR
{
if(Q.front==Q.rear)//判空
{
cout<<endl<<"If it was deleted, it's empty !";
return 0;
}
Node *p;
p=Q.front->next;
e=p->car;//用e返回
Q.front->next=p->next;//修改头指针始终指向队首元素
if(Q.rear==p) Q.rear=Q.front;//特殊情况处理空队!!!!!!!!!!!!!!!!!!!!!!!!!!!
free (p);
return 1;
}
//***********************出停车场——出栈*************************
//出栈 车辆e开出停车场
int pop(StopStack &S,Car &e)
{
if(S.top==S.base)
{
return 0;
}//栈空-停车场空
S.top--;
e=*(S.top);
return 1;
}
//***********************进入便道——入队*************************
//入队 插入元素e为新的栈顶元素 车e进入便道
int EnQueue(BianQueue &Q,Car e)//插入元素e为Q的新的队尾元素
{
Node *p;
p=(Node *)malloc(sizeof(Node));
if(!Q.front)
{
cout<<endl<<"OVERFLOW!";
return(0);
}//分配失败
p->car=e;
p->next=NULL;//生成新结点
Q.rear->next=p;//插入队尾
Q.rear=p;//修改队尾指针指向队尾
return 1;
}
//***********************进入停车场——入栈*************************
//入栈 插入元素e为新的栈顶元素 车e进入停车场
void push(StopStack &S,Car e)
{
*(S.top)=e;
S.top++;
}
//***********************判断便道上是否有车*************************
bool EmptyQueue(BianQueue Q)
{
if(Q.front==Q.rear)
return true;
else
return false;
}
//***********************判断车离开时所在场所*************************
bool EmptyStack(StopStack S);
int LeaveWhere(Car e,StopStack S,BianQueue Q )
{
if(EmptyStack(S))//!!!!!!!!!!!!特别注意,这句话不能省略
return -1;
else
{
Car *p;
p=S.base;
while(p->num!=e.num && p!=S.top-1)//!!!!!!!!!!!!!特别注意,此处不是S.top而是S.top-1
p++;
if(p->num==e.num)//此时车在停车场,return 1
return 1;
else//此时车在便道或不存在
{
Node *q;
q=Q.front->next;
while(q->car.num!=e.num && q!=Q.rear)
q=q->next;
if(q->car.num==e.num)//此时车在便道,return 0
return 0;
else
return -1;//此车不存在
}
}
}//return 1:在停车场
//return 0:在便道
//return -1:还未停车
//***********************判断车车是否已存在*************************
bool EmptyStack(StopStack S);
bool CarAbsence(Car e,StopStack S,BianQueue Q )
{
if(EmptyStack(S))//!!!!!!!!!!!!特别注意,这句话不能省略
return false;
else
{
Car *p;
p=S.base;
while(p->num!=e.num && p!=S.top-1)//!!!!!!!!!!!!!特别注意,此处不是S.top而是S.top-1
p++;
if(p->num==e.num)//此时车在停车场,return 1
return true;
else//此时车在便道或不存在
{
Node *q;
q=Q.front;
while(q->car.num!=e.num && q!=Q.rear)
q=q->next;
if(q->car.num==e.num)//此时车在便道,return 0
return true;
else
return false;//此车不存在
}
}
}//return 1:车已在
//return 0:还未停车
//***********************判断停车场上是否有车*************************
bool EmptyStack(StopStack S)
{
if(S.top==S.base)
return true;
else
return false;
}
//***********************判断停车场是否满*************************
//判断是否满了
bool StackOver(StopStack &S)
{
if((S.top-S.base)>=S.stacksize)
{
cout<<"停车场已满,请驶进便道。"<<endl;
return true;
}
else
return false;
}
//***********************停车场初始化——构造空栈S*************************
int InitStack(StopStack &S)
{
S.base=(Car *)malloc(STACK_INIT_SIZE*sizeof(Car));
if(!S.base)
{ cout<<"OVERFLOW!"<<endl;
return (0);
}//if(!S.base) 存储分配失败
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return (1);
}
//***********************main函数******************************
int maxtime=0;//当前最终活动时间
void main()
{
int i,j,time;
char a;
Car e,e1,e2;
StopStack S1,S2;
BianQueue Q;
InitStack(S1);
InitStack(S2);
InitQueue(Q);//初始化
cout<<"^^^^^^^^^^^^^^停车场管理系统^^^^^^^^^^^^^^^^"<<endl;
cout<<"^ 1.输入 ^"<<endl;
cout<<"^ 0.退出 ^"<<endl;
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
cout<<"请选择(1或0)"<<endl;
cin>>i;
while(i!=0&&i!=1)
{
cout<<"对不起,你的选择有误,请重新选择!"<<endl;
cout<<"^^^^^^^^^^^^^^停车场管理系统^^^^^^^^^^^^^^^^"<<endl;
cout<<"^ 1.输入 ^"<<endl;
cout<<"^ 0.退出 ^"<<endl;
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
cout<<"请选择(1或0)"<<endl;
cin>>i;
}
while(i!=0)//选择1时
{
cout<<"请输入车辆信息(g代表到达,l代表离开):"<<endl;
cout<<"g或l 车牌号 时间"<<endl;
cin>>a>>e.num;
//-----------------------------------------------进入----------------------------------------- if(a=='g')//进入
{
cin>>e.time[0];
if(CarAbsence(e,S1,Q ))//该车已停
cout<<"对不起,该车已停,请重新输入!"<<endl;
else if(e.time[0]<maxtime)//若输入时间有误
cout<<"对不起,你输入的到达时间有误,请重新输入!"<<endl;
else if(!StackOver(S1))//如果停车场未满
{
push(S1,e);//e进入停车场
maxtime=e.time[0];//更新当前最终活动时间
StackBianhao(S1);//车辆在停车场的编号
}
else//停车场满,要停在便道上
{
EnQueue(Q,e);//进入便道
maxtime=e.time[0];//更新当前最终活动时间
QueueBianhao(Q);//车辆在便道的编号
}
}//if结束,进入完成
//-------------------------------------------------离开-------------------------------- else if(a=='l')//离开
{
cin>>e.time[1];
time=e.time[1];//另一辆车开进停车场的时间与该车离开停车场的时间相同,用time记录
if(LeaveWhere(e,S1,Q )==1)//如果离开时车在停车场
{
if(e.time[1]<maxtime)//若输入时间有误
cout<<"对不起,你输入的到达时间有误,请重新输入!"<<endl;
else
{
j=0;
e2=*(S1.top);
while(e2.num!=e.num)
{
pop(S1,e1);
e2=e1;
push(S2,e1);//把e前边的车暂时压入另一个栈中
j++;//记录暂时开出去的车的数量
}//while循环结束时,e2就是离开的车
maxtime=time;//更新当前最终活动时间
e2.time[1]=time;
cout<<"该车在停车场内停留的时间为:"<<e2.time[1]-e2.time[0]<<endl;
cout<<"应缴纳费用为:"<<(e2.time[1]-e2.time[0])*PRICE<<endl;
pop(S2,e);
j=j-1;
while(j!=0)
{
pop(S2,e);
push(S1,e);//再把暂时存在栈S2中的车按原来的次序压入栈S1中
j--;
}
if(!EmptyQueue(Q))//如果便道上有车
{
DeQueue(Q,e);
maxtime=e.time[0];//更新当前最终活动时间
e.time[0]=time;//另一辆车开进停车场的时间与该车离开停车场的时间相同
push(S1,e);//把停在便道上的头一辆车开进停车场
}
}
}
else if(LeaveWhere(e,S1,Q )==0)//如果离开时车在便道
{
if(e.time[1]<maxtime)//若输入时间有误
cout<<"对不起,你输入的到达时间有误,请重新输入!"<<endl;
else
{
DeBian(Q,e);
e.time[1]=time;
cout<<"该车在停车场内停留的时间为:"<<e.time[1]-e.time[0]<<endl;
cout<<"应缴纳费用为:"<<"0"<<endl;
}
}
else//如果该车不存在
cout<<"对不起,要离开的车辆不存在,请重新输入!"<<endl;
}//else结束,离开完成
//-----------------------------------------------输入有误,输入的不是g或l--------------------------------------------------
else
cout<<"对不起,您的输入有误,请重新输入!"<<endl;
//---------------------------------------------------------------------------------------- cout<<"^^^^^^^^^^^^^^停车场管理系统^^^^^^^^^^^^^^^^"<<endl;
cout<<"^ 1.输入 ^"<<endl;
cout<<"^ 0.退出 ^"<<endl;
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
cout<<"请选择(1或0)"<<endl;
cin>>i;
while(i!=0&&i!=1)
{
cout<<"对不起,你的选择有误,请重新选择!"<<endl;
cout<<"^^^^^^^^^^^^^^停车场管理系统^^^^^^^^^^^^^^^^"<<endl;
cout<<"^ 1.输入 ^"<<endl;
cout<<"^ 0.退出 ^"<<endl;
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<<endl;
cout<<"请选择(1或0)"<<endl;
cin>>i;
}
}//while循环结束
}//main()函数结束
❷ 用JAVA怎么编写停车场管理系统源代码
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/*********************************
* 停车场管理
* author zhang
*2013-12-13
********************************/
public class CarStopManager {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请入车牌号:");
String carno = sc.next();
CarStopManager carStopManager = new CarStopManager();
carStopManager.setCarNo(carno);//设置车牌号
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sdate = format.format(new Date());
System.out.println("当前时间(入场时间)是: "+sdate);
System.out.println("需要开出车场吗?yes/no:");
String yesno = sc.next();
if(yesno.equals("yes")){
String edate = format.format(new Date());
System.out.println("出场时间是: "+edate);
//计算方法
carManager(2, sdate, edate,carStopManager);
}
}
/**
* 计算方法
*/
public static void carManager(int type,String starTime,
String endTime,CarStopManager carStopManager){
if(type==1){//按月收费
System.out.println("如若没有缴纳月费请缴纳800元,如若缴纳将不再提示!");
}else{
/**
* 一般不会有停车几个月的吧?先不考虑停车几年或者几个月的
*/
String sDay = starTime.substring(8,10);//入场日期(天)
String sHour = starTime.substring(11, 13);//入场小时
String sMM = starTime.substring(14,16);//入场分钟
String eDay = starTime.substring(8,10);//出场日期(天)
String eHour = endTime.substring(11, 13);//出厂小时
String eMM = endTime.substring(14,16);//出厂分钟
float money = 0;//需缴纳的费用
int shour = Integer.parseInt(sHour);
int ehour = Integer.parseInt(eHour);
int smm = Integer.parseInt(sMM);
int emm = Integer.parseInt(eMM);
int rehour = 0;//停车几个小时
if(sDay.equals(eDay)){//同一天
//当天6点到20点之间
if((shour>=6 && shour<=20)){
if(ehour - shour<=6){//6个小时之内
rehour = (ehour - shour)*60+(emm - smm);//停车多少分钟
//需要缴纳的费用 前15分钟免费 以后每15分钟1.5元
money = (rehour/15-15)*1.5f;
}else{
int hour = ehour - shour -6;//6小时除外剩余小时数
rehour = 6*60+(emm - smm);//停车多少分钟
//前15分钟免费 以后每15分钟1.5元 超过6小时15分钟2元
money = ((rehour/15-15)*1.5f)+(hour*60/2);
}
}
}else{//跨天 20点到 6点之间
//todo
}
System.out.println("您的车牌号是:"+carStopManager.getCarNo()+";\n" +
"您此次停车花费的费用是: "+money+"元");
}
}
/**
* bean属性
*/
private String carNo;//车牌号
private String startTime;//入场时间
private String endTime;//出场时间
/**
* 无参构造
*/
public CarStopManager(){
super();
}
/**
* 有参数构造
* @param carNo
* @param startTime
* @param endTime
*/
public CarStopManager(String carNo, String startTime, String endTime) {
super();
this.carNo = carNo;
this.startTime = startTime;
this.endTime = endTime;
}
/**
* 设置get方法
* @return
*/
public String getCarNo() {
return carNo;
}
/**
* 设置set方法
* @param carNo
*/
public void setCarNo(String carNo) {
this.carNo = carNo;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
}