停车场系统

来源:互联网 发布:仓库管理系统 php 编辑:程序博客网 时间:2024/04/19 16:33

题目要求:

#include <iostream>  #include <cstdio>  #include <cstdlib>  #include <windows.h>  #include <ctime>  #include <cstring>  #include <conio.h>  #define N 100  using namespace std;  typedef struct  {      char num[8];//车牌号      long int time_in;      int pos;//车辆的状态,0表示停在便道中,1表示停在停车场  } vehicle; //定义车辆类型  typedef struct  {      vehicle veh[N];      int top;  } SqStack; //用栈表示停车场  typedef struct LNode  {      vehicle veh;      struct LNode *next;  } LinkList; //用单链表表示便道  void Load(FILE *,SqStack *,LinkList *);  void ShowMenu(int );  int MakeChoice(int ,int );  void Parking(SqStack *,LinkList *);  void Back(SqStack *);  void EnterPkl(SqStack *,LinkList *);  void LeavePath(LinkList *);  void View(SqStack *,LinkList *);  void Write_and_Quit(FILE *,SqStack *,LinkList *);  int main()  {      SqStack *pkl;      LinkList *path;      FILE *fp;      pkl=(SqStack *)malloc(sizeof(SqStack));      path=(LinkList *)malloc(sizeof(LinkList));      fp=fopen("Parking_lot.txt","r+");      if(fp==NULL)      {          printf("数据加载失败!按任意键退出程序");          getch();          return 0;      }      Load(fp,pkl,path);      while(1)      {          system("cls");          ShowMenu(pkl->top);          switch(MakeChoice(1,6))          {          case 1:              system("cls");              Parking(pkl,path);              break;          case 2:              system("cls");              Back(pkl);              break;          case 3:              system("cls");              EnterPkl(pkl,path);              break;          case 4:              system("cls");              LeavePath(path);              break;          case 5:              system("cls");              View(pkl,path);              break;          default:              system("cls");              Write_and_Quit(fp,pkl,path);              return 0;          }      }      return 0;  }  

