php+++怎么实现门禁,C语言简单实现门禁系统

问题提出

用C语言实现门禁系统功能。

功能简析

1、系统登录分为管理员登录和学生登录,输入相应字符即可选择登录;

0f468a266ed83db017303b23a5288105.png

2、学生登录,学生使用自己的账号密码登录系统,选择开启的门,即可开启门禁;此外系统还会记录下学生登录的信息,如登录账号、登录时间、开启哪间门;

92768c420f682316e9ed23e83c76de74.png

3、管理员登录,管理员登录也是要输入特定的账号密码才能登录;登录之后才能进入管理员操作界面进行相应操作,如添加学生账号、删除学生账号、查看学生基本信息、查看学生登录情况……输入相应字符即可选择执行相应的功能。

effd78ad1af891ff7ea6f33acb49d572.png

4、管理员权限一:添加学生账号。输入学生姓名(即为账号)、密码、专业班级等基本信息,可用于后续查询,回车完成添加。查看系统中学生信息,该账号已存在

fffa77b13cc290571778de7eee983a2e.png

5、管理员权限二:删除学生账号。输入需要删除的账号,回车完成删除操作,查看系统数据库中已无该学生信息。

5fadddc27c5010d5270aa2ea65687360.png

6、管理员权限三:查看所以学生基本信息。输入相应字符,即可查询所以信息

0bb7c8227aa5f4604650bc2860e253a8.png

7、管理员权限四:查看学生登录门禁系统情况。输入相应相应字符,可按学生使用门禁系统时间先后顺序一次显示学生账号、登录时间,选择开启的门。

0ded5aa7bc46e838f0106025d4afbbfc.png

8、管理员权限五:修改存在于系统的学生信息。输入需要修改的学生账号,并输入修改后的账号、密码、专业班级等基本信息。

8ce8daf9fdf8b7d3c3aed184bf0da4ac.png

实现关键

首先考虑到要对学生账号等基本数据要重复使用,且易更改,下次使用时上次修改的信息还会存在而不是对代码进行修改,所以考虑使用对文本进行操作。将学生账号密码等数据信息全部储存在一个txt或dat文本中,调用函数对文本进行相应操作,对数据的操作即是对文件的操作。

代码实现

#include

#include

#include

#include

struct information

{

char name[10];

char password[10];

char profession[20];

};

struct Thelog

{

char name[10];

char times[24];

char num[1];

};

FILE *fp; //文件指针

information *head;//链表头指针

void add_student(information a); //函数[1]管理员添加学生账号,使用门禁系统

void delete_student(char names[10]);//函数[2]管理员员删除学生账号,解除使用门禁系统权限

void administrator_login(); //函数[3]管理员登陆

void administrator_management(); //函数[4]管理员操作界面,添加学生账号,删除学生账号,查看学生使用门禁情况

void student_login(); //函数[5]学生登陆,用于打开门禁

void time (); //函数[6]时间函数,用于显示登陆时间

void All_output(); //函数[7]全部学生信息

void the_log(information a,char num[1]); //函数[8]录入学生使用门禁情况

void log_output(); //函数[9]输出学生使用门禁情况

void replace_massage(char names[10]); //函数[10]更改学生信息,只有管理员有权限

int main()

{

int n;

printf(" *********************************************\n");

printf(" * 欢迎使用四海门禁系统!!! *\n");

printf(" *********************************************\n");

printf("\n");

printf(" */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n");

printf(" *输入0:退出系统; 输入1:管理员登陆; 输入2:学生登陆*\n");

printf(" */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n");

printf(" ");

scanf("%d",&n);

while(n!=0)

{

if(n==1)

administrator_login();

else if(n==2)

student_login();

else if(n>10||n<0)

{

printf(" *********************************************\n");

printf(" * 欢迎使用四海门禁系统!!! *\n");

printf(" *********************************************\n");break;

}

printf(" */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n");

printf(" *输入0:退出系统; 输入1:管理员登陆; 输入2:学生登陆*\n");

printf(" */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*\n");

printf(" ");

scanf("%d",&n);

}

printf(" *********************************************\n");

printf(" * 欢迎使用四海门禁系统!!! *\n");

printf(" *********************************************\n");

return 0;

}

void administrator_login() //管理员登录

{

information a;

printf(" 请输入管理员账号:");

scanf("%s",a.name);

printf(" 请输入管理员密码:");

scanf("%s",a.password);

if(strcmp(a.name,"管理员")==0&&strcmp(a.password,"123456789")==0)

{

printf("\n");

printf(" *********管理员登陆成功!!!*********\n\n");

administrator_management();

}

else

{

printf( " 管理员登陆失败!!!请检查仔细核对账号、密码\n");

}

}

void administrator_management() //管理员操作台

{

int num;

printf(" */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*\n");

printf(" *输入1:注册学生账号 输入2:删除账号 输入3:显示所有学生信息*\n");

printf(" *输入4;查看学生使用门禁情况 输入5:修改学生信息 输入6:刷新屏幕 *\n");

printf(" */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*\n");

printf(" ");

scanf("%d",&num);

while(num!=-1)

{

if(num==0||num>10||num<0)

{

printf(" 管理员身份已注销\n");

break;

}

if(num==1)

{

fp=fopen("student_Account.txt","a");

information a;

printf(" 请输入账号:");

scanf("%s",a.name);

printf(" 请输入密码:");

scanf("%s",a.password);

printf(" 请输入专业班级:");

scanf("%s",a.profession);

add_student(a);

fclose(fp);

}

if(num==2)

{

char names[10];

printf(" 请输入要删除的账号:");

scanf("%s",names);

delete_student(names);

}

if(num==3)

{

fp=fopen("student_Account.txt","r");

All_output();

fclose(fp);

}

if(num==4)

{

fp=fopen("Thelog.txt","r");

log_output();

fclose(fp);

}

if(num==5)

{

char names[10];

fp=fopen("student_Account.txt","r+");

printf(" 请输入需要修改的账号:");

scanf("%s",names);

replace_massage(names);

fclose(fp);

}

if(num==6)

{

system("cls");

}

printf(" */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*\n");

printf(" *输入1:注册学生账号 输入2:删除账号 输入3:显示所有学生信息*\n");

printf(" *输入4;查看学生使用门禁情况 输入5:修改学生信息 输入6:刷新屏幕 *\n");

printf(" */*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*\n");

printf(" ");

scanf("%d",&num);

}

}

void student_login() //学生登录

{

information a;

information b;

fp=fopen("student_Account.txt","r");

printf(" 请输入账号:");

scanf("%s",a.name);

printf(" 请输入密码:");

scanf("%s",a.password);

fread(&b,sizeof(struct information),1,fp);

int i=0;

while(feof(fp)==0)

{

if(strcmp(a.name,b.name)==0&&strcmp(a.password,b.password)==0)

{

char num[1];

printf(" 请选择要打开几号门\n");

printf(" ");

scanf("%s",num);

time();

printf(" 亲爱的%s童鞋,你成功登陆本系统,已开启%s号门\n",a.name,num);

i++;

the_log(a,num);

}

fread(&b,sizeof(struct information),1,fp);

}

if(i==0)

printf(" 登陆账号不存在或密码错误!!!若无账号请联系管理员分配账号\n");

fclose(fp);

}

void delete_student(char names[10]) //管理员删除学生账号,解除使用门禁权限

{

FILE *p;

information a;

int i=0;

fp=fopen("student_Account.txt","r");

p=fopen("student.txt","w");

fread(&a,sizeof(struct information),1,fp);

while(feof(fp)==0)

{

if(strcmp(a.name,names)==0)

{fread(&a,sizeof(struct information),1,fp);i=1;}

else

{

fwrite(&a,sizeof(struct information),1,p);

}

fread(&a,sizeof(struct information),1,fp);

}

if(strcmp(a.name,names)!=0)

fwrite(&a,sizeof(struct information),1,p);

else

i=1;

if(i==0)

printf(" 账号%s不在系统中\n",names);

else

printf(" 账号%s已成删除\n",names);

fclose(fp);

fclose(p);

remove("student_Account.txt");

rename("student.txt","student_Account.txt");

}

void add_student(information a) //管理员添加学生信息,分配账号,授权使用门禁系统

{

fseek(fp,-sizeof(struct information),1);

fwrite(&a,sizeof(struct information),1,fp);

printf(" 添加学生%s成功!!!\n\n",a.name);

}

void time() //显示本地时间

{

time_t rawtime;

struct tm * timeinfo;

time ( &rawtime );

timeinfo = localtime (&rawtime );

printf(" %s",asctime (timeinfo));

}

void All_output() //输出所有学生信息

{

int i=0;

information a;

fread(&a,sizeof(struct information),1,fp);

while(feof(fp)==0)

{

printf(" * * * * * * * * * * * * * * * * * * * * * * *\n");

printf(" * 学生账号:%-20s*\n",a.name);

printf(" * 学生密码:%-20s*\n",a.password);

printf(" * 专业班级:%-20s*\n",a.profession);

printf(" * * * * * * * * * * * * * * * * * * * * * * *\n");

printf("\n");

i++;

fread(&a,sizeof(struct information),1,fp);

}

if(i==0)

printf(" 系统中无学生账号!!!\n\n");

}

void the_log(information a,char num[1]) //实时保存学生使用门禁系统情况

{

FILE *p;

Thelog c;

strcpy(c.name,a.name);

time_t rawtime;

struct tm * timeinfo;

time ( &rawtime );

timeinfo =localtime ( &rawtime );

strcpy(c.times,asctime (timeinfo));

strcpy(c.num,num);

p=fopen("Thelog.txt","a");

fwrite(&c,sizeof(struct Thelog),1,p);

fclose(p);

}

void log_output() //输出学生使用门禁系统情况

{

Thelog a;

fread(&a,sizeof(struct Thelog),1,fp);

while(feof(fp)==0)

{

printf("%s",a.times);

printf("学生%s登录了门禁系统,并开启了%s号门\n",a.name,a.num);

fread(&a,sizeof(struct Thelog),1,fp);

}

}

void replace_massage(char names[10]) //更改学生信息

{

information a;

information b;

fread(&a,sizeof(struct information),1,fp);

if(strcmp(names,a.name)==0)

{

printf(" 请输入更改后的账号:");

scanf("%s",b.name);

printf(" 请输入修改后的密码:");

scanf("%s",b.password);

printf(" 请输入修改后的专业班级:");

scanf("%s",b.profession);

fseek(fp,-sizeof(struct information),1);//文件指针退回原结构体头

fwrite(&b,sizeof(struct information),1,fp);//更新联系人信息

printf(" 信息更改成功!!!\n\n");

}

else if(feof(fp)==0)

replace_massage(names);//递归调用直到找到需要更改的姓名,并完成更改

else

printf("%s不在系统中!!!\n\n",names);

}

后期分析

后期可利用单片机实现刷卡登录的门禁系统,利用qt 设计可视化程序,在学生登录成功后触发相应的门开启或关闭。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值