制作一个考勤表格如何实现鼠标拖动选择多个单元格然后右键菜单实现批量考勤 80C

图片说明

用bootstraptable做了一个考勤的表格。
请问怎么鼠标拖动怎么选取多个单元格弹出菜单然后批量设置呢?

html代码

<button class="btn btn-primary" type="button" id="searchBtn_Table" onclick="ifnull()">查询</button>
<div class="col-sm-12" id="singlelast">

</div>

js

function ifnull() {
            if ($("#TeamGroupName").val() == "0") {
                zcy.alert.error("请选择需要查询的班组");
                return false;
            }
            if ($("#date").val() == "") {
                zcy.alert.error("请选择需要查询的时间");
                return false;
            }
            //get数据
            getAttendanceResult();
            //加载表头日期
            var date = $("#date").val();
            var year = parseInt(date.split("-")[0]);
            var month = parseInt(date.split("-")[1]);
            var daycount = getLastDay(year, month); //得到选中月份的最大天数
            MaxDays = daycount;
            selectYear = year;


            $("#singlelast").empty();
            $("#singlelast").append("<table id='tablesinglelast' data-toggle='table' align='center' ></table>")
            var appendPos = $("#tablesinglelast");
            //$("#tablesinglelast").bootstrapTable('destroy');

            appendPos.append("<thead><tr>"+
                "<th data-field='EmployeeId' rowspan='2' id='employeeName' data-valign='middle' data-align='center'> 工号</th > " +
                "<th id='lineTd' data-field='EmployeeName' data-valign='middle' rowspan='2' data-align='center'>" +
                "<span style='float:left;margin-top:20px;'>姓名</span>" +
                "<span style='float:left;margin-top:-10px;'>日期</span>"+
                "</th > " +
                "<th data-formatter='OvertimeLength' data-valign='middle' colspan='2' data-align='center'>加班</th>" +
                "<th data-formatter='Askleavelength' data-valign='middle' colspan='2' data-align='center'>请假</th>" +
                "<th  data-valign='middle' data-align='center'>工伤</th>" +
                "</tr><tr></tr></thead>");
            //加载table_foot
            var table_foot = $("#table_foot");
            table_foot.css("display","block");
            for (var i = 1; i <= daycount; i++) {
                var appendPos2 = $("#tablesinglelast").children().eq(0).children().eq(0).children().eq(i+1 - 1);
                appendPos2.after("<th data-valign='middle' colspan='1'  data-align='center'>" + i + "</th>");

            }
            for (var i = 1; i <= daycount; i++) {
                var appendPos3 = $("#tablesinglelast").children().eq(0).children().eq(1);
                var month2 = (month > 9) ? ("" + month) : ("0" + month);
                var day = (i > 9) ? ("" + i) : ("0" + i);
                var heredate = year + "-" + month2 + "-" + day;
                var weekday = new Date(heredate).getDay();
                text = "";
                switch (weekday) {
                    case 0:
                        text = "日";
                        break;
                    case 1:
                        text = "一";
                        break;
                    case 2:
                        text = "二";
                        break;
                    case 3:
                        text = "三";
                        break;
                    case 4:
                        text = "四";
                        break;
                    case 5:
                        text = "五";
                        break;
                    case 6:
                        text = "六";
                        break;
                }
                appendPos3.append("<th data-formatter='DateAttendance' data-align='center' data-field='" + year + "-" + month2 + "-" + day + "'>" + text + "</th>");
                selectMonth = month2;
            }
            var appendPos3 = $("#tablesinglelast").children().eq(0).children().eq(1);
            appendPos3.append("<th data-formatter='OverDay' data-align='center'>天</th>"+
                "<th data-formatter='OverHour' data-align='center'>时</th>"+
                "<th data-formatter='AskleaveDay' data-align='center'>天</th>"+
                "<th data-formatter='AskleaveHour' data-align='center'>时</th>"+
                "<th data-align='center'>天</th>"
            );
            $('.context').contextmenu({
                target: '#context-menu',
                before: function (e, context) {    // execute code before context menu if shown
                }, onItem: function (context, e) {    // execute on menu item selection
                }
            });
            readyTable();
            $("#singlelast tr td").addClass();


        }

        function getLastDay(year, month) {
            var new_year = year;  //取当前的年份
            var new_month = month++;//取下一个月的第一天,方便计算(最后一天不固定)
            if (month > 12)      //如果当前大于12月,则年份转到下一年
            {
                new_month -= 12;    //月份减
                new_year++;      //年份增
            }
            var new_date = new Date(new_year, new_month, 1);        //取当年当月中的第一天
            return (new Date(new_date.getTime() - 1000 * 60 * 60 * 24)).getDate();//获取当月最后一天日期
        }
        function readyTable() {
            $("#tablesinglelast").bootstrapTable({
                //bootstraptable 插件
                pageNumber: 1,                       //初始化加载第一页,默认第一页
                pageSize: 10,                       //每页的记录行数(*)
                pageList: [10, 20, 30],
                pagination: true,                   //是否显示分页(*)
                sortable: true,                     //是否启用排序
                sortOrder: 'asc',
                striped: true,                      //行间隔色                          
                showExport: true,                     //是否显示导出
                exportDataType: 'all',
                search: true,
                detailView: false,//父子表
                onExpandRow: function (index, row, $detail) {
                    oInitInitSubTable(index, row, $detail);
                }
            });
        }
        function getAttendanceResult() {
            var TeamGroupId = $("#TeamGroupName").val();
            var date = $("#date").val();
            $.ajax({
                url: "/Employee/getAttendanceResult",
                type: "post",
                dataType: 'json',
                data: {
                    "TeamGroupId": TeamGroupId,
                    "date": date,
                },
                success: function (data) {
                    chkData = eval(data);
                    $('#tablesinglelast').bootstrapTable('load', chkData);
                },
                error: function () {
                    zcy.alert.error("获取考勤表失败");
                }
            });
        }

