Advertisement

停车场管理系统 php,C语言源码实现停车场管理系统

阅读量:

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

题目要求:

8b544cec3a0d160cb3dc8f6d7fe9b95d.png

最初是在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);

}

这就是整篇文章的所有内容。希望能为大家的学习带来帮助。我们希望能够得到更多的关注和支持。

全部评论 (0)

还没有任何评论哟~