OA系统-考勤模块

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)为什么在数据库中有状态码字段,这个字段的作用是什么?缺少这个字段可以吗?
为下面审核报销单做准备,不可以缺少,因为不知道状态就无法审核

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值