C语言实现停车场项目

本文实例为大家分享了C语言实现停车场项目的具体代码,供大家参考,具体内容如下

停车场项目需求

问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放。若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车要先退出,待它走后在依次进入。汽车离开时按停放时间收费。

基本功能要求:

(1)建立三个数据结构分别是:停放栈、让路栈、等候队列。
(2)输入数据模拟管理过程,数据(入或出,车号)

功能描述:进车登记、出车登记、按车牌号查询停车车辆信息、查询出入车记录、查询场内车辆信息、查询等候车辆信息、退出系统。

(1)linux系统编写(链表、栈、队列);
(2)进车登记:登记车牌号以及入场时间;
(3)出车登记:计算出停车时间,记录车辆车牌;
(4)按车牌号查询车辆信息:停车时间,是否来过停车场,是否还在停车场
(5)查询出入记录:所有车辆,包括已经离开的
(6)查询场内车辆信息:列出所有场内车辆信息
(7)查询等候车辆信息:显示等候车辆数量以及所有车牌号
(8)退出系统。

分析,底层需要写以下内容:

两个栈,停放栈(车牌号,出场时间,入场时间)[初始化,判断是否为空,出栈,入栈,查栈] 让路栈(车牌号)[初始化,出栈,入栈,判断是否为空]
一个队列,[初始化,出队列,入队列](车牌号)
一个链表,(车牌号,出入厂状态,入场时间,出场时间)[初始化,入链表,查找数据,遍历打印]

Windows下代码

工程分为三个文件,分别是main.c fun.c pack.h

main.c:

#include<stdio.h>
#include"park.h"
#include<stdlib.h>
#include<time.h>
#include<string.h>
/*
main函数
功能:显示界面,判断用户要使用哪个功能。
入参:无
返回值:无
*/
void main() 
{
    int ret=0;
    char number[10];
    park_init();
    //所有数据结构初始化
    //存放用户输入的字符
    while(1) 
    {
        /*显示界面*/
        printf("##################          停车场  v1.0           ##################\n");
        printf("#                                                                   #\n");
        printf("#####################################################################\n");
        printf("#                                                                   #\n");
        printf("#           1-----------------进车登记-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           2-----------------出车登记-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           3-----------------车辆查询-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           4-----------------出入记录-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           5-----------------场内车辆-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           6-----------------等候车辆-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           7-----------------退出系统-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#####################################################################\n");
        printf("#                                                  201808           #\n");
        printf("#####################################################################\n");
        gets( number );
        switch ( *number ) //选择需要什么功能 
        {
            case '1': //进车登记 
            {
                system("cls");
                ret=car_in();
                if(ret==FAILURE) 
                {
                    printf("输入错误!");
                }
                printf("入车成功!\n");
                getchar();
                system("cls");
            }
            break;
            case '2': //出车登记 
            {
                system("cls");
                ret=car_out();
                if(ret==FAILURE) 
                {
                    printf("输入错误!\n");
                }
                printf("出车成功!\n");
                getchar();
                system("cls");
            }
            break;
            case '3': //查找车辆 
            {
                system("cls");
                ret=find_car();
                if(ret==FAILURE) 
                {
                    printf("输入错误!\n");
                }
                //printf("-------------------------------------------------------------------------------------------------------------");
                getchar();
                system("cls");
            }
            break;
            case '4': //出入记录 
            {
                system("cls");
                ret=record_all();
                if(ret==FAILURE) 
                {
                    printf("输入错误!\n");
                }
                getchar();
                system("cls");
            }
            break;
            case '5': //场内车辆 
            {
                system("cls");
                ret=car_park();
                if(ret==FAILURE) 
                {
                    printf("输入错误!\n");
                }
                getchar();
                system("cls");
            }
            break;
            case '6': 
            {
                system("cls");
                //等候车辆
                ret=Car_wait();
                if(ret==FAILURE) 
                {
                    printf("输入错误!\n");
                }
                getchar();
                system("cls");
            }
            break;
            case '7':
                        printf("欢迎下次使用\n");
            break;
            default:
                            system("cls");
            printf( "操作错误,此项不存在!\n" );
            getchar();
            system("cls");
            break;
        }
        if ( strcmp( number, "7" ) == 0 )
                        break;
    }
}

park.h

#ifndef _PARK_H
#define _PAEK_H
#include <time.h>
#include <stdio.h>
#define SUCCESS 10000
#define FAILURE 10001
#define TRUE 10002
#define FALSE 10003
#define SIZE 6   //车场大小
/*汽车信息,节点结构体
*/
struct car_info 
{
    char name[10];
    //  车牌
    time_t time1;
    //  入场时间
    time_t time2;
    //  出场时间
}
;
typedef struct car_info CAR_I;
/*停放,让路顺序栈结构体
需要的参数为 :车牌号,出场时间,入场时间
配套的子函数 :初始化,判断是否为空,出栈,入栈,查栈*/
struct sequencestack 
{
    int top;
    CAR_I *date;
}
;
typedef struct sequencestack ST;
/*队列节点结构体
需要的参数为 :车牌号,下一个节点地址
*/
struct car_wait 
{
    char name[10];
    struct car_wait *next;
}
;
typedef struct car_wait CAR_W;
/*等候链式队列结构
需要的参数为 :头指针,尾指针
配套的子函数 :初始化,出队列,入队列
*/
struct linkqueue 
{
    CAR_W *front;
    CAR_W *rear;
}
;
typedef struct linkqueue LQ;
/*存放所有信息的链表
需要的参数为:车牌号,出入厂状态,入场时间,出场时间,下一个节点的地址
需要的函数为:初始化,入链表,查找数据,遍历打印
*/
struct all_info 
{
    char name[10];
    char sit[10];
    time_t time1;
    //  入场时间
    time_t time2;
    //  出场时间
    struct all_info *next;
}
;
typedef struct all_info A_INFO;
int car_in();
int car_out();
int find_car();
int record_all();
int car_park();
int Car_wait();
int STinit(ST **q);
int STempty(ST *q);
int STinsert(ST *q, char na[] ,time_t time);
int STout(ST *q,char *a, time_t *time);
int LQinit(LQ **q);
int LQinsert(LQ *q, char na[]);
int LQout(LQ *q, char *a);
int LLinit(A_INFO **q);
int LLinsert(A_INFO *q, int n, char na[], char s[], time_t timeA, time_t timeB);
int LLfind(A_INFO *q, char na[]);
int LLget(A_INFO *q, int n, A_INFO **k);
int LLtra(A_INFO *q);
int parkadd(CAR_I car[], char na[], time_t time);
int parkdel(CAR_I car[] ,char na[],time_t time);
int print(CAR_I car[]);
int park_init();
struct tm * local_time(time_t *tmpcal_ptr);
int exchange(A_INFO *q, char na[], char s[]);
#endif

