欢迎来到重庆监控安装公司官方网站!
您的位置: 重庆监控安装公司 - 安防百科 - C语言编写停车场系统(有漏洞)

C语言编写停车场系统(有漏洞)

来源:安防百科 / 时间: 2024-05-28

#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("请放好您的人民币\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);


相关产品

在线客服
微信联系
客服
扫码加微信(手机同号)
电话咨询
返回顶部