的先后次序停放。若车场满了,车要停在门外的便道上等候,一旦有车走,则便
道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车要先退
出,待它走后在依次进入。汽车离开时按停放时间收费。
基本功能要求:
(1) 建立三个数据结构分别是:停放队列、让路栈、等候队列。
(2) 输入数据模拟管理过程,数据(入或出,车号)
源程序
park.c
#include<stdio.h>
#include<time.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<errno.h>
#include<math.h>
#include<stdlib.h>
#include"parktime.h"
#include"parkface.h"
typedef struct parkcar
{
struct parkcar *p;
time_t into;
time_t out;
char carnum[20];
}car;
car cara={.p=NULL}, *ahead=&cara, *atail;
car carb={.p=NULL}, *bhead=&carb, *btail;
#include"parkdata.h"
int main()
{
parkfarme5();
char a[10];
parkfarme6(a);
int b;
b=atoi(a)-1;
while(1)
{
system("clear");
parkfarme7(a);
if(a[1]!='\n')
{
system("clear");
continue;
getchar();
}
if(a[0]=='1')
{
system("clear");
parkadd(b);
getchar();
}
if(a[0]=='2')
{
system("clear");
parkcheck();
getchar();
}
if(a[0]=='3')
{
system("clear");
parkdel();
getchar();
}
if(a[0]=='4')
{
system("clear");
parkcheck2();
getchar();
}
if(a[0]=='5')
{
system("clear");
return 0;
}
}
}
parktime.h
void timenow(time_t a) //need time.h
{
struct tm *p;
p=gmtime(&a);
printf ("%d %d %d %d:%d:%d\n",1900+p->tm_year,1+p->tm_mon,p->tm_mday,
8+p->tm_hour,p->tm_min,p->tm_sec);
}
void timedif(time_t a,time_t b)
{
int ba=difftime(b,a);
printf ( "%d\n",ba );
}
parkface.h
void parkfarme(int a)
{
printf ("\033[30m\033[100A");
printf ("\033[30m\n\033[100D");
printf ("\033[30m\033[3B");
printf ("\033[30m\n\033[15C"); //chushihua
int i,j;
printf ("\033[30m\033[K");
for (i=0;i<24;i++)
printf("\033[32m *\033[0m"); //qianzhui
printf ("\033[30m\n\033[15C");
for(i=0;i<a;i++)
{
printf("\033[36m*\033[0m");
printf("\033[36m\033[49C");
printf("\033[36m*\033[0m");
printf ("\033[30m\n\033[15C");
}
printf ("\033[30m\033[K");
for (i=0;i<25;i++)
printf("\033[32m* \033[0m");
printf("\n");
printf ("\033[30m\033[8;22H");
printf("\033[33m\033[0m");
}
void parkfarme2(int a)
{
printf ("\033[30m\033[100A");
printf ("\033[30m\n\033[100D");
printf ("\033[30m\033[3B");
printf ("\033[30m\n\033[15C");
int i,j;
printf ("\033[30m\033[K");
for (i=0;i<25;i++)
printf("\033[32m* \033[0m");
printf ("\033[30m\n\033[15C");
for(i=0;i<a;i++)
{
printf("\033[33m*\033[0m");
printf("\033[36m\033[49C");
printf("\033[33m*\033[0m");
printf ("\033[30m\n\033[15C");
}
printf ("\033[30m\033[K");
for (i=0;i<24;i++)
printf("\033[32m *\033[0m");
printf("\n");
printf ("\033[30m\033[8;22H");
printf("\033[33m\033[0m");
}
void dycar1()
{
printf ("\033[30m\033[13;25H");
printf ("\033[30m____________ ___ |\033[14;25H");
printf ("\033[30m| \\ | |\033[15;25H");
printf ("\033[30m| \\ | |\033[16;25H");
printf ("\033[30m----0----0---- -- |\033[16;25H");
}
void dycar2()
{
printf ("\033[30m\033[13;25H");
printf ("\033[30m ____ ___________|\033[14;25H");
printf ("\033[30m \\ | |\033[15;25H");
printf ("\033[30m \\ | |\033[16;25H");
printf ("\033[30m -0---- ----0----0--|\033[16;25H");
}
void dycar3()
{
printf ("\033[30m\033[13;25H");
printf ("\033[30m ____________ |\033[14;25H");
printf ("\033[30m | \\ |\033[15;25H");
printf ("\033[30m | \\ |\033[16;25H");
printf ("\033[30m ----0----0---- |\033[16;25H");
}
void parkfarme3()
{
printf ("\033[30m\033[2J");
printf ("\033[30m\033[?25l");
int i,j;
while(1)
{
parkfarme(15);
dycar1();
sleep(1);
parkfarme2(15);
dycar3();
sleep(1);
parkfarme(15);
dycar2();
sleep(1);
}
}
void parkfarme4()
{
printf ("\033[30m\033[8;32H");
printf("\033[31m PARK SYSTEM 1.O\033[0m");
printf ("\033[30m\033[23;17H");
printf("\033[37mPUT ENTER CONTINUE\033[0m");
printf ("\033[30m\033[20;56H");
printf("\033[37m BY SU\033[0m");
printf ("\033[30m\033[?25l");
}
void parkfarme5()
{
pid_t j1;
int jc1;
j1=fork();
if(0==j1)
{
parkfarme3();
jc1=getpid();
}
else
parkfarme4();
getchar();
kill(j1,SIGINT);
system("clear");
}
void parkfarme6(char *a)
{
parkfarme(15);
printf ("\033[30m\033[?25h");
printf ("\033[0m\033[9;26H");
printf ("\033[1mPLEASE ENTER PARKING ARE SIZE\033[15;37H");
fgets (a,10,stdin);
printf ("\033[2m\033[23;17H");
printf ("\033[37m PUT ENTER CONTINUE\033[0m");
printf ("\033[2m\033[?25l");
getchar();
system ("clear");
}
void parkfarme7(char *a)
{
parkfarme2(15);
printf ("\033[30m\033[?25h");
printf ("\033[0m\033[9;26H");
printf ("\033[0mPLEASE ENTER NUMBER\033[15;37H");
printf ("\033[0m\033[12;26H");
printf ("\033[0m1:park car\033[13;26H");
printf ("\033[0m2:check park\033[14;26H");
printf ("\033[0m3:leave car\033[15;26H");
printf ("\033[0m4:check wait\033[16;26H");
printf ("\033[0m5:quit\033[17;26H");
printf ("\033[0mEnter:\033[17;32H");
fgets (a,10,stdin);
printf ("\033[2m\033[23;17H");
printf ("\033[37m PUT ENTER CONTINUE\033[0m");
printf ("\033[2m\033[?25l");
getchar();
system ("clear");
}
parkhata.h
void packspace(int *size)
{
char parksize[7];
printf("please enter park size:");
fgets(parksize,7,stdin);
*size=atoi(parksize);
}
void parkstart(car *a)
{
atail=ahead;
while(atail->p!=NULL)
atail=atail->p;
time(&(a->into));
atail->p=a;
printf("park success!\n");
}
void parkstop(car *a)
{
btail=bhead;
while(btail->p!=NULL)
btail=btail->p;
time(&(a->into));
btail->p=a;
printf("wait park!\n");
}
int parkadd(int size)
{
car *newcar;
newcar=(car *)malloc(sizeof(car));
if (NULL==newcar)
{
printf("add error\n!");
return -1;
}
printf("please enter plate number:");
fgets(newcar->carnum,20,stdin);
newcar->p=NULL;
atail=ahead;
while(atail->p!=NULL)
{
atail=atail->p;
size--;
}
if(size<0)
{
parkstop(newcar);
return 1;
}
else
{
parkstart(newcar);
return 0;
}
}
int parkdel()
{
int x=0;
char a[20];
car *dtail;
printf("please enter plate number: ");
fgets(a,20,stdin);
atail=ahead;dtail=atail;
if(atail->p ==NULL)
{
printf("nobay!\n");
return 0;
}
while(atail->p!=NULL)
{
atail=atail->p;
if(!(strcmp(atail->carnum,a)))
{
time_t t1;
time(&t1);
timedif(atail->into,t1);
dtail->p=atail->p;
free(atail);
atail=dtail->p;
printf("Welcome to come again!\n");
x=1;
break;
}
else
dtail=dtail->p;
}
if(x==0)
{
printf("NOT FIND!\n");
return -1;
}
btail=bhead;
if(btail->p!=NULL)
{
btail=btail->p;
bhead->p=btail->p;
btail->p=NULL;
time(&(btail->into));
atail=ahead;
while(atail->p!=NULL)
atail=atail->p;
atail->p=btail;
printf("Storage success!");
}
}
void parkcheck()
{
atail=ahead;
while(atail->p!=NULL)
{
atail=atail->p;
printf("Plate Number: %s",atail->carnum);
printf("Enter Time: ");
timenow(atail->into);
}
}
void parkcheck2()
{
btail=bhead;
while(btail->p!=NULL)
{
btail=btail->p;
printf("Plate Number: %s",btail->carnum);
printf("wait Time: ");
time_t a;
time(&a);
timedif(btail->into,a);
}
}