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 A1,A2,B1,B2; int a,b,c; int i;//会员 char ch;
printf(\请输入离开的时间(小时:分钟):\
scanf(\ fflush(stdin);
do{/*直到程序输出正确的时间*/
if(p->leave.hour
printf(\输入离开时间比进站时间早,请重新输入!\\n\ scanf(\ fflush(stdin); }
if(p->leave.hour<0 || p->leave.hour>=24 || p->leave.min<0 || p->leave.min>=60) {
printf(\输入的时间格式有错!请重新输入:\
scanf(\ fflush(stdin); }
else break; }
while(p->leave.hour
16
printf(\车场现在有一辆车离开,请便道里的第一辆车进入车场!\\n\printf(\出站的车的车牌号为:\puts(p->num);/*把车牌号输出*/ printf(\
/*计算出正确的所需的钱数*/ A1=p->reach.hour; A2=p->reach.min; B1=p->leave.hour; B2=p->leave.min;
a=(B1-A1)*60+B2-A2; if(a>=60) {
b=a/60;/*停留时间中的小时*/ c=a-60*b;/*停留时间的分钟*/ } else {
b=0; c=a; }
printf(\请问你是否是会员(是1/否0):\while(1){
scanf(\ if (i==1) {
printf(\ 祝您一路顺风,欢迎您下次光临.\ printf(\ ★☆收 据★☆\\n\ printf(\ ★☆会员★☆\\n\ printf(\ 车牌号: \ puts(p->num); printf(\
printf(\ printf(\进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|\\n\
printf(\ printf(\ %d:%d\ printf(\ | %d:%d\ printf(\ | %d:%d\ printf(\ | %2.1f\
17
printf(\ |\\n\
printf(\
free(p);break; }
if(i==0) {
printf(\ 祝您一路顺风,欢迎您下次光临.\ printf(\ ★☆收 据★☆\\n\ printf(\ ★☆非会员★☆\\n\ printf(\ 车牌号: \ puts(p->num); printf(\
printf(\ printf(\进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|\\n\
printf(\ printf(\ %d:%d\ printf(\ | %d:%d\ printf(\ | %d:%d\ printf(\ | %2.1f\ printf(\ |\\n\
printf(\
free(p);break; } else
printf(\输入有错,请重新输入:\ fflush(stdin); // ch=getchar(); } }
int Arrival(SeqStackCar *Enter,LinkQueueCar *D,int n) /*车辆到达,Enter为车场的指针,D为便道队列的指针*/ {
CarNode *p;/*车辆结点p*/
18
QueueNode *t;/*队列结点t*/
p=(CarNode *)malloc(sizeof(CarNode)); flushall(); /*清空缓存区*/ int i;
printf(\请输入车牌号(例:A1234):\\n\gets(p->num);
if(Enter->top Enter->top++; printf(\车辆在车场第%d位置.\ fflush(stdin); printf(\请输入到达时间(小时:分钟):\ scanf(\ fflush(stdin); do{ if(p->reach.hour<0 || p->reach.hour>=24 || p->reach.min<0 || p->reach.min>=60) { printf(\输入的时间格式有错,请重新输入:\ scanf(\ fflush(stdin); } else break; } while(p->reach.hour<0 || p->reach.hour>=24 || p->reach.min<0 || p->reach.min>=60); Enter->stack[Enter->top]=p; /*把p结点赋值给车站*/ return(1); } else /*车场已满,车进便道*/ { printf(\请该车在便道稍作等待!\\n\ t=(QueueNode *)malloc(sizeof(QueueNode));/*开辟一个队列结点,它的数据结点是p,它的指针结点是空,队列的头与尾都是此结点*/ t->data=p; t->next=NULL; D->rear->next=t; 19 D->rear=t; return(1); } } //车辆离开,输入车牌号离开 void ExitCar(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W,int n) { int i=0,room,flag=0;/*room为要输出的位置*/ char num[10],*pnum;//字符串的比较 SeqStackCar *S;//开辟新的空间时是否是NULL空 CarNode *p,*t; //车辆本生的结点是p,车辆在队列中的结点是t QueueNode *q; //判断车场内是否有车,队列结点*q pnum=num; if(Enter->top>0) //车场有车 { while(!flag) //输入离开车辆的信息 { printf(\请输入出站车辆的车牌号:\ scanf(\ for(i=0;i if(strcmp(Enter->stack[i+1]->num,pnum)==0) { room=i+1; flag=1; fflush(stdin); } else printf(\第%d车位没有此车\\n\ fflush(stdin); } while(Enter->top>room) /*车辆离开*/ { Temp->top++; Temp->stack[Temp->top]=Enter->stack[Enter->top];/*把剩余的车辆退出车站并送入临时栈内*/ Enter->stack[Enter->top]=NULL;/*栈顶为空*/ 20