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

📄 sjjgokcsj.txt

📁 本人自己作的一个数据结构课程设计,曾获得过满分.它是一个停车场管理系统,利用所学的栈,队列知识对停车厂管理系统进行模拟.本程序有记录停车时间的功能并且可以自动计费,功能强大.
💻 TXT
字号:
#define OVERFLOW -2 
#define OK 1 
#define ERROR 0 
#define STACK_INIT_SIZE 1 
typedef int status ; 
#include<stdio.h> 
#include<malloc.h> 
#include<stdlib.h> 
#include<conio.h>
#include<time.h> 
typedef struct 
{int car_num; 
 time_t time; 
}car_info; 
typedef struct 
{ 
car_info *base; 
car_info *top; 
status stacksize; 
}sqstack; 
void Initstack(sqstack *s) 
{ 
s->base=(car_info *)malloc(STACK_INIT_SIZE*sizeof(car_info)); 
if(!s->base) exit(OVERFLOW); 
s->top=s->base; 
s->stacksize=0; 
} 
void push(sqstack *s,car_info e) 
{ 
*s->top++=e; 
s->stacksize++; 
} 
car_info pop(sqstack *s) 
{car_info e; 
if(s->top==s->base)  
{printf("停车场内没有该车辆!\n"); 
exit(0) ;} 
e=*--s->top; 
s->stacksize--; 
return e; 
} 
typedef struct Qnode 
{ 
int car_num; 
double time; 
struct Qnode *next; 
}QNode,*QueuePtr; 
typedef struct 
{ 
QueuePtr front; 
QueuePtr rear; 
int lenth; 
}LinkQueue; 
status InitQueue(LinkQueue *Q) 
{ 
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode)); 
if(!Q->front)exit(OVERFLOW); 
Q->front->next=NULL; 
Q->lenth=0; 
return OK; 
} 

void EnQueue(LinkQueue *Q,car_info *a ) 
{  
QueuePtr p; 
p=(QueuePtr)malloc(sizeof(QNode)); 
if(!p)exit(OVERFLOW); 

p->car_num=a->car_num; 
 p->time=a->time; 
p->next=NULL; 
Q->rear->next=p; 
Q->rear=p; 
Q->lenth++; 

} 
QueuePtr DeQueue(LinkQueue *Q) 
{ QueuePtr p,e,s={0}; 
if(Q->front==Q->rear) 
{printf("便道上没有车辆!\n"); return s;} 
p=Q->front->next; 
e=p; 
Q->front->next=p->next; 
Q->lenth--; 
if(Q->rear==p)Q->front=Q->rear; 
//free(p); 
 return e; 
  
} 
void arrive(sqstack *s,LinkQueue *p,car_info a,int n) 
{ char c;


if(s->stacksize<n) 
{ 

push(s,a); 
printf("\n车牌号为%d的车辆进入停车场%d号车道\n",a.car_num,s->stacksize); 
} 
else  
{ if(p->lenth)
{
	printf("等候的车辆为%d辆是否仍然等候 y or n\n",p->lenth);
   c= getchar();
   getchar();
   if(c=='n')
	  exit(OVERFLOW);

}
 EnQueue(p,&a); 
 printf("\n停车场已满,车牌号为%d的车辆停在便道的%d号位置\n",a.car_num,p->lenth); 
} 
} 
void leave(sqstack *tcc,sqstack *dcc,LinkQueue *p,car_info u,float pay) 
{ 
car_info x,ss; 
QueuePtr b; 
int find=1;
time_t arrivetime; 
double cost=0.0; 
while(find) 
{ 

ss=pop(tcc); 
push(dcc,ss); 
if(ss.car_num==u.car_num) 
{ 
find=0; 
cost=(double)(u.time-ss.time)*pay; 

arrivetime=ss.time; 
} 
} 
pop(dcc); //把临时堆栈的第一辆车(要离开的)去掉; 
while(dcc->stacksize) 
{ 
x=pop(dcc); 
push(tcc,x); 
} 
if(tcc->stacksize<2&&p->lenth!=0) 
{ 
b=DeQueue(p); 
x.car_num=b->car_num; 
x.time=b->time; 
push(tcc,x); 
printf("车牌号为%d的车辆由便道进入停车场%d号车道\n",x.car_num,tcc->stacksize); 
} 

printf("\n**********************************************\n"); 
printf("|车牌号码|进站时刻|出站时刻|停留时间|停车费用|\n");
 
printf("|%-6d |%-6s |",u.car_num,ctime(&arrivetime));
 printf("%s",ctime(&u.time ));
 printf("%-6d |%-6.2f |\n",u.time-arrivetime,cost);
printf("**********************************************\n"); 
} 
 int menu()
 {   int x;
	 scanf("%d",&x);
	 getchar();
	 return x;
 }
void main() 
{sqstack tcc,dcc; 
LinkQueue p; 
car_info a,u;
car_info *m;
int sum=1000,n,j; 
float pay; 
char sign;
time_t t1,t2,t3; 
double cost1,cost2;
printf("    \n|************************停车场管理**************************|\n"); 
printf("      |******A/a:车辆到达*******D/d:车辆离开******E/e:推出系统*****|\n\n"); 

Initstack(&tcc); 
Initstack(&dcc); 
InitQueue(&p); 
printf("请先输入停车场的车位总数,收费标准(元/小时):"); 
scanf("%d,%f",&n,&pay); 
getchar(); 
printf("           |*************请输入服务项目*************|\n");
printf("               *********************************\n");
printf("                            1.查询\n");
printf("                            2.请求停车\n");
printf("                            3.请求离开\n");
printf("                            4.退出\n");
printf("               *********************************\n");
while(1)
{switch(menu())
{
case 1:
         
		printf("\n************************************\n");
		printf("|停车数|等待数|剩余车位|\n");
		printf("|%-6d |%-6d|%-6d|",tcc.stacksize,p.lenth,n-tcc.stacksize);
        printf("\n************************************\n");
		if(tcc.stacksize<n)
		printf("***************你可以停车************");
         m=tcc.top;
		 j=tcc.stacksize;
		time(&t3);
		while(j)
		{   cost1=double(t3-(*--tcc.top).time);
		     cost2=cost1*pay;
            printf("\n**********************************************\n"); 
            printf("|车牌号码|     进站时刻      |   已停留时间|停车费用|\n"); 
            printf("|%-6d|%-6s|%-6f|%6f\n",(*tcc.top).car_num,ctime(&(*tcc.top).time),cost1,cost2); 
            printf("**********************************************\n");
			j=j-1;
		}
		tcc.top=m;
        break;
case 2:
  printf("\n请输入A/D/E,车牌号,时刻:"); 
  time(&t1);
  a.time =t1;
  scanf("%c,%d",&sign,&a.car_num); 
  getchar(); 
//while(sum) 
//{ 
  switch(sign) 
  { 
   case 'a': 
   case 'A':arrive(&tcc,&p,a,n);break; 
 
   case 'e': 
   case 'E':exit(OVERFLOW);break; 
   default : printf("输入有误请重试");break;
  } 
  break;
case 3:
  printf("\n请输入A/D/E,车牌号,时刻:"); 
  time(&t2);
  
  u.time =t2;
  scanf("%c,%d",&sign,&u.car_num); 
  getchar(); 
  switch(sign)
	{
    case 'D': 
    case 'd':leave(&tcc,&dcc,&p,u,pay);break;
    case 'e': 
    case 'E':exit(OVERFLOW);break;
    default :printf("输入有误请重试"); break;
    
	}
   break;
case 4: exit(OVERFLOW);break;
 
//printf("\n请输入A/D/E,车牌号,时刻:"); 
//scanf("%c,%d,%d",&sign,&a.car_num,&a.time); 
//getchar(); 
//sum--; 
}
}//getch(); 
} 

⌨️ 快捷键说明

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