#include <iostream>  #include <cstdio>  #include <cstdlib>  #include <windows.h>  #include <ctime>  #include <cstring>  #include <conio.h>  #define N 100  using namespace std;  typedef struct  {      char num[8];//车牌号      long int time_in;      int pos;//车辆的状态,0表示停在便道中,1表示停在停车场  } vehicle; //定义车辆类型  typedef struct  {      vehicle veh[N];      int top;  } SqStack; //用栈表示停车场  typedef struct LNode  {      vehicle veh;      struct LNode *next;  } LinkList; //用单链表表示便道  void Load(FILE * fp,SqStack * pkl,LinkList * path)  {      pkl->top=-1;      path->next=NULL;      LinkList *p;      char num[8];      long int time_in;      int pos;      while(fscanf(fp,"%s %ld %d\n",num,&time_in,&pos)!=EOF)      {          if(pos==0)//该车辆在便道中          {              //尾插法建立单链表              p=(LinkList *)malloc(sizeof(LinkList));              strcpy(p->veh.num,num);              p->veh.time_in=time_in;              p->veh.pos=pos;              path->next=p;              path=p;          }          else//该车辆在停车场中          {              ++pkl->top;              strcpy(pkl->veh[pkl->top].num,num);              pkl->veh[pkl->top].time_in=time_in;              pkl->veh[pkl->top].pos=pos;          }      }      path->next=NULL;  }  void ShowMenu(int n)  {      printf("********一个简单的停车场管理系统********\n");      if(n+1==N)          printf("***************停车场已满***************\n");      else          printf("**********当前停车场共有%03d辆车**********\n",n+1);      printf("********说明:停车场每小时收费5元********\n");      printf("****************1.停车******************\n");      printf("****************2.取车******************\n");      printf("*********3.便道车辆进入停车场***********\n");      printf("**************4.离开便道****************\n");      printf("**************5.查看车辆****************\n");      printf("****************6.退出******************\n");  }  int MakeChoice(int m,int n)  {      int judge;      printf("请输入%d~%d\n",m,n);      scanf("%d",&judge);      while(judge<m||judge>n)//确保输入的是1~n      {          printf("输入不合法,请输入%d~%d\n",m,n);          fflush(stdin);//如果不加这句,输入一些字母会导致函数无限循环          scanf("%d",&judge);      }      return judge;  }  void Parking(SqStack *pkl,LinkList *path)  {      LinkList *r;      printf("请输入车牌号:");      if(pkl->top<N-1)      {          fflush(stdin);          scanf("%8s",pkl->veh[++pkl->top].num);          time(&(pkl->veh[pkl->top].time_in));          pkl->veh[pkl->top].pos=1;          printf("您的车辆已停至%2d号车位\n",pkl->top);      }      else      {          fflush(stdin);          r=(LinkList *)malloc(sizeof(LinkList));          scanf("%8s",r->veh.num);          printf("停车场已满,您要暂时停放在便道中吗?\n");          printf("1.确定 2.取消\n");          if(MakeChoice(1,2)==1)          {              while(path->next!=NULL)                  path=path->next;              r->veh.time_in=0;              r->veh.pos=0;              path->next=r;              r->next=NULL;              printf("您的车辆已停放到便道中\n");          }          else              free(r);      }      printf("按任意键返回主菜单");      getch();      return;  }  void Back(SqStack *pkl)  {      int n,i=0;      long int time_out;      double hours;      vehicle t_pkl[N];      printf("请输入您的车辆所在的车位(目前还有个小问题,前面的车走了之后当前车位会-1):");      n=MakeChoice(0,pkl->top);      printf("%2d上的车辆车牌号为%s,您确定要取走该车辆吗?\n",n,pkl->veh[n].num);      printf("1.确定 2.取消\n");      if(MakeChoice(1,2)==1)      {          time(&time_out);          hours=(time_out-pkl->veh[n].time_in)/3600.0;          printf("本次停车共计%lf小时,收费%lf元,请按任意键确认支付\n",hours,hours*5);          getch();          for(i=0; pkl->top>=n; --pkl->top,++i) //把第n辆到第pkl->top辆车移到t_pkl              t_pkl[i]=pkl->veh[pkl->top];          //此时pkl->top指向第n-1辆车          for(i-=2; i>=0; --i) //把第n+1辆到第pkl->top辆车移回pkl              pkl->veh[++pkl->top]=t_pkl[i];          printf("支付成功!\n");          printf("取车成功,按任意键返回主菜单");          getch();          return;      }      else      {          printf("按任意键返回主菜单");          getch();          return;      }  }  void EnterPkl(SqStack *pkl,LinkList *path)  {      if(pkl->top==N-1)          printf("停车场已满!");      else      {          printf("您确定将便道中第一辆车(车牌号:%8s)停入停车场吗?\n",path->next->veh.num);          printf("1.确定 2.取消\n");          if(MakeChoice(1,2)==1)          {              pkl->veh[++pkl->top]=path->next->veh;              time(&pkl->veh[pkl->top].time_in);              path->next=path->next->next;              printf("已停入停车场\n");          }      }      printf("按任意键返回主菜单");      getch();      return;  }  void LeavePath(LinkList *path)  {      int i=0,n;      LinkList *q;      printf("请输入要离开便道的车辆的位序:");      scanf("%d",&n);      while(i<n&&path!=NULL)      {          ++i;          q=path;//保存当前节点的前一个节点,如果找到的位置在链表最后,需要将前一个节点的指针域置为NULL          path=path->next;      }      if(path!=NULL)      {          printf("您确定便道中第%03d辆车(车牌号:%8s)离开便道吗?\n",n,path->veh.num);          printf("1.确定 2.取消\n");          if(MakeChoice(1,2)==1)          {              if(path->next!=NULL)//确定离开并且不是便道中最后一辆车              {                  q=path->next;                  path->next=q->next;                  free(q);                  printf("第%03d辆车已离开便道\n",n);              }              else//确定离开并且是便道中最后一辆车              {                  printf("第%03d辆车已离开便道\n",n);                  q->next=NULL;                  free(path);              }          }      }      else          printf("没有找到第%03d辆车\n",n);      printf("按任意键返回主菜单");      getch();      return;  }  void View(SqStack *pkl,LinkList *path)  {      int i;      long int time_out;      double hours;      time(&time_out);      printf("停车场共有%03d辆车:\n",pkl->top+1);      for(i=0; i<=pkl->top; ++i)      {          hours=(time_out-pkl->veh[i].time_in)/3600.0;          printf("车位:%2d 车牌号:%8s 停车时长:%lf 应缴费用:%lf\n",i,pkl->veh[i].num,hours,hours*5);      }      printf("便道车辆:\n");      if(path->next==NULL)          printf("无\n");      while(path->next!=NULL)      {          path=path->next;          printf("车牌号:%s\n",path->veh.num);      }      printf("按任意键返回主菜单");      getch();      return;  }  void Write_and_Quit(FILE *fp,SqStack *pkl,LinkList *path)  {      rewind(fp);      LinkList *pre=path,*p=path->next;      for(; pkl->top>-1; --pkl->top)          fprintf(fp,"%s %ld %d\n",pkl->veh[pkl->top].num,pkl->veh[pkl->top].time_in,pkl->veh[pkl->top].pos);      while(p!=NULL)      {          free(pre);          fprintf(fp,"%s %ld %d\n",p->veh.num,p->veh.time_in,p->veh.pos);          pre=p;          p=pre->next;      }      free(pre);      free(pkl);      fclose(fp);  }