asp.net_sql2008公司人事管理系统

登录模块

  1. 流程图:
    在这里插入图片描述

◆ 职工输入用户名、密码并选择登录身份,根据选择的身份做不同的操作
◎ 若选择的是“职工”,系统将查询数据库中的用户表Users的记录,用户名密码核对正确后加载职工主界面;
◎ 若选择的是“管理员”,系统将查询数据库中的管理员表Adms的记录,用户名密码核对正确后加载管理员主界面;
◎ 若选择的是“超级管理员”,系统将查询数据库中的用户表SuperAdms的记录,用户名密码核对正确后加载超级管理员主界面;
◎ 三种身份,若用户名、密码核对不正确,弹出提示消息框:“用户名或密码错误!”。

  1. 界面设计及代码如下:
    在这里插入图片描述

◎ 用到的控件字段名、方法及变量有:
※ 控件:
用户名文本框名称:Login_UserNametxt
密码文本框名称:Login_UserPWtxt
身份下拉列表名称:Login_Rolecom
登录标签名称:Login_Enterlab
退出标签名称:Login_Esclab
※ 变量:
UserChange uc = new UserChange(); //处理登录业务类的实例
※ 调用方法:
uc.GetUser(user); //核对一般职工的用户名、密码;
uc.GetAdm(adm); //核对管理员的用户名、密码;
uc.GetSupAdm(supadm); //核对超级管理员的用户名、密码。

◎ “登录”标签的单击事件:

private void Login_Enterlab_Click(object sender, EventArgs e){usertype = Login_Rolecom.Text;try{if (usertype == "职工"){User user = new User();user.StaffID = Login_UserNametxt.Text.Trim();user.UserPW = Login_UserPWtxt.Text.Trim();count = uc.GetUser(user);}else if (usertype == "管理员"){Adm adm = new Adm();adm.AdmName = Login_UserNametxt.Text.Trim();adm.AdmPW = Login_UserPWtxt.Text.Trim();count = uc.GetAdm(adm);}else if (usertype == "超级管理员"){SuperAdm supadm = new SuperAdm();supadm.SuperAdmName = Login_UserNametxt.Text.Trim();supadm.SuperAdmPW = Login_UserPWtxt.Text.Trim();count = uc.GetSupAdm(supadm);}if (count > 0){this.DialogResult = DialogResult.OK;username = Login_UserNametxt.Text;this.Close();}else{MessageBox.Show("用户或密码错误!");}}catch (Exception exc){MessageBox.Show(exc.Message);}}

◎ “退出”标签的单击事件:

private void Login_Esclab_Click(object sender, EventArgs e){this.Close();}

4.2 职工考勤模块

  1. 流程图:
    在这里插入图片描述

◆ 成功登录系统后
◎ 所有的职工都可以进行上下班打卡操作,每个职工每天只允许打一次上班卡和一次下班卡;上班打卡时间为每天的am 6:00 – 12:00,12点整截止,下班打卡时间为每天的pm12:00-22:00,22点整截止。
◎ “超级管理员”登录,系统会在每天中午12点和每天晚上22点查询数据库中的职工表Staffs的记录,对未打卡的员工分别在上下班打卡记录表中标记为未打卡;必须保证每天这两个时间段超级管理员处于登录状态才能完成上下班考勤记录。
2. 打卡界面设计及代码如下:
在这里插入图片描述

◎ 用到的控件字段名、方法及变量有:
※ 控件:
上班打卡按钮名称:Login_UserNametxt
下班打卡按钮名称:Login_UserPWtxt
※ 变量:
staffed //登录员工的职工ID
DateTime time;//记录当前时间
ClickCardOpt Copt = new ClickCardOpt();//处理打卡业务类的实例
※ 调用方法:
Copt.AddClockRecord(“StartClockRecords”, srecord) ; //添加上班打卡记录
Copt.AddClockRecord(“EndClockRecords”, erecord) ; //添加下班打卡记录
GetWorkingTime(“上班”); //获取上班时间表WorkingTimes的上班时间
GetWorkingTime(“下班”); //获取上班时间表WorkingTimes的下班时间
◎ “上班打卡”按钮的单击事件:

private void Clock_SDKbtn_Click(object sender, EventArgs e){int hour = Convert.ToInt32(time.Hour);if (hour < 6 || hour >= 12) //6-12点打上班卡时间{MessageBox.Show("抱歉,现在不是打卡时间!");}else{string workingtime = GetWorkingTime("上班");string[] worktimes = workingtime.Split(':');int workhour = Convert.ToInt32(worktimes[0]);int workminute = Convert.ToInt32(worktimes[1]);StartClockRecord srecord = new StartClockRecord();srecord.SClockTime = time;if (time.Hour > workhour || time.Hour == workhour && time.Minute > workminute){srecord.SClockstatusID = 2;}else{srecord.SClockstatusID = 1;}srecord.StaffID = staffid;}if (Copt.AddClockRecord("StartClockRecords", srecord)){MessageBox.Show(staffid + "打卡成功!");}else{MessageBox.Show(staffid +"你已经打过上班卡了!");}}}

◎ “下班打卡”按钮的单击事件:

private void Clock_EDKBtn_Click(object sender, EventArgs e){int hour = Convert.ToInt32(time.Hour);if (hour <= 11 || hour >= 22) //12-22点打下班卡时间{MessageBox.Show("抱歉,现在不是打卡时间!");}else{string workingtime = GetWorkingTime("下班");string[] worktimes = workingtime.Split(':');int workhour = Convert.ToInt32(worktimes[0]);int workminute = Convert.ToInt32(worktimes[1]);EndClockRecord erecord = new EndClockRecord();erecord.EClockTime = time;if (time.Hour < workhour || time.Hour == workhour && time.Minute < workminute){erecord.EClockstatusID = 3;}else{erecord.EClockstatusID = 1;}erecord.StaffID = staffid;              if (Copt.AddClockRecord("EndClockRecords", erecord)){MessageBox.Show(staffid + "打卡成功!");}else{MessageBox.Show(staffid + "你已经打过下班卡了!");}}}
  1. 超级管理员登录后主窗体处理未打卡职工的后台代码:
    ◎ 用到的控件字段名、方法及变量有:
    ※ 控件:
    计时器名称:Index_timer
    ※ 变量:
    DateTime time;//记录当前时间
    ClickCardOpt Copt = new ClickCardOpt();//处理打卡业务类的实例
    ※ 调用方法:
    Copt.PerfectSClockRecords(); //插入未打卡职工的上班打卡标记
    Copt.PerfectEClockRecords(); //插入未打卡职工的下班打卡记录
    ◎ 主窗体的Load事件
private void index_Load(object sender, EventArgs e)
{
if (usertype == "超级管理员"){this.Index_timer.Interval = 60000;
this.Index_timer.Tick += new System.EventHandler(this.Index_timer_Tick);}
}
◎	计时器的Tick事件
private void Index_timer_Tick(object sender, EventArgs e){time = DateTime.Now;//每天中午12点整完成上班打卡记录表的录入if (time.Hour == 12 && time.Minute == 0){Copt.PerfectSClockRecords();}//每天晚上22点整完成下班打卡记录表的录入if (time.Hour == 22 && time.Minute == 0){Copt.PerfectEClockRecords();}}

链接:https://pan.baidu.com/s/1Xwd0U_KktL0hRFPaggIOGQ?pwd=6688
提取码:6688

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/196305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你搭建个人地图服务器(高德离线部署解决方案):获取地图瓦片数据、高德JS API、私有化部署和调用。。。

一、概述 众所周知&#xff0c;目前常见的地图&#xff08;高德、百度、腾讯等&#xff09;只提供在线API服务&#xff0c;对于一些内网应用而言&#xff0c;如果需要使用地图展示&#xff0c;则由于不能访问互联网而无法使用类似的第三方地图服务。 本文&#xff0c;通过将高…

【刷题日志】牛客 HJ73 计算日期到天数转换

计算日期到天数转换 阅读题目解题方案 及 解题思路方法一 . 手撕日期类方法二 . 分别直接算出平年和闰年每个月的时间 并对应下标存入数组中&#xff0c;判断该年份为平年还是闰年&#xff0c;再 for循环依次求和优化&#xff1a;也不用分别算出平年和闰年的每个月的时间&#…

win10、11系统安装班智达藏文输入法并正常使用(完美解决)

1. 结果图 2. 先闲聊两句 班智达输入法对于藏语初学者可谓是太好用了&#xff08;哈哈&#xff09;特别是联想提示的功能。不禁为开发团队点个赞。 表扬完了该批评批评了。班智达输入法的安装难度真是一言难尽。也许是开发者没有继续维护的缘故吧。想当年&#xff0c;哪个藏语…

DCDC电源的选择

https://blog.csdn.net/xiahailong90/article/details/79086490 先说结论&#xff1a; 高开关频率的交换式电源转换器有利也有弊&#xff0c;本文提到的好处包括体积更小、瞬时响应更快以及电压overshoot 和undershoot 值都更小&#xff0c;主要缺点则是效率降低和热量增加。 …

朋友圈7大黄金发圈时间

众所周知&#xff0c;朋友圈运营是私域运营必不可少的重要环节。 因为做好朋友圈运营&#xff0c;能够打造形成高质量、高价值的私域流量&#xff0c;加快实现用户成交。 那么如何形成一个吸粉又吸金的人设&#xff0c;做出高质量的朋友圈发圈内容呢&#xff1f; 那么如何确保能…

光纤和光模块的那点事儿

你们好&#xff0c;我的网工朋友。 应该不少朋友在工作中会遇到光纤传输布线的活吧&#xff0c;不得不说&#xff0c;会遇上的问题还挺多&#xff0c;比如说…… 光纤收发器怎么接上不亮&#xff1f; 光纤收发器和交换机插光模块能不能搭配使用&#xff1f; 带光口的球机可…

第1章 理解知识图谱:知识图谱现状、知识图谱应用场景(二)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

执行栈和执行上下文

前端面试大全JavaScript执行栈和执行上下文 &#x1f31f;经典真题 &#x1f31f;执行上下文 &#x1f31f;栈数据结构 &#x1f31f;执行上下文生命周期 &#x1f31f;真题解答 &#x1f31f;总结 &#x1f31f;经典真题 谈谈你对 JavaScript 执行上下文栈理解 &#…

如何将unity项目托管到github(快速便捷)

如何将unity项目托管到github&#xff08;快速便捷&#xff09; 文章目录 如何将unity项目托管到github&#xff08;快速便捷&#xff09;前置准备Gitgithubgit-lfs 具体操作1.配置.gitignore文件2.配置.gitattributes3.使用git 前置准备 Git github git-lfs 这些内容省略&…

你的AI生成物侵权了吗?

你的AI生成物侵权了吗&#xff1f; 本文目录&#xff1a; 一、前置背景 1.1、什么是版权 1.2、什么是作品 1.3、什么是创作 1.4、什么是肖像权 1.5、什么是名誉 二、AI生成的作品是否具备版权&#xff1f;如果具备&#xff0c;版权应该属于谁&#xff1f; 三、AI 学习时…

ruby安装(vscode、rubymine)

https://rubyinstaller.org/downloads/ 下载exe安装即可 会弹出 输入3 安装成功 vscode插件市场安装ruby插件 新建一个目录&#xff0c;打开terminal bundle init //进行初始化&#xff08;如果执行不了&#xff0c;应该是环境变量没生效&#xff0c;重启vscode&#…

菜鸟学习日记(python)——数据类型转换

在python中&#xff0c;数据类型的转换有两种方式&#xff1a;隐式类型转换和显示类型转换。 隐式类型转换一般在进行计算时&#xff0c;自动完成转换&#xff0c;显示类型转换一般要用到类型函数来完成转换&#xff0c;它的格式为&#xff1a;数据类型&#xff08;要转换的数…

使用Docker和Selenium构建自动化测试环境

随着软件开发的日益复杂和迭代速度的加快&#xff0c;自动化测试被越来越广泛地应用于软件开发流程中。它能够提高测试效率、减少测试成本&#xff0c;并保证软件质量的稳定性。在构建自动化测试环境方面&#xff0c;Docker 和 Selenium 是两个非常有用的工具。下面将介绍如何使…

springboot流浪动物救助管理系统源码丨文档+调试+答疑

&#x1f345; 简介&#xff1a;500精品计算机源码学习 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 文末获取源码 目录 一、以下学习内容欢迎领取&#xff1a; 二、文档资料截图&#xff1a; 三想了解更多&#xff0c;请收藏、评论、留言&#xff1a;…

项目实战-编写ssm整合配置文件

1、父工程pom.xml <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>…

【每日一题】1038. 从二叉搜索树到更大和树-2023.12.4

题目&#xff1a; 1038. 从二叉搜索树到更大和树 给定一个二叉搜索树 root (BST)&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下&#xff0c; 二叉搜索树 满足下列约束条件&#xff1a; 节点的左子树仅包含键 小于 节点键的节点。…

[SaaS] 天猫商品海报生成 灵感艺术家

AIGC在天猫商品海报生成上的探索没有灵感GPT&#xff0c;画不出来SD。https://mp.weixin.qq.com/s/_CkkqoWmHDZ0YqAhmAhL1A天猫在海报图生成上的探索。 技术路线&#xff1a; 初看不觉得什么&#xff0c;细看还真有点不一样&#xff0c;通常我们用canny controlnet是为了控制商…

人工智能发展史

人工智能&#xff08;AI&#xff09;的发展史是一段跨越数十年的旅程&#xff0c;涵盖了从早期理论探索到现代技术革新的广泛内容。人工智能的发展历程展示了从最初的概念探索到现代技术突破的演变。尽管经历了多次起伏&#xff0c;但AI领域持续进步&#xff0c;不断拓展其应用…

【性能测试】资深老鸟总结,常见并发问题汇总(二)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、极限值并发的问…

【C++】赋值运算符重载

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …