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

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

(0)

相关推荐

  • C语言职工信息管理系统源码

    本文实例为大家分享了C语言职工信息管理系统的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct worker { char ID[20];//工号 char name[20];//姓名 char sex[5];//性别 char born[20];//生日 char edu[20];//学历 char po

  • C语言图书管理系统简洁版

    DOS界面的图书管理系统,具体内容如下 程序分为两块:管理员操作(收录图书.删除图书等)和会员操作(注册.借书.还书等): 1.管理员操作界面 2.会员操作界面 global.h头文件:(程序中只使用了一个编写的头文件,在这里存放了所有的接口函数以及需要使用到的头文件,还有结构体的定义) #include "iostream" #include "string" #include "fstream" #include "conio.h&

  • C语言学生管理系统源码分享

    本文实例为大家分享了C语言学生管理系统源码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> //结构体可以存放的学生信息最大个数,不可变变量 int const MAX_LENGTH=100; //学生信息结构体数组,最多可以存放100个学生信息 struct student{ int id; //学号 char *name; //姓名 int age; //年龄 float c_score; //C语言成绩 float engl

  • 基于C语言实现简单的12306火车售票系统

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在number.dat文件中,排序过后的保存在sort.dat中(.dat是一种二进制文件). 在编写的过程中我觉得在判断火车的状态比较值得深究.这里假设火车主要有四种状态: 1.未发车 2.已发车 3.停止检票 4.停止退票 在程序中,思路是将代表发车时间的字符串转化为整型,再和系统现在的时间进行大小

  • c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)

    复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>        /*屏幕操作函数库*/ /*主管权限数据格式化*/#define HEADER1_zg "-----------------------------货物管理系统(主管)--------------------------------\n"#define H

  • C语言编写学生成绩管理系统

    用C语言编写学生成绩管理系统代码,供大家参考,具体内容如下 C语言实现学生成绩管理系统实战教学 https://www.jb51.net/article/154767.htm (1)给出所选课程设计题目以及本题目具体所要完成的功能要求说明. 1.课程设计题目:学生成绩管理系统 2.完成的功能要求: (1).主要实现的功能: 1---学生输入 2---学生插入 3---学生查询(按学号) 4---学生删除 5---学生输出 6---计算每名学生的平均分并输出 7---计算每科的平均分并输出 8--

  • C语言职工管理系统设计

    本文实例为大家分享了C语言职工管理系统设计代码,供大家参考,具体内容如下 代码如下: #include<stdio.h> #include<stdlib.h> #include <string.h> struct Worker { int id;//工号 char name[16];//姓名 char sex[8];//性别 int age;//年龄 char edu_exp[32];//学历 int wage;//工资 char adress[32];//地址 cha

  • C语言数据结构之学生信息管理系统课程设计

    本文实例为大家分享了学生信息管理系统设计的具体代码,供大家参考,具体内容如下 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能: 建立链表      显示链表      查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示"无此记录!"的信息.      删除链表中指定学号的结点.      在链表中指定的位置插入一个新结点(学号不能和其他结点重复). 要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序

  • C语言通讯录管理系统完整版

    C语言实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节//

  • C语言简单实现门禁系统

    问题提出 用C语言实现门禁系统功能. 功能简析 1.系统登录分为管理员登录和学生登录,输入相应字符即可选择登录: 2.学生登录,学生使用自己的账号密码登录系统,选择开启的门,即可开启门禁:此外系统还会记录下学生登录的信息,如登录账号.登录时间.开启哪间门: 3.管理员登录,管理员登录也是要输入特定的账号密码才能登录:登录之后才能进入管理员操作界面进行相应操作,如添加学生账号.删除学生账号.查看学生基本信息.查看学生登录情况--输入相应字符即可选择执行相应的功能. 4.管理员权限一:添加学生账号.

  • java门禁系统面向对象程序设计

    本文为大家分享了java门禁系统面向对象程序设计,供大家参考,具体内容如下 下面是对门禁系统的介绍: 需求 1.某公司安装了电子门,要设计门禁系统: 2.公司的雇员可以凭借密码.胸卡或指纹进入公司 3.计算机根据雇员的验证方式对其身份进行验证 4.管理员在监控室可以通过按钮直接开启电子门 5.访客可以按门铃请求进入,由管理员为其放行 下面请看代码 /** * 门禁系统 */ package Liu; import java.util.*; import org.apache.log4j.Logg

  • java实现门禁系统

    本文实例为大家分享了java实现门禁系统的具体代码,供大家参考,具体内容如下 Door.java package com.handson.sys; public class Door { public final static String OPEN = "门已开启"; public final static String CLOSE = "门已关闭"; private String state = CLOSE; // 电子门状态 private boolean b

  • CCF考试试题之门禁系统java解题代码

    问题描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况.每位读者有一个编号,每条记录用读者的编号来表示.给出读者的来访记录,请问每一条记录中的读者是第几次出现. 输入格式 输入的第一行包含一个整数n,表示涛涛的记录条数. 第二行包含n个整数,依次表示涛涛的记录中每位读者的编号. 输出格式 输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现. 样例输入 5 1 2 1 1 3 样例输出 1 1 2 3 1 评测用例规模与约定 1≤n≤1,000,读者的编号

  • matlab GUI指纹识别门禁系统介绍及源码实现

    目录 引言 一.指纹识别简介 1 指纹识别系统的构成 2 指纹识别系统的实现 2.1 指纹图像的采集 2.2 指纹图像的预处理 2.3 指纹图像特征提取 2.4 指纹图像匹配 二.部分源代码 三.运行结果 四.matlab版本及参考文献 引言 随着社会的发展,钥匙.证件.银行卡以及用户名密码等这些鉴定身份的标志性物品和标识的安全性越来越弱,很容易被伪造.被盗用.不小心丢失等,给人们带来了极大的困扰,如何才能更好的保护个人信息成为当今时代一个很重要问题.随着网络和计算机应用技术的发展,人们逐渐将目

  • 基于Python实现简单的人脸识别系统

    目录 前言 基本原理 代码实现 创建虚拟环境 安装必要的库 前言 最近又多了不少朋友关注,先在这里谢谢大家.关注我的朋友大多数都是大学生,而且我简单看了一下,低年级的大学生居多,大多数都是为了完成课程设计,作为一个过来人,还是希望大家平时能多抽出点时间学习一下,这种临时抱佛脚的策略要少用嗷.今天我们来python实现一个人脸识别系统,主要是借助了dlib这个库,相当于我们直接调用现成的库来进行人脸识别,就省去了之前教程中的数据收集和模型训练的步骤了. B站视频:用300行代码实现人脸识别系统_哔

  • Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

    1 准备工作 1.1 环境搭建 1.1.1 安装python3.6 python安装官网 1.1.2 安装django2.2 pip install django(==2.2.0) //不加版本默认安装最新版 1.1.3 安装pycharm(社区版,官网下载安装即可) 在安装完成后要配置好需要的第三方库:(pip下载,推荐在pycharm下也配置虚拟环境) Django2.2 连接mysql需要的库:PyMySQL, mysql, mysqlclinet 验证码用到的库:django-simpl

  • C语言实现航班订票系统

    本文实例为大家分享了C语言实现航班订票系统的具体代码,供大家参考,具体内容如下 描述: 点定义两个链表,一个存储航班信息,一个存储客户信息: 进行一系列简单的增删查找: 代码如下 #include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> using namespace std; const int MAXN=250; typedef struct { string p_id

  • C语言简单实现银行ATM存取款功能

    这里使用的运行工具是DEV C++.老铁们一定要看仔细了.是DEV C++ 一.课程设计的目的 掌握C语言程序设计的基础知识.基本理论.原理和实现技术. 二.课程设计的题目 银行ATM存取款系统 三.设计内容(主要技术关键的分析.解决思路和方案比较等) 银行ATM存取款系统 银行ATM存取款系统业务描述如下: 银行ATM存取款系统能为用户提供存款.取款.查询.转账和修改密码的功能.为了模拟真实的ATM业务环境,本系统必须实现存款.取款.查询.转账.修改密码以及开户的功能.用户通过开户业务在本系统

  • C语言实现学生奖学金评定系统

    本文实例为大家分享了C语言实现学生奖学金评定系统的具体代码,供大家参考,具体内容如下 说明: 学生综合积分由文化积分和德育积分构成,文化积分是所有门课程成绩总和除以课程门数(平均分),德育积分是参加各类活动的积分,学生综合积分=文化积分×70%+德育积分×30%.按照学生综合积分排名,获得一等奖学金1名学生,获得二等奖学金2名学生,获得三等奖学金3名学生,项目要求输入班级学生成绩信息,输出获得奖学金的学生名单.已知学生成绩信息包括学号.姓名.英语成绩.网络成绩.C语言成绩.数据库成绩.文化积分.

随机推荐