考勤管理系统实验报告(附源代码)
C#考勤管理系统报告

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的点歌系统,大到航空、铁路的售票,全国人口户籍的管理等等。
学生考勤系统实验报告:系统设计

if (i > 0)
{
canLogin = true;
this.Close();
}
else
{
MessageBox.Show("身份验证失败!,请检查用户名和密码!");
_tb.Clear();
using ponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace 学生考勤系统
Not Null
学生姓名
班级名称
char(5)
Not Null
所在班级
课程名称
char(10)
P
Not Null
课程名称
缺勤状态
char(10)
Not Null
缺勤情况
(5)课程信息表course
字段名
字段类型
主/外键
字段约束
说明
课程编号
char(8)
p
Not null
课程编号
课程名称
char(20)
Not Null
所教班级
所教课程
char(20)
Not Null
所教课程
所属学院
char(20)
Not Null
所属学院
(3)考勤表kaoqin
字段名
字段类型
主/外键
字段约束
说明
考勤管理系统实验报告-南通大学

计算机科学与技术学院考勤管理系统课程设计姓名:夏健&蒯程学号: 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数据库设计本系统设计到普通用户, 也就是员工,和超级用户两类用户。
课程设计考勤管理系统源代码

04
考勤管理界面
展示学生的考勤记录,包括迟到、早 退、旷课等情况,并提供添加、修改 、删除考勤记录的功能。
06
报表统计界面
提供多种报表统计功能,如学生出勤率统计、 成绩分布统计等,方便教师和管理员进行数据 分析和决策。
04
系统实现
开发环境搭建
01
安装Java开发环境 (JDK)
确保计算机上已安装适当版本的 Java开发工具包(JDK),并配 置好环境变量。
。
操作便捷性
系统应尽量减少用户的操作步 骤和复杂度,提高用户的使用 体验。
数据准确性
系统应确保数据的准确性和一 致性,避免因数据错误导致的 各种问题。
故障处理
系统应提供故障处理和恢复机 制,确保在出现问题时能及时
解决并恢复正常运行。
03
系统设计
总体设计
系统架构
采用B/S架构,前端使用 HTML、CSS、JavaScript等
促进信息化建设
推动学校信息化建设进程 ,提高学校管理水平和效 率。
系统概述
系统功能
实现学生考勤信息的录入、 查询、统计和分析等功能, 支持多种考勤方式和异常情 况处理。
系统架构
采用B/S架构,前端使用 Web技术实现用户界面,后 端使用数据库管理系统存储 和处理数据。
技术选型
前端采用HTML5、CSS3、 JavaScript等技术,后端采 用Java、Spring Boot、 MyBatis等技术,数据库使 用MySQL或Oracle等关系型 数据库。
系统特点
界面友好、操作简便、功能 强大、性能稳定、安全可靠 。
02
需求分析
功能需求
学生信息管理
系统需要提供对学生基本信息的增删 改查功能,包括姓名、学号、班级等 。
考勤打卡系统实验报告

一、实验目的本次实验旨在了解和掌握考勤打卡系统的基本原理、功能设计以及实际操作,通过搭建一个基于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++;}}}。
课程设计考勤管理系统源代码

课程设计考勤管理系统源代码课程设计考勤管理系统是一款致力于提高教育教学管理效率和规范化程度的软件,它通过采用先进的技术手段和设计理念,实现了从学生选课到教师授课再到考勤管理的全面覆盖,真正做到了教育教学管理的精细化、智能化和高效化。
本文主要介绍课程设计考勤管理系统的源代码。
一、概述课程设计考勤管理系统源代码采用的是Java语言,基于B/S架构开发,在技术上采用了Spring框架、Hibernate框架和Struts框架等技术,并使用了MySQL数据库进行数据存储。
其主要功能包括:学生选课、教师管理、课程管理、教学计划、教学资料、在线作业、成绩管理、考勤管理等。
二、架构课程设计考勤管理系统采用的是B/S架构,即浏览器-服务器架构,使得系统的访问和管理都可以通过浏览器完成,具有跨平台、易扩充、易维护等优点。
系统的架构分为客户端和服务器端,其中客户端主要是浏览器,服务器端主要包括:网站服务器、应用程序服务器、数据库服务器等。
三、模块课程设计考勤管理系统主要由以下几个模块组成:1. 学生管理模块该模块主要负责学生的信息管理和选课管理,实现学生的个人信息修改、查阅选课情况、查询成绩等功能。
2. 教师管理模块该模块主要负责教师信息和课程管理,实现教师个人信息修改、查询课表、布置作业等功能。
3. 课程管理模块该模块主要负责课程的添加、修改、删除、查询等操作。
4. 教学计划模块该模块主要负责教学计划的制定和管理,包括课程教学计划、教学进度等信息。
5. 教学资料模块该模块主要负责教学资料的上传、下载和管理,包括课件、参考书籍等。
6. 在线作业模块该模块主要负责在线作业的布置和管理,包括作业题目、作业答案等。
7. 成绩管理模块该模块主要负责学生成绩的管理,包括成绩录入、成绩查询等。
8. 考勤管理模块该模块主要负责考勤的管理,包括课程考勤、缺勤情况等。
四、源代码考勤管理系统源代码主要由Java代码和数据库文件两部分组成。
考勤管理系统源代码

