⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 czhguanli.txt

📁 车辆收费系统 针对日常停车场的收费、流量管理、以及停车时间计费等一系列功能。
💻 TXT
字号:

车站管理系统---自动计算费用 


#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "time.h" 
#define null 0
#define Maxsize 4

void clear(char a[])

{
int i,counta;
counta=strlen(a);
for(i=0;i<counta;i++)
 a='\0';
}

struct car  //定义车的结构体
{
char message[10];
char num[10];
char intime[10];
char outtime[10];
int expense;
int delay;
int position;
};


typedef struct  //*****************************************栈*********************************
{
struct car d[Maxsize];
int top;
}SeqStack;

void init(SeqStack *s) //初始化栈
{
s->top=-1;
}

int isemptystack(SeqStack *s)   //判断栈是否为空
{
if(s->top==-1)
 return 1;
else
 return 0;
}

int isfullstack(SeqStack *s)  //判断栈是否为满
{
if(s->top==Maxsize-1)
 return 1;
else
 return 0;
}

void push(SeqStack *s,struct car x)  // 进栈
{
if(!isfullstack(s)) 
{
 s->top++;
 s->d[s->top]=x;
}
}

struct car pop(SeqStack *s)  //,取栈顶元素,出栈
{
car x;
if(s->top!=-1)
{
 x=s->d[s->top];
 s->top--;
 return x;
}

}


car gettop(SeqStack *s) //取栈顶元素
{
car x;
if(s->top!=-1) 
{
 x=s->d[s->top];
 return x;
}

}
//*************************************************栈*************************************


//*****************************************队列链表**************************************

typedef struct slnode  //定义链队列的接点性质
{
struct car data;
struct slnode *next;
}slnodetype;

typedef struct  //定义链的性质
{
slnodetype *head;
slnodetype *rear;
}linkq;

void initq(linkq *q)  //初始化链队列
{
q->head=(slnodetype*)malloc(sizeof(slnodetype));
q->rear=q->head;
q->head->next=null;
q->rear->next=null;
}


void addq(linkq *q,struct car x)   //进队列*************some problem 
{
slnodetype *p;
p=(slnodetype*)malloc(sizeof(slnodetype));
p->data=x; 
p->next=null; 
q->rear->next=p;
q->rear=p;
} 


struct car delq(linkq *q)  //出链队列
{
slnodetype *p;
struct car x;
if(q->head!=q->rear)
{
 p=q->head->next;
 if(p->next==null)
 {
  x=p->data;
  q->rear=q->head;
  free(p);
 }
 else
 {
  q->head->next=p->next;
  x=p->data;
  free(p);
 }
 return x;
}

}


int isemptyq(linkq *q)  //判断链队列是否为空
{
if(q->rear==q->head)
 return 1;
else
 return 0;

}

  //*******************************队列链表***********************//

void print1(struct car x)  //进站前的信息
{

printf("车牌\t进站时间\t进/出站\t停留时间\t费用\n");
printf("%s\t\t",x.num);
printf("Movein\t\t\t\n");

}


void print3(struct car *x)  //出站时的信息
{

printf("车牌 进站时间 进/出站 出站时间 原来位置 停留时间(秒) 费用(美分)\n");
printf("%s ",x->num);
printf("%s\t",x->intime);
printf("出  ");
printf(" %s\t",x->outtime);
printf(" %d\t ",x->position);
printf(" %d\t",x->delay);
printf("\t%d\n",x->expense);

}

void printstack(SeqStack *s)
{
int i;

if(isemptystack(s))
 printf("车站内没有车.");
else
{
 printf("\t车站内\n位置\t车牌\t进站时间 站内状况\n");
 for(i=0;i<=s->top;i++)
 {
  printf("%d\t",s->d.position);
  printf("%s\t",s->d.num);
  printf("%s\n",s->d.intime);
 }
 printf("\t\t\t共%d辆",s->top+1);
 if(s->top==Maxsize-1)
  printf("(已满)\n");
 else
  printf("(还能放%d辆)\n",Maxsize-1-s->top);
  printf("\n");
}

}



void printq(linkq *q)
{

if(!isemptyq(q))
{
 slnodetype *p;
 p=q->head->next;
 printf("\t过道:\n车牌\t进道时间\n");
 printf("%s\t%s\n",p->data.num,p->data.intime);
 while(p->next!=null)
 {
  p=p->next;
  printf("%s\t%s\n",p->data.num,p->data.intime);
 }
}
else
 printf("\n过道上没有车在等待\n");

}

void review(SeqStack *s,linkq *q)  //查看车站和过道上的情况
{
printf("**************************************\n");
printstack(s);
printq(q);
printf("**************************************\n");
}

void gettime(char a[])  //获取时间
{ 
int i;
  static char nowtime[30];
time_t t; 
  time(&t); 
  strcpy(nowtime,ctime(&t));
  for(i=0;i<9;i++)
  nowtime=nowtime[i+11];
  nowtime='\0';
  strcpy(a,nowtime);
  
} 
void incar(SeqStack *s,linkq *q)     //车进站 ****************************
{

struct car k;
static char nowtime1[10];
printf("请你输入车牌(2-5位):\n");
gets(k.num); 
gettime(nowtime1);


 strcpy(k.intime,nowtime1);

 if(!isfullstack(s)&&isemptyq(q))  //如果车站不满,而且过道上没有车则,直接进入车站
 {
  k.position=(s->top)+2; 
  push(s,k);
  printstack(s); 
 }

 else if(isfullstack(s)||!isemptyq(q))  //如果过道上还有车,则必须放在过道上
 {
  
  printf("************************警告*******************************\n车站已满,请先暂时放在过道.\n现在情况如下:\n");
  k.position=Maxsize;
  addq(q,k);//放在过道上

  printstack(s); //输出车站的情况     
  printq(q);  //同时输出当时过道上的情况
  printf("***********************************************************\n");
 }

}


void outcar(SeqStack *s,linkq *q)  //车出站
{
SeqStack p;  //申请临时放车的地方
init(&p);
char nowtime[10];
int i,pos;
long cost;
int hour,min,sec;
struct car x,b,y1,y2,z;

if(isemptystack(s))
{ 
 printf("车站是空的,不能再出站了!\n");
 printf("\a");
}

else  
{
 printf("现在车站的情况是:\n");
 printstack(s);
 printf("你要出站的车的序号:\n");
 scanf("%d",&pos);
 if(pos>0&&pos<=s->top+1)
 {
  for(i=s->top+1;i>pos;i--)
  {
  x=pop(s);
  x.position=x.position-1;
  push(&p,x);
  }
  b=pop(s);
  gettime(nowtime);
  strcpy(b.outtime,nowtime);
  hour=(b.outtime[0]-'0')*10+(b.outtime[1]-'0')-((b.intime[0]-'0')*10+(b.intime[1]-'0'));
  min=(b.outtime[3]-'0')*10+(b.outtime[4]-'0')-((b.intime[3]-'0')*10+(b.intime[4]-'0'));
  sec=(b.outtime[6]-'0')*10+(b.outtime[7]-'0')-((b.intime[6]-'0')*10+(b.intime[7]-'0'));
  b.delay=hour*3600+min*60+sec;
  cost=b.delay;
  b.expense=cost;
  print3(&b); //输出车出站时的情况---进入时间,出站时间,原来位置,花的费用等
  while(!isemptystack(&p))  //车出来后把刚才退出的车重新放回
  {
  z=pop(&p);
  push(s,z);
  }
  if(!isfullstack(s)&&!isemptyq(q))
  {
  y1=delq(q);
  strcpy(y1.intime,nowtime);
  push(s,y1);
  }
  while(!isfullstack(s)&&!isemptyq(q)) //只要过道上有车,就往车站里进,除非车站满了
  {
  y2=delq(q);
  push(s,y2);
  }
  
 }
 else
 { 
  printf("没有你要的车号!\n");
  printf("\a");
 }
}
}   

void main()
{
SeqStack park;
linkq q;
init(&park);
initq(&q); 
char mess[10];

printf("\t\t\t车场管理系统\n\t\t\t\t------01软件学院 吴海松(2003.10.23)\n\n\n");
printf("提示:车站内最多只能放Maxsize(由系统中定义)辆车,多余的暂时放在过道上.\n车站内收费标准:1美分/秒,过道上不收费.\n");
printf("你想进行什么操作?\nin ---->车进站\nout ---->车出站\nlist ---->查看车站及过道中的情况\nhelp ---->获取帮助\nend ---->退出系统\n");
printf("\n操作:");
gets(mess);
while(1)
{
 if(strcmp(mess,"end")==0)
 {
  printf("\t\t\t欢迎下次再来,再见!\n");
  break;
 }
 else if(strcmp(mess,"help")==0)
 {
  printf("你想进行什么操作?\nin ---->车进站\nout ---->车出站\nlist ---->查看车站及过道中的情况\nhelp ---->获取帮助\nend ---->退出系统\n");
  printf("操作:");
  clear(mess);
  gets(mess);
 }
 else
 {
  
  if(strcmp(mess,"list")==0)
  { review(&park,&q);
  printf("操作:");
  }
  else if(strcmp(mess,"in")==0)
  { incar(&park,&q);
  printf("操作:");
  }
  else if(strcmp(mess,"out")==0)
  { outcar(&park,&q);
  }
  else
  printf("操作:");
  clear(mess);
  gets(mess);
 }
}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -