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

猜你喜欢

转载自blog.csdn.net/qq_40247103/article/details/81408349