| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1621 人关注过本帖
标题:可以用VB6编写考勤读取程序吗?求大神来看看
只看楼主 加入收藏
core556
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-22
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
可以用VB6编写考勤读取程序吗?求大神来看看
可以用VB6编写考勤读取程序吗?
比如我想用VB6读取TXT文本里的数据,因为考勤数据是文本形式
我想用VB读取,读取名字,工号,自动计算迟到次数,未打卡次数(未打卡是几号)

在TAXT上显示出来, 这些VB能编写出来吗,能的话,该如何进行编写呢,

求大神给个步骤,和启发,谢谢了

本人VB不到2年,在学习中。
搜索更多相关主题的帖子: 如何 
2015-04-22 16:57
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:7 
vb可以实现,需要了解文本的数据格式

大开眼界
2015-04-22 17:17
core556
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-22
收藏
得分:0 
文本格式是这

姓名    时间        ID
XXX   XXXX-XX-XX   XXXX


如何起步

2015-04-22 17:31
core556
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-22
收藏
得分:0 
有什么办法可以在这种形式情况下

用VB编写出程序,计算考勤迟到次数,未打卡次数呢

2015-04-22 17:33
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:7 
多大的规模的数据。
一、大规模的数据,需要借助数据库来处理。
流程:二张表。
1号表,保存原始数据,把TXT,转为表。
2号表,保存每个人的考勤状态。每人一行。
如:(以每人每天四次考勤计算,不计加班)
ID,姓名,年,月,D1_1,D1_2,D1_3,D1_4,D2_1,D2_2 ....

处理流程:读1号表,然后根据时间,对应写对2号表对应的 位置和 字段中去,写状态。

张三  2015-4-1 08:10   8103
就写
ID=8103,
姓名=张三,
年= 2015
月=4
D4_1,写入 2 (假如代码为:0=未打卡,1=正常,2=迟到,3=早退,4=请假,5=.....)
张三  2015-4-1 12:10   8103
那么
D4_2 写入 1

这样处理后,直接使用2号表就可以很容易统计出来的。一个字段一个字段的统计就是了。

2号表,如果你偷懒,也可以这样设计
ID,姓名,年,月,日,次,状态
第一记录是
8103,张三,2015,4,1,1,2
8103,张三,2015,4,1,2,1
统计未打卡次数时,用该月的应打卡次数-查询出来的记录数 。

二、小规模数据,那么就直接到内存里统计然后显示出来吧。
方法,方式差不多。只是保存的数据是使用数组而以。

授人于鱼,不如授人于渔
早已停用QQ了
2015-04-22 18:04
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
没时间去弄,刚想到什么就写的什么,随手写的。自己多琢磨一下吧。

授人于鱼,不如授人于渔
早已停用QQ了
2015-04-22 18:04
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:7 
打卡机都自带数据库,你只要按它的数据库格式写相应程序即可。

能编个毛线衣吗?
2015-04-22 18:39
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
回复 4楼 core556
风吹过b版主说得清楚了,提醒两点。
1、读入TXT数据后要预处理,如果作息时间是早九晚五,24小时制,是否考虑以零点和12点为分隔,9~12为迟到,12~17为早退。象我这样健忘的人,早上可能不只打一次卡。另外中间外出是否也要求打卡。是不是要去除中间纪录,至多保留最早最晚的记录,当然也有只打一次的情况。
2、统计时要考虑休假日,可能针对每个人除了法定节假日外还有工休之类,是不是每个人要对应一张休假日表,比如统计张三出勤情况时,只考虑他休假日表以外的日期。
...
每人每天(除休息日)如下表进行时间区间内有无记录的判断,得到每天的状态。
[attach]79925[/attach]
帮你开个头,示个例。通过点击按钮获得某人某天的出勤情况。MDB文件要有姓名,日期,时间字段。
程序代码:
Option Explicit

Dim conn As New ADODB.Connection
Dim rs1 As New ADODB.Recordset


Dim Str1 As String
Dim Str2 As String
Dim Str3 As String
Dim strSQL As String
Dim existName As Boolean
Dim existDate As Boolean

Const EaliestTime As Date = #12:00:00 AM#
Const StartTime As Date = #8:00:00 AM#
Const MiddleTime As Date = #12:00:00 PM#
Const EndTime As Date = #5:00:00 PM#
Const LastestTime As Date = #11:59:59 PM#


Private Sub Combo1_Click()
rs1.Close
strSQL = "select * from Attendance where 姓名='" & Combo1.Text & "'"
rs1.Open strSQL, conn, 1, 1
Set MSHFlexGrid1.DataSource = rs1
End Sub


Private Sub Combo2_Click()
rs1.Close
strSQL = "select * from Attendance where 姓名='" & Combo1.Text & "'" & "and 日期=#" & Combo2.Text & "#"
rs1.Open strSQL, conn, 1, 1
Set MSHFlexGrid1.DataSource = rs1
End Sub

Private Sub Command1_Click()
Dim i As Integer
Dim status As String '0:normal 1:late 2:early 3:absent
Dim TimePeriod(3) As Boolean

Text1.Text = Combo1.Text & " " & Combo2.Text & "出勤情况" & vbCrLf
Do While Not rs1.EOF
   If (rs1("时间") < StartTime) Then TimePeriod(0) = True
   If (rs1("时间") > StartTime And rs1("时间") < MiddleTime) Then TimePeriod(1) = True
   If (rs1("时间") > MiddleTime And rs1("时间") < EndTime) Then TimePeriod(2) = True
   If (rs1("时间") > EndTime And rs1("时间") < LastestTime) Then TimePeriod(3) = True
     rs1.MoveNext
Loop
If TimePeriod(0) And TimePeriod(3) Then status = "正常"
If Not (TimePeriod(0)) And TimePeriod(3) Then status = "迟到"
If TimePeriod(0) And Not (TimePeriod(3)) Then status = "早退"
If Not (TimePeriod(0)) And Not (TimePeriod(1)) And Not (TimePeriod(2)) And Not (TimePeriod(3)) Then status = "旷工"
Text1.Text = Text1.Text & status

End Sub

Private Sub Form_Load()
Str1 = "Provider=Microsoft.Jet.OLEDB.4.0;"
Str2 = "Data Source=c:\test.mdb;"
Str3 = "Jet OLEDB:Database Password="
conn.Open Str1 & Str2 & Str3
strSQL = "select * from Attendance "
rs1.Open strSQL, conn, 1, 1
Set MSHFlexGrid1.DataSource = rs1
iniCombo

End Sub

Sub iniCombo()
Dim i As Integer
Do While Not rs1.EOF
  existName = False
  existDate = False
  For i = 0 To rs1.RecordCount
    If (rs1("姓名") = Combo1.List(i)) Then existName = True: Exit For
  Next
  For i = 0 To rs1.RecordCount
    If (rs1("日期") = Combo2.List(i)) Then existDate = True: Exit For
  Next
  If existName = False Then Combo1.AddItem rs1("姓名")
  If existDate = False Then Combo2.AddItem rs1("日期")

 
  rs1.MoveNext
Loop
Combo1.Text = "选择姓名"
Combo2.Text = "选择日期"
End Sub


[ 本帖最后由 lianyicq 于 2015-4-23 14:45 编辑 ]

大开眼界
2015-04-23 09:42
快速回复:可以用VB6编写考勤读取程序吗?求大神来看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039308 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved