“1+X”证书制度下《Java程序设计》课程实践教学探索
2020-12-31郝丽娜
林 敏 郝丽娜
(武汉工程职业技术学院 湖北 武汉:430080)
《Java程序设计》是一门重要的计算机编程课程,是计算机相关专业必修课程之一,具有较强的理论性、专业性和实践性。目前,本门课程存在教学内容多课时少,教学方式重理论轻实践,学生动手实践能力和编码开发能力较弱的现象,进而可能导致学生就业竞争力不强、求职信心受挫。通过调查发现不少学生感到该门课程入门难度较大、内容较多、课程学完了但还是不太会运用。为了解决这一问题,笔者在实践教学中采用项目驱动教学方式,结合“1+X”证书制度下的《Java程序设计》课程教学改革的要求,以“采用Java实现员工考勤系统”为例,对该课程的实践教学进行了设计与探索,有助于提升该课程的教学质量和教学效果。
1 设计过程
1.1 “1+X”证书制度解读
“1+X”证书制度是一套将学历教育与职业培训并重的创新教育制度,其中的“1”代指学历证书,“X”代指职业技能证书。以“大数据应用开发(Java)职业技能”等级证书为例,证书共分为初、中、高三个等级,每一等级均包含理论考试和上机考试两部分。理论考试为选择题,上机考试为编程实践题,同一次考试中两部分考试成绩均达到60分及以上者才能获得证书。
大数据应用开发(Java)职业技能证书(初级)要求学生掌握Java开发环境搭建、语法基础、Java面向对象程序设计、软件测试、运维基础、成本核算方法等,初级对标大数据领域的测试工程师。大数据应用开发(Java)职业技能证书(中级)要求学生掌握Java编程基础知识和面向对象开发技术中的类和对象、方法、封装、继承、多态、接口、集合、反射、JDBC和I/O流操作等知识,同时还需掌握数据库中的增、删、改、查等知识,能熟练编码解决数据访问需求等。中级为大数据领域的测试工程师和开发工程师之间的过渡级别。大数据应用开发(Java)职业技能证书(高级)要求学生除了掌握中级的核心知识点外还需掌握MVC设计模式、Spring框架(Spring、SpringMVC、SpringBoot)、Hadoop集群环境搭建、数据迁移、数据处理、数据挖掘常用算法及工具、数据可视化等,高级对标大数据领域的开发工程师。
1.2 知识、能力与素质目标构建
依据教育部高等职业学校软件技术专业教学标准和软件技术专业人才培养方案,基于Java程序员岗位工作过程,将课程标准与“1+X”证书考核标准对接,以大数据应用开发(Java)职业技能“1+X”证书(中级)的考纲考点要求为例,按照知识、能力与素质三方面目标要求(见表1),重建《Java程序设计》课程实践教学内容。采用项目驱动教学方式,以实际项目为例,培养学生的动手编程能力、应用开发能力、创新能力和团队合作能力等。通过项目实践和“1+X”证书的考试训练过程,促使学生养成良好的编码习惯,提高学生编程兴趣的同时也增强了就业的内动力和竞争力。
表1 知识、能力、素质三方面目标
1.3 实践学时安排
建议实践项目教学实施至少安排8学时,其中教师用2学时讲解项目需求与整体设计思路,学生至少需6学时上机编码完成项目中的数据库与类设计、实体类设计、工具类设计、实体操作类设计和测试类设计等。
2 教学实施
以“采用Java实现员工考勤系统”为例,对《Java程序设计》课程的实践教学进行了设计和探索。
2.1 需求分析
某公司固定上下班时间,规定每个工作日8点上班17:00下班,并使用传统指纹打卡机进行员工考勤。在互联网迅速发展的今天,该公司决定使用手机软件取代传统指纹打卡机,规定迟到或早退1分钟扣x元工资且不设上限。员工仅可在以(0,0)为圆心,100个单位为半径的圆形范围内打卡并写入到employees.txt考勤信息文件中。该项目实现自动统计员工出勤情况及计算员工的实发工资。
2.2 项目设计
2.2.1 系统功能设计
系统按照功能分为三部分:
第一部分(读入数据):首先需要将数据从文件中读入,然后由程序存入数据库。具体的操作为将准备好的考勤信息文件employees.txt和员工信息文件records.txt中的数据分别存入到数据库中的EMPLOYEES表和RECORDS表。
第二部分(添加数据):添加员工信息和考勤记录。
第三部分(查询和处理数据):查询员工信息、考勤信息和计算工资。
2.2.2 数据库与类的设计
为了方便数据进入数据库的操作,在Oracle数据库中创建表EMPLOYEES,在Eclipse中创建包,如org.min.bean,在此包下创建Employee.java,定义Employee类,Employee类与EMPLOYEES表相对应,字段的对应关系见表2。
表2 Employee类与EMPLOYEES表字段对应关系
在Oracle数据库中创建表RECORDS,在Eclipse的org.min.bean包下创建Record.java,定义Record类,Record类与RECORDS表相对应,字段的对应关系见表3。
表3 Record类与RECORDS表对应关系
2.3 功能模块划分
整个项目文件包、类文件结构如图1所示。
图1 项目结构图
(1)实体类
实体类有Employee员工信息实体类、EmployeeSalary员工工资实体类和Record考勤记录实体类。
Employee员工信息实体类中包含员工ID、员工姓名、员工工资及打卡记录等信息。为增强数据安全性,将所有字段访问属性设置为private,然后用get和set方法对各个字段进行封装。相关字段如下。
private int id; //员工ID
private String name; //员工姓名
private double salary; //员工工资
private List
EmployeeSalary员工工资实体类中包含员工信息、月份、迟到总时长(单位为分钟)、早退总时长(单位为分钟)、实发工资等信息。为增强数据安全性,将所有字段访问属性设置为private,然后用get和set方法对各个字段进行封装。相关字段如下。
private Employee employee; //员工信息
private int month; //月份
private int punchIn; //迟到总时长 单位为分钟
private int punchOut; //早退总时长 单位为分钟
private double actualSalary; //实发工资
Record考勤记录实体类中包含员工号、打卡时间、打卡类型(上班/下班)、打卡位置(横坐标)、打卡位置(纵坐标)、打卡超时(单位为分钟)等信息。为增强数据安全性,将上述字段访问属性设置为private,然后用get和set方法对各个字段进行封装。另外,定义了两个静态常量用来设置打卡的类型,相关字段如下。
private int employeeId; //员工号
private long recordTime; //打卡时间
private int type; //打卡类型 上班/下班
private double locationX; //打卡位置 横坐标
private double locationY; //打卡位置 纵坐标
private int outTime; //超时 单位:分钟
public static final int PUNCH_IN=1; //打卡类型常量:上班打卡
public static final int PUNCH_OUT=2; //打卡类型常量:下班打卡
(2)工具类
工具类中包含EmployeeUtil类、RecordUtil类和IOUtil类
EmployeeUtil类的功能是将读入的字符串转为Employee对象。该类中定义了一个公有的静态的toEmployee方法,实现了将传入的字符串通过split()函数分解,然后将分解的字段存入Employee对象中。
RecordUtil类的功能是将读入的字符串转为Record对象。该类中定义了一个公有的静态的toRecord方法,实现将传入的字符串通过split()函数分解,然后将分解的字段存入Record对象中。
IOUtil类的设计中包含两个方法,一个是readEmployees()方法,其功能是将存有员工信息的文本文件employees.txt通过FileReader文件输入流顺序地读入,然后调用工具类EmployeeUtil将读入的字符串存进Employee对象中,返回Employee对象集合。另一个是readRecords()方法,其功能是将存有员工打卡记录的文本文件records.txt通过FileReader文件输入流顺序地读入,然后调用工具类RecordUtil将读入的字符串存入Record对象中,返回Record对象集合。方法的定义如下。
public static List
public static List
(3)实体操作类
实体操作类有EmployeeDao类和RecordDao类。
EmployeeDao类主要用来对Employee实体类进行操作,主要功能为:添加一个或多个员工多个员工和查询某员工某个月的工资信息。方法的定义如下。
public int addEmployee(Employee emp) //添加一个员工
public boolean addAll(List
public EmployeeSalary getEmployeeSalaryById(int employeeId,int year,int month)
//查询某员工某个月的工资信息
RecordDao类主要用来对Record实体类进行操作,实现了添加一条打卡记录、批量添加打卡记录和根据指定月份查询某员工的打卡记录的功能。方法的定义如下。
public int addRecord(Record record) //添加打卡记录
public boolean addAll(List
public List
(4)测试类
测试类有ConnTest测试类、EmployeeDaoTest测试类和RecordDaoTest测试类。
ConnTest测试类中主要方法有:
public void connTest() //获取数据库连接测试
EmployeeDaoTest测试类中主要方法有:
EmployeeDaoTest //批量添加员工测试
public void testAddEmployee() //添加一个员工测试
public void testGetEmployeeSalary() //查询某员工的考勤和工资信息测试
RecordDaoTest测试类中主要方法有:
public void testAddAllRecords() //批量添加打卡记录测试
public void testAddRecord() //添加一个打卡记录测试
public void testGetMonthRecordById() //根据员工ID查询打卡记录
2.4 项目编码(部分)
(1)读取文本文件中所有的员工信息
public static List
FileReader fr=null;
BufferedReader br=null;
List
try {
fr=new FileReader (empFilePath);
br=new BufferedReader(fr);
String str;
while((str=br.readLine ())!=null) {
Employee employee=EmployeeUtil.toEmployee(str);
emps.add (employee);
}
} catch (Exception e) {
e.printStackTrace();
}
return emps;
}
(2)查询某员工某个月的工资信息和考勤记录
public EmployeeSalary getEmployeeSalaryById(int employeeId,int year,int month) {
String sql="select id,name,salary from EMPLOYEES where id=?";
Employee employee=new ObjectUtil
//查询考勤记录
List
employee.setRecords (records);
int punchIn=0;
int punchOut=0;
//统计缺勤时间
for(Record record:records) {
if(record.getType ()==Record.PUNCH_IN) {
punchIn=record.getOutTime();
}else if(record.getType ()==Record.PUNCH_OUT) {
punchOut=record.getOutTime();
}
}
return new EmployeeSalary (employee,month, punchIn, punchOut);
}
3 教学效果
通过真实案例的项目教学实践,学生全程参与了项目的需求分析、功能设计、数据库设计、实体类设计、工具类设计、实体操作类设计、测试类设计和编码等,对项目的开发流程有了一定的了解,在理论课上所学的《Java程序设计》课程的章节知识点通过项目实践得到综合运用,学生的学习积极性和自信心也得到相应的提高,进而增强了就业的内动力和竞争力。