数据结构大作业-班级考勤管理系统
简介
此程序是本人大二时期的数据结构大作业,初学数据结构和算法后所编写的一个程序,是一个班级考勤管理系统,可实现班级考勤信息的管理。
本程序使用C语言编写,使用Visual Studio 2019进行开发,程序中使用到了数据结构及算法知识,整个系统功能完善、界面美观(虽然是控制台窗口界面,但经过各种调整,整个界面十分整洁好看)。程序分为两个模式,用户模式和管理模式,用户模式供普通学生登录,可查看和管理个人的考勤信息等,管理模式供班级干部等管理员登录,可查看和管理整个班级成员的考勤信息等。用户模式的功能包括:查看个人信息、确认个人考勤、查询考勤信息、统计缺勤人员、修改密码、退出系统;管理模式的功能包括:查看学生信息、查询考勤信息、添加考勤信息、删除考勤信息、修改考勤信息、统计缺勤人员、超级管理权限、初始化系统、退出系统。
本次数据结构大作业程序,是本人在假期期间从零开始写的,由于本人有强迫症,所以程序有很多代码都在调整界面,花费了大量时间进行各种调整,整个系统的界面非常美观,这也是本人写过的大作业里十分满意的一次之一,当然最后毫无疑问的依旧拿了个优秀的成绩。
本程序是作者本人呕心沥血之作,在此求各位点个赞 o( ̄▽ ̄)d
程序源代码及程序设计说明书可在下方GitHub链接处进行下载,供各位需要的人学习参考。
GitHub链接:班级考勤管理系统
目录
- 简介
- 程序流程
- 功能展示
- 欢迎界面(初始界面)
- 帮助
- 注册
- 登录
- 用户菜单界面
- 查看个人信息
- 确认个人考勤
- 查询考勤信息
- 统计缺勤人员
- 修改密码
- 管理菜单界面
- 查看学生信息
- 添加考勤信息
- 删除考勤信息
- 修改考勤信息
- 超级管理权限
- 初始化系统
- 代码展示
- 数据结构
- 函数声明及全局变量
- 主函数
- 后记
程序流程
程序大概流程如下图:
功能展示
本程序功能及细节颇多,在此仅展示部分功能,若想了解完整功能及细节,请至文章开头处GitHub链接下载程序,进行体验。
欢迎界面(初始界面)
打开本程序,进入欢迎界面即初始界面,在此可选择进入用户模式或管理模式,亦可打开帮助界面,或退出系统。
帮助
在欢迎界面按“3”可进入到帮助界面,进入帮助界面时,会先显示一个动态闪烁的“HELP”,然后再显示出帮助界面,帮助界面中展示一些帮助事项,在此界面按“1”可打开查看详细的程序设计说明书,按其他键将返回欢迎界面。
注册
进入用户模式后可选择进行用户注册,用户注册界面需输入各种用户信息进行注册,用户信息完整输入且无误即可成功注册,注册成功将展示用户的账号和密码,提示用户牢记账号密码。
登录
在用户模式下可进行用户登录,输入用户的账号(即学号)和密码进行登录;在管理模式下可进行管理员登录,输入特定的账号和密码进行登录,本程序的管理员账号和密码写死在了程序源代码中,均为“admin”。若登录成功会先展示一个动态的进度条并伴随音效,进度条加载完成后将进入相应的菜单界面。
用户菜单界面
用户登录成功后将进入到用户菜单界面,在此界面可进行各种用户功能选择,包括:查看个人信息、确认个人考勤、查询考勤信息、统计缺勤人员、修改密码、退出系统。
查看个人信息
查看个人信息功能,是用户模式的功能,可查看用户自己的个人信息。
确认个人考勤
确认个人考勤功能,是用户模式的功能,可在此确认用户本人的考勤信息。
查询考勤信息
查询考勤信息功能,是用户模式和管理模式都有的功能,可按条件查询考勤信息,亦可查看全部考勤信息,按条件查询时需输入指定的条件,输入后系统将查询并展示出所有符合条件的考勤信息。
统计缺勤人员
统计缺勤人员功能,是用户模式和管理模式都有的功能,可统计出缺勤人员,既可按条件统计,也可统计全部,按条件统计时需输入指定的条件,输入后系统将统计并展示出所有符合条件的缺勤人员,统计全部将展示出所有有缺勤记录的学生,并统计缺勤次数。
修改密码
修改密码功能,是用户模式的功能,可进行密码的修改,需输入旧密码和两次新密码,输入无误将成功修改密码。
管理菜单界面
管理员登录成功后将进入到管理菜单界面,在此界面可进行各种管理功能选择,包括:查看学生信息、查询考勤信息、添加考勤信息、删除考勤信息、修改考勤信息、统计缺勤人员、超级管理权限、初始化系统、退出系统。
查看学生信息
查看学生信息功能,是管理模式的功能,可查看所有学生的信息,进入此界面后先展示所有学生的简易信息,输入指定的学生编号可查看指定学生的详细信息。
添加考勤信息
添加考勤信息功能,是管理模式的功能,进入此界面后依次输入相应信息,信息输入完整无格式错误且确定后,该条考勤信息将录入到系统中并保存。
删除考勤信息
删除考勤信息功能,是管理模式的功能,进入此界面后会展示所有考勤信息,可输入指定编号删除指定考勤信息,亦可输入“0”删除全部考勤信息。
修改考勤信息
修改考勤信息功能,是管理模式的功能,进入此界面后会展示所有考勤信息,可输入指定编号进行指定考勤信息的修改,后续可对该考勤信息进行单个参数修改或整条修改。
超级管理权限
超级管理权限功能,是管理模式的功能,输入超级管理权限密码“ADMIN”后,可进入超级管理模式,此模式下可对学生的个人信息进行各种操作,但当时由于时间问题(实则偷懒 ),所以该部分功能暂未实现。
初始化系统
初始化系统功能,是管理模式的功能,可将系统初始化,将所有信息还原至系统最初保存的信息。
代码展示
本程序代码较多且有详细注释,在此仅展示部分重要代码,完整代码请至文章开头处GitHub链接下载程序,进行了解。
为了系统界面的美观 强迫症患者 ,所以本程序的输出语句很多且很长,很多代码都在调整界面,请别介意。
数据结构
本程序使用的数据结构为单链表,整个程序的数据存放在考勤信息链表和学生信息链表中,并将这两条链表保存至文件中,以下代码为链表的定义。
enum Sex { //性别Man, Woman, Unknow //男,女,未知
};
enum Type { //缺勤类型Late, Absent, Leave //迟到,缺席,请假
};
enum State { //考勤信息状态No, Yes //未确认,已确认
};
typedef struct attendanceInfo_node* apointer; //考勤信息结点指针类型
struct attendanceInfo_node { //考勤信息结点结构int X; //编号,即在链表中的序号char num[15]; //学号char name[10]; //姓名tm data; //日期int n; //第几节char subject[25]; //课程char locale[8]; //地点enum Type type; //性质enum State state; //状态apointer next; //考勤信息结点指针域
};
typedef apointer alklist; //考勤信息单链表类型,即头指针类型
typedef struct studentInfo_node* spointer; //学生信息结点指针类型
struct studentInfo_node { //学生信息结点结构int X; //编号,即在链表中的序号char name[10]; //姓名enum Sex sex; //性别char grade[8]; //年级char clas[20]; //班级char num[15]; //学号char password[20]; //密码char phone[15]; //手机char idCard[20]; //身份证int times; //缺勤次数(非出席次数)spointer next; //学生信息结点指针域
};
typedef spointer slklist; //学生信息单链表类型,即头指针类型
函数声明及全局变量
本程序定义了17个主要功能函数和9个辅助操作函数,函数声明如下,全局变量为两条单链表,即两条单链表的头指针和尾指针。
//主要功能函数
void Title(); //标题函数,用于输出标题
void Registe(slklist* studentHead, spointer* studentRear); //注册函数,用于用户注册
void Login(int flag); //登录函数,用于用户登录和管理员登录
void Help(); //帮助函数,用于查看程序使用说明书
void AdminMenu(slklist* studentHead, alklist* attendanceHead, apointer* attendanceRear); //管理员菜单函数,用于显示菜单并选择功能
void UserMenu(spointer sp); //用户菜单函数,用于显示菜单并选择功能
void StudentInfo(); //查看学生信息
void Query(); //查询考勤信息
void Add(); //添加考勤信息
void Delete(); //删除考勤信息
void Modify(); //修改考勤信息
void Statistic(); //统计缺勤人员
void Super(); //超级管理权限,暂时无实用功能
void Init(); //初始化系统
void UserInfo(spointer sp); //查看个人信息
void Confirm(spointer sp); //确认个人考勤
void ChangePassword(spointer sp); //修改密码//辅助操作函数
void DisplayCursor(int flag); //显示或隐藏光标
void Goto_xy(short x, short y); //定位光标位置到指定坐标
void InputPassword(char* password); //输入密码
void ReadStudentInfo(slklist* studentHead, spointer* studentRear, int flag); //从文件读取学生信息,建立学生信息链表
void WriteStudentInfo(slklist* studentHead); //将学生信息链表写入文件
void ReadAttendanceInfo(alklist* attendanceHead, apointer* attendanceRear, int flag); //从文件读取考勤信息,建立考勤信息链表
void WriteAttendanceInfo(alklist* attendanceHead); //将考勤信息链表写入文件
void Destroy(slklist* studentHead, alklist* attendanceHead); //销毁链表
void QuickSort(int flag, struct student stu[], int left, int right); //快速排序//全局变量,学生信息链表、考勤信息链表
slklist studentHead = NULL; //学生信息链表头指针
spointer studentRear = NULL; //学生信息链表尾指针
alklist attendanceHead = NULL; //考勤信息链表头指针
apointer attendanceRear = NULL; //考勤信息链表尾指针
主函数
//主函数
int main() {char choice;ReadStudentInfo(&studentHead, &studentRear, 1); //建立学生信息链表ReadAttendanceInfo(&attendanceHead, &attendanceRear, 1); //建立考勤信息链表SetConsoleTitle(TEXT("◇ 班 级 考 勤 管 理 系 统 ◇")); //设置控制台标题do { //欢迎界面system("cls");printf("\n\t\t\t=====================================================================\n");printf("\t\t\t =============== ===============\n");printf("\t\t\t ◇=========== 欢 迎 使 用 班 级 考 勤 管 理 系 统 ===========◇\n");printf("\t\t\t =============== ===============\n");printf("\t\t\t=====================================================================\n\n\n\n");printf("\t\t\t --------------------\n");printf("\t\t\t 1.用户模式\n");printf("\t\t\t --------------------\n");printf("\t\t\t 2.管理模式\n");printf("\t\t\t --------------------\n");printf("\t\t\t 3. 帮 助\n");printf("\t\t\t --------------------\n");printf("\t\t\t 4.退出系统\n");printf("\t\t\t --------------------\n");DisplayCursor(0); //隐藏光标choice = _getch();switch (choice) {case '1': //用户模式do { //用户登录注册选择界面system("cls");Title();printf("\t\t\t 请登录或注册\n");printf("\t\t\t --------------------\n");printf("\t\t\t 1.登录\n");printf("\t\t\t --------------------\n");printf("\t\t\t 2.注册\n");printf("\t\t\t --------------------\n");printf("\t\t\t 3.取消\n");printf("\t\t\t --------------------\n");choice = _getch();if (choice == '1') { //登录Login(0);break;}else if (choice == '2') { //注册Registe(&studentHead, &studentRear);break;}else if (choice == '3') //取消,返回欢迎界面break;} while (1);break;case '2':Login(1); break; //管理模式case '3':Help(); break; //帮助case '4':exit(0); //退出系统}} while (1);return 0;
}
… …
其他代码请见程序源码!
后记
本程序仅供学习和参考,请勿抄袭或另作他用。
感谢观看,有什么问题可在下方评论区进行评论,若觉得本文章写得不错,还请点个赞呢。
关注我,收看更多精彩!( • ̀ω•́ )✧求点赞、评论、收藏、关注
数据结构大作业-班级考勤管理系统相关推荐
- 数据结构课程设计-班级考勤管理系统
数据结构课程设计-班级考勤管理系统 写这个博客,主要是为了总结一下,之前写过的东西,方便以后回来看看,写得不好,勿喷!!! 题目描述: 设计一个对本班所有人员进行考勤的管理系统,要求系统管理员(班长. ...
- 数据结构大作业之停车场管理系统
数据结构大作业之停车场管理系统 安排: 1. 分析停车场的数据属性,并依据停车场管理的功能要求,确定模拟系统设计方案: 2. 完成停车场管理的数据结构设计工作,包括栈和队列的逻辑结构和存储结构等: 3 ...
- 班级考勤管理系统 数据结构 C语言
程序概述 开发环境 开发程序的工具Microsoft Visual C++ 6.0,(简称Visual C++ 6.0.VC++ 6.0或VC 6.0)是Microsoft公司推出的以C++语言为基础 ...
- C/C++《数据结构大作业》
C/C++<数据结构大作业> 要求 一.作业目的 1. 掌握用数据结构的知识进行程序设计. 2. 应用所学的数据结构完成一个具有一定实际意义的应用程序的设计.编码.调试,锻炼实践动手能力, ...
- CC++《数据结构大作业》
C/C++<数据结构大作业> 要求 一.作业目的 1. 掌握用数据结构的知识进行程序设计. 2. 应用所学的数据结构完成一个具有一定实际意义的应用程序的设计.编码.调试,锻炼实践动手能力, ...
- C语言霍夫曼编码压缩,数据结构大作业——哈夫曼编码压缩BMP格式文件
数据结构大作业--哈夫曼编码压缩BMP格式文件 首先需要了解BMP图像格式 BMP图像格式详解 其次需要了解哈夫曼编码如何对BMP文件进行压缩 哈夫曼压缩与解压缩 编程部分 使用的头文件 虽然这里用了 ...
- 学委作业管理系统c语言,c语言大作业-学生信息管理系统.doc
c语言大作业-学生信息管理系统.doc 课程设计报告书 题目:学生信息管理系统设计 学 院 电子与信息学院 专 业 电子信息类 学生姓名 学生学号 指导教师 课程编号 135160 课程学分 1学分 ...
- 数据结构大作业——银行排队系统
数据结构大作业--银行排队系统 离散事件模拟--银行业务处理 题目分析 声明部分 辅助函数 初始化窗口节点 创建顾客节点 比较四个窗口的排队人数 输出离开顾客的信息 主要函数 完整的头文件代码 离散事 ...
- 数据结构大作业--迷宫问题
数据结构大作业–迷宫问题 上图: 代码有详细注解 迷宫自动生成问题单独讨论 当然由于出口随机的原因右小概率会出现bug(这无伤大雅) 首先我们都知道,迷宫只有一条正确的道路. 这个时候请把自己想象成一 ...
最新文章
- 目标检测中特征融合技术(YOLO v4)(下)
- 数据结构与算法:19 排序
- 运行返回签名不正确_不正确运行废气治理RTO设备容易引起爆炸,注意事项有哪些?...
- 动态规划与卫星任务规划
- Android开发之android_apk 在线安装(源代码分享)
- 双击“本地连接”打不开无反应的解决方法
- Adnroid提高效率之资源文件改名
- 【SSL】调用HTTPS://服务遇到错误:unable to find valid certification path to requested target
- 6/7 SELECT语句:过滤(正则表达式REGEXP)
- Archive object standard check
- Shell编程:简洁的 Bash Programming 技巧续篇
- (转)Spring Boot 2 (八):Spring Boot 集成 Memcached
- mysql更改安装路径6_关于mysql安装后更改数据库路径方法-Centos6环境
- python分割压缩_Python读取分割压缩TXT文本文件实例
- JavaScript 游戏开发:手把手实现碰撞物理引擎
- Excel VBA快速去除Excel中的所有公式
- blos硬盘启动台式计算机,怎么进bios设置硬盘启动顺序|电脑bios硬盘启动设置方法...
- 可能致癌的几种化妆品
- Makefile中wildcard函数的应用理解
- java h5 视频播放_selenium(java)处理HTML5的视频播放