停车场管理系统(有注释,改了几个bug的版本)

来源:互联网 发布:在淘宝买手机好吗 编辑:程序博客网 时间:2024/04/29 00:00

Parking.h:

/***********************************************************************************                       用栈和队列实现简单的停车场管理系统***** 文    件: Parking.h* 作    者: 邹亚鹏* 部    门: 南京工程大学* 编写日期: 2012.7.18* 模块版本:* 修改记录:* ================================================================================* 版 本|  日  期  | 修改人 |* ================================================================================*      |          |        |*      |          |        |*      |          |        |* ================================================================================***********************************************************************************/#include <stdio.h>#include <time.h>#include <string.h>#include <stdlib.h>#define N 1/********************定义停车记录结构**********************/typedef struct car{    char * timer;}CAR;/********************定义队列记录结构**********************/typedef struct que{    int flt;    struct que *next;}QUE;/***********************申明函数****************************/void pushp();char *popp();void push(char *);void popg();void enterque();void outque();void mytime(char *,char *,int);void myprint();


Parking.c:

/***********************************************************************************                       用栈和队列实现简单的停车场管理系统***** 文    件: Parking.C* 作    者: 邹亚鹏* 部    门: 南京工程大学* 编写日期: 2012.7.18* 模块版本:* 修改记录:* ================================================================================* 版 本|  日  期  | 修改人 |* ================================================================================*      |          |        |*      |          |        |*      |          |        |* ================================================================================***********************************************************************************/#include "Parking.h"CAR parking[10];                        /*定义停车栈*/CAR giveway[10];                        /*定义让路栈*/int per = N;                            /*定义没秒收费*/int topp = -1;int topg = -1;QUE *front = NULL;QUE *rear = NULL;/***********************************************************************************                               入队函数*描述:停车栈满时,进入等待队列。**参数:  无**返回值:无**注意事项:**********************************************************************************/void enterque(){    QUE *newnode = (QUE *)malloc(sizeof(QUE));    if(rear == NULL)    {newnode->flt = 1;front = newnode;rear = newnode;rear->next = NULL;    }    else    {        newnode->flt = 1;rear->next = newnode;rear = newnode;rear->next = NULL;    }}/***********************************************************************************                               出队函数*描述:停车栈有空位,出队进栈。**参数:  无**返回值:无**注意事项:**********************************************************************************/void outque(){    if(front == NULL)    {        printf("没有人在等待!\n");    }    else    {        QUE *tmp = front;front->flt = 0;if(rear == front){    free(tmp);    rear = NULL;    front = NULL;    tmp = NULL;}else{    front = front->next;    free(tmp);    tmp = NULL;}    }}/***********************************************************************************                               停车栈压栈函数*描述:开始停车。**参数:  无**返回值:无**注意事项:**********************************************************************************/void pushp(){    if(topp == 9)    {        printf("停车位已满,请等待!\n");    }    else    {        topp++;        time_t timer = time(NULL);               /*获取当前机器时间*/parking[topp].timer = (char *)malloc(30);strcpy(parking[topp].timer,ctime(&timer));   /*将时间信息保存*/    }}/***********************************************************************************                               停车栈出栈函数*描述:开始离开停车栈。**参数:  无**返回值:车进入时间**注意事项:**********************************************************************************/char * popp(){    char *str = (char *)malloc(30);    if(topp == -1)    {        printf("停车位为空!\n");    }    else    {        strcpy(str,parking[topp].timer);free(parking[topp].timer);             /*出栈释放空间*/parking[topp].timer = NULL;topp--;    }    return str;                            /*开始停车时间保存*/}/***********************************************************************************                               让路栈入栈函数*描述:停车栈进让路栈。**参数:  车进入时间**返回值:无**注意事项:**********************************************************************************/void pushg(char *tm){    if(topg == 9)    {        printf("让路间已经不能在进车了!\n");    }    else    {        topg++;giveway[topg].timer = (char *)malloc(30);        strcpy(giveway[topg].timer,tm);            /*开始停车时间保存进让路栈*/    }}/***********************************************************************************                               让路栈出栈函数*描述:返回停车栈。**参数:  无**返回值:无**注意事项:**********************************************************************************/void popg(){    if(topg == -1)    {        printf("让路间还是空的哦!\n");    }    else    {        topp++;parking[topp].timer = (char *)malloc(30);        strcpy(parking[topp].timer,giveway[topg].timer);   /*开始停车时间保存返回停车栈*/topg--;    }}/***********************************************************************************                               进车函数*描述:有车来操作。**参数:  无**返回值:无**注意事项:**********************************************************************************/void incar(){    if(topp == 9)                                 /*无停车位*/    {        printf("停车位已经满!请耐心等待!\n");enterque();    }    else                                         /*有停车位*/    {        if(front == NULL)                        /*无人等车位*/{    printf("当前有空位!请停车!\n");    pushp();}else                                          /*有人等车位,进等待队列*/{    printf("停车位已满!请等待!\n");    enterque();}    }}/***********************************************************************************                               出车函数*描述:出去操作。**参数:  无**返回值:无**注意事项:**********************************************************************************/void outcar(){    int no,i,temp;    printf("请输出要出车的停车位号:");    char *tmp = (char *)malloc(30);    scanf("%d",&no);    if(no > topp)                              /*该停车位无车*/    {        printf("该车位没有车!\n");goto end;                                  /*结束*/    }    temp = topp - no;    for(i = 0; i < temp; i++)                   /*进让路栈保存*/    {        tmp = popp();pushg(tmp);    }    tmp = popp();                              /*离开*/    time_t timer = time(NULL);    printf("进来时间:%s",tmp);    printf("当前时间:%s\n",ctime(&timer));    mytime(tmp,ctime(&timer),1);               /*记时收费*/    for(i = 0;i < temp; i++)                   /*让路栈返回停车栈*/    {        popg();    }    if(front == NULL)                           /*无人在等车位*/    {        ;    }    else                                        /*有人在等车位*/    {        printf("有空位了!等待人员进入停车!\n");outque();                                   /*出队*/pushp();                                    /*进停车栈*/    }    end:    printf("");}/***********************************************************************************                               显示当前停车位函数*描述:显示停车位信息。**参数:  无**返回值:无**注意事项:**********************************************************************************/void myprint(){    int i;    time_t timer = time(NULL);    char *tmp = ctime(&timer);                          /*获取当前机器时间*/    printf("当前系统时间为:%s\n",tmp);    for(i = 0;i <= topp; i++)    {        printf("%d号车位:开始停车时间%s",i,parking[i].timer);mytime(parking[i].timer,tmp,0);                     /*显示义停时间*/    }}/***********************************************************************************                               求停车时间函数*描述:求停车时间函数。**参数:  timer1:当前时间    timer2:开始停车时间   flt:是一个标志,控制money的输出与否**返回值:无**注意事项:**********************************************************************************/void mytime(char *timer1,char *timer2,int flt){    int hour1 = (timer1[11]- '0') * 10 + (timer1[12] - '0');    int min1 = (timer1[14]- '0') * 10 + (timer1[15] - '0');    int sec1 = (timer1[17]- '0') * 10 + (timer1[18] - '0');    int hour2 = (timer2[11]- '0') * 10 + (timer2[12] - '0');    int min2 = (timer2[14]- '0') * 10 + (timer2[15] - '0');    int sec2 = (timer2[17]- '0') * 10 + (timer2[18] - '0');    int money = ((hour2 - hour1) * 60 * 60 + (min2 - min1) * 60 + (sec2 - sec1)) * per;    int hour,min,sec;    hour = hour2-hour1;    min = min2-min1;    sec = sec2 - sec1;    while(1)                                  /*转换成合法时间*/    {        if(min < 0)        {            hour = hour - 1;            min = min + 60;        }        if(sec < 0)        {            min = min - 1;    sec = sec + 60;        }if((hour >= 0) && (min >= 0) && (sec >= 0)){    break;}    }    printf("截至当前共停了:%02d:%02d:%02d\n\n",hour,min,sec);    if(flt == 1)    {        printf("消费了%d元钱!\n",money);    }}/***********************************************************************************                               菜单函数*描述:该函数用于对屏幕进行初始化。**参数:  无**返回值:无**注意事项:**********************************************************************************/void display(){    int choose;    system("clear");    printf("\n\n\n\n\n\n\n\n\n\n\n");    printf("\t\t\t   欢迎使用停车场管理系统!\n");    printf("\n\n\n\n\n\n\n\n\n\n\n");    sleep(2);    while(1)    {        system("clear");                               /*清屏*/int i;int l = 0;for(i = 0; i <= topp ; i++)                         /*动态显示车位信息*/{    printf("%d:有车\t\t",i);    l++;    if(l % 4 == 0)    {        printf("\n");    }}for(i = topp+1; i < 10; i++){    printf("%d:空\t\t",i);    l++;    if(l % 4 == 0)    {        printf("\n");    }}printf("\n\n\n\n\n");        printf("/*******************************************/\n");        printf("/*************** 1.停车 ********************/\n");        printf("/*************** 2.离开 ********************/\n");        printf("/*************** 3.查看当前以停时间*********/\n");        printf("/*************** 4.退出*********************/\n");        printf("/*******************************************/\n");printf("请输入您的选择:");scanf("%d",&choose);switch(choose){    case 1:    {                system("clear");l = 0;                                  /*动态显示车位信息*/    for(i = 0; i <= topp ; i++)        {            printf("%d:有车\t\t",i);            l++;        if(l % 4 == 0)        {            printf("\n");        }        }        for(i = topp+1; i < 10; i++)       /*一行4个*/        {            printf("%d:空\t\t",i);            l++;            if(l % 4 == 0)            {                printf("\n");            }        }        printf("\n\n\n\n\n");incar();sleep(1);break;    }    case 2:    {                system("clear");l = 0;                                   /*动态显示车位信息*/                for(i = 0; i <= topp ; i++)        {            printf("%d:有车\t\t",i);            l++;            if(l % 4 == 0)            {                printf("\n");            }        }        for(i = topp+1; i < 10; i++)        /*一行4个*/        {            printf("%d:空\t\t",i);            l++;            if(l % 4 == 0)            {                printf("\n");            }        }        l = 0;        printf("\n\n\n\n\n");        outcar();printf("请按回车键继续...\n");getchar();getchar();break;    }    case 3:    {                system("clear");        myprint();printf("请按回车键继续...\n");getchar();getchar();        break;    }    case 4:    {                system("clear");                printf("\n\n\n\n\n\n\n\n\n\n\n");printf("\t\t\t\t欢迎再次使用!\n");                printf("\n\n\n\n\n\n\n\n\n\n\n");sleep(2);system("clear");        exit(0);        break;    }    default:    {        break;    }}    }}/***********************************************************************************                               菜单函数*描述:该函数用于对屏幕进行初始化。**参数:  无**返回值:无**注意事项:**********************************************************************************/int main(){    display();    return 0;}


 

原创粉丝点击