停车场管理系统 php,C语言源码实现停车场管理系统
本例实践内容为C语言停车场管理系统提供了一个具体的实现方案,并向大家展示该系统的基本功能与运行逻辑。为了方便学习者更好地理解这一系统的工作原理,请查看以下的具体说明。
题目要求:

最初是在Codeblocks环境中使用C语言进行编码。遇到使用指针传递参数时出现的问题后,并引入了与
C兼容的输入输出及文件操作相关的库头文件。最终编写的代码呈现出接近于
C语言的特点。
main.cpp
#include
#include
#include
#include
#include
#include
#include
#define N 100
using namespace std;
typedef struct
{
char num[8];//车牌号
long int time_in;
int pos;//车辆的状态,0表示停在便道中,1表示停在停车场
} vehicle; //定义车辆类型
typedef struct
{
vehicle veh[N];
int top;
} SqStack; //用栈表示停车场
typedef struct LNode
{
vehicle veh;
struct LNode *next;
} 使用单链表(LinkList)表示为:// 单链表用于表示路径或连接方式
void Load(FILE *,SqStack *,LinkList *);
void ShowMenu(int );
int MakeChoice(int ,int );
void Parking(SqStack *,LinkList *);
void Back(SqStack *);
void EnterPkl(SqStack *,LinkList *);
void LeavePath(LinkList *);
void View(SqStack *,LinkList *);
void Write_and_Quit(FILE *,SqStack *,LinkList *);
int main()
{
SqStack *pkl;
LinkList *path;
FILE *fp;
pkl=(SqStack *)malloc(sizeof(SqStack));
path=(LinkList *)malloc(sizeof(LinkList));
fp=fopen("Parking_lot.txt","r+");
if(fp==NULL)
{
printf("数据加载失败!按任意键退出程序");
getch();
return 0;
}
Load(fp,pkl,path);
while(1)
{
system("cls");
ShowMenu(pkl->top);
switch(MakeChoice(1,6))
{
case 1:
system("cls");
Parking(pkl,path);
break;
case 2:
system("cls");
Back(pkl);
break;
case 3:
system("cls");
EnterPkl(pkl,path);
break;
case 4:
system("cls");
LeavePath(path);
break;
case 5:
system("cls");
View(pkl,path);
break;
default:
system("cls");
Write_and_Quit(fp,pkl,path);
return 0;
}
}
return 0;
}
function.cpp
#include
#include
#include
#include
#include
#include
#include
#define N 100
using namespace std;
typedef struct
{
char num[8];//车牌号
long int time_in;
int pos;//车辆的状态,0表示停在便道中,1表示停在停车场
} vehicle; //定义车辆类型
typedef struct
{
vehicle veh[N];
int top;
} SqStack; //用栈表示停车场
typedef struct LNode
{
vehicle veh;
struct LNode *next;
} LinkList; //用单链表表示便道
void Load(FILE * fp,SqStack * pkl,LinkList * path)
{
pkl->top=-1;
path->next=NULL;
LinkList *p;
char num[8];
long int time_in;
int pos;
while(fscanf(fp,"%s %ld %d\n",num,&time_in,&pos)!=EOF)
{
if(pos==0)//该车辆在便道中
{
//尾插法建立单链表
p=(LinkList *)malloc(sizeof(LinkList));
strcpy(p->veh.num,num);
p->veh.time_in=time_in;
p->veh.pos=pos;
path->next=p;
path=p;
}
else//该车辆在停车场中
{
++pkl->top;
strcpy(pkl->veh[pkl->top].num,num);
pkl->veh[pkl->top].time_in=time_in;
pkl->veh[pkl->top].pos=pos;
}
}
path->next=NULL;
}
void ShowMenu(int n)
{
printf("一个简单的停车场管理系统\n");
if(n+1==N)
printf("停车场已满\n");
else
printf("当前停车场共有%03d辆车\n",n+1);
printf("说明:停车场每小时收费5元\n");
printf("1.停车**\n");
printf("2.取车**\n");
printf("3.便道车辆进入停车场**\n");
printf("4.离开便道**\n");
printf("5.查看车辆**\n");
printf("6.退出**\n");
}
int MakeChoice(int m,int n)
{
int judge;
printf("请输入%d~%d\n",m,n);
scanf("%d",&judge);
while(judgen)//确保输入的是1~n
{
printf("输入不合法,请输入%d~%d\n",m,n);
flush函数调用;若不执行此语句,则会引发函数无限循环的行为。
scanf("%d",&judge);
}
return judge;
}
void Parking(SqStack *pkl,LinkList *path)
{
LinkList *r;
printf("请输入车牌号:");
if(pkl->top
{
fflush(stdin);
scanf("%8s",pkl->veh[++pkl->top].num);
time(&(pkl->veh[pkl->top].time_in));
pkl->veh[pkl->top].pos=1;
printf("您的车辆已停至%2d号车位\n",pkl->top);
}
else
{
fflush(stdin);
r=(LinkList *)malloc(sizeof(LinkList));
scanf("%8s",r->veh.num);
printf("停车场已满,您要暂时停放在便道中吗?\n");
printf("1.确定 2.取消\n");
if(MakeChoice(1,2)==1)
{
while(path->next!=NULL)
path=path->next;
r->veh.time_in=0;
r->veh.pos=0;
path->next=r;
r->next=NULL;
printf("您的车辆已停放到便道中\n");
}
else
free(r);
}
printf("按任意键返回主菜单");
getch();
return;
}
void Back(SqStack *pkl)
{
int n,i=0;
long int time_out;
double hours;
vehicle t_pkl[N];
printf("请输入您的车辆所在的车位(目前存在一个小问题,当前面车辆离开后当前停车位减少1):");
n=MakeChoice(0,pkl->top);
printf("%2d上的车辆车牌号为%s,您确定要取走该车辆吗?\n",n,pkl->veh[n].num);
printf("1.确定 2.取消\n");
if(MakeChoice(1,2)==1)
{
time(&time_out);
hours=(time_out-pkl->veh[n].time_in)/3600.0;
printf("本次停车共计%lf小时,请问您是否已准备好收费%lf元?按任意键继续确认付款。\n",hours,hours*5);
getch();
for(i=0; pkl->top>=n; --pkl->top,++i) //把第n辆到第pkl->top辆车移到t_pkl
t_pkl[i]=pkl->veh[pkl->top];
//此时pkl->top指向第n-1辆车
for(i-=2; i>=0; --i) //把第n+1辆到第pkl->top辆车移回pkl
pkl->veh[++pkl->top]=t_pkl[i];
printf("支付成功!\n");
printf("取车成功,按任意键返回主菜单");
getch();
return;
}
else
{
printf("按任意键返回主菜单");
getch();
return;
}
}
void EnterPkl(SqStack *pkl,LinkList *path)
{
if(pkl->top==N-1)
printf("停车场已满!");
else
{
请问您是否打算将便道中第一辆车上牌号为%8s的车停放在停车场?
printf("1.确定 2.取消\n");
if(MakeChoice(1,2)==1)
{
pkl->veh[++pkl->top]=path->next->veh;
time(&pkl->veh[pkl->top].time_in);
path->next=path->next->next;
printf("已停入停车场\n");
}
}
printf("按任意键返回主菜单");
getch();
return;
}
void LeavePath(LinkList *path)
{
int i=0,n;
LinkList *q;
printf("请输入要离开便道的车辆的位序:");
scanf("%d",&n);
while(i
{
++i;
赋值给变量q的是path变量。为了获取当前节点的上一节点信息:首先通过寻址操作确定目标位置。若寻址结果位于链表末尾,则需将该上一节点的指针字段设置为null。
path=path->next;
}
if(path!=NULL)
{
printf("您确定便道中第%03d辆车(车牌号:%8s)离开便道吗?\n",n,path->veh.num);
printf("1.确定 2.取消\n");
if(MakeChoice(1,2)==1)
{
if(path->next!=NULL)//确定离开并且不是便道中最后一辆车
{
q=path->next;
path->next=q->next;
free(q);
printf("第%03d辆车已离开便道\n",n);
}
else//确定离开并且是便道中最后一辆车
{
printf("第%03d辆车已离开便道\n",n);
q->next=NULL;
free(path);
}
}
}
else
printf("没有找到第%03d辆车\n",n);
printf("按任意键返回主菜单");
getch();
return;
}
void View(SqStack *pkl,LinkList *path)
{
int i;
long int time_out;
double hours;
time(&time_out);
printf("停车场共有%03d辆车:\n",pkl->top+1);
for(i=0; i<=pkl->top; ++i)
{
hours=(time_out-pkl->veh[i].time_in)/3600.0;
printf("车位:%2d 车牌号:%8s 停车时长:%lf 应缴费用:%lf\n",i,pkl->veh[i].num,hours,hours*5);
}
printf("便道车辆:\n");
if(path->next==NULL)
printf("无\n");
while(path->next!=NULL)
{
path=path->next;
printf("车牌号:%s\n",path->veh.num);
}
printf("按任意键返回主菜单");
getch();
return;
}
void Write_and_Quit(FILE *fp,SqStack *pkl,LinkList *path)
{
rewind(fp);
LinkList *pre=path,*p=path->next;
for(; pkl->top>-1; --pkl->top)
The fprintf function writes formatted data to the specified file pointer. The format string, field width, and precision specifications are enclosed in parentheses: (s,ld,$d). The arguments passed include the vehicle number, time in seconds, and position: (pkl→veh[pkl→top].num,pkl→veh[pkl→top].time_in,pkl→veh[pkl→top].pos).
while(p!=NULL)
{
free(pre);
fprintf(fp,"%s %ld %d\n",p->veh.num,p->veh.time_in,p->veh.pos);
pre=p;
p=pre->next;
}
free(pre);
free(pkl);
fclose(fp);
}
这就是整篇文章的所有内容。希望能为大家的学习带来帮助。我们希望能够得到更多的关注和支持。