{#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #include<malloc.h> #include<time.h> /* 所使用的头文件 */ typedef struct/* 时间结构体定义 */{int hour; int minute; }TIME;typedef struct worker /* 职工结构体定义 */ {char id[10]; char name[10];TIME time[20]; struct worker *next; }worker;int menu_select(); void welcome(); void createInfo(); void createRec(); void listRec(); void searchRec(); void saveRec(); void deleteRec(); void modifyRec(); void loadRec(); void resetPassword(); int fun();worker *head=NULL; writeinfo_flag=0;char password[16]="888888"; struct tm *timeinfo; int main()/* 主菜单 *//* 欢迎界面 */ /* 新建职工信息 */ /* 录入考勤信息 *//* 浏览当天考勤信息 */ /*/ 查询考勤信息 *//* 保存所有信息 *//* 删除考勤信息 */ /* 修改考勤信息 *//* 加载文件信息 *//* 重设密码 *//* 判断输入选择是否正确 *//* 链表头指针 head*//* 信息保存标记 *//* 初始密码 *//* 主函数 */char s[16]; welcome();loadRec();/* 欢迎界面 */ /* 加载文件信息 */printf("\n 提示:\n\n 初始密码为:888888\n"); /* 进入系统密码管理*/ printf("\t\t\t\n\n\n\n\n 请输入密码,进去系统( 密码不超过15 个字符):"); scanf("%s",s);while(strcmp(password,s)!=0){printf("\n 密码错误,请重新输入:"); scanf("%s",s);} system("cls");for(;;) /* 菜单循环*/{ switch(menu_select()) {case 0:system("cls");createInfo();break;case 1:system("cls");createRec();break;case 2:system("cls");listRec();break;case 3:system("cls");searchRec();break;case 4:system("cls");deleteRec();break;case 5:system("cls");modifyRec();break;case 6:system("cls");saveRec();break;case 7:system("cls");resetPassword();break;case 8:system("cls");if(writeinfo_flag==1)saveRec();return 0; default:{printf("\n 选择错误,请按回车键返回后,重新输入(0~8)!"); getchar();getchar();system("cls"); break;}}}return 0;}/* 选择菜单*/ int menu_select(){worker *p=head;int c,k;time_t nowtime; time( &nowtime );timeinfo = localtime( &nowtime );printf("\t\t** ************ 选择菜单************* *\t");/* 在菜单中显示当前时间*/if(timeinfo->tm_wday==0){printf(" 时间:星期天");printf(" %d:%d",timeinfo->tm_hour,timeinfo->tm_min);}elseprintf(" 时间: 星期%d %d:%d",timeinfo->tm_wday,timeinfo->tm_hour,timeinfo->tm_min);printf("\n ------------------------------------------------------------------ ");printf("\t\t\t0. 新建职工信息\n");printf("\t\t1. 录入考勤信息\n");printf("\t\t2. 浏览考勤信息\n");printf("\t\t3. 查询考勤信息\n");printf("\t\t4. 删除考勤信息\n");printf("\t\t5. 修改考勤信息\n");printf("\t\t6. 保存所有信息\n");printf("\t\t7. 重设密码\n");printf("\t\t8. 退出(退出后信息会自动保存在磁盘中)\n\t\t( 任何情况下按Ctrl+C 退出程序)\n ”);printf("\n ------------------------------------------------------------------ ");printf("\n\n 请输入您的选择(0~8):");scanf("%d",&c); if(timeinfo->tm_wday==0&&p!=NULL) /* 每周周日所有考勤信息初始化*/{for(k=0;k<20;k++){p->time[k].hour=88; p->time[k].minute=88;}}return c;}void loadRec() /* 从磁盘导入信息*/{worker *rear,*p,*pre; FILE *fp,*key; int i,pos=0; key=fopen("key.txt","r"); if(key!=NULL){}fscanf(key,"%s",password); fclose(key);p=(worker*)malloc(sizeof(worker)); /* 开辟一个新单元 */ fscanf(fp,"%s%s",p->id,p->name); for(i=0;i<20;i++)fscanf(fp,"%d%d",&p->time[i].hour,&p->time[i].minute); if(head==NULL){head=p; pre=p; rear=p;}else{rear->next=p; pre=rear; rear=p;}}pre->next=NULL; fclose(fp); return;}fp=fopen("workerRec.txt","r"); if(fp!=NULL){fseek(fp, 0, SEEK_END); pos= ftell(fp);}if(fp==NULL||0 == pos)件*/{printf("\n\n\n\n\n\n\t\t 提示:在!\n");printf("\n\t\t getchar();\n\n\t\t 数据库中没有职工信息请按回车键进入主菜单新建职工信息/* 指针移到文件末尾 *//* 打开职工信息文件和密码文,文本为空或文件不存system("cls"); return;}fseek(fp, 0, SEEK_SET); while(!feof(fp)){Un");/*清屏 *//* 指针移到文件开头 */ /*fp 不指向文件末尾 *//* 关闭文件 */void createInfo() /* 新建职工信息*/{worker *p,*rear;int i,k,n;char s[10];if(head!=NULL){printf("\n\n\n\n\n\n\n\t\t\t 职工信息数据库已存在\n\n\t\t\t 新建职工信息将续接在信息库的后面\n\n\n\t\t\t 按回车键继续");getchar();getchar();rear=head; while(rear->next!=NULL) rear=rear->next;system("cls");}printf("\n\n 请输入希望建立职工信息条数:");scanf("%s",s);if(fun(s)==0)return;elsen=atoi(s);printf("\n 请输入职工的工号(至多6 个字符)和姓名( 至多5 个字符):\n"); for(i=0;i<n;i++){p=(worker*)malloc(sizeof(worker));scanf("%s%s",p->id,p->name); if(strlen(p->id)>6||strlen(p->name)>5){printf("\n 职工工号或姓名输入长度不合法!\n\n 请按回车键返回主菜单\n",n);rear->next=NULL;free(p);getchar();getchar();system("cls");return;}for(k=0;k<20;k++) /* 时间初始化为88:88*/{p->time[k].hour=88;p->time[k].minute=88;}if(head==NULL){head=p;rear=p;}else{ rear->next=p; rear=p;}} p->next=NULL;printf("\n%d 条信息建立完毕!\n\n 请按回车键返回主菜单\n",n); getchar();getchar();system("cls");writeinfo_flag=1;return;}void createRec() /* 录入考勤信息*/{time_t nowtime;worker *p;char s[10],k[10],*g=k,ss[10];int c,m,week;time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo->tm_wday; if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;} if(timeinfo->tm_wday==6||timeinfo->tm_wday==0){printf("\n\n\n\n\t\t\t 今天不是工作日\n\n\t\t\t 无法录入考勤信息\n\n\t\t\t 请按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t 请选择录入考勤种类:\n\n\t\t\t1. 上午上班(8:00)\n\n\t\t\t2. 上午下班(11:30)\n\n\t\t\t3. 下午上班(14:00)\n\n\t\t\t4. 下午下班(17:30)\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",k); if(fun(k)==0)return;elsem=atoi(k);if(m<1||m>4){printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;}system("cls");if(m==1&&(timeinfo->tm_hour>11||(timeinfo->tm_hour==11&&timeinfo->tm_min>30))) {printf("\n\n\n\t\t\t 现在已经过了上午下班的时间(11:30)\n\n\t\t\t 无法录入上班的时间(8:00)信息\n\n\t\t\t 请按回车键返回主菜单");getchar();getchar();system("cls");return;}if(m==3&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30))){printf("\n\n\n\t\t\t 现在已经过了下午下班的时间(17:30)\n\n\t\t\t 无法录入上班的时间(14:00)信息\n\n\t\t\t 请按回车键返回主菜单");getchar();getchar();system("cls");return;}/* 可通过工号或姓名;录入*/printf("\n\n\n\t\t\t 请选择输入工号还是姓名:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",ss); if(fun(ss)==0)return;elsec=atoi(ss);if(c<1||c>2){printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls"); return ;} system("cls"); switch(c) { case 1:{ printf("\n\n\n\n\n\n\t\t\t 请输入工号(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;} if((m==2||m==4)&&p->time[4*week+m-6].hour==88){printf("\n\n\n\n\t\t\t 该职工无上班记录,无法记录下班信息, 请先录入上班信息\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}p->time[4*week+m-5].hour=(timeinfo->tm_hour); /* 存储时间*/p->time[4*week+m-5].minute=(timeinfo->tm_min);break;}case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;} if((m==2||m==4)&&p->time[4*week+m-6].hour==88) {printf("\n\n\n\n\t\t\t 该职工无上班记录,无法记录下班信息, 请先录入上班信息\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;}time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo->tm_wday;p->time[4*week+m-5].hour=(timeinfo->tm_hour); p->time[4*week+m-5].minute=(timeinfo->tm_min); break;}}system("cls");printf("\n\n\n\n\n\n\t\t\t 考勤成功! 请按回车键返回主菜单\n");getchar();getchar();writeinfo_flag=1;system("cls");return;}void listRec() /* 浏览当天的考勤信息*/{worker *p=head;int m,week;week=timeinfo->tm_wday;if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}if(timeinfo->tm_wday==6||timeinfo->tm_wday==0) {printf("\n\n\n\n\t\t\t 今天不是工作日,无考勤记录\n\n\t\t\t 无法浏览当天的考勤信息\n\n\t\t\t 请按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n 职工今天整体出勤情况如下:\n\n");printf(" 职工号姓名上午上班上午下班下午上班下午下班\n"); while(p!=NULL){m=0;printf("\n%s %s",p->id,p->name);if((p->time[(week-1)*4].hour>8&&p->time[(week-1)*4].hour<25)||(p->time[(week-1)*4].hour==8&&p->time[(week-1)*4].minute>0))printf(" 迟到"); /* 上班时间之后来的都算迟到*/else if(p->time[(week-1)*4].hour==88&&(timeinfo->tm_hour>11||(timeinfo->tm_hour==11&&timein fo->tm_min>30)))printf(" 旷工"); /* 过了下班时间就是旷工*/else if(p->time[(week-1)*4].hour==88&&(timeinfo->tm_hour<11||(timeinfo->tm_hour==8&&timeinf o->tm_min==30)))printf(" 无记录"); /* 下班之前还没有来显示无记录*/else if(p->time[(week-1)*4].hour!=88){printf(" ");m++;}if((p->time[(week-1)*4+1].hour<11&&p->time[(week-1)*4].hour!=0)||(p->time[(week-1)*4+1].hour==11&&p->time[(week-1)*4+1].minute<30))printf(" 早退");else {printf(" ");m++;}if((p->time[(week-1)*4+2].hour>14&&p->time[(week-1)*4+2].hour<25)||(p->time[(week-1)*4+2].hour==14&&p->time[(week-1)*4+2].minute>0))printf(" 迟到");else if(p->time[(week-1)*4+2].hour==88&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30)))printf(" 旷工");else if(p->time[(week-1)*4+2].hour==88&&(timeinfo->tm_hour<17||(timeinfo->tm_hour==17&&tim einfo->tm_min==30)))printf(" 无记录");else if(p->time[(week-1)*4+2].hour!=88){printf(" ");m++;}if((p->time[(week-1)*4+3].hour<17&&p->time[(week-1)*4+2].hour!=0)||(p->time[(week-1)*4+3].hour==17&&p->time[(week-1)*4+3].minute<30))printf(" 早退");else {printf(" ");m++;}if(m==4&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30))) printf(" 全勤!");p=p->next;}printf("\n\n 显示完毕,按回车键返回主菜单!");getchar();getchar();system("cls");return;}void searchRec() /* 根据工号或姓名查找考勤信息*/{worker *p=head;int c,i;char s[10],k[10];if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t 请选择输入工号还是姓名:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",k); if(fun(k)==0)return;elsec=atoi(k); if(c<1||c>2){ printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始getchar();getchar();system("cls"); return ;!\n");} system("cls"); switch(c) { case 1:{ printf("\n\n\n\n\n\n\t\t\t 请输入工号(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}break;}case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}break;}system("cls");printf(" 职工号姓名\n\n");printf(" %s %s",p->id,p->name);printf(" 周一");for(i=0;i<4;i++) {上午上班上午下班下午上班下午下班if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d if(i==4) printf("\n\n"); ");",p->time[i].hour,p->time[i].minute);printf("\n 周二"); for(i=4;i<8;i++){if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d if(i==8) printf("\n\n"); ");",p->time[i].hour,p->time[i].minute);}printf("\n 周三"); for(i=8;i<12;i++){if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d if(i==12) printf("\n\n"); ");",p->time[i].hour,p->time[i].minute);}printf("\n 周四"); for(i=12;i<16;i++){if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d ");",p->time[i].hour,p->time[i].minute);if(i==16)printf("\n\n");}printf("\n 周五");for(i=16;i<20;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute); if(i==20)printf("\n\n");}printf("\n\n\n\n\n\n\t\t\t 显示完毕,按回车键返回主菜单!"); getchar();getchar();system("cls");return;}void saveRec() /* 储存所有信息*/{worker *p=head;FILE *fp,*key;int i;if(writeinfo_flag==0){printf("\n\n\n\n\t\t\t 信息无改动,无需保存!\n\n\t\t\t 请按回车键返回主菜单\n");getchar();getchar();system("cls");return;}if(writeinfo_flag==1){ if((fp=fopen("workerRec.txt","w"))==NULL||(key=fopen("key.txt","w"))==NULL) {printf("\n\t\t\t 提示:\n\n\t\t\t 存储信息失败!\n"); printf("\n\t\t\t 请按回车键进入主菜单重新开始\n"); getchar();getchar();system("cls");return;} while(p!=NULL){fprintf(fp,"%s\n%s\n",p->id,p->name); for(i=0;i<20;i++)fprintf(fp,"%d\n%d\n",p->time[i].hour,p->time[i].minute); p=p->next;} fprintf(key,"%s",password);fclose(fp),fclose(key);writeinfo_flag=0; /* 消除改动标志*/ printf("\n\n\n\n\n\t\t\t 保存完毕,按回车键继续!");getchar();getchar();system("cls");return;}}void deleteRec() //删除考勤信息*/{worker *p,*pre=head;char s[16],k[10];int c; if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar(); system("cls"); return;}printf("\n\n\n\t\t\t 提示:\n\n\t\t\t 初始密码为:888888\n"); printf("\n\n\n\t\t\t 请输入密码(密码不超过15 个字符):"); scanf("%s",s);while(strcmp(password,s)!=0){printf("\n\n\t\t\t 密码错误!\n\n"); printf("\t\t\t 按回车键返回主菜单!"); getchar();getchar();system("cls");return;} printf("\n\n\n\t\t\t 密码输入成功!\n\n\t\t\t 请按回车键继续"); getchar();getchar();system("cls");printf("\n\n\n\t\t\t 请选择输入工号还是姓名:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",k); if(fun(k)==0)return;elsec=atoi(k); if(c<1||c>2){ printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始getchar();getchar();system("cls"); return ;!\n");} system("cls"); switch(c) { case 1:{ printf("\n\n\n\n\n\n\t\t\t 请输入工号:"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}break;}case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名:"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;} break;}} system("cls"); if(p==head) head=p->next;else{ for(;pre->next!=p;pre=pre->next); pre->next=p->next;}free(p);printf("\n\n\n\n\n\n\t\t\t 删除成功,请按回车键返回主菜单!"); getchar();getchar();system("cls"); writeinfo_flag=1; return;}void modifyRec() /* 修改考勤信息*/{worker *p,*pre=head; char s[16],k[10];int c; if(head==NULL){ printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar(); system("cls"); return;}printf("\n\n\n\t\t\t 提示:\n\n\t\t\t 初始密码为:888888\n"); printf("\n\n\n\t\t\t 请输入密码(密码不超过15 个字符):"); scanf("%s",s);if(strcmp(password,s)!=0){printf("n\n\n\t\t\t 密码错误!\n\n"); printf("\t\t\t 按回车键返回主菜单!"); getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t 密码输入成功!\n\n\t\t\t 请按回车键继续"); getchar();getchar();system("cls");printf("\n\n\n\t\t\t 请选择通过工号修改还是姓名修改:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\n\n\t\t 您的选择(以回车键结束):"); scanf("%s",k);if(fun(k)==0)return;elsec=atoi(k); if(c<1||c>2){printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;} system("cls"); switch(c) { case 1:{printf("\n\n\n\n\n\n\t\t\t 请输入工号:"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;}break;} case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名:"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;}break;}} system("cls");printf("\n\n\n\t\t\t 请选择要修改的内容:\n\n\t\t\t1. 工号\n\n\t\t\t2. 姓名\n\n\t\t\t3. 上午上班时间\n\n\t\t\t4. 上午下班时间\n\n\t\t\t5. 下午上班时间\n\n\t\t\t6. 下午下班时间");printf("\n\n\n\t\t 您的选择(以回车键结束):");scanf("%s",&k);if(fun(k)==0)return;elsec=atoi(k);if(c<1||c>6) {printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls"); return ;}system("cls");switch(c){case 1: printf("\n\n\n\t\t 请输入要修改的工号(至多10 个字符):"); scanf("%s",p->id);break; case 2: printf("\n\n\n\t\t 请输入要修改的姓名(至多10 个字符):"); scanf("%s",p->name);break; case 3: printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4].hour,&p->time[(c-1)*4].minute);break;case 4: printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+1].hour,&p->time[(c-1)*4+1].minute);break;case 5:printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+2].hour,&p->time[(c-1)*4+2].minute);break; case 6: printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+3].hour,&p->time[(c-1)*4+3].minute);break;} printf("\n\n\n\t\t\t 修改成功,请按回车键返回主菜单!"); getchar();getchar();system("cls"); writeinfo_flag=1;return;}void resetPassword() /* 重设密码*/{char s[16];printf("\n\n\n\t\t 提示:\n\n\t\t 初始密码为:888888\n"); printf("\n\t\t 请输入密码(密码不超过15个字符):"); scanf("%s",s);if(strcmp(password,s)!=0){printf("\n\n\n\t\t 密码错误!\n\n"); printf("\n\n\n\t\t 按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\t\t 密码输入成功!\n\n\t\t 请按回车键继续"); getchar();getchar();system("cls");printf("\n\n\n\t 请输入要修改的密码(密码不超过15 个字符):"); scanf("%s",s);strcpy(password,s);printf("\n\n\t 修改成功,请按回车键返回主菜单!"); getchar();getchar();system("cls"); writeinfo_flag=1;return;}void welcome() //欢迎界面{ printf("\n\n\n\n\n\n\n\t\t\t 欢迎使用职工考勤管理系统"); printf("\n\n\n\t\t\t 请按任意键进入系统,开始您的操作"); printf("\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t 作者:XXX");getch(); system("cls");return;}int fun(char *g){do{ if(*g<'0'||*g>'9') {printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls"); return 0 ;}g++; }while(*g!=0); return 1;}。
学生考勤系统源代码

学生考勤系统源代码void lace(int n) /*花边函数*/{int i;for(i=0;i<n;++i){putchar('*'); /*输出n个**/}}void fun_intro(void) /*功能介绍函数*/{lace(80); /*执行lace(n)函数*/printf("欢迎使用学生考勤管理系统\n");printf("本系统主要功能有\n");printf("1、学生签到服务\n");printf("2、学生考勤信息查询及修改\n");printf("3、学生考勤评价\n");printf("本系统以菜单命令方式实现各个功能,通过选择菜单所对应的序号来选择执行功能\n");printf("本系统所有信息文件均默认保存在C盘根目录\n"); /*输出括号中的内容*/ lace(80); /*执行lace(n)函数*/}void sys_menu(void) /*主功能菜单函数*/{lace(80); /*执行lace(n)函数*/lace(80); /*同上*/lace(2);printf(" 1、签到\n"); /*执行lace(n)函数,输出……*/lace(2);printf(" 2、查询\n"); /*同上*/lace(2);printf(" 3、修改\n"); /*同上*/lace(2);printf(" 4、退出\n"); /*同上*/lace(80); /*同上*/lace(80); /*同上*/}int se_cod(void) /*密码函数*/{char in_sec[10],secret[7]="123456"; /*in_sec用于输入密码,secret存放内置密码*/printf("请输入密码(6位阿拉伯数字):"); /*限制密码为6位阿拉伯数字*/scanf("%s",in_sec);if(!strcmp(in_sec,secret)){return(1); /*如果密码正确,函数返回1*/}else{return(0); /*如果密码错误,函数返回0*/}}void stu_system(void) /*系统主函数*/{int opt;sys_menu(); /*执行 sys_menu( )函数*/printf("执行:"); /*输出“执行:”*/scanf("%i",&opt); /*输入opt 的值*/switch(opt) /*多分支执行*/{case 1 : sign_in();break; /*当opt 的值为1 时,进入签到界面*/case 2 : stu_find();break; /*当opt 的值为2时,进入查询界面*/case 3 : stu_rev();break; /*当opt 的值为3时,进入修改界面*/case 4 : quit_sys();break; /*当opt 的值为4时,退出系统*/default : printf("出错\n请重新选择\n");stu_system(); /*当opt的值不满足以上时,输出“出错”换行,输出“请重新选择”,换行,回到首页*/}}void istu_infor(void) /*输入学生基本信息函数*/{int i;printf("%-8s%-8s%-8s\n","姓名","学号","性别");for(i=0;i<NUM;++i){scanf("%s%s%s",st_infor[i].nam,st_infor[i].num,st_infor[i].sex); /*输入姓名,学号,性别*/strcpy(st_infor[i].che_now,"未签到"); /*签到状态初始化为“未签到”*/st_infor[i].che_add=0.0; /*出勤次数初始化为0*/st_infor[i].stand=1.0; /*出勤标准次数初始化为1*/st_infor[i].che_sult=0.0; /*出勤成绩初始化为0*/}}void stu_open(char way[3]) /*打开学生基本信息文件函数*/{if((file=fopen("C:\\Student attendance information.f",way))==NULL) /*打开在C盘存储的名为Student attendance information.的文件,“way”代表打开方式,如果文件打开失败,则执行下面语句*/{printf("出错\n");printf("返回到首页\n");stu_system(); //返回到首页}}void keepf(void) /*保存文件函数*/{int i;fclose(file);stu_open("w"); /*以“写“的方式打开file文件*/for(i=0;i<NUM;++i){fwrite(&st_infor[i],sizeof(struct stu_check),1,file); /*将st_infor[i]中的信息写入file文件*/}fclose(file);}void nstu_infor(void) /*新建学生基本信息文件函数*/{printf("输入学生信息\n");stu_open("w"); /*新建一个空文件*/istu_infor(); /*输入学生信息*/keepf(); /*保存文件*/printf("新建成功\n");jump_sys(stu_rev); /*跳转到修改信息界面*/}void sign_in(void) /*学生签到服务函数*/{int i;char number[10];stu_open("r"); /*以“读”的方式打开文件*/printf("(请输入您的学号:");scanf("%s",number); /*输入“number”的值*/for(i=0;i<NUM;++i) /*当i小于NUM时,执行下面语句*/{fread(&st_infor[i],sizeof(struct stu_check),1,file); /*打开file文件,将文件内容传递给结构体变量*/}for(i=0;i<NUM;++i){if(!strcmp(st_infor[i].num,number)){if(!strcmp(st_infor[i].che_now,"未签到")){strcpy(st_infor[i].che_now,"签到"); /*将"签到"赋给“check_now”*/st_infor[i].che_add++; /*“check_add加1*/printf("签到成功\n");}else{printf("您已签到\n");}}}keepf(); /*保存“file”文件*/jump_sys(sign_in); /*向其他功能跳转*/}void stu_list(void) /*学生信息列表函数*/{int i;stu_open("r");lace(80);printf("%-8s%-8s%-8s%-10s%-8s\n\n","学号","姓名","性别","签到状态","评分");for(i=0;i<NUM;++i){fread(&st_infor[i],sizeof(struct stu_check),1,file);printf("%-8s%-8s%-8s%-10s%-8.1f\n",st_infor[i].num,st_infor[i].nam,st_infor [i].sex,st_infor[i].che_now,st_infor[i].che_sult);}lace(80);keepf();jump_sys(stu_find);}void stu_find(void) /*学生考勤信息查询函数*/{int opt;lace(80);printf("请选择\n");printf(" 1、打开学生信息列表\n");printf(" 2、按姓名查找\n");printf(" 3、按学号查找\n");lace(80);printf("执行:");scanf("%i",&opt);switch(opt){case 1 : stu_list();break; /*执行stu_list( )函数*/case 2 : find_nam();break;case 3 : find_num();break;default :printf("出错\n");stu_find(); /*输出“出错”,执行stu_find( )函数*/ }}void jump_sys(void (*p)(void)) /*跳转函数*/{int opt;system(“PAUSE”);printf("请选择\n");lace(80);printf(" 1、返回到首页\n");printf(" 2、返回到上一级\n");printf(" 3、退出系统\n");lace(80);printf(“执行:”);scanf("%i",&opt);switch(opt){case 1 : stu_system();break;case 2 : (*p)();break; /*跳转到p所指代的函数*/case 3 : quit_sys(); /*退出系统*/default : printf("出错\n");jump_sys(p);}}void stu_rev(void) /*学生信息修改函数*/{int opt;if(se_cod()) /*如果密码正确,执行修改操作*/{printf("密码正确\n");}else /*如果密码错误,返回到首页*/printf("密码错误\n");printf("返回到首页\n");stu_system();}printf("请选择\n");lace(80);printf(" 1、修改学号\n");printf(" 2、修改性别\n");printf(" 3、修改签到记录\n");printf(" 4、新建学生出勤信息\n");lace(80);printf("执行:");scanf("%i",&opt);switch(opt){case 1 : rev_num();break;case 2 : rev_sex();break;case 3 : rev_sig();break;case 4 : nstu_infor();break;default : printf("出错\n");printf("返回上一页\n");stu_rev();}}void find_nam(void) /*以姓名方式查找函数*/{int i;char name[10];stu_open("r"); /*打开文件*/for(i=0;i<NUM;++i) /*将文件中的学生信息存放到stu_infor[i]结构体数组中*/ {fread(&st_infor[i],sizeof(struct stu_check),1,file);}printf("请输入姓名:");scanf("%s",name); /*输入要查找的姓名*/for(i=0;i<NUM;++i){if(!strcmp(st_infor[i].nam,name)) /*如果找到,输出个人信息*/{printf("%-8s%-8s%-8s%-10s%-8s\n","学号","姓名","性别","签到状态","评分");printf("%-8s%-8s%-8s%-10s%-8.1f\n",st_infor[i].num,st_infor[i].nam,st_infor [i].sex,st_infor[i].che_now,st_infor[i].che_sult);}printf("查询结束\n");keepf(); /*关闭文件*/jump_sys(stu_find); /*跳转到查询界面*/}void find_num(void) /*以学号方式查找函数*/{int i;char number[10];stu_open("r"); /*打开文件*/for(i=0;i<NUM;++i) /*将文件中的学生信息存放到stu_infor[i]结构体数组中*/ {fread(&st_infor[i],sizeof(struct stu_check),1,file);}printf("请输入学号:");scanf("%s",number); /*输入要查找的学号*/for(i=0;i<NUM;++i){if(!strcmp(st_infor[i].num,number)) /*如果找到,输出个人信息*/{printf("%-8s%-8s%-8s%-10s%-8s\n","学号","姓名","性别","签到状态","评分");printf("%-8s%-8s%-8s%-10s%-8.1f\n",st_infor[i].num,st_infor[i].nam,st_infor [i].sex,st_infor[i].che_now,st_infor[i].che_sult);}}printf("查询结束\n ");keepf(); /*关闭文件*/jump_sys(stu_find); /*跳转到查询界面*/}void rev_num(void) /*修改学号函数*/{int i;char name[10];stu_open("r"); /*打开文件*/for(i=0;i<NUM;++i) /*将文件中的学生信息存放到stu_infor[i]结构体数组中*/ {fread(&st_infor[i],sizeof(struct stu_check),1,file);}printf("请输入要修改的学生的姓名:");scanf("%s",name);for(i=0;i<NUM;++i){if(!strcmp(st_infor[i].nam,name)) /*找到学生信息后,修改学号*/{printf("将%s修改为:",st_infor[i].num);scanf("%s",st_infor[i].num);printf("修改成功\n");}}keepf(); /*保存文件*/jump_sys(stu_rev); /*跳转到修改界面*/}void rev_sex(void) /*修改性别函数*/{int i;char name[10];stu_open("r"); /*打开文件*/for(i=0;i<NUM;++i) /*将文件中的学生信息存放到stu_infor[i]结构体数组中*/ {fread(&st_infor[i],sizeof(struct stu_check),1,file);}printf("请输入要修改的学生的姓名:");scanf("%s",name);for(i=0;i<NUM;++i){if(!strcmp(st_infor[i].nam,name)) /*找到学生信息后,修改性别*/{printf("将%s修改为:",st_infor[i].sex);scanf("%s",st_infor[i].sex);printf("修改成功\n");}}keepf(); /*保存文件*/jump_sys(stu_rev); /*跳转到修改界面*/}void rev_sig(void) /*修改签到记录函数*/{int i;char name[10];stu_open("r"); /*打开文件*/for(i=0;i<NUM;++i) /*将文件中的学生信息存放到stu_infor[i]结构体数组中*/ {fread(&st_infor[i],sizeof(struct stu_check),1,file);}printf("请输入要修改的学生的姓名:");scanf("%s",name);for(i=0;i<NUM;++i){if(!strcmp(st_infor[i].nam,name)) /*找到学生信息后,修改考勤记录*/{printf("将%-3.1f修改为:",st_infor[i].che_add);scanf("%-3.1f",&st_infor[i].che_add);printf("修改成功\n");}}keepf(); /*保存文件*/jump_sys(stu_rev); /*跳转到修改界面*/}int main(void) /*工程主函数*/{fun_intro(); /*执行fun_into( )函数*/system("PAUSE"); /*暂停*/ensure();system("PAUSE");stu_system(); /*执行 stu_system( )函数*/system("PAUSE"); /*暂停*/return(0); /*工程主函数执行完后返回 0值*/}void quit_sys(void) /*退出考勤系统函数*/{int i;if(se_cod()){printf("密码正确,允许退出系统\n"); /*只能以管理员的身份执行退出操作*/system("PAUSE");}else{printf("密码错误,禁止退出\n");printf("请返回到首页\n");system("PAUSE");stu_system();}stu_open("r");for(i=0;i<NUM;++i){fread(&st_infor[i],sizeof(struct stu_check),1,file);}for(i=0;i<NUM;++i){strcpy(st_infor[i].che_now,"未签到"); /*把”未签到”赋给”che_now”*///st_infor[i].che_add=8;st_infor[i].che_sult=(float)((st_infor[i].che_add/st_infor[i].stand)*100.0); /*用签到次数与标准次数的比值的100倍来表示总分数*/st_infor[i].stand++; /*stand加1*/}keepf(); /*保存file文件*/exit(0); /*退出系统*/}void ensure(void) /*确定班级函数*/{int opt;printf("请选择班级\n"); /*根据不同的班级确定不同的学生总数*/printf("1、计算机科学与技术1班\n");printf("2、计算机科学与技术2班\n");printf("3、自定义\n"); /*根据自己需要确定学生总数*/printf("选择: ");scanf("%i",&opt);switch(opt){case 1 : NUM=56;strcpy(cla,"C:\\ Student attendance information class 1.f");break; /*一班的人数确定为56人,学生信息保存在C盘根目录下的Student attendance information class 1.f文件中*/case 2 : NUM=55;strcpy(cla,"C:\\ Student attendance information class 2.f");break; /*同上*/case 3 : printf("请自定义学生人数: ");scanf("%i",&NUM);strcpy(cla,"C:\\ Student attendance information class f.f");break; /*根据自己的需要确定人数*/ default :printf("出错,退出系统\n");system("PAUSE");exit(0); /*选项不在以上的系统自动退出*/}}。
C学生考勤系统含源代码

C学生考勤系统含源代码The final revision was on November 23, 2020C++语言程序设计课程设计报告书题目:班级:学号:姓名:指导教师:周期:···············以下由验收老师填写·························成绩:年月日一、课程设计的目的与要求(一)课程设计目的与任务C++作为一门程序设计语言,其学习的最终目的是应用,作课程设计可以让我们更好的理解C++语言的精髓,学习掌握C++的语言流程,初步了解编程的思路,并且有重点的练习我们C++中的类、对象等模块的,使我们对这些重中之重的语言模块掌握的更加灵活可以实现我们的一些初步的程序设计要求也可以提高我们的实践能力;在课程设计中我们也应该就产生的实际开发问题象老师请教学习,以最好的最高的水准完成设计任务。
(二)题目要求考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课)。
试设计一考勤管理系统,使之能提供以下功能:(1).录入学生的缺课记录;(2).修改某个学生的缺课记录;(3).查询某个学生的缺课情况;(4).统计某段时间内,旷课学生姓名及旷课次数,按旷课次数由多到少排序;(5).统计某段时间内,有学生旷课的课程及旷课人次,按旷课人次由多到少排序;(6).系统以菜单方式工作。
二、设计正文1、系统分析考勤信息记录了学生的缺课情况,它包括:缺课日期、第几节课、学生姓名、缺课类型(迟到、早退、请假及旷课)。
考勤管理系统实验报告

考勤管理系统实验报告考勤管理系统实验报告一、引言考勤管理是现代企业管理中非常重要的一环,对于企业来说,合理的考勤管理可以提高员工的工作效率和纪律性,避免拖延和迟到等现象的发生。
随着信息技术的发展和应用,考勤管理系统逐渐得到广泛应用。
本实验旨在设计和实现一个基于电子化的考勤管理系统,提高考勤管理的效率和准确性。
二、实验目的1. 了解考勤管理系统的基本原理和流程;2. 掌握考勤管理系统的设计和实现方法;3. 提高学生的软件开发能力。
三、实验内容1. 系统需求分析:明确系统的功能和要求,包括考勤打卡、考勤记录查询和统计、请假审批等;2. 系统设计:根据需求分析结果,设计系统的整体结构和模块划分;3. 数据库设计:设计系统所需的数据库表结构,包括员工信息表、考勤记录表、请假记录表等;4. 系统实现:根据系统设计和数据库设计,使用合适的编程语言和技术,实现考勤管理系统;5. 系统测试:对系统进行功能测试和性能测试,确保系统的稳定性和可靠性;6. 实验总结与展望:总结本次实验的经验和教训,并对系统的改进和扩展提出展望。
四、实验步骤1. 系统需求分析:通过与老师和同学的讨论,明确系统的功能和要求。
系统的主要功能包括员工打卡、考勤记录查询和统计、请假审批等。
2. 系统设计:根据需求分析结果,设计系统的整体结构和模块划分。
系统包括用户管理模块、考勤管理模块、请假管理模块等。
3. 数据库设计:根据系统设计,设计系统所需的数据库表结构。
员工信息表包括员工编号、姓名、部门等字段;考勤记录表包括员工编号、打卡时间、打卡状态等字段。
4. 系统实现:根据系统设计和数据库设计,使用Java语言和MySQL数据库,实现考勤管理系统。
通过编写Java代码和SQL语句,将系统的各个模块逐步实现。
5. 系统测试:对系统进行功能测试和性能测试。
通过模拟各种情况下的数据输入和操作,测试系统的稳定性和准确性。
6. 实验总结与展望:总结本次实验的经验和教训,并对系统的改进和扩展提出展望。
课程设计考勤管理系统源代码

package kaoqin;import javax。
swing。
*;import java.awt。
*;import java.awt.event。
*;import java。
sql.Connection;import java。
sql.DriverManager;import java。
sql。
ResultSet;import java.sql。
SQLException;import java。
sql。
Statement;import java.sql.*;class AttendFrame extends JFrame//工作制类型{public AttendFrame(){this。
setTitle("工作制类型”);this.setVisible(true);this.setContentPane(new JPanel());this.setSize(300,200);create();}private void create(){JButton b1,b2,b3;Box box1,box2,box;b1=new JButton(”非弹性工作制");b2=new JButton(”弹性工作制”);b3=new JButton("返回”);box1=Box.createHorizontalBox();box2=Box。
createHorizontalBox();box=Box.createVerticalBox();box1。
add(b1);box1。
add(Box.createHorizontalStrut(20));box1.add(b2);box2.add(b3);box.add(box1);box。
add(Box。
createVerticalStrut(30));box。
add(box2);this.add(box);b1。
addActionListener(new ActionListener() // {@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根UBoundFrame frame=new UBoundFrame();dispose();}});b2.addActionListener(new ActionListener()//{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根BoundFrame frame=new BoundFrame();dispose();}});b3.addActionListener(new ActionListener() //{@Overridepublic void actionPerformed(ActionEvent e){// TODO 自动生成的方法存根MFrame frame=new MFrame();dispose();}});}}package kaoqin;import javax。
考勤管理系统源代码

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<malloc.h>#include<time.h> /*所使用的头文件*/typedef struct /*时间结构体定义*/{int hour;int minute;}TIME;typedef struct worker /*职工结构体定义*/{char id[10];char name[10];TIME time[20];struct worker *next;}worker;int menu_select(); /*主菜单*/void welcome(); /*欢迎界面*/void createInfo(); /*新建职工信息*/void createRec(); /*录入考勤信息*/void listRec(); /*浏览当天考勤信息*/ void searchRec(); /*/查询考勤信息*/void saveRec(); /*保存所有信息*/ void deleteRec(); /*删除考勤信息*/void modifyRec(); /*修改考勤信息*/void loadRec(); /*加载文件信息*/ void resetPassword(); /*重设密码*/int fun(); /*判断输入选择是否正确*/worker *head=NULL; /*链表头指针head*/ writeinfo_flag=0; /*信息保存标记*/char password[16]="888888"; /*初始密码*/struct tm *timeinfo;int main() /*主函数*/{char s[16];welcome(); /*欢迎界面*/loadRec(); /*加载文件信息*/printf("\n提示:\n\n初始密码为:888888\n"); /*进入系统密码管理*/ printf("\t\t\t\n\n\n\n\n请输入密码,进去系统(密码不超过15个字符):");scanf("%s",s);while(strcmp(password,s)!=0){printf("\n密码错误,请重新输入:");scanf("%s",s);}system("cls");for(;;) /*菜单循环*/{switch(menu_select()){case 0:system("cls");createInfo();break;case 1:system("cls");createRec();break;case 2:system("cls");listRec();break;case 3:system("cls");searchRec();break;case 4:system("cls");deleteRec();break;case 5:system("cls");modifyRec();break;case 6:system("cls");saveRec();break;case 7:system("cls");resetPassword();break;case 8:system("cls");if(writeinfo_flag==1)saveRec();return 0;default:{printf("\n 选择错误,请按回车键返回后,重新输入(0~8)!");getchar();getchar();system("cls");break;}}}return 0;}/*选择菜单*/int menu_select(){worker *p=head;int c,k;time_t nowtime;time( &nowtime );timeinfo = localtime( &nowtime );printf("\t\t**************选择菜单**************\t");/*在菜单中显示当前时间*/if(timeinfo->tm_wday==0){printf("时间:星期天");printf(" %d:%d",timeinfo->tm_hour,timeinfo->tm_min);}elseprintf("时间:星期%d %d:%d",timeinfo->tm_wday,timeinfo->tm_hour,timeinfo->tm_min);printf("\n---------------------------------------------------------------------------");printf("\t\t\t0.新建职工信息\n");printf("\t\t1.录入考勤信息\n");printf("\t\t2.浏览考勤信息\n");printf("\t\t3.查询考勤信息\n");printf("\t\t4.删除考勤信息\n");printf("\t\t5.修改考勤信息\n");printf("\t\t6.保存所有信息\n");printf("\t\t7.重设密码\n");printf("\t\t8.退出(退出后信息会自动保存在磁盘中)\n\t\t(任何情况下按Ctrl+C退出程序)\n");printf("\n---------------------------------------------------------------------------");printf("\n\n 请输入您的选择(0~8):");scanf("%d",&c);if(timeinfo->tm_wday==0&&p!=NULL) /*每周周日所有考勤信息初始化*/{for(k=0;k<20;k++){p->time[k].hour=88;p->time[k].minute=88;}}return c;}void loadRec() /*从磁盘导入信息*/{worker *rear,*p,*pre;FILE *fp,*key;int i,pos=0;key=fopen("key.txt","r");if(key!=NULL){fscanf(key,"%s",password);fclose(key);}fp=fopen("workerRec.txt","r");if(fp!=NULL){fseek(fp, 0, SEEK_END); /*指针移到文件末尾*/pos= ftell(fp);}if(fp==NULL||0 == pos) /*打开职工信息文件和密码文件*/{printf("\n\n\n\n\n\n\t\t提示:\n\n\t\t数据库中没有职工信息,文本为空或文件不存在!\n");printf("\n\t\t请按回车键进入主菜单新建职工信息^_^\n");getchar();system("cls"); /*清屏*/return;}fseek(fp, 0, SEEK_SET); /*指针移到文件开头*/ while(!feof(fp)) /*fp不指向文件末尾*/{p=(worker*)malloc(sizeof(worker)); /*开辟一个新单元*/fscanf(fp,"%s%s",p->id,p->name);for(i=0;i<20;i++)fscanf(fp,"%d%d",&p->time[i].hour,&p->time[i].minute);if(head==NULL){head=p;pre=p;rear=p;}else{rear->next=p;pre=rear;rear=p;}}pre->next=NULL;fclose(fp); /*关闭文件*/return;}void createInfo() /*新建职工信息*/{worker *p,*rear;int i,k,n;char s[10];if(head!=NULL){printf("\n\n\n\n\n\n\n\t\t\t职工信息数据库已存在\n\n\t\t\t新建职工信息将续接在信息库的后面\n\n\n\t\t\t按回车键继续");getchar();getchar();rear=head;while(rear->next!=NULL)rear=rear->next;system("cls");}printf("\n\n请输入希望建立职工信息条数:");scanf("%s",s);if(fun(s)==0)return;elsen=atoi(s);printf("\n请输入职工的工号(至多6个字符)和姓名(至多5个字符):\n");for(i=0;i<n;i++){p=(worker*)malloc(sizeof(worker));scanf("%s%s",p->id,p->name);if(strlen(p->id)>6||strlen(p->name)>5){printf("\n职工工号或姓名输入长度不合法!\n\n请按回车键返回主菜单\n",n);rear->next=NULL;free(p);getchar();getchar();system("cls");return;}for(k=0;k<20;k++) /*时间初始化为88:88*/{p->time[k].hour=88;p->time[k].minute=88;}if(head==NULL){head=p;rear=p;}else{rear->next=p;rear=p;}}p->next=NULL;printf("\n%d条信息建立完毕!\n\n请按回车键返回主菜单\n",n);getchar();getchar();system("cls");writeinfo_flag=1;return;}void createRec() /*录入考勤信息*/{time_t nowtime;worker *p;char s[10],k[10],*g=k,ss[10];int c,m,week;time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo->tm_wday;if(head==NULL){printf("\n\n\n\n\t\t\t数据库中没有职工信息\n\n\t\t\t无法使用该功能\n\n\t\t\t请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}if(timeinfo->tm_wday==6||timeinfo->tm_wday==0){printf("\n\n\n\n\t\t\t今天不是工作日\n\n\t\t\t无法录入考勤信息\n\n\t\t\t请按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t请选择录入考勤种类:\n\n\t\t\t1.上午上班(8:00)\n\n\t\t\t2.上午下班(11:30)\n\n\t\t\t3.下午上班(14:00)\n\n\t\t\t4.下午下班(17:30)\n\n");printf("\n\t\t您的选择(以回车键结束):");scanf("%s",k);if(fun(k)==0)return;elsem=atoi(k);if(m<1||m>4){printf("\n\n\t\t输入错误!\n\n\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;}system("cls");if(m==1&&(timeinfo->tm_hour>11||(timeinfo->tm_hour==11&&timeinfo->tm_min>30))) {printf("\n\n\n\t\t\t现在已经过了上午下班的时间(11:30)\n\n\t\t\t无法录入上班的时间(8:00)信息\n\n\t\t\t请按回车键返回主菜单");getchar();getchar();system("cls");return;}if(m==3&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30))) {printf("\n\n\n\t\t\t现在已经过了下午下班的时间(17:30)\n\n\t\t\t无法录入上班的时间(14:00)信息\n\n\t\t\t请按回车键返回主菜单");getchar();getchar();system("cls");return;}/*可通过工号或姓名;录入*/printf("\n\n\n\t\t\t请选择输入工号还是姓名:\n\n\t\t\t1.选择输入工号\n\n\t\t\t2.选择输入姓名\n\n");printf("\n\t\t您的选择(以回车键结束):");scanf("%s",ss);if(fun(ss)==0)return;elsec=atoi(ss);if(c<1||c>2){printf("\n\n\t\t输入错误!\n\n\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;}system("cls");switch(c){case 1:{printf("\n\n\n\n\n\n\t\t\t请输入工号(以回车键结束):");scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t不存在该工号\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}if((m==2||m==4)&&p->time[4*week+m-6].hour==88){printf("\n\n\n\n\t\t\t该职工无上班记录,无法记录下班信息,请先录入上班信息\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}p->time[4*week+m-5].hour=(timeinfo->tm_hour); /*存储时间*/p->time[4*week+m-5].minute=(timeinfo->tm_min);break;}case 2:{printf("\n\n\n\n\n\n\t\t\t请输入姓名(以回车键结束):");scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t不存在该姓名\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}if((m==2||m==4)&&p->time[4*week+m-6].hour==88){printf("\n\n\n\n\t\t\t该职工无上班记录,无法记录下班信息,请先录入上班信息\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo->tm_wday;p->time[4*week+m-5].hour=(timeinfo->tm_hour);p->time[4*week+m-5].minute=(timeinfo->tm_min);break;}}system("cls");printf("\n\n\n\n\n\n\t\t\t考勤成功!请按回车键返回主菜单\n");getchar();getchar();writeinfo_flag=1;system("cls");return;}void listRec() /*浏览当天的考勤信息*/{worker *p=head;int m,week;week=timeinfo->tm_wday;if(head==NULL){printf("\n\n\n\n\t\t\t数据库中没有职工信息\n\n\t\t\t无法使用该功能\n\n\t\t\t请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}if(timeinfo->tm_wday==6||timeinfo->tm_wday==0){printf("\n\n\n\n\t\t\t今天不是工作日,无考勤记录\n\n\t\t\t无法浏览当天的考勤信息\n\n\t\t\t请按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n职工今天整体出勤情况如下:\n\n");printf("职工号姓名上午上班上午下班下午上班下午下班\n");while(p!=NULL){m=0;printf("\n%s %s",p->id,p->name);if((p->time[(week-1)*4].hour>8&&p->time[(week-1)*4].hour<25)||(p->time[(week-1)*4].ho ur==8&&p->time[(week-1)*4].minute>0))printf(" 迟到"); /*上班时间之后来的都算迟到*/elseif(p->time[(week-1)*4].hour==88&&(timeinfo->tm_hour>11||(timeinfo->tm_hour==11&&timein fo->tm_min>30)))printf(" 旷工"); /*过了下班时间就是旷工*/elseif(p->time[(week-1)*4].hour==88&&(timeinfo->tm_hour<11||(timeinfo->tm_hour==8&&timeinf o->tm_min==30)))printf(" 无记录"); /*下班之前还没有来显示无记录*/else if(p->time[(week-1)*4].hour!=88){printf(" ");m++;}if((p->time[(week-1)*4+1].hour<11&&p->time[(week-1)*4].hour!=0)||(p->time[(week-1)*4 +1].hour==11&&p->time[(week-1)*4+1].minute<30))printf(" 早退");else {printf(" ");m++;}if((p->time[(week-1)*4+2].hour>14&&p->time[(week-1)*4+2].hour<25)||(p->time[(week-1) *4+2].hour==14&&p->time[(week-1)*4+2].minute>0))printf(" 迟到");elseif(p->time[(week-1)*4+2].hour==88&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&tim einfo->tm_min>30)))printf(" 旷工");elseif(p->time[(week-1)*4+2].hour==88&&(timeinfo->tm_hour<17||(timeinfo->tm_hour==17&&tim einfo->tm_min==30)))printf(" 无记录");else if(p->time[(week-1)*4+2].hour!=88){printf(" ");m++;}if((p->time[(week-1)*4+3].hour<17&&p->time[(week-1)*4+2].hour!=0)||(p->time[(week-1) *4+3].hour==17&&p->time[(week-1)*4+3].minute<30))printf(" 早退");else {printf(" ");m++;}if(m==4&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30))) printf(" 全勤!");p=p->next;}printf("\n\n显示完毕,按回车键返回主菜单!");getchar();getchar();system("cls");return;}void searchRec() /*根据工号或姓名查找考勤信息*/{worker *p=head;int c,i;char s[10],k[10];if(head==NULL){printf("\n\n\n\n\t\t\t数据库中没有职工信息\n\n\t\t\t无法使用该功能\n\n\t\t\t请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t请选择输入工号还是姓名:\n\n\t\t\t1.选择输入工号\n\n\t\t\t2.选择输入姓名\n\n");printf("\n\t\t您的选择(以回车键结束):");scanf("%s",k);if(fun(k)==0)return;elsec=atoi(k);if(c<1||c>2){printf("\n\n\t\t输入错误!\n\n\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;}system("cls");switch(c){case 1:{printf("\n\n\n\n\n\n\t\t\t请输入工号(以回车键结束):");scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t不存在该工号\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}case 2:{printf("\n\n\n\n\n\n\t\t\t请输入姓名(以回车键结束):");scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t不存在该姓名\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}}system("cls");printf("职工号姓名上午上班上午下班下午上班下午下班\n\n");printf(" %s %s",p->id,p->name);printf(" 周一");for(i=0;i<4;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute);if(i==4)printf("\n\n");}printf("\n 周二");for(i=4;i<8;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute);if(i==8)printf("\n\n");}printf("\n 周三");for(i=8;i<12;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute);if(i==12)printf("\n\n");}printf("\n 周四");for(i=12;i<16;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute);if(i==16)printf("\n\n");}printf("\n 周五");for(i=16;i<20;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute);if(i==20)printf("\n\n");}printf("\n\n\n\n\n\n\t\t\t显示完毕,按回车键返回主菜单!");getchar();getchar();system("cls");return;}void saveRec() /*储存所有信息*/{worker *p=head;FILE *fp,*key;int i;if(writeinfo_flag==0){printf("\n\n\n\n\t\t\t信息无改动,无需保存!\n\n\t\t\t请按回车键返回主菜单\n");getchar();getchar();system("cls");return;}if(writeinfo_flag==1){if((fp=fopen("workerRec.txt","w"))==NULL||(key=fopen("key.txt","w"))==NULL){printf("\n\t\t\t提示:\n\n\t\t\t存储信息失败!\n");printf("\n\t\t\t请按回车键进入主菜单重新开始\n");getchar();getchar();system("cls");return;}while(p!=NULL){fprintf(fp,"%s\n%s\n",p->id,p->name);for(i=0;i<20;i++)fprintf(fp,"%d\n%d\n",p->time[i].hour,p->time[i].minute);p=p->next;}fprintf(key,"%s",password);fclose(fp),fclose(key);writeinfo_flag=0; /*消除改动标志*/printf("\n\n\n\n\n\t\t\t保存完毕,按回车键继续!");getchar();getchar();system("cls");return;}}void deleteRec() //删除考勤信息*/{worker *p,*pre=head;char s[16],k[10];int c;if(head==NULL){printf("\n\n\n\n\t\t\t数据库中没有职工信息\n\n\t\t\t无法使用该功能\n\n\t\t\t请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t提示:\n\n\t\t\t初始密码为:888888\n");printf("\n\n\n\t\t\t请输入密码(密码不超过15个字符):");scanf("%s",s);while(strcmp(password,s)!=0){printf("\n\n\t\t\t密码错误!\n\n");printf("\t\t\t按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t密码输入成功!\n\n\t\t\t请按回车键继续");getchar();getchar();system("cls");printf("\n\n\n\t\t\t请选择输入工号还是姓名:\n\n\t\t\t1.选择输入工号\n\n\t\t\t2.选择输入姓名\n\n");printf("\n\t\t您的选择(以回车键结束):");scanf("%s",k);if(fun(k)==0)return;elsec=atoi(k);if(c<1||c>2){printf("\n\n\t\t输入错误!\n\n\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;}system("cls");switch(c){case 1:{printf("\n\n\n\n\n\n\t\t\t请输入工号:");scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t不存在该工号\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}case 2:{printf("\n\n\n\n\n\n\t\t\t请输入姓名:");scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t不存在该姓名\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}}system("cls");if(p==head)head=p->next;else{for(;pre->next!=p;pre=pre->next);pre->next=p->next;}free(p);printf("\n\n\n\n\n\n\t\t\t删除成功,请按回车键返回主菜单!");getchar();getchar();system("cls");writeinfo_flag=1;return;}void modifyRec() /*修改考勤信息*/{worker *p,*pre=head;char s[16],k[10];int c;if(head==NULL){printf("\n\n\n\n\t\t\t数据库中没有职工信息\n\n\t\t\t无法使用该功能\n\n\t\t\t请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t提示:\n\n\t\t\t初始密码为:888888\n");printf("\n\n\n\t\t\t请输入密码(密码不超过15个字符):");scanf("%s",s);if(strcmp(password,s)!=0){printf("n\n\n\t\t\t密码错误!\n\n");printf("\t\t\t按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t密码输入成功!\n\n\t\t\t请按回车键继续");getchar();getchar();system("cls");printf("\n\n\n\t\t\t请选择通过工号修改还是姓名修改:\n\n\t\t\t1.选择输入工号\n\n\t\t\t2.选择输入姓名\n\n");printf("\n\n\n\t\t您的选择(以回车键结束):");scanf("%s",k);if(fun(k)==0)return;elsec=atoi(k);if(c<1||c>2){printf("\n\n\t\t输入错误!\n\n\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;}system("cls");switch(c){case 1:{printf("\n\n\n\n\n\n\t\t\t请输入工号:");scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t不存在该工号\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}case 2:{printf("\n\n\n\n\n\n\t\t\t请输入姓名:");scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t不存在该姓名\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}}system("cls");printf("\n\n\n\t\t\t请选择要修改的内容:\n\n\t\t\t1.工号\n\n\t\t\t2.姓名\n\n\t\t\t3.上午上班时间\n\n\t\t\t4.上午下班时间\n\n\t\t\t5.下午上班时间\n\n\t\t\t6.下午下班时间");printf("\n\n\n\t\t您的选择(以回车键结束):");scanf("%s",&k);if(fun(k)==0)return;elsec=atoi(k);if(c<1||c>6){printf("\n\n\t\t输入错误!\n\n\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;}system("cls");switch(c){case 1:printf("\n\n\n\t\t请输入要修改的工号(至多10个字符):");scanf("%s",p->id);break;case 2:printf("\n\n\n\t\t请输入要修改的姓名(至多10个字符):");scanf("%s",p->name);break;case 3:printf("\n\n\n\t\t请输入要修改星期几的考勤(请输入1~5):");scanf("%d",&c);printf("\n\n\n\t请输入要修改的时间和分钟(如:10点5分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4].hour,&p->time[(c-1)*4].minute);break;case 4:printf("\n\n\n\t\t请输入要修改星期几的考勤(请输入1~5):");scanf("%d",&c);printf("\n\n\n\t请输入要修改的时间和分钟(如:10点5分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+1].hour,&p->time[(c-1)*4+1].minute);break;case 5:printf("\n\n\n\t\t请输入要修改星期几的考勤(请输入1~5):");scanf("%d",&c);printf("\n\n\n\t请输入要修改的时间和分钟(如:10点5分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+2].hour,&p->time[(c-1)*4+2].minute);break;case 6:printf("\n\n\n\t\t请输入要修改星期几的考勤(请输入1~5):");scanf("%d",&c);printf("\n\n\n\t请输入要修改的时间和分钟(如:10点5分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+3].hour,&p->time[(c-1)*4+3].minute);break;}printf("\n\n\n\t\t\t修改成功,请按回车键返回主菜单!");getchar();getchar();system("cls");writeinfo_flag=1;return;}void resetPassword() /*重设密码*/{char s[16];printf("\n\n\n\t\t提示:\n\n\t\t初始密码为:888888\n");printf("\n\t\t请输入密码(密码不超过15个字符):");scanf("%s",s);if(strcmp(password,s)!=0){printf("\n\n\n\t\t密码错误!\n\n");printf("\n\n\n\t\t按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\t\t密码输入成功!\n\n\t\t请按回车键继续");getchar();getchar();system("cls");printf("\n\n\n\t请输入要修改的密码(密码不超过15个字符):");scanf("%s",s);strcpy(password,s);printf("\n\n\t修改成功,请按回车键返回主菜单!");getchar();getchar();system("cls");writeinfo_flag=1;return;}void welcome() //欢迎界面{printf("\n\n\n\n\n\n\n\t\t\t 欢迎使用职工考勤管理系统");printf("\n\n\n\t\t\t请按任意键进入系统,开始您的操作");printf("\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t作者:XXX");getch();system("cls");return;}int fun(char *g){do{if(*g<'0'||*g>'9'){printf("\n\n\t\t输入错误!\n\n\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return 0 ;}g++;}while(*g!=0);return 1;}。
考勤管理的实验报告

一、实验背景随着信息技术的飞速发展,考勤管理已经成为企业管理中不可或缺的一部分。
传统的手工考勤方式存在诸多弊端,如易出错、效率低、管理难度大等。
为了提高企业考勤管理的效率,降低管理成本,我们开展了考勤管理系统的实验研究。
二、实验目的1. 熟悉数据库的基本概念和操作方法;2. 掌握SQL语言在数据库中的应用;3. 熟悉考勤管理系统的设计思路和实现方法;4. 培养团队合作能力和动手实践能力。
三、实验内容1. 数据库设计(1)需求分析根据企业考勤管理的需求,分析出以下主要功能:①员工信息管理:包括员工的基本信息、部门信息、岗位信息等;②考勤管理:包括打卡记录、请假记录、加班记录等;③考勤统计:根据考勤数据生成考勤报表;④权限管理:设置不同角色的权限,保证数据安全。
(2)数据库设计根据需求分析,设计如下数据库表:①员工信息表(Employee):包含员工编号、姓名、性别、出生日期、部门编号、岗位编号等字段;②部门信息表(Department):包含部门编号、部门名称、上级部门编号等字段;③岗位信息表(Position):包含岗位编号、岗位名称、岗位描述等字段;④打卡记录表(ClockIn):包含打卡记录编号、员工编号、打卡时间、打卡类型等字段;⑤请假记录表(Leave):包含请假记录编号、员工编号、请假时间、请假原因等字段;⑥加班记录表(Overtime):包含加班记录编号、员工编号、加班时间、加班原因等字段;⑦权限表(Role):包含角色编号、角色名称、权限描述等字段。
2. 系统实现(1)系统界面设计根据功能需求,设计如下界面:①登录界面:用户输入用户名和密码,进入系统;②主界面:显示系统菜单,用户可根据需求选择相应功能;③员工信息管理界面:显示员工信息列表,用户可进行增删改查操作;④考勤管理界面:显示打卡记录、请假记录、加班记录等,用户可进行查询和修改操作;⑤考勤统计界面:根据考勤数据生成考勤报表,用户可查看报表内容;⑥权限管理界面:设置不同角色的权限,保证数据安全。
Java学生考勤系统含源代码

Java学生考勤系统含源代码本文档提供了一个基本的Java学生考勤系统的设计和实现,同时附有源代码。
该系统允许教师记录学生的考勤情况,并提供了一些相关功能。
系统功能1. 学生信息管理:系统允许教师添加、修改和删除学生的个人信息,包括姓名、学号和班级等。
2. 考勤记录管理:系统提供了考勤记录的管理功能,教师可以记录学生的出勤情况,包括出勤、缺勤和迟到等。
3. 考勤统计:系统能够根据考勤记录生成统计报表,包括每位学生的出勤率和出勤次数等。
4. 查询功能:教师可以根据学生的姓名或学号等信息进行查询,快速找到学生的考勤记录和个人信息。
5. 导出功能:系统支持将考勤统计报表导出为Excel或CSV等格式,方便教师进行数据分析和备份。
源代码以下是一个简单的Java学生考勤系统的源代码示例:// 导入所需的类和包public class StudentAttendanceSystem {// 定义学生的成员变量private String name;private int studentId;private String className;// 构造函数public StudentAttendanceSystem(String name, int studentId, String className) { = name;this.studentId = studentId;this.className = className;}// Getter和Setter方法// ...// 出勤记录管理方法public void markAttendance(String attendanceStatus) { // 记录学生的出勤情况// ...}// 考勤统计方法public void generateAttendanceReport() {// 生成考勤统计报表// ...}// 查询方法// ...// 导出功能方法// ...}// 主程序入口public class Main {public static void main(String[] args) {// 创建学生对象StudentAttendanceSystem student1 = new StudentAttendanceSystem("张三", 1001, "一班");// 调用相应的方法student1.markAttendance("出勤");student1.markAttendance("迟到");student1.generateAttendanceReport();// ...}}以上是一个简单的Java学生考勤系统的设计和实现示例,您可以根据实际需求进行扩展和修改。
学生考勤管理系统设计报告

C/C++程序设计专题实验报告题目:学生考勤管理系统设计班级:电子信息科学与技术131姓名:邬帅斌目录目录 0摘要。
....。
.。
.。
.。
..。
.。
.。
..。
.。
..。
..。
..。
.。
..。
...。
....。
21.设计要求和目的........................................................................................... 错误!未定义书签。
1。
1设计目的。
....。
.。
.。
....。
.。
.。
..。
....。
.。
.。
.。
.。
..。
(3)1。
2问题描述。
.。
.。
..。
.。
.。
...。
...。
.。
...。
.。
.。
..。
.。
..。
.。
.。
..。
..。
31.3功能要求。
...。
.。
.。
.。
..。
.。
.。
.。
.。
..。
.。
..。
.。
..。
...。
.。
..。
.。
..。
.3 1。
4问题的解决方案.。
.。
.。
..。
..。
.。
...。
..。
..。
.。
.。
..。
.。
...。
.。
.。
..。
32 设计思路和方法 (4)3主模块设计。
.。
..。
.。
...。
.。
....。
...。
.。
.。
..。
.。
.。
.。
..。
.。
.。
.....。
.。
.。
..。
.。
.。
.......。
.。
.。
...。
...。
.。
..。
..。
.。
.。
...........。
..。
.。
.。
.54.运行测试及结果 (13)5。
总结 (16)参考文献 (16)源代码.。
...。
.。
.。
.。
.。
.。
.。
.。
.。
.。
...。
..。
.。
.。
..。
...。
.。
....。
.。
.....。
..。
..。
..。
.。
..。
...。
..。
.。
..。
.。
..。
........。
.17摘要随着信息技术在管理上越来越深入的应用,管理信息系统的实施在技术上已经逐步成熟。
管理信息系统是一个不断发展的学科,任何单位要生存要发展,要提高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的信息管理系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录第一章信息系统概况 (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。