⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 停车场管理.cpp

📁 这个是以前我的课设
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
#include <iomanip>
#include "head.h"
using namespace std;
/************************************************************************/
/*                            初始化函数                                */
/************************************************************************/
void InitStack(SeqStackCar *); /*停车场栈*/
int InitQueue(LinkQueueCar *); /*停车便道*/
int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/
void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/
void List(SeqStackCar,LinkQueueCar); /*显示停车信息*/
void Version();/*个人LOGO*/  
/************************************************************************/
/*                              主函数                                  */
/************************************************************************/
void main()
{
	Version();
	SeqStackCar Enter,Temp;
	LinkQueueCar Wait;
	int ch;
	InitStack(&Enter); /*初始化车站*/
	InitStack(&Temp); /*初始化让路的临时栈*/
	InitQueue(&Wait); /*初始化通道*/		
	cout<<"\t\t\t    ********主菜单********"<<endl;	
	cout<<"\t\t\t      (1)  代客停车 "<<endl;
	cout<<"\t\t\t      (2)  车辆离开 "<<endl;
	cout<<"\t\t\t      (3)  显示车辆清单 "<<endl;
	cout<<"\t\t\t      (4)  退出系统 "<<endl;
	cout<<"\t\t\t    **********************"<<endl;
	cout<<"\t\t          请输入菜单选项前的操作代码:";
	while (1) 
	{
		while(1)
		{
			cin>>ch;
			if(ch>=1&&ch<=4)break;
			else cout<<"\n输入错误!!\n请重新输入菜单选项前的操作代码:";
		}
		switch(ch)
		{
			case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/
			case 2:
				{
					system("cls");
					Leave(&Enter,&Temp,&Wait);
					break; /*车辆离开*/
				}
			case 3:List(Enter,Wait);break; /*列表打印信息*/
			case 4:exit(0); /*退出主程序*/
			default: break;
		}
	}
	
}
/************************************************************************/
/*                              初始化栈和队列                          */
/************************************************************************/
void InitStack(SeqStackCar *s) /*初始化栈*/
	{
		int i;
		s->top=0;
		for(i=0;i<=MAX;i++)
			s->stack[s->top]=NULL;
	}
int InitQueue(LinkQueueCar *Q) /*初始化便道队列*/
	{
		Q->head=(QueueNode *)malloc(sizeof(QueueNode));
		if(Q->head!=NULL)
			{
				Q->head->next=NULL;
				Q->rear=Q->head;
				return(1);
			}
		else return(-1);
	}
/************************************************************************/
/*                             版权信息                                 */
/************************************************************************/
void Version()
	{
		 cout<<"\t\t    **************************************"<<endl;
		 cout<<"\t\t         欢迎使用停车场管理系统1.0版"<<endl;
		 cout<<"\t\t          制作:05软件工程8班 翁靖翔"<<endl;
		 cout<<"\t\t    版权所有  未经同意  不得复制  违者必究"<<endl;
		 cout<<"\t\t    **************************************"<<endl<<endl;
	}
/************************************************************************/
/*                              计费函数                              */
/************************************************************************/
void PRINT(CarNode *p,int room) 
	{
		int A1,A2,B1,B2;
		printf("\n请输入车辆离开时间:/**:**/:");
		scanf("%d:%d",&(p->leave.hour),&(p->leave.min));
		system("cls");
		printf("\n\t\t\t\t离开车辆的信息:\n");	
		printf("\n\t\t    车牌号码   到达时间    离开时间   停车计费\n");
		cout<<"\t\t       "<<p->num;
		if(p->reach.min!=0)
			{
				printf("\t%d:%d" ,p->reach.hour,p->reach.min);
			 }
		else
			{
				printf("\t%d:%d%d",p->reach.hour,p->reach.min,0);
			}
		if (p->leave.min!=0) 
			{
				printf( "\t   %d:%d",p->leave.hour,p->leave.min);
			}
		else
			{
	     		printf( "\t   %d:%d%d",p->leave.hour,p->leave.min,0);
			}	
		A1=p->reach.hour;
		A2=p->reach.min;
		B1=p->leave.hour;
		B2=p->leave.min;
		printf("\t\t%2.1f元",((B1-A1)*60+(B2-A2))*price);
		free(p);
		cout<<endl<<endl;
	}
/************************************************************************/
/*                              车辆到达函数                            */
/************************************************************************/
int Arrival(SeqStackCar *Enter,LinkQueueCar *W) 
	{
		CarNode *p;
		QueueNode *t;
		p=(CarNode *)malloc(sizeof(CarNode));
		flushall();//清空键盘缓冲区
		printf("请输入车辆车牌号(例如:YUN1234):");
		gets(p->num);
		if(Enter->top<MAX) /*车场未满,车进车场*/
		{
			Enter->top++;		
			printf("\n请输入车辆到达时间(例如:12:00):");
			scanf("%d:%d",&(p->reach.hour),&(p->reach.min));
			system("cls");
			if(p->reach.min!=0)
				{
					printf("\n\t\t此车的停车位置是 %d号车位.到达时间是%d:%d!\n\n\n\n",Enter->top,p->reach.hour,p->reach.min);
					
				}
			else
				{
					printf("\n\t\t此车的停车位置是 %d号车位.到达时间是%d:%d%d!\n\n\n\n",Enter->top,p->reach.hour,p->reach.min,0);
						
				}	
			
			Enter->stack[Enter->top]=p;
			return(1);
		}
		else /*车场已满,车进便道*/
			{
				system("cls");
				printf("\n\t\t\t停车场车位已满,请在便道等候!\n\n\n\n");
				t=(QueueNode *)malloc(sizeof(QueueNode));
				t->data=p;
				t->next=NULL;
				W->rear->next=t;//链式队列,入队列 
				W->rear=t;
				return(1);
			}
	}
/************************************************************************/
/*                             车辆离开函数                             */
/************************************************************************/
void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)
	{ 
		int room;
		bool charge=false;
		CarNode *p,*t;
		QueueNode *q;
		/*判断车场内是否有车*/
		if(Enter->top>0) /*有车*/
		{
			while(1) /*输入离开车辆的信息*/
				{
					printf("\n请输入车辆的车位号:/1--%d/:",Enter->top);
					scanf("%d",&room);
					if(room>=1&&room<=Enter->top) break;
				}
			while(Enter->top>room) /*车辆离开*/
				{
					Temp->top++;
					Temp->stack[Temp->top]=Enter->stack[Enter->top];
					system("cls");
					printf("\n\n\n\t    %s ",Enter->stack[Enter->top]->num);
					charge=true;
					Enter->stack[Enter->top]=NULL;
					Enter->top--;
				}
			if(charge)
			printf(" 给%s让路.\n",Enter->stack[room]->num);
			p=Enter->stack[Enter->top];
			Enter->stack[Enter->top]=NULL;
			Enter->top--;
			while(Temp->top>=1)//恢复车库栈
				{
					Enter->top++;
					Enter->stack[Enter->top]=Temp->stack[Temp->top];
					Temp->stack[Temp->top]=NULL;
					Temp->top--;
				}
			PRINT(p,room);
			/*判断通道上是否有车及车站是否已满*/
			if((W->head!=W->rear)&&Enter->top<MAX) /*便道的车辆进入车场*/
				{
					q=W->head->next;
					t=q->data;
					Enter->top++;
					printf("\n\n\n\t    车位有空缺!!在便道等候的车辆%s可以停入车位%d.",t->num,Enter->top);
					printf("\n请输入现在的时间/**:**/:");
					scanf("%d:%d",&(t->reach.hour),&(t->reach.min));
					W->head->next=q->next;
					if(q==W->rear) W->rear=W->head;
					Enter->stack[Enter->top]=t;
					free(q);
				}
			else printf("\n\t\t\t   便道内没有车辆在等候!\n\n\n"); 
		}
		else printf("\n\t\t\t   停车场内还没有车辆停入!\n\n\n"); /*没车*/
	
	}
/************************************************************************/
/*                          列表显示车场信息                            */
/************************************************************************/
void List1(SeqStackCar *S) 
	{
		int i;
		if(S->top>0) /*判断停车场内是否有车*/
		{
			printf("\n停车场内停放的车辆:\n");
			printf("\n 车位 到达时间       车牌号码\n");
			for(i=1;i<=S->top;i++)
				{
					printf("   %d ",i);
					if(S->stack[i]->reach.min!=0)
						{
							printf("   %d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min);
						}
					else
						{
							printf("   %d:%d%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min,0);
						}
					cout<<"       "<<S->stack[i]->num<<endl;				
				}
		}
		else printf("\n\t\t\t    停车场内还没有车辆停入!\n\n\n");
}
/************************************************************************/
/*                           列表显示便道信息                           */
/************************************************************************/
void List2(LinkQueueCar *W) 
	{
		QueueNode *p;
		p=W->head->next;
		if(W->head!=W->rear) /*判断通道上是否有车*/
			{
				printf("\n在便道上等待的车辆的车号:\n");
				while(p!=NULL)
					{			
						cout<<"\t\t"<<p->data->num<<endl;
						p=p->next;
					}
			}
		else printf("\n\t\t\t    便道内没有车辆在等候!\n\n\n");
	}
    /************************************************************************/
	/*                       子菜单                                         */
	/************************************************************************/
void List(SeqStackCar S,LinkQueueCar W)
{
	int flag,tag;
	flag=1;
	system("cls");
	while(flag)
		{
			//printf("\nChose 1|2|3:");
			//printf("\n(1)停车场\n(2)便道\n(3)返回\n");
			 cout<<endl<<endl<<"\t\t\t    ********子菜单********"<<endl;	
			 cout<<"\t\t\t     (1)  停车场内车辆 "<<endl;
			 cout<<"\t\t\t     (2)  便道等候车辆 "<<endl;
			 cout<<"\t\t\t     (3)   返回主菜单 "<<endl;		
			 cout<<"\t\t\t    **********************"<<endl;
			 cout<<"\t\t          请输入菜单选项前的操作代码:";
			while(1)
				{
					scanf("%d",&tag);
					if(tag>=1&&tag<=3) break;
					else cout<<"\n输入错误!!\n请重新输入菜单选项前的操作代码:";
				}
			system("cls");
			switch(tag)
				{
					case 1:List1(&S);break; /*列表显示车场信息*/
					case 2:List2(&W);break; /*列表显示便道信息*/
					case 3:system("cls");flag=0;break;
					default: break;
				}
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -