C 停车库程序

来源:互联网 发布:北塔软件河南 编辑:程序博客网 时间:2024/04/29 03:21
问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达
的先后次序停放。若车场满了,车要停在门外的便道上等候,一旦有车走,则便
道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车要先退
出,待它走后在依次进入。汽车离开时按停放时间收费。
基本功能要求:
(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);


        }
}