http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 7859|回复: 14

[咨询站长] 设计异常报表,但是没有思路

[复制链接]
发表于 2014-8-7 09:22:46 | 显示全部楼层 |阅读模式
1金钱
苏飞站长,我在设计人事异常报表时,却不知道如何开始。
数据:0代表进  1代表出
工号   刷卡日期  刷卡时间  进出类别
1        20140725  7:50        0
2        20140725  17:50       1
3        20140726  7:30         0
4       20140726  7:40         1
5       20140726  7:50         0


根据这些数据,我要进行成对的比较,进出为一对
那我如何去判断呢?

最佳答案

查看完整内容

循环楼上的算法就是你要的结果


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-8-7 09:22:47 | 显示全部楼层
循环楼上的算法就是你要的结果
回复

使用道具 举报

发表于 2014-8-7 10:40:34 | 显示全部楼层
先根据工号,根据把根据日期中的日来计算是不是成对就行了吧。
回复

使用道具 举报

 楼主| 发表于 2014-8-7 13:16:42 | 显示全部楼层
站长苏飞 发表于 2014-8-7 10:40
先根据工号,根据把根据日期中的日来计算是不是成对就行了吧。

但是又会出现其它问题,比如当天只有一笔进的数据,或只有一笔出的数据。而且工号会有3000多笔,如果一笔一笔去比较性能很慢的,苏飞站长,麻烦您帮忙哦!谢谢!
回复

使用道具 举报

发表于 2014-8-7 13:19:45 | 显示全部楼层
3000多算多吗, 就是30W也不会超过一秒吧,又不是你计算是计算机计算很快的。

只有一笔那就标注有问题啊,成对的而且时间对才是对的,比如下午5点到6点的是出,12点以前是是进,这个要看你们公司自己是怎么规定的,这就是典型的考勤系统,一步一步算就行了,没有那么增长的,安工号和天算就行,如果要算月的,也是一天一天的算,然后累计就行了。
回复

使用道具 举报

 楼主| 发表于 2014-8-7 13:21:38 | 显示全部楼层
[C#] 纯文本查看 复制代码
protected void Page_Load(object sender, EventArgs e)
        {
            //DateTime dt1 = DateTime.Parse("2014-07-26"); 
            //DateTime dt2 = DateTime.Parse("2014-07-30"); 
            DB coon = new DB();
            DataSet _ds = new DataSet();
            _ds = coon.ExecuteSql("Select hbdwno from hrshhbd where hbdmds=0 and hbdwno in('140300095','140201237 ')");
            if (_ds!=null)
            {
                for (int i = 0; i < _ds.Tables[0].Rows.Count; i++)
                {
                    CHECK_EMP(EMP_IN(_ds.Tables[0].Rows[i]["hbdwno"].ToString()), EMP_OUT(_ds.Tables[0].Rows[i]["hbdwno"].ToString()));
                }
            }

        }
        public DataSet EMP_IN(string str_no) 
        {
            DB coon = new DB();
            DataSet _ds = new DataSet();
            _ds = coon.ExecuteSql("Select * from hrms_visa where emp_no='" + str_no + "' and visa_type=0 order by visa_time");
            
            if (_ds == null) 
            {
                return null;
            }
            return _ds;
        }
        public DataSet EMP_OUT(string str_no)
        {
            DB coon = new DB();
            DataSet _ds = new DataSet();
            _ds = coon.ExecuteSql("Select * from hrms_visa where emp_no='" + str_no + "' and visa_type=1 order by visa_time desc");

            if (_ds == null)
            {
                return null;
            }
            return _ds;
        }

        public void CHECK_EMP(DataSet _dsIn, DataSet _dsOut)
        {
            if (_dsIn != null && _dsOut != null)
            {
                if (_dsIn.Tables[0].Rows.Count == _dsOut.Tables[0].Rows.Count)
                {
                    for (int i = 0; i < _dsIn.Tables[0].Rows.Count; i++)
                    {
                        if(i<_dsOut.Tables[0].Rows.Count)
                        {
                            //Response.Write(_dsIn.Tables[0].Rows[i]["emp_no"] + "|" + _dsIn.Tables[0].Rows[i]["visa_time"] + "|" + _dsIn.Tables[0].Rows[i]["visa_type"] );
                            //Response.Write(_dsOut.Tables[0].Rows[i]["emp_no"] + "|" + _dsOut.Tables[0].Rows[i]["visa_time"] + "|" + _dsOut.Tables[0].Rows[i]["visa_type"]);
                        }
                    }
                }
                else
                {
                    if (_dsIn.Tables[0].Rows.Count > _dsOut.Tables[0].Rows.Count)
                    {
                        for (int i = 0; i < _dsIn.Tables[0].Rows.Count; i++)
                        {
                            if (i < _dsOut.Tables[0].Rows.Count)
                            {
                                Response.Write(_dsIn.Tables[0].Rows[i]["emp_no"] + "|" + _dsIn.Tables[0].Rows[i]["visa_time"] + "|" + _dsIn.Tables[0].Rows[i]["visa_type"] + "----------");
                                Response.Write(_dsOut.Tables[0].Rows[i]["emp_no"] + "|" + _dsOut.Tables[0].Rows[i]["visa_time"] + "|" + _dsOut.Tables[0].Rows[i]["visa_type"] + "<br/>");
                            }
                            else 
                            {
                                Response.Write(_dsIn.Tables[0].Rows[i]["emp_no"] + "|" + _dsIn.Tables[0].Rows[i]["visa_time"] + "|" + _dsIn.Tables[0].Rows[i]["visa_type"] + "----------");
                                Response.Write("| 异常记录 |" + "<br/>");
                            }
                        }
                    }
                    else 
                    {
                        for (int i = 0; i < _dsOut.Tables[0].Rows.Count; i++)
                        {
                            if (i < _dsIn.Tables[0].Rows.Count)
                            {
                                Response.Write(_dsIn.Tables[0].Rows[i]["emp_no"] + "|" + _dsIn.Tables[0].Rows[i]["visa_time"] + "|" + _dsIn.Tables[0].Rows[i]["visa_type"] + "----------");
                                Response.Write(_dsOut.Tables[0].Rows[i]["emp_no"] + "|" + _dsOut.Tables[0].Rows[i]["visa_time"] + "|" + _dsOut.Tables[0].Rows[i]["visa_type"] + "<br/>");
                            }
                            else 
                            {
                                Response.Write("| 异常记录 |" + "----------");
                                Response.Write(_dsOut.Tables[0].Rows[i]["emp_no"] + "|" + _dsOut.Tables[0].Rows[i]["visa_time"] + "|" + _dsOut.Tables[0].Rows[i]["visa_type"] + "<br/>");
                                
                            }
                        }
                    }
                    

                }
            }
            
        }


这是我的代码
回复

使用道具 举报

 楼主| 发表于 2014-8-7 13:24:49 | 显示全部楼层
站长苏飞 发表于 2014-8-7 13:19
3000多算多吗, 就是30W也不会超过一秒吧,又不是你计算是计算机计算很快的。

只有一笔那就标注有问题啊 ...

那苏飞站长帮忙看一下,是不是我的代码问题呢?谢谢!
回复

使用道具 举报

发表于 2014-8-7 14:08:45 | 显示全部楼层
dilenzhu 发表于 2014-8-7 13:24
那苏飞站长帮忙看一下,是不是我的代码问题呢?谢谢!

太复杂了,程序的高境界是使用最简单的技术或者是代码实现最复杂的逻辑,你搞复杂了。

先从数据库查询出一天的记录,然后安工号不同进行分组,然后直接计算成对的就行了。  这样比较简单一些。

回复

使用道具 举报

 楼主| 发表于 2014-8-7 14:56:32 | 显示全部楼层
站长苏飞 发表于 2014-8-7 14:09
循环楼上的算法就是你要的结果

谢谢您!苏飞站长,我尝试一下!受教了,学习中……
回复

使用道具 举报

发表于 2014-8-7 15:00:28 | 显示全部楼层
dilenzhu 发表于 2014-8-7 14:56
谢谢您!苏飞站长,我尝试一下!受教了,学习中……

好的,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-1 16:53

© 2014-2021

快速回复 返回顶部 返回列表