停车场管理系统——北华航天工业学院实训

目录

前言

一、停车场的主要功能

二、主要步骤

1.上班

2.车辆入库

3.车辆出库

4.查询 

 5.统计

6. 帮我找车

7.基础信息维护 

8.下班 

三、总结 


前言

为了巩固学生的C++、C语言、数据结构的相关内容,从而进行编写停车场的管理系统。综合锻炼学生的编程能力和合作能力,成为学生们在入职之前的第一个合作小项目。这是我们学院为我们实训所给出的一个实训项目。这是由我和我的一个同组搭档共同完成的。我放在这里希望可以帮助到大家!

一、停车场的主要功能

1 上班

2 车辆入库

3 车辆驶离

4.查询

5.统计

6.帮我找车

7.基础数据维护

8.下班

二、主要步骤

1.上班

        此功能是对于停车记录表、等待队列、停车区域表、停车位状态信息、停车场各区域间间隔文件进行文件读取。

void readFile_record(SqList &L)
{							
	ifstream  in("./停车记录表.txt",ios::in);
	if(!in)
	{
		cout<<"文件打开失败!"<<endl;
		return;
	}
	int i=0;
	cout<<"停车记录表:"<<endl;
	cout<< setw(10) << std::right <<"入场日期"<<"   "
		<< setw(10) << std::right <<"入场时间"<<" "
		<< setw(10) << std::right <<"车牌号"<<"  "
		<< setw(10) << std::right <<"所停车位"<<"  "
		<< setw(10) << std::right <<"离场日期"<<"  "
		<< setw(10) << std::right <<"离开场时间"<<"  "
		<< setw(10) << std::right <<"停车费"<<"   "
		<< setw(10) << std::right <<"记录状态(0入场 1出场)"<<endl;
	while(in>>L.elem[i].date_in>>L.elem[i].time_in>>
		  L.elem[i].license_car>>L.elem[i].area_car>>
		  L.elem[i].date_out>>L.elem[i].time_out>>
		  L.elem[i].money>>L.elem[i].state_car)
			{
		  cout	<< setw(10) << std::right <<L.elem[i].date_in<< "  "
		  		<< setw(10) << std::right <<L.elem[i].time_in<< "  "
				<< setw(10) << std::right  <<L.elem[i].license_car<<"  "
				<< setw(10) << std::right  <<L.elem[i].area_car<<"  "
				<< setw(10) << std::right  <<L.elem[i].date_out<<"  "
				<< setw(10) << std::right  <<L.elem[i].time_out<<"  "
				<< setw(10) << std::right  <<L.elem[i].money<<"  "
				<< setw(10) << std::right  <<L.elem[i].state_car<<"  "
				<<endl;
	      i++;
			}
	L.length=i;
	in.close();
}
void readArea(Parking park[])
{
	//停车区域表 
	ifstream  inArea("./停车区域.txt",ios::in);      
	if(!inArea)                                			
	{
		cout<<"文件打开失败!"<<endl;
		return ;
	}
	cout<<"停车区域:"<<endl;
	int i=0;
	while(inArea>>park[i].name)
	{
		cout<< setw(9) << std::right <<park[i].name<<endl;
	    i++;
	}
	inArea.close();
	//停车状态表 
	ifstream  inState("./停车状态表.txt",ios::in);
	if(!inState)                                
 	{
		cout<<"文件打开失败!"<<endl;
		return;
	}
	cout<<"停车状态表:"<<endl;
	for(int i=0;i<10;i++)
	{
		park[i].sum=0;
		for(int j=0;j<10;j++)
		{
			park[i].space[j].area_space[0]=park[i].name;
			park[i].space[j].area_space[1]='0';
			park[i].space[j].area_space[2]=((j+1)/10)+'0';
			park[i].space[j].area_space[3]=(j+1)%10+'0';
			inState>>park[i].space[j].license_space;
			cout<< setw(9) << std::left <<park[i].space[j].license_space<< "  ";
			if(park[i].space[j].license_space[0]=='0')
			{
				park[i].space[j].state_space=0;
			}
			else
			{
				park[i].space[j].state_space=1;
				park[i].sum++;
			}
		}
		cout<<endl;
	}
	inState.close();
}
void readGraph(AMGraph &G)
{
	VerTexType v1[20],v2[20];
	int i,j,k;
	ArcType w[20];
	G.vexnum=10;
	G.arcnum=12;
	ifstream inArea("./停车区域.txt",ios::in);
	if(!inArea)
	{
		cout<<"文件打开失败!"<<endl;
		return;
	}
	for(i=0;i<G.vexnum;++i)
	{
		inArea>>G.vexs[i];
	}
	for(i=0;i<G.vexnum;++i)
	{
		for(j=0;j<G.vexnum;++j)
		{
			G.arcs[i][j]=MaxInt;
		}
	}
	inArea.close();
	ifstream inGraph("./各区域间距离表.txt",ios::in);
	if(!inGraph)
	{
		cout<<"文件打开失败!"<<endl;
		return;
	}
	for(k=0;k<G.arcnum;++k)
	{
		inGraph>>v1[k]>>v2[k]>>w[k];
		i=LocateVex(G,v1[k]); j=LocateVex(G,v2[k]);
		G.arcs[i][j]=w[k];
		G.arcs[j][i]=G.arcs[i][j];
	}
	for(int i=0;i<G.vexnum;i++)
	{
		cout<<G.vexs[i]<<"    ";
		for(int j=0;j<G.vexnum;j++)
		{
			if(G.arcs[i][j]==MaxInt)
				cout<<setw(6)<<std::left<<0;
			else cout<<setw(6)<<std::left<<G.arcs[i][j];
		}
		cout<<endl;
	}
	inGraph.close();
}

2.车辆入库

输入车辆的车牌号,并且判断输入的车牌号的合法性,同时对停车场目前的状态进行查询(有车,无车)。

若有空车位,将空车位分配给该车辆,记录车辆的入库时间和停车位(用到自动获取时间的结构体),入库操作完成。若无空车位,将该车辆加入到等待队列中,等停车场中出现空间车位时,按顺序序从队伍中进入停车场。

void enterList(SqList &L,Parking park[],LinkQueue &Q)	车辆入库 
{				
	Car car;
	time_t tt;
	struct tm *t;
	cout<<"输入您爱车的车牌号(前两位字母,后五位数字):"<<endl;
	cin>>car.license_car;
	//判断车牌号方法
	if(strlen(car.license_car)!=7){
		cout<<"车牌号长度不合法!"<<endl;
		return;
	}
 	if(isalpha(car.license_car[0])==0||isalpha(car.license_car[1])==0){
		cout<<"车牌号前两位不是字母!"<<endl;
		return;
	}
	for(int i=2;i<7;i++){
		if(isdigit(car.license_car[i])==0){
			cout<<"车牌号不后五位不是数字!"<<endl;
			cout<<"请从新输入!"<<endl;
			return;
		}
	}
	for(int i=0;i<10;i++)
	{
		for(int j=0;j<10;j++)
		{
			if(strcmp(car.license_car,park[i].space[j].license_space)==0)
			{
				cout<<"车牌号重复!"<<endl;
				return;
			}
		}
	}
	//获取时间信息
	time(&tt);					
	t=localtime(&tt);
	int year=t->tm_year+1900;
	int mon=t->tm_mon+1;
	int day=t->tm_mday;
	car.date_in=year*10000+mon*100+day;
	car.time_in=t->tm_hour*10000+t->tm_min*100+t->tm_sec;
	car.date_out=0;
	car.time_out=0;
	car.money=0;
	//找车位
	for(int i=0;i<10;i++)
	{
		for(int j=0;j<10;j++)
		{
			if(park[i].space[j].state_space==0)
			{
				park[i].space[j].state_space=1;
				park[i].sum++;
				strcpy(park[i].space[j].license_space,car.license_car);
				car.state_car=0;
				strcpy(car.area_car,park[i].space[j].area_space);
				L.elem[L.length]=car;
				L.length++;
				cout<<"停车成功!"<<endl;
				return;
			}
		}
	}
	QNode *p;
	p=Q.front->next;
	while(p)
	{
		if(strcmp(car.license_car,p->date.license_car)==0)
		{
			cout<<"车牌号重复!   已在等待队列中!"<<endl;
			return;
		}
		p=p->next;
	}
	EnQueue(Q,car);
	cout<<"停车场已满,进入等待队列!"<<endl;
}

3.车辆出库

输入车牌号,并且判断输入车牌号的合法性将指定车牌号的汽车出库,记录下离开的时间和停车费,一边统计中使用。 

void outList(SqList &L,Parking park[],LinkQueue &Q,int &charge)	车辆出库
{
	int o=0;
	int p=1;//定义有无车的一个标志  1:没查到  0:查到
	Car car_in;
	char icense[10];
	int m=0,n=0;
	time_t tt;
	struct tm *t;
    time_t tt1;
    struct tm *t1;
	cout<<"输入您爱车的车牌号(前两位字母,后五位数字):"<<endl;
	cin>>icense;
	//判断车牌号方法
	if(strlen(icense)!=7)
	{
		cout<<"车牌号长度不合法!"<<endl;
		return;
	}
 	if(isalpha(icense[0])==0||isalpha(icense[1])==0)
	 {
		cout<<"车牌号前两位不是字母!"<<endl;
		return;
	}
	for(int i=2;i<7;i++)
	{
		if(isdigit(icense[i])==0)
		{
			cout<<"车牌号不后五位不是数字!"<<endl;
			cout<<"请从新输入!"<<endl;
			return;
		}
	}
	for(int i=L.length-1;i>=0;i--)
	{
		if(strcmp(L.elem[i].license_car,icense)==0)
		{
			p=0;
			time(&tt);
			t=localtime(&tt);
			int year=t->tm_year+1900;
			int mon=t->tm_mon+1;
			int day=t->tm_mday;
			L.elem[i].date_out=year*10000+mon*100+day;
			L.elem[i].time_out=t->tm_hour*10000+t->tm_min*100+t->tm_sec;
			L.elem[i].state_car=1; 
			if(((day-L.elem[i].date_in%100)*24+t->tm_hour-L.elem[i].time_in/10000)<=1)
			{
				o=L.elem[i].money=0;
			}
			else
			{
				L.elem[i].money=((day-L.elem[i].date_in%100)*24+t->tm_hour-L.elem[i].time_in/10000)*charge;
				o=L.elem[i].money;
			}
			break;
		}
	}
	if(p==1){
		cout<<"该车不在停车场内!"<<endl;
		return;
	}
	for(int i=0;i<10;i++)
	{
		for(int j=0;j<10;j++)
		{
			if(strcmp(icense,park[i].space[j].license_space)==0)
			{
				park[i].space[j].state_space=0;
				park[i].sum--;
				strcpy(park[i].space[j].license_space,"0");
				m=i;
				n=j;
			}
		}
	}
	cout<<"出库成功!"<<endl;
	cout<<"需要交纳 "<<o<<" RMB^.^"<<endl;
	if(Q.front!=Q.rear)
	{
		DeQueue(Q,car_in);
		time(&tt1);
		t1=localtime(&tt1);
		int year=t->tm_year+1900;
		int mon=t->tm_mon+1;
		int day=t->tm_mday;
		car_in.date_in=year*10000+mon*100+day;
		car_in.time_in=t->tm_hour*10000+t->tm_min*100+t->tm_sec;
		car_in.date_out=0;
		car_in.time_out=0;
		car_in.money=0;
		park[m].space[n].state_space==1;
		park[m].sum++;
		strcpy(park[m].space[n].license_space,car_in.license_car);
		car_in.state_car=0;
		strcpy(car_in.area_car,park[m].space[n].area_space);
		L.elem[L.length]=car_in;
		L.length++;
		cout<<"等待队列的车停车成功!"<<endl;
	}
	else{
		cout<<"等待队列无车!"<<endl;
		system("pause");
		return;
	}
}

4.查询 

查询主要包括:查询车辆状态、查询停车场状态、查询所有车辆信息。

        1>车辆状态的查询:输入车牌号查询到该车辆的状态。(等候、已入场和已离开)

        2>停车场状态的查询

1)查询当前停车场使用状况:输入停车场区域编号输出该区域的车位总数、空余车位、当前等待队列中的车辆数。

2)查询指定车位当前状态:输入车位编号,判断该车位是否有车。

        3>显示所有信息的主要功能:输出停车记录表、停车信息表、等待队列。

void CarState(SqList &L,LinkQueue &Q)					//查询车辆状态 
{
	char c[10];
	int flog=0;
	cout<<"请输入查询的车牌号:";
	cin>>c;
	if(strlen(c)!=7)
	{
		cout<<"车牌号长度不合法!"<<endl;
		return;
	}
 	if(isalpha(c[0])==0||isalpha(c[1])==0)
	 {
		cout<<"车牌号前两位不是字母!"<<endl;
		return;
	}
	for(int i=2;i<7;i++)
	{
		if(isdigit(c[i])==0)
		{
			cout<<"车牌号不后五位不是数字!"<<endl;
			cout<<"请从新输入!"<<endl;
			return;
		}
	}
	for(int i=L.length-1;i>=0;i--)
	{
		if(strcmp(L.elem[i].license_car,c)==0)
		{	
			flog=1;
			if(L.elem[i].state_car==0)
				cout<<"该车已经入库!"<<endl;
			else if(L.elem[i].state_car==1)
			{
				cout<<"该车已经出库!"<<endl;
				break;
			}	
			else
				cout<<"该车处在等待队列!"<<endl;
		}
	}
	if(flog==0)
		cout<<"没有该车牌号的车辆"<<endl;
}
void ParkingState(Parking park[],LinkQueue &Q)					//查询停车场状态
{
	char c;
	int flag=0;
	cout<<"请输入查询的停车场区域编号:";
	cin>>c;
	for(int i=0;i<10;i++)
		if(c==park[i].name)
		{	
			flag=1;
			cout<<"该区域车位总数:10"<<endl;;
			cout<<"当前空余车位数:"<<10-park[i].sum<<endl;
			cout<<"等待队列车数:"<<Q.length<<endl;
		}
	if(flag==0)
		cout<<"没有该区域"<<endl;	
}
void SpaceState(Parking park[])							//查询车位状态 	
{
	char c[6]; 
	cout<<"请输入要查询的车位编号:"<<endl;
	cin>>c;
	if(strlen(c)!=4)
	{
		cout<<"车位长度不合法"<<endl;
		system("pause");
		return;
	}
	if(isalpha(c[0])==0)
	{
		cout<<"车位号不合法"<<endl;
		system("pause");
		return;
	}
	for(int i=1;i<4;i++)
	{
		if(isdigit(c[i])==0)
		{
			cout<<"车位号不合法"<<endl;
			system("pause");
			return;
		}
	}
	for(int i=0;i<10;i++)
		if(park[i].name==c[0])
			for(int j=0;j<10;j++)
				{
				if(strcmp(park[i].space[j].area_space,c)==0)
					{
					if(park[i].space[j].state_space==0)
						cout<<"该车位为空车位!"<<endl;
					else
						cout<<"该车位有车!"<<endl;
					}
				}
}
void Show(SqList &L,Parking park[])						//显示所有信息 
{
	cout<<"停车信息表:"<<endl;
	cout<< setw(10) << std::right <<"入场日期"<<"   "
		<< setw(10) << std::right <<"入场时间"<<" "
		<< setw(10) << std::right <<"车牌号"<<"  "
		<< setw(10) << std::right <<"所停车位"<<"  "
		<< setw(10) << std::right <<"离场日期"<<"  "
		<< setw(10) << std::right <<"离开场时间"<<"  "
		<< setw(10) << std::right <<"停车费"<<"   "
		<< setw(10) << std::right <<"记录状态(0入场 1出场)"<<endl;
	for(int i=0;i<L.length;i++)
	{
		cout	<< setw(10) << std::right <<L.elem[i].date_in<< "  "
		  		<< setw(10) << std::right <<L.elem[i].time_in<< " "
				<< setw(10) << std::right  <<L.elem[i].license_car<<" "
				<< setw(10) << std::right  <<L.elem[i].area_car<<" "
				<< setw(10) << std::right  <<L.elem[i].date_out<<" "
				<< setw(10) << std::right  <<L.elem[i].time_out<<" "
				<< setw(10) << std::right  <<L.elem[i].money<<" "
				<< setw(10) << std::right  <<L.elem[i].state_car<<" "
				<<endl;
	}
	cout<<"停车记录表:"<<endl;
	for(int i=0;i<10;i++)
	{
		for(int j=0;j<10;j++)
		{
			cout<<setw(9)<<std::right<<park[i].space[j].license_space<< "  ";
		}
		cout<<endl;
	}
}

 5.统计

统计:当天收入、当月收入、高峰期。

        1>当天收入:输入车牌号,判断是否合法。用自动获取时间的结构体,%或/去获得时间的年、月、日。再根据定义的每小时停车费计算该车停车费,在计算当天收入

        2>当月收入:输入车牌号,判断是否合法。用自动获取时间的结构体,%或/去获得时间的年、月、日。再根据定义的每小时停车费计算该车停车费,在计算当天收入。在累加当月的日收入。在按费用大到小排序。

        3>高峰期:在最近一天中,记录下不同时间段入库车辆的综合,输出入库车辆最多的时间段。(本次实验我们定义了6个时间段)


void dayMoney(SqList L)							//统计天收入
{
	time_t tt;
	struct tm *t;
	time(&tt);					
	t=localtime(&tt);
	int day=t->tm_mday;             //今天的日期
	int totalMoney=0;               //当日停车费总计
	int totalCar=0;                 //当日共停了多少辆车
	int leaveCar=0;                 //当日离开了多少辆车
	int nowCar=0;                   //当日当前的停车场称量总数
	for(int i=0;i<L.length;i++)
	{
		if(L.elem[i].date_in%100==day)
		{
			totalCar++;
		}
		if(L.elem[i].date_out%100==day)
		{
			leaveCar++;
			totalMoney=totalMoney+L.elem[i].money;
		}
	}
	nowCar=totalCar-leaveCar;
	cout<<"停车费总计:"<<totalMoney<<" RMB"<<endl;
	cout<<"共停 "<<totalCar<<" 辆车"<<endl;
	cout<<"离开 "<<leaveCar<<" 辆车"<<endl;
	cout<<"现在剩余 "<<nowCar<<" 辆车"<<endl;
}
void monthMoney(SqList L)							//统计月收入 
{
	int m;//月份中介
	int n;//停车费中介
	time_t tt;
	struct tm *t;
	time(&tt);
	t=localtime(&tt);
	int month=t->tm_mon;            //今天的月份
	int totalMM[12][2];             //当月停车费总计
	for(int i=0;i<12;i++)
	{
        totalMM[i][0]=i+1;
        totalMM[i][1]=0;
	}
	for(int i=0;i<L.length;i++)
	{
		for(int j=0;j<12;j++){
			if(L.elem[i].date_out%10000/100==(j+1)){   //若某一辆车的出场月份=(1——12)月份的一个
				totalMM[j][1]=totalMM[j][1]+L.elem[i].money;
			}
			continue;
		}
	}
	for(int i=0;i<12-1;i++)
	{
		for(int j=0;j<12-i-1;j++)
		{
			if(totalMM[j][1]<totalMM[j+1][1]){
				//月份交换
				m=totalMM[j][0];
				totalMM[j][0]=totalMM[j+1][0];
				totalMM[j+1][0]=m;
				//停车费交换
				n=totalMM[j][1];
				totalMM[j][1]=totalMM[j+1][1];
				totalMM[j+1][1]=n;
			}
		}
	}
	cout<<"停车场总账单:"<<endl;
	cout<< setw(10) << std::right <<"月份"<<"        "<<"总停车费用"<<endl;
	for(int i=0;i<12;i++)
	{
		for(int j=0;j<2;j++)
		{
			cout<< setw(10) << std::right <<totalMM[i][j]<<"  ";
		}
		cout<<endl;
	}
}
void fastigiumCar(SqList L)						//停车高峰期 
{				
	int b=0;
	int max=0;
    int a[6]={0,0,0,0,0,0};
	for(int i=0;i<L.length;i++){
		if(((L.elem[i].time_in/10000)>=06)&&((L.elem[i].time_in/10000)<10))
		{
			a[0]++;
		}
		else if(((L.elem[i].time_in/10000)>=10)&&((L.elem[i].time_in/10000)<14))
		{

			a[1]++;
		}
		else if(((L.elem[i].time_in/10000)>=14)&&((L.elem[i].time_in/10000)<18))
		{
			a[2]++;
		}
		else if(((L.elem[i].time_in/10000)>=18)&&((L.elem[i].time_in/10000)<22))
		{
			a[3]++;
		}
		else if(((L.elem[i].time_in/10000)>=22)&&((L.elem[i].time_in/10000)<24))
		{
			a[4]++;
		}
		else{
			a[5]++;
		}
	}
	for(int i=0;i<6;i++)
	{
		if(max<a[i]){
			max=a[i];
			b=i+1;
		}
	}
	cout<<"第一时段:06--10点;"<<endl;
	cout<<"第二时段:10--14点;"<<endl;
	cout<<"第三时段:14--18点;"<<endl;
	cout<<"第四时段:18--22点;"<<endl;
	cout<<"第五时段:22--24点;"<<endl;
	cout<<"第六时段:00--06点;"<<endl;
	cout<<"停车高峰期为第"<<b<<"个时段 "<<"高峰期车辆数为: "<<max<<" 辆车"<<endl;
}

6. 帮我找车

按照迪杰斯特拉的算法,寻找输入的自己所在位置到输入的车牌号的最短路径。

int LocateVex(AMGraph G,VerTexType v)					//找到顶点的下标 
{
	for(int i=0;i<G.vexnum;i++)
	{
		if(G.vexs[i]==v)
		{
			return i;
		}
	}
}
void ShortestPath_DIJ(AMGraph G,DIJ dij[],int v0)		//迪杰斯特拉算法找最短路径 
{
	float n=G.vexnum;
	int v,min,w;
	for(v=0;v<n;v++)
	{
		dij[v].S=false;
		dij[v].D=G.arcs[v0][v];
		if(dij[v].D<MaxInt)
		{
			dij[v].Path=v0;
		}
		else{
			dij[v].Path=-1;
		}
	}
	dij[v0].S=true;
	dij[v0].D=0;
	for(int i=0;i<n;i++)
	{
		min=MaxInt;
		for(w=0;w<n;w++)
			if(!dij[w].S&&dij[w].D<min)
			{
				v=w;min=dij[w].D;
			}
		dij[v].S=true;
		for(w=0;w<n;w++)
			if(!dij[w].S&&(dij[v].D+G.arcs[v][w]<dij[w].D))
			{
				dij[w].D=dij[v].D+G.arcs[v][w];
				dij[w].Path=v;
			}
	}
}
void ShowPath(AMGraph G,DIJ dij[],int v0,int v1)			//显示最短路径
{
	stack<VerTexType>s;
	int i=0;
	double distance;  //距离
	distance=dij[v1].D;
	while(v1!=v0)
	{
		s.push(G.vexs[v1]);
		v1=dij[v1].Path;
		i++;
	}
	s.push(G.vexs[v0]);
	for(int j=0;j<=i;j++)
	{
		cout<<"->"<<s.top();
		s.pop();
	}
	cout<<"       "<<distance;
}
void CarSearch(Parking park[],AMGraph G,DIJ dij[])			//帮我找车 
{	
	char c;
	int v0,v1,flag=0;
	char license[8];
	cout<<"请输入您当前所在停车区域:";
	cin>>c;
	if(c<'A'||c>'j')
	{
		cout<<"输入停车区域不合法!";
		return;
	}
	for(int i=0;i<10;i++)
	{
		if(park[i].name==c)
			v0=i;

	}
	cout<<"请输入您爱车的车牌号:";
	cin>>license;
	for(int i=0;i<10;i++)
		for(int j=0;j<10;j++)
			if(strcmp(park[i].space[j].license_space,license)==0)
			{
				flag=1;
				v1=i;
			}
	if(flag==1)
	{
		ShortestPath_DIJ(G,dij,v0);
		ShowPath(G,dij,v0,v1);
	}
	else
		cout<<"未找到该车辆";
}

7.基础信息维护 

基础信息维护:修改每小时停车费、禁止停车区域、解禁停车区域

        1>修改每小时停车费:输入你要定义的停车费金额

        2>禁止停车区域:输入禁止停车的区域,使得该区域无法停车

        3>解禁停车区域:输入解禁停车的区域,使得该区域从禁止停车状态变为可以停车状态。


void changeCharge(int &charge)						//更改收费标准 
{
	int newcharge;
	cout<<"请输入新的每小时停车费"<<endl;
	cin>>newcharge;
	if(isdigit(newcharge)==0)
	{
		while(isdigit(newcharge)!=0)
		{
			cout<<"输入的数据非数字!请重新输入!"<<endl;
			cin>>newcharge;
		}
	}
	charge=newcharge;
	cout<<"修改成功!"<<endl;
}
void contolArea(Parking park[])						//限制停车区域
{
	int n=0;
	int lable;
	char area;
	cout<<"请输入禁止停车区域的名称(A-J):"<<endl;
	cin>>area;
	while(area>'J'||area<'A'){
		cout<<"输入停车区域错误!"<<endl;
		cout<<"请输入A-J当中的区域!"<<endl;
		break;
	}
	for(int i=0;i<10;i++)
	{
		if(area==park[i].name)
		{
			for(int j=0;j<10;j++){
				if(park[i].space[j].state_space==0)
				{
					park[i].space[j].state_space=1;
				}
				else{
					n++;
				}
			}
			cout<<"禁止停车场区域成功!"<<endl;
			cout<<"该被禁止区域仍有"<<10-n<<"个空位"<<endl;
		}
	}
}
void uncontrolArea(Parking park[])					//解封停车区域
{
	int n=0;
	char area;
	cout<<"请输入解禁停车区域的名称(A-J):"<<endl;
	cin>>area;
	while(area>'J'||area<'A'){
		cout<<"输入停车区域错误!"<<endl;
		cout<<"请输入A-J当中的区域!"<<endl;
		break;
	}
	for(int i=0;i<10;i++)
	{
		if(area==park[i].name)
		{
			for(int j=0;j<10;j++)
			{
				if(park[i].space[j].license_space[0]=='0')
				{
					park[i].space[j].state_space=0;
				}
				else{
					n++;
				}
			}
			cout<<"解禁停车场区域成功!"<<endl;
			cout<<"该被解禁区域有"<<10-n<<"个空位"<<endl;
		}
	}
}

8.下班 

将改变后的停车记录表、停车状态表、等待队列文件保存

void FileWriet_C(SqList L)
{
	ofstream  out("./停车记录表.txt",ios::out);      //以写的方式打开文件
	if(!out)                                //打开失败
	{
		cout<<"文件打开失败!"<<endl;
		return;
	}
	for(int i=0;i<L.length;i++)
	{
		out <<L.elem[i].date_in
			<<"	   "<<L.elem[i].time_in
			<<"	   "<<L.elem[i].license_car
			<<"	   "<<L.elem[i].area_car
			<<"	   "<<L.elem[i].date_out
			<<"	   "<<L.elem[i].time_out
			<<"	   "<<L.elem[i].money
			<<"	   "<<L.elem[i].state_car<<endl;
	}
	out.close();                           //关闭文件
}
void writeFile_status(Parking park[])
{
	ofstream  out("./停车状态表.txt",ios::out);
	if(!out)
	{
		cout<<"文件打开失败!"<<endl;
		return;
	}
	for(int i=0;i<10;i++){
		for(int j=0;j<10;j++)
		{
			out <<setw(10)<<std::right<<park[i].space[j].license_space;
		}
		out<<endl;
	}
	out.close();
}

三、总结 

以上就是我今天要向大家推荐的内容,这是我和我的小伙伴共同完成的,这是我们两个共同努力的结果,今天放在这里希望大家可以拿去学习。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
      掌握基于腾讯人工智能(AI)的车牌识别技术,使用车牌识别技术实现一个完整的停车场管理系统,项目包括网页调用摄像头拍照,车牌拍照识别,上传车牌图片识别,用户管理,车辆管理(临时车与包月车),车辆出场,入场管理,停车费收费管理,按照临时车或包月车自动计算停车费,系统参数设置,修改用户密码及安全退出等功能,该系统采用Jsp技术,使用SSM框架,Mysql数据库,ajax技术及人工智能等相关技术实现。重要通知:本课程根据腾讯AI车牌识别新接口,更新了新接口源代码,发布程序,购买了课程的同学可以下载新程序,包括(运行程序及源代码),更新时间:2021-2-17项目开发技术:java,jsp,mysql,MyBatis,SpringMVC,jquery,ajax,json项目运行环境:jdk1.7及以上版本,tomcat6.0及以上版本,mysql5.5及以上版本项目开发工具: 本项目开发工具是Eclipse,也支持myEclipse,Intellij Idea等其他版本开发工具相关课程学习顺序本校课程是培养JAVA软件工程师及JSP WEB网络应用程序开发,android工程师的全套课程,课程学习顺序如下:JAVA初级工程师:    1、计算机基础    2、HTML语言基础    3、C语言从入门到精通+贪吃蛇游戏    4、贪吃蛇游戏    5、SQL SERVER数据库基础    6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件    7、推箱子游戏;    8、仿QQ即时通讯软件;JAVA中级工程师:    9、SQLSERVER数据库高级    10、SQLSERVER从入门到精通(基础+高级)              11、JavaScript从入门到精通,    12、JSP从入门到精通+点餐系统,    13、JSP从入门到精通+在线视频学习教育平台,    14、JSP从入门到精通+大型电商平台;    15、XML从入门到精通,    16、数据结构(JAVA版),JAVA高级工程师:    17、Oracle数据库从入门到精通,    18、ajax+jquery从入门到精通,    19、EasyUI从入门到精通,SSH框架:    20、Struts2从入门到精通课程,    21、Hibernate从入门到精通课程,    22、Spring从入门到精通课程;    23、Echarts从入门到精通,    24、Excel基于POI的导入导出工作流框架:    25、Activiti流程框架从入门到精通    26、JBPM流程框架从入门到精通SSM框架:    27、MyBatis从入门到精通    28、Spring MVC从入门到精通面试题:    29、职业生涯规划及面试题集锦商业项目:    30、微信公众号在线支付系统    31、微信生活缴费在线支付系统    32、支付宝生活缴费在线支付系统    33、在线考试系统    34、手机订餐管理系统,    35、CRM客户关系管理系统    36、大型房地产CRM销售管理系统    37、CMPP2,CMPP3移动网关系统人工智能:    38、人脸识别在线考试系统    39、人脸识别系统项目实战    40、车牌识别系统项目实战    41、身份证识别系统项目实战    42、营业执照识别系统项目实战          43、名片识别管理系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小珵哟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值