{"id":20555864,"url":"https://github.com/mintimate/basic-hr-system","last_synced_at":"2025-06-14T08:08:13.638Z","repository":{"id":108490885,"uuid":"233248368","full_name":"Mintimate/Basic-HR-System","owner":"Mintimate","description":"Basic HR System,Design with Java ,and java only.It's a basic for getting started with Java.","archived":false,"fork":false,"pushed_at":"2020-01-12T01:48:25.000Z","size":15160,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-16T18:03:12.853Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mintimate.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-11T14:56:28.000Z","updated_at":"2020-01-12T01:48:27.000Z","dependencies_parsed_at":"2023-05-14T09:15:52.088Z","dependency_job_id":null,"html_url":"https://github.com/Mintimate/Basic-HR-System","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mintimate%2FBasic-HR-System","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mintimate%2FBasic-HR-System/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mintimate%2FBasic-HR-System/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mintimate%2FBasic-HR-System/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mintimate","download_url":"https://codeload.github.com/Mintimate/Basic-HR-System/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242163849,"owners_count":20082224,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T03:21:29.610Z","updated_at":"2025-03-06T06:41:40.731Z","avatar_url":"https://github.com/Mintimate.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 引言\n本文章，主要是作为Java小型项目演示--人事管理系统\n\u003cfont color=\"#FD0A7C\"\u003e（因为现在很少人用Java打界面，所以界面等未完全规划，仅为一次Java入门项目演示）\u003c/font\u003e  \n**更多内容**以及想**捐赠**我的，请访问:https://www.mintimate.cn\n\n# 需求分析\n为了方便用户对Sql表进行可视化增、删、改、查、导入、导出。设计改系统进行可视化操作；\n\n\n# 项目结构\n| 数据库       | 媒介           | 工具类         | 特殊\\-Excel导入Mysql | UI界面          |\n|-----------|--------------|-------------|------------------|---------------|\n| CommonDao | Department   | browser     | InExcel          | MainFrame     |\n| EmpDao    | Employee     | ExportExcel | Read\\\\\\_Excel    | Refind        |\n| UserDao   | salary       | DBOut       | Read\\\\\\_Mysql    | RegisterFrame |\n| User      | Md5          | SQLselect   | Result           |\n|           | Print\\_Error |             |                  |               |\n|           | Check\\_Image |             |                  |               |\n\n\n# 调用包\n\u003e java jdk-8.jar\n\u003epoi-3.7.jar\n\u003emysql-connector-java-8.0.15.jar\n\u003elog4j-1.2.17.jar\n\u003ecommons-logging-1.2.jar\n\u003ejxl-2.6.12.jar\n\n## 数据库实现\n\u003e CommonDao\n\u003e\n\u003e\u003e 数据库连接功能\n\u003e\n\u003e EmpDao\n\u003e\n\u003e\u003e 数据库Emp表的增、删、改、查\n\u003e\n\u003e UserDao\n\u003e\u003e 数据库User表的增、删、改、查\n\n## 工具类实现\n\u003ebrowser\n\u003e\u003e 打开外链(我用来打开“开发者文档”/“帮助文档”)\n\u003e\n\u003e DBOut\n\u003e\u003e 数据库sql表导出为Excel表格\n\u003e\n\u003e ExportExcel\n\u003e\u003e 数据库部分sql表导出为Excel表格\n\u003e\n\u003e Md5\n\u003e\u003e Md5加密类，传入String类型字符串，返回改加密后内容\n\u003e\n\u003e Print_Error\n\u003e\u003e 日志文件、异常报错输出到日志文件\n\u003e\n\u003e Check_Image\n\u003e\u003e 登入图形验证码核心实例代码\n\n## UI界面实现\n\u003e MainFrame\n\u003e\u003e 主要窗口(登入)\n\u003e\n\u003e Refind\n\u003e\u003e 找回密码页面\n\u003e\n\u003e RegisterFrame\n\u003e\u003e 注册账户、用户权限建立\n\u003e\n\u003e SQLselect\n\u003e\u003e 管理员模糊查询界面\n\u003e\n\u003eSQLselect2\n\u003e\u003e 普通用户模糊查询界面\n\n# 注册/登陆\n## 权限分级\n根据用户不同需求分为：\n\u003e管理员\n\u003e\u003e 可以对数据库表进行增、删、改、查、**导出、导入**\n\u003e\n\u003e普通用户\n\u003e\u003e仅能对数据库进行查、**导出**\n\n## 用户登陆\n\u003e 使用工具类-Md5对密码进行加密传输\n**为了防止来自网络的“字典爆破”，对密码采取Md5加密**\n\n\u003e 为了防止多用户恶意多次无效请求造成服务器负载，对登陆用户**采取图形验证码**\n\n## 用户注册\n\u003e注册时，可以根据用户的需求，注册不同用户权限的账户\n\n\u003e注册时填写的密保钥匙用于找回密码(重置密码)\n\n# 日志功能\n针对用户不同操作，如：用户尝试登陆、用户密码错误等操作，进行日志输出功能，日志文件存储在**keyservice.log**文件内\n## 额外功能\n对可能存在的异常报错，输出至**keyservice.log**文件内，方便后期程序调试。\n\n# 操作功能\n## 查询、删除功能\n查找，针对用户提供的关键字，对全表进行检录；并提供删除功能\n\n## 修改功能\n针对用户选中的数据，用户可在**修改**页面进行选定项内部内容修改\n\n## 添加功能\n用户可在**添加**页面添加数据内容\n\n## 导入功能\n管理员用户可以选择一个和数据库表头相同的xls、xlsx表文件进行导入操作\n\n## 导出功能\n用户可以导出当前查询的结果为xls表格\n\n# 部分功能代码实现\n\n## 用户密码MD5加密\n\u003e 调用security.MessageDigest类\n\n```\npublic static String Md5(String str){\n    String Md=null;\n    try {\n        MessageDigest messageDigest = MessageDigest.getInstance(\"MD5\");\n        messageDigest.update(str.getBytes());\n        Md=toHex(messageDigest.digest());\n    } catch (Exception e) {\n        e.printStackTrace();\n    }\n    return Md;\n}\nprivate static String toHex(byte buffer[]) {\n    StringBuffer sb = new StringBuffer(buffer.length * 2);\n    for (int i = 0; i \u003c buffer.length; i++) {\n        sb.append(Character.forDigit((buffer[i] \u0026 240) \u003e\u003e 4, 16));\n        sb.append(Character.forDigit(buffer[i] \u0026 15, 16));\n    }\n\n    return sb.toString();\n}\n```\n\n## 外链跳转\n```\nimport org.apache.commons.logging.Log;\nimport org.apache.commons.logging.LogFactory;\n\n//import static com.Mintimate.tool.Print_Error.getTrace;\n\npublic class browser {\n    public static Log log = LogFactory.getLog(browser.class);\n    public static void show(String url) {\n        try {\n            java.net.URI uri = java.net.URI.create(url);\n            // 获取当前系统桌面扩展\n            java.awt.Desktop dp = java.awt.Desktop.getDesktop();\n            // 判断系统桌面是否支持要执行的功能\n            if (dp.isSupported(java.awt.Desktop.Action.BROWSE)) {\n                //File file = new File(\"D:\\\\aa.txt\");\n                //dp.edit(file);// 　编辑文件\n                dp.browse(uri);// 获取系统默认浏览器打开链接\n                // dp.open(file);// 用默认方式打开文件\n                // dp.print(file);// 用打印机打印文件\n            }\n        } catch (java.lang.NullPointerException e) {\n            // 此为uri为空时抛出异常\n//            e.printStackTrace();\n            log.error(getTrace(e));\n\n        } catch (java.io.IOException e) {\n            // 此为无法获取系统默认浏览器\n            e.printStackTrace();\n        }\n    }\n}\n```\n## Mysql表格转Excel(部分表格导出)\n\u003e 需要依赖apache.poi.jar\n\n## Mysql表转Excel(全表格导出)\n\u003e 调用poi2.7jar外部包\n\n```\npublic class DBOut {\n    public final static String url = \"jdbc:mysql://？？\"; // 数据库URL\n    public final static String user = \"？？\"; // 数据库用户名\n    public final static String password = \"？？\"; // 数据库密码\n    private static String printfdata;\n\n\n    public static void PrintExcel(String Excel){ //打印Excel表\n        printfdata=Excel;\n        try {\n            DBOut.printfdata();\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n\n    }\n    // 把数据库单张表信息导入到Excel表中\n\n    private static void  printfdata() throws Exception {\n        Class.forName(\"？？\");        // 数据库驱动\n\n        // 连接数据库\n        Connection con = (Connection) DriverManager.getConnection(url, user,\n                password);\n        // 创建Excel表。\n        Workbook book = new HSSFWorkbook();\n        String Table_Name = printfdata;//表名\n        // 在当前Excel创建一个子表\n        Sheet sheet = book.createSheet(Table_Name);\n\n        Statement st = (Statement) con.createStatement();\n        // 创建sql语句，对team进行查询所有数据\n        String sql = \"select * from ？？.\" + Table_Name;//？？为数据库名字\n        ResultSet rs = st.executeQuery(sql);\n        // 设置表头信息（写入Excel左上角是从(0,0)开始的）\n        Row row1 = sheet.createRow(0);\n        ResultSetMetaData rsmd = rs.getMetaData();\n        int colnum = rsmd.getColumnCount();\n        for (int i = 1; i \u003c= colnum; i++) {\n            String name = rsmd.getColumnName(i);\n            // 单元格\n            Cell cell = row1.createCell(i - 1);\n            // 写入数据\n            cell.setCellValue(name);\n        }\n        // 设置表格信息\n        int idx = 1;\n        while (rs.next()) {\n            // 行\n            Row row = sheet.createRow(idx++);\n            for (int i = 1; i \u003c= colnum; i++) {\n                String str = rs.getString(i);\n                // 单元格\n                Cell cell = row.createCell(i - 1);\n                // 写入数据\n                cell.setCellValue(str);\n            }\n        }\n        // 保存\n        File file = new File(printfdata+\".xls\");\n        book.write(new FileOutputStream(file));\n\n    }\n}\n```\n使用：\n比如打印数据库内user表，只需要\n```\nDBOut.PrintExcel(\"user\");\n```\n\n## Excel导入Mysql\n\u003eInExcel\n\u003e\u003e主要操作类，将Excel生成的二维表导入Mysql\n\u003e\n\u003eRead_Excel\n\u003e\u003e读取选定Excel表，生成二维表\n\u003e\n\u003eRead_Mysql\n\u003e\u003e读取Mysql数据，查询是否可以插入\n\u003e\n\u003eResult\n\u003e\u003e返回结果，是否成功\n\n## 图形验证码实现\n\u003e Check_Image\n\u003e\u003e 使用随机线段和随机颜色，在String库中，挑选4个字符，生成图片\n\n```\nimport java.awt.Color;\nimport java.awt.Font;\nimport java.awt.Graphics;\nimport java.awt.image.BufferedImage;\nimport java.util.Random;\n\npublic class Check_Image {\n    private static final char[] chars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',\n            'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; // 字符数量\n    private static final int SIZE = 4; \n    // 干扰线数量\n    private static final int LINES = 5; \n    // 宽度\n    private static final int WIDTH = 80; \n    // 高度\n    private static final int HEIGHT = 40; \n    // 字体大小\n    private static final int FONT_SIZE = 35;\n\n    /** * 生成随机验证码及图片 */\n    public static Object[] createImage() {\n        StringBuffer sb = new StringBuffer(); // 1.创建空白图片\n        BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); // 2.获取图片画笔\n        Graphics graphic = image.getGraphics(); // 3.设置画笔颜色\n        graphic.setColor(Color.LIGHT_GRAY); // 4.绘制矩形背景\n        graphic.fillRect(0, 0, WIDTH, HEIGHT);\n        // 5.画随机字符\n        Random ran = new Random();\n        for (int i = 0; i \u003c SIZE; i++) {\n            // 取随机字符索引\n            int n = ran.nextInt(chars.length);\n            // 设置随机颜色\n            graphic.setColor(getRandomColor());\n            // 设置字体大小\n            graphic.setFont(new Font(null, Font.BOLD + Font.ITALIC, FONT_SIZE));\n            // 画字符\n            graphic.drawString(chars[n] + \"\", i * WIDTH / SIZE, HEIGHT);\n            // 记录字符\n            sb.append(chars[n]);\n        } // 6.画干扰线\n        for (int i = 0; i \u003c LINES; i++) { // 设置随机颜色\n            graphic.setColor(getRandomColor()); // 随机画线\n            graphic.drawLine(ran.nextInt(WIDTH), ran.nextInt(HEIGHT), ran.nextInt(WIDTH), ran.nextInt(HEIGHT));\n        }\n        // 7.返回验证码和图片\n        return new Object[] { sb.toString(), image };\n    }\n\n    /** * 随机取色 */\n    public static Color getRandomColor() {\n        Random ran = new Random();\n        Color color = new Color(ran.nextInt(256), ran.nextInt(256), ran.nextInt(256));\n        return color;\n    }\n```\n\n# 安全实现\n## 数据库内容备份\n每日24点，由服务器自动备份数据库文件\n\n## 用户密码加密\n用户密码Md5加密，防止“字典爆破”\n\n# 规划\n## B/S化结构\n计划实现B/S项目结构，使用SpringBoot+MyBatis，目前没有打算MVC结构\n\n## MongoDB\nMongoDB是基于分布式文件存储的数据库，为WEB应用提供可扩展的高性能数据存储解决方案；\n为了预防用户使用过程中多次读写，使用MongoDB对数据进行缓冲。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmintimate%2Fbasic-hr-system","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmintimate%2Fbasic-hr-system","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmintimate%2Fbasic-hr-system/lists"}