考勤管理系统实验报告(附源代码)
- 格式:doc
- 大小:934.00 KB
- 文档页数:55
C#大作业报告--考勤管理系统一、需求分析公司人员上下班考勤情况需要管理,为了简化管理,开发一个电子考勤系统,简化考勤的过程,以及主管人员查看员工的考勤情况。
二、系统模板设计针对不同的用户设计了不同的模板。
主要用户有员工和管理人员。
1.员工员工上下班需要使用系统进行打卡登记。
需要输入自己的员工号,选择上班或者下班。
2.管理人员需要对部门、员工等重要信息进行必要的维护。
比如新增加某个部门,新增员工等操作。
还可以查看各个员工的考情情况,搜索某一个特定员工指定的情况等功能。
三、系统主要流程1.员工:2.管理人员:.四、系统界面和主要源代码1.员工打卡界面:主要代码://根据用户是否存在执行不同的操作if (empName == ""){MessageBox.Show("对不起,该员工号不存在!请重新输入!", "系统提示");}else{//如果用户存在,查看今天有没有签退记录commandText = string.Format("select count(*) from T_Record where EID='{0}' and type=2 and year(RecordTime)=year(getdate()) andmonth(RecordTime)=month(getdate()) and day(RecordTime)=day(getdate())", txtEID.Text);cmd = new SqlCommand(commandText, conn);conn.Open();int ret = Convert.ToInt32(cmd.ExecuteScalar());conn.Close();if (ret > 0){MessageBox.Show("对不起," + empName + ",您已经签退!", "系统提示");}else{//如果没有签退,在系统中记录用户的签退信息commandText = string.Format("insert intoT_Record(EID,Type,IsLate) values('{0}',{1},{2})", txtEID.Text, 2, early);cmd = new SqlCommand(commandText, conn);conn.Open();cmd.ExecuteNonQuery();if (early == 0){MessageBox.Show("再见:" + empName , "系统提示");}else{MessageBox.Show("对不起:" + empName + ",您早退了!", "系统提示");}}}2.管理人员:(1)登录界面:主要代码:private void btnOk_Click(object sender, EventArgs e){string commandText = "select count(*) from T_Operator where OperID=@OperID And Pwd=@Pwd";using (SqlConnection conn = newSqlConnection(SQLDBHelper.ConnectionString)){using (SqlCommand cmd = new SqlCommand(commandText, conn)){SqlParameter[] para = new SqlParameter[]{new SqlParameter("@OperID",txtOperID.Text),new SqlParameter("@Pwd",txtPwd.Text)};cmd.Parameters.AddRange(para);conn.Open();int ret = Convert.ToInt32(cmd.ExecuteScalar());if (ret == 1){MainForm form = new MainForm();form.Show();this.Hide();}else{MessageBox.Show("用户名或密码错误!");}}(2)维护主界面:主要代码:public partial class MainForm : Form{public MainForm(){InitializeComponent();}private void tsbExit_Click(object sender, EventArgs e){Application.Exit();}private void tsbRecord_Click(object sender, EventArgs e){RecordListForm form = new RecordListForm();form.ShowDialog();}private void tsbEmp_Click(object sender, EventArgs e){EmpListForm form = new EmpListForm();form.ShowDialog();}private void tsbDepart_Click(object sender, EventArgs e){DepartListForm form = new DepartListForm();form.ShowDialog();}private void MainForm_FormClosed(object sender, FormClosedEventArgs e) {Application.Exit();}(3)统计查看界面:主要代码:tring commandText = "select d.DName as 部门,r.EID as 职员编号,e.EName as 姓名,r.RecordTime as 记录时间,case when Type=1 then '上班' else '下班' end as '类型'," + " case when ((IsLate=0 and Type=1) or(IsLate=0 and Type=2)) then '正常' when (IsLate=1 and Type=1) then '迟到' else '早退' end as '状态'" +" from T_Record r,T_Employee e,T_Department d where r.EID=e.EID and d.DID=e.DID" + sCon.ToString();using (SqlConnection conn = newSqlConnection(SQLDBHelper.ConnectionString)){using (SqlDataAdapter sda = new SqlDataAdapter(commandText, conn)){DataSet ds = new DataSet();sda.Fill(ds);dgvRecord.DataSource = ds.Tables[0];}}(4)部门维护界面:主要代码:private void修改职员信息ToolStripMenuItem_Click(object sender, EventArgs e) {if (lvDepart.SelectedItems.Count == 0){return;}string did = lvDepart.SelectedItems[0].Text;DepartForm form = new DepartForm(OperType.Modify, did);form.ShowDialog();//刷新数据if (form.DialogResult == System.Windows.Forms.DialogResult.OK){btnQuery_Click(sender, e);}}private void删除职员信息ToolStripMenuItem_Click(object sender, EventArgs e){if (lvDepart.SelectedItems.Count == 0){return;}if (MessageBox.Show("您确实要删除部门编号为" +lvDepart.SelectedItems[0].Text + "的部门信息吗?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes){string commandText = "delete from T_Department where DID=@DID";using (SqlConnection conn = newSqlConnection(SQLDBHelper.ConnectionString)){using (SqlCommand cmd = new SqlCommand(commandText, conn)){cmd.Parameters.Add(new SqlParameter("@DID",lvDepart.SelectedItems[0].Text));conn.Open();try{int ret = cmd.ExecuteNonQuery();if (ret > 0){MessageBox.Show(" 数据删除成功!", "系统提示");//刷新数据btnQuery_Click(sender, e);}else{MessageBox.Show(" 数据删除失败!", "系统提示");}}catch (Exception ex){MessageBox.Show(" 该部门还有职员,请先删除职员信息", "系统提示");}(5)员工维护界面:主要代码:private void修改职员信息ToolStripMenuItem_Click(object sender, EventArgs e) {if (lvEmp.SelectedItems.Count == 0){return;}string eid = lvEmp.SelectedItems[0].Text;EmpForm form = new EmpForm(OperType.Modify, eid);form.ShowDialog();//刷新数据if (form.DialogResult == System.Windows.Forms.DialogResult.OK){btnQuery_Click(sender, e);}}private void删除职员信息ToolStripMenuItem_Click(object sender, EventArgs e){if (lvEmp.SelectedItems.Count == 0){return;}SqlConnection conn = new SqlConnection(SQLDBHelper.ConnectionString);SqlTransaction tran = null;if (MessageBox.Show("您确实要删除员工号为" + lvEmp.SelectedItems[0].Text + "的员工信息吗?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes){try{conn.Open();tran = conn.BeginTransaction();string commandText = "delete from T_Record where EID='" + lvEmp.SelectedItems[0].Text + "'";SqlCommand cmd = new SqlCommand(commandText, conn);cmd.Transaction = tran;cmd.ExecuteNonQuery();commandText = "delete from T_Employee where EID='" + lvEmp.SelectedItems[0].Text + "'";cmd = new SqlCommand(commandText, conn);cmd.Transaction = tran;cmd.ExecuteNonQuery();mit();MessageBox.Show("职员删除成功!", "系统提示");btnQuery_Click(sender, e);}catch (Exception ex){tran.Rollback();MessageBox.Show("职员删除失败,请和系统管理员联系!", "系统提示");}finally{conn.Close();}#region删除的处理,不能处理主键级联删除#endregion}}五、需求分析通过考勤系统的设计和代码的编写,进一步巩固了我对C#的知识,加深了我对C#的认知,也提高了自己的编程水平。
考勤管理系统实验报告实验报告考勤管理系统1. 实验目的本次实验的目的是建立一个考勤管理系统,实现对员工考勤情况的统计和管理。
通过本次实验,我们可以了解到一些基本的软件开发方法和工具,并学会了如何使用这些工具进行项目的开发。
此外,我们还能够进一步学习和掌握数据库的设计和管理等相关的知识,在实践中了解这些知识的实际应用。
2. 实验内容本次实验的主要内容是开发一个基于Web的考勤管理系统,实现对员工考勤情况的统计和管理。
通过该系统,我们可以完成员工的考勤情况录入,统计和查询等功能。
系统的开发主要包括以下几个方面的内容:(1)数据库设计和管理:我们需要根据业务需求和系统功能,设计出合适的数据库结构,并使用MySQL或其它数据库管理工具来管理数据的存储和查询。
(2)后台逻辑处理:我们需要使用Java或其它编程语言开发后台的逻辑处理程序,完成数据的处理和业务逻辑的实现。
(3)Web前端设计和开发:我们需要使用HTML、CSS、JavaScript等Web开发工具,来设计开发出系统的前端界面,实现与用户的交互和数据的展示。
3. 实验步骤(1)系统需求分析首先,我们需要对系统的需求进行分析和明确,明确出系统的功能和使用场景。
在开发之前,我们需要与客户进行充分的沟通和交流,了解用户的需求和使用场景,然后根据需求进行系统规划和设计。
(2)数据库设计和管理在进行数据库设计的时候,我们需要将系统的各个功能和数据表进行明确的划分和设计。
考勤管理系统的数据库中,需要包含员工信息表、考勤记录表、项目信息表等,这些表需要用到不同的数据字段和数据结构。
我们需要在设计时充分考虑到数据的完整性、准确性和安全性等因素,确保系统的数据能够正确地存储和查询。
(3)后台逻辑处理在完成数据库设计之后,我们需要使用Java等编程语言进行后台的逻辑处理程序的编写。
考勤管理系统后台逻辑程序需要实现员工信息录入、考勤记录的生成和统计,以及业务逻辑的处理等功能。
目录第一章信息系统概况 (5)1.1 选题介绍 (5)1.2 课程设计小组基本情况介绍 (6)1.2.1课程设计小组成员的基本情况介绍 (6)1.2.2课程设计小组前期的准备情况 (6)1.2.3课程设计小组各成员所承担的课程设计的任务 (6)第二章信息系统分析 (7)2.1 可行性分析 (7)2.1.1 技术可行性分析 (8)2.1.3 社会因素可行性分析 (9)2.1.4 可行性分析结论 (9)2.2 客户需求分析 (9)2.3 系统分析部分 (12)2.3.1 业务流程图 (12)2.3.2 数据流程图 (12)2.3.3 E-R图 (15)2.3.4 数据字典 (16)第三章信息系统设计 (18)3.1 功能结构图设计 (18)3.2 输入输出设计 (18)3.3 数据库结构设计 (21)3.3.1 概念设计 (21)3.3.1 逻辑结构设计设计 (22)3.4 代码设计 (26)第四章信息系统实施 (27)4.1 源程序 (27)4.1.1 添加用户 (27)4.1.2 修改密码 (28)4.1.3 出差情况 (28)4.1.4 添加部门 (31)4.1.5 部门管理 (33)4.1.6 更新部门 (37)4.1.7 员工考勤登记 (40)4.1.8 请假情况 (64)4.1.9 上班时间设置 (67)4.1.10 上班情况 (69)4.1.11 用户登入 (72)4.1.12 添加员工 (73)4.1.13 员工管理 (78)4.1.14 修改员工 (85)4.1.15 主界面 (90)4.3 模拟运行数据 (95)4.4 系统使用说明书 (99)第五章参考书籍 (101)第一章信息系统概况1.1 选题介绍当今社会,计算机已经十分普及,性能也日趋完善。
它已经被应用于许多领域。
比如说,小到图书馆的图书管理,超市或网吧的收费管理,KTV的点歌系统,大到航空、铁路的售票,全国人口户籍的管理等等。
计算机科学与技术学院考勤管理系统课程设计姓名:夏健&蒯程学号: 1013042029&1013042028专业: 软件工程101指导老师: 陈继红时间:2013.7.1三数据库设计:KQJL (考勤记录):ID 时间类别员工名称考勤时段考勤说明记录人(默认登录人)JQSQ(假期申请):ID 员工名称开始时间结束时间时长假期类别假期原因CHSQ(出差申请):ID 员工名称出差时间出差天数同行人员目的地出行方式出差理由JBSQ(加班申请):ID 员工名称申请时间加班时间加班时长加班原因TXSQ(调休申请):ID 员工名称申请时间调休时间起调休时间终未休时长调休时长调休原因审批人YGXX(员工信息): 姓名密码类型SJZD (数据字典):ID 类型说明具体信息四具体实现与截图说明4.1界面设计登陆界面:验证码出错后的界面:登陆后进入主界面:考勤记录的功能图:说明:用户和时间都是登录人的信息自动添加。
一开始有几个按钮是灰的,当双击表中的某行时才可以触发。
表示修改或者删除表中的记录。
主要流程:界面加载的时候用户可以添加功能。
填写相关信息之后后台读出所有的信息之后插入表中,然后再读到界面的表中。
当用户双击界面中的某行时当前行的信息就读到控件中用户就有了修改删除的功能了。
假期申请的功能截图:其后的出差,加班,调休基本都差不多,只是在一些细节上和表的内容不同而已截图如下:考勤查询是一个比较重要的涉及到多表的查询。
而且涉及的细节也比较多。
界面如下:多表查询涉及到的SQL语句如下:select xingm,qingj,chuc,jiaban,tiaox,chidao,zaotui,loudk,zaohui,zaocao,huiyi from (select xm as xingm from YGXX)n "+"left join ( select xm,sum(CONVERT(float,jqsc)) as qingj from JQSQ whereconvert(smalldatetime,sqsj_start) between convert(smalldatetime,'" + datefrom + "') and convert(smalldatetime,'" + dateto + "') group by JQSQ.xm )a on n.xingm=a.xm " +"left join ( select xm,sum(chts) as chuc from CHSQ where convert(smalldatetime,chsj) between convert(smalldatetime,'" + datefrom + "') and convert(smalldatetime,'" + dateto + "') group by CHSQ.xm )b on n.xingm=b.xm " +"left join ( select xm,sum(txsc) as tiaox from TXSQ where convert(smalldatetime,txsj_start) between convert(smalldatetime,'" + datefrom + "') and convert(smalldatetime,'" + dateto + "') group by TXSQ.xm )c on n.xingm=c.xm " +"left join ( select xm,sum(jbsc) as jiaban from JBSQ where convert(smalldatetime,jbsj) between convert(smalldatetime,'" + datefrom + "') and convert(smalldatetime,'" + dateto + "') group by JBSQ.xm )x on n.xingm=x.xm " +"left join ( select xm,count(*) as chidao from KQJL where kqxx='迟¨´到Ì?' andconvert(smalldatetime,kqsj) between convert(smalldatetime,'" + datefrom + "') andconvert(smalldatetime,'" + dateto + "') group by KQJL.xm )d on n.xingm=d.xm " +providerName="System.Data.SqlClient" /></connectionStrings><appSettings ><add key="connstr" value="Data Source=KUAICHENG-PC\KC;Initial Catalog=kaoqin;Integrated Security=True" /></appSettings></configuration>当点击上面的任意tab标签显示的就是当前行的员工在选择的时间内的具体信息。
宿迁学院三系综合性实验实验报告课程名称软件工程学生所在系部年级2 专业班级学生姓名 任课教师 实验成绩计算机系制实验学期2008至2009 学年第学期计算机系学号员工考勤管理系统通过软件工程综合实验,使学生认识到在软件系统实际开发中运用软件工程方法的意 义,加深对软件工程所学知识的理解,初步掌握进行软件系统开发的基本方法,培养学生分析问题、解决实际问题的能力, 为毕业设计以及将来从事软件项目开发与管理工作打下 定的基础。
、设备与环境操作系统:Win dowsX P/C& 数据库:SQL Server2000。
编程工具:DEK PHI 7编程环境三、实验内容及分析1需求工程 1.1功能需求考勤管理是企业管理中非常重要的一环。
作为公司主管考勤的人员能够通过考勤管理系统 清楚的看到公司员工编号,姓名,部门以及签到时间、签离时间以及是否迟到、早退等诸多信 息。
还能够通过所有员工的出勤记录比较来发现企业管理和员工作业方面的诸多问题。
更是员 工工资及福利待遇方面重要的参考依据。
具体操作流程如下:超级用户登录本系统, 输入用户名和密码,系统进行验证,验证通过的话进入程序主界面, 在主界面对普通用户的信息进行录入, 超级用户需要输入普通用户的部门和编号进行录入, 过系统验证通过后该员工签到成功, 下班签离时超级用户先输入该普通用户的部门和编号,果该员工今天已经签到, 那样签离成功。
同时超级用户可以查询员工所有信息、某段时间内员 工的出勤情况。
本系统是一个可靠性高、可用性强的系统,能够处理基本的功能和非功能故障。
关于用 户信息的安全性和保密性提供了基本保障。
1.2数据流图用户的需求具体表现在对个人信息的提供、编辑、处理和查询上。
这就要求数据库能够满 足各种信息的输入、输出和处理。
通过分析考勤管理系统的实际内容和要求,得到一下数据流实验题目 2009年5月31日、实验目的实验时间 实验地点软件工程实验室图1顶层数据流图M 户痒X卿I 佶思益到霸団倍息 :舉剖尊岛细娱'第肉结累■5^>t ■■営的结梨:i ■ :_■「"T■ --11 = ■別除針I△考動用Kra 贱块■桂®仇I说河紂I 信总超级用戶-杳询箱媒他餌优化后的结构图为:其中编号的具体内容为:1、合格的登录信息2、程序主界面3、签到成功的返回信息4、合格的签到信息5、签离成功的返回信息6、合格的签离信息7、合格的删除条件8、删除成功信息9、合格的查询条件 10、查询结果22数据库设计本系统设计到普通用户, 也就是员工,和超级用户两类用户。
一、实验目的本次实验旨在了解和掌握考勤打卡系统的基本原理、功能设计以及实际操作,通过搭建一个基于STM32微控制器的考勤打卡系统,实现员工考勤信息的自动采集、存储、查询和统计,提高企业或单位的人力资源管理水平。
二、实验环境1. 硬件环境:- STM32F103C8T6微控制器- MFRC522射频卡模块- 0.96寸OLED显示屏- 四个按键- 蜂鸣器- 5V电源- 程序下载器2. 软件环境:- Keil uVision5开发环境- C语言编程- 串口通信三、实验原理1. 考勤打卡系统主要由以下模块组成:- 读写卡模块:用于读取员工射频卡信息,实现员工身份识别。
- 显示模块:用于显示系统状态、员工信息、时间等信息。
- 键盘模块:用于输入管理员指令,实现系统设置和管理。
- 语音模块:用于播放语音提示音,提醒员工打卡。
- 串口通信模块:用于将考勤数据上传至服务器或存储设备。
2. 系统工作流程:- 初始化:设置系统参数,包括读写卡模块、显示屏、按键、蜂鸣器等。
- 身份识别:读取射频卡信息,判断是否为管理员或员工。
- 考勤打卡:根据员工身份,记录上下班时间,并存储到数据库中。
- 数据查询与统计:管理员可通过查询功能查看员工考勤记录,进行数据统计和分析。
四、实验步骤1. 硬件连接:按照实验要求,将STM32微控制器、MFRC522射频卡模块、OLED显示屏、按键、蜂鸣器等硬件连接到开发板上。
2. 软件编程:- 在Keil uVision5开发环境中创建项目,编写C语言程序。
- 编写初始化函数,初始化各个硬件模块。
- 编写读写卡模块程序,实现射频卡信息读取。
- 编写显示模块程序,实现系统状态、员工信息、时间等信息显示。
- 编写键盘模块程序,实现管理员指令输入。
- 编写语音模块程序,实现语音提示音播放。
- 编写串口通信模块程序,实现考勤数据上传或存储。
3. 系统测试:- 将编写好的程序下载到STM32微控制器中。
宿迁学院三系综合性实验实验报告课程名称软件工程实验学期 2008 至 2009 学年第二学期学生所在系部计算机系年级 2 专业班级学生姓名学号任课教师郭红实验成绩计算机系制图1 顶层数据流图图2 0层数据流图1.3 E-R图图3 超级用户E-R图图4 用户E-R图图5 部门E-R图图6 总体E-R2.软件设计2.1 总体设计本系统的初步结构图如下所示:关于图中的标号,分别表示为:a、登录信息b、不合格登录信息c、不合格签到信息d、签到信息e、不合格签离信息f、签离信息g、不合格删除条件h、删除条件i、查询条件 k、不合格查询条件m、合格登录信息 n、程序主界面信息 l、删除成功信息 j、合格删除条件 o、查询结果p、合格查询条件 q、合格签到信息 r、签到成功返回结果 s、签离成功返回结果t、合格签离信息优化后的结构图为:其中编号的具体内容为:1、合格的登录信息2、程序主界面3、签到成功的返回信息4、合格的签到信息5、签离成功的返回信息6、合格的签离信息7、合格的删除条件8、删除成功信息 9、合格的查询条件 10、查询结果2.2 数据库设计本系统设计到普通用户,也就是员工,和超级用户两类用户。
超级用户可以管理员工的签到签离操作,也可以查询员工的个人情况和出勤情况。
员工只需要告诉超级员工自己的部门和编号就可以完成签到和签离操作。
根据实际应用的需要,最大限度的提高系统的性能,本系统涉及5张表,分别是超级用户表、普通用户表、部门表、考勤表和考勤历史表。
2.2.1表结构分别如下:表1 部门表结构名称字段类型为空性备注是否迟到Wlate Bit Not null 1 迟到,0 未迟到是否早退Wearly Bit Not null 1 早退,0 未早退是否缺勤WOut Bit Not null 1 缺勤,0未缺勤2.2.2 这个表之间一定存在这某种相互制约的关系,下图为各表之间的关系图:2.2.3 用到的比较重要的存储过程、触发器以及索引。
学生考勤管理系统源代码HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】#i n c l u d e<i o s t r e a m>#include<cstring>#include<>using namespace std;class time{public:time(int y=0,int m=0,int d=0){year=y;month=m;day=d;}~time(){}protected:int year,month,day;};ettime()+1)==*(st1[j].gettime()+1)&&*(st1[i+1].gettime()+2)==*(st1[j].gettime()+2))if(strcmp(qkn,st1[i].getkechen())==0)renci++;return renci;}class qstu:public xinxi{public:qstu(){qst++;}~qstu(){qst--;}void print(xinxi &st1);int getjs(xinxi st1[],int n,int j);int setjs(int js=0){jieshu=js;}char qstn[20];private:int jieshu;static int qst; etjieci()+2)!='\0')js=+2;elsejs++;for(i=0;i<n;i++)if(*(st1[i+1].gettime()+1)==*(st1[j].gettime()+1)&&*(st1[i+1].gettime()+ 2)==*(st1[j].gettime()+2))if(strcmp(st1[i+1].getname(),qstn)==0){if(*(st1[i].getjieci()+2)!='\0')js=+2;elsejs++;}jieshu=js;return jieshu;}etname(name);cout<<"请输入课程名称"<<endl;cin>>kechen;st1[q].setkechen(kechen);cout<<"请输入缺课日期"<<endl;cin>>y>>m>>d;st1[q].settime(y,m,d);cout<<"请输入缺课类型"<<endl;cin>>queke;st1[q].setqklx(queke);cout<<"请输入缺课节次"<<endl;cin>>jieci;st1[q].setjieci(jieci);cout<<"是否还要继续输入:(y/n)"<<endl;cin>>a;}while(a=='y');return q+1;}void xiugai(xinxi st1[],int n){int k=1,j=0,a[10];int flgh;int h;while(k==1){ cout<<"请输入你要修改缺课记录的学生姓名"<<endl;cin>>name;flgh=0;for(int i=0;i<n;i++)if(strcmp(name,st1[i].getname())==0)do{ a[j]=i;cout<<"1.修改日期 2.修改节次 3.修改课程名称 4.修改缺课类型"<<endl; cout<<"请输入要选择的数值(1,2,3,4)"<<endl;int b;cin>>b;if(b==1){ cout<<"请输入新日期"<<endl;cin>>y>>m>>d;st1[i].settime(y,m,d);}else if(b==2){cout<<"请输入新节次"<<endl;cin>>jieci;st1[i].setjieci(jieci);}else if(b==3){cout<<"请输入新课程名称"<<endl;cin>>kechen;st1[i].setkechen(kechen);}else if(b==4){ cout<<"请输入新缺课类型"<<endl;cin>>queke;st1[i].setqklx(queke);}flgh=1;j++;}while(b<1||b>4);if(flgh==0){cout<<"没有你要找的学生姓名,请重试要退出请按 0"<<endl;cin>>k;}else{cout<<"还要继续吗(1\0)退出请按 0"<<endl;cin>>k;}}for(int i=0;i<j;i++){h=a[i];xiansi(st1[h]);}}void chaxun(xinxi st1[],qstu qt[]){char n='y';int u[10];while(n=='y'){int j=0;cout<<"输入你要查询的学生姓名:"<<endl;cin>>name;int i=0;for(;i<g;i++)if(strcmp(name,st1[i].getname())==0){u[j]=i;j++;}if(j==0){cout<<"没有你所要的学生名字!";ettime()<<"|"<<*(st1[i].gettime()+1)<<"|"<<*(st1[i].gettime()+2)<<"| "<<st1[i].getjieci()<<"| "<<st1[i].getkechen()<<"|"<<st1[i].getqklx()<<"| "<<endl;}ettime()+1)<*(st1[i+1].gettime()+1))qt[i].print(st1[i]);elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2) <*(st1[i+1].gettime()+2))qt[i].print(st1[i]);elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2) ==*(st1[i+1].gettime()+2))if(strcmp(st1[i].getjieci(),st1[i+1].getjieci())==-1)qt[i].print(st1[i]);}cout<<"是否继续查询(y/n)继续请按 y退出按 n"<<endl;cin>>n;}}}etname()<<endl;if(*(st1[0].getjieci()+2)!='\0')js=+2;elsejs++;cout<<"节数:"<<js<<endl;}elseettime()+1)<*(st1[i+1].gettime()+1)){min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2) <*(st1[i+1].gettime()+2)){min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2) ==*(st1[i+1].gettime()+2))d1++;}for(int j=0;j<(g-d1);j++){cout<<*st1[j].gettime()<<*(st1[j].gettime()+1)<<*(st1[j].gettime()+2)<<e ndl;for(i=0;i<k;i++){ setqstn(st1,qt1,g);cout<<"姓名:"<<qt1[i].qstn<<endl;cout<<"节数:"<<qt1[i].getjs(st1,g,i)<<endl;}}etkechen()<<endl;rc++;cout<<"人数:"<<rc<<endl;}else{int i=0;for(;i<g;i++){if(*(st1[i].gettime()+1)<*(st1[i+1].gettime()+1)){min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2) <*(st1[i+1].gettime()+2)){min=st1[i];st1[i]=st1[i+1];st1[i+1]=st1[i];}elseif(*(st1[i].gettime()+1)==*(st1[i+1].gettime()+1)&&*(st1[i].gettime()+2) ==*(st1[i+1].gettime()+2))d1++;}for(int j=0;j<(g-d1);j++){cout<<*st1[j].gettime()<<*(st1[j].gettime()+1)<<*(st1[j].gettime()+2)<<e ndl;for(i=0;i<b;i++){ setqkn(st1,qk1,g);cout<<"课程名:"<<qk1[i].qkn<<endl;cout<<"人数:"<<qk1[i].getrc(st1,g,i)<<endl;}}}}void xiansi(xinxi &st1){cout<<"|缺课日期 |"<<"第几节课 |"<<"课程名称 |"<<"学生姓名 |"<<"缺课类型|"<<endl;cout<<"|"<<*())<<"|"<<*()+1)<<*()+2)<<"|"<<()<<"|"<<()<<"|"<<()<<"|"<<()<<"|"<<endl;}stn,st1[i].getname());else if(strcmp(st1[i].getname(),st1[i+1].getname())!=0){strcpy(qt1[i].qstn,st1[i].getname());k++;}kn,st1[i].getkechen());else if(strcmp(st1[i].getkechen(),st1[i+1].getkechen())!=0) {strcpy(qk[i].qkn,st1[i+1].getkechen());b++;}}}。
目录第一章信息系统概况 (3)1.1 选题介绍 (3)1.2 课程设计小组基本情况介绍.................... 错误!未定义书签。
1.2.1课程设计小组成员的基本情况介绍........ 错误!未定义书签。
1.2.2课程设计小组前期的准备情况............ 错误!未定义书签。
1.2.3课程设计小组各成员所承担的课程设计的任务.. 错误!未定义书签。
第二章信息系统分析 (4)2.1 可行性分析 (4)2.1.1 技术可行性分析 (4)2.1.3 社会因素可行性分析 (5)2.1.4 可行性分析结论 (5)2.2 客户需求分析 (5)2.3 系统分析部分 (7)2.3.1 业务流程图 (7)2.3.2 数据流程图 (7)2.3.3 E-R图 (9)2.3.4 数据字典 (10)第三章信息系统设计 (12)3.1 功能结构图设计 (12)3.2 输入输出设计 (12)3.3 数据库结构设计 (13)3.3.1 概念设计 (13)3.3.1 逻辑结构设计设计 (14)3.4 代码设计 (16)第四章信息系统实施 (17)4.1 源程序 (17)4.1.1 添加用户 (17)4.1.2 修改密码 (17)4.1.3 出差情况 (17)4.1.4 添加部门 (19)4.1.5 部门管理 (20)4.1.6 更新部门 (22)4.1.7 员工考勤登记 (23)4.1.8 请假情况 (35)4.1.9 上班时间设置 (36)4.1.10 上班情况 (37)4.1.11 用户登入 (39)4.1.12 添加员工 (39)4.1.13 员工管理 (42)4.1.14 修改员工 (45)4.1.15 主界面 (47)4.3 模拟运行数据 (50)4.4 系统使用说明书 (54)第五章参考书籍 (55)第一章信息系统概况1.1 选题介绍当今社会,计算机已经十分普及,性能也日趋完善。
它已经被应用于许多领域。
比如说,小到图书馆的图书管理,超市或网吧的收费管理,KTV的点歌系统,大到航空、铁路的售票,全国人口户籍的管理等等。
随着现代科技的进步,用计算机来进行考勤的管理也成为现代化企业运作必不可少的一部分。
在过去我们的考勤工作都是人工完成的,不仅浪费了很多的人力跟物力,而且无法保证其准确性和透明度,给企业的管理带来了许多的不便。
现在利用计算机来管理我们的考勤工作,大大降低了工作人员的工作量,提高了工作效率,使原本复杂和枯燥无味的工作变得简单而轻松了,而且也实用、安全。
计算机技术特别是数据库技术的发展为企业建立管理信息系统,甚至对改变管理思想起着不可估量的作用。
实践证明信息技术已在企业的管理层面扮演越来越重要的角色。
通过考勤系统我们能很容易地对公司员工的信息有一个基本的了解,可以很方便地知道员工的出勤情况,通过对员工出勤信息的了解,就能计算出员工的实际工资。
一切的统计和计算都由计算机代为管理了,考勤信息管理系统对企业的合理化管理起到了很大的作用,它为企业信息化的建设打响了头炮,而企业的信息化建设已成为现代各个企业发展的需要。
所以说,考勤管理系统的开发具有非常重要的意义。
第二章信息系统分析2.1 可行性分析目前,计算机在我国的考勤管理工作中,主要可用来进行报表处理,档案管理,文书编辑,信息查询,综合分析。
查询统计作为考勤管理的一个重要组成部分,是通过对考勤情况的调查,整理和分析,了解考勤情况的发展趋势,为各级领导机关制定考出勤的方针,政策,加强干部管理,改革干部制度提供准确数字的依据。
其工作除涉及到干部的基本情况统计之外,还包括职工的工资统计,职工的考勤情况统计,职工的奖惩情况统计,职工的出差情况统计,职工的请假情况统计等方面,其涉及的面之广,数据量之大可想而知,若利用手工进行考勤的统计工作,大致要经过考勤统计查询,考勤的统计资料的整理,考勤统计分析三个过程,但这种手工统计过程,存在着几个明显的问题,比如说统计资料缺乏准确性,及时性,需要花费大量的人力,物力,财力等。
手工方法所表现出来的种种劣势,使人们慢慢意识到管理现代化已成为当代社会发展的一股不可抗拒的洪流。
在管理现代化的浪潮中,考勤管理现代化也势在必行。
实现考勤管理现代化是一个复杂的系统工程,需要采取科学的管理方法和先进的科技手段。
科学的管理方法在管理中一般是指数学方法、系统方法、信息方法、控制论方法、社会学方法、心理学方法等科学方法,而先进的科技手段主要是运用当代最新科学技术之一的电子计算机来为考勤管理现代化服务。
而且一个完善的考勤系统应做到以下几点:•提高了考勤管理效率,减轻劳动强度;•提高信息处理速度和准确性;•为考勤负责人提供更方便、科学的服务项目2.1.1 技术可行性分析系统开发环境: Windows xp sp3 + vs2005 + sqlserver2000技术已经比较成熟,和其他应用开发语言比起来有很大的优势,所以利用这些技术是完全可以完成这些功能的。
同时由于逻辑不是太复杂,估计可以按时完成此项目。
考勤管理系统是工作主要是在职工和管理都有之间架起一座桥梁,能相互沟通信息和处理信息。
这一特点非常适合计算机特点,通过网络internet技术,发挥计算机的信息传输速度快、准确度高的优势。
计算机硬件和软件技术的飞速发展,为系统的建议提供了技术条件。
2.1.2 经济可行性分析(1) 支出A、在基建投资上,只需要配置一台DELL服务器,大概2万左右;B、软件设计和开发费用:2.5万元C、经常性指出:(主要是指软件的维护费用)(2) 收益进一步实现办公自动化,减少人力投资和办公费用,极大提高办公效率,同时更好地控制考勤制度,降低成本。
(3) 投资回收周期根据经验算法,收益的累计数开始超过支出的累计数的时间为1年。
2.1.3 社会因素可行性分析对所建议系统的社会因素方面的可行性分析:(1)法律可行性新系统的研制和开发,所有软件都选用正版,将不会侵犯他、集体和国家的利益,不会违反国家政策和法律。
(2)使用方面的可行性由于新系统的客户端只要求用浏览器,管理者与人员完全有能力使用此系统,并且新系统的研制和开发是充分考虑工作人员对考勤的易于管理,提高工作效率,界面友好,操作简单方便,能完全满足职工的使用要求。
对传统管理理念的冲击,可能引起管理层的变动和人员调整。
对于企业管理人员的要求提高,使企业在一定的可能下进行机构精简,迫使工作人员继续学习新知识,拓宽企业在市场竞争环境下的生存空间。
对于企业的管理者与职工之间管理方式的转变和扩充。
2.1.4 可行性分析结论结论意见:经上述可行性分析,系统研制和开发可以立即开始进行2.2 客户需求分析考勤系统应该便于管理者的查询、修改、更新、统计以及高层管理人员的查询等操作。
能从整体上体现去每个员工每日,每月的出勤情况。
基本信息管理包括节假日日期设置、部门信息管理和员工信息管理。
(1) 主要功能a.员工考勤签到:员工每天上班时需要登陆系统进行签到,如果当天已经签到了,则不执行重复操作!考勤签退:员工每天下班时需要登陆系统进行签退,如果当天还没有签过到,则不执行签退操作,如果当天还没有到下班时间,也不执行签退操作!节假日查看:员工可以登录查看节假日加班安排系统管理:修改自己的密码, 查看系统简介.b.管理员员工信息管理:管理员登陆系统后可以添加新的员工信息,可以对现有员工的信息进行修改和查询!可以删除某些员工信息,当删除员工信息时同时将删除他们的考勤信息职位类别及上下班时间管理:不同的职位类别拥有不同的上下班时间,管理员可以添加新的职位类别,修改已经存在的职位类别的名称和上下班时间, 部门信息管理:管理员可以添加和删除部门信息,当部门下面存在员工信息时不执行删除操作.系统管理:修改自己的登陆密码,查看系统简介。
节假日管理:节假日的设置和查看;(2) 特点实现了管理员和员工登陆信息的自动判断!根据不同的身份显示不同的功能菜单。
程序使用三层架构思想,采用完全面向对象的思想方法设计。
系统在进行相关操作如删除员工信息时使用了存储过程。
(3) 数据输入:通过登录系统输入职工上班下班,以及请假、出差等信息。
输出:职工考勤情况。
(用户对相关职工的查询结果和报表)(4) 安全保密系统对不同权限的用户提供不同的功能模块,对历史数据的更改和新数据的添加只有一定权限的用户才能操作,一般用户只能进行查询操作。
对数据库的关键数据应要求保密。
系统默认管理员登陆信息: 帐号admin 密码admin2.3 系统分析部分2.3.1 业务流程图图2-1 业务流程图2.3.2 数据流程图图2-2 顶层数据流程图图2-3 一层数据流程图2.3.3 E-R 图图2-5 E-R 图2.3.4 数据字典第三章信息系统设计3.1 功能结构图设计图3-1 功能结构图3.2 输入输出设计表3-3 员工下班表3-4 修改密码表3-5 申请请假表3-6 申请出差表3-7 员工添加表3-8 部门添加表3-9 上下班时间设定3.3 数据库结构设计3.3.1 概念设计数据库一般分为三级模式:外模式、概念模式和内模式。
在这里我们将要设计的是数据库的概念模式。
通过对职工出勤管理系统的内容和数据流程分析及E-R图,设计如下数据项和数据结构:1.部门信息。
包括部门编号、部门名称、部门人数等。
2.超级用户信息。
包括用户名、密码、姓名、性别、出生日期、籍贯等。
3.普通用户信息。
包括编号、部门名称、姓名、性别、出生日期、籍贯等信息。
4.考勤信息。
包括序列号、编号、签到时间、签离时间等信息。
5.员工状态。
包括员工请假、出差、早退、迟到、上班。
6.考勤历史信息。
包括记录号、编号、日期、签到时间、签离时间、迟到、缺勤、早退等信息。
7.用户信息。
包括用户名称、密码、所在单位、用户权限信息、操作员、最后修改时间。
3.3.1 逻辑结构设计设计根据职工考勤管理系统的功能要求,选取SQLServer 2000作为后台数据库。
在上面的实体和实体之间的E-R图设计基础上,将ER图转化为关系模型,形成数据库中的表格及表格之间的关系。
该数据库由5个表组成,部门表、超级用户表、用户表、考勤表、考勤历史表。
分别如下表所示:表3-11部门表表3-14 用户表表3-16 上班时间表表3-17 上班类型表3.4 代码设计部门代号为两位数,按照创建时间早晚排行。
例如:生产部为第七个创建的部门,所以他的编号为07。
员工ID一共分成6位,前两位表示部门代号,中间两位表示进入部门年份,后两位表示员工编号。
例如:娄京兆是2013年生产部招收的第一位员工,那么他的ID就是071301。
上班类型代号为一位数,按照上班类型分为五类,0:正常上班1:请假2:出差3:早退4:迟到。
第四章信息系统实施4.1 源程序4.1.1 添加用户Dim m_clsUser As clsUserPrivate Sub cmdReg_Click()Set m_clsUser = New clsUserm_clsUser.DoAddUser txtUserName, txtPassword, txtPasswordConfirm, txtRealName, comboPermission, txtRegTime, frmAddUserEnd SubPrivate Sub Form_Load()comboPermission.AddItem "管理员", 0comboPermission.AddItem "普通用户", 1comboPermission.ListIndex = 0End SubPrivate Sub cmdClose_Click()Unload MeEnd Sub4.1.2 修改密码Dim m_clsUser As clsUserPrivate Sub cmdChPwdOk_Click()Set m_clsUser = New clsUserm_clsUser.DoChPwd txtChUser, txtOldPwd, txtNewPwd, txtNewPwdagain, frmChPwdEnd SubPrivate Sub Form_Load()End SubPrivate Sub cmdChPwdCancel_Click()Unload MeEnd Sub4.1.3 出差情况Dim strSql As StringDim rs As New RecordsetPrivate Sub cboDept_Click()cboName.ClearstrSql = "Select * from TWorker where departmentId=" &cboDept.ItemData(cboDept.ListIndex) & " order by workerId"Set rs = TransactSQL(strSql)Do While Not rs.EOFcboName.AddItem (rs.Fields(2).Value)cboName.ItemData(cboName.NewIndex) = rs.Fields(1).Valuers.MoveNextLooprs.ClosecboName.ListIndex = 0cboName.RefreshEnd SubPrivate Sub cmdPrint_Click()Set drChuChai.DataSource = adodcChuChai.RecordsetdrChuChai.Sections(1).Controls(1).Caption = "请假情况统计表"drChuChai.Sections(2).Controls(1).Caption = "部门名称"drChuChai.Sections(2).Controls(2).Caption = "员工名称"drChuChai.Sections(2).Controls(3).Caption = "出差时间"drChuChai.Sections(2).Controls(4).Caption = "出差地点"drChuChai.Sections(2).Controls(5).Caption = "出差天数"drChuChai.Sections(2).Controls(6).Caption = "登记时间"drChuChai.Sections(2).Controls(7).Caption = "销差时间"drChuChai.Sections(2).Controls(8).Caption = "出差备注"drChuChai.Sections(3).Controls(1).DataField = "部门名称"drChuChai.Sections(3).Controls(2).DataField = "员工名称"drChuChai.Sections(3).Controls(3).DataField = "出差时间"drChuChai.Sections(3).Controls(4).DataField = "出差地点"drChuChai.Sections(3).Controls(5).DataField = "出差天数"drChuChai.Sections(3).Controls(6).DataField = "登记时间"drChuChai.Sections(3).Controls(7).DataField = "销差时间"drChuChai.Sections(3).Controls(8).DataField = "出差备注"drChuChai.ShowEnd SubPrivate Sub cmdQuery_Click()strSql = "select a.departmentName as 部门名称,b.workerName as 员工名称,Time as 出差时间,Area as 出差地点,Length as 出差天数,c.dcTime as 登记时间,c.xcTime as 销差时间,Content as 出差备注from TDepartment a, TWorker b,TChuChai c where b.departmentId=" &cboDept.ItemData(cboDept.ListIndex) & "and b.workerId=" &cboName.ItemData(cboName.ListIndex) & " and a.departmentId=b.departmentId and b.departmentId=c.departmentId and b.workerId =c.workerId and Time between #" & dtpStartDate & "# and #" & dtpEndDate & "# "ConnectToDBRefushDataGrid adodcChuChai, dgChuChai, strSqlDisConnectEnd SubPrivate Sub Form_Load()strSql = "Select * from TDepartment order by departmentId"Set rs = TransactSQL(strSql)Do While Not rs.EOFcboDept.AddItem (rs.Fields(1).Value)cboDept.ItemData(cboDept.NewIndex) = rs.Fields(0).Valuers.MoveNextLooprs.ClosecboDept.ListIndex = 0cboDept.RefreshEnd Sub4.1.4 添加部门Dim departId As IntegerDim departName As StringIf txtbmName.Text = "" ThenMsgBox "部门名称不能有空值"Exit SubElsedepartId = Trim(txtaddbmId.Text)departName = Trim(txtbmName.Text)strSql = "insert into TDepartment (departmentId,departmentName) values(" _ & departId & ",'" & departName & "')"TransactSQL (strSql)MsgBox "添加成功"End IfEnd SubPublic Sub init()txtbmName.Text = ""num = 0strSql = "select * from TDepartment order by departmentId"Set rs = TransactSQL(strSql)If Not rs.EOF And Not rs.BOF Thenrs.MoveLastnum = rs(0)num = num + 1Me.txtaddbmId.Text = CStr(num)ElseMe.txtaddbmId.Text = 1End IfEnd SubPrivate Sub cmdreadd_Click()Call initEnd SubPrivate Sub Form_Load()num = 0strSql = "select * from TDepartment order by departmentId"Set rs = TransactSQL(strSql)If Not rs.EOF And Not rs.BOF Thenrs.MoveLastnum = rs(0)num = num + 1Me.txtaddbmId.Text = CStr(num)ElseMe.txtaddbmId.Text = 1End IfEnd Sub4.1.5 部门管理Dim strSql As StringDim RowNumber As IntegerPrivate Sub cmdadd_Click()frmDepAdd.Show vbModalEnd SubPrivate Sub cmddel_Click()If ConnectToDB() = False ThenMsgBox "数据库连接失败!"Exit SubEnd IfIf MsgBox("你真的要删除吗", vbInformation + vbYesNo, App.Title) = vbYes ThenstrSql = "delete from TDepartment where departmentId =" & RowNumberTransactSQL (strSql)DisConnectMsgBox "删除成功", vbInformation, App.TitlestrSql = "select departmentId as 部门编号, departmentName as 部门名称from TDepartment"RefreshData adodcDepManage, dgDepManage, strSqlExit SubEnd IfEnd SubPrivate Sub cmdUpdate_Click()If RowNumber = -1 ThenMsgBox "请先选择要修改的数据!"Exit SubEnd IffrmDepUpdate.Show vbModalEnd SubPrivate Sub Comselect_Click()Dim m_txtdepartID As StringDim m_txtdepartName As Stringm_txtdepartID = Trim(txtDepartId.Text)m_txtdepartName = Trim(txtDepartName.Text)If (m_txtdepartID = "" And m_txtdepartName = "") ThenstrSql = "select departmentId as 部门编号, departmentName as 部门名称from TDepartment"ElseIf (m_txtdepartID <> "" And m_txtdepartName <> "") ThenstrSql = "select departmentId as 部门编号, departmentName as 部门名称" _& " from TDepartment where departmentId =" &m_txtdepartID & " and departmentName like '%" & m_txtdepartName & "%'"ElseIf (m_txtdepartID <> "") ThenstrSql = "select departmentId as 部门编号, departmentName as 部门名称from TDepartment where departmentId =" & m_txtdepartIDElseIf m_txtdepartName <> "" ThenstrSql = "select departmentId as 部门编号, departmentName as 部门名称" _& "from TDepartment where departmentName like '%" &m_txtdepartName & "%'"End IfRefreshData adodcDepManage, dgDepManage, strSqlEnd SubPrivate Sub dgDepManage_Click()On Error GoTo ShowErr:If IsNull(dgDepManage.Bookmark) ThenRowNumber = -1Exit SubElseRowNumber =dgDepManage.Columns("0").CellValue(dgDepManage.Bookmark)End IffrmDepUpdate.SetRowNumber RowNumberShowErr:Exit SubEnd SubPrivate Sub dgDepManage_DblClick()On Error GoTo ShowErr:If IsNull(dgDepManage.Bookmark) ThenRowNumber = -1Exit SubElseRowNumber =dgDepManage.Columns("0").CellValue(dgDepManage.Bookmark)End IffrmDepUpdate.SetRowNumber RowNumberfrmDepUpdate.Show vbModalShowErr:Exit SubEnd SubPrivate Sub Form_Load()RowNumber = -1End Sub4.1.6 更新部门Option ExplicitDim strSql As StringDim rsDep As New ADODB.RecordsetDim m_irownumber As IntegerDim m_iDepartId As IntegerDim m_strDepartName As StringPrivate Sub cmdOk_Click()If txtDepartName.Text = "" ThenMsgBox "登记项目不能有空值"Exit SubElsem_iDepartId = CInt(txtDepartId.Text)m_strDepartName = Trim(txtDepartName.Text)strSql = "update TDepartment set departmentName='" & m_strDepartName & "' where departmentId=" & m_iDepartIdIf ConnectToDB() = False ThenMsgBox "数据库连接失败!"Exit SubEnd IfTransactSQL (strSql)MsgBox "修改成功"cmdok.Enabled = FalseDisConnectstrSql = "select departmentId as 部门编号, departmentName as 部门名称from TDepartment"RefreshData frmDepManage.adodcDepManage, frmDepManage.dgDepManage, strSqlEnd IfEnd SubPrivate Sub Form_Load()m_iDepartId = GetRowNumberIf ConnectToDB() = False ThenMsgBox "数据库连接失败!"Exit SubEnd IfstrSql = "select * from TDepartment where departmentId=" & m_iDepartIdSet rsDep = TransactSQL(strSql)txtDepartId.Text = rsDep.Fields(0)txtDepartId.RefreshtxtDepartName.Text = rsDep.Fields(1)txtDepartName.RefreshtxtDepartId.Enabled = FalseDisConnectEnd SubPublic Function SetRowNumber(ByVal p_irownumber As Integer) m_irownumber = p_irownumberEnd FunctionPublic Function GetRowNumber() As IntegerGetRowNumber = m_irownumberEnd Function4.1.7 员工考勤登记Dim strSql As StringDim rs As New ADODB.RecordsetDim today As StringDim qjLength As DoubleDim qjTime As StringDim djTime As StringDim qjReason As StringDim ccLength As DoubleDim ccTime As StringDim dcTime As StringDim ccArea As StringDim ccContent As StringDim nowtime As StringPrivate Sub cboDept_Click()cboName.ClearstrSql = "Select * from TWorker where departmentId=" &cboDept.ItemData(cboDept.ListIndex) & " order by workerId"Set rs = TransactSQL(strSql)Do While Not rs.EOFcboName.AddItem (rs.Fields(2).Value)cboName.ItemData(cboName.NewIndex) = rs.Fields(1).Valuers.MoveNextLooprs.ClosecboName.ListIndex = 0cboName.RefreshEnd SubPrivate Sub cboYourDepCC_Click()cboYourNameCC.ClearstrSql = "Select * from TWorker where departmentId=" & cboYourDepCC.ItemData(cboYourDepCC.ListIndex) & " order by workerId"Set rs = TransactSQL(strSql)Do While Not rs.EOFcboYourNameCC.AddItem (rs.Fields(2).Value)cboYourNameCC.ItemData(cboYourNameCC.NewIndex) = rs.Fields(1).Valuers.MoveNextLooprs.ClosecboYourNameCC.ListIndex = 0cboYourNameCC.RefreshEnd SubPrivate Sub cboYourDepQJ_Click()cboYourNameQJ.ClearstrSql = "Select * from TWorker where departmentId=" & cboYourDepQJ.ItemData(cboYourDepQJ.ListIndex) & " order by workerId"Set rs = TransactSQL(strSql)Do While Not rs.EOFcboYourNameQJ.AddItem (rs.Fields(2).Value)cboYourNameQJ.ItemData(cboYourNameQJ.NewIndex) =rs.Fields(1).Valuers.MoveNextLooprs.ClosecboYourNameQJ.ListIndex = 0cboYourNameQJ.RefreshEnd SubPrivate Sub cmdOk_Click()Dim psw As StringDim worktype As IntegerDim workerPsw As StringDim pwdCount As IntegerpwdCount = 0Dim departId As IntegerDim workerId As IntegerdepartId = cboDept.ItemData(cboDept.ListIndex)workerId = cboName.ItemData(cboName.ListIndex)strSql = "select workerPsw from TWorker where departmentId=" & departId & " and workerId=" & workerIdSet rs = TransactSQL(strSql)If rs.EOF = False ThenworkerPsw = rs.Fields(0)End IfIf Frame1.Visible = True ThenIf optmstart.Value = True ThenIf MsgBox("确定要" & optmstart.Caption & "么?", vbOKCancel) = vbOK Thenpsw = InputBox("请输入员工密码:", "输入密码")If yanzhengPWD(labwelcome, psw, workerPsw) = False ThenExit Sublabwelcome.Visible = FalseElseCall getTimeIf DateDiff("s", nowtime, mstart) >= 0 Thenworktype = 6Elseworktype = 4End IfIf yanzheng(departId, workerId, today) ThenMsgBox "你已经上班,不必再登记!"ElsestrSql = "insert into TShangBan (departmentId,workerId,workday,mstartTime,workmsType) " & _"values(" & departId & "," & workerId & ",#" & today & "# ,#" & nowtime & "#," & worktype & ")"TransactSQL (strSql)cmdok.Enabled = Falselabwelcome.Visible = Truelabwelcome.Caption = "欢迎" & cboName.Text & optmstart.Caption & ",祝你今天上午工作愉快!"MsgBox "登记成功!"End IfEnd IfElseMsgBox "不登记"End IfElseIf MsgBox("确定要" & optmleave.Caption & "么?", vbOKCancel) = vbOK Thenpsw = InputBox("请输入员工密码:", "输入密码")If yanzhengPWD(labwelcome, psw, workerPsw) = False ThenExit Sublabwelcome.Visible = FalseElseCall getTimeIf DateDiff("s", nowtime, mleave) <= 0 Thenworktype = 6Elseworktype = 3End IfIf yanzheng(departId, workerId, today) ThenIf mlrecord(departId, workerId, today) ThenstrSql = "update TShangBan set workmlType =" & worktype & ", mleaveTime ='" & nowtime & "' where departmentId =" & departId & " and workerId =" & workerId & " and workday=#" & today & "#"TransactSQL (strSql)cmdok.Enabled = Falselabwelcome.Visible = Truelabwelcome.Caption = "" & cboName.Text & optmleave.Caption & ",祝你生活幸福!"MsgBox "登记成功!"ElseMsgBox "你已经下班,不必再登记!"End IfElseMsgBox "对不起,你还没有上班,请先上班!", vbOKOnly + vbExclamation, "请遵守公司上下班秩序"End IfEnd IfElseMsgBox "不登记"End IfEnd IfElseIf optastart(0).Value = True ThenIf MsgBox("确定要" & optastart(0).Caption & "么?", vbOKCancel) = vbOK Thenpsw = InputBox("请输入员工密码:", "输入密码")If yanzhengPWD(labwelcome, psw, workerPsw) = False ThenExit Sublabwelcome.Visible = FalseElseCall getTimeIf DateDiff("s", nowtime, astart) >= 0 Thenworktype = 6Elseworktype = 4End IfIf yanzheng(departId, workerId, today) ThenIf asrecord(departId, workerId, today) ThenstrSql = "update TShangBan set workasType =" & worktype & ", astartTime ='" & nowtime & "' where departmentId =" & departId & " and workerId =" & workerId & " and workday=#" & today & "#"TransactSQL (strSql)cmdok.Enabled = Falselabwelcome.Visible = Truelabwelcome.Caption = "" & cboName.Text & optastart(0).Caption & ",祝你今天下午工作愉快!"MsgBox "登记成功!"ElseMsgBox "你已经上班,不必再登记!"End IfElsestrSql = "insert into TShangBan (departmentId,workerId,workday,astartTime,workasType) " & _"values(" & departId & "," & workerId & ",'" & today & "','" & nowtime & "'," & worktype & ")"TransactSQL (strSql)cmdok.Enabled = Falselabwelcome.Visible = Truelabwelcome.Caption = "欢迎" & cboName.Text & optastart(0).Caption & ",祝你今天下午工作愉快!"MsgBox "登记成功!"End IfEnd IfElseMsgBox "不登记"End IfElseIf MsgBox("确定要" & optaleave(1).Caption & "么?", vbOKCancel) = vbOK Thenpsw = InputBox("请输入员工密码:", "输入密码")If yanzhengPWD(labwelcome, psw, workerPsw) = False ThenExit Sublabwelcome.Visible = FalseElseCall getTimeIf DateDiff("s", nowtime, aleave) <= 0 Thenworktype = 6Elseworktype = 3End IfIf yanzheng(departId, workerId, today) ThenIf alrecord(departId, workerId, today) ThenstrSql = "update TShangBan set workalType =" & worktype & ", aleaveTime ='" & nowtime & "' where departmentId =" & departId & " and workerId =" & workerId & " and workday=#" & today & "#"TransactSQL (strSql)cmdok.Enabled = Falselabwelcome.Visible = Truelabwelcome.Caption = "" & cboName.Text & optaleave(1).Caption & ",祝你生活幸福!"MsgBox "登记成功!"ElseMsgBox "你已经下班,不必再登记!"End IfElseMsgBox "对不起,你还没有上班,请先上班!", vbOKOnly + vbExclamation, "请遵守公司上下班秩序"End IfEnd IfElseMsgBox "不登记"End IfEnd IfEnd IfEnd SubPrivate Sub cmdOKCC_Click()Dim departId As IntegerDim workerId As IntegerdepartId = cboYourDepCC.ItemData(cboYourDepCC.ListIndex)workerId = cboYourNameCC.ItemData(cboYourNameCC.ListIndex)If txtccTime.Text = "" Or txtccLength.Text = "" Or txtccArea.Text = "" Or txtccContent.Text = "" ThenMsgBox "登记项目不能有空值"Exit SubElseIf IsDate(txtccTime.Text) = False ThenMsgBox "时间格式不对!"yTimeCC.Visible = TrueyTimeCC.Caption = "时间格式:" & Now()Exit SubElseyTimeCC.Caption = ""yTimeCC.Visible = FalseccArea = Trim(txtccArea.Text)ccContent = Trim(txtccContent.Text)strSql = "insert into TChuChai(departmentId,workerId,ccTime,ccArea,ccLength,dcTime,ccContent) values(" _& departId & "," & workerId & ",'" & ccTime & "','" & ccArea & "'," & ccLength & ",'" & dcTime & "','" & ccContent & "')"TransactSQL (strSql)MsgBox "登记成功"End IfEnd SubPrivate Sub cmdOKQJ_Click()Dim departId As IntegerDim workerId As IntegerdepartId = cboYourDepQJ.ItemData(cboYourDepQJ.ListIndex)workerId = cboYourNameQJ.ItemData(cboYourNameQJ.ListIndex)If txtqjTime.Text = "" Or txtqjLength.Text = "" Or txtqjReason.Text = "" Then MsgBox "登记项目不能有空值"Exit SubElseIf IsDate(txtqjTime) = False ThenMsgBox "时间格式不对!"yTime.Visible = TrueyTime.Caption = "时间格式:" & Now()Exit SubElseyTime.Visible = FalseqjReason = Trim(txtqjReason.Text)strSql = "insert into TQingJia(departmentId,workerId,qjTime,qjLength,djTime,qjReason) values(" _& departId & "," & workerId & ",'" & qjTime & "'," & qjLength & ",'" & djTime & "','" & qjReason & "')"TransactSQL (strSql)MsgBox "登记成功"End IfEnd SubPrivate Sub cmdokUserLogin_Click()Dim m_clsUser As clsUserDim p_enumUserLogin As USERLOGINSet m_clsUser = New clsUserp_enumUserLogin = m_clsUser.DoUserLogin(Trim(txtUserName.Text), Trim(txtPassword.Text), frmUserLogin)If p_enumUserLogin = LOGERROR ThenExit SubElseIf p_enumUserLogin = LOGSUPER ThenUnload frmNormalUserMainMDIfrmAdminMain.ShowElseIf p_enumUserLogin = LOGNORMAL ThenUnload MDIfrmAdminMainfrmNormalUserMain.ShowEnd IfEnd SubPrivate Sub Form_Load()Dim nowtime As Stringlabwelcome.Visible = Falsenowtime = Time()If Hour(nowtime) < 13 ThenFrame1.Visible = TrueFrame2.Visible = FalseElseFrame1.Visible = FalseFrame2.Visible = TrueEnd IfstrSql = "Select * from TDepartment order by departmentId"Set rs = TransactSQL(strSql)Do While Not rs.EOFcboDept.AddItem (rs.Fields(1).Value)cboDept.ItemData(cboDept.NewIndex) = rs.Fields(0).ValuecboYourDepQJ.AddItem (rs.Fields(1).Value)cboYourDepQJ.ItemData(cboYourDepQJ.NewIndex) =rs.Fields(0).ValuecboYourDepCC.AddItem (rs.Fields(1).Value)cboYourDepCC.ItemData(cboYourDepCC.NewIndex) =rs.Fields(0).Valuers.MoveNextLooprs.ClosecboDept.ListIndex = 0cboYourDepQJ.ListIndex = 0cboYourDepCC.ListIndex = 0cboDept.RefreshcboYourDepQJ.RefreshcboYourDepCC.RefreshtxtqjTime.Text = Now()labdjTime.Caption = ""yTime.Visible = FalsetxtccTime.Text = Now()labdcTime.Caption = ""yTimeCC.Caption = ""yTimeCC.Visible = FalseEnd SubPrivate Sub Form_Unload(Cancel As Integer)Unload frmUserLoginEnd SubPublic Function mlrecord(cdepartId As Integer, cworkerId As Integer, ctoday As String) As BooleanstrSql = "select workmlType from TShangBan where departmentId =" & cdepartId & " and workerId =" & cworkerId & " and workday=#" & ctoday & "#"Set rs = TransactSQL(strSql)If rs.Fields(0).Value = 0 Thenmlrecord = TrueElsemlrecord = FalseEnd Ifrs.CloseEnd FunctionPublic Function asrecord(cdepartId As Integer, cworkerId As Integer, ctoday As String) As BooleanstrSql = "select workasType from TShangBan where departmentId =" & cdepartId & " and workerId =" & cworkerId & " and workday=#" & ctoday & "#"Set rs = TransactSQL(strSql)If rs.Fields(0).Value = 0 Thenasrecord = TrueElseasrecord = FalseEnd Ifrs.CloseEnd FunctionPublic Function alrecord(cdepartId As Integer, cworkerId As Integer, ctoday As String) As BooleanstrSql = "select workalType from TShangBan where departmentId =" & cdepartId & " and workerId =" & cworkerId & " and workday=#" & ctoday & "#"Set rs = TransactSQL(strSql)If rs.Fields(0).Value = 0 Thenalrecord = TrueElsealrecord = FalseEnd Ifrs.CloseEnd FunctionPublic Sub getTime()strSql = "Select * from TWorkTime"Set rs = TransactSQL(strSql)If Not rs.EOF Thenmstart = rs.Fields(0)mleave = rs.Fields(1)astart = rs.Fields(2)aleave = rs.Fields(3)End Ifnowtime = Time()today = DateEnd SubPublic Function yanzheng(cdepartId As Integer, cworkerId As Integer, ctoday As String) As BooleanstrSql = "select * from TShangBan where departmentId =" & cdepartId & " and workerId =" & cworkerId & " and workday=#" & ctoday & "#"Set rs = TransactSQL(strSql)If rs.EOF = False Thenyanzheng = TrueElseyanzheng = FalseEnd Ifrs.CloseEnd FunctionPublic Function yanzhengPWD(ByVal labwelcome As Label, ByVal psw As String, workerPsw As String) As BooleanDo While psw <> workerPswlabwelcome.Visible = Truelabwelcome.Caption = "你的身份被怀疑啦,请再次输入你的员工密码!"pwdCount = pwdCount + 1If pwdCount = 3 ThenMsgBox "你已经是三次输错,系统将关闭啦!", vbOKOnly + vbExclamation, "通知"yanzhengPWD = FalseExit FunctionEnd Ifpsw = InputBox("请输入员工密码:", "输入密码")LoopyanzhengPWD = True。