• 啥啊
    了解作者
  • C/C++
    开发工具
  • 2KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2016-10-31 22:59
    上传日期
基于linux的停车场系统,主要用到堆栈和队列
parking.zip
  • parking蒋恒.c
    7.2KB
内容介绍
//停车场管理系统 #include <stdio.h> #include <time.h> #include <stdlib.h> #include <sys/time.h> #include <string.h> #define MAXSIZE 3 //顺序栈结构 typedef struct { int mon; int day; int hour; int min; int sec; time_t sumtim; }tim; typedef struct { char chepai[20]; tim intime; tim outime; }car; typedef struct { car data[MAXSIZE]; int flag[MAXSIZE]; //有车时为1,没车为0; int count; }stack; //链式队列结构 typedef struct ss { car data; struct ss *next; }qnode; typedef struct{ qnode *front; qnode *rear; }queue; int mainmenu(void); //栈和队列 stack *initstack(void); int emptystack(stack *head); void pushstack(stack *head,car p); car popstack(stack *head); queue *initqueue(void); void insert_queue(queue *head,car data); car delete_queue(queue *head); //车辆到达离开 void arrival(stack *in,queue *wait); int leave(stack *in,queue *wait,car *p); //显示车辆信息 void showsingle_lev(car *p); void show(stack *head); void show_queue(queue *wait); void show_in(car *p); void show_single(car *p); //获取时间 void get_time_in(car *data); void get_time_out(car *data); int main() { int sel; queue *wait; stack *input; car p; input=initstack(); wait=initqueue(); while(1) { sel=mainmenu(); switch(sel) { case 1: arrival(input,wait); break; case 2: //printf("该功能还没做出来\n"); leave(input,wait,&p); break; case 3: show(input); break; case 4: show_queue(wait); break; case 0: return 0; default: printf("please input 1 2 3 4 0\n"); break; } } } void showsingle_lev(car *p) { printf("车牌号:%s\n",p->chepai); printf("车辆到达时间:"); printf("%d月%d日%d时%d分%d秒.\n", p->intime.mon, p->intime.day, p->intime.hour,p->intime.min,p->intime.sec); printf("车辆离开时间:"); printf("%d月%d日%d时%d分%d秒.\n", p->outime.mon, p->outime.day, p->outime.hour,p->outime.min,p->outime.sec); } stack *initstack(void) { stack *p; if((p=(stack *)malloc(sizeof(stack)))==NULL) printf("init fail\n"); p->count=1; memset(p->flag,0,sizeof(p->flag)); //所有车为都为空 return p; } void pushstack(stack *head,car p) { if(head->count==MAXSIZE) { printf("stack is full\n"); return ; } head->data[head->count]=p; head->flag[head->count]=1; //该位停车 head->count++; } car popstack(stack *head) { car p; if(head->count==0) { printf("stack is empty\n"); return ; } head->count--; p=head->data[head->count]; head->flag[head->count]=0; return p; } //带头结点的队列 queue *initqueue(void) { queue *head; qnode *p; head=(queue *)malloc(sizeof(queue)); p=(qnode *)malloc(sizeof(qnode)); if(NULL ==p) { printf("init fail\n"); return NULL; } p->next=NULL; head->front=p; head->rear=p; return head; } //向队列中添加数据 void insert_queue(queue *head,car data) { qnode *p; p=(qnode *)malloc(sizeof(qnode)); if(p==NULL) { printf("insert fail\n"); return ; } p->next=NULL; head->rear->next=p; head->rear=p; strcpy(p->data.chepai,data.chepai); } car delete_queue(queue *head) { qnode *p; car data; p=head->front->next; if(p==NULL) { printf("queue is empty\n"); return ; } head->front->next=p->next; data=p->data; free(p); if(head->front->next==NULL) { head->rear=head->front; //只有一个元素时,队尾指针指向头结点 } return data; } //汽车到达,根据栈是否满判断汽车是否入栈 void arrival(stack *in,queue *wait) { car data; qnode *p; time_t timer; struct tm *tt; printf("please input licnese:\n"); scanf("%s",data.chepai); if(in->count<MAXSIZE) { printf("car arrival time:"); get_time_in(&data); show_in(&data); pushstack(in,data); printf("car is input stack\n"); } else { insert_queue(wait,data); printf("satck is full ,car input queue\n"); } } //车辆离开 int leave(stack *in,queue *wait,car *p) { stack temp; char chepai[20]; int i=1; time_t timer; int flag; struct tm *tt; stack *s; s=initstack(); printf("please input licnese:"); scanf("%s",chepai); while(i<MAXSIZE) { if(strcmp(chepai,in->data[i].chepai)==0&&in->flag[i]==1) { in->flag[i]=0; flag=i; p=&(in->data[i]); get_time_out(p); //显示车辆信息 show_single(p); break; } i++; } if(i==MAXSIZE) { printf("input error\n"); return -1; } in->count--; //如果队列内有车 if(wait->front!=wait->rear) { printf("queue car input stack\n"); in->data[flag]=delete_queue(wait); in->flag[flag]=1; get_time_in(&(in->data[flag])); show_in(&(in->data[flag])); } return 1; } //主菜单 int mainmenu(void) { int sel; printf("***********************************\n"); printf("* 停车场管理系统 *\n"); printf("* 1.车辆到达 *\n"); printf("* 2.车辆离开 *\n"); printf(" 3.显示车辆信息 *\n"); printf(" 4.显示排队车辆信息 *\n"); printf("* 0.退出 *\n"); printf("***********************************\n"); printf("please enter you choice:"); scanf("%d",&sel); return sel; } //显示栈内的车辆信息 void show(stack *head) { int i=1; tim *p; while(i<MAXSIZE) { if(head->flag[i]==1) { p=&(head->data[i].intime); printf("车牌号:%s\n",head->data[i].chepai); printf("到达时间:"); printf("%d月%d日%d时%d分%d秒.\n", p->mon, p->day, p->hour,p->min,p->sec); } i++; } } void show_queue(queue *wait) { qnode *p; if(wait->rear==wait->front) { printf("no car queue!\n"); return ; } else { printf("排队的车:\n"); p=wait->front->next; while(p!=NULL) { printf("车牌号:%s\n",p->data.chepai); p=p->next; } } } void get_time_in(car *data) { time_t t; struct tm *tt; time(&t); tt=localtime(&t); data->intime.mon=tt->tm_mon; data->intime.day=tt->tm_mday; data->intime.hour=tt->tm_hour; data->intime.min=tt->tm_min; data->intime.sec=tt->tm_sec; } void get_time_out(car *data) { time_t t; struct tm *tt; time(&t); tt=localtime(&t); data->outime.mon=tt->tm_mon; data->outime.day=tt->tm_mday; data->outime.hour=tt->tm_hour; data->outime.min=tt->tm_min; data->outime.sec=tt->tm_sec; } void show_in(car *p) { printf("车牌号:%s\n",p->chepai); printf("车辆到达时间:"); printf("%d月%d日%d时%d分%d秒.\n", p->intime.mon, p->intime.day, p->intime.hour,p->intime.min,p->intime.sec); } void show_single(car *p) { printf("车牌号:%s\n",p->chepai); printf("车辆到达时间:"); printf("%d月%d日%d时%d分%d秒.\n", p->intime.mon, p->intime.day, p->intime.hour,p->intime.min,p->intime.sec); printf("车辆离开时间:"); printf("%d月%d日%d时%d分%d秒.\n", p->outime.mon, p->outime.day, p->outime.hour,p->outime.min,p->outime.sec); printf("leave!\n"); }
评论
    相关推荐
    • NS2example.rar
      在ns2下实现无线传感器网络仿真,多个节点进行网络活动
    • tor-0.2.1.20.tar.gz
      The Onion Router 洋葱路由。具体不用解释了。
    • IPMessage.zip
      局域网内聊天和文件传送工具飞鸽传书 传送文件时可以选择一个目录,速度非常快
    • some-ns2-trace-awk.rar
      ns2中的trace分析脚本,用于网络仿真,吞吐量,延时,抖动率的分析
    • WiMAX_Protocol_Code.rar
      This documentation is based on the following versions:- pre-release of the wimax model developed by NIST (file patch-wimax-prerelease-092206)- ns-2.29 此程序是NS2下用C、C++编写的,主要对Wimax 802.16d和802.16e的MAC层协议的仿真,压缩文件内部有详细的说明。 由于NS2运行在Linux下而且是对网络的模拟,因此把它归在Linux/网络类中
    • linux-socket-program.rar
      全套Socket简单编程实例,很适合于初学网络编程者!
    • WSN-node-location-demo2.rar
      无线传感器网络模拟整个流程演示视频demo
    • ns-cbrp.tar.gz
      CBRP协议(移动adhoc中基于分簇的路由协议)ns2下的源码
    • sscom32.rar
      这是一个串口调试功能的工具,可以回显烧入的驱动程序
    • rtsp.rar
      linux\UNIX下跑的一套服务端程序,支持RTSP、RTCP、RTP等各种协议,对做音视频传输挺有参考意义