利用链表实现简单的t停车场信息管理系统

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 2//车库容量
#define price 0.05//每车每分钟费用

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;
}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);

int main(void)
{
SeqStackCar Enter,Temp;
LinkQueueCar Wait;
int ch;
InitStack(&Enter);
InitStack(&Temp);
InitQueue(&Wait);

while(1)
{
printf("|-----------------------------------------------|\n");
printf("| 1.The car arrive |\n");
printf("| 2.The car leave |\n");
printf("| 3.The schedule |\n");
printf("| 4.Exit |\n");
printf("|-----------------------------------------------|\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);
break;
case 2:
leave(&Enter,&Temp,&Wait);
break;
case 3:
list(Enter,Wait);
break;
case 4:
exit(0);
default:
break;
}
}
}

void InitStack(SeqStackCar *s)
{
int i;
s->top = 0;
for(i = 0; i <= MAX; ++i)
{
s->stack[s->top] = NULL;
}
}
int InitQueue(LinkQueueCar *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("\nPlease input the depart time:/**:**/");
scanf("%d:%d",&(p->leave.hour),&(p->leave.min));
printf("\nThe number of the car:");
puts(p->num);
printf("\nThe time The car arrive:%d:%d",p->reach.hour,p->reach.min);
printf("\nThe depart time:%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("\nThe fee: %2.1f元",((B1-A1)*60+(B2-A2)*price));
free(p);
}

int arrival(SeqStackCar *Enter,LinkQueueCar *W)
{
CarNode *p;
QueueNode *t;
p = (CarNode *)malloc(sizeof(CarNode));
flushall();
printf("\nInput the number of the car(例:陜A1234):");
gets(p->num);
if(Enter->top < MAX)
{
Enter->top ++;
printf("\nThe place of the car.",Enter->top);
printf("\nThe time the car arrive:/**:**/");
scanf("%d:%d",&(p->reach.hour),&(p->reach.min));
Enter->stack[Enter->top] = p;
return 1;
}
else
{
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 *Enter,SeqStackCar *Temp,LinkQueueCar *W)
{
int i,room;
CarNode *p,*t;
QueueNode *q;
if(Enter->top > 0)
{
while(1)
{
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 < MAX)
{
q = W->head->next;
t = q->next;
Enter->top ++;
printf("\n便道的%s号车进入车场的第%d位置。",t->num,Enter->top);
printf("\n请输入现在的时间/**:**/:");
scanf("%d:%d",&(t->reach.hour),&(t->reach.min));
W->head->next = q->next;
if(q == W->rear)
W->rear = W->head;
Enter->stack[Enter->top] = t;
free(q);
}
else
{
printf("\n便道没有车");
}
}
else
{
printf("\n车场里没有车。");
}
}
void list1(SeqStackCar *S)
{
int i;
if(S->top > 0)
{
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);
puts(S->stack[i]->num);
}
}
else
{
printf("\n车场里没有车。");
}
}
void list2(LinkQueueCar *W)
{
QueueNode *p;
p = W->head->next;
if(W->head != W->rear)
{
printf("\n等待车辆号码为:");
while(p != NULL)
{
puts(p->data->num);
p = p->next;
}
}
else
{
printf("\n便道里没有车。");
}
}
void list(SeqStackCar S,LinkQueueCar W)
{
int flag,tag;
flag = 1;
while(flag)
{
printf("\n请选择 1|2|3:");
printf("\n1.车场\n2.便道\n3.返回\n");
while(1)
{
scanf("%d",&tag);
if(tag >= 1 || tag <= 3)
{
break;
}
else
{
printf("\n请选择 1|2|3:");
}
}
switch(tag)
{
case 1:
list1(&S);
break;
case 2:
list2(&W);
break;
case 3:
flag = 0;
break;
default:
break;
}
}
}

时间: 2024-08-19 12:42:27

利用链表实现简单的t停车场信息管理系统的相关文章

利用链表实现简单的学生信息管理系统

#include <stdio.h>#include <stdlib.h>#include <string.h> typedef struct student{ int id; char name[20]; int age; char sex; char birthday[20]; char address[20]; char phone[15]; char email[30]; struct student *next;}student; student *head

学生信息管理系统修改

北京工业大学耿丹学院 c语言设计课程报告   课程设计名称:高级语言程序设计 专业班级:计算机科学与技术1 姓名:吴双 学号:150809201   2016年5月10日 一 对c语言指针链表的体会 ------------------------ 二 修改学生信息管理系统 ------------------------ 三 体会 ------------------------ 一 对c语言指针链表的体会 1.指针 简单来说,指针是一个存储计算机内存地址的变量. 用 int *ptr 这种形

数据结构概述&lt;3&gt;链表的简单应用

今天介绍两个链表的简单应用. 1.约瑟夫问题 假设有N个人决定选出一个领导人,方法如下:所有人排成一个圆圈,按顺序数数,每次数到第M个人出局,此时,他两边的人靠拢重新形成圆圈.问题是找出哪一个人将会是最后剩下的那个人.下列程序依次读入N和M,并给出最终结果. #include <stdlib.h> #include <stdio.h> typedef struct node* link; struct node { int item; link next; }; int main(

C++利用反射和简单工厂模式实现业务模块解耦

1. 业务说明 为了便于说明,举一个简单的例子.假设现在有一个项目需要建立一个和银行交互的平台,目前只接入工商银行,后续接入其他银行,每个银行的业务都有差异,报文格式可能也不一致. 这里只列举几个简要的流程,仅包括拼报文,发送报文,接收报文,解析报文,其余整体架构以及后续处理等内容省略. 2. 初步设计 创建一个银行交互类 BankOpt,包括四个函数: int setMsg(); //拼报文 int sendMsg(); //发送报文 int getMsg(); //接收报文 int pars

记录利用ettercap进行简单的arp欺骗和mitm攻击过程

方法均来自网络,本人只是记录一下自己操作的过程,大神请无视之- 攻击主机平台:kali-linux        被攻击主机:安卓手机192.168.1.107    (在同一局域网内) 1.利用ettercap进行arp欺骗: root权限下打开ettercap:ettercap -C (curses UI)             ettercap -G (GTK+ GUI) curses UI工作界面: GTK+ UI工作界面: 这里以GTK+ UI为例,打开ettercap之后,选择Sn

[python网络编程]利用socket编写简单的服务器

利用socket编写简单的服务器 步骤解析 建立socket对象 这一步跟我们上次使用socket做客户端是一样的,都需要有一个socket连接 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 设置socket选项(setsockopt) 选项介绍setsockopt(set socket option),参数设置格式:setsockopt(level,optname,value) 各选项的关系:1.level:level的设定决定了op

ArcGIS利用DEM制作简单三维

利用DEM数据镶嵌后,矢量数据裁剪得到研究范围的DEM数据,在ARCScene中进行三维制作 ArcGIS利用DEM制作简单三维 点击学习我的系统教程哦

如何利用jQuery进行简单表单验证

如何利用jQuery进行简单表单验证:利用jQuery可以进行表单验证,当然有比较复杂的表单验证,这里就不介绍了,下面就简单介绍一下如何使用jQuery进行简单的表单验证,然后大家可以通过改造进行基本的表达验证了.先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http

开源项目成熟度分析工具-利用github api获取代码库的信息

1.github api github api是http形式的api,功能还是比较丰富的,博主因为项目的原因主要用到的是提取project信息这项功能,返回的数据是JSON格式. api页:https://developer.github.com/v3/ Options: (H) means HTTP/HTTPS only, (F) means FTP only --anyauth Pick "any" authentication method (H) -a, --append Ap