此程序是本人大二时期的数据结构大作业,初学数据结构和算法后所编写的一个程序,是一个班级考勤管理系统,可实现班级考勤信息的管理。
本程序使用C语言编写,使用Visual Studio 2019进行开发,程序中使用到了数据结构及算法知识,整个系统功能完善、界面美观(虽然是控制台窗口界面,但经过各种调整,整个界面十分整洁好看)。程序分为两个模式,用户模式和管理模式,用户模式供普通学生登录,可查看和管理个人的考勤信息等,管理模式供班级干部等管理员登录,可查看和管理整个班级成员的考勤信息等。用户模式的功能包括:查看个人信息、确认个人考勤、查询考勤信息、统计缺勤人员、修改密码、退出系统;管理模式的功能包括:查看学生信息、查询考勤信息、添加考勤信息、删除考勤信息、修改考勤信息、统计缺勤人员、超级管理权限、初始化系统、退出系统。
本次数据结构大作业程序,是本人在假期期间从零开始写的,由于本人有强迫症,所以程序有很多代码都在调整界面,花费了大量时间进行各种调整,整个系统的界面非常美观,这也是本人写过的大作业里十分满意的一次之一,当然最后毫无疑问的依旧拿了个优秀的成绩。
本程序是作者本人呕心沥血之作,在此求各位点个赞 o( ̄▽ ̄)d
程序源代码及程序设计说明书可点击下方链接进行下载,供各位需要的人学习参考。
下载链接:班级考勤管理系统
本程序功能及细节颇多,在此仅展示部分功能,若想了解完整功能及细节,请至文章开头处下载程序,进行体验。
打开本程序,进入欢迎界面即初始界面,在此可选择进入用户模式或管理模式,亦可打开帮助界面,或退出系统。
在欢迎界面按“3”可进入到帮助界面,进入帮助界面时,会先显示一个动态闪烁的“HELP”,然后再显示出帮助界面,帮助界面中展示一些帮助事项,在此界面按“1”可打开查看详细的程序设计说明书,按其他键将返回欢迎界面。
进入用户模式后可选择进行用户注册,用户注册界面需输入各种用户信息进行注册,用户信息完整输入且无误即可成功注册,注册成功将展示用户的账号和密码,提示用户牢记账号密码。
在用户模式下可进行用户登录,输入用户的账号(即学号)和密码进行登录;在管理模式下可进行管理员登录,输入特定的账号和密码进行登录,本程序的管理员账号和密码写死在了程序源代码中,均为“admin”。若登录成功会先展示一个动态的进度条并伴随音效,进度条加载完成后将进入相应的菜单界面。
用户登录成功后将进入到用户菜单界面,在此界面可进行各种用户功能选择,包括:查看个人信息、确认个人考勤、查询考勤信息、统计缺勤人员、修改密码、退出系统。
查看个人信息功能,是用户模式的功能,可查看用户自己的个人信息。
确认个人考勤功能,是用户模式的功能,可在此确认用户本人的考勤信息。
查询考勤信息功能,是用户模式和管理模式都有的功能,可按条件查询考勤信息,亦可查看全部考勤信息,按条件查询时需输入指定的条件,输入后系统将查询并展示出所有符合条件的考勤信息。
统计缺勤人员功能,是用户模式和管理模式都有的功能,可统计出缺勤人员,既可按条件统计,也可统计全部,按条件统计时需输入指定的条件,输入后系统将统计并展示出所有符合条件的缺勤人员,统计全部将展示出所有有缺勤记录的学生,并统计缺勤次数。
修改密码功能,是用户模式的功能,可进行密码的修改,需输入旧密码和两次新密码,输入无误将成功修改密码。
管理员登录成功后将进入到管理菜单界面,在此界面可进行各种管理功能选择,包括:查看学生信息、查询考勤信息、添加考勤信息、删除考勤信息、修改考勤信息、统计缺勤人员、超级管理权限、初始化系统、退出系统。
查看学生信息功能,是管理模式的功能,可查看所有学生的信息,进入此界面后先展示所有学生的简易信息,输入指定的学生编号可查看指定学生的详细信息。
添加考勤信息功能,是管理模式的功能,进入此界面后依次输入相应信息,信息输入完整无格式错误且确定后,该条考勤信息将录入到系统中并保存。
删除考勤信息功能,是管理模式的功能,进入此界面后会展示所有考勤信息,可输入指定编号删除指定考勤信息,亦可输入“0”删除全部考勤信息。
修改考勤信息功能,是管理模式的功能,进入此界面后会展示所有考勤信息,可输入指定编号进行指定考勤信息的修改,后续可对该考勤信息进行单个参数修改或整条修改。
超级管理权限功能,是管理模式的功能,输入超级管理权限密码“ADMIN”后,可进入超级管理模式,此模式下可对学生的个人信息进行各种操作,但当时由于时间问题(实则偷懒 ),所以该部分功能暂未实现。
初始化系统功能,是管理模式的功能,可将系统初始化,将所有信息还原至系统最初保存的信息。
本程序代码较多且有详细注释,在此仅展示部分重要代码,完整代码请至文章开头处下载程序,进行了解。
为了系统界面的美观 强迫症患者 ,所以本程序的输出语句很多且很长,很多代码都在调整界面,请别介意。
本程序使用的数据结构为单链表,整个程序的数据存放在考勤信息链表和学生信息链表中,并将这两条链表保存至文件中,以下代码为链表的定义。
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;
}
… …
其他代码请见程序源码!
本程序仅供学习和参考,请勿抄袭或另作他用。
感谢观看,有什么问题可在下方评论区进行评论,若觉得本文章写得不错,还请点个赞呢。
关注我,收看更多精彩!( • ̀ω•́ )✧求点赞、评论、收藏、关注