fun.c

#include<stdio.h>
#include"park.h"
#include<stdlib.h> 
#include<time.h>
#include<string.h>
int num = 0;
//场内车辆数
ST *stack_park;
//停放栈
ST *stack_exchange;
//交换栈
LQ *queue_wait;
//等候队列
A_INFO  *all_car;
//存放所有信息的链表
/*
顺序栈初始化:
    参数:结构体指针
*/
int STinit(ST **q) 
{
    if(q == NULL) 
    {
        return FAILURE;
    }
    *q = (ST *)malloc(sizeof(ST)*1);
    //为结构体指针分配空间
    (*q)->top = -1;
    (*q)->date = (CAR_I *)malloc(sizeof(CAR_I)*SIZE);
    //为内容指针分配空间
    return SUCCESS;
}
/*
顺序栈判断是否为空
    参数:结构体指针
*/
int STempty(ST *q) 
{
    if(q == NULL) 
    {
        return FAILURE;
    }
    return(q->top == -1)? TRUE:FALSE;
    //空返回true   不空返回false
}
/*
顺序栈入栈
    参数:结构体指针,车牌,入场时间
*/
int STinsert(ST *q, char na[] ,time_t time) 
{
    if(q == NULL || q->top >= SIZE-1) 
    {
        return FAILURE;
    }
    strcpy( q->date[q->top+1].name, na );
    q->date[q->top+1].time1 = time;
    q->top++;
    return SUCCESS;
}
/*
结构体出栈
    参数:结构体指针,保存车牌的形参,保存入场时间的结构体指针
*/
int STout(ST *q,char *a, time_t *time) 
{
    if(q == NULL) 
    {
        return FAILURE;
        //错误返回failure
    }
    if(q->top == -1) 
    {
        return FALSE;
        //空返回false
    }
    strcpy(a, q->date[q->top].name);
    //a被修改为出场的车牌
    *time = q->date[q->top].time1;
    //time被修改为入场时间
    q->top--;
    return SUCCESS;
}
/*
链式队列初始化
    参数:队列的结构体指针
*/
int LQinit(LQ **q) 
{
    CAR_W (*p);
    (*q) = (LQ *)malloc(sizeof(LQ));
    if( (*q) == NULL ) 
    {
        return FAILURE;
    }
    p = (CAR_W *)malloc(sizeof(CAR_W));
    if(p == NULL) 
    {
        return FAILURE;
    }
    p->next = NULL;
    (*q)->front = (*q)->rear =p;
    return SUCCESS;
}
/*
链式队列入队
    参数:队列的结构体指针,车牌
*/
int LQinsert(LQ *q, char na[]) 
{
    CAR_W *p;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = (CAR_W *)malloc(sizeof(CAR_W));
    if (NULL == p) 
    {
        return FAILURE;
    }
    strcpy(p->name, na);
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
    return SUCCESS;
}
/*
链式队列出队
    参数:队列结构体指针
*/
int LQout(LQ *q, char *a) 
{
    //  char na[10];
    CAR_W *p = q->front->next;
    if (NULL == q ) 
    {
        return FAILURE;
    }
    if(q->rear == q->front) 
    {
        return FALSE;
    }
    strcpy(a, p->name);
    q->front->next = p->next;
    if (NULL == p->next) 
    {
        q->rear = q->front;
        //用参数a保存出去的车牌
    }
    free(p);
    return SUCCESS;
}
/*
链表初始化
    参数:头指针
*/
int LLinit(A_INFO **q) 
{
    (*q) = (A_INFO *)malloc(sizeof(A_INFO));
    if( (*q) == NULL) 
    {
        return FAILURE;
    }
    (*q)->next = NULL;
    return SUCCESS;
}
/*
   链表插入(头插)
        参数:头指针,插入的位置(1), 车牌, 状态, 入场时间, 出场时间
*/
int LLinsert(A_INFO *q, int n, char na[], char s[], time_t timeA, time_t timeB) 
{
    A_INFO *l;
    A_INFO *p = q;
    int k = 1;
    if (NULL == q) 
    {
        return FAILURE;
    }
    while(k < n && p != NULL) 
    {
        p=p->next;
        k++;
    }
    if(k > n || p == NULL) 
    {
        return FAILURE;
    }
    l = (A_INFO *)malloc(sizeof(A_INFO)*1);
    if (NULL == l) 
    {
        return FAILURE;
    }
    strcpy(l->name, na);
    strcpy(l->sit ,s);
    l->time1 = timeA;
    l->time2 = timeB;
    l->next = p->next;
    p->next = l;
    return SUCCESS;
}
/*
链表定位
    参数: 头指针,车牌
*/
int LLfind(A_INFO *q, char na[]) 
{
    A_INFO *p;
    int len;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = q->next;
    len = 1;
    while(p) 
    {
        if(strcmp(p->name, na) == 0) 
        {
            return len;
            //找到返回位置
        }
        p = p->next;
        len++;
    }
    return FALSE;
    //未找到返回false
}
/*
链表查询
        参数:头指针,位置
*/
int LLget(A_INFO *q, int n, A_INFO **k) 
{
    int i;
    A_INFO *p = q;
    if (NULL == q) 
    {
        return FAILURE;
    }
    for (i = 0; i < n && p != NULL ; i++) 
    {
        p = p->next;
    }
    if(!p) 
    {
        return FAILURE;
    }
    (*k) = p;
    //用k指针保存找到的结构体地址
    return SUCCESS;
}
/*
链表遍历
    参数:头指针
*/
int LLtra(A_INFO *q) 
{
    double cost;
    struct tm *time1;
    struct tm *time2;
    time_t timenow;
    A_INFO *p;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = q;
    while (p->next) 
    {
        p = p->next;
        ////////////////////记得改这里
        time1 = local_time(&p->time1);
        if(time1 != NULL) 
        {
            printf("车牌:%s   状态:%s   入场时间:%d:%d:%d",p->name,p->sit, time1->tm_hour, time1->tm_min, time1->tm_sec);
            time2 = local_time(&p->time2);
            if(time2 != NULL) 
            {
                cost = difftime(p->time2,p->time1);
                printf("  出场时间:%d:%d:%d", time2->tm_hour, time2->tm_min, time2->tm_sec);
                printf("  停车时间:%f秒\n",cost);
                printf("-------------------------------------------------------------------------------------------------------------\n");
            } else 
            {
                time(&timenow);
                cost = difftime(timenow,p->time1);
                printf("  停车时间为:%f秒\n" ,cost);
                printf("-------------------------------------------------------------------------------------------------------------\n");
                //return 0;
            }
        } else 
        {
            printf("车牌:%s  排队中\n",p->name);
            printf("-------------------------------------------------------------------------------------------------------------\n");
            //  return 0;
        }

    }
    return SUCCESS;
}
/*
结构体数组增加
    参数:结构体数组, 车牌,入场时间(下标使用全局变量-车的数量)
*/
int parkadd(CAR_I car[], char na[], time_t time) 
{
    if(num>=6) 
    {
        return FAILURE;
    }
    strcpy(car[num].name, na);
    car[num].time1 = time;
    num++;
    return SUCCESS;
}
/*
结构体数组减少
    参数:同上(时间为出厂)
*/
int parkdel(CAR_I car[] ,char na[],time_t time) 
{
    int i;
    if(num == 0) 
    {
        return FAILURE;
    }
    for (i = 0; i < num; i++) 
    {
        if(strcmp(car[i].name, na)==0) 
        {
            for (; i<num; i++) 
            {
                car[i] = car[i+1];
            }
            break;
        }
    }
    num--;
    return SUCCESS;
}
/*
打印所有
    参数:结构体数组
*/
int print(CAR_I car[]) 
{
    int i;
    for (i = 0; i<num; i++) 
    {
        printf("场内车辆信息");
    }
    return SUCCESS;
}
/*
修改链表状态函数
    参数 :头指针,所需修改的车牌,修改为的状态
*/
int exchange(A_INFO *q, char na[], char s[]) 
{
    A_INFO *p;
    int len;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = q->next;
    len = 1;
    while(p) 
    {
        if(strcmp(p->name, na) == 0) 
        {
            strcpy( p->sit, s ) ;
            return SUCCESS;
        }
        p = p->next;
        len++;
    }
    return FALSE;
}
/*
修改链表time2函数
    参数 :头指针,所需修改的车牌,修改为的time
*/
int exchange1(A_INFO *q, char na[], time_t tmpcal_ptr) 
{
    A_INFO *p;
    int len;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = q->next;
    len = 1;
    while(p) 
    {
        if(strcmp(p->name, na) == 0) 
        {
            p->time2 = tmpcal_ptr;
            return SUCCESS;
        }
        p = p->next;
        len++;
    }
    return FALSE;
}
/*
修改链表time1函数
    参数 :头指针,所需修改的车牌,修改为的time
*/
int exchange2(A_INFO *q, char na[], time_t tmpcal_ptr) 
{
    A_INFO *p;
    int len;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = q->next;
    len = 1;
    while(p) 
    {
        if(strcmp(p->name, na) == 0) 
        {
            p->time1 = tmpcal_ptr;
            return SUCCESS;
        }
        p = p->next;
        len++;
    }
    return FALSE;
}
/*////////////////////////////////////
进车登记函数
功能:车辆进入登记,修改各存放结构体中的信息。
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int car_in() 
{
    int i;
    char a[12];
    //记录车牌号
    int ret;
    time_t tmpcal_ptr;
    time_t tmpcal_ptr1;
    time_t tmpcal_ptr2;
    //为了给出车时间赋空值
    printf("请输入车牌号:\n");
    gets(a);
    time(&tmpcal_ptr);
    ret=STinsert(stack_park, a ,tmpcal_ptr);
    if(ret==FAILURE) 
    {
        printf("停车场已满,排队中\n");
        ret=LQinsert(queue_wait, a);
        LLinsert(all_car, 1, a, "排队中",tmpcal_ptr1, tmpcal_ptr2);
        // exchange(all_car, a, "排队中");
        if(FAILURE==ret) 
        {
            return FAILURE;
        }
    } else 
    {
        LLinsert(all_car, 1, a, "在场中",tmpcal_ptr, tmpcal_ptr2);
    }
    for (i=0; i<stack_park->top+1; i++) 
    {
        printf("车牌 :%s\n",stack_park->date[i].name);
    }
    return SUCCESS;
}
/*////////////////////////////////////
出车登记函数
功能:车辆出场登记,修改各存放结构体中的信息。
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int car_out() 
{
    char a[12];
    char b[12];
    char c[12];
    int ret;
    time_t tmpcal_ptr3;
    //出场时间
    time_t tmpcal_ptr4;
    //
    printf("\n请输入出车车牌号:\n\n");
    gets(a);
    time(&tmpcal_ptr3);
    //  ret =STout(stack_park, b, &tmpcal_ptr4 );
    //  while(strcmp(b,a)!=0)
    while((ret = STout(stack_park, b, &tmpcal_ptr4 ))!=FALSE) 
    {
        if(strcmp(b,a)==0) 
        {
            break;
        }
        STinsert(stack_exchange, b, tmpcal_ptr4);
        //  ret =STout(stack_park, b, &tmpcal_ptr4 );
    }
    if(ret == FALSE) 
    {
        printf("未找到该车!\n\n");
        while( (ret = STout(stack_exchange,b,&tmpcal_ptr4)) != FALSE) 
        {
            STinsert(stack_park, b,tmpcal_ptr4 );
        }
        return FAILURE;
    } else 
    {
        ret = exchange(all_car , b ,"出场了");
        ret = exchange1(all_car ,b ,tmpcal_ptr3);
        while( (ret = STout(stack_exchange,b,&tmpcal_ptr4)) != FALSE) 
        {
            STinsert(stack_park, b,tmpcal_ptr4 );
        }
        if((ret = LQout(queue_wait, c))!=FALSE) 
        {
            time(&tmpcal_ptr4);
            STinsert(stack_park, c,tmpcal_ptr4);
            ret = exchange(all_car , c ,"在场中");
            ret = exchange2(all_car ,c ,tmpcal_ptr3);
        }
    }
    return SUCCESS;
}
/*////////////////////////////////////
寻找车辆函数
功能:在存放信息的链表中寻找车辆。
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int find_car() 
{
    int len;
    char a[12];
    double cost;
    struct tm *time1;
    struct tm *time2;
    time_t timenow;
    A_INFO *k;
    int ret;
    printf("请输入你要查询的车牌:\n");
    gets(a);
    len = LLfind(all_car, a);
    if(len == FALSE) 
    {
        printf("未来过\n\n");
        return FAILURE;
    }
    ret = LLget(all_car, len, &k);
    time1 = local_time(&k->time1);
    if(time1 != NULL)
    {
    printf("车牌:%s\n状态:%s\n入场时间:%d:%d:%d\n",k->name,k->sit, time1->tm_hour, time1->tm_min, time1->tm_sec);
    time2 = local_time(&k->time2);
    if(time2 != NULL) 
    {
        cost = difftime(k->time2,k->time1);
        printf("出场时间:%d:%d:%d\n", time2->tm_hour, time2->tm_min, time2->tm_sec);
        printf("停车时间:%f\n秒",cost);
    } else 
    {
        time(&timenow);
        cost = difftime(timenow,k->time1);
        printf("出场时间:未出场\n停车时间:%f秒\n",cost);
        return 0;
    }
    }
    else
        printf("等候中");
    return SUCCESS;
}////////////////////////
查看出入登记函数
功能:遍历打印存放所有信息的链表
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int record_all() 
{
    LLtra(all_car);
    return SUCCESS;
}
/*////////////////////////////////////
查看停车场内车辆信息函数
功能:遍历打印存放停车场内信息的数组
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int car_park() 
{
    int i;
    double cost;
    struct tm *time1;
    time_t timenow;
    for (i=0; i<stack_park->top+1; i++) 
    {
        time1 = local_time(&stack_park->date[i].time1);
        printf("车牌:%s     入场时间:%d:%d:%d",stack_park->date[i].name, time1->tm_hour, time1->tm_min, time1->tm_sec);
        time(&timenow);
        cost = difftime(timenow,stack_park->date[i].time1);
        printf("  未出场,停车时间为:%f秒\n\n",cost);
        printf("-------------------------------------------------------------------------------------------------------------\n");
    }
    return SUCCESS;
}
/*////////////////////////////////////
查看等候队列内车辆信息函数
功能:遍历打印等候队列中车辆
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int Car_wait() 
{
    CAR_W *p;
    p = queue_wait->front;
    while(p->next) 
    {
        p=p->next;
        printf("车牌:%s\n\n",p->name);
    }
    return SUCCESS;
}
/*////////////////////////////////////
初始化函数
功能:初始化
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int park_init() 
{
    STinit(&stack_park);
    STinit(&stack_exchange);
    LQinit(&queue_wait);
    LLinit(&all_car);
    return SUCCESS;
}
/*////////////////////////////////////
时间函数
功能:转换成当地时间
入参:time_t *tmpcal_ptr(等待转换的时间)
返回值:time_local(当地时间)
////////////////////////////////////*/
struct tm * local_time(time_t *tmpcal_ptr) 
{
    struct tm *time_local = NULL;
    time_local = localtime(tmpcal_ptr);
    //转换成当地时间
    return time_local;
}

现象:

linux下代码

分为三个文件

main_u.c fun_u.c park_u.h

main_u.c

#include<stdio.h>
#include"park_u.h"
#include<stdlib.h>
#include<time.h>
#include<string.h>
/*
main函数
功能:显示界面,判断用户要使用哪个功能。
入参:无
返回值:无
*/
void main() 
{
    int ret=0;
    char number[10];
    park_init();
    //所有数据结构初始化
    //存放用户输入的字符
    while(1) 
    {
        /*显示界面*/
        printf("##################          停车场  v1.0           ##################\n");
        printf("#                                                                   #\n");
        printf("#####################################################################\n");
        printf("#                                                                   #\n");
        printf("#           1-----------------进车登记-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           2-----------------出车登记-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           3-----------------车辆查询-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           4-----------------出入记录-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           5-----------------场内车辆-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           6-----------------等候车辆-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#           7-----------------退出系统-------------------           #\n");
        printf("#                                                                   #\n");
        printf("#####################################################################\n");
        printf("#                                                  201808           #\n");
        printf("#####################################################################\n");
        gets( number );
        switch ( *number ) //选择需要什么功能 
        {
            case '1': //进车登记 
            {
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                ret=car_in();
                if(ret==FAILURE) 
                {
                    printf("输入错误!");
                }
                printf("入车成功!\n");
                getchar();
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            }
            break;
            case '2': //出车登记 
            {
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                ret=car_out();
                if(ret!=FAILURE) 
                {
                    printf("出车成功!\n");  
                }

                getchar();
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            }
            break;
            case '3': //查找车辆 
            {
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                ret=find_car();
                if(ret==FAILURE) 
                {
                    printf("输入错误!\n");
                }
                //printf("-------------------------------------------------------------------------------------------------------------");
                getchar();
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            }
            break;
            case '4': //出入记录 
            {
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                ret=record_all();
                if(ret==FAILURE) 
                {
                    printf("输入错误!\n");
                }
                getchar();
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            }
            break;
            case '5': //场内车辆 
            {
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                ret=car_park();
                if(ret==FAILURE) 
                {
                    printf("输入错误!\n");
                }
                getchar();
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            }
            break;
            case '6': 
            {
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                //等候车辆
                ret=Car_wait();
                if(ret==FAILURE) 
                {
                    printf("输入错误!\n");
                }
                getchar();
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            }
            break;
            case '7':
                        printf("欢迎下次使用\n");
            break;
            default:
                            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            printf( "操作错误,此项不存在!\n" );
            getchar();
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            break;
        }
        if ( strcmp( number, "7" ) == 0 )
                        break;
    }
}

fun_u.c

#include<stdio.h>
#include"park_u.h"
#include<stdlib.h> 
#include<time.h>
#include<string.h>
int num = 0;
//场内车辆数
ST *stack_park;
//停放栈
ST *stack_exchange;
//交换栈
LQ *queue_wait;
//等候队列
A_INFO  *all_car;
//存放所有信息的链表
/*
顺序栈初始化:
    参数:结构体指针
*/
int STinit(ST **q) 
{
    if(q == NULL) 
    {
        return FAILURE;
    }
    *q = (ST *)malloc(sizeof(ST)*1);
    //为结构体指针分配空间
    (*q)->top = -1;
    (*q)->date = (CAR_I *)malloc(sizeof(CAR_I)*SIZE);
    //为内容指针分配空间
    return SUCCESS;
}
/*
顺序栈判断是否为空
    参数:结构体指针
*/
int STempty(ST *q) 
{
    if(q == NULL) 
    {
        return FAILURE;
    }
    return(q->top == -1)? TRUE:FALSE;
    //空返回true   不空返回false
}
/*
顺序栈入栈
    参数:结构体指针,车牌,入场时间
*/
int STinsert(ST *q, char na[] ,time_t time) 
{
    if(q == NULL || q->top >= SIZE-1) 
    {
        return FAILURE;
    }
    strcpy( q->date[q->top+1].name, na );
    q->date[q->top+1].time1 = time;
    q->top++;
    return SUCCESS;
}
/*
结构体出栈
    参数:结构体指针,保存车牌的形参,保存入场时间的结构体指针
*/
int STout(ST *q,char *a, time_t *time) 
{
    if(q == NULL) 
    {
        return FAILURE;
        //错误返回failure
    }
    if(q->top == -1) 
    {
        return FALSE;
        //空返回false
    }
    strcpy(a, q->date[q->top].name);
    //a被修改为出场的车牌
    *time = q->date[q->top].time1;
    //time被修改为入场时间
    q->top--;
    return SUCCESS;
}
/*
链式队列初始化
    参数:队列的结构体指针
*/
int LQinit(LQ **q) 
{
    CAR_W (*p);
    (*q) = (LQ *)malloc(sizeof(LQ));
    if( (*q) == NULL ) 
    {
        return FAILURE;
    }
    p = (CAR_W *)malloc(sizeof(CAR_W));
    if(p == NULL) 
    {
        return FAILURE;
    }
    p->next = NULL;
    (*q)->front = (*q)->rear =p;
    return SUCCESS;
}
/*
链式队列入队
    参数:队列的结构体指针,车牌
*/
int LQinsert(LQ *q, char na[]) 
{
    CAR_W *p;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = (CAR_W *)malloc(sizeof(CAR_W));
    if (NULL == p) 
    {
        return FAILURE;
    }
    strcpy(p->name, na);
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
    return SUCCESS;
}
/*
链式队列出队
    参数:队列结构体指针
*/
int LQout(LQ *q, char *a) 
{
    //  char na[10];
    CAR_W *p = q->front->next;
    if (NULL == q ) 
    {
        return FAILURE;
    }
    if(q->rear == q->front) 
    {
        return FALSE;
    }
    strcpy(a, p->name);
    q->front->next = p->next;
    if (NULL == p->next) 
    {
        q->rear = q->front;
        //用参数a保存出去的车牌
    }
    free(p);
    return SUCCESS;
}
/*
链表初始化
    参数:头指针
*/
int LLinit(A_INFO **q) 
{
    (*q) = (A_INFO *)malloc(sizeof(A_INFO));
    if( (*q) == NULL) 
    {
        return FAILURE;
    }
    (*q)->next = NULL;
    return SUCCESS;
}
/*
   链表插入(头插)
        参数:头指针,插入的位置(1), 车牌, 状态, 入场时间, 出场时间
*/
int LLinsert(A_INFO *q, int n, char na[], char s[], time_t timeA, time_t timeB) 
{
    A_INFO *l;
    A_INFO *p = q;
    int k = 1;
    if (NULL == q) 
    {
        return FAILURE;
    }
    while(k < n && p != NULL) 
    {
        p=p->next;
        k++;
    }
    if(k > n || p == NULL) 
    {
        return FAILURE;
    }
    l = (A_INFO *)malloc(sizeof(A_INFO)*1);
    if (NULL == l) 
    {
        return FAILURE;
    }
    strcpy(l->name, na);
    strcpy(l->sit ,s);
    l->time1 = timeA;
    l->time2 = timeB;
    l->next = p->next;
    p->next = l;
    return SUCCESS;
}
/*
链表定位
    参数: 头指针,车牌
*/
int LLfind(A_INFO *q, char na[]) 
{
    A_INFO *p;
    int len;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = q->next;
    len = 1;
    while(p) 
    {
        if(strcmp(p->name, na) == 0) 
        {
            return len;
            //找到返回位置
        }
        p = p->next;
        len++;
    }
    return FALSE;
    //未找到返回false
}
/*
链表查询
        参数:头指针,位置
*/
int LLget(A_INFO *q, int n, A_INFO **k) 
{
    int i;
    A_INFO *p = q;
    if (NULL == q) 
    {
        return FAILURE;
    }
    for (i = 0; i < n && p != NULL ; i++) 
    {
        p = p->next;
    }
    if(!p) 
    {
        return FAILURE;
    }
    (*k) = p;
    //用k指针保存找到的结构体地址
    return SUCCESS;
}
/*
链表遍历
    参数:头指针
*/
int LLtra(A_INFO *q) 
{
    double cost;
    struct tm *time1;
    struct tm *time2;
    time_t timenow=0;
    A_INFO *p;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = q;
    while (p->next) 
    {
        p = p->next;
        time1 = local_time(&p->time1);
        if(time1 != NULL) 
        {
            printf("车牌:%s   状态:%s   入场时间:%d:%d:%d",p->name,p->sit, time1->tm_hour, time1->tm_min, time1->tm_sec);
            time2 = local_time(&p->time2);
            if(!(time2->tm_hour==8&&time2->tm_min==0&&time2->tm_sec==0)) 
            {
                cost = difftime(p->time2,p->time1);
                printf("  出场时间:%d:%d:%d", time2->tm_hour, time2->tm_min, time2->tm_sec);
                printf("  停车时间:%f秒\n",cost);
                printf("-------------------------------------------------------------------------------------------------------------\n");
            } else 
            {
                time(&timenow);
                cost = difftime(timenow,p->time1);
                printf("  停车时间为:%f秒\n" ,cost);
                printf("-------------------------------------------------------------------------------------------------------------\n");
                //return 0;
            }
        } else 
        {
            printf("车牌:%s  排队中\n",p->name);
            printf("-------------------------------------------------------------------------------------------------------------\n");
            //  return 0;
        }

    }
    return SUCCESS;
}
/*
结构体数组增加
    参数:结构体数组, 车牌,入场时间(下标使用全局变量-车的数量)
*/
int parkadd(CAR_I car[], char na[], time_t time) 
{
    if(num>=6) 
    {
        return FAILURE;
    }
    strcpy(car[num].name, na);
    car[num].time1 = time;
    num++;
    return SUCCESS;
}
/*
结构体数组减少
    参数:同上(时间为出厂)
*/
int parkdel(CAR_I car[] ,char na[],time_t time) 
{
    int i;
    if(num == 0) 
    {
        return FAILURE;
    }
    for (i = 0; i < num; i++) 
    {
        if(strcmp(car[i].name, na)==0) 
        {
            for (; i<num; i++) 
            {
                car[i] = car[i+1];
            }
            break;
        }
    }
    num--;
    return SUCCESS;
}
/*
打印所有
    参数:结构体数组
*/
int print(CAR_I car[]) 
{
    int i;
    for (i = 0; i<num; i++) 
    {
        printf("场内车辆信息");
    }
    return SUCCESS;
}
/*
修改链表状态函数
    参数 :头指针,所需修改的车牌,修改为的状态
*/
int exchange(A_INFO *q, char na[], char s[]) 
{
    A_INFO *p;
    int len;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = q->next;
    len = 1;
    while(p) 
    {
        if(strcmp(p->name, na) == 0) 
        {
            strcpy( p->sit, s ) ;
            return SUCCESS;
        }
        p = p->next;
        len++;
    }
    return FALSE;
}
/*
修改链表time2函数
    参数 :头指针,所需修改的车牌,修改为的time
*/
int exchange1(A_INFO *q, char na[], time_t tmpcal_ptr) 
{
    A_INFO *p;
    int len;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = q->next;
    len = 1;
    while(p) 
    {
        if(strcmp(p->name, na) == 0) 
        {
            p->time2 = tmpcal_ptr;
            return SUCCESS;
        }
        p = p->next;
        len++;
    }
    return FALSE;
}
/*
修改链表time1函数
    参数 :头指针,所需修改的车牌,修改为的time
*/
int exchange2(A_INFO *q, char na[], time_t tmpcal_ptr) 
{
    A_INFO *p;
    int len;
    if (NULL == q) 
    {
        return FAILURE;
    }
    p = q->next;
    len = 1;
    while(p) 
    {
        if(strcmp(p->name, na) == 0) 
        {
            p->time1 = tmpcal_ptr;
            return SUCCESS;
        }
        p = p->next;
        len++;
    }
    return FALSE;
}
/*////////////////////////////////////
进车登记函数
功能:车辆进入登记,修改各存放结构体中的信息。
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int car_in() 
{
    int i;
    char a[12];
    //记录车牌号
    int ret;
    time_t tmpcal_ptr;
    time_t tmpcal_ptr1;
    time_t tmpcal_ptr2;
    //为了给出车时间赋空值
    printf("请输入车牌号:\n");
    gets(a);
    time(&tmpcal_ptr);
    ret=STinsert(stack_park, a ,tmpcal_ptr);
    if(ret==FAILURE) 
    {
        printf("停车场已满,排队中\n");
        ret=LQinsert(queue_wait, a);
        LLinsert(all_car, 1, a, "排队中",tmpcal_ptr1, tmpcal_ptr2);
        // exchange(all_car, a, "排队中");
        if(FAILURE==ret) 
        {
            return FAILURE;
        }
    } else 
    {
        LLinsert(all_car, 1, a, "在场中",tmpcal_ptr, tmpcal_ptr2);
    }
    for (i=0; i<stack_park->top+1; i++) 
    {
        printf("车牌 :%s\n",stack_park->date[i].name);
    }
    return SUCCESS;
}
/*////////////////////////////////////
出车登记函数
功能:车辆出场登记,修改各存放结构体中的信息。
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int car_out() 
{
    char a[12];
    char b[12];
    char c[12];
    int ret;
    time_t tmpcal_ptr3;
    //出场时间
    time_t tmpcal_ptr4;
    //
    printf("\n请输入出车车牌号:\n\n");
    gets(a);
    time(&tmpcal_ptr3);
    //  ret =STout(stack_park, b, &tmpcal_ptr4 );
    //  while(strcmp(b,a)!=0)
    while((ret = STout(stack_park, b, &tmpcal_ptr4 ))!=FALSE) 
    {
        if(strcmp(b,a)==0) 
        {
            break;
        }
        STinsert(stack_exchange, b, tmpcal_ptr4);
        //  ret =STout(stack_park, b, &tmpcal_ptr4 );
    }
    if(ret == FALSE) 
    {
        printf("未找到该车!\n\n");
        while( (ret = STout(stack_exchange,b,&tmpcal_ptr4)) != FALSE) 
        {
            STinsert(stack_park, b,tmpcal_ptr4 );
        }
        return FAILURE;
    } else 
    {
        ret = exchange(all_car , b ,"出场了");
        ret = exchange1(all_car ,b ,tmpcal_ptr3);
        while( (ret = STout(stack_exchange,b,&tmpcal_ptr4)) != FALSE) 
        {
            STinsert(stack_park, b,tmpcal_ptr4 );
        }
        if((ret = LQout(queue_wait, c))!=FALSE) 
        {
            time(&tmpcal_ptr4);
            STinsert(stack_park, c,tmpcal_ptr4);
            ret = exchange(all_car , c ,"在场中");
            ret = exchange2(all_car ,c ,tmpcal_ptr3);
        }
    }
    return SUCCESS;
}
/*////////////////////////////////////
寻找车辆函数
功能:在存放信息的链表中寻找车辆。
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int find_car() 
{
    int len;
    char a[12];
    double cost;
    struct tm *time1;
    struct tm *time2;
    time_t timenow;
    A_INFO *k;
    int ret;
    printf("请输入你要查询的车牌:\n");
    gets(a);
    len = LLfind(all_car, a);
    if(len == FALSE) 
    {
        printf("未来过\n\n");
        return FAILURE;
    }
    ret = LLget(all_car, len, &k);
    time1 = local_time(&k->time1);
    if(time1 != NULL)
    {
    printf("车牌:%s\n状态:%s\n入场时间:%d:%d:%d\n",k->name,k->sit, time1->tm_hour, time1->tm_min, time1->tm_sec);
    time2 = local_time(&k->time2);
    if(time2 != NULL) 
    {
        cost = difftime(k->time2,k->time1);
        printf("出场时间:%d:%d:%d\n", time2->tm_hour, time2->tm_min, time2->tm_sec);
        printf("停车时间:%f\n秒",cost);
    } else 
    {
        time(&timenow);
        cost = difftime(timenow,k->time1);
        printf("出场时间:未出场\n停车时间:%f秒\n",cost);
        return 0;
    }
    }
    else
        printf("等候中");
    return SUCCESS;
}

/*////////////////////////////////////
查看出入登记函数
功能:遍历打印存放所有信息的链表
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int record_all() 
{
    LLtra(all_car);
    return SUCCESS;
}
/*////////////////////////////////////
查看停车场内车辆信息函数
功能:遍历打印存放停车场内信息的数组
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int car_park() 
{
    int i;
    double cost;
    struct tm *time1;
    time_t timenow;
    for (i=0; i<stack_park->top+1; i++) 
    {
        time1 = local_time(&stack_park->date[i].time1);
        printf("车牌:%s     入场时间:%d:%d:%d",stack_park->date[i].name, time1->tm_hour, time1->tm_min, time1->tm_sec);
        time(&timenow);
        cost = difftime(timenow,stack_park->date[i].time1);
        printf("  未出场,停车时间为:%f秒\n\n",cost);
        printf("-------------------------------------------------------------------------------------------------------------\n");
    }
    return SUCCESS;
}
/*////////////////////////////////////
查看等候队列内车辆信息函数
功能:遍历打印等候队列中车辆
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int Car_wait() 
{
    CAR_W *p;
    p = queue_wait->front;
    while(p->next) 
    {
        p=p->next;
        printf("车牌:%s\n\n",p->name);
    }
    return SUCCESS;
}
/*////////////////////////////////////
初始化函数
功能:初始化
入参:无
返回值:SUCCESS/FAILURE
////////////////////////////////////*/
int park_init() 
{
    STinit(&stack_park);
    STinit(&stack_exchange);
    LQinit(&queue_wait);
    LLinit(&all_car);
    return SUCCESS;
}
/*////////////////////////////////////
时间函数
功能:转换成当地时间
入参:time_t *tmpcal_ptr(等待转换的时间)
返回值:time_local(当地时间)
////////////////////////////////////*/
struct tm * local_time(time_t *tmpcal_ptr) 
{
    struct tm *time_local = NULL;
    time_local = localtime(tmpcal_ptr);
    //转换成当地时间
    return time_local;
}

