• <数据结构>停车场管理系统,利用栈和队列实现,包含纯c语言版和C++版的全注释源码


    ✨写在前面

            数据结构的课程设计一般都不是很好理解,于是我花时间总结了一下c和c++版本的常见栈和队列的的停车场管理程序。划重点,全注释!!!爆肝一天,绝对让你思路清晰的拿下该程序。

           ✨✨ 感兴趣的同学可以订阅一下我的这个《数据结构用心学》专栏喔~✨✨


    ✨目录

    纯c语言版

    包含的功能

    运行效果

    源码

    c++版

    包含的功能

    运行效果

    源码

    ✨写在后面


    纯c语言版

    包含的功能

    1、停车功能

            如果停车场满,能够暂时存放到便道内

    2、开走车功能

            将指定车开走后打印收据,便道内的车自动停到停车场

    3、退出程序功能

    运行效果

    停车功能测试:

    离开停车场并打印收据测试:

    源码

    1. #define _CRT_SECURE_NO_WARNINGS//visual stduio添加对scanf的信任
    2. #include<stdio.h>
    3. #include <stdlib.h>
    4. #include<string.h>
    5. #include<math.h>
    6. #define size 1 //停车场位置数
    7. //模拟停车场的堆栈的性质;
    8. typedef struct zanlind {
    9. int number; //汽车车号
    10. float ar_time; //汽车到达时间
    11. }zanInode;//车结点
    12. typedef struct {
    13. zanInode* base; //停车场的堆栈底
    14. zanInode* top; //停车场的堆栈顶
    15. int stacksize_curren;//堆栈长度
    16. }stackhead;
    17. //堆栈的基本操作;
    18. void initstack(stackhead& L) //构造一个空栈L
    19. {
    20. L.base = (zanInode*)malloc(size * sizeof(zanlind));//给栈L分配空间
    21. if (!L.base) exit(0); //存储分配失败
    22. L.top = L.base;//初始化栈顶和栈底指针相同
    23. L.stacksize_curren = 0;//初始化栈长度为0
    24. }
    25. void push(stackhead& L, zanInode e) //插入元素e为新的栈顶元素
    26. {
    27. *L.top++ = e;//先让L栈的栈顶指向e,然后栈顶指针+1
    28. L.stacksize_curren++;//由于上面的e进入了栈内,所以栈长度加一
    29. }
    30. void pop(stackhead& L, zanInode& e) //若栈不为空,删除L的栈顶元素,用e返回其值
    31. {
    32. if (L.base==L.top)//栈长度为0时,停车场为空
    33. {
    34. printf("停车场为空!!");
    35. return;
    36. }
    37. e = *--L.top;//如果栈顶和栈底不等,那么e为当前top指针减一后的指向,这是因为栈顶指针始终指向栈顶元素的上面。
    38. L.stacksize_curren--;//随着top指针减一,栈长度减一。注意返回e是通过引用完成的,就是 &e,e的变化会导致实参的变化
    39. }
    40. //模拟便道的队列的性质;
    41. typedef struct duilie {//队列就是便道(候车区)
    42. int number; //汽车车号
    43. float ar_time; //汽车到达时间
    44. struct duilie* next;//链式的队列结点,通过next指针访问相邻的队列结点
    45. }*queueptr;//指向队列结点自身的指针
    46. typedef struct {
    47. queueptr front; //便道的队列的对头
    48. queueptr rear; //便道的队列的队尾
    49. int length;//队列长度
    50. }linkqueue;
    51. //队列的基本操作;
    52. void initqueue(linkqueue& q) //构造一个空队列q,也是初始化
    53. {
    54. q.front = q.rear = (queueptr)malloc(sizeof(duilie));//给队列q动态分配空间
    55. if (!q.front || !q.rear)
    56. exit(0); //如果队首指针和队尾指针为NULL,则存储分配失败
    57. q.front->next = NULL;//队首指针的下一个队列结点置为NULL,队列结点进队列只能从队尾进
    58. q.length = 0;//初始化队列长度为零
    59. }
    60. void enqueue(linkqueue& q, int number, int ar_time) //进队列,把车结点插入队列尾(属性为number,ar_time)
    61. {
    62. queueptr p;//创建队列指针p
    63. p = (queueptr)malloc(sizeof(duilie));//为p分配空间
    64. if (!p) exit(0); //为空则存储分配失败
    65. p->number = number;//让队列结点的车牌号等于插入进来的车牌号
    66. p->ar_time = ar_time;//同上,给时间赋值
    67. p->next = NULL;//保证只能从队尾进队列
    68. q.rear->next = p;//将p结点插入到队尾
    69. q.rear = p;//此时队尾指针rear指向插入进来的p结点,方便下一次从队尾插入车结点信息
    70. q.length++;//插入后队列长度加一
    71. }
    72. void popqueue(linkqueue& q, queueptr& w) //删除q的队头元素 w(属性为number,ar_time)
    73. {
    74. queueptr p;//创建中间队列指针p
    75. if (q.length==0)//队首队尾指针相同则候车区无车
    76. {
    77. printf("停车场通道为空");
    78. return;
    79. }
    80. p = q.front->next;//p指针指向队列q中的队首位置
    81. w = p;//将队首元素赋值给w,即w代表删除的队首元素
    82. q.front->next = p->next;//删除队首元素
    83. q.length--;//删除后队列长度减一
    84. }
    85. float shijiancha(float x, float y) //求时间差的子程序,x是进入时间,y是离开时间
    86. {
    87. if (x > y) {
    88. printf("非法时间数据");
    89. return -1;
    90. }
    91. int shix, shiy, fenx, feny;
    92. float shijiancha;//返回值,待赋值
    93. shix = x;//shix为进入时间的整数部分
    94. shiy = y;//shiy为离开时间的整数部分
    95. fenx = (int)((x - shix) * 100);//fenx为进入时间的小数部分的100倍
    96. feny = (int)((y - shiy) * 100);//feny为离开时间的小数部分的100倍
    97. if (fenx > feny)
    98. {//如果fenx>feny,时间差就等于离开的整数减去进入的整数-1再加上60+feny-fenx,实际上feny-fenx是负数
    99. shijiancha = (shiy - shix - 1) + (float)(feny + 60 - fenx) / 100;
    100. }
    101. else//这个就是正常的了,整数部分减加上小数部分减即可
    102. shijiancha = (shiy - shix) + (float)(feny - fenx) / 100;
    103. return shijiancha;//返回值为时间差
    104. }
    105. void jinru(stackhead& st, linkqueue& q) //对进入停车场的汽车的处理;
    106. {
    107. int number;//待使用的车牌号
    108. float time_a;//待使用的时间
    109. printf("请输入车牌号:");
    110. scanf("%d", &number);//
    111. printf("请输入您进车场的时间(比如说:8点半则输入8.30):"); scanf("%f", &time_a);
    112. if (st.stacksize_curren < 2)//停车场可以停2辆车,大于两辆车执行else的语句
    113. {
    114. zanInode e;//创建车结点
    115. e.number = number;//给车牌号赋值
    116. e.ar_time = time_a;//给车时间赋值
    117. push(st, e);//将赋值好的车结点入栈
    118. printf("请把你的车停在%d号车道\n\n", st.stacksize_curren);//提示车停在了哪个车道
    119. }
    120. else//如果执行这段代码,说明停车场以及停满2辆车
    121. {
    122. enqueue(q, number, time_a);//将车停入候车区,也就是便道
    123. printf("停车场已满,请把你的车停在便道的第%d个位置上\n", q.length);
    124. }
    125. }
    126. void likai(stackhead &st, stackhead &sl, linkqueue &q) //对离开的汽车的处理;
    127. { //st 堆栈为停车场,sl 堆栈为倒车场
    128. int number, flag = 1; //q 为便道队列
    129. float sh, time_d, arrivaltime, money1;
    130. printf("请输入您的车牌号:"); scanf("%d", &number);
    131. printf("请输入您出车场的时间(比如说:8点半则输入8.30):"); scanf("%f", &time_d);
    132. zanInode e, q_to_s;//e为要查找的车结点,q_to_s为后面将从便道进入停车场的车结点
    133. queueptr w;//队列指针,待使用
    134. while (flag) //此时flag=1,死循环
    135. {
    136. pop(st, e);//取出栈顶结点
    137. push(sl, e);//将取出的栈顶结点放入倒车场
    138. if (e.number == number)//如果车牌号对应
    139. {
    140. flag = 0;//flag变为0,死循环结束
    141. arrivaltime = e.ar_time;//将该结点的进入时间赋值给arrivaltime
    142. sh = shijiancha(arrivaltime, time_d);//带入计算时间差的函数并将时间差赋值给sh
    143. money1 = (int)sh * 2 + (sh - (int)sh) * 100 / 30;//收费依据
    144. }
    145. }
    146. pop(sl, e); //把倒车场的第一辆车(要离开的)去掉;
    147. while (sl.stacksize_curren) //把倒车场的车倒回停车场
    148. {
    149. pop(sl, e); //取出栈顶结点
    150. push(st, e);//将取出的栈顶结点放入倒车场
    151. }
    152. if (st.stacksize_curren < 2 && q.length != 0) //停车场有空位,便道上的车开进入停车场
    153. {
    154. popqueue(q, w);//取出便道的第一个车并把其信息赋值给w指针
    155. q_to_s.ar_time = w->ar_time;//将该车信息赋值给q_to_s结点
    156. q_to_s.number = w->number;
    157. push(st, q_to_s);//入栈,即停车
    158. printf("车牌为%d 的车已从通道进入停车场, 所在的停车位为 %d:\n", q_to_s.number, st.stacksize_curren);
    159. }
    160. printf("\n 收据");
    161. printf("车牌号:%d\n", number);
    162. printf("++++++++++++++++++++++++++++++\n");
    163. printf(" 进车场时间:%4.2f\n", arrivaltime);
    164. printf(" 出车场时间:%4.2f\n", time_d);
    165. printf(" 停留时间:%4.2f\n", sh);
    166. printf(" 应付(元) %4.2f\n", money1);
    167. printf("++++++++++++++++++++++++++++++\n\n");
    168. }
    169. int main()
    170. {
    171. int m = 100;
    172. int choose; //进入或离开的标识;
    173. stackhead sting, slinshi; //停车场和临时倒车场堆栈的定义;
    174. linkqueue line; //队列的定义;
    175. initstack(sting); //构造停车场堆栈sting
    176. initstack(slinshi); //构造倒车场堆栈slinshi
    177. initqueue(line); //构造便道队列line
    178. printf("\n ******************停车场管理程序*************** ");
    179. printf("\n*===========================================================*");
    180. printf("\n*温馨提示:请车主在24:00之前来取车,给您带来的不便,敬请原谅!*");
    181. printf("\n* 1 *** 汽车进车场 2 *** 汽车出车场 3 *** 退出程序 *");
    182. printf("\n*===========================================================*\n");
    183. while (m)//m为100,可以重复操作100次
    184. {
    185. printf(" 请输入您需要的服务的代号(1、2、3),谢谢!\n");
    186. scanf("%d", &choose);//待选择的操作
    187. switch (choose)
    188. {
    189. case 1: jinru(sting, line); break; //汽车进车场
    190. case 2: likai(sting, slinshi, line); break; //汽车出车场
    191. case 3: exit(0);//退出
    192. }
    193. --m;//m递减
    194. }
    195. }

    c++版

    包含的功能

    1、停车功能

            如果停车场满,能够暂时存放到便道内

    2、开走车功能

            将指定车开走后自动计费,便道内的车自动停到停车场

    3、查看停车场停车情况功能

            可以查看停车场有无空位和停车信息。

    4、退出程序功能

    运行效果

    停车功能测试:

    离开停车场并自动计费测试:

    查看停车场状况功能测试:

    源码

    1. #define _CRT_SECURE_NO_WARNINGS//visual stduio添加对scanf的信任
    2. #include <stdio.h>
    3. #include <stdlib.h>
    4. #include <iostream>//C++IO流头文件
    5. using namespace std;//C++命名空间,配合IO流头文件可使用cin>>输入,cout<<输出
    6. #define MaxSize 5 //停车场最大停车位
    7. #define fee 2 //一小时的费用
    8. #define L 10000//宏定义
    9. typedef int ElemType;//将整型int名字变为ElemType,下面再使用ElemType就是整型的意思
    10. ElemType tmpnum = 0;//车牌号
    11. ElemType tmptime = 0;//进入时间
    12. typedef struct {
    13. ElemType car_num[MaxSize];//车牌号数组
    14. ElemType car_time[MaxSize];//进入时间数组
    15. int top;//数组下标
    16. }STACK;//栈,存放所有的车牌号和进入时间数组
    17. typedef struct qnode {//队列结点
    18. ElemType car_num;//包含车牌号
    19. ElemType car_time;//和进入时间
    20. struct qnode* next;//指向自身的指针,用来当问相邻队列结点
    21. }QTYPT;//将qnode重命名为QTYPT
    22. typedef struct qptr {//队列
    23. QTYPT* front;//队首指针
    24. QTYPT* rear;//队尾指针
    25. }SQUEUE;//将qptr重命名为SQUEUE
    26. void InitStack(STACK* S) {//初始化栈S
    27. S->top = -1;//数组下标初始化为-1
    28. }
    29. int Full(STACK* S) {//栈满的情况
    30. if (S->top == MaxSize - 1) {
    31. printf("\n Stack is full! Push");//提示栈满
    32. return 0;
    33. }
    34. return 1;
    35. }
    36. //入栈函数Push
    37. int Push(STACK* S, ElemType num, ElemType time) {
    38. if (S->top == MaxSize - 1) {
    39. printf("\n Stack is full! Push");//栈满提示,并退出
    40. return 0;
    41. }
    42. S->top++; //栈不满时数组下标加一,此时为0
    43. S->car_num[S->top] = num; //栈车牌号数组的car_num[top]赋值为num
    44. S->car_time[S->top] = time; //同车牌号,这次是进入时间的赋值
    45. return 1; //赋值成功则返回1
    46. }
    47. int Empty(STACK* S) {//栈空的情况
    48. return (S->top == -1 ? 1 : 0);//栈空返回1
    49. }
    50. //出栈函数Pop
    51. int Pop(STACK* S, ElemType* num, ElemType* time) {
    52. if (Empty(S)) {//栈空无法出栈
    53. puts("Stack is free Pop");
    54. return 0;
    55. }//栈不空时
    56. *num = S->car_num[S->top]; //将栈顶的车牌号赋值给*num
    57. *time = S->car_time[S->top];//赋值时间给*time
    58. S->top--;//出栈后数组下标减一
    59. return 1;
    60. }
    61. //初始化队列
    62. void InitQueue(SQUEUE* LQ) {
    63. QTYPT* p = NULL;//创建队列结点指针
    64. p = (QTYPT*)malloc(sizeof(QTYPT));//为p职责和你分配空间
    65. p->next = NULL;//使p指针的next为空,相当于头结点
    66. LQ->front = LQ->rear = p;//初始化队首和队尾指针指向头结点p,
    67. }
    68. //将队列结点入队
    69. int EnQueue(SQUEUE* LQ, ElemType num, ElemType time) {
    70. QTYPT* s;//创建s指针
    71. s = (QTYPT*)malloc(sizeof(QTYPT));//分配空间
    72. s->car_num = num;//将车牌号赋值给p指向的车牌号
    73. s->car_time = time;//赋值时间
    74. s->next = LQ->rear->next;//将s结点插入到队尾的下一个位置
    75. LQ->rear->next = s;//队尾指针的下一个位置指向s
    76. LQ->rear = s;//队尾指针指向新插入的结点,这样时头插法,符合队列后进后出的特点
    77. return 1;
    78. }
    79. //计算队列有多少结点
    80. int CountQueue(SQUEUE* LQ) {
    81. int i = 1;
    82. QTYPT* mfront = NULL;//创建该队列的新队首指针
    83. QTYPT* mrear = NULL;//创建新队尾指针
    84. mfront = LQ->front;//将队首指针赋值给新队首指针,记录作用
    85. mrear = LQ->rear;//同上
    86. while (!(LQ->front == LQ->rear)) {//当队首不等于队尾指针时,i++,统计的结点个数增加
    87. i++;
    88. LQ->front = LQ->front->next;//队首指向队首的下一个位置
    89. }
    90. LQ->front = mfront;//统计完成后将队首指针指向原来的地址
    91. return i;//i为结点个数
    92. }
    93. int Empty_Q(SQUEUE* LQ) {//队列为空
    94. return (LQ->front == LQ->rear ? 1 : 0);
    95. }
    96. int OutQueue(SQUEUE* LQ, ElemType* num, ElemType* time) {//取队首
    97. QTYPT* p;//创建对列结点指针
    98. if (Empty_Q(LQ)) {//队列空不能取队首
    99. puts("Quenue is free OutQuenue");
    100. return 0;
    101. }
    102. p = LQ->front->next;//p指向队首结点
    103. *num = p->car_num;//将队首结点信息赋值
    104. *time = p->car_time;
    105. LQ->front->next = p->next;//删除队首结点
    106. if (LQ->front->next == NULL)//如果队首结点不存在
    107. LQ->rear = LQ->front;//队首队尾指针相同,队空
    108. free(p);//释放p结点
    109. return 1;
    110. }
    111. //检查有无重复车牌号
    112. int chackinput(STACK* S, int pnum) {
    113. int i = 0;
    114. int num;
    115. num = pnum;//将车牌号赋值
    116. i = S->top;//i为栈顶位置的数组下标
    117. for (; !(i == -1); i--)//从高到底遍历car_num数组,找到车牌号返回1,否则返回0
    118. if (S->car_num[i] == num)
    119. return 1;
    120. return 0;
    121. }
    122. //检查时间输入是否合理
    123. int chacktime(STACK* S, int ptime) {
    124. return S->car_time[S->top] <= ptime ? 1 : 0;//只有离开时间大于进入时间才能赋值成功
    125. }
    126. //显示停车场内状况
    127. int displaystats(STACK* S, int pinput) {
    128. void displayhead();//显示菜单
    129. int i = 0;
    130. i = S->top;//i为栈顶位置的数组下标
    131. switch (pinput)//调用的时候自动填入10000
    132. {
    133. case 10000:
    134. {
    135. if (!Empty(S))//栈不空
    136. for (; !(i == -1); i--)//遍历输出栈内停车信息
    137. printf("<===%d时%d号车停于%d车位===>\n", S->car_time[i], S->car_time[i], i + 1);
    138. else
    139. cout << "停车场为空";
    140. printf("还有车%d个位\n", MaxSize - S->top - 1);//剩余车位等于最大停车位-当前数组下标再-1,因为数组是从0开始
    141. break;
    142. }
    143. default:
    144. {
    145. return 1;
    146. }
    147. }
    148. return 0;
    149. }
    150. //功能菜单
    151. void displayhead() {
    152. cout << '\n' << "<===============CT停车场管理系统===================>" << endl;
    153. cout << "<==操作说明: ******* ==>" << endl;
    154. cout << "<==1: 停车命令 ******* ==>" << endl;
    155. cout << "<==2: 出车命令 *** ==>" << endl;
    156. cout << "<==0: 退出程序 *** ==>" << endl;
    157. cout << "<==3: 显示停车场内状况 " << endl;
    158. cout << "<==============================================>" << endl;
    159. }
    160. //打印收费条
    161. void displayChange(STACK* S, ElemType pnum, int ptime) {
    162. printf(" (单价 %d元/小时 )\n", fee);//fee在宏定义有,值为2
    163. printf("<======================电子收据===================>\n");
    164. printf("<==停车时间:--------------------------%d小时 ==>\n", ptime - tmptime);//停车时长
    165. printf("<==车牌号码:--------------------------%d ==>\n", tmpnum);//打印车牌号
    166. printf("<==应收费用:--------------------------%d 元 ==>\n", (ptime - tmptime) * fee);//计算费用
    167. printf("<====================谢谢=欢迎下次再来=============>\n");
    168. }
    169. //开走车
    170. int outparkstation(STACK* S1, STACK* TS, ElemType pnum) {
    171. int t_num = 0;
    172. int t_time = 0;
    173. while (1) {
    174. Pop(S1, &t_num, &t_time);//取出栈顶车
    175. if (t_num == pnum) {//如果这一次取出的栈顶车的车牌号是我们想开走的
    176. tmpnum = t_num;//进行车牌号和进入时间的赋值
    177. tmptime = t_time;
    178. while (!Empty(TS)) {//当备用停车场不空时
    179. Pop(TS, &t_num, &t_time);//循环取出备用停车场的暂存栈顶车
    180. Push(S1, t_num, t_time);//将每次的栈顶车再放进停车场
    181. }
    182. return 1;//结束循环
    183. }
    184. Push(TS, t_num, t_time);//栈顶不是我们想要的车就暂存再备用停车场
    185. }
    186. return 0;
    187. }
    188. //进行停车
    189. int inparkstation(STACK* S) {
    190. int parknum;
    191. int parktime;
    192. printf("还有%d个车位\n", MaxSize - S->top - 1);
    193. printf("请输入车牌号码:");
    194. cin >> parknum;//输入车牌号
    195. while (chackinput(S, parknum)) {//调用检验函数,重复则重新输入车牌号
    196. printf("车牌号码重复,请输入%d1或者其他", parknum);
    197. cin >> parknum;//输入车牌号
    198. }
    199. printf("请输入停车时间:");
    200. cin >> parktime;//输入停车时间
    201. printf("%d号车于%d时停靠在%d位\n", parknum, parktime, S->top + 2);//下标加2是因为初始为-1,第一个车位于一号位,需要加2
    202. Push(S, parknum, parktime);//将输入的车牌号与进入时间入栈,完成停车
    203. return 1;
    204. }
    205. //在便道,栈满时将车暂存到便道内
    206. int inbiandao(SQUEUE* SQ, STACK* S) {
    207. int parknum;
    208. printf("对不起,停车场已满,请您到便道等待.停车场有空位时您将第");
    209. printf("%d进入停车场\n", CountQueue(SQ));//调用CountQueue()函数,得到便道内的结点个数
    210. printf("请输入车牌号码:");
    211. cin >> parknum;
    212. while (chackinput(S, parknum)) {//如果有重复车牌号则重新输入
    213. printf("车牌号码重复,请输入其他车牌号");
    214. cin >> parknum;
    215. }
    216. EnQueue(SQ, parknum, 0);//将车牌号为parknum的车放进便道,进便道时间默认为0
    217. return 1;
    218. }
    219. //离开停车场
    220. int OutParkingStation(SQUEUE* biandao, STACK* car, STACK* tmp) {
    221. int parknum = 0;
    222. int parktime = 0;
    223. int buf = 0;
    224. if (!Empty(car)) {//栈不空的情况下
    225. displaystats(car, 10000);//遍历查看停车场停车情况
    226. printf("请输入您要调出的车牌号码:");
    227. cin >> parknum;
    228. while (!chackinput(car, parknum)) {
    229. printf("没有您要的%d的车牌号码,请输入正确的车牌号码:", parknum);//没有检查到重新输入
    230. cin >> parknum;
    231. }
    232. outparkstation(car, tmp, parknum);//将车牌号为parknum的车开走
    233. printf("%d时%d号车进入停车场\n", tmptime, tmpnum);//上一行代码已经给开走的车进入时间和车牌号赋值,
    234. printf("请输入现在的时间:");//开走时的时间
    235. cin >> parktime;
    236. while (!chacktime(car, parktime)) {//开走时间需要大于进入时间,否则重新输入
    237. cout << "输入时间小于停车时间,请重新输入:";
    238. cin >> parktime;
    239. }
    240. displayChange(car, parknum, parktime);//打印账单
    241. if (biandao->front != biandao->rear)
    242. {
    243. printf("%d号车位空开\n", car->top + 2);//提示开走的车占用的停车场位置空了
    244. printf("%d时便道上的%d号汽车驶入%d号车位", parktime, biandao->front->next->car_num, car->top + 2);//提示便道队首元素进入停车场
    245. OutQueue(biandao, &parknum, &buf);//将便道队首元素的车牌号赋值给parknum
    246. Push(car, parknum, parktime);//将该车进入停车场栈顶,进入成功
    247. }
    248. return 2;
    249. }
    250. printf("停车场为空\n");//栈空则停车场为空
    251. return 1;
    252. };
    253. int main() {
    254. int chance = 0;//用来选择操作
    255. STACK car;//创建未分配空间的car栈
    256. InitStack(&car);//初始化,包括分配内存空间
    257. STACK tmp;//备用栈
    258. InitStack(&tmp);//初始化
    259. SQUEUE biandao;//创建队列
    260. InitQueue(&biandao);//初始化
    261. loop://跳转语句,配和goto语句使用
    262. while (1) {
    263. displayhead();//展示菜单
    264. cout << "=>:";
    265. cin >> chance;//输入操作的选择
    266. switch (chance) {
    267. case 1:
    268. {
    269. printf("查询结果为:\n");
    270. if (Full(&car))//栈未满时执行if,栈满时执行else
    271. inparkstation(&car);//停进停车场
    272. else
    273. inbiandao(&biandao, &car);//停进便道
    274. break;
    275. }
    276. case 2:
    277. {
    278. OutParkingStation(&biandao, &car, &tmp);//开走车
    279. break;
    280. }
    281. case 3:
    282. {
    283. displaystats(&car, 10000);//查看停车场信息
    284. break;
    285. }
    286. case 0:
    287. {
    288. printf("成功退出,欢迎下次使用!");
    289. return 0;//退出循环
    290. }
    291. default:
    292. {
    293. cout << "输入错误" << endl;
    294. goto loop;//goto语句是跳转的意思,跳转到前面的loop位置,即继续选择操作
    295. }
    296. }
    297. }
    298. system("PAUSE");//终端出现按任意键继续,终端就是显示运行结果的地方
    299. return 0;
    300. }

    ✨写在后面

            爆肝万字的两个版本的停车场管理程序你爱了吗,反正我是累死了。在最后希望家人们给个三连支持哇,你们的鼓励是我创作的不竭动力!!!

  • 相关阅读:
    泛型初识~go1.18的新类型
    【MLOps】优化超参数
    Java中的ORM框架——myBatis
    go 这样做就是python
    极坐标系下的交换积分次序
    ASP.NET的WebService跨域CORS问题解决方案
    企业电子招投标采购系统源码之电子招投标的组成
    java反射
    cnn训练自己数据集
    Spring Boot + Vue的网上商城之客服系统实现
  • 原文地址:https://blog.csdn.net/m0_58618795/article/details/125516288