停车场管理系统

系统简介:该系统主要简单的功能已在菜单中显示,按操作就可以在visual c++ 6.0 或 codeblocks上运行起来。。。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define N 4
#define M 5
#define money_min 0.1  //该停车场每分钟停车费用

void taxi();
void buy();
void search();
void menu();
void put();
void manage();
int  check1(int cnum,char key[]);
int  check2(int cnum);

int count=0;			 //count为已停车位
int insert_num=0;        //管理员每次要存入信息的人数
int insert_sum=0;       //存入信息总人数
int car[N][M]={0};		//车位停车情况,1为已停车,0为未停车

//停车人信息,carnum为车牌号,ts,te,to分别为开始停车时间,结束停车时间,停车时间
struct stud
{
	char carnum[35];
	int ts,te,to;
}cus[N][M];

//停车卡信息,num卡号,password密码,money余额,最多存储100个车卡信息
struct stub
{
	int num;
	char password[35];
	double money;
}inf[100];

//管理员信息,name姓名,num卡号,password为密码
struct stup
{
    char name[25];
    int num;
    char password[35];
}manager; 

int main()
{
    strcpy(manager.name,"hehe");
    manager.num=10000;
    strcpy(manager.password,"without");
	while(1)
	{
		menu();
		printf("请输入您的选择,同时按回车键确认:");
		while(1)
		{
			int sel;
			scanf("%d",&sel);
			fflush(stdin);
			switch(sel)
			{			
			case 1:search();break; //停车状态查询			
			case 2:taxi();break;   //停车			
			case 3:buy();break;    //取车	
			case 4:put();break;    //自助充值
			case 5:manage();break; //管理员管理系统
			case 0:system("pause");system("cls");break;
			default :printf("			^_^输入错误,请重新输入^_^\n");

			}
            if(sel>=0 && sel<=5) break;
		}
	}
	return 0;
}

//充值函数
void put()
{
    int num,i;
    printf("充值系统已开启:\n");
    printf("注意您每次的充值仅限为100RMB!\n");
    printf("请输入您的卡号:");
    scanf("%d",&num);
    fflush(stdin);
    if(num==0)
    {
        system("cls");
        return ;
    }
    printf("请放好您的RMB\n");
    system("pause");
    //充值操作
    for(i=0;i<insert_sum;i++)
        if(num==inf[i].num)
    {
        inf[i].money+=100;
        FILE *ft;
        ft=fopen("pass.txt","a");
        time_t t=time(NULL);
        char *time=ctime(&t);
        fprintf(ft,"id=%d,password=%s,money=%.1lf,time=%s",inf[i].num,inf[i].password,inf[i].money,time);
        fclose(ft);
        break;
    }
    printf("充值成功,您的停车卡余额:%.1lf\n",inf[i].money);
    system("pause");
    system("cls");
	return ;
}

//管理员管理函数
void manage()
{
    char name[25];
    int num;
    char password[35];
    while(1)
    {
        printf("请输入姓名:");
        scanf("%s",name);
        fflush(stdin);
        if(strcmp(name,"0")==0)
        {
            system("cls");
            return ;
        }
        printf("请输入卡号:");
        scanf("%d",&num);
        fflush(stdin);
		if(num==0)
		{
			system("cls");
			return ;
		}
        printf("请输入密码:");
        scanf("%s",password);
        fflush(stdin);
		if(strcmp(password,"0")==0)
		{
			system("cls");
			return ;
		}
        if( !(strcmp(name,manager.name)==0 && (num==manager.num) &&
           strcmp(password,manager.password)==0) )
        {
            printf("输入错误,请重新输入!\n");
			system("pause");
			system("cls");
            continue;
        }
        else break;
    }
    printf("输入正确!\n");
    int p_num,i;
    FILE *fp;
    printf("请输入您要添加信息的人数:");
    scanf("%d",&p_num);
    //取当前系统时间
	time_t t=time(NULL); //调用时间函数
	insert_num=p_num;
	system("pause");
    for(i=0;i<=p_num;i++)
    {
        system("cls");
        if(i==p_num) //该次添加人数已满
        {
            printf("本次添加人数已满,将返回菜单模式!\n");
            system("pause");
            system("cls");
            continue;
        }
        printf("已添加信息的人数:%d,剩余添加信息的人数:%d\n",i,insert_num);
        fp=fopen("pass.txt","a");
        char *time=ctime(&t); //记录此处的时间
        int _num,flag;  //_num为停车卡所属者的卡号,flag为判断卡号是否有重复
        while(1)
        {
            printf("卡号:");
            scanf("%d",&_num);
            fflush(stdin);
            if(_num==0)
            {
                system("cls");
                return ;
            }
            flag=check2(_num);
            if(flag==1)
            {
                printf("信息已存在,请重新输入!\n");
                continue;
            }
            else break;
        }
        inf[insert_sum].num=_num;
        printf("密码:");
        scanf("%s",inf[insert_sum].password);
        fflush(stdin);
        printf("金额:");
        scanf("%lf",&inf[insert_sum].money);
        fflush(stdin);
        fprintf(fp,"id=%d,password=%s,money=%.1lf,time=%s",inf[insert_sum].num,
                inf[insert_sum].password,inf[insert_sum].money,time); //讲信息读入文件保存以供管理员查询
        fclose(fp);
        printf("添加信息成功!\n");
        insert_num--;
        insert_sum++;
        system("pause");
        system("cls");
    }
}

//查询重复号
int check2(int _num)
{
    int flag=0; //flag=1表示该号已存在,0表示不存在
    int i;
    for(i=0;i<insert_sum;i++)
        if(_num==inf[i].num)
    {
        flag=1;break;
    }
    return flag;
}

//查询功能,cnum为卡号,key数组为持卡人输入的密码
int check1(int cnum,char key[])
{
	 int flag=-1,i;
	 for(i=0;i<insert_sum;i++) //
		 if(inf[i].num==cnum)
		 {
			 if(strcmp(inf[i].password,key)==0)
             {
                flag=i;break;
             }

		 }
	 return flag;
}

//取车系统
void buy()
{
	char carnum[35];
	int num;
	while(1)
	{
		printf("请输入您的停车号:");  //停车号为num,则在密码数组中的号码为num-1;
		scanf("%d",&num);
		fflush(stdin);
		if(num==0)
        {
            system("cls");
            return ; //返回主菜单
        }
		if( !(num>0 && num<=N*M)) //停车号不大于最大停车数量
        {
            printf("输入错误,请重新输入!\n");
            continue;
        }
        else ;
        while(1)
        {
            printf("请输入您的车牌号:"); //车牌号为15个字符内
            scanf("%s",carnum);
            fflush(stdin);
            if(strlen(carnum)>=15)
            {
                printf("输入错误,请重新输入!\n");
                continue;
            }
            else break;
        }
		if(strcmp(carnum,cus[num/N][num%N-1].carnum)!=0) //当前用户所停车位的车牌号,与先前输入的车牌号不相同
		{
			printf("输入错误,请重新输入!\n");
			continue;
		}
		else break;
	}
	int cnum,flag;
	char key[35];
	while(1)
	{
		printf("刷卡消费,请输入您的卡号:");
		scanf("%d",&cnum);
		fflush(stdin);
		printf("请输入您的密码:");
		gets(key);
		fflush(stdin);
		flag=check1(cnum,key);  //检查卡号和密码是否匹配
		if(flag==-1)
		{
			 printf("输入错误,请重新输入,必要时与管理员联系!\n"); //注意flag变量的作用
			 continue;
		}
		else break;
	}
	printf("输入正确\n");
	system("pause");
	system("cls");

	//计录结束停车时间,并计算该车的停车时间
	cus[num/N][num%N-1].te=time(NULL); //结束该车的停车时间
	cus[num/N][num%N-1].to=cus[num/N][num%N-1].te-cus[num/N][num%N-1].ts;
	int time_min=cus[num/N][num%N-1].to/60;
	time_min= (cus[num/N][num%N-1].to-time_min*60)!=0 ? time_min+1 : time_min; //不足一分钟按一分钟计算
	printf("您的本次停车费用:%.1lfRMB\n",time_min*money_min);

	while(inf[flag].money<time_min*money_min) //当余额不足时,调用充值系统
	{
		printf("您的余额为%.1lf,不足,请充值\n",inf[flag].money);
		put();  //调用充值系统
	}

	//扣除费用
	inf[flag].money-=time_min*money_min;
	printf("您的停车时间:%dmin\n",time_min);
	printf("每分钟停车费用:%.1lfRMB\n",money_min);
	printf("缴费后您的余额为:%.1lfRMB\n",inf[flag].money);
	printf("缴费成功!\n");
	count--;//该车离开,所停总车位-1
	int _num;
	srand((unsigned)time(NULL)); //调用随机函数,为该车分配出口离开
	_num=rand()%2;
	printf("★请选择%d号出口,欢迎下次光临★\n",flag+1);

	//清除某车离开后该车在在停车场某车位原有的信息
	car[num/N][num%N-1]=0;
	strcpy(cus[num/N][num%N-1].carnum,"\0");
	cus[num/N][num%N-1].ts=0;
	cus[num/N][num%N-1].te=0;
	cus[num/N][num%N-1].to=0;
	system("pause");
	system("cls");			
}

//停车系统
void taxi()
{
	char carnum[35];
	int i,j,flag=0;
                    //添加停车提示,为完成
	while(1)
    {
        printf("请输入您的车牌号:"); //车牌号含有汉字,字母和数字,用字符
        scanf("%s",carnum);
        fflush(stdin);
        if(strcmp(carnum,"0")==0)
        {
            system("cls");
            return ; //返回主菜单
        }
        if(strlen(carnum)>=35)
        {
            printf("输入错误,请重新输入!\n");
            continue;
        }
        else break;
    }
	for(i=0;i<N;i++)
	{
		for(j=0;j<M;j++)
		{
			if(car[i][j]==0)	//寻找空余可停车位
			{
			    printf("分配给您的车位:");
				printf("%d\n",i*N+j+1);    //i*N+j+1 为所停车位号
				car[i][j]=1;
				strcpy(cus[i][j].carnum,carnum);  //count 为已停车位的数目
				flag=1;
				break;
			}
		}
		if(flag==1) break;
	}
	if(flag==0)
    {
        printf("尊敬的用户,您好,该停车场已满,请找其他停车场\n");
        system("pause");
        system("cls");
    }
    else
    {
        count++;
        system("pause");
        cus[i][j].ts=time(NULL); //计时开始
        system("cls");
    }
	return ;
}

//查询系统
void search()
{
	printf("\t\t\t *******欢迎来到中软国际停车场*******\n");
	printf("\t\t\t  ┏━━┳━━┳━━┳━━┳━━┓\n");
	int i,j;
	for(i=0; i<N; i++)
	{
	    printf("\t\t\t  ");
		for(j=0;j<M;j++)
		{
            printf("┃");
			if(car[i][j]==1)
			{
				printf(" ■ ");
			}
			else
			{
				printf(" □ ");
			}
		}
        printf("┃\n");
        printf("\t\t\t  ");
		for(j=i*M+0;j<=i*M+N;j++)
		{
            printf("┃");
            printf(" %2d ",j+1);
		}
            printf("┃\n");
        if(i<N-1)
    printf("\t\t\t  ┣━━╋━━╋━━╋━━╋━━┫\n");
	}
	printf("\t\t\t  ┗━━┻━━┻━━┻━━┻━━┛\n");
	if(count==N*M)
    {
        printf("尊贵的用户,您好,该停车场已满,请找其他停车场!\n");
    }
    else
    {
        printf("尊贵的用户,您好,已停车位:%d,可停车位%d,您可以停车!\n",count,N*M-count);
    }
	system("pause");
	system("cls");
	return ;
}

//菜单
void menu()             //菜单中添加显示当前时间
{
	time_t t=time(NULL);
    char *time=ctime(&t);
	printf("\t\t\t┏━━━━━━━━━━━━━━━━━━┓\n");
	printf("\t\t\t┃     ★欢迎来到中软国际停车场★     ┃\n");
	printf("\t\t\t┃                                    ┃\n");
	printf("\t\t\t┃         ◆:1-停放状态查询          ┃\n");
	printf("\t\t\t┃         ◆:2-停车                  ┃\n");
	printf("\t\t\t┃         ◆:3-取车                  ┃\n");
	printf("\t\t\t┃         ◆:4-自助充值              ┃\n");
	printf("\t\t\t┃         ◆:5-管理员管理系统        ┃\n");
	printf("\t\t\t┃         ◆:0-返回主菜单            ┃\n");
	printf("\t\t\t┃  请按相关提示进行操作,谢谢合作!    ┃\n");
	printf("\t\t\t┃        注:□-空位,■-已停          ┃\n");
    printf("\t\t\t┗━━━━━━━━━━━━━━━━━━┛\n");	
	printf("\t\t\t 当前时间:%s",time);
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值