c语言停车场

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
typedef struct set{
int h,m,k;
char a;//车位号
char b[10];//车牌号
struct set *next;
}ST;
time_t timer;
struct tm *tblock;
ST ha1,hb1,hc1,*ha=&ha1,*hb=&hb1,*hc=&hc1;
float s=0;
#define LEN sizeof(ST)
void menu(void);
int creat(void);
int list(ST *head);
void list2(ST *head);
void list3(ST *head);//fun4 case1
int list4(ST *head);//fun4 case2
int select1(void);//选择车型
int select2(void);
int select3(void);
int select4(void);
void loadfile(void);
void fun2(void);
void fun3(void);
void fun4(void);
void search(void);
void savefile(void);
int search2(char c[],ST *head);
ST *insert(ST *head);
ST *del(ST *head);

int main(){
int select;
ha->k=hb->k=hc->k=1;
ha->h=hb->h=hc->h=0;
ha->next=hb->next=hc->next=NULL;
ha->a='A';hb->a='B';hc->a='C';

while(1){
menu();
scanf("%d",&select);
switch(select){
case 1:creat();break;
case 2:fun2();break;
case 3:fun3();break;
case 4:fun4();break;
case 0:printf("\n\t谢谢使用!再见\n");
       exit(1);
default:printf("\n\t按键错误请重新选择!\n");}
}

return 0;}

void menu(void){
printf("\n");
printf("\t---------------------------\n");
printf("\t*                        *\n");
printf("\t* 欢迎使用停车场管理系统 *\n");
printf("\t*                        *\n");
printf("\t---------------------------\n");
printf("\n");
printf("\t请选择你要管理的内容:\n\n");
printf("\t1.停车管理\n");
printf("\t2.收费管理\n");
printf("\t3.按不同条件进行查询操作\n");
printf("\t4.按不同条件进行统计工作\n");
printf("\t0.退出系统\n");
printf("\t请选择按键(0-4):");
}


ST *insert(ST *head){
ST *p0,*p1,*p2,*p;
int t=head->a-'A',m;
switch(t){
case 0:m=20;break;
case 1:m=15;break;
default:m=10;}
timer = time(NULL);
tblock = localtime(&timer);
p1=head;
if(p1->k==0){
printf("\t没有车位!\n");return head;}
else{
    p0=(ST*)malloc(LEN);
    p0->a=p1->a;
    printf("\t请输入车牌号:(如鲁AH1284)");
    gets(p0->b);
    p0->h=tblock->tm_hour;
    p0->m=tblock->tm_min;
    if(head->h==0){
    head=p0;
    p0->k=1;
    p0->next=NULL;}
    else{int f[22],i;
      for(i=1;i<=m;i++)
      f[i]=1;
      p=head;
      while(p!=NULL){
      if(p->h!=0)f[p->k]=0;
      p=p->next;}
      for(i=1;i<m;i++)
      if(f[i])break;
      p0->k=i;
      while((i>p1->k)&&(p1->next!=NULL)){
      p2=p1;
      p1=p1->next;}
      if(i<p1->k)
       {if(head==p1)head=p0;
        else p2->next=p0;
            p0->next=p1;}
      else
           {p1->next=p0;
            p0->next=NULL;}
       p=head;
       while(p->next!=NULL)
       p=p->next;
           if(p->k==m){
           p=(ST*)malloc(LEN);
        p->a=p1->a;
        p->k=0;
        p->h=-1;
        p1=head;
        head=p;
        p->next=p1;}
        }
      }
return head;}

int creat(void){
int h;
timer = time(NULL);
tblock = localtime(&timer);
h=tblock->tm_hour;
if(h<6||h>=22)
{printf("\t营业时间:6:00-22:00,此时不营业\n");
return 0;}


switch(select1()){
case 1:ha=insert(ha);break;
case 2:hb=insert(hb);break;
case 3:hc=insert(hc);break;
case 4:break;
default:printf("\n\t按键错误请重新选择!\n");}
return 0;}

int list(ST *head){
ST *p;
if(head->h==0){
printf("\t%c区无车!\n",head->a);return 0;}
else{
printf("\n\t%c区停放汽车信息如下:\n",head->a);
printf("\t车位号 \t\t   车牌号\t\t停车时间\n");
p=head;
while(p!=NULL){
if(p->k!=0)
printf("\t%c%02d\t\t%9s%20d:%02d\n",p->a,p->k,p->b,p->h,p->m);
p=p->next;}}
}
void list2(ST *head){
int f[22];
int i,t=head->a-'A',m,s;
for(i=1;i<=20;i++)
f[i]=1;ST *p;
p=head;
while(p!=NULL){
if(p->h!=0)f[p->k]=0;
p=p->next;}
switch(t){
case 0:m=20;break;
case 1:m=15;break;
default:m=10;}
printf("\t%c区空位:\n\t",head->a);
for(i=1,s=0;i<=m;i++)
if(f[i]){
printf("\t%c%02d ",head->a,i);
if((++s)%5==0)printf("\n\t");
}
if(s==0)printf("无空位\n");
else printf("\n");
}
void list3(ST *head){
int f[22];
int i,t=head->a-'A',m,s;
for(i=1;i<=20;i++)
f[i]=0;ST *p;
p=head;
while(p!=NULL){
if(p->h!=0)f[p->k]=1;
p=p->next;}
switch(t){
case 0:m=20;break;
case 1:m=15;break;
default:m=10;}
printf("\t%c区当前停车数量:",head->a);
for(i=1,s=0;i<=m;i++)
if(f[i])s++;
printf("%d\n",s);
}
int list4(ST *head){
int h,m,t=head->a-'A',sum=0;
ST *p;
timer = time(NULL);
tblock = localtime(&timer);

if(head->h==0){
printf("\t%c区无车!\n",head->a);return 0;}
else{p=head;
printf("\t%c区停车时间超过5小时的汽车:\n",head->a);
printf("\t车位号 \t\t   车牌号\t\t停车时间\n");
while(p!=NULL){
if(p->k!=0){
 h=tblock->tm_hour;
 m=tblock->tm_min;
 h-=p->h;
 if(h>0){h-=1;m+=60;}
 m-=p->m;
 if(m>=60){h+=1;m-=60;}
 if(h>5||(h==5&&m!=0)){
   
   printf("\t%c%02d\t\t%9s%20d:%02d\n",p->a,p->k,p->b,h,m);
   sum++;}

 

}
p=p->next;}
}printf("\t数量为:%d\n",sum);
}
ST *del(ST *head){
ST *p1,*p2;
char c[10];
float cost;
int h,m,t=head->a-'A',fee,f;
timer = time(NULL);
tblock = localtime(&timer);
if(head->h==0){
printf("\n\t%c区无车\n",head->a);
return head;}
printf("\t请输入车牌号:");
gets(c);
h=tblock->tm_hour;
m=tblock->tm_min;
p1=head;
while((strcmp(c,p1->b)!=0)&&(p1->next!=NULL)){
p2=p1;p1=p1->next;}
f=strcmp(c,p1->b);
if(f==0){
 printf("\t停车时间从%02d:%02d到%02d:%02d,",p1->h,p1->m,h,m);
 h-=p1->h;
 if(h>0){h-=1;m+=60;}
 m-=p1->m;
 if(m>=60){h+=1;m-=60;}
 printf("共%d小时%d分钟\n",h,m);

 if(p1==head){
 if(p1->next!=NULL)
 head=p1->next;
 else head->h=0;}
 else {p2->next=p1->next;free(p1);}
 if(head->h==-1)
 {p1=head;
  p2=p1->next;
  head=p2;
  free(p1);}
 switch(t){
 case 0:fee=3;break;
 case 1:fee=4;break;
 default:fee=5;}
 printf("\t停车费每小时%d元\n",fee);
 if(m==0)cost=fee*h;
 else if(m>0&&m<=30)cost=fee*(h+0.5);
 else cost=fee*(h+1);
 s+=cost;
 printf("\t停车费共%.1f元\n",cost);

 }
else printf("\n\t%c区无此车\n",head->a);
return head;}

int select1(void){
int select;
printf("\t请输入车型:\n");
printf("\t1.轿车\n");
printf("\t2.中型客车或货车\n");
printf("\t3.大型客车或货车\n");
printf("\t4.返回\n");
printf("\t请选择按键(1-4):");
scanf("%d",&select);
getchar();
return select;
}
int select2(void){
int select;
printf("\t请输入管理内容:\n");
printf("\t1.收费\n");
printf("\t2.统计车费\n");
printf("\t3.返回\n");
printf("\t请选择按键(1-3):");
scanf("%d",&select);
getchar();
return select;
}
int select3(void){
int select;
printf("\t1.今天不再进车,并统计\n");
printf("\t2.返回\n");
printf("\t请选择按键(1-2):");
scanf("%d",&select);
getchar();
return select;
}
int select4(void){
int select;
printf("\t1.分别输出A区、B区、C区当前所停放汽车的信息\n");
printf("\t2.到当前时间为止A区、B区、C区停车超过5小时的汽车数量及信息\n");
printf("\t3.输入一个日期(年 月),统计该月停车场的收费金额\n");
printf("\t4.返回\n");
printf("\t请选择按键(1-4):");
scanf("%d",&select);
getchar();
return select;
}

 

 

 

int search2(char c[],ST *head){
int f;ST *p=head;
while(p!=NULL){
f=strcmp(c,p->b);
if(f==0){
printf("\t%c%02d\n",p->a,p->k);
return 1;}
else p=p->next;}
return 0;
}
void search(void){
char c[10];int f,t=0;
printf("\t请输入车牌号:");
gets(c);
switch(1){
case 1:if(f=search2(c,ha))break;
case 2:if(f=search2(c,hb))break;
case 3:if(f=search2(c,hc))break;
       else printf("\t停车场无该车\n");
       break;
default:printf("\n\t按键错误请重新选择!\n");}
}
void fun2(void){
switch(select2()){
case 1:switch(select1()){
         case 1:ha=del(ha);break;
         case 2:hb=del(hb);break;
         case 3:hc=del(hc);break;
         case 4:break;
         default:printf("\n\t按键错误请重新选择!\n");}
       break;
case 2:switch(select3()){
         case 1:savefile();break;
         case 2:break;
         default:printf("\n\t按键错误请重新选择!\n");}
       break;
      savefile();
case 3:break;
default:printf("\n\t按键错误请重新选择!\n");}

}
void fun3(void){
int select;
printf("\t请输入查询内容:\n");
printf("\t1.分别输出A区、B区、C区当前停放汽车的信息\n");
printf("\t2.分别输出A区、B区、C区当前空闲的车位号\n");
printf("\t3.输入车牌号,输出该车所停放的车位号\n");
printf("\t4.返回上一步\n");
printf("\t请选择按键(1-3):");
scanf("%d",&select);
getchar();
switch(select){
case 1:list(ha);
       list(hb);
       list(hc);
       break;
case 2:list2(ha);
       list2(hb);
       list2(hc);break;
case 3:search();break;
case 4:break;
default:printf("\n\t按键错误请重新选择!\n");}
}
void fun4(void){
switch(select4()){
case 1:list3(ha);
       list3(hb);
       list3(hc);
       break;
case 2:list4(ha);
       list4(hb);
       list4(hc);
       break;
case 3:loadfile();
case 4:break;
default:printf("\n\t按键错误请重新选择!\n");}
}
void savefile(void){
timer = time(NULL);
tblock = localtime(&timer);
int year,month,day;FILE *fp;
year=tblock->tm_year+1900;
month=tblock->tm_mon;
day=tblock->tm_mday;
if ((fp=fopen("fee.dat","a+"))==NULL)
{printf("Can't open file!\n");exit(0);}
 fprintf(fp,"%d年%d月%d日,%.1f元\n",year,month+1,day,s);
fclose(fp);
}
void loadfile(void){
FILE *fp;
int tyear,tmonth,year,month,day;
float m=0,a;
printf("\t请输入年月:(如2016 7)");
scanf("%d%d",&tyear,&tmonth);
if((fp=fopen("fee.dat","r+"))==NULL){
printf("can't open file!\n");exit(0);}
while(1){
if(fscanf(fp,"%d年%d月%d日,%f元\n",&year,&month,&day,&a)!=EOF)
{if(tyear==year&&tmonth==month)m+=a;}
else break;}
printf("\t该月停车场收费金额为:%.1f元",m);
fclose(fp);
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值