数据结构——停车场系统
2020-06-05 06:12
267 查看
停车场系统代码
#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; }
相关文章推荐
- 数据结构课程设计--立体停车场管理系统(改)
- 停车场管理(栈和队列的应用)中原工数据结构课程设计
- 数据模型和数据库系统的模型结构
- 数据结构课程设计【银行储蓄系统】
- 数据结构课程设计(图书管理系统)
- 基于数据结构的个人图书管理系统
- windows系统各版本 各种数据结构
- 数据结构课程设计——通讯录系统设计(C语言)
- 数据结构之反黄牛火车票订票系统
- 专题导读:大数据的系统结构
- 数据结构课程设计———烟台大学导游系统
- 交通查询系统(C语言) 数据结构图的应用(2学时)
- 单位员工通讯录管理系统(线性表的应用)中原工数据结构课程设计
- 理解linux虚拟文件系统VFS - 数据结构
- 数据结构课程设计代码-家谱管理系统
- 深入云存储系统Swift核心组件:Ring数据结构及构建、重平衡操作
- C语言学习历程(十九) 数据结构完成停车场项目
- linux虚拟文件系统数据结构
- Microsoft系统结构企业数据中心功能测试
- 基于数据结构的图书管理系统