OA系统-考勤模块

2023-10-27

1.考勤管理-签到-前台代码实现

(1)jQuery代码,页面初始化绑定事件,怎么实现?

$(function(){
	$("#signin").click(function(){
}
})

2.考勤管理-签到-全部功能实现

(1)简述签到功能的逻辑?
对签到按钮绑定单击事件,我们点击按钮时,向servlet发送签到请求,servlet将我调用服务层根据id进行调用Dao层签到方法,Dao层访问数据库,首先调用查询方法,查看是否已经签到,然后在决定接下来是否进行存入一些签到信息,,然后返回不同的值,代表签到成功,失败,已经签过
(2)ajax实现的步骤?

<script type="text/javascript">
	    $(function(){
	    	//签到
	    	$("#signin").click(function(){
	    		//发送ajax请求
	    	/* 	$.ajax({
					url:"servlet/SignInOut?method=signIn",
					type:"POST",
					dataType:"text",
					success:function(data){ //0 1  2
						//显示签到的结果
						if(data==0){
							$("#result").html("签到失败");
						}else if(data ==1){
							$("#result").html("签到成功");
						}else {
							$("#result").html("已经签到,不能重复签到");
						}
					}
				}); */

3.签退-全部功能实现

(1)简述签退逻辑。
对签退按钮绑定单击事件,我们点击按钮时,向servlet发送签到请求,servlet将我调用服务层的签退方法,在服务层先调用查询方法,根据返回值判断是否签退,如果没有查到就提示尚未签退,然后进行数据更新签退时间,最后返回签退失败,签退成功。

4.通过Ajax获取查询条件之部门列表

(1)进入考勤管理页面之后,如何加载所属部门下拉列表?

//发送ajax请求,获取部门
			$.ajax({
				url:"servlet/SignInOutServlet?method=selAllDept",
				type:"POST",
				success:function(jsonStr){
					eval("var depts="+jsonStr);
					var str="<option value='0'>--全部--</option>";
					for (var i = 0; i < depts.length; i++) {
						
						str+='<option value="'+depts[i].deptno+'">'+depts[i].deptName+'</option>';
					}
					//写入到列表中
					$("#deptno").html(str);
				}
			});

(2)点击查询后,显示所有签到信息,如何利用ajax实现,简述过程?
当我们点击查询时,向服务器发送ajax请求,servlet处理请求,调用服务层查询签到信息的方法,服务层再调用Dao层查询方法,访问数据库,返回list集合,在调用gson将集合转为json格式的数据返回,ajax对数据遍历,拼接,显示在页面。

5.考勤管理-使用Ajax查询考勤信息

(1)按照条件查询,可以有两种方式,第一种:点击查询按钮之后,请求后台servlet,然后从servlet中跳转到考勤管理页面,还有一种方式:利用ajax查询,请问这两种方式哪一种比较好?优点是什么呢?
Ajax比较好,当我们调用第一种方法时,因为是覆盖页面式,所以我们还要返回进行查询的条件的记忆功能,而ajax方法只是局部刷新,这样便可以省却我们记忆功能 的实现,相对而言,我觉得ajax比较简单,逻辑简单,代码量少

6.使用Ajax查询考勤信息2

(1)如何拼接考勤信息列表字符串?

	success:function(data){
						//将其转为json对象
						eval("var list="+data);
						
						//字符串的拼接
						var str="";
						for (var i = 0; i < list.length; i++) {
							str+=
							'<tr>'
							+'<td>'
							+'<input name="" type="checkbox" value="" />'
							+'</td>'
							+'<td>'+list[i].empId+'</td>'
							+'<td>'+list[i].emp.realName+'</td>'
							+'<td>'+list[i].emp.dept.deptName+'</td>'
							+'<td>'+list[i].dtDate+'</td>'
							+'<td>'+list[i].signinDate+'</td>'
							+'<td>'+list[i].signoutDate+'</td>'
						+'</tr>';
						}
						
						
						//将其加到tbody中
						$("#data").html(str);
						
					}

7.考勤管理-使用Ajax查询考勤信息3

(1)如何在后台sql中进行条件的拼接?

	//创建SQL命令
					StringBuilder sql=new StringBuilder("select dt.*,e.realname,d.deptname,"
							+ "d.deptno,e.empid from duty dt "
							+ "join employee e on dt.emprid=e.empid"
							+ " join dept d on e.deptno=d.deptno where 1=1");
				if (empId!=null & !"".equals(empId)) {
					sql.append("and dt.emprid='"+empId+"'");
				}
				if (deptno!=0) {
					sql.append("and d.deptno="+deptno);
				}
				if (dtDate!=null) {
					DateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
					String sdtDate = sdf.format(dtDate);
					sql.append("and dt.dtDate="+sdtDate);
				}

8.考勤管理-使用POI导出考勤数据到xls1

(1)POI干嘛的?
POI提供API给Java程序对Microsoft Office格式档案读和写的功能
(2)POI和JXL的区别?
一、jxl
优点:
Jxl对中文支持非常好,操作简单,方法看名知意。
Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写
支持Excel 95-2000的所有版本(网上说目前可以支持Excel2007了,还没有尝试过)
生成Excel 2000标准格式
支持字体、数字、日期操作
能够修饰单元格属性
支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
缺点:效率低,图片支持不完善,对格式的支持不如POI强大
二、POI
优点:
效率高
支持公式,宏,一些企业应用上会非常实用
能够修饰单元格属性
支持字体、数字、日期操作
缺点:不成熟,代码不能跨平台,貌似不少同行在使用工程中还碰到让人郁闷的BUG(最近的项目中也是遇到了一些bug,不过目前没有查出来是代码的问题还是POI的问题,总之问题很诡异,数据替代参数总有失败的。关于不能跨平台这一说,我也没有试验过,不过Java不是跨平台吗?POI是JAVA的一个组件,怎么就不能跨平台了呢,总之这些问题还需要在以后的项目中多多实践,才能比较出区别之处。)

9.考勤管理-使用POI导出考勤数据到xls2

(1)如何使用POI,简述步骤?
1、导入jar包,
编写java类,新建一个实体类,比如我们要导出数据库的学生的信息,那么就建一个Student实体类。
新建一个写入excel的方法。
创建操作Excel的HSSFWorkbook对象
创建HSSFSheet对象
创建第一行标题信息的HSSFRow对象
创建标题行中的HSSFCell数组
创建标题数据,并通过HSSFCell对象的setCellValue()方法对每个单元格进行赋值
(2)如何将后台查到的考勤数据,弄到前台客户端下载为excel,代码如何实现呢?
通过后台查询的考勤数据,调用导出表的方法,把查出来的数据按照给定的语法格式写到Excel表里。然后再响应下载。

//调用方法
		createExcel(list,response);
	
	}
	private static void createExcel(List<Duty> list,HttpServletResponse response) {
        // 创建一个Excel文件
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 创建一个工作表
        HSSFSheet sheet = workbook.createSheet("考勤信息表");
        
        CellRangeAddress region = new CellRangeAddress(0, // first row
                0, // last row
                0, // first column
                5 // last column
        );
        sheet.addMergedRegion(region);
        
        HSSFRow hssfRow = sheet.createRow(0);
        HSSFCell headCell = hssfRow.createCell(0);
        headCell.setCellValue("考勤信息表");
        
        // 设置单元格格式居中
        HSSFCellStyle cellStyle = workbook.createCellStyle();
    	cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        /*
       
        cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
       // cellStyle.setFillBackgroundColor(HSSFColor.GREEN.index);
        cellStyle.setFillForegroundColor(HSSFColor.GREEN.index);
       
        HSSFFont font = workbook.createFont();
        font.setFontName("楷体"); //字体
        font.setFontHeightInPoints((short)30); //字体大小
        font.setColor(HSSFColor.RED.index);//颜色
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗
        font.setItalic(true); //倾斜
        cellStyle.setFont(font);
        */
        headCell.setCellStyle(cellStyle);
        
        
        // 添加表头行
        hssfRow = sheet.createRow(1);
        // 添加表头内容
        headCell = hssfRow.createCell(0);
        headCell.setCellValue("用户名");
        headCell.setCellStyle(cellStyle);

        headCell = hssfRow.createCell(1);
        headCell.setCellValue("真实姓名");
        headCell.setCellStyle(cellStyle);

        headCell = hssfRow.createCell(2);
        headCell.setCellValue("所属部门");
        headCell.setCellStyle(cellStyle);
        
        headCell = hssfRow.createCell(3);
        headCell.setCellValue("出勤日期");
        headCell.setCellStyle(cellStyle);

        headCell = hssfRow.createCell(4);
        headCell.setCellValue("签到时间");
        headCell.setCellStyle(cellStyle);

        headCell = hssfRow.createCell(5);
        headCell.setCellValue("签退时间");
        headCell.setCellStyle(cellStyle);

        // 添加数据内容
        for (int i = 0; i < list.size(); i++) {
            hssfRow = sheet.createRow((int) i + 2);
            Duty duty = list.get(i);

            // 创建单元格,并设置值
            HSSFCell cell = hssfRow.createCell(0);
            cell.setCellValue(duty.getEmpId());
            cell.setCellStyle(cellStyle);

            cell = hssfRow.createCell(1);
            cell.setCellValue(duty.getEmp().getRealName());
            cell.setCellStyle(cellStyle);

            cell = hssfRow.createCell(2);
            cell.setCellValue(duty.getEmp().getDept().getDeptName());
            cell.setCellStyle(cellStyle);
            
            cell = hssfRow.createCell(3);
            cell.setCellValue(duty.getDtDate());
            cell.setCellStyle(cellStyle);

            cell = hssfRow.createCell(4);
            cell.setCellValue(duty.getSigninDate());
            cell.setCellStyle(cellStyle);

            cell = hssfRow.createCell(5);
            cell.setCellValue(duty.getSignoutDate());
            cell.setCellStyle(cellStyle);
        }

        // 保存Excel文件
        try {
        	response.setContentType("application/vnd.ms-excel");
        	response.setHeader("Content-disposition", "attachment;filename=duty.xls");//附件形式下载,文件名字叫duty.xls
        /*    OutputStream outputStream = new FileOutputStream("D:/students.xls");*///写在服务器本地
            ServletOutputStream outputStream = response.getOutputStream();
            workbook.write(outputStream);
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

(3)简述给出的OperateExcelUtil.java的功能含义?
导出poi工具类,通过查询信息传过来的参数信息,由此工具类接收,根据给定的语法信息,进行excel表的操作,然后进行响应输出到客户端下载此表。

10.报销管理-理解数据库表和创建实体类

(1)简述系统中表之间的关系:
报销单审核表–>报销单表,报销单表–>保险单明细表,报销单表–>支出表。

11.报销管理-添加报销单-视图层

(1)在完成视图层操作中,有哪些注意事项?
报销人、审核人自动获取、不需要输入
• 报销时间、报销总额自动计算和获取
• 报销单明细类型采用静态类型,可以增加报销单明细类型表

(2)在页面中,如何利用jQuery完成添加报销项操作?

var content = $('<tr>'+
				'<td><div class="vocation"><select class="select1" name="type">'+
				'<option value="1">通信费用</option><option  value="2">办公室耗材</option><option  value="3">住宿费用</option><option  value="4">房租水电</option><option value="5">其他</option>'+
				'</select></div></td>'+
				'<td><input name="amount" type="text" class="dfinput" /><i></i></td>'+
				'<td><input name="itemDesc" type="text" class="dfinput" /><i></i></td>'+
				'<td><input type="button"  class="btn"  value="删除" onclick="removeCurrItem(this)"/></td></tr>');

在页面中,如何利用jQuery完成添加图片操作?

function addPhoto(){ //获取上传图片li var li = $("#uploadphoto"); //console.info(li); //准备添加的dom对象 var content=$(" "+ ""); //加入到指定位置 li.append(content); }

12.报销管理-添加报销单-控制层

(1)页面中假如添加了多个报销项,那么在控制层接收数据的思路是什么呢?怎么接收数据呢?
把同一字段放到同一数组里,然后把把他们放到集合里。
(2)为什么在数据库中有状态码字段,这个字段的作用是什么?缺少这个字段可以吗?
为下面审核报销单做准备,不可以缺少,因为不知道状态就无法审核

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OA系统-考勤模块 的相关文章

  • Matlab 2020b 64bit

    Matlab 2020b 64bit 链接 https pan baidu com s 1PfAaWPGEzyXBBvYWe48Fng pwd kigc 提取码 kigc 来自百度网盘超级会员V7的分享
  • 数据结构之线性表(bsd, sys/queue.h)

    数据结构之线性表 Author Once Day Date 2023年5月27日 参考文档 Linux内嵌链表 sys queue h 详解 tissar的博客 CSDN博客 嵌入式大杂烩周记第 3 期 sys queue h 知乎 zhi
  • AIC(最小信息化准则)

    AIC信息准则 即Akaike information criterion 是用来衡量统计模型拟合优良性的一个标准 是是由日本统计学家赤池弘次创立和发展的 因此也称为赤池信息量准则 它建立在熵的概念基础上 可以权衡所估计模型的复杂度和模型拟
  • 去除vue顶部60px的空白

    问题 今天才注意到编译后的vue代码 在网站的顶部有一个margin top 60px的空白 有点不解 于是去看源码 代码 app font family Avenir Helvetica Arial sans serif webkit f
  • 概率统计21——指数分布和无记忆性

    指数分布 Exponential distribution 是一种连续型概率分布 可以用来表示独立随机事件发生的时间间隔的概率 比如婴儿出生的时间间隔 旅客进入机场的时间间隔 打进客服中心电话的时间间隔 系统出现bug的时间间隔等等 指数分
  • 给rhel9、centos-stream9 设置软件源

    我使用的是清华镜像源 https mirrors tuna tsinghua edu cn centos stream SIGs 9 stream 一 软件源添加 vim etc yum repos d CentOS Stream9 rep

随机推荐

  • typedef struct node的用法及与struct node的区别,为何要用typedef?

    typedef的作用是为已有的数据类型定义一个新名字 其主要目的是为了我们在使用时能用这个更加清晰简单的新名字 还有一个目的就是为了简化变量的声明 下面的几段代码具有相同的功能 都是用于链表结构体节点的定义和声明 第一种方式 struct
  • vue页面刷新或者后退参数丢失的问题

    在toB的项目中 会经常遇到列表数据筛选查询的情景 当要打开某一项的详情页或者暂时离开列表页 再返回 后退时 选择的筛选条件会全部丢失 辛辛苦苦选择好的条件全没了 还得重新选择 如果有分页的更头大 还得重新一页页翻到之前看到的那一页 用户体
  • 如何理解协方差矩阵(散布矩阵)

    这学期开了模式识别的学习课程 经常提到概率论与数理统计的一个概念 协方差矩阵 在模式识别中又叫散布矩阵 理解这个矩阵严格意义上来说其实不需要太多先导知识 我们只需要了解一些线性代数基本的概念 但是你如果不了解协方差矩阵 听模式识别的课程就会
  • 有深度的文章

    大家好 时隔半年 我将会继续更新推文 主发微信公众号 希望与大家一起交流学习 望大家多支持 你将在这里以最短的时间 获得最好的技术知识 图片是公众号二维码 谢谢大家
  • 第五章字符串总结

    5 1 String类 5 1 1 声明字符串 字符串是常量 它们可以显示任何文字信息 字符串的值在创建之后不能更改 在 Java 语言中 单引号中的内容表示字符 例如 s 而双引号中的内容则表示字符串 例如 我是字符串 123456789
  • vlc-android配置实录

    听说vlc底层也用的ffmpeg 免费开源的 业界做的不错的 就来看看 从网上找了很多例子 也从github上找了好多demo 好多都不全 或者下载下来编译失败 官网上下载的vlc android就编译失败 下面列两个可以用的 一 有vlc
  • JavaScript实现数组对应位置插入另一个数组

    系列文章目录 文章目录 系列文章目录 前言 一 使用循环遍历 二 使用concat和slice方法 三 使用splice方法 四 使用for循环 总结 前言 在JavaScript中 有时我们需要将一个数组的元素按照对应位置插入另一个数组中
  • Spring源码解析:BeanFactory深入理解

    现在一般都用ApplicantContext代替BeanFactory 说到Spring框架 人们往往大谈特谈一些似乎高逼格的东西 比如依赖注入 控制反转 面向切面等等 但是却忘记了最基本的一点 Spring的本质是一个bean工厂 bea
  • 使用思维导图快速了解 Eventbus

    详细源码解读可参考 Awsome Android
  • CentOS 上安装ClamAV

    安装epel yum y install epel release 安装ClamAV yum install y clamav clamav update 安装 yum load transaction tmp yum save tx 20
  • 医学图像分割:自动心脏诊断挑战赛项目数据集(ACDC)

    Local contrastive loss with pseudo label based self training for semi supervised medical image segmentation Krishna Chai
  • WSL2安装Docker

    推荐阅读知乎版 排版更好一点 WSL2安装Docker WSL2安装Docker比较简单 这里记录下 主要参考官方文章如下 Docker wsl2 1 确保已安装WSL2 首先确保你已经安装了WSL2 wsl l v 如果没有安装 请参考
  • 证书在手,认证无忧---证书浅析

    在IPSec VPN篇章中 我们介绍了IPSec隧道两端设备使用证书进行身份认证的内容 在刚刚推出的SSL VPN开篇中 也介绍了证书认证的相关内容 作为网络世界的 身份证 证书在身份认证的场景中已经得到了普遍应用 大家可能已经习惯了用户名
  • Ubuntu一键部署Open VN

    vpn咋就不能成为标题了 现在企业必备的技能不能用了 1 下载安装 1 1 登录root账户 su root 1 2 下载一键部署脚本 git clone https github com guoew openvpn install git
  • protobuf 下载 使用

    protobuf是谷歌开源的一种数据格式 适合高性能 对响应速度有要求的数据传输场景 因为profobuf是二进制数据格式 需要编码和解码 数据本身不具有可读性 因此只能反序列化之后得到真正可读的数据 优势 1 序列化后体积相比Json和X
  • rgba转16js代码

  • 【单片机毕业设计】【mcuclub-dz-068】基于单片机的避障小车系统设计

    最近设计了一个项目基于单片机的避障小车系统设计 与大家分享一下 一 基本介绍 项目名 基于单片机的避障小车的设计 项目编号 mcuclub dz 068 单片机 STC89C52 功能简介 1 通过超声波检测前方障碍物 如果前方出现障碍物
  • How to Troubleshoot Grid Infrastructure Startup Issues [ID 1050908.1]

    How to Troubleshoot Grid Infrastructure Startup Issues ID 1050908 1 Modified 21 MAY 2010 Type HOWTO Status PUBLISHED In
  • VS中C语言调试逐语句和逐过程的区别

    以vs程序为例 其逐语句调试和逐过程调试的区别仅在于它们处理函数调用的方式不同 这两个命令都指示调试器执行下一行的代码 如果某一行包含函数调用 逐语句 仅执行调用本身 然后在函数内的第一个代码行出停止 而 逐过程 执行整个函数 然后在函数外
  • OA系统-考勤模块

    1 考勤管理 签到 前台代码实现 1 jQuery代码 页面初始化绑定事件 怎么实现 function signin click function 2 考勤管理 签到 全部功能实现 1 简述签到功能的逻辑 对签到按钮绑定单击事件 我们点击按