实验24:20230318 Java大数据1+X 中级实操考试(id:3713)

一、项目背景说明

员工考勤管理系统是专门用来管理员工考勤的一套系统,本项目使用控制台来模拟其部分功能。

  • 涉及到的类有:员工基本信息类 Info 和员工考勤信息类 Account。
  • 对应的数据表有:员工基本信息表 info 和员工考勤信息表 account。
  • 功能主要涉及到:员工信息的查询与修改、考勤信息的查询与修改等功能。

二、表结构

我们设计好了表的结构,本次考核涉及 2 张表:

  • info 表
    该表的含义是 员工基本信息,共有 4 个字段,详情如下:
表字段 数据库数据类型 含义 备注
name VARCHAR 员工姓名 主键
age INT 员工年龄
sex VARCHAR 员工性别
phone VARCHAR 员工电话
  • account 表
    该表的含义是 员工考勤信息,共有 3 个字段,详情如下:
表字段 数据库数据类型 备注 备注
name VARCHAR 员工姓名
begintime VARCHAR 员工上班时间
endtime VARCHAR 员工下班时间

三、步骤

【5 分】步骤 1:项目准备

复制粘贴、略。

【10 分】步骤 2:完成实体类 Info

题目:

rg.lanqiao.bean.Info是一个实体类,有 4 个属性,与数据库表 info 及其字段一一对应,对应关系如下。

【数据库表 info 的字段与实体类 Info 的属性的对应关系】

序号 类属性 表字段 数据库数据类型 备注
1 name name VARCHAR 主键
2 age age INT
3 sex sex VARCHAR
4 phone phone VARCHAR

请根据注释要求,补全空缺的代码。

    //补充完成该类的含参构造方法
    public Info(String name, int age, String sex, String phone) {
    
    
        
        
    }

答案:

public Info(String name, int age, String sex, String phone) {
    
    
	this.setName(name);
	this.setAge(age);
	this.setSex(sex);
	this.setPhone(phone);
}

【10 分】步骤 3:完成 Info 的 toString 方法

题目:

请根据注释要求,补全 Info 的 toString 方法。

    // 请修改该方法,以保证打印对象时输出格式如下:
    // [name='zs';age=20;sex='男';phone='18812349876']
    @Override
    public String toString() {
    
    
        return "";
    }

答案:

@Override
public String toString() {
    
    
	return "[name='"+this.getName()+"';age="+this.getAge()+";sex='"+this.getSex()+"';phone='"+this.getPhone()+"']";
}

【10 分】步骤 4:完成 Account

题目:

org.lanqiao.bean.Account是一个实体类,有 3 个属性,与数据库表 account 及其字段一一对应,对应关系如下。

【数据库表 account 的字段与实体类 Account 的属性的对应关系】

序号 类属性 表字段 数据库数据类型 备注
1 name name VARCHAR
2 begintime begintime VARCHAR
3 endtime endtime VARCHAR

请根据注释要求,补全空缺的代码。

    // 请补全以下方法,要求下班时间不能大于20:00:00
    // 时间格式如:2023-03-08 18:19:20
    // 当参数在规定范围外时,不做任何动作
    public void setEndtime(String endtime) {
    
    
        String[] s1 = endtime.split(" ");
        String time = "20:00:00";
        // 缺失代码:
        
        
        
    }

答案:

public void setEndtime(String endtime) {
    
    
	String[] s1 = endtime.split(" ");
	String time = "20:00:00";
	// 缺失代码:
	LocalTime end = LocalTime.parse(s1[1]);
	LocalTime limit = LocalTime.parse(time);
	if (end.isBefore(limit)){
    
    
		this.endtime = endtime;
	}
}

【10 分】步骤 5:完成 SSDaoImpl 的 queryByName 方法

题目:

数据存入数据库之后,我们需要进行相关的 CRUD,进行数据的处理和展示,数据库的操作我们封装到 org.lanqiao.daoimpl.SSDaoImpl 里面,请帮忙完成。

请根据注释要求,补全 queryByName 方法。

    /**
     * 依据员工姓名查询员工信息
     * @param name 员工姓名
     * @return 有的话返回对象,没有的话返回null
     */
    public Info queryByName(String name){
    
    
        // 请补全sql代码
        String sql = "###";
        Info info = JDBCUtil.getSingleResult(sql, Info.class, name);
        return info;
    }

答案:

public Info queryByName(String name){
    
    
    // 请补全sql代码
    String sql = "select * from info where name=?";
    Info info = JDBCUtil.getSingleResult(sql, Info.class, name);
    return info;
}

【10 分】步骤 6:继续完善 SSDaoImpl 类

题目:

请根据注释要求,补全 queryNum 方法。

    /**
     * 依据员工性别查询人数
     * @param sex 员工性别
     * @return 返回人数
     */
    public int queryNum(String sex) {
    
    
        // 请补全sql语句
        String sql = "###";
        List<Info> list = JDBCUtil.getResult(sql, Info.class, sex); 
        return list.size();
    }

答案:

public int queryNum(String sex) {
    
    
    // 请补全sql语句
    String sql = "select name from info where sex=?";
    List<Info> list = JDBCUtil.getResult(sql, Info.class, sex); 
    return list.size();
}

【15 分】步骤 7:继续完善 SBDaoImpl 类

题目:

请根据注释要求,补全 check 方法。

    /**
     * 查看员工考勤是否正常
     * 规则如下:
     * 全天至少工作9个小时
     * 
     * 需求:
     * 员工考勤正常的话,返回true,考勤异常的话,返回false
     *
     * @param name 员工姓名
     * @param date 考勤日期,如:2023-03-10
     */
    public Boolean check(String name,String date) {
    
    
        String sql = "select * from account where name=? and substr(begintime,1,10)=?";
        Account a = JDBCUtil.getSingleResult(sql, Account.class, name, date);
        boolean flag = false;
        SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date begintime = null;
        Date endtime = null;
        // 请补全代码实现该功能
        
        

        return flag;
    }

答案:

public Boolean check(String name,String date) {
    
    
    String sql = "select * from account where name=? and substr(begintime,1,10)=?";
    Account a = JDBCUtil.getSingleResult(sql, Account.class, name, date);
    boolean flag = false;
    SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date begintime = null;
    Date endtime = null;
    // 请补全代码实现该功能
    try {
    
    
        begintime = dfs.parse(a.getBegintime());
        endtime = dfs.parse(a.getEndtime());
    } catch (Exception e) {
    
    
        // TODO: handle exception
    }
    long diff = endtime.getTime() - begintime.getTime();
    if (diff / (1000 * 60 * 60) >= 9) {
    
    
        flag = true;
    }
    return flag;
}

【15 分】步骤 8:继续完善 SSDaoImpl 类

题目:

请根据注释要求,补全 queryTime 方法。

    /**
     * 依据员工姓名查询其哪天上班时间最早
     * @param sex 员工性别
     * @return 返回最早的上班时间
     */
    public String queryTime(String name) {
    
    
        // 请补全sql语句
        String sql = "###";
        Account a = JDBCUtil.getSingleResult(sql, Account.class, name); 
        return a.getBegintime();
    }

答案:

public String queryTime(String name) {
    
    
    // 请补全sql语句
    String sql = "select min(begintime) as begintime from account where name=?";
    Account a = JDBCUtil.getSingleResult(sql, Account.class, name); 
    return a.getBegintime();
}

【15 分】步骤 9:继续完善 SSDaoImpl 类

题目:

请根据注释要求,补全 updateAge 方法。

 /**
     * 更新所有人的年龄,男人加1,女人加2
     */
    public void updateAge() {
    
    
        // 请补全sql语句
        String sql = "###";
        JDBCUtil.executeSql(sql); 
    }

答案:

public void updateAge() {
    
    
    // 请补全sql语句
    String sql = "update info set `age` = "
    + "case "
    + "when sex='男' then age + 1 "
    + "when sex='女' then age + 2 "
    + "end";
    JDBCUtil.executeSql(sql); 
}

猜你喜欢

转载自blog.csdn.net/realoser/article/details/131078420
今日推荐