数据结构——停车场系统

停车场系统代码

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>

#define Price  0.05          
#define MAX_STOP 5
#define MAX_PAVE 100 
 

typedef struct time
{
int hour;
int min;
}Time;//定义时间结点

//记录汽车信息 
typedef struct
{
    Time reach;
	Time leave;        // 离开停车场时间
    char license_plate[10];  // 汽车牌照号码
}CAR;

//停车位栈 
typedef struct
{
    CAR Stop[MAX_STOP];   
    int top;                  
}STOPPING;

//通道队列 
typedef struct
{
    int count;                // 用来指示队中的数据个数
    CAR Pave[MAX_PAVE];   
    int front, rear;         
}PAVEMENT;

//辅助栈
typedef struct
{
    CAR Buff[MAX_STOP];  
    int top;                
}Buffer;

STOPPING s;
PAVEMENT p;
Buffer   b;
CAR      c;
char     plate[10];



void car_come();
void car_pave();
void car_leave();
void stopinfor(); 
void paveinfor();

void welcome() //功能展示界面 
{
	printf("===欢迎使用停车场管理系统===\n");
	printf("  1.车辆到达登记\n");
	printf("  2.车辆离开登记\n");
	printf("  3.车辆停靠信息查询\n");
	printf("  4.退出系统\n");
}


void come() // 汽车驶入界面,判断该停入停车位还是停入通道 
{
	printf("******车辆到达登记******\n");
    if (s.top >= MAX_STOP - 1) // 如果停车位已满,停入便道
    {
        car_pave();                    
    }
    else  //否则停入停车位 
    {
        car_come();
    }
    getchar();
}


void car_come() //汽车停入停车位 
{
	printf ("请输入该车的车牌号:");     
    scanf ("%s", &plate);
	printf("请输入该车到达时间(用空格隔开):\n");
    scanf("%d %d",&s.Stop[s.top+1].reach.hour, &s.Stop[s.top+1].reach.min);
    s.top++;                            // 停车位栈顶指针加1 
    strcpy(s.Stop[s.top].license_plate, plate);     
    printf ("汽车%s已停入%d号停车位\n", plate,s.top + 1);
    printf("汽车停入登记完毕!");	
    
}


void car_pave() // 汽车停入通道 
{
	printf ("请输入该车的车牌号:");     
    scanf ("%s", &plate);
    strcpy(p.Pave[p.rear].license_plate, plate);    // 车进入便道 
    p.rear = (p.rear + 1) % MAX_PAVE;   // 队尾指示器加1
    p.count++;                          // 计数器加1
    printf ("汽车%s已停入%d号便道\n", plate, p.rear);
    
}


void leave() // 汽车离开界面 
{
	printf("******车辆离开登记******\n");
    printf ("请输入即将离开的车牌号:\n");
    scanf ("%s", &plate);
    if (s.top < 0)      // 若停车位栈头指针为-1,则车位为空 
    {
        printf ("车位已空,无车辆信息!\n");
    }
    else
    {
        car_leave();  //若有车辆,则进入车离开函数 
    }
    getchar();
}


void car_leave()
{
	int alltime;
	double money;
	while (s.top >= 0)
    {
        if (0 == strcmp(s.Stop[s.top].license_plate, plate)) //如果找到此车跳出循环 
        {
            break;
        }

        strcpy(b.Buff[b.top++].license_plate, s.Stop[s.top].license_plate);
        printf ("牌照为%s的汽车进入辅助站\n", s.Stop[s.top--].license_plate);
    }

    // 如果停车位中的车都让了道,说明停车位中无车辆需要出行
    if (s.top < 0)
    {
        printf ("停车位上无此车消息\n");
    }
    else
    {
        printf("请输入该车离开时间(用空格隔开):\n");
        scanf("%d %d",&s.Stop[s.top].leave.hour, &s.Stop[s.top].leave.min);
        if(s.Stop[s.top].leave.min>=s.Stop[s.top].reach.min)
        	alltime=(s.Stop[s.top].leave.hour-s.Stop[s.top].reach.hour)*60+(s.Stop[s.top].leave.min-s.Stop[s.top].reach.min);
        else
        	alltime=(s.Stop[s.top].leave.hour-s.Stop[s.top].reach.hour-1)*60+(s.Stop[s.top].leave.min+60-s.Stop[s.top].reach.min)%60;
       
        money=Price*alltime;
		printf ("牌照为%s的汽车从停车场开走\n", s.Stop[s.top].license_plate);
	    printf("该车到达时间为:%d: %d\n",s.Stop[s.top].reach.hour, s.Stop[s.top].reach.min);
		printf("该车离开时间:%d:%d\n",s.Stop[s.top].leave.hour, s.Stop[s.top].leave.min);
        printf ("共计时间:%d 分钟\n", alltime );
        printf ("需支付%.2lf元\n", money );
        s.top--;
    }

    // 将辅助站中的车辆信息进入停车位栈
    while (b.top > 0)
    {
        strcpy(s.Stop[++s.top].license_plate, b.Buff[--b.top].license_plate);
        printf ("牌照为%s的汽车停回停车位%d车位\n", b.Buff[b.top].license_plate, s.top+1);
    }

    while (s.top < MAX_STOP-1)//从便道到停车位 
    {
        if (0 == p.count)   // 判断队列是否为空
        {
            break;
        }   // 不为空,将便道中优先级高的车停入停车位
        else
        {
            strcpy(s.Stop[++s.top].license_plate, p.Pave[p.front].license_plate);
            printf ("汽车%s从便道中进入停车位的%d车位\n", p.Pave[p.front].license_plate, s.top+1);
            p.front = (p.front + 1) % MAX_PAVE;
            p.count--;
            printf("请输入汽车%s的驶入时间(中间用空格隔开):\n",s.Stop[s.top].license_plate);
            scanf("%d %d",&s.Stop[s.top].reach.hour, &s.Stop[s.top].reach.min);
        }
    }
}

void Display()
{
	int flag,choice;
    printf("1.停车场信息\n");
    printf("2.便道信息\n");
    printf("3.返回主菜单\n");
    printf("请输入您要进行的操作(1~3):");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1:stopinfor();
                break; 
        case 2:paveinfor();
                break;
        case 3:flag=0;break;
        default: break;
    }
    getchar();
}


void stopinfor()  //停车场显示信息 
{
    int m = s.top,i;
    if (m == -1)
    {
        printf ("停车场里没有车\n");
    }
    else{
    	printf("========停车场信息查询========\n");
    	printf ("车牌号\t\t位置\t\t驶入时间\n");
    	for(i=0;i<=m;i++)
    	{
    		printf("%s",s.Stop[i].license_plate);
    		printf("\t\t%d",i+1);
    		printf("\t\t%d : %d\n",s.Stop[i].reach.hour, s.Stop[i].reach.min);
		}
	}
    
}

void paveinfor() //便道上信息 
{ 
    int m = p.rear, i=p.front;
    if(p.front!=p.rear) 
    {
        
        printf("===========便道信息查询========:\n");
        printf ("车牌号\t\t位置\n");
    	for(i;i<m;i++)
    	{
    		printf("%s",p.Pave[i].license_plate);
    		printf("\t\t%d\n",i+1);
    		//printf("\t\t%d : %d\n",p.Pave[i].reach.hour, p.Pave[i].reach.min);
        }
    }
    else 
        printf("便道里没有车"); 

}

int main()
{
    // 初始化
    s.top   = -1; //令top指向栈顶元素 
    b.top   =  0;
    p.rear  =  0;
    p.count =  0;
    p.front =  0;
 
    int select;//select接收用户的选择 
    while(1)
    {
        system("cls");
		welcome();
		printf("\n请输入您要进行的操作(1~4):\n");
		scanf("%d",&select);
		getchar();
		switch(select)
		{
			case 1 : come();
			         break;
			case 2 : leave();
			         break;
			case 3 : Display();
			         break;
			case 4 : return 0;
			default : printf("请输入正确的操作序号(1~4)!");
		}
		getchar();
    }
    return 0;
}
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
      掌握基于腾讯人工智能(AI)的车牌识别技术,使用车牌识别技术实现一个完整的停车场管理系统,项目包括网页调用摄像头拍照,车牌拍照识别,上传车牌图片识别,用户管理,车辆管理(临时车与包月车),车辆出场,入场管理,停车费收费管理,按照临时车或包月车自动计算停车费,系统参数设置,修改用户密码及安全退出等功能,该系统采用Jsp技术,使用SSM框架,Mysql数据库,ajax技术及人工智能等相关技术实现。重要通知:本课程根据腾讯AI车牌识别新接口,更新了新接口源代码,发布程序,购买了课程的同学可以下载新程序,包括(运行程序及源代码),更新时间:2021-2-17项目开发技术:java,jsp,mysql,MyBatis,SpringMVC,jquery,ajax,json项目运行环境:jdk1.7及以上版本,tomcat6.0及以上版本,mysql5.5及以上版本项目开发工具: 本项目开发工具是Eclipse,也支持myEclipse,Intellij Idea等其他版本开发工具相关课程学习顺序本校课程是培养JAVA软件工程师及JSP WEB网络应用程序开发,android工程师的全套课程,课程学习顺序如下:JAVA初级工程师:    1、计算机基础    2、HTML语言基础    3、C语言从入门到精通+贪吃蛇游戏    4、贪吃蛇游戏    5、SQL SERVER数据库基础    6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件    7、推箱子游戏;    8、仿QQ即时通讯软件;JAVA中级工程师:    9、SQLSERVER数据库高级    10、SQLSERVER从入门到精通(基础+高级)              11、JavaScript从入门到精通,    12、JSP从入门到精通+点餐系统,    13、JSP从入门到精通+在线视频学习教育平台,    14、JSP从入门到精通+大型电商平台;    15、XML从入门到精通,    16、数据结构(JAVA版),JAVA高级工程师:    17、Oracle数据库从入门到精通,    18、ajax+jquery从入门到精通,    19、EasyUI从入门到精通,SSH框架:    20、Struts2从入门到精通课程,    21、Hibernate从入门到精通课程,    22、Spring从入门到精通课程;    23、Echarts从入门到精通,    24、Excel基于POI的导入导出工作流框架:    25、Activiti流程框架从入门到精通    26、JBPM流程框架从入门到精通SSM框架:    27、MyBatis从入门到精通    28、Spring MVC从入门到精通面试题:    29、职业生涯规划及面试题集锦商业项目:    30、微信公众号在线支付系统    31、微信生活缴费在线支付系统    32、支付宝生活缴费在线支付系统    33、在线考试系统    34、手机订餐管理系统,    35、CRM客户关系管理系统    36、大型房地产CRM销售管理系统    37、CMPP2,CMPP3移动网关系统人工智能:    38、人脸识别在线考试系统    39、人脸识别系统项目实战    40、车牌识别系统项目实战    41、身份证识别系统项目实战    42、营业执照识别系统项目实战          43、名片识别管理系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值