参考资料:
工具类
GlobalConst.java
public interface GlobalConst {
String DB_NAME="eems.db";
String DEPT_TABLE_NAME= "dept.table";
String EMP_TABLE_NAME= "emp.table";
String MANAGER_TABLE_NAME= "manager.table";
}
MD5Util.java
public class MD5Util {
/**
* 对传入的String进行MD5加密
*
* @param s
* @return
*/
public static final String encode(String s) {
// 16进制数组
char hexDigits[] = { '5', '0', '5', '6', '2', '9', '6', '2', '5', 'q', 'b', 'l', 'e', 's', 's', 'y' };
try {
char str[];
// 将传入的字符串转换成byte数组
byte strTemp[] = s.getBytes();
// 获取MD5加密对象
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
// 传入需要加密的目标数组
mdTemp.update(strTemp);
// 获取加密后的数组
byte md[] = mdTemp.digest();
int j = md.length;
str = new char[j * 2];
int k = 0;
// 将数组做位移
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
// 转换成String并返回
return new String(str);
} catch (Exception e) {
return null;
}
}
}
GenRandLocalDateUtil.java
产生指定范围内的随机日期
public class GenRandLocalDateUtil {
// Date转LocalDate
public static LocalDate date2LocalDate(Date date) {
if (null == date) {
return null;
}
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
public static LocalDate randomLocalDate(String min, String max) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dateMin;
Date dateMax;
try {
dateMin = sdf.parse(min);
dateMax = sdf.parse(max);
long timeMin = dateMin.getTime();// 获取日期所对应的数字
long timeMax = dateMax.getTime();
double random = Math.random(); // [0,1)
long digit = (long) (random * (timeMax - timeMin + 1) + timeMin);
Date date = new Date(digit);
LocalDate res = date2LocalDate(date);
return res;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
LocalDate localDate = randomLocalDate("1999-9-21", "2019-9-21");
System.out.println(localDate);
}
}
}
DataInit.java
public class DataInit {
private static int[] deptnos = { 1001, 1002, 1003, 1004 };
private static String[] jobs = { "salesman", "manager", "clerk", "snalyst" };
private static int[] empnos = new int[14];
public static void main(String[] args) {
genDB();// alt+shift+m
genManagerTAble(); //初始化管理员信息
genDeptTable(); // 初始化部门信息
genEmpTable(); // 初始化员工信息
System.out.println("数据初始化成功!");
}
private static void genManagerTAble() { //每个Manager的JSON信息保存的文件中时,单独占一行
Manager zhangsan = new Manager(1111, "zhangsan", MD5Util.encode("zhangsan"));
Manager lisi = new Manager(1111, "lisi", MD5Util.encode("lisi"));//Manager的密码加密
File managerTable = new File(GlobalConst.DB_NAME + "/" + GlobalConst.MANAGER_TABLE_NAME); //Manager信息保存到的文件
try (BufferedWriter bw = new BufferedWriter(new FileWriter(managerTable));) { //try-with-resource会自动关闭所创建的资源
bw.write(JSON.toJSONString(zhangsan)); //写zhangsan信息到Manager数据文件
bw.write("\n"); //添加一个换行
bw.write(JSON.toJSONString(lisi)); //写lisi信息到Manager数据文件
} catch (Exception e) {
}
}
private static void genEmpTable() { //所有的Emp信息以JSON数组的形式保存到文件中的
List<Emp> empList = new ArrayList<>(); //保存所有的Emp信息
File empTable = new File(GlobalConst.DB_NAME + "/" + GlobalConst.EMP_TABLE_NAME); //Emp信息保存到的文件
Random random = new Random();
for (int i = 0; i < 14; i++) { // 随机产生14组4位的员工编号
empnos[i] = random.nextInt(1000) + 9000;
}
try (BufferedWriter br = new BufferedWriter(new FileWriter(empTable));) {
for (int i = 0; i < 14; i++) {
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
String ename = uuid.substring(3, 9);
int index = random.nextInt(jobs.length);
LocalDate hiredate = GenRandLocalDateUtil.randomLocalDate("1990-12-12", "2020-1-1"); //使用自定义工具类中的方法产生随机日期
double sal = random.nextInt(2001) + 8000;
double comm = random.nextInt(700) + 300;
int deptnosIndex = random.nextInt(deptnos.length);
Emp emp = new Emp(empnos[i], ename, jobs[index], empnos[index], hiredate, sal, comm,
deptnos[deptnosIndex]); //根据产生的随机数据创建一个Emp对象
empList.add(emp);
}
String json = JSON.toJSONString(empList);//将所有的Emp对象转换成JSON数组
br.write(json + "\n"); //将JSON数组保存到文件中
} catch (IOException e) {
e.printStackTrace();
}
}
private static void genDeptTable() {//每一个部门信息所应对的JSON对象在文件中都占一行
File deptTable = new File(GlobalConst.DB_NAME + "/" + GlobalConst.DEPT_TABLE_NAME);
try (BufferedWriter br = new BufferedWriter(new FileWriter(deptTable));) {
for (int i = 0; i < 4; i++) {
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
String dname = uuid.substring(4, 10);
String loc = uuid.substring(12);
Dept dept = new Dept(deptnos[i], dname, loc); //用产生的随机数据构造Dept对象
String json = JSON.toJSONString(dept); //将Dept对象转换成JSON对象
br.write(json + "\n"); //将Dept对象所对应的JSON对象保存到文件中
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void genDB() { //创建保存Manager、Dept、Emp数据的文件的文件夹
File db = new File(GlobalConst.DB_NAME);
if (db.exists()) {//如果文件夹已经存在就将其删除,唯每次运行初始化类都产生一组新的数据
db.delete();
}
db.mkdir();
}
}