park_u.h

#ifndef _PARK_H
#define _PAEK_H
#include <time.h>
#include <stdio.h>
#define SUCCESS 10000
#define FAILURE 10001
#define TRUE 10002
#define FALSE 10003
#define SIZE 6   //车场大小
/*汽车信息,节点结构体
*/
struct car_info 
{
    char name[10];
    //  车牌
    time_t time1;
    //  入场时间
    time_t time2;
    //  出场时间
}
;
typedef struct car_info CAR_I;
/*停放,让路顺序栈结构体
需要的参数为 :车牌号,出场时间,入场时间
配套的子函数 :初始化,判断是否为空,出栈,入栈,查栈*/
struct sequencestack 
{
    int top;
    CAR_I *date;
}
;
typedef struct sequencestack ST;
/*队列节点结构体
需要的参数为 :车牌号,下一个节点地址
*/
struct car_wait 
{
    char name[10];
    struct car_wait *next;
}
;
typedef struct car_wait CAR_W;
/*等候链式队列结构
需要的参数为 :头指针,尾指针
配套的子函数 :初始化,出队列,入队列
*/
struct linkqueue 
{
    CAR_W *front;
    CAR_W *rear;
}
;
typedef struct linkqueue LQ;
/*存放所有信息的链表
需要的参数为:车牌号,出入厂状态,入场时间,出场时间,下一个节点的地址
需要的函数为:初始化,入链表,查找数据,遍历打印
*/
struct all_info 
{
    char name[10];
    char sit[10];
    time_t time1;
    //  入场时间
    time_t time2;
    //  出场时间
    struct all_info *next;
}
;
typedef struct all_info A_INFO;
int car_in();
int car_out();
int find_car();
int record_all();
int car_park();
int Car_wait();
int STinit(ST **q);
int STempty(ST *q);
int STinsert(ST *q, char na[] ,time_t time);
int STout(ST *q,char *a, time_t *time);
int LQinit(LQ **q);
int LQinsert(LQ *q, char na[]);
int LQout(LQ *q, char *a);
int LLinit(A_INFO **q);
int LLinsert(A_INFO *q, int n, char na[], char s[], time_t timeA, time_t timeB);
int LLfind(A_INFO *q, char na[]);
int LLget(A_INFO *q, int n, A_INFO **k);
int LLtra(A_INFO *q);
int parkadd(CAR_I car[], char na[], time_t time);
int parkdel(CAR_I car[] ,char na[],time_t time);
int print(CAR_I car[]);
int park_init();
struct tm * local_time(time_t *tmpcal_ptr);
int exchange(A_INFO *q, char na[], char s[]);
#endif

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现简易停车场管理系统

    本文实例为大家分享了C语言实现停车场管理系统的具体代码,供大家参考,具体内容如下 问题描述: 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入:当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,

  • C语言实现停车场管理系统

    问题描述:停车场是一个能放n辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放.若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入.当停车场中的车离开时,由于通道窄,在它后面呢的车要先退出,待它走后再依次进入.汽车离开时按停放时间收费. 基本功能要求: (1)建立三个数据结构分别是:停放队列.让路栈.等候队列. (2)输入数据模拟管理过程,数据(入或出,车号). 停车管理系统是C语言中队列和栈比较简单的应用,需要注意的是停车队列.等候队列.让路栈结构体的构建.在写代码时,

  • C语言实现停车场管理

    C语言课程设计之停车场管理问题,供大家参考,具体内容如下 1.问题描述:停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入:当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它

  • C语言实现简单停车场管理系统

    本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下 /*************************************************************************** 项目要求 停车场管理 问题描述:停车场是一个能放n辆车的狭长通道, 只有一个大门,汽车按到达的先后次序停放.若 车场满了,车要停在门外的便道上等候,一旦有 车走,则便道上第一辆车进入.当停车场中的车 离开时,由于通道窄,在它后面的车要先退出, 待它走后再依次进入.汽车

  • C语言实现游戏VIP停车场管理系统

    在数据结构这部分学习结束后,写一个小项目,我想是对这部分知识一个很好的运用过程. 我在这介绍我写的一个项目,游戏停车场(这个版本只是初级版,可以在这之上继续添加很多其他功能,大家可以自己尝试). 功能要求如下: 程序如下: /*************************************************************************** 项目要求 游戏VIP停车场 问题描述:停车场是一个能放10辆车的车场(链表实现), 汽车按到达的先后次序停放 在等候区.若

  • C语言设计图书登记系统与停车场管理系统的实例分享

    图书登记管理系统 图书登记管理系统应该具有下列功能: (1). 通过键盘输入某本图书的信息: (2) .给定图书编号,显示该本图书的信息: (3) .给定作者姓名,显示所有该作者编写的图书信息: (4) .给定出版社,显示该出版社的所有图书信息: (5) .给定图书编号,删除该本图书的信息: (6) .提供一些统计各类信息的功能. 程序完整的实现代码如下: #include "stdio.h" #include "stdlib.h" #include "s

  • C语言实现简单的停车场管理系统

    本文实例为大家分享了C语言实现简单停车场管理系统的具体代码,供大家参考,具体内容如下 1.问题描述 1)有一个两层的停车场,每层有6个车位,当第一层车位停满后才允 许使用第二层(停车场可用一个二维数组实现),每辆车的信息包括车牌号,层号,车位号,停车时间共四项,其中停车时间按分钟计算:2)假设停车场初始状态为第一层空.第二层已经有四辆车,其车位号依次为第二层的1-4号,停车时间依次为20,15,10,5:3)停车操作:当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先

  • C语言源码实现停车场管理系统

    本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下 题目要求: 刚开始在Codeblocks下用C语言写的,但是用指针传递参数的时候总是出问题.后来就用C++,但是调用了C的输入输出和文件操作的头文件,所以代码都是C的 main.cpp #include <iostream> #include <cstdio> #include <cstdlib> #include <windows.h> #include <ctime>

  • C语言实现停车场项目

    本文实例为大家分享了C语言实现停车场项目的具体代码,供大家参考,具体内容如下 停车场项目需求 问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放.若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入.当停车场中的车离开时,由于通道窄,在它后面的车要先退出,待它走后在依次进入.汽车离开时按停放时间收费. 基本功能要求: (1)建立三个数据结构分别是:停放栈.让路栈.等候队列.(2)输入数据模拟管理过程,数据(入或出,车号) 功能描述:进车登记.

  • 从javascript语言本身谈项目实战

    从javascript语言本身谈项目实战                                              dulao5  2005-1-15 随着ajax的升温,javascript越来越得到人们的重视.重要的是,ajax在一定程度上带来了web软件架构上的变化,人们把越来越多的功能分配到客户端实现,javascript子项目规模越来越大.如何更高效的使用javascript,如何更科学的组织javascript,如何更顺利的保证项目进展?我想就我的经验谈一点浅见. 一

  • C语言实现电话簿项目

    本文实例为大家分享了C语言实现电话簿项目的具体代码,供大家参考,具体内容如下 实现思路 这个程序的整体思路和实现还是很简单的,我们利用了动态分配内存的方式首先创建了电话簿联系人类型,然后创建电话簿类,其实事联系人类型构成的全局数组,然后分别实现,界面函数,增删改查打印等功能,在主函数离实现总体思路,利用while循环让用户选择具体功能调用函数的方式进行总体实现. ------------------------ 2019.3.12更新: 利用文件操作使得系统可以进行数据的保存. 实现代码 #in

  • Go语言框架Beego项目搭建的方法步骤

    1,命令行查看 Go 开发包的环境变量配置信息 命令行说明如下: 第 1 行,执行 go env 指令,将输出当前 Go 开发包的环境变量状态. 第 2 行,GOARCH 表示目标处理器架构. 第 3 行,GOBIN 表示编译器和链接器的安装位置. 第 7 行,GOOS 表示目标操作系统. 第 8 行,GOPATH 表示当前工作目录. 第 10 行,GOROOT 表示 Go 开发包的安装目录. 从命令行输出中,可以看到 GOPATH 设定的路径为:C:\Users\Administrator\g

  • C语言实现扫雷项目

    本文实例为大家分享了C语言实现扫雷项目的具体代码,供大家参考,具体内容如下 核心思想就是,雷的分布看作是"答案",落子的棋盘看作是"考卷": 答卷的同时,需要去对一下"答案",这个位置有没有雷,有则BOOM!无则判断周围9宫格的雷的数量,返回这个字符打印至"考卷"上! 同时,为了防止数组越界,保证每一个格子都有九宫格,需要在行与列均多加2: 最后,判断输赢的标准:总格子数量-雷数 = 落子次数,即可判定胜利! 下面为测试模块:

  • Python使用pyinstaller打包含有gettext locales语言环境的项目(推荐)

    问题 如何使用 pyinstaller 打包使用了 gettext 本地化的项目,最终只生成一个 exe 文件 起因 最近在用 pyhton 做一个图片处理的小工具,顺便接触了一下 gettext,用来实现本地化化中英文转换.项目主要结构如下: . |--src # 源码 | |--package1 | |--package2 | |--locales # 本地化文件 | | |--en # 英文 | | | |--LC_MESSAGES | | | |--en.mo | | |--zh # 中

  • C语言与C++项目实现相互调用

    目录 前言 一.C++项目调用C的静态库 二.C项目调用C++的静态库 三.总结 前言 extern “c”的作用可以实现c语言和c++相互调用. 1.当我们写c语言代码,要调用c++代码时,可以将c++的类型配置为静态库,然后直接调用头文件. 2.当我们写c++代码,要调用c代码时,可以将c的类型配置为静态库,然后直接调用头文件. 由于c++支持函数重载,而c语言不支持函数重载,c语言和c++的函数名修饰规则有所不同,所以在链接的时候就C和C++之间无法找到对应的函数地址.这时候就要引入ext

  • 易语言判断指定项目是否允许操作的方法

    是否被允许方法 英文命令:IsEnabled 所属对象:选择列表框 如果与指定项目对应的选择框被允许操作,则返回真,否则返回假. 语法:  逻辑型  选择列表框.是否被允许 (项目索引) 例程: 说明: 判断指定项目是否允许操作. 运行结果: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如果你想了解更多相关内容请查看下面相关链接

随机推荐