数据结构课程设计-停车场管理系统

利用前面所建立的算法库基础进行的课程设计,名曰停车场管理系统

具体利用顺序栈以及链队等知识

当车辆进入时,输入车辆车牌号码并且自动获取当前系统时间。

具体请运行代码。

parking.h:

包含定义顺序表数据结构的代码、宏定义、要实现算法的函数的声明;

/********************************************** 
 *Copyright(c)2017,烟台大学计算机学院 
 *All right reserved. 
 *文件名称:parking.h
 *作者:李小同 
 *完成日期;2017年12月21日 
 *当前版本号;v1.1 
 * 
 *修改日期:20171221
 *版本号:v1.1
 *修改人:李小同
 *修改内容:创建
********************************************** /


#ifndef PARKING_H_INCLUDED
#define PARKING_H_INCLUDED

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct time //时间结点
{
  int hour;
  int min;
}Time;
typedef struct node //车辆信息结点
{
  char num[10];     //车牌
  Time reach;
  Time leave;
}CarNode;
typedef struct NODE  //模拟停车场
{
  CarNode *stack[4];
  int top;
}SeqStackCar;
typedef struct car   //车辆等候数据
{
  CarNode *data;
  struct car *next;  //这个指针结点的作用是将车场和便道的车辆连起来。
}QueueNode;
typedef struct Node  //模拟便道
{
  QueueNode *head;
  QueueNode *rear;
}LinkQueueCar;//便道的链队结点

void InitStack(SeqStackCar *);                          //初始化栈
int InitQueue(LinkQueueCar *);                          //初始化便道
int arrival(SeqStackCar *,LinkQueueCar *);              //车辆到达
void leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); //车辆离开
void list(SeqStackCar,LinkQueueCar);                    //显示存车信息
#endif // PARKING_H_INCLUDED


parking,cpp:

包含实现各种算法的函数的定义

/********************************************** 
 *Copyright(c)2017,烟台大学计算机学院 
 *All right reserved. 
 *文件名称:parking.cpp
 *作者:李小同 
 *完成日期;2017年12月21日 
 *当前版本号;v1.1 
 * 
 *修改日期:20171221
 *版本号:v1.1
 *修改人:李小同
 *修改内容:创建
********************************************** /


#include "parking.h"

/*************************************************
 *功能描述:初始化栈void InitStack(SeqStackCar *); 
 *输入参数:将栈顶指针置为0
 *输出参数:栈全为NULL
 *返回值:  
 *其他说明:
 *************************************************/

void InitStack(SeqStackCar *s) //初始化栈
{
  int i;
  s->top=0;  //栈顶指针置为0.
  for(i=0;i<=3;i++)
    s->stack[s->top+i]=NULL;
}
/*************************************************  
 *功能描述:初始化便道int InitQueue(LinkQueueCar *);
 *输入参数:分配空间,创建一个链队结点Q->head
 *输出参数:Q->head,Q->rear全为NULL
 *返回值:  成功返回-1,反之返回1
 *其他说明:
 ************************************************* /


int InitQueue(LinkQueueCar *Q) //初始化便道
{
  Q->head=(QueueNode *)malloc(sizeof(QueueNode));//分配空间,创建一个链队结点Q->head
  if(Q->head!=NULL)
  {
    Q->head->next=NULL;
    Q->rear=Q->head;
    return 1;
  }
  else return -1;
}
/*************************************************  
 *功能描述:打印出站车辆的信息void print(CarNode *p,int room)
 *输入参数:p->num车牌号,p->reach/leave.hour/min停车以及驶离的时间
 *输出参数:停车费用,车牌号,停车以及驶离的时间
 *返回值:  
 *其他说明:释放节点p
************************************************* /


void print(CarNode *p,int room) //打印出站车的信息
{
    time_t u; //time_t是time.h定义的结构体
	struct tm *o; //停车时间
	struct tm *l; //驶离时间
	time (&u);
	o=localtime(&u);
	l=localtime(&u);
    p->leave.hour=l->tm_hour;
    p->leave.min=l->tm_min;
  int A1,A2,B1,B2;
  printf("\n您的车牌号为:");
  puts(p->num);
  printf("\n您停车的时间为: %d:%d",p->reach.hour,p->reach.min);
  printf("您驶离的时间为: %d:%d",p->leave.hour,p->leave.min);
  A1=p->reach.hour;
  A2=p->reach.min;
  B1=p->leave.hour;
  B2=p->leave.min;
  printf("\n停车费用为: %2.1f元",((B1-A1)*60+(B2-A2))*0.05);
  free(p);//释放结点
}

/*************************************************  
 *功能描述:车辆到达int arrival(SeqStackCar *,LinkQueueCar *);
 *输入参数:为车辆信息开辟空间,输入p->num
 *输出参数:车辆在栈中的位置以及停车时间
 *返回值:  
 *其他说明:
 ************************************************* /

int arrival(SeqStackCar *Enter,LinkQueueCar *W) //       车辆到达
{
    time_t u; //time_t是time.h定义的结构体
	struct tm *o; //停车时间
	time (&u);
	o=localtime(&u);
  CarNode *p;
  QueueNode *t;
  p=(CarNode *)malloc(sizeof(CarNode));
  system("cls");
  printf("\n输入车牌号:");
  scanf("%s",p->num);
  if(Enter->top<3)   //车场未满,车进车场
  {
    Enter->top++;  //栈顶指针加1
    p->reach.hour=o->tm_hour;
    p->reach.min=o->tm_min;
    printf("\n您的车停在:%d 位置",Enter->top);
    printf("\n您停车的时间为:%d:%d\n",o->tm_hour,o->tm_min);
    Enter->stack[Enter->top]=p;
    return 1;
  }
  else   //车场已满,车进便道
  {
      system("cls");
    printf("\n该车须在便道等待!");
    t=(QueueNode *)malloc(sizeof(QueueNode));
    t->data=p;
    t->next=NULL;
    W->rear->next=t;
    W->rear=t;
    return 1;
  }
}

/*************************************************  
 *功能描述:车辆离开void leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *);
 *输入参数:车辆的位置,便道中车的数据
 *输出参数:车场中车的信息以及停车费用,便道车进入车场记录的信息
 *返回值:  
 *其他说明:
 ************************************************* /

void leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W)  //车辆离开
{
  int i, room;
    time_t u; //time_t是time.h定义的结构体
	struct tm *o; //停车时间
	time (&u);
	o=localtime(&u);
  CarNode *p,*t;
  QueueNode *q;
  //判断车场内是否有车
  if(Enter->top>0) //有车
  {
    while(1) //输入离开车辆的信息
    {
         system("cls");
      printf("\n请输入车在车场的位置/1--%d/:",Enter->top);
      scanf("%d",&room);
      if(room>=1&&room<=Enter->top)
        break;
    }
    while(Enter->top>room) //车辆离开
    {
      Temp->top++;
      Temp->stack[Temp->top]=Enter->stack[Enter->top];
      Enter->stack[Enter->top]=NULL;
      Enter->top--;
    }
    p=Enter->stack[Enter->top];
    Enter->stack[Enter->top]=NULL;
    Enter->top--;
    while(Temp->top>=1)
    {
      Enter->top++;
      Enter->stack[Enter->top]=Temp->stack[Temp->top];
      Temp->stack[Temp->top]=NULL;
      Temp->top--;
    }
    print(p,room);
    //判断通道上是否有车及车站是否已满
    if((W->head!=W->rear)&&Enter->top<3) //便道的车辆进入车场
    {
      q=W->head->next;
      t=q->data;
      Enter->top++;
      printf("\n便道的%s号车进入车场第%d位置.",t->num,Enter->top);
      printf("\n此车进入的时间为%d:%d",o->tm_hour,o->tm_min);
      t->reach.hour=o->tm_hour;
      t->reach.min=o->tm_min;
      W->head->next=q->next;
      if(q==W->rear)
      W->rear=W->head;
      Enter->stack[Enter->top]=t;
      free(q);
    }
  }
  else
    printf("\n车场里没有车."); //没车
}
void list1(SeqStackCar *S)   //列表显示车场信息
{
  int i;
  if(S->top>0)  //判断车站内是否有车
  {
      system("cls");
    printf("\n车场:");
    printf("\n 位置 到达时间 车牌号\n");
    for(i=1;i<=S->top;i++)
    {
      printf("  %d ",i);
      printf("    %d:%d ",S->stack[i]->reach.hour,S->stack[i]->reach.min);
      printf(" %s\n",S->stack[i]->num);
    }
  }
  else
    system("cls");
    printf("\n车场里没有车");
}
void list2(LinkQueueCar *W)  //列表显示便道信息
{
  QueueNode *p;
  p=W->head->next;
  if(W->head!=W->rear)  //判断通道上是否有车
  {
      system("cls");
    printf("\n等待车辆的车牌号为:\n");
    while(p!=NULL)
    {
      puts(p->data->num);
      p=p->next;
    }
  }
  else
    system("cls");
    printf("\n便道里没有车.");
}
/*************************************************  
 *功能描述:显示存车信息void list(SeqStackCar,LinkQueueCar);
 *输入参数:功能选择
 *输出参数:函数的调用
 *返回值:  
 *其他说明:
************************************************* /

void list(SeqStackCar S,LinkQueueCar W)
{
  int flag;
  int g;
  flag=1;
  while(flag)
  {
       system("cls");
    printf("\n请选择 1|2|3:");
    printf("\n1.车场\n2.便道\n3.返回\n");
    while(1)
    {
      scanf("%d",&g);
      if(g>=1 || g<=3)
        break;
      else
        printf("\n请选择 1|2|3:");
    }
    switch(g)
    {
    case 1:
      list1(&S);
      system("pause");
      system("cls");
      break;  //列表显示车场信息
    case 2:
      list2(&W);
      system("pause");
      system("cls");
      break;  //列表显示便道信息
    case 3:
      flag=0;
      system("cls");
      break;
    default: break;
    }
  }
}
main.cpp:
/********************************************** 
 *Copyright(c)2017,烟台大学计算机学院 
 *All right reserved. 
 *文件名称:main.cpp
 *作者:李小同 
 *完成日期;2017年12月21日 
 *当前版本号;v1.1 
 * 
 *修改日期:20171221
 *版本号:v1.1
 *修改人:李小同
 *修改内容:创建
********************************************** /

#include "parking.h"
int main(void)
{
  SeqStackCar Enter,Temp;
  LinkQueueCar Wait;
  int ch;
  InitStack(&Enter);  //初始化车站
  InitStack(&Temp);   //初始化让路的临时栈
  InitQueue(&Wait);   //初始化便道
  while(1)
  {
    printf("------------富强 民主 文明 和谐------\n");
    printf("------------自由 平等 公正 法制------\n");
    printf("------------爱国 敬业 诚信 友善------\n");
    printf(" \n                自动停车场        \n");
    printf(" \n              1. 停车             \n");
    printf("              2. 提车               \n");
    printf("              3. 车场状况           \n");
    printf("              4. Exit               \n");
    printf("\n       收费标准:每分钟5分钱      \n");
    while(1)
    {
      scanf("%d",&ch);
      if(ch>=1 && ch<=4)
        break;
      else
        printf("\nPlease choose: 1|2|3|4.");
    }
    switch(ch)
    {
    case 1:
      arrival(&Enter,&Wait);//车辆到达
      system("pause");
       system("cls");
      break;
    case 2:
      leave(&Enter,&Temp,&Wait);//车辆离开
      system("pause");
       system("cls");
      break;
    case 3:
      list(Enter,Wait);//列表打印信息
      system("pause");
       system("cls");
      break;
    case 4:
        exit(0);  //退出程序
    default:
      break;
    }
  }
}

运行结果:

----------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 42
    点赞
  • 295
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
实验二 停车场管理 班级:A0712 学号:12 姓名:冷清淼 成绩:__________ 指导教师签名:__________ 一、问题描述 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场 ,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若停车场已停满 n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开 入。当停车场某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该 辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时 间的长短交费(在便道上停留的时间不收费)。 设计要求: 1.模拟上述管理过程。要求以顺序栈模拟停车场,以链队列模拟便道。 2.从终端读入汽车到达或离去的数据,每组数据包括三项: (1)是"到达"还是"离开"; (2)汽车牌照; (3)"到达"或"离开"的时刻。 3.与每组输入信息相应的输出信息为:如果是到达的车辆,则输出其在停车场中或 便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用。 二、算法说明 1.数据结构说明 (1)用到两个堆栈:一个为车场栈;另一个为临时栈temp typedef struct NODE{ CarNode *stack[MAX+1]; int top; }SeqStackCar; /*模拟车场*/ 一个队列结构,存储便道车辆信息: typedef struct Node{ QueueNode *head; QueueNode *rear; }LinkQueueCar; /*模拟便道*/ 2.算法说明 (1) 功能模块说明:停车场管理系统含有三个模块,即:车辆到达、离开、列表显示 图1 (2)以模块为单位分析算法 1、"到达"模块:到达时有两种情况,即车场是否满,未满则直接进入停车场;满时,到 便道等待。如图2。 图2 2."离开"模块:离开时,当车库为空时,提示没有车,结束;否则车辆离开。如图3。 图3 3. "显示"模块:显示模块有两个显示选项,即:车场与便道。如图4。 图4 三、测试结果 (一)测试用例(说明:测试用例要合理并且足够,既要有正确用例,也要有错误用例 ,同时检验程序的正确性和强壮性) 1.第一组测试用例 (1)测试输入:停车场的车辆离开,如下表: "服务选择 "车牌号/车位 "到达/离开时间 " "1 "QH058 "15:25 " "1 "AB123 "18:45 " "1 "EA642 "23:15 " "2 "2 "0:30 " "2 "1 "0:65(错误) " (2)测试目的:测试离开方法时间格式控制以及费用计算是否正确。 (3)正确输出:第一次离开的是AB123,应交费3.45元。第二次时,当在输入65时, 应该提示输入错误,重输。 (4)实际输出: (5)错误原因:第一个错误是在计算时,一个数字错了;第二个是没有对时间格式 控制。 (6)当前状态:已改正 2.第二组测试用例 (1)测试输入:连续6辆车到达,如下表: " 服务选 " 车牌号 " 到达时间 " "择 " " " "1 "A8828 "7:56 " "1 "S2296 "8:25 " "1 "WW666 "8:45 " "1 "HK456 "15:50 " "1 "GH999 "12:30 " "1 "DD555 "13:40 " 测试目的:测试到达方法与列表显示方法能否正确完成。 (3)正确输出:先到达的五辆车先进入停车场,最后到达的一辆在便道等候。 (4)实际输出: (5)错误原因:没有作出时间先后的判断,而是先输入先进入。 (6)当前状态:待修改 3.第三组测试用例 (1)测试输入:接上一步输入离开信息,下表: "服务选择"离开车位"离开时间"便道车进入时 " " " " "间 " "2 "3 "13:30 "13:40 " (2)测试目的:测试离开方法功能是否成功以及便道进入车场是否正确。 (3)正确输出:输出3号车位的车辆离开信息清单,便道1号车进入停车场。 (4)实际输出: 错误原因:没有错误。 (6)当前状态:通过 (二)测试结果分析 此停车管理系统基本可能实现一个小的停车场的管理,其"到达"与"离开"方法都相对比 较完整,以及结算清单明了。尽管在时间先后上有出现混乱,但当其用到实际应用时, 那个时间先后就可以避免了。但在输入数据时,要按照严格的格式输入,否则有可能出 现死去或崩溃。若本系统能加上保存功能就更好了,因为一个系统在使用过程中总会关 机等,而此系统的缺点却是没有保存功能,关闭之后就要重新建立了。会慢慢完善。 附录:源代码 ///系统说明:本系统适应于小型停车场,且停车时间在一天之的短期停放停车场。 //在此系统中,车库容量设置为5,便于测
#include<stdio、h> #include<stdlib、h> #include<string、h> #define MAX 3 /*车库容量*/ #define price 0、5 /*每车每分钟费用*/ typedef struct time { int hour; int min; }Time; /*时间结点*/ typedef struct node { char num[10]; Time reach; Time leave; }CarNode;/*车辆信息结点*/ typedef struct NODE { CarNode *stack[MAX + 1]; int top; }Moni_Cheku; typedef struct car { CarNode *data; struct car *next; }QueueNode; typedef struct Node { QueueNode *head; QueueNode *rear; }Moni_Biandao; void InitStack(Moni_Cheku *); /*初始化车库*/ int InitQueue(Moni_Biandao *); /*初始化便道*/ int Arrival(Moni_Cheku *, Moni_Biandao *); /*车辆到达*/ void Leave(Moni_Cheku *, Moni_Cheku *, Moni_Biandao *); /*车辆离开*/ void List(Moni_Cheku, Moni_Biandao); /*显示车库与便道的存车信息*/ int main() { Moni_Cheku Enter, Temp; Moni_Biandao Wait; int ch; InitStack(&Enter); /*初始化车站*/ InitStack(&Temp); /*初始化让路的临时链表*/ InitQueue(&Wait); /*初始化便道*/ printf("\n"); printf(" ^_^欢迎进入停车场管理系统1!^_^\n"); printf("\n"); printf("提示! (1)、该车库的最大容量为:%d;\n", MAX); printf(" (2)、该车库的收费标准为:%4、2f元/(辆*分钟)、\n", price); while (1) { system("CLS"); printf("********************主菜单********************\n"); printf("1、车辆到达"); printf(" 2、车辆离开"); printf(" 3、列表显示"); printf(" 4、退出系统\n"); printf("**********************************************\n"); printf("请选择(1-4):[ ]\b\b"); while (1) { scanf("%d",&ch); if (ch >= 1 && ch <= 4)break; else printf("错误!请重选(1-4):[ ]\b\b"); } switch (ch) { case 1:Arrival(&Enter, &Wait); break; /*车辆到达*/ case 2:Leave(&Enter, &Temp, &Wait); break; /*车辆离开*/ case 3:List(Enter, Wait); break; /*打印列表信息*/ case 4:exit(0); /*退出主程序*/ default: break; } } return 0; } void InitStack(Moni_Cheku *s) /*初始化车库*/ { int i; s->top = 0; for (i = 0; i <= MAX; i++) s->stack[s->top] = NULL; } int InitQueue(Moni_Biandao *Q) /*初始化便道*/ { Q->head = (QueueNode *)malloc(sizeof(QueueNode)); if (Q->head != NULL) { Q->head->next = NULL; Q->rear = Q->head; return(1); } else return(-1); } void PRINT(CarNode *p, int room) /*输出出库车的信息*/ { int A1, A2, B1, B2; { printf("请输入离开的时间:/**:**/"); scanf("%d:%d", &(p->leave、h
停车场管理系统是一种典型的实时动态信息处理系统,其核心是实现停车场车位的管理,车辆的进出管理,计费管理等功能。在实现停车场管理系统时,需要使用到数据结构,例如链表、栈、队列等,来实现车辆进出管理和计费等功能。以下是停车场管理系统课程设计的基本步骤和实现思路: 1.需求分析 首先需要对停车场管理系统的需求进行分析,明确系统的功能、用户需求、数据处理等方面的要求。例如,需要考虑系统的进出口控制、计费规则、车位数目等等。 2.系统设计 在需求分析的基础上,进行系统的设计。设计包括界面设计、数据库设计、程序设计等方面。例如,可以设计进出口控制器、车位管理模块、计费管理模块等。 3.数据结构设计 在程序设计中,需要考虑到使用哪些数据结构来实现停车场管理系统的要求。例如,使用链表来实现车位管理、栈来实现进出口控制等。 4.系统实现 在系统设计和数据结构设计完成后,需要进行具体的编码实现。在实现过程中,需要注意代码的规范性和可读性,保证系统的稳定性和可靠性。 5.测试和优化 在系统实现完成后,需要进行测试和优化。测试过程中,可以模拟多种情况,例如车辆的进出、计费等,测试系统的稳定性和准确性。在测试过程中,需要发现问题并及时进行优化,保证系统的正常使用。 总的来说,停车场管理系统的课程设计需要充分考虑到数据结构的应用,实现对车辆进出管理和计费等功能的支持。同时,需要注重系统的稳定性和可靠性,保证系统的正常运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值