# 班级考勤管理系统
**数据结构 C语言**
### 程序概述
#### 开发环境
开发程序的工具Microsoft Visual C++ 6.0,(简称Visual C++ 6.0、VC++ 6.0或VC 6.0)是Microsoft公司推出的以C++语言为基础的开发Windows环境程序,面向对象的可视化集成编程系统。同时完全兼容C语言编程,它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点。
#### 基本原理或技术
掌握C语言运用数据结构编程基本方法,熟练掌握VC 6.0程序开发环境的使用,完成一个应用程序的设计、编码、调试,了解程序设计过程,锻炼实际应用能力,为后续课程打下基础。班级考勤管理系统主要用C语言编写,运用数据结构,将从文件中读取的数据存储在单链表、队列、树中,方便对数据进行增删改查。
#### 需求说明
班级考勤管理系统,方便班级纪律委员管理和统计班级考勤,方便学生查询考勤状况。班级考勤一目了然,避免学期末因平时成绩产生不必要的冲突。
#### 开发功能
班级考勤管理系统主要的功能有:读写本地txt文件、实现角色设定,三种用户不同权限、管理员对班级成员增删改查、管理员对班级考勤管理、班委对考勤增删改查、对每周学生的出勤进行统计、班级成员根据不同条件查询考勤纪律。
### 程序概要
#### 函数功能关系
每一个函数实现一个功能,模块化编写程序。由单链表、树、队列三种数据结构完成程序功能连接。运行程序首先从welcome函数进入欢迎页面,输入账号和密码进行登录。登录调用login函数,打开本地文件判断用户名和密码是否正确,每个用户对应一个权限,根据权限不同进入administrator函数(管理员界面)、committee函数(班委界面)student函数(学生界面)。三种用户对应不同的功能,管理员实现classpeople函数(班级成员管理)包含insertpeople函数(增加班级成员)、deletepeople函数(删除班级成员)、modifypeople函数(修改成员权限),classattendance函数(班级出勤管理)调用all函数实现跟班委一样的功能。班委实现all函数(查看全部考勤),包含功能增加考情记录、删除考勤记录、修改考勤记录、查找考勤记录,sta函数(出勤率的计算)。学生实现weekall函数(某周全班考勤查询)、stuweek函数(某学生某周考勤查询)、myweek函数(我的考勤查询)。基本功能都已实现,自己测试没有发现BUG,扩展功能也实现,将账号、密码、权限存在用户信息文件中,将学号、姓名、周数、星期、节数、课程、原因存在学生考勤情况文件中。
#### 程序详细设计
##### 关键代码分析
main函数中system("color 50");设置背景颜色与文字区分,当运行完一个功能利用system("cls");清屏,给用户最佳视觉和体验。
welcome函数中输入账户和密码调用login函数进行登录,login函数中fflush(stdin);清空输入缓冲区,确保不影响后面数据读取,以只读的方式打开.txt文本,利用fscanf函数对文本进行扫描读取,用strcmp函数进行文本和输入账号密码、权限进行比较,判断是否登陆成功和用户所拥有的权限。
administrator函数为管理员页面,进入页面利用data函数初始化链表并创建链表将学生考勤信息保存在单链表中,FILE *fp2读取文件利用单链表把一条考勤记录的信息存在一个结点中rear->next = s; rear = s;,然后创建新的结点s = new node;,直到读取的文件为空while(!feof(fp2))。利用level_creat函数将班级成员保存在树中,同理FILE *fp6读取用户信息文件,利用树的层序生成树,将一个用户信息放在树的一个结点中。通过switch语句对功能选择进入classpeople函数对班级成员管理,即classpeople函数所有的功能都是对树或队列的操作再通过树对文本文件的内容进行更新,层序遍历利用队列先进先出输出所有的账户、密码和权限。Insertpeople函数增加班级成员直接对文件进行操作,在文件内容的尾部fprintf函数增加新的账户、密码和权限。Deletepeople函数删除班级成员通过队列出队判断输入的账户名是否与当前结点账号是否一致if(strcmp(p->account,str)==0),若不一致将这个结点的账号、密码和权限写进新的临时文件中,若一致则不写入。直到队列为空while(!empty_sqqueue(&Q))时,删除原文件remove("用户信息文件.txt");,将临时文件改名rename("用户临时文件.txt","用户信息文件.txt");。Modifypeople函数与deletepeople函数大致相同,在找到输入账号与某一结点账号相同时,对结点中的属性进行修改后保存文件。进入classattendance函数对班级出勤管理。All函数输出单链表的每个结点,选择增加考勤记录insert函数,new一个结点,增加一条记录并使用fprintf函数写进文件里,重点在输入数字与中文连接成字符串,如sprintf(connect,"第%s周",s->week)。方便班委和管理员,只输入数字5,而写进文件即为第5周,使得浏览考勤记录更加清楚明了。删除考勤记录deletes函数,对单链表进行操作,为每一条考勤加上序号,删除指定序号的记录,即删除结点p,新建临时文件,将删除结点p的单链表写入临时文件,并重新编号。修改考勤modify函数,通过序号找到结点,再根据修改不同的成员调用update函数,同样也是利用临时文件重写。查找根据输入的条件遍历单链表,用if语句判断输入的条件与对应的结点成员是否一致,一致则输出。
committee函数为班委界面,功能有管理班级考勤记录和周出勤率排序。班级考勤记录与管理员调用的是同一个函数,即all函数,功能与管理员的班级考勤管理功能一样。sta函数为出勤率排序,查询条件是指定周数,算出出勤率并排序。每周默认为5天,有一条违规记录即为1天缺勤。利用if语句判断遍历单链表,用n暂时储存违规记录条数,用refuse[20][20]暂存已经统计的课堂违规人员。实现对学生出勤率计算。
student函数为学生界面,查询某周所有学生考勤walocate函数if语句判断输入周数和遍历单链表周数是否一致strcmp(p->week,wk)==0,一致则输出该结点的所有信息。查询某学生某周考勤情况,同时判断strcmp(p->week,wk)==0&&strcmp(p->name,name)==0,满足则输出该结点的所有信息。查询登录账号某周考勤mwlocate函数,即对自己的考勤进行查询,在登录时传参到该函数,判断strcmp(p->week,wk)==0&&strcmp(p->id,no)==0,满足则输出该结点的所有信息。
#### 程序使用情况
运行程序首先进入登录系统,输入账号密码进行登录,读取本地txt文件判断该用户权限,进入不同用户界面。
用户进入对应功能界面,即可输入功能对应的数字进行操作行程。管理员界面,班级成员管理输出所有用户账、密码和权限,并能对每个用户信息进行增删改查。管理员界面班级出勤管理和班委界面班级考勤记录调用同一个函数功能一样,输出全部考勤信息,并能对考勤信息进行增删改查。班委界面周考勤出勤排序,实现统计某一周学生出勤率。学生界面实现某周全包考勤查询、某学生某周考勤查询、我的考勤查询,在经过筛选以后再输出。
整个程序共有两个本地txt文件储存,一个用于存储考勤信息,一个用于存储用户信息。三种数据结构,单链表、队列、树。增删改查操作基本都在数据结构完�
基于C++(控制台)实现班级考勤管理系统【100012292】
版权申诉
50 浏览量
2023-05-18
10:13:51
上传
评论
收藏 12KB ZIP 举报
神仙别闹
- 粉丝: 2687
- 资源: 7642
最新资源
- 5.23-Java概述,JDK安装及注释、关键字、标识符、数据类型、变量、常量的介绍
- 《Python基础》实验三指导书(1).doc
- TensorFlow 深度学习、机器学习-任何能够用计算流图形来表达的计算,都可以使用TensorFlow
- 一个基于springboot+sureness的面向REST API资源无状态认证权限管理系统
- 王博外文文献.pdf
- python毕业设计基于社区检测的多任务聚类联邦学习项目源码+使用说明(高分项目).zip
- Javaweb项目源码-编程爱好者博客地带.zip
- java各个技术栈相关知识点
- PYthon代码 pdf合并
- 内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、 Redis
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