我用bootstrap-table-contextmenu 在getAttendanceResult实现了一个右键菜单

function getAttendanceResult() {

            //鼠标右键菜单
            $('#tablesinglelast').bootstrapTable({
                contextMenu: '#context-menu',
                onContextMenuItem: function(row, $el){
                    if ($el.data("item") == "properfunctioning") {
                        //var msg = "你确定要设置为考勤?";
                        //zcy.alert.confirm("请确认操作",msg);
                        console.log(row);
                        zcy.alert.success(""+row+"的考勤记录");
                    }
                 }
            });
            var TeamGroupId = $("#TeamGroupName").val();
            var date = $("#date").val();
            $.ajax({
                url: "/Employee/getAttendanceResult",
                type: "post",
                dataType: 'json',
                data: {
                    "TeamGroupId": TeamGroupId,
                    "date": date,
                },
                success: function (data) {
                    chkData = eval(data);
                    $('#tablesinglelast').bootstrapTable('load', chkData);
                },
                error: function () {
                    zcy.alert.error("获取考勤表失败");
                }
            });
        }

图片说明

但是获取的都是一行的值,获取不到单元格的值,该怎么办呢?

qq_38919217
Daddy12132 回复Yirujet: 我用的是bootstrap-table-contextmenu,请问这怎么获取当前点击的单元格的值呢?
12 个月之前 回复
qq_38919217
Daddy12132 回复Yirujet: 幸苦了
12 个月之前 回复
qq_38919217
Daddy12132 回复Yirujet: 好的,我看一下啊
12 个月之前 回复
qq_27323623
Yirujet 楼主,你看下最下面代码呢?时间匆忙,我今天离职,功能大体实现了
12 个月之前 回复

2个回答

这个可以用canvas 自己画,类似chart的做法

qq_38919217
Daddy12132 canvas不熟悉。。。
12 个月之前 回复

图片说明
<!DOCTYPE html>

<!--[if gt IE 8]><!--> <!--<![endif]-->









<br> .tooltip {<br> box-shadow: 0.2em -0.2em 0.2em rgba(0, 0, 0, 0.1);<br> opacity: 1;<br> }<br> .tooltip ul {<br> list-style: none;<br> padding: 0;<br> }<br> .tooltip ul &gt; li {<br> background-color: #fff;<br> text-align: center;<br> padding: .25em;<br> margin: .1em 0;<br> cursor: pointer;<br> }<br> .tooltip ul &gt; li:hover {<br> background-color: lightblue;<br> color: #fff;<br> }<br> .tooltip a {<br> color: #999;<br> text-decoration: none;<br> display: block;<br> width: 100%;<br> }<br>



查询
</div>


function ifnull() { if ($("#TeamGroupName").val() == "0") { // zcy.alert.error("请选择需要查询的班组"); return false; } if ($("#date").val() == "") { // zcy.alert.error("请选择需要查询的时间"); return false; } //get数据 getAttendanceResult(); //加载表头日期 var date = $("#date").val(); var year = parseInt(date.split("-")[0]); var month = parseInt(date.split("-")[1]); var daycount = getLastDay(year, month); //得到选中月份的最大天数 MaxDays = daycount; selectYear = year; $("#singlelast").empty(); $("#singlelast").append("<table id='tablesinglelast' data-toggle='table' align='center' ></table>") var appendPos = $("#tablesinglelast"); //$("#tablesinglelast").bootstrapTable('destroy'); appendPos.append("<thead><tr>"+ "<th data-field='EmployeeId' rowspan='2' id='employeeName' data-valign='middle' data-align='center'> 工号</th > " + "<th id='lineTd' data-field='EmployeeName' data-valign='middle' rowspan='2' data-align='center'>" + "<span style='float:left;margin-top:20px;'>姓名</span>" + "<span style='float:left;margin-top:-10px;'>日期</span>"+ "</th > " + "<th data-formatter='OvertimeLength' data-valign='middle' colspan='2' data-align='center'>加班</th>" + "<th data-formatter='Askleavelength' data-valign='middle' colspan='2' data-align='center'>请假</th>" + "<th data-valign='middle' data-align='center'>工伤</th>" + "</tr><tr></tr></thead>"); //加载table_foot var table_foot = $("#table_foot"); table_foot.css("display","block"); for (var i = 1; i <= daycount; i++) { var appendPos2 = $("#tablesinglelast").children().eq(0).children().eq(0).children().eq(i+1 - 1); appendPos2.after("<th data-valign='middle' colspan='1' data-align='center'>" + i + "</th>"); } for (var i = 1; i <= daycount; i++) { var appendPos3 = $("#tablesinglelast").children().eq(0).children().eq(1); var month2 = (month > 9) ? ("" + month) : ("0" + month); var day = (i > 9) ? ("" + i) : ("0" + i); var heredate = year + "-" + month2 + "-" + day; var weekday = new Date(heredate).getDay(); text = ""; switch (weekday) { case 0: text = "日"; break; case 1: text = "一"; break; case 2: text = "二"; break; case 3: text = "三"; break; case 4: text = "四"; break; case 5: text = "五"; break; case 6: text = "六"; break; } // appendPos3.append("<th data-formatter='DateAttendance' data-align='center' data-field='" + year + "-" + month2 + "-" + day + "'>" + text + "</th>"); appendPos3.append("<th data-align='center' data-field='" + year + "-" + month2 + "-" + day + "'>" + text + "</th>"); selectMonth = month2; } var appendPos3 = $("#tablesinglelast").children().eq(0).children().eq(1); appendPos3.append("<th data-formatter='OverDay' data-align='center'>天</th>"+ "<th data-formatter='OverHour' data-align='center'>时</th>"+ "<th data-formatter='AskleaveDay' data-align='center'>天</th>"+ "<th data-formatter='AskleaveHour' data-align='center'>时</th>"+ "<th data-align='center'>天</th>" ); $('.context').contextmenu({ target: '#context-menu', before: function (e, context) { // execute code before context menu if shown }, onItem: function (context, e) { // execute on menu item selection } }); readyTable(); $("#singlelast tr td").addClass(); $('#tablesinglelast').bootstrapTable('load', data); var tbody = document.getElementById('tablesinglelast').getElementsByTagName('TBODY')[0]; tbody.style.userSelect = 'none'; arySelect = []; tbody.addEventListener('mousedown', down); tbody.addEventListener('mouseup', up); for(let i = 0, len = tbody.children.length; i < len; i++) { var tr = tbody.children[i]; var td = tbody.children[i].children; Array.from(td).forEach(e => e.addEventListener('mouseenter', enter)); } var flag = false; function down(e) { flag = true; // Array.from(td).forEach(e => e.style.backgroundColor = 'transparent'); // tbody.style.userSelect = 'none'; // arySelect.length = 0; clear(); var e = e.target; if(e.tagName == 'TD') { e.style.backgroundColor = 'blue'; arySelect.push(e.innerHTML); } cancle(); } function up(e) { flag = false; var target = e.target; console.log(arySelect, e.x, e.y); var div = document.createElement('div'); document.getElementById('tablesinglelast').append(div); div.id = 'tooltip'; div.style.position = 'absolute'; div.style.left = e.x + 'px'; div.style.top = (e.y - 100) + 'px'; div.style.width = '100px'; div.style.height = '100px'; div.className = 'tooltip'; div.style.backgroundColor = '#eee'; var ul = document.createElement('ul'); var li = document.createElement('li'); var a = document.createElement('a'); a.innerHTML = '操作'; li.appendChild(a); ul.appendChild(li); a = document.createElement('a'); a.innerHTML = '取消'; a.addEventListener('click', cancle); li = document.createElement('li'); li.appendChild(a); ul.appendChild(li); div.appendChild(ul); } function clear() { for(let i = 0, len = tbody.children.length; i < len; i++) { var tr = tbody.children[i]; var td = tbody.children[i].children; Array.from(td).forEach(e => e.style.backgroundColor = 'transparent'); } tbody.style.userSelect = 'none'; arySelect.length = 0; } function cancle() { if(document.getElementById('tablesinglelast').children[document.getElementById('tablesinglelast').children.length - 1].id == 'tooltip') { document.getElementById('tablesinglelast').removeChild(document.getElementById('tablesinglelast').children[document.getElementById('tablesinglelast').children.length - 1]); flag = false; clear(); } } function enter(e) { tbody.style.userSelect = ''; if(flag) { e.target.style.backgroundColor = 'blue'; arySelect.push(e.target.innerHTML); } } } function getLastDay(year, month) { var new_year = year; //取当前的年份 var new_month = month++;//取下一个月的第一天,方便计算(最后一天不固定) if (month > 12) //如果当前大于12月,则年份转到下一年 { new_month -= 12; //月份减 new_year++; //年份增 } var new_date = new Date(new_year, new_month, 1); //取当年当月中的第一天 return (new Date(new_date.getTime() - 1000 * 60 * 60 * 24)).getDate();//获取当月最后一天日期 } function readyTable() { $("#tablesinglelast").bootstrapTable({ //bootstraptable 插件 pageNumber: 1, //初始化加载第一页,默认第一页 pageSize: 10, //每页的记录行数(*) pageList: [10, 20, 30], pagination: true, //是否显示分页(*) sortable: true, //是否启用排序 sortOrder: 'asc', striped: true, //行间隔色 showExport: true, //是否显示导出 exportDataType: 'all', search: true, detailView: false,//父子表 onExpandRow: function (index, row, $detail) { oInitInitSubTable(index, row, $detail); } }); } function getAttendanceResult() { // var TeamGroupId = $("#TeamGroupName").val(); // var date = $("#date").val(); // $.ajax({ // url: "/Employee/getAttendanceResult", // type: "post", // dataType: 'json', // data: { // "TeamGroupId": TeamGroupId, // "date": date, // }, // success: function (data) { // chkData = eval(data); // $('#tablesinglelast').bootstrapTable('load', chkData); // }, // error: function () { // // zcy.alert.error("获取考勤表失败"); // } // }); data = [ { 'EmployeeId': 6, 'EmployeeName': '小李', '2019-06-01': 1, '2019-06-02': 2, '2019-06-03': 3, '2019-06-04': 4, '2019-06-05': 5, '2019-06-06': 6, '2019-06-07': 7, '2019-06-08': 8, '2019-06-09': 9, '2019-06-10': 10, '2019-06-11': 11, '2019-06-12': 12, '2019-06-13': 13, '2019-06-14': 14, '2019-06-15': 15, '2019-06-16': 16, '2019-06-17': 17, '2019-06-18': 18, '2019-06-19': 19, '2019-06-20': 20, '2019-06-21': 21, '2019-06-22': 22, '2019-06-23': 23, '2019-06-24': 24, '2019-06-25': 25, '2019-06-26': 26, '2019-06-27': 27, '2019-06-28': 28, '2019-06-29': 29, '2019-06-30': 30 }, { 'EmployeeId': 7, 'EmployeeName': '小王', '2019-06-01': 1, '2019-06-02': 2, '2019-06-03': 3, '2019-06-04': 4, '2019-06-05': 5, '2019-06-06': 6, '2019-06-07': 7, '2019-06-08': 8, '2019-06-09': 9, '2019-06-10': 10, '2019-06-11': 11, '2019-06-12': 12, '2019-06-13': 13, '2019-06-14': 14, '2019-06-15': 15, '2019-06-16': 16, '2019-06-17': 17, '2019-06-18': 18, '2019-06-19': 19, '2019-06-20': 20, '2019-06-21': 21, '2019-06-22': 22, '2019-06-23': 23, '2019-06-24': 24, '2019-06-25': 25, '2019-06-26': 26, '2019-06-27': 27, '2019-06-28': 28, '2019-06-29': 29, '2019-06-30': 30 } ]; }
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#根据时间画考勤图用什么控件?怎么可以实现鼠标拖动时间

C#根据时间画考勤图用什么控件?怎么可以实现鼠标拖动时间

用bootstrap table做一个考勤表,使用hideColumn隐藏多余天报 too much recursion

根据hideColumn方法调用的时候会报错 too much recursion,是因为一个月的列太多了吗?求大神指点 ![表头](https://img-ask.csdn.net/upload/201607/30/1469848647_651891.png) ![html代码](https://img-ask.csdn.net/upload/201607/30/1469848676_825688.png) ![图片说明](https://img-ask.csdn.net/upload/201607/30/1469848700_251132.png) ![图片说明](https://img-ask.csdn.net/upload/201607/30/1469848714_448828.png)

请教一下怎么用java做一个考勤功能?

假如有学生和管理员2个身份,我要怎么做啊 给个思路,现在的问题是 不知道是谁负责打卡 是学生自己点呢 还是管理员,还有数据库里的考勤记录是已经生成的还是说我要点击“上班"才会自动插入,那如果我们上班就是缺勤,那缺勤又怎么插入数据库?

layui可以做给用户输入信息的表格吗?

就是页面展开表格只有一行空行,只要用户点击这一行点击输入数据就自动再 添加一行空行,这要怎么实现,有没有大佬教一下![图片说明](https://img-ask.csdn.net/upload/201905/28/1559033016_166079.png)

datagrid导出excel格式时,所有的数据都在一个单元格怎么解决?

代码如下: function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) { //If JSONData is not an object then JSON.parse will parse the JSON string in an Object var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData; var CSV = ''; //Set Report title in first row or line //CSV += ReportTitle + '\r\n\n'; //This condition will generate the Label/Header if (ShowLabel) { var row = ""; //This loop will extract the label from 1st index of on array /*for ( var index in arrData[0]) { //Now convert each value to string and comma-seprated row += index + ','; } */ row = row.slice(0, -1); //append Label row with line break CSV += row + '\r\n'; } //1st loop is to extract each row for (var i = 0; i < arrData.length; i++) { var row = ""; //2nd loop will extract each column and convert it in string comma-seprated for ( var index in arrData[i]) { row += '"' + arrData[i][index] + '",'; } row=row.slice(0, row.length-1); //add a line break after each row CSV += row + '\r\n'; } if (CSV == '') { alert("Invalid data"); return; } //Generate a file name var fileName = "考勤结果"; //this will remove the blank-spaces from the title and replace it with an underscore fileName += ReportTitle.replace(/ /g, "_"); //Initialize file format you want csv or xls //alert(CSV); var uri = 'data:text/csv;charset=utf-8,\uFEFF' + encodeURI(CSV); // Now the little tricky part. // you can use either>> window.open(uri); // but this will not work in some browsers // or you will not get the correct file extension //this trick will generate a temp <a /> tag var link = document.createElement("a"); link.href = uri; //set the visibility hidden so it will not effect on your web-layout link.style = "visibility:hidden"; link.download = fileName + ".xls"; //this part will append the anchor tag and remove it after automatic click document.body.appendChild(link); link.click(); document.body.removeChild(link); }

求一考勤统计实现SQL代码

目前有两张表如下 ``` --用户当日班次表 IF OBJECT_ID('[userKQ]') IS NOT NULL DROP TABLE userKQ CREATE TABLE userKQ ( dateKQ VARCHAR (10), --日期 userid VARCHAR(20), --员工ID banci VARCHAR(20), --班次名称 StartTime DATETIME, --上班时间 EndTime DATETIME, --下班时间 StartTime1 DATETIME, --上班有效打卡时间开始 StartTime2 DATETIME, --上班有效打卡时间结束 EndTime1 DATETIME, --下班有效打卡时间开始 EndTime2 DATETIME --下班有效打卡时间结束 ) INSERT INTO userKQ SELECT '2017-03-02','000015','上午','1900-01-01 08:00:00.000','1900-01-01 12:00:00.000','1900-01-01 07:30:00.000','1900-01-01 08:30:00.000','1900-01-01 11:30:00.000','1900-01-01 12:30:00.000' UNION ALL SELECT '2017-03-02','000015','下午','1900-01-01 14:00:00.000','1900-01-01 18:00:00.000','1900-01-01 13:30:00.000','1900-01-01 14:30:00.000','1900-01-01 17:30:00.000','1900-01-01 18:30:00.000' UNION ALL SELECT '2017-03-02','000002','上午','1900-01-01 08:00:00.000','1900-01-01 12:00:00.000','1900-01-01 07:30:00.000','1900-01-01 08:30:00.000','1900-01-01 11:30:00.000','1900-01-01 12:30:00.000' UNION ALL SELECT '2017-03-02','000002','下午','1900-01-01 14:00:00.000','1900-01-01 18:00:00.000','1900-01-01 13:30:00.000','1900-01-01 14:30:00.000','1900-01-01 17:30:00.000','1900-01-01 18:30:00.000' UNION ALL SELECT '2017-03-02','000003','上下午','1900-01-01 09:00:00.000','1900-01-01 17:00:00.000','1900-01-01 08:30:00.000','1900-01-01 09:30:00.000','1900-01-01 16:30:00.000','1900-01-01 17:30:00.000' UNION ALL SELECT '2017-03-03','000015','上午','1900-01-01 08:00:00.000','1900-01-01 12:00:00.000','1900-01-01 07:30:00.000','1900-01-01 08:30:00.000','1900-01-01 11:30:00.000','1900-01-01 12:30:00.000' UNION ALL SELECT '2017-03-03','000015','下午','1900-01-01 14:00:00.000','1900-01-01 18:00:00.000','1900-01-01 13:30:00.000','1900-01-01 14:30:00.000','1900-01-01 17:30:00.000','1900-01-01 18:30:00.000' UNION ALL SELECT '2017-03-03','000002','上午','1900-01-01 08:00:00.000','1900-01-01 12:00:00.000','1900-01-01 07:30:00.000','1900-01-01 08:30:00.000','1900-01-01 11:30:00.000','1900-01-01 12:30:00.000' UNION ALL SELECT '2017-03-03','000002','下午','1900-01-01 14:00:00.000','1900-01-01 18:00:00.000','1900-01-01 13:30:00.000','1900-01-01 14:30:00.000','1900-01-01 17:30:00.000','1900-01-01 18:30:00.000' UNION ALL SELECT '2017-03-03','000003','上下午','1900-01-01 09:00:00.000','1900-01-01 17:00:00.000','1900-01-01 08:30:00.000','1900-01-01 09:30:00.000','1900-01-01 16:30:00.000','1900-01-01 17:30:00.000' --考勤原始记录表 IF OBJECT_ID('[checkinout]') IS NOT NULL DROP TABLE checkinout CREATE TABLE checkinout ( userid VARCHAR(20), --员工ID checktime DATETIME --打卡时间 ) INSERT INTO checkinout -- SELECT '000014','2017-03-02 07:51:00.000' UNION ALL SELECT '000015','2017-03-02 07:12:00.000' UNION ALL SELECT '000015','2017-03-02 07:33:00.000' UNION ALL SELECT '000015','2017-03-02 07:54:00.000' UNION ALL SELECT '000015','2017-03-02 12:14:00.000' UNION ALL SELECT '000015','2017-03-02 12:34:00.000' UNION ALL SELECT '000015','2017-03-02 13:50:00.000' UNION ALL --SELECT '000015','2017-03-02 18:01:00.000' UNION ALL SELECT '000002','2017-03-02 07:54:00.000' UNION ALL SELECT '000002','2017-03-02 12:14:00.000' UNION ALL --SELECT '000002','2017-03-02 13:50:00.000' UNION ALL SELECT '000002','2017-03-02 18:01:00.000' UNION ALL SELECT '000003','2017-03-02 08:30:00.000' UNION ALL SELECT '000003','2017-03-02 16:59:00.000' UNION ALL SELECT '000003','2017-03-02 17:15:00.000' UNION ALL --SELECT '000015','2017-03-02 07:34:00.000' UNION ALL SELECT '000015','2017-03-03 12:01:00.000' UNION ALL SELECT '000015','2017-03-03 13:34:00.000' UNION ALL SELECT '000015','2017-03-03 18:01:00.000' UNION ALL SELECT '000002','2017-03-03 07:54:00.000' UNION ALL SELECT '000002','2017-03-03 12:14:00.000' UNION ALL SELECT '000002','2017-03-03 13:50:00.000' UNION ALL --SELECT '000002','2017-03-03 18:01:00.000' UNION ALL SELECT '000003','2017-03-03 17:15:00.000' --在有效打卡时间段内有多次打卡记录的,取第一次打卡记录,没有打卡记录或不在有效打卡记录时间段的不记考勤,标记NULL --求实现如下效果,CHECKTIME1和CHECKTIME2分别是有效打卡时间,双手奉上仅有的10分,求高手帮忙. /* dateKQ USERID BANCI StartTime EndTime CHECKTIME1 CHECKTIME2 2017-03-02 000015 上午 1900-01-01 08:00:00.000 1900-01-01 12:00:00.000 2017-03-02 07:33:00.000 2017-03-02 12:14:00.000 2017-03-02 000015 下午 1900-01-01 14:00:00.000 1900-01-01 18:00:00.000 2017-03-02 13:50:00.000 null 2017-03-02 000002 上午 1900-01-01 08:00:00.000 1900-01-01 12:00:00.000 2017-03-02 07:54:00.000 2017-03-02 12:14:00.000 2017-03-02 000002 下午 1900-01-01 14:00:00.000 1900-01-01 18:00:00.000 null 2017-03-02 18:01:00.000 2017-03-02 000003 上下午 1900-01-01 09:00:00.000 1900-01-01 17:00:00.000 2017-03-02 08:30:00.000 2017-03-02 16:59:00.000 2017-03-03 000015 上午 1900-01-01 08:00:00.000 1900-01-01 12:00:00.000 2017-03-02 07:33:00.000 2017-03-02 12:14:00.000 2017-03-03 000015 下午 1900-01-01 14:00:00.000 1900-01-01 18:00:00.000 2017-03-02 13:50:00.000 null 2017-03-03 000002 上午 1900-01-01 08:00:00.000 1900-01-01 12:00:00.000 2017-03-03 07:54:00.000 2017-03-02 12:14:00.000 2017-03-03 000002 下午 1900-01-01 14:00:00.000 1900-01-01 18:00:00.000 2017-03-03 13:50:00.000 null 2017-03-03 000003 上下午 1900-01-01 09:00:00.000 1900-01-01 17:00:00.000 null 2017-03-03 17:15:00.000 */ ```

java tcp实现模拟考勤打卡代码怎么写

求大神帮我写一个java tcp模拟考勤打卡的代码,主要需求有,得到员工名字,工号,和打卡时间

如何使用VBA编程考勤表

考勤表如何用VBA编程实现,序号姓名日期星期考勤符号使考勤更加简单

一共有60多张excle表格,怎么把表格中的数据全都整合到一张表中

一共有60多张excle表格,怎么把表格中的数据全都整合到一张表中,已经尝试过vb,不可行,请问有什么软件或者sql语句可以将数据全部整合吗

请问一个一个java写的计算考勤的系统 有个小逻辑问题

``` import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; public class daochudaoexcel { public static void main(String[] args) throws BiffException, IOException, ParseException { String fileName = "D://Io//jisuan.xls"; // Excel文件所在路径 File file = new File(fileName); // 创建文件对象 Workbook wb = Workbook.getWorkbook(file); // 从文件流中获取Excel工作区对象(WorkBook) Sheet sheet = wb.getSheet(0); // 从工作区中取得页(Sheet) int n =0; int j =0; int f = 0; Date max = null; String Stringmax = null; String Stringmin = null; String zgs = "总公司"; DateFormat df = new SimpleDateFormat("HH:mm:ss"); //规定早上最晚打卡时间 Date time = df.parse("10:00:00"); while(n<sheet.getRows()){ //如果是总公司 if(sheet.getCell(0,n).getContents().equals(zgs)){ //如果姓名相等 if(sheet.getCell(1,n).getContents().equals(sheet.getCell(1,n+1).getContents())){ //如果日期相等 if(sheet.getCell(2,n).getContents().equals(sheet.getCell(2,n+1).getContents())){ //如果第n个时间小于n+1,那么将max等于n+1 if(df.parse(sheet.getCell(3,n).getContents()).getTime()<df.parse(sheet.getCell(3,n+1).getContents()).getTime() ){ max=df.parse(sheet.getCell(3,n+1).getContents()); //将max转成String Stringmax = sheet.getCell(3,n+1).getContents(); } }else { //如果日期不相等那么下个日期的第一个打卡时间 就是min Date min= df.parse(sheet.getCell(3,n+1).getContents()); //将min转为String类型 Stringmin = sheet.getCell(3,n+1).getContents(); //如果最早打卡时间大于规定早上最晚打卡时间 那么则判定为迟到 if(min.getTime()>time.getTime()){ System.err.print("迟到"); //如果上班时间大于小于八个小时 则说明早退 }else if((max.getTime()-min.getTime())/3600000<8){ System.err.print("早退"); } //输出员工上班下班时间 和上班多少小时 System.out.println(sheet.getCell(0,n).getContents()+"员工:" +sheet.getCell(1,n).getContents()+sheet.getCell(2,n+1).getContents() + " "+ "上班时间:" + Stringmin + " " + "下班时间" + Stringmax + "上班了" + " " +(max.getTime()-min.getTime())/3600000 + "个小时" ); } } } n++; } } } ``` ![图片说明](https://img-ask.csdn.net/upload/201712/06/1512530705_406705.png) ![图片说明](https://img-ask.csdn.net/upload/201712/06/1512530714_645595.png) 需求是输出这个人最早上班时间 最晚下班时间和是否迟到早退 我的逻辑是先判断第一列是不是相等 再判断第二列是否相等 直到判断到日期相等 然后遍历最大的时间替换为max 因为打卡时间是按照从早到晚排列的 到了下一天 那么下一天的第一个打卡时间是最早打卡时间 但是这样第一天的也就是表格中的第一天自动给略过了 因为第一天没有在else中判断 这个怎么解决 新手 请各位大牛帮帮忙 谢谢

考勤打卡记录工作时长mysql数据库如何建表和逻辑实现操作?

想开发一款基于钉钉的“考勤打卡”小程序。每个人点击按钮记录上班打卡时间,再点击记录下班打卡时间,计算出两次打卡的工作时长。每人每天可打卡多次,并计算出每天的工作时长,(可跨天打卡,以上班打卡为准,比如,某人6月1日23点00分打卡上班,下班打卡为6月2日2点零零分,那么这三个小时的工作时长要记录到6月1日的工作时长上。请问各位前辈,数据库见表及逻辑思路怎么实现?谢谢!

请教一个关于oracle处理考勤记录的sql语句

有一个考勤记录表 [code="java"] create table t_kaoqin ( EMPID VARCHAR2(255 CHAR),//员工ID type VARCHAR2(255 CHAR),//旷工、事假、病假、婚假 EMPCODE VARCHAR2(255 CHAR),//员工编号 DAYS NUMBER,//天数 TIME DATE,//旷工(事假、病假、婚假)时间, EMPNAME VARCHAR2(255 CHAR),//姓名 POST VARCHAR2(255 CHAR),//职位 DEPT VARCHAR2(255 CHAR),//部门 ) [/code] 需要实现一个查询效果如下的sql,请问数据库高手们,这个sql应该如何取实现 编号 姓名 部门 职位 月份 旷工天数 事假天数 病假天数 婚假天数 001 张三 财务部 经理 2011-02 1 0 0 0 001 张三 财务部 经理 2011-05 0 2 0 0 002 李四 人事部 经理 2011-03 0 0 1 0

用c语言编写个学生课堂考勤系统

用C语言编写个学生课堂考勤系统,要求见图片 有没有没事做的大神来帮帮个忙![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/42.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/42.gif)![图片](https://img-ask.csdn.net/upload/201612/26/1482723574_617466.jpg)

求思路..想做个学生考勤怎么建表呢?年份怎么判断.输出时只想输出1个月 或者3个月,怎么指定输出哪个月呢?

求个思路..想做个学生考勤怎么建表呢? 前端怎么知道,是2018年12月的考勤还是2019年的呢? 关联到另一张结算费用的表.输出时只想输出1个月 或者3个月的考勤,怎么指定输出哪个月呢? 之间怎么关联表呢?表达有点混乱...

如何把同一天的打卡记录 显示在同一行

原表: id dksj 1 2016-4-15 08:00:01 2 2016-4-15 11:31:01 3 2016-4-15 13:00:00 4 2016-4-15 17:01:21 5 2016-4-16 08:02:00 6 2016-4-16 11:35:01 希望得到的结果: date daka 2016-4-15 08:00 11:31 13:00 17:01 2016-4-16 08:02 11:35

求powerdesigner生成员工考勤数据库表的设计图

做一个员工的人脸识别考勤管理系统,包括员工管理,门禁管理,用户记录,考勤管理(暂时不用),求一个用powerdesigner的设计图,来生成数据库表。数据字段需求 可参照https://wenku.baidu.com/view/9524c1f9581b6bd97e19eaba.html

有个MySQL考勤表,如何统计员工上下班并且带上其他字段?

现在有个考勤表为![图片说明](https://img-ask.csdn.net/upload/201911/11/1573460543_46345.png) 我要统计出他每天的上下班打卡时间还有打卡时的照片,按每天最大最小的时间排序已经解决了,现在如何带上img_url这个字段呢。 如图显示![图片说明](https://img-ask.csdn.net/upload/201911/11/1573460823_722918.png)

考勤软件考勤数据修改后如何重新上传至考勤机?

有考勤机 SDK 开发包,有成熟的考勤软件,想在现有的软件工具栏上添加一个“上传考勤数据”功能将修改后的考勤数据重新上传到考勤机里,求大神帮助有偿服务,成功必谢!联系电话15926412808

考勤管理系统的审核功能(员工→部门经理→人事经理→总经理)

学校项目 做一个考勤管理系统 里面有一个审核的功能(员工→部门经理→人事经理→总经理) 这个不是很会写 求大佬给点思路

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

ArrayList源码分析(入门篇)

ArrayList源码分析 前言: 写这篇博客的主要原因是,在我上一次参加千牵科技Java实习生面试时,有被面试官问到ArrayList为什么查找的速度较快,插入和删除的速度较慢?当时我回答得不好,很大的一部分原因是因为我没有阅读过ArrayList源码,虽然最后收到Offer了,但我拒绝了,打算寒假学得再深入些再广泛些,下学期开学后再去投递其他更好的公司。为了更加深入理解ArrayList,也为

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

玩转springboot启动banner定义所得

最近接手了一个springboot项目,不是不熟悉这个框架,启动时打印的信息吸引了我。 这不是我熟悉的常用springboot的打印信息啊,我打开自己的项目: 还真是的,不用默认的感觉也挺高大上的。一时兴起,就去研究了一下源代码,还正是有些收获,稍后我会总结一下。正常情况下做为一个老程序员,是不会对这种小儿科感兴趣的,不就是一个控制台打印嘛。哈哈! 于是出于最初的好奇,研究了项目的源代码。看到

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

立即提问
相关内容推荐