员工考勤信息管理设计和实现
员工考勤信息管理的设计和实现
1. 系统描述
1.1 问题说明 本试验要求是设计员工考勤管理系统,,本系统作用是用于企业员工管理,解决人 工考勤面对庞大数据量的弊病.该系统侧重于员工考勤信息管理和员工考勤信息的登记与查询。本系统使用的开发工具是开发程序,通过已编制好的程序,完 成对员工信息的输入、输出、插入、删除操作,以及员工迟到、早退考勤信息 的登记和查询,完善企业管理现代化,方便管理人员统计,考核员工出勤情况, 方便员工管理部门查询,考核员工的出勤率,准确地掌握员工出勤情况和相关 资料,有效管理、掌握员工各项情况. 1.2 功能需求 本试验要求实实现员工考勤管理系统,本系统包括的基本功能有: 1.2.1 员工信息的管理 1.2.2 员工信息的统计 1.2.3 员工考勤信息的管理和查询 1.3 数据需求 本系统为完成所要求功能需要的数据包括 : 1.3.1 员工,姓名,部门 1.3.2 员工迟到,早退情况 1.3.3 在一定期间里员工迟到,早退次数 2. 系统设计
2.1 内存数据结构设计 系统各实体可用以下关系表示:
员工(,姓名,部门)
考勤(,姓名,迟到,早退,日期)
统计(,姓名,迟到次数,早退次数,期间 2.2 数据文件设计 2.2.1.存储员工信息的文件 :
文件名:1 文件内容:
日期 姓名 部门 …. ….. ….. 例:
2010 3
1 姓名
部门
11 张三 安保部
12 李四 安保部 2.2.2.存储员工考勤信息的文件 :
文件名:由日期经过变换后得到。变换方式:
(1)给整个系统设置一个基准日期 基准日期:一段时期内的起始日期,通常规定为一个月的 1 号,考勤所记录的是基准日期之后的考勤信息. (2)考勤记录的日期与基准日期相差的天数加 1。由以上变换可得:基准日期的考勤的文件名为“1”。
2.2.3.存储考勤一段时期的统计信息的文件 :
文件名:管理员自己输入。文件内容:
起始日期 终止日期 姓名 迟到次数 早退次数 … …. … … 例如:
2010 4 1 2010 6 30
姓名 迟到次数 早退次数
11 张三 1
2 12 李四 2
0 各文件之间的关系:
考勤文件是按照当天的员工信息文件的顺序依次记录。在此把请假等排除在外不考虑。
2.3 代码设计 设计代码主要包括: () 第一次输入员工信息 ()
专门用于读取存储员工信息的文件的函数()
专门用于向存储员工信息的文件中写函数() 输出员工信息 ( ) 添加员工信息 ( ) 删除员工信息 () 管理员工信息总函数
( ) 计算日期对应的文件名 () 记录每天每个员工的考勤情况 () 统计所有员工某段时间的考勤情况,把统计结果输入文件中 () 查询某一天的考勤情况 () 查询一段连续时间的考勤情况 () 查询的总函数 () 考勤管理的总函数 2.4 程序代码 "" <> <> <> "" <> 30
最大员工数员工信息结构体 { ; [20]; [20]; }; 日期结构体 { ; ; ; }; 考勤结构体 { ; ; ; [20]; ; }; 统计表结构体 { ; ; ; [20]; }; 0; 记录员工的人数
1; 涉及插入,输出函数的联合操作时某些位置是否调用(“”) []; {2012,1,1}; 基准日期 () 第一次输入员工信息,相当于初始化 { (""); *1,*2; ; 1("1","w"); 2("2","w"); ("\t\t\t\t 员 工 信 息 \n"); ("\n\t\t\t\\t 姓名\t 部门\n\t\t\t\t"); (1,"\t\t\t\t
输入员工信息\n"); (1,"\n\t\t\t\\t 姓名\t 部门\n"); (""); (0) { []; (""); ;
} (1); (2); } (1,"\t\t\t\\\\n"); (2,"\\\n"); ("\t\t\t\t"); (""); () 专门用于读存储员工信息的文件的函数 { *; 0; ((("2","r"))) {
(,""[][], []);
} (()) {
} ; (" \n"); (1);
;
(); } 专门用于向存储员工信息的文件中写函数 () { i; *1,*2; 1("1",""); 2("2",""); (1 2) { (" \n"); (1); } (1,"\t\t\t\t 输入员工信息\n"); ("\n\t\t\t\\t 姓名\t 部门\n"); (0<) {
} (1); (2); } (1,"\t\t\t\\\\n"[i][i][i]); (2,"\\\n"[i][i][i]); 输出员工信息 () { i; ; ; [20]; (""); (); 读员工信息文件("\n\t\t\t\t\t 输出员工信息\n"); ("\n\t1.输出全体员工信息\t"); ("2.按姓名输出员工信息\t"); ("3.按输出员工信息\t"); ("4.按部门员工信息\t"); ("5.返回主菜单\n"); ("\n\t 请选择(1~5):\t"); : (""); (<1 >5) {
("\t 输入错误,请重输:\t"); ; } () { (1): { ("\t\t\\t 姓名\t 部门\n"); (0<) ("\t\t\\\\n"[i][i][i]);
} (2): { ;
("\t\t\t 输入姓名:"); (""); ("\t\t\\t 姓名\t 部门\n"); (0<)
[i]);
; } (3): { (([i])0) ("\t\t\\\\n"[i][i]. ("\t\t\t 输入:"); (""); ("\t\t\\t 姓名\t 部门\n"); (0<) {
[i]);
} ; } (4): { ([i]) {
}
("\t\t\\\\n"[i][i],
; ("\t\t\t 输入部门:"); (""); ("\t\t\\t 姓名\t 部门\n");
[i]);
}
} (5):
} (""); (0<)
;
;
(([i])0)
("\t\t\\\\n"[i][i], 添加员工信息 ( ) 有新员工加入时,插入 { i; (""); (); 读文件 ; ([i]>) {
} [i]; ; (); (0)
} [i][1]; ;
(""); 删除员工信息 ( ) 员工辞职,退休等时,删除员工信息,数组方式存储的线性表的删除操作 { i; j; (); 读文件 (""); (0<)
(<)
; (); (0) ([i]) ;
[j][1];
(""); }
() 管理员工信息总函数 { ; ; ; ("\n\t\t\t\t\t 员工信息管理\n"); ("\n\t1.输入员工信息\t"); ("2.输出员工信息\t"); ("3.插入员工信息\t"); ("4.删除员工\t"); ("5.返回主菜单\n"); ("\n\t 请选择(1~5):\t"); : (""); (<1 >6) { ("\t 输入错误,请重输:\t"); ; } () { (1): {
} (2): {
} (3): {
} (); ;
(); ;
("\t\t\t 插入新员工信息\n"); ("\t\t\t 请输入员工的:\n\t\t\\t 姓名\t 部门\n"); ("\t\t\t"); (""); (); ;
(4): {
} (5):
} }
("\t\t\t
删除员工信息\n"); ("\t 请输入要删除的员工:\t"); (""); (); ;
; 计算日期对应的文件名,相当于哈希函数,以一年内为界,一年以天计算 ( ) { i; 0; () 1;
{ (1<)
(i) {
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
28;
31;
30;
31;
30;
31;
31;
30;
31;
30; } ; } ; } 记录每天每个员工的考勤情况 () { i; ; ; ; ; [20]; [40]; 零时存放某一天的考勤文件的文件名 *; 指向某一天的考勤文件的指针 ; (""); (); ("\n\t\t\t\t 考勤记录\n"); ("\n\t\t 日期:"); (""); (); (, 10); 转换成 (,""); (,"w"); (,"\\\n"); ("\n\t\\t 姓名\t 迟到\t 早退\n"); (,"\t 姓名\t 迟到\t 早退\n"); (0<) 对所有的员工打考勤,并写入对应的文件中 { [i]; ([i]); ("\n\t\\\t"); (""); (,"\\\\n"); } (,"\n"); (); (""); } 统计所有员工某段时间的考勤情况,把统计结果输入文件中 ()
{ i; j; 0; 0; 标识,用于判断一个从文件中读入的新记录是否在存中存在, 如果不存在则新分配内存,否则追加在已有的记录上 ; ; ; 判断是否保存 [40]; 零时存放某一天的考勤文件的文件 ; ; ; [20]; [20]; [20]; [20]; *; 指向某一天的考勤文件的指针 ; 统计的起始日期,最终日期,只能统计连续一段时间的考勤 ; ; 存储零时的 [30]; 存储每个员工的迟到,早退次数的信息 (0<30) {
} (""); [i]0; [i]0; ("\t\t\t 统计员工考勤\n"); ("\n\t 请输入起止日期\n"); ("\n\t\t 起始日期:"); (""); ("\n\t\t 终止日期:"); (""); (); (); (<) { (, 10); 转换成 (,""); (,"r"); (,""); () {
(,""[k][k][k][k]);
} (()) {
; } ;
{ (()) {
);
(0<) {
(,"",
([j]) {
} ("\n"); } (); }
} (0) {
} 0;
}
[k]; ([k]); [k]; [k]; ; 1; (1)
(1)
;
[j];
[j]; ("\n\t\t 考勤统计\n"); ("\\t 姓名\t 迟到次数\t 早退次数\n"); (0<) ("\\\\t\\n"[j][j][j][j]); ("\t\t\t 是否保存():\t");
(); ("y") {
("请输入文件名;\t"); (""); (,"w"); (,"\t 考勤统计\n"); (,"\t 姓名\t 迟到次数\t 早退次数\n"); (0<)
[j][j]);
}
} ("");
(); (,"\\\t\\n"[j][j], 查询某一天的考勤情况 () {
; *; ("");
; ; 0; 判断记录是否为空 ; ; [20]; [20]; [20]; [20]; [20]; ; ("\t\t\t 查询某一天的考勤\n"); ("\n\t 请输入日期:\t"); (""); (); (, 10); 转换成 (,""); (,"r"); (,""); ("\n\t1.查询全体员工考勤\t"); ("2.按查询\t"); ("3.按姓名查询\t"); ("4.返回主菜单\n");
("\n\t 请选择(1~4):\t"); : (""); (<1 >4) { ("\t 输入错误,请重输:\t"); ; } () { (1): { ("\t\t\\t 姓名\t 迟到\t 早退\n"); (()) {
} ; } (2): { (,""); ("\t\t\\\\\n"); ("\t 请输入:\t"); (""); ("\t\t\\t 姓名\t 迟到\t 早退\n"); (()) {
);
} (0) (,""); () { 1;
; }
("\t\t\\\\\n",
; } (3): { ("\t 对不起,没有此 的员工,谢谢!\n"); ("\t 请输入姓名:\t"); ("");
("\t\t\\t 姓名\t 迟到\t 早退\n"); (()) {
);
} (0) { (,""); (()0) {
; }
1; ("\t\t\\\\\n",
} (); (""); }
} ; } (4): ; ("\t 对不起,没有此姓名的员工,谢谢!\n"); 查询一段连续时间的考勤情况 () { ; i; k; 0; ; ;
; *; (""); [20]; [20]; [20]; [20]; [20]; ; ("\t\t\t\t\t 查询某一段时间的考勤\n"); ("\n\t 请输入起止日期\n");
("\n\t\t 起始日期:"); (""); ("\n\t\t 终止日期:"); (""); (); (); ("\n\t1.查询全体员工考勤\t"); ("2.按查询\t"); ("3.按姓名查询\t"); ("4.返回主菜单\n"); ("\n\t 请选择(1~4):\t"); : (""); (<1 >4) { ("\t 输入错误,请重输:\t"); ; } () { (1): { (<) {
);
);
(, 10); 转换成 (,""); (,"r"); (,"",
("\t\t\\\\n\t\t\\\\\n",
); ("\t\t\\\\\n", );
} ; } (2): { (()) {
} ();
(,"",
("\n\t 请输入:\t"); (""); ("\t\t\\t 姓名\t 迟到\t 早退\n"); (<) { (, 10); 转换成 (,""); (,"r"); (,"\", ); (()) {
("\t\t\\\\\n", ); (,""); () { 1;
} }
} (3): {
} (0)
; ();
("\t 对不起,没有此的员工,谢谢!\n"); ("\n\t 请输入姓名:\t"); (""); ("\t\t\\t 姓名\t 迟到\t 早退\n"); (<) { (, 10); 转换成 (,""); (,"r"); (,"", ); 存放每个文件开头的相同信息 (()) { (,"");
(()0) { 1;
("\t\t\\\\\n", );
} (0)
} } ();
} (""); }
; } (4): ; ("\t 对不起,没有此姓名的员工,谢谢!\n"); 查询的总函数 () { ; (""); ("\t\t\t\t\t 查询员工考勤\n"); ("\n\t1.查询某一天的考勤\t"); ("\t2.查询一段时间的考勤\t"); ("\t3.返回主菜单\n"); ("\n\t 请选择(1~3):\t"); : (""); (<1 >3) { ("\t 输入错误,请重输:\t"); ; } () { (1): {
} (2): {
} (); ;
(); ;
(3): { ; } } } 考勤管理的总函数 () { ; ("\n\t\t\t\t\t 考勤信息管理\n"); ("\n\t1.考勤记录\t"); ("2.考勤统计\t"); ("3.考勤查询\t"); ("4.返回主菜单\n"); ("\n\t 请选择(1~4):\t"); : (""); (<1 >4) { ("\t 输入错误,请重输:\t"); ; } () { (1): {
} (2): {
} (3): {
} (4):
} } (); ;
(); ;
(); ;
;
主函数 () { ; ; : (""); ("\n\t\t\t 欢迎使用员工考勤管理系统\n"); ("\t 菜单:\n"); ("\t\t1.员工信息管理\t\t"); ("2.考勤管理\t"); ("3.退出系统\n"); ("\n\t 请输入菜单选项(1~3):\t"); (""); (<1 >3) { ("\t 输入错误,请重输:\t"); ; } () { (1): { (""); (); ;
} (2): { ;
(""); (); ;
} (3): { ;
(""); ("\n\t\t\t\t 你真的要退出吗()?\t"); (); ("y") { ("\n\t\t\t\t 感谢使用本系统!\n\n\t\t\t\t 再见!\n"); (1);
}
; } } 0; } 3. 系统测试
进入员工考勤管理系统界面为 : 进入员工信息管理模块:
进入输入员工信息模块,要分别输入员工的,姓名,部门等基本信息
输入员工信息,并将其存储
进入输出员工模块,会按要求输出员工的基本信息
输出已有的员工信息
按姓名输出员工信息
按员工输出员工信息
按部门输出员工信息
插入员工信息
插入员工后,输出变更后的员工信息
进入员工考勤管理界面 :
进入员工考勤记录模块,可记录员工考勤情况
进入员工考勤统计模块,可统计在一定时间内员工的考勤状况
进入员工考勤查询模块,可查询员工考勤情况
4. 设计的体会和心得
4.1 设计的不足 程序没有对输入的所有信息进行检查,比如日期的月份要在 1-12 之间,每
月的天数;还有迟到、早退只能用 1 或者 0 表示,而不能是其它数据,只有正确的输入才能使程序正确运行. 对于考勤信息只能查询某一天或者某一段连续的期间的考勤,而不能随机查询不连续的记录.在程序的编写过程中由于水平有限,因此虽然实现了如下功能:1.员工基本信息管理;2.员工考勤信息管理。但由于代码不够优化,导致程序运行过慢,操作界面也不够人性化 . 4.2 心得和体会 本次试验的主要目的的编写员工考勤管理系统,由于情况较为复杂,因此将其功能拆分为员工基本信息管理和员工考勤信息管理,在员工基本信息管理中实现了员工信息的输入,输出,插入,删除.在考勤管理系统中实现员工考勤的查询功能. 由于功能较多较为复杂,因此代码编写也较为困难,在查阅大量资料和在同学帮助下完成这次试验,,在程序中实现程序的循环连续的操作,文件的读写操作,让我有了很大的进步,还有数据结构中线性表的插入、删除操作等知识的应用有了很大的提高。相信这次试验对于我以后的学习有很大好处.
上一篇:对于党建组工信息例文
下一篇:管理信息系统案例