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

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

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

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

具体请运行代码。

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 
#include 
#include 
#include 
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;
    }
  }
}

运行结果:

数据结构课程设计-停车场管理系统_第1张图片

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

数据结构课程设计-停车场管理系统_第2张图片

----------------------------------------------------------------------------------------------------------------------------------------------------------------数据结构课程设计-停车场管理系统_第3张图片

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

----------------------------------------------------------------------------------------------------------------------------------------------------------------数据结构课程设计-停车场管理系统_第4张图片

----------------------------------------------------------------------------------------------------------------------------------------------------------------数据结构课程设计-停车场管理系统_第5张图片

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

你可能感兴趣的:(第16周)