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