当前位置: 首页 > 编程笔记 >

C语言简单实现门禁系统

怀浩大
2023-03-14
本文向大家介绍Chtml" target="_blank">语言简单实现门禁系统,包括了C语言简单实现门禁系统的使用技巧和注意事项,需要的朋友参考一下

问题提出

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

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

 类似资料:
  • 本文向大家介绍C语言实现简单学生管理系统,包括了C语言实现简单学生管理系统的使用技巧和注意事项,需要的朋友参考一下 花了一个月的时间,学习了链表,文件,多文件编程,然后就开始写学生管理系统,比较简单的那种,实现了增,添,改,查,多种排序,输入的时候的限定,成绩分析的功能。遇到的问题很多,也尝试解决了,下面写点写学生管理系统的要注意的地方,希望对别人有帮助。 1.一定要先写好主函数的框架,然后再往上

  • 本文向大家介绍C语言实现简单图书管理系统,包括了C语言实现简单图书管理系统的使用技巧和注意事项,需要的朋友参考一下 目前为止跟着学校进度学习C语言大概半年左右,基础学习只学到了指针,学得非常浅。说实话,起初对C语言的印象———只是一个学习计算机语言的敲门砖,对具体C语言如何应用等,非常迷茫。直到大一下半学期的高级语言设计课程之后,试过dos运行的图形化界面的完整小程序,才发现C语言的魅力。 ok,

  • 本文向大家介绍C语言实现简单学生成绩管理系统,包括了C语言实现简单学生成绩管理系统的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 C语言小项目 实现一个学生成绩管理系统 系统功能:  1.实现所有学生成绩的录入(利用结构体数组),当输入字符为end时候,结束成绩的录入;  2.实现所有学生信息的输出  3.输入指定学生姓

  • 本文向大家介绍c语言实现一个简单日历,包括了c语言实现一个简单日历的使用技巧和注意事项,需要的朋友参考一下 满足三个需求: 1.输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。 2.输入年月,输出该月的日历。 3.输入年月日,输出距今天还有多少天,星期几,是否是公历节日。 最终完善版代码: 以上就是本文所述的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍C语言实现简单扫雷游戏,包括了C语言实现简单扫雷游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现简单扫雷游戏的具体代码,供大家参考,具体内容如下 步骤 1.首先打印游戏选择菜单 2.地图及初始化 1)、展示给玩家的地图(show_map) 2)、地雷的图(mine_map可知地雷的位置) 3.打印地图 4.用户输入坐标,并检查坐标的合理性 5.判断当前位置

  • 本文向大家介绍C语言实现简单飞机大战,包括了C语言实现简单飞机大战的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现飞机大战的具体代码,供大家参考,具体内容如下 定义四个函数实现飞机大战 作者的另一段代码:C语言实现空战游戏,也很棒,分享给大家: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。