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

📄 parking.cpp

📁 该软件主要是实现对停车场的管理。当车辆进入时
💻 CPP
字号:
/*  我真诚地保证:
    我自己独立地完成了整个程序从分析、设计到编码的全过程。
    如果在上述过程中,我遇到了困难而求教于人,那么,我将在程序报告中详细地列举我所遇到的问题,以及别人给我的提示。
在此,我感谢各位老师和同学对我的启发和帮助。下面的报告中,我还会具体地提到他们在各个方法对我的帮助。
   我的程序里中凡是引用到其他程序或文档之处,例如教材、课堂笔记、网上的源代码以及其他参考书上的代码段,我都已经在程序的注释里很清楚地注明了引用的出处。
我从未抄袭过别人的程序,也没有盗用别人的程序,无论是修改式地抄袭还是原封不动地抄袭。
我编写这个程序,从来没有想过要去破坏或妨碍其他计算机系统的正常运转。
                                  淳思博
*/
 


#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "time.h" 
#define null 0
#define Maxsize 4

void clear(char a[])
{
	int i,counta;
	counta=strlen(a);
	for(i=0;i<counta;i++)
		a[i]='\0';
}

struct car   //定义车的结构体
{
	char num[10];//存储车辆车牌号
	char intime[10];//存储车辆进入时间
	char outtime[10];//存储车辆离开时间
	int expense;//存储车辆离开时应缴纳的费用
	int delay;//车辆在停车场停放的总时间
	int position;//存储车辆停放位置
};


typedef struct   //*****************************************栈*********************************
{
	struct car d[Maxsize];
	int top;
}SeqStack;

void init(SeqStack *s)  //初始化栈
{
	s->top=-1;
}

int isemptystack(SeqStack *s)      //判断栈是否为空
{
	if(s->top==-1)
		return 1;
	else
		return 0;
}

int isfullstack(SeqStack *s)    //判断栈是否为满
{
	if(s->top==Maxsize-1)
		return 1;
	else
		return 0;
}

void push(SeqStack *s,struct car x)   // 进栈
{
	if(!isfullstack(s)) 
	{
		s->top++;
		s->d[s->top]=x;
	}
}

struct car pop(SeqStack *s)   //,取栈顶元素,出栈
{
	car x;
	if(s->top!=-1)
	{
		x=s->d[s->top];
		s->top--;
		return x;
	}
}


car gettop(SeqStack *s)  //取栈顶元素
{
	car x;
	if(s->top!=-1) 
	{
		x=s->d[s->top];
		return x;
	}
}
 //*************************************************栈*************************************


//*****************************************队列链表**************************************

typedef struct slnode    //定义链队列的接点性质
{
	struct car data;
	struct slnode *next;
}slnodetype;

typedef struct    //定义链的性质
{
	slnodetype *head;
	slnodetype *rear;
}linkq;

void initq(linkq *q)   //初始化链队列
{
	q->head=(slnodetype*)malloc(sizeof(slnodetype));
	q->rear=q->head;
	q->head->next=null;
	q->rear->next=null;
}


void addq(linkq *q,struct car x)      //进队列
{
	slnodetype *p;
	p=(slnodetype*)malloc(sizeof(slnodetype));
	p->data=x;  
	p->next=null;  
	q->rear->next=p;
	q->rear=p;
} 


struct car delq(linkq *q)    //出链队列
{
	slnodetype *p;
	struct car x;
	if(q->head!=q->rear)
	{
		p=q->head->next;
		if(p->next==null)
		{
			x=p->data;
			q->rear=q->head;
			free(p);
		}
		else
		{
			q->head->next=p->next;
			x=p->data;
			free(p);
		}
		return x;
	}
}


int isemptyq(linkq *q)    //判断链队列是否为空
{
	if(q->rear==q->head)
		return 1;
	else
		return 0;
}

   //*******************************队列链表***********************

void print1(struct car x)   //进站前的信息
{
	printf("车牌\t进站时间\t进/出站\t停留时间\t费用\n");
	printf("%s\t\t",x.num);
	printf("Movein\t\t\t\n");
}


void print3(struct car *x)   //出站时的信息
{
	printf("车牌    进站时间   出站时间    原来位置    停留时间(秒)    费用(角)\n");
	printf("%s",x->num);
	printf("  %s",x->intime);
	printf("  %s  ",x->outtime);
	printf("  %d\t ",x->position);
	printf("  %d\t",x->delay);
	printf("\t%d\n",x->expense);
}

void printstack(SeqStack *s)
{
	int i;
	
	if(isemptystack(s))
		printf("车站内没有车.");
	else
	{
		printf("\t车站内\n位置\t车牌\t进站时间 站内状况\n");
		for(i=0;i<=s->top;i++)
		{
			printf("%d\t",s->d[i].position);
			printf("%s\t",s->d[i].num);
			printf("%s\n",s->d[i].intime);
		}
		printf("\t\t\t共%d辆",s->top+1);
		if(s->top==Maxsize-1)
			printf("(已满)\n");
		else
			printf("(还能放%d辆)\n",Maxsize-1-s->top);
		printf("\n");
	}
}

 

void printq(linkq *q)
{
	
	if(!isemptyq(q))
	{
		slnodetype *p;
		p=q->head->next;
		printf("\t过道:\n车牌\t进道时间\n");
		printf("%s\t%s\n",p->data.num,p->data.intime);
		while(p->next!=null)
		{
			p=p->next;
			printf("%s\t%s\n",p->data.num,p->data.intime);
		}
	}
	else
		printf("\n过道上没有车在等待\n");
}

void review(SeqStack *s,linkq *q)    //查看车站和过道上的情况
{
	printf("**************************************\n");
	printstack(s);
	printq(q);
	printf("**************************************\n");
}

void gettime(char a[])    //获取时间
{ 
	int i;
	static char nowtime[30];
	time_t t; 
	time(&t); 
	strcpy(nowtime,ctime(&t));
	for(i=0;i<9;i++)
		nowtime[i]=nowtime[i+11];
	nowtime[i]='\0';
	strcpy(a,nowtime);
} 

void incar(SeqStack *s,linkq *q)          //车进站 ****************************
{
	struct car k;
	static char nowtime1[10];
	printf("请你输入车牌(例:陕A1234):\n");
	gets(k.num); 
	gettime(nowtime1);
	strcpy(k.intime,nowtime1);
	if(!isfullstack(s)&&isemptyq(q))   //如果车站不满,而且过道上没有车则,直接进入车站
	{
		k.position=(s->top)+2;  
		push(s,k);
		printstack(s);  
	}
	else if(isfullstack(s)||!isemptyq(q))   //如果过道上还有车,则必须放在过道上
	{
		
		printf("************************警告*******************************\n车站已满,请先暂时放在过道.\n现在情况如下:\n");
		k.position=Maxsize;
		addq(q,k);//放在过道上
		
		printstack(s);  //输出车站的情况         
		printq(q);   //同时输出当时过道上的情况
		printf("***********************************************************\n");
	}
}


void outcar(SeqStack *s,linkq *q)    //车出站
{
	SeqStack p;   //申请临时放车的地方
	init(&p);
	char nowtime[10];
	int i,pos;
	long cost;
	int hour,min,sec;
	struct car x,b,y1,y2,z;
	
	if(isemptystack(s))
	{ 
		printf("车站是空的,不能再出站了!\n");
		printf("\a");
	}
	else    
	{
		printf("现在车站的情况是:\n");
		printstack(s);
		printf("你要出站的车的停放位置:\n");
		scanf("%d",&pos);
		if(pos>0&&pos<=s->top+1)
		{
			for(i=s->top+1;i>pos;i--)
			{
				x=pop(s);
				x.position=x.position-1;
				push(&p,x);
			}
			b=pop(s);
			gettime(nowtime);
			strcpy(b.outtime,nowtime);
			hour=(b.outtime[0]-'0')*10+(b.outtime[1]-'0')-((b.intime[0]-'0')*10+(b.intime[1]-'0'));
			min=(b.outtime[3]-'0')*10+(b.outtime[4]-'0')-((b.intime[3]-'0')*10+(b.intime[4]-'0'));
			sec=(b.outtime[6]-'0')*10+(b.outtime[7]-'0')-((b.intime[6]-'0')*10+(b.intime[7]-'0'));
			b.delay=hour*3600+min*60+sec;
			cost=b.delay;
			b.expense=cost;
			print3(&b); //输出车出站时的情况---进入时间,出站时间,原来位置,花的费用等
			while(!isemptystack(&p))   //车出来后把刚才退出的车重新放回
			{
				z=pop(&p);
				push(s,z);
			}
			if(!isfullstack(s)&&!isemptyq(q))
			{
				y1=delq(q);
				strcpy(y1.intime,nowtime);
				push(s,y1);
			}
			while(!isfullstack(s)&&!isemptyq(q))  //只要过道上有车,就往车站里进,除非车站满了
			{
				y2=delq(q);
				push(s,y2);
			}
			
		}
		else
		{ 
			printf("没有你要的车号!\n");
			printf("\a");
		}
	}
}     

void main()
{
	SeqStack park;
	linkq q;
	init(&park);
	initq(&q); 
	char mess[10];
	
	printf("\t\t\t车场管理系统\n\t\t\t\t\n");
	printf("提示:车站内最多只能放4辆车,多余的暂时放在过道上.\n车站内收费标准:1角/秒,过道上不收费.\n");
	printf("\ninparking ---->车进站\nexporting ---->车出站\nlist ---->查看车站及过道中的情况\nend ---->退出系统\n");
	printf("\n操作:");
	
	gets(mess);
	while(1)
	{
		if(strcmp(mess,"end")==0)
		{
			printf("\t\t\t欢迎下次再来,再见!\n");
			break;
		}
		else
		{
			
			if(strcmp(mess,"list")==0)
			{ review(&park,&q);
			printf("操作:");
			}
			else if(strcmp(mess,"inparking")==0)
			{ incar(&park,&q);
			printf("操作:");
			}
			else if(strcmp(mess,"exporting")==0)
			{ outcar(&park,&q);
			}
			else
				printf("操作:");
			clear(mess);
			gets(mess);
		}
	}
}

 

⌨️ 快捷键说明

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