首页 > 编程 > C > 正文

C语言简单实现门禁系统

2020-01-26 13:33:25
字体:
来源:转载
供稿:网友

问题提出

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

功能简析

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

这里写图片描述 

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

这里写图片描述 

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

这里写图片描述 

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

这里写图片描述 

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

这里写图片描述 

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

这里写图片描述 

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

这里写图片描述 

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

这里写图片描述

实现关键

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

代码实现

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>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 设计可视化程序,在学生登录成功后触发相应的门开启或关闭。

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选