#include <stdlib.h>
#include <string.h>
#include <time.h>
#define max 3
#define price 1
int b=1
typedef struct
{
int day
int hour
int min
}TIME //时间结点
typedef struct
{
char num[10] //车牌号
TIME time //进稿谈入停车场的时间
int n //进入停车场的位置
}information
//栈结构体定义
typedef struct node
{
information data
struct node *next
}stacknode stacknode *top1,*top2
//队列结构体定义
typedef struct
{
information data
stacknode *front,*rear
}LQueueLQueue *Q
//函数声明部分/////////////////////////////////////////////////////////
stacknode *Init() //栈的初始化
stacknode *into(stacknode *top1,LQueue *Q) //初始化车辆进入
int expenses(stacknode *p,int x,int y) //停车费用计算函数
stacknode *leave(stacknode *top1,char str[],LQueue *Q) //车辆驶出出场函数
LQueue *InitLQue() //初始皮型化队列函数
LQueue *wait(LQueue *q,stacknode *s) //车辆进入候车便道函数
int EmptyLQue(LQueue *q) //判断候车便道有无等键握碰待车辆函数
stacknode *out(LQueue *q)//候车区车辆出队
stacknode *LQinto(stacknode *p,stacknode *top1) //从候车便道进入停车场函数
void show(stacknode *top1) //显示停车场所有信息函数
void T_shou(LQueue *Q) //显示候车区信息
/*函数部分*/
//主函数
void main()
{
char str[10]
Q=InitLQue()
top1=Init()
top2=Init()
Q=InitLQue()
int i
printf("\t\t\t*************************************\n")
printf("\t\t\t\t 停车场管理系统\n")
printf("\t\t\t||1. 车辆进入停车场||\n")
printf("\t\t\t||2. 车辆离开停车场||\n")
printf("\t\t\t||3. 显示停车场内所有车辆信息 ||\n")
printf("\t\t\t||4. 显示候车区内所有车辆信息 ||\n")
printf("\t\t\t||5. 退出 ||\n")
printf("\t\t\t*************************************\n")
while(i!=5)
{
printf("\t请输入选项1-5:")
scanf("%d",&i)
switch(i)
{
case 1:
top1=into(top1,Q)
break
case 2:
printf("请输入离开车辆的车牌号:")
scanf("%s",str)
top1=leave(top1,str,Q)
break
case 3:show(top1)break
case 4:T_shou(Q)break
case 5:exit(1)
default:printf("输入错误,请重新输入1—5:")
break
}
}
}
/*子函数*/
//初始化
stacknode *Init()
{
stacknode *top
top=(stacknode *)malloc(sizeof(stacknode))
top=NULL
return top
}
//初始化车辆进入
stacknode *into(stacknode *top1,LQueue *Q)
{
stacknode *p,*q
time_t rawtime//调用系统时间函数
struct tm *timeinfo //时间结点
time(&rawtime)
timeinfo=localtime(&rawtime)
p=(stacknode *)malloc(sizeof(stacknode))
if(p==NULL)
{
printf("内存分配失败")
return top1
}
printf("请输入进入停车场车辆的车牌号:")
scanf("%s",p->data.num)
q=top1
while(q!=NULL)
{
if(strcmp(p->data.num,q->data.num)==0)
{
printf("车牌号输入有误,该车已进入!")
return top1
}
q=q->next
}
p->data.time.day=timeinfo->tm_mday
p->data.time.hour=timeinfo->tm_hour
p->data.time.min=timeinfo->tm_min
p->data.n=b
if(b>max)
{
printf("停车场已满,请在便道等候!\n")
wait(Q,p)
return top1
}
if(top1==NULL)
{
p->next=NULL
top1=p
}
else
{
p->next=top1
top1=p
}
b++
printf("车辆进入停车场成功,时间已经自动载入!\n")
printf("车牌为%s的汽车驶入时间为:%d号%d点%d分\n",top1->data.num,top1->data.time.day,top1->data.time.hour,top1->data.time.min)
return top1
}
//停车费用计算函数
int expenses(stacknode *p,int x1,int x2,int x3)
{
int w
if(x3!=0)
w=(x1*24+x2+1-(p->data.time.day*24+p->data.time.hour))*price
else
w=(x1*24+x2-(p->data.time.day*24+p->data.time.hour))*price
return w
}
//车辆驶出出场函数
stacknode *leave(stacknode *top1,char str[],LQueue *Q)
{
int i,day,hour,min
time_t rawtime
struct tm *timeinfo
time(&rawtime)
timeinfo=localtime(&rawtime)
day=timeinfo->tm_mday
hour=timeinfo->tm_hour
min=timeinfo->tm_min
stacknode *p,*q
if(top1==NULL)
{
printf("停车场没有车辆!\n")
return top1
}
q=(stacknode *)malloc(sizeof(stacknode))
if(p==NULL)
{
printf("内存分配失败")
return top1
}
q=top1
while(q!=NULL)
{
if(strcmp(q->data.num,str)==0)
break
q=q->next
}
if(q==NULL)
{
printf("输入有误,该车辆不在停车场!\n")
return top1
}
for(i=top1->data.ni>q->data.ni--)
{
p=(stacknode *)malloc(sizeof(stacknode))
if(p==NULL)
{
printf("内存分配失败")
return top1
}
strcpy(p->data.num,top1->data.num)
p->data.time=top1->data.time
p->data.n=top1->data.n-1
top1=top1->next
if(top2==NULL)
{
p->next=NULL
top2=p
}
else
{
p->next=top2
top2=p
}
}
top1=top1->next
while(top2!=NULL)
{
p=(stacknode *)malloc(sizeof(stacknode))if(p==NULL){printf("内存分配失败")return top1}
p->data.n=top2->data.n
strcpy(p->data.num,top2->data.num)
p->data.time=top2->data.time
p->next=top1
top1=p
top2=top2->next
}
if(EmptyLQue(Q))
{
p=out(Q)
p->data.n--
top1=LQinto(p,top1)
}
else
b--
printf("车牌为%s的汽车驶出时间为:%d号%d点%d分\n",q->data.num,day,hour,min)
printf("车辆驶出停车场需要缴纳的费用为:%d元\n",expenses(q,day,hour,min))
return top1
}
//队列函数初始化
LQueue *InitLQue()
{
LQueue *Q
stacknode *p
Q=(LQueue *)malloc(sizeof(LQueue))
p=(stacknode *)malloc(sizeof(stacknode))
p->next=NULL
Q->front=Q->rear=p
return Q
}
//候车区队列入队
LQueue *wait(LQueue *q,stacknode *s)
{
s->next=NULL
q->rear->next=s
q->rear=s
return q
}
//判断候车便道有无车辆等待
int EmptyLQue(LQueue *q)
{
if(q->front==q->rear)
return 0
else
return 1
}
//候车区车辆出队
stacknode *out(LQueue *q)
{
stacknode *p
p=q->front->next
if(q->front->next==q->rear)
{
q->rear=q->front
return p
}
else
q->front->next=p->next
p->next=NULL
return p
}
//候车队列进入停车场
stacknode *LQinto(stacknode *p,stacknode *top1)
{
p->next=top1
top1=p
return top1
}
//显示停车场内所有车辆信息
void show(stacknode *top1)
{
printf(" 停车场内全部车辆信息表\n")
if(top1==NULL)
printf(" 停车场内无车!\n")
else
{
printf("车牌号 进入时间 位置\n")
while(top1!=NULL)
{
printf(" %s%d号%d点%d分 第%d位\n",top1->data.num,top1->data.time.day,top1->data.time.hour,top1->data.time.min,top1->data.n)
top1=top1->next
}
}
}
//显示候车区的汽车信息
void T_shou(LQueue *Q)
{
LQueue *q
q=(LQueue *)malloc(sizeof(LQueue))
q->rear=Q->rear->next
printf(" 候车区信息\n")
if(q->front==q->rear)
printf("候车区没有车辆!\n")
else
{
printf("车牌号 进入时间\n")
while(q!=NULL)
{
printf("%s %d号%d点%d分",q->data.num,q->data.time.day,q->data.time.hour,q->data.time.min)
q->rear=q->rear->next
}
}
}
/*时间函数
int timef()
{
int x,y
time_t rawtime
struct tm *timeinfo
time(&rawtime)
timeinfo=localtime(&rawtime)
x=timeinfo->tm_mday,y=timeinfo->tm_hour
}
time_t rawtime
struct tm *timeinfo
time(&rawtime)
timeinfo=locoltime(&rawtime)
timeinfo->tm_ymday,*/
细节上的优化就看Lz怎么想了,我觉得提示做得还不够好,免强能用了。#include
#include
#define N 3 /*停车场大小*/
#define MAX 50 /*过道大小*/
#define sign 10/*车牌大小*/
#define price 10/*每分钟的价钱*/
char part[N][sign]
char Rpart[MAX][sign]
char time[N][20]
int P,R
partadd(char *t)
{
strcpy(&part[P][0],t)
printf("请输入时间:例如十点十分格式为“10.10”\n")
scanf("%s",&time[P][0])
getchar()
P++
}
Rpartadd(char *t)
{
if(R<MAX)
{
strcpy(&Rpart[R][0],t)
R++
}
else
{
printf("过道己满。无法停车。\n")
}
}
newcar()
{
char temp[sign]
printf("请输入车牌号:"谨脊禅)
scanf("%s",temp)
getchar()
if(P<N)
{
partadd(temp)
}
else if(R<MAX)
{
Rpartadd(temp)
}
}
int timed(char *t1,char *t2)
{
int i=0,y=0,x=0,j,n=1
while(1)
{
if(t1[i]=='.')
{
for(j=i-1j>=0j--)
{
y=y+(t1[j]-'0')*(60*n)
n=n*10
}
while(1)
{
if(t1[j]==NULL)
{
for(n=1j>ij--)
{
y=y+(t1[j]-'0')*n
n=n*10
}
break
}
j++
}
i=0
while(1)
{
if(t2[i]=='.')
{
for(j=i-1j>=0j--)
{
x=x+(t2[j]-'0')*(60*n)
n=n*10
}
while(1)
{
if(t2[j]==NULL)
{
for(n=1j>ij--)
{
x=x+(t2[j]-'0')*n
n=n*10
}
break
}
j++
}
y=(x-y)*price
return y
}
i++
}
}
i++
}
}
partcarout(int i)
{
int j,money
char t[20]
printf("请输入现在的时间:例如十点十分野樱格式为“10.10”\n")
scanf("%s",t)
getchar()
money=timed(t,&time[i][0])
printf("收费%d\n",money)
for(j=ij<Pj++)
{
strcpy(&part[j][0],&part[j+1][0])
P--
}
if(R!=0)
{
strcpy(&part[N-1][0],&Rpart[0][0])
P++
strcpy(&time[P][0],t)
Rpartcarout(0)
}
}
Rpartcarout(int i)
{
int j
for(j=ij<Rj++)
{
strcpy(&Rpart[j][0],&Rpart[j+1][0])
R--
}
}
carout()
{
char t[sign]
int i,get=0
printf("请入要离开的车牌号:")
scanf("祥尘%s",t)
getchar()
for(i=0i<Pi++)
{
if(strcmp(t,&part[i][0])==0)
{
get=1
partcarout(i)
break
}
}
for(i=0i<R&&get==0i++)
{
if(strcmp(t,&Rpart[i][0])==0)
{
get=1
Rpartcarout(i)
break
}
}
if(get==0)
{
printf("查无此车。\n")
}
}
jopart()
{
int i
for(i=0i<Pi++)
{
printf("%d.%s\n",i,&part[i][0])
}
}
joRpart()
{
int i
for(i=0i<Ri++)
{
printf("%d.%s\n",i,&Rpart[i][0])
}
}
main()
{
int c
while(1)
{
printf("请选择要做的事:\n")
printf("1.加入新车。\n")
printf("2.有车离开。\n")
printf("3.显示在停车场内的车。\n")
printf("4.显示在过道上的车。\n")
printf("5.退出。\n")
c=getchar()
getchar()
switch (c)
{
case '1':newcar()
break
case '2':carout()
break
case '3':jopart()
break
case '4':joRpart()
break
case '5':exit(1)
break
}
}
}
(1)停车场有若干停车位(为说明问题,假定为3个),每个位置可以存放不同类型的汽车,包括卡车Track,k客车Carriage和小轿车Car,但同一时刻一个位置只能存放0或1辆汽车。(2)管理系统模拟实际迹轿车辆停车情况:新来车辆时如果有空位,按顺序为该车分配停车位;车辆走开时,交纳相应停车费;统计各类车辆的数量。(3)定义描述停车场的类Park,其中有三个位置停放各类车辆。(4)定义基类信森Automobile,至少包括纯虚函数Pay()用于显示车辆信息并交纳相应停车姿坦肆费。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)