C++课程设计-考勤管理程序设计与实现报告.docx_第1页
C++课程设计-考勤管理程序设计与实现报告.docx_第2页
C++课程设计-考勤管理程序设计与实现报告.docx_第3页
C++课程设计-考勤管理程序设计与实现报告.docx_第4页
C++课程设计-考勤管理程序设计与实现报告.docx_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学 号: 0120810680205课 程 设 计题 目考勤管理程序的设计与实现院 系计算机学院专 业软件工程班 级软件0802 班姓 名李艳林指导教师夏红霞2010年7月9日课程设计任务书学生姓名: 李艳林 专业班级: 软件0802 班 指导教师: 夏红霞 工作单位: 计算机科学与技术学院 题 目: 考勤管理程序的设计与实现课程设计要求:1、熟练掌握基本的数据结构;2、熟练掌握各种算法;3、运用高级语言编写质量高、风格好的应用程序。课程设计任务: 1、系统应具备的功能:(1)员工的信息输入、输出、删除和修改(2)考勤情况的查询(3)系统定期对各人员的迟到早退情况进行统计,以供考勤管理人员查询与打印2、数据结构设计;3、主要算法设计;4、编程及上机实现;5、撰写课程设计报告,包括:(1)设计题目;(2)摘要和关键字;(3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、不足之处、设计体会等;(4)结束语;(5)参考文献。时间安排: 2010年7月5日9日 (第19周)7月5日 查阅资料7月6日 系统设计,数据结构设计,算法设计7月7日 -8日 编程并上机调试7月9日 撰写报告7月10日 验收程序,提交设计报告书。指导教师签名: 2010年7月4日 系主任(或责任教师)签名: 2010年7月4日 武汉理工大学数据结构课程设计说明书考勤管理程序的设计与实现摘要员工考勤管理系统作为员工企业的基本的管理,是企业对员工工作管理的基本依据。开发考勤管理系统,正是完善企业信息化管理的重要环节。人工考勤已很难满足企业规范化管理的要求,面对庞大的信息量,该方式现存在很多弊病。因此,建立现代化的智能考勤管理系统势在必行。这样也大大减轻了考勤工作人员的工作量,提高了工作效率,使原本复杂和枯燥无味的工作变得简单而轻松。本文以“考勤信息管理系统”的设计与实现为例,阐述了考勤系统的设计开发的全过程,包括系统的整体设计,逻辑框架与数据流程,各功能模块划分,系统功能模块的设计与具体的实现等部分。该系统侧重于员工考勤信息管理和员工考勤信息的登记与查询。本系统使用的开发工具是vc+开发程序,通过已编制好的程序,完成对员工信息的输入、输出、插入、修改、删除操作,以及员工迟到、早退考勤信息的登记和查询,完善企业管理现代化,方便管理人员统计,考核员工出勤情况,方便员工管理部门查询,考核员工的出勤率,准确地掌握员工出勤情况和相关资料,有效管理、掌握员工各项情况。关键字:考勤管理;visual c+引言随着企业规模的不断扩大,员工队伍变的越来越庞大。员工信息不断增多,而员工管理是一项琐碎、复杂而十分细致的工作。一个检索迅速、查找方便、可靠的考勤管理系统能极大地提高对员工管理的效率,也是企业的科学化、正规化管理的重要条件。用计算机来帮助企业对员工信息,考勤进行管理已成为目前的趋势,使用计算机可以高速,快捷完成以上工作。使企业节省人力,把人的精力投入到其它方面,使企业更快地发展。1 需求分析 考勤管理系统是企业对考勤实现信息化管理,考勤管理中重要涉及的管理任务有2个方面:员工基本信息管理、考勤信息管理。因此,该系统使用vc+实现考勤管理系统。员工的基本信息、员工考勤。适用各企业。考勤系统的目的是为实现员工考勤数据的登记、设计统计和考勤信息查询过程的自动化,完善员工管理现代化,方便管理人员统计考核员工出勤情况,方便员工查询。1.1功能需求1.1.1基本功能需求本系统要实现的是员工考勤管理系统,在设计时应该使系统便于考勤管理员、员工的操作,系统应有的基本功能如下:(1) 员工考勤管理相关信息的管理功能;(2) 统计功能;(3) 查询功能;(4) 员工基本信息管理功能。1.1.2开发环境介绍本系统使用的开发语言使c语言,vc+为开发工具,以windows xp系统为操作平台。1.2系统需求分析考勤管理系统能够通过员工考勤的情况记录,方便地对员工考勤进行评定。需要设置人工输入的功能,如出勤记录、考勤统计和查询、员工信息输入、输出、相关、删除等。考勤管理员可直接操作个考勤情况,本系统对考勤管理员全部开发,对非考勤管理员不需要密码,可直接进行查询,管理员可以浏览、查询、登记、统计员工考勤的基本信息;浏览查询、添加、输出、和修改员工的基本信息。考勤管理系统可以保证考勤数据的准确、公正,减少考勤人员的工作负担。方便修改基本信息,提供统计信息,查询方便。本系统实现的功能描述如下:(1)员工信息管理员工信息管理的基本功能包括:员工信息输入;员工信息输出;员工信息添加;员工信息修改;员工信息删除。(2)考勤信息管理考勤管理的基本功能包括:考勤管理员记录考勤;考勤管理员统计考勤;查询员工考勤情况。2 系统功能设计与实现2.1系统分析与设计基于上面的分析,对员工考勤管理系统进行以下分析:1、 员工信息管理2、 考勤信息记录3、 考勤信息统计4、 考勤信息查询2.2存储系统分析与设计2.2.1实体及其属性整个系统各实体可用以下关系表示:员工(id,姓名,部门)考勤(id,姓名,迟到,早退,日期)统计(id,姓名,迟到次数,早退次数,期间)2.2.2 e-r图分析e-r图分析的目的是确定系统中所有的实体、实体的属性及实体之间的联系,为设计文件系统打下基础,画e-r图通常使用自底向上的设计方法,首先对局部视图进行分析设计,然后再将视图hebrew,消除冲突和冗余,得到系统的总体e-r图。下面是总体e-r图,如图2.1所示。图文件系统的设计1.存储员工信息的文件:文件名:information1.txt文件内容:日期id姓名部门. .例:2010 3 1 id姓名部门 11张华销售部 12王明销售部2.存储员工考勤信息的文件:文件名:由日期经过变换后得到。变换方式:(1)给整个系统设置一个基准日期 基准日期:一段时期内的起始日期,通常规定为一个月的1号, 考勤所记录的是基准日期之后的考勤信息,对于之前的当当作过期 已没有太多价值,只作存档处理。(2)考勤记录的日期与基准日期相差的天数加1。由以上变换可得:基准日期的考勤的文件名为“1.txt”。3.存储考勤一段时期的统计信息的文件:文件名:管理员自己输入。文件内容:起始日期 终止日期id姓名迟到次数早退次数 . 例如:2010412010630id姓名迟到次数早退次数11张华1212王明20 各文件之间的关系: 考勤文件是按照当天的员工信息文件的顺序依次记录。在此把病假、事假等排除在外不考虑。 统计信息文件的内容是根据日期从对应的考勤文件中读取数据,分别把每个人的累加在一起。如图3.2所示。图2.2 文件关系图2010 3 2id姓名|迟到 早退11 张华 1 012 王明 0 0 . 31 王平 0 0 2010 3 1id姓名|迟到 早退11 张华 1 012 王明 0 0 . 31 王平 0 0 id 姓名 部门11 张华 销售部12 王明 销售部 . 31 王平 运输部 id 姓名 部门11 张华 销售部12 王明 销售部 . 31 王平 运输部 1.txt2010 3 1 2010 3 31id姓名迟到次数|早退次数11 张华 12 王明 13 李平 . 31 王平 2010 3 31id姓名|迟到早退11 张华 0 013 李平 1 0 . 32 王阳 0 1id 姓名 部门11 张华 销售部13 李平 销售部 . 32 王阳 运输部2.2.4数据结构分析与设计根据上面的文件系统的设计,每种文件的一条记录分别用一个结构体表示,文件与文件之间的关系很简单,文件的记录是线性的,所以相同的记录可以用数组的形式来存储,也就是线性表的形式。2.3系统功能模块设计 此系统共有两个模块,分别为:员工信息管理,考勤管理。2.3.1考勤管理系统的主要体系结构如图2.3所示考勤管理系统考勤信息查询考勤信息统计考勤信息记录员工信息删除员工信息修改员工信息添加员工信息输出员工信息输入员工考勤管理员工信息管理2.3.2系统模块设计 1.员工信息管理模块员工信息管理模块由五个小模块组成,至于五个小模块的逻辑关系,虽然结构图显示为平行的关系,但我觉得它们之间有一定的先后次序,信息输入应该先于其它四个。员工信息修改分成两个操作,先删除旧的员工信息,再插入新的员工信息,也就是调用了其它两个小模块。2.考勤管理模块考勤管理模块由三个小模块组成,它们的逻辑关系为:先调用考勤信息记录模块,然后从记录中抽出一部分数据进行统计。或者进行考勤查询。2.4 系统详细设计2.4.1主控制界面如图2.4所示。 图2.4主控制界面的主要功能: 输入1进入员工信息管理页面,对员工信息进行各种操作。 输入2进入考勤管理页面,对员工的进行各种操作。 输入3退出系统。 2.4.2其它模块的界面设计(1)员工信息管理界面如图2.5所示。 图2.5主要功能:选择不同的序号进行以下操作。 输入员工信息:此操作一般只在第一次使用系统时,初始化员工信息。之后一般不用,而用其它操作。 其它的操作是在输入员工信息的基础上进行的,或者准确的地说是在有员工信息的基础上。输出员工信可以按照:1.输出全体员工;2.按照1d输出某个员工的信息;3.按照姓名输出某个员工的信息;4. 按照部门输某个部门信息。插入、修改、删除只能通过输入id方式,并且一次只能操作一个员工的信息。(2)考勤管理界面如图2.6所示。 图2.6主要功能:考勤记录:输入某个日期,然后对当天所有员工依次打考勤 考勤统计:输入起止日期后,对在此期间的所有员工进行统计,并输出,然后手动保存。 考勤查询:首次分两种情况,1.查询某一天的考勤;2.查询某一段连续时期的考勤。其中每一种又分别按照不同的方式查询,1.查询全体的考勤;2.按id查询某个人的考勤;3.按姓名查询某个人的考勤。查到之后输出,查不到,输出“对不起,此员工不出现,谢谢”。2.5算法设计和程序实现2.5.1 头文件,预定义,特殊结构体,变量的定义,说明。#include#include#include#include process.h#include #define max_count 30 /最大员工数struct employee /员工信息结构体 int id; char name20; char department20;struct date /日期结构体 int year; int month; int day;struct attendance /考勤结构体 int id; int late; int early; char name20; struct date dat;struct statistic /统计表结构体 int id; int late_count; int early_count; char name20;int count=0; /记录员工的人数int flag_pause=1; /涉及修改,插入,输出三个函数的联合操作时某些位置是否调用system(“pause”)struct employee personmax_count;struct data base_data=2010,3,1; /基准日期2.5.2 信息管理程序实现void input_employee() /第一次输入员工信息,相当于初始化 system(cls); file *fp1,*fp2; struct employee temp; fp1=fopen(information1.txt,w); fp2=fopen(information2.txt,w); printf(tttt 员工信息n); printf(nttttidt姓名t部门ntttt); fprintf(fp1,tttt 输入员工信息n); fprintf(fp1,nttttidt姓名t部门n); scanf(%d%s%s,&temp.id,,temp.department); while(temp.id!=0) personcount=temp; printf(%d,temp.id); count+; fprintf(fp1,tttt%dt%st%sn,temp.id,,temp.department); fprintf(fp2,%dt%st%sn,temp.id,,temp.department); printf(tttt); scanf(%d%s%s,&temp.id,,temp.department); fclose(fp1); fclose(fp2);void read_file() /专门用于读存储员工信息的文件的函数 file *fp; count=0; if(fp=fopen(information2.txt,r)=null) printf(cant not open filen); exit(1); while(!feof(fp) fscanf(fp,%d%s%s,&personcount.id,personcount.name,personcount.department); count+; count-; fclose(fp);/专门用于向存储员工信息的文件中写函数void write_file() int i; file *fp1,*fp2; fp1=fopen(information1.txt,w+);fp2=fopen(information2.txt,w+); if(fp1=null | fp2=null) printf(cant not open filen); exit(1); fprintf(fp1,tttt 输入员工信息n);printf(fp1,nttttidt姓名t部门n); for(i=0;icount;i+) fprintf(fp1,tttt%dt%st%sn,personi.id,,personi.department); fprintf(fp2,%dt%st%sn,personi.id,,personi.department); fclose(fp1); fclose(fp2);/输出员工信息void output_employee() int i; int id; int choice; char temp20; system(cls); read_file(); /读员工信息文件 printf(nttttt输出员工信息n); printf(nt1.输出全体员工信息t); printf(2.按姓名输出员工信息t); printf(3.按id输出员工信息t); printf(4.按部门员工信息t); printf(5.返回主菜单n); printf(nt请选择(15):t); start: scanf(%d,&choice); if(choice5) printf(t输入错误,请重输:t); goto start; switch(choice) case(1): printf(tttidt姓名t部门n); for(i=0;icount;i+) printf(ttt%dt%st%sn,personi.id,,personi.department); break; case(2): printf(ttt输入姓名:); scanf(%s,temp); printf(tttidt姓名t部门n); for(i=0;icount;i+) if(strcmp(,temp)=0) printf(ttt%dt%st%sn,personi.id,,personi.department); break; case(3): printf(ttt输入id:); scanf(%d,&id); printf(tttidt姓名t部门n); for(i=0;icount;i+) if(personi.id=id) printf(ttt%dt%st%sn,personi.id,,personi.department); break; break; case(4): printf(ttt输入部门:); scanf(%s,temp); printf(tttidt姓名t部门n); for(i=0;inew_person.id) personi=personi-1; i-; personi=new_person; count+; write_file(); if(flag_pause=0) system(pause);/删除员工信息void delete_employee(int id) /员工辞职,退休等时,删除员工信息,数组方式存储的线性表的删除操作 int i; int j; read_file(); /读文件 system(cls); for(i=0;icount;i+) if(personi.id=id) break; for(j=i;jcount;j+) personj=personj+1; count-; write_file(); if(flag_pause=0) system(pause);/修改员工信息void edit_employee(int id) /员工信息有调整时,修改员工信息,涉及 /两个过程:先删除然后插入,刚好调用函数 struct employee someone; system(cls); flag_pause=1; delete_employee(id); printf(t请输入新的员工信息:ntttidt姓名t部门nttt); scanf(%d%s%s,&someone.id,,someone.department); insert_employee(someone); write_file(); flag_pause=0; system(pause);void management_employee() /管理员工信息总函数 int choice; int id; struct employee someone; printf(nttttt员工信息管理n); printf(nt1.输入员工信息t); printf(2.输出员工信息t); printf(3.插入员工信息t); printf(4.修改员工信息t); printf(5.删除员工t); printf(6.返回主菜单n); printf(nt请选择(16):t); start: scanf(%d,&choice); if(choice6) printf(t输入错误,请重输:t); goto start; switch(choice) case(1): input_employee(); break; case(2): output_employee(); break; case(3): printf(ttt插入新员工信息n); printf(ttt请输入员工的:ntttidt姓名t部门n); printf(ttt); scanf(%d%s%s,&someone.id,,someone.department); insert_employee(someone); break; case(4): printf(ttt修改员工信息n); printf(t请输入要修改的员工id:t); scanf(%d,&id); edit_employee(id); break; case(5): printf(ttt删除员工信息n); printf(t请输入要删除的员工id:t); scanf(%d,&id); delete_employee(id); break; case(6): break; 2.5.3考勤管理程序实现/计算日期对应的文件名,相当于哈希函数,以一年内为界,一年以天计算int computer(struct data someday) int i; int days=0; if(someday.month=base_data.month) days=someday.day-base_data.day+1; else for(i=base_data.month+1;isomeday.month;i+) switch(i) case 2: days=days+28; case 3: days=days+31; case 4: days=days+30; case 5: days=days+31; case 6: days=days+30; case 7: days=days+31; case 8: days=days+31; case 9: days=days+30; case 10: days=days+31; case 11: days=days+30; days=days+someday.day; return days;/记录每天每个员工的考勤情况void recorder() int i; int late; int early; int id; int days; char name20; char filename40; /零时存放某一天的考勤文件的文件名 file *fp; /指向某一天的考勤文件的指针 struct date current_date; system(cls); read_file(); printf(ntttt考勤记录n); printf(ntt日期:); scanf(%d%d%d,¤t_date.year,¤t_date.month,¤t_date.day); days=computer(current_date); itoa(days,filename, 10); /int转换成string strcat(filename,.txt); fp=fopen(filename,w); fprintf(fp,%dt%dt%dn,current_data.year,current_data.month,current_data.day); printf(nttidt姓名t迟到t早退n); fprintf(fp,idt姓名t迟到t早退n); for(i=0;icount;i+) /对所有的员工打考勤,并写入对应的文件中 id=personi.id; strcpy(name,); printf(ntt%dt%st,id,name); scanf(%d%d,&late,&early); fprintf(fp,%dt%st%dt%dn,id,name,late,early); fprintf(fp,n); fclose(fp); system(pause);/统计所有员工某段时间的考勤情况,把统计结果输入文件中void statistic() int i; int j; int k=0; int status=0; /标识,用于判断一个从文件中读入的新记录是否在内存中存在,如果不存在则新分配内存, /否则追加在已有的记录上 int begin_page; int end_page; char save; /判断是否保存 char filename40; /零时存放某一天的考勤文件的文件 int year; int month; int day; char id20; char name20; char late20; char early20; file *fp; /指向某一天的考勤文件的指针 struct date begin; /统计的起始日期,最终日期,只能统计连续一段时间的考勤 struct date end; struct statistic temp; /存储零时的 struct statistic stat30; /存储每个员工的迟到,早退次数的信息 for(i=0;i30;i+) stati.early_count=0; stati.late_count=0; system(cls); printf(ttt统计员工考勤n); printf(nt请输入起止日期n); printf(ntt起始日期:); scanf(%d%d%d,&begin.year,&begin.month,&begin.day); printf(ntt终止日期:); scanf(%d%d%d,&end.year,&end.month,&end.day); begin_page=computer(begin); end_page=computer(end); for(i=begin_page;i=end_page;i+) itoa(i,filename, 10); /int转换成string strcat(filename,.txt); fp=fopen(filename,r); fscanf(fp,%d%d%d%s%s%s%s,&year,&month,&day,id,name,late,early); if(i=begin_page) while(!feof(fp) fscanf(fp,%d%s%d%d,&statk.id,,&statk.late_count,&statk.early_count); k+; k-; else while(!feof(fp) fscanf(fp,%d%s%d%d,&temp.id,,&temp.late_count,&temp.early_count); for(j=0;jk;j+) if(temp.id=statj.id) status=1; if(temp.late_count=1) statj.late_count+; if(temp.early_count=1) statj.early_count+; break; if(status=0) statk.id=temp.id; strcpy(,); statk.late_count=temp.late_count; statk.early_count=temp.early_count; k+; status=0; printf(n); fclose(fp); printf(ntt考勤统计n); printf(tidt姓名t迟到次数t早退次数n); for(j=0;jk;j+) printf(t%dt%s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论