ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于Java的学生宿舍管理系统:从数据库设计到权限控制与POI导出全解析

基于Java的学生宿舍管理系统:从数据库设计到权限控制与POI导出全解析 简介基于Java的学生宿舍管理系统毕业设计论文面向计算机相关专业毕业生适用于课程设计、毕业设计及答辩准备。论文针对宿舍信息管理混乱、出错率高、安全性差等痛点采用Eclipse开发环境和MySQL数据库完整给出了需求分析、数据库设计、模块编码和系统测试的详细过程。系统按管理员、宿管员、学生三类角色划分权限实现了学生信息维护、公寓资产管理、缴费信息登记、公共场所清理记录、日常事务管理、床位在线申请与审核安排等业务模块并总结了集中管理、高效、安全、可扩展等系统优点。资源为单个Word文档压缩包大小仅1.57MB内含中英文摘要、关键词、目录及完整正文结构清晰便于阅读和修改。目前已有553人学习下载适合作为毕业设计说明书撰写参考和系统设计蓝图。1. 从论文标题到能跑的代码这个系统到底在解决什么问题如果你在下载站或知网上看到“基于java学生宿舍管理系统的设计与实现论文.docx”这个标题大概率和我当年刚接到课设时的反应一样先入为主地觉得它只是个“论文模板”。但等你真正打开这样一份论文会发现它背后根本不是写作文而是一整套要能跑、能演示、能答辩的JavaWeb项目。标题里的“设计与实现”落到实际工程里是三层东西一是有清晰的业务逻辑谁在管宿舍、管什么、怎么管二是有完整的前后端代码和数据库表三是有能写进论文的需求分析、功能设计、ER图和核心代码截图。三级项目最容易被老师问倒的地方恰恰是“你论文里写的这个功能代码里到底在哪”这句话。这篇笔记就顺着这个标题把一套学生宿舍管理系统从选型到建表、从登录鉴权到POI导出、从避坑到论文成稿的完整路径拆开讲。适合三类人正在做Java课设或毕设的学生需要给客户交付宿舍管理系统的初级开发以及想快速搞懂这类“管理系统模板”内部结构的Java学习者。你会拿到能直接复现的最小工程结构、核心表DDL、登录与权限判断的代码片段以及答辩前最该检查的问题清单。2. 角色权限与功能边界先把系统拆成四个身份再动代码很多人做管理系统一上来就建表结果做到一半发现“宿管阿姨能看到学生缴费记录”这种权限漏洞不得不返工。我的习惯是先在纸上把使用这个系统的人分清楚再做表。学生宿舍管理系统的业务参与者常见的分法是四类系统管理员一般是学生处老师或后勤负责人、楼栋管理员每栋楼的宿管员、学生、以及访客或家长部分系统会开放来访登记。标题没有限定规模但绝大多数课程设计和中小型项目的权限模型都在这个范围内。2.1 四类角色的功能矩阵先画表再写代码在动手之前我会先用一张功能矩阵表格把权限边界定死功能模块系统管理员楼栋管理员学生访客/家长宿舍楼/房间管理全量增删改查查看本楼栋不可见不可见学生入住/退宿办理、调整确认与登记申请不可见报修管理查看全局、派单处理本楼栋、提交维修结果提交报修、查看进度不可见来访登记查看记录登记与核实不可见现场登记卫生/纪律评分汇总查看录入与修改查看本宿舍分数不可见公告通知发布与管理转发/接收查看不可见导出报表全量导出本楼栋导出不可见不可见权限矩阵的另一个作用是写论文——需求分析章的功能结构图、用例图直接照这个矩阵画就行。如果用Spring Security或Shiro做权限控制这个矩阵就是配置资源的依据如果用简单的拦截器它就是Servlet路径映射的参照。对于课程设计我建议不引入Spring Security直接在拦截器里判断session中的角色字段就够了理由会在下一节讲。2.2 Spring Boot还是JSPServlet按论文深度和工作量选这是做这类“管理系统”最纠结的选择。两种方案在就业市场上都是主流但课设和毕设的评分侧重完全不同。如果你的论文已经定了标题只写“Java”没有限定框架我强烈建议用Spring Boot MyBatis-Plus Thymeleaf或Vue。原因不是它时髦而是代码量比原始Servlet少一半以上前后端联调更快。但如果你所在学校要求论文里体现“Servlet生命周期”“请求响应流程”那原始ServletJSP反而是好选择——它更容易画出时序图也容易写出篇幅足够的原理章节。我更推荐的是Spring Boot JSPJava Server Pages组合这也是标题里“Java”最常见的一种呈现。它保留了传统Web应用的直观性——JSP里能直接拿到session和request对象学生提交的课设代码老师也更容易看懂。但要注意一个跨浏览器支持的细节JSP自带的JSTL标签库版本老旧在Edge和Chrome的新版本里偶尔会出现标签解析异常实际项目里我通常会把JSTL替换成原生EL表达式。2.3 最小工程结构按这个骨架建目录不迷路选定Spring Boot JSP后给你一个我验过多次的最小工程结构。student-dorm/ ├── pom.xml ├── src/main/java/com/example/dorm/ │ ├── controller/ # 登录、学生、宿舍、报修、公告、统计 │ ├── service/ # 业务接口与实现 │ ├── mapper/ # MyBatis-Plus的Mapper接口 │ ├── entity/ # Student, Dormitory, Repair, Notice... │ ├── config/ # 拦截器注册、跨域配置 │ └── common/ # Result封装类、常量类 ├── src/main/resources/ │ ├── application.yml # 数据源、端口、MyBatis配置 │ ├── mapper/ # XML文件如果不使用注解SQL │ └── static/ └── src/main/webapp/ ├── WEB-INF/jsp/ # 登录页、管理页、学生页 └── static/这个结构里有个容易被忽略的点webapp目录在Spring Boot 2.x之后默认不被构建插件打包必须在pom里显式声明。如果省略这一步本地能启动但打成jar或war部署到服务器上就会404。具体配置在下文避坑章节里展开。3. 数据库设计与核心表DDL宿舍业务的五个实体怎么落表数据库是这类系统评分的重头戏也是论文里ER图、数据字典的来源。我在这个项目里一般设计五张核心表用户表、宿舍楼表、宿舍房间表、床位分配表、报修表。另外根据功能扩展加入住记录、卫生评分表、公告表。表不在多但关系必须清楚——答辩时老师常问“一个宿舍能住几个人”“一个人换宿舍后历史记录怎么查”这些都要用表结构回答。3.1 五张核心表的DDL按这个建表不吃亏-- 用户表管理员、宿管、学生共用一张表用role区分 CREATE TABLE user ( id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 主键, username VARCHAR(50) NOT NULL UNIQUE COMMENT 登录账号, password VARCHAR(100) NOT NULL COMMENT 密码MD5或BCrypt, real_name VARCHAR(50) NOT NULL COMMENT 真实姓名, role TINYINT NOT NULL COMMENT 角色1管理员 2宿管 3学生, student_no VARCHAR(20) COMMENT 学号学生必填, phone VARCHAR(20) COMMENT 联系方式, dorm_building_id BIGINT COMMENT 宿管关联的楼栋ID, status TINYINT DEFAULT 1 COMMENT 状态1启用 0禁用, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, INDEX idx_role (role), INDEX idx_building (dorm_building_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表; -- 宿舍楼表 CREATE TABLE dorm_building ( id BIGINT PRIMARY KEY AUTO_INCREMENT, building_name VARCHAR(50) NOT NULL UNIQUE COMMENT 楼栋名称如1号楼, address VARCHAR(100) COMMENT 楼栋位置, manager_id BIGINT COMMENT 楼栋管理员ID, floor_count INT DEFAULT 6 COMMENT 楼层数, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT宿舍楼表; -- 房间表 CREATE TABLE dorm_room ( id BIGINT PRIMARY KEY AUTO_INCREMENT, building_id BIGINT NOT NULL COMMENT 所属楼栋, room_no VARCHAR(20) NOT NULL COMMENT 房间号如101, capacity INT DEFAULT 4 COMMENT 可住人数, current_count INT DEFAULT 0 COMMENT 已住人数, gender TINYINT DEFAULT 1 COMMENT 1男 0女, status TINYINT DEFAULT 1 COMMENT 1可用 0维修中, UNIQUE KEY uk_building_room (building_id, room_no) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT房间表; -- 住宿记录表记录每一次入住与退宿 CREATE TABLE bed_record ( id BIGINT PRIMARY KEY AUTO_INCREMENT, student_id BIGINT NOT NULL COMMENT 学生用户ID, room_id BIGINT NOT NULL COMMENT 房间ID, check_in_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 入住时间, check_out_time DATETIME COMMENT 退宿时间默认NULL代表在住, reason VARCHAR(200) COMMENT 入住/退宿原因, operator_id BIGINT COMMENT 操作人ID, INDEX idx_student (student_id), INDEX idx_room (room_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT住宿记录表; -- 报修表 CREATE TABLE repair ( id BIGINT PRIMARY KEY AUTO_INCREMENT, student_id BIGINT NOT NULL COMMENT 报修学生, room_id BIGINT NOT NULL COMMENT 宿舍房间, description VARCHAR(500) NOT NULL COMMENT 问题描述, images VARCHAR(500) COMMENT 图片路径逗号分隔, status TINYINT DEFAULT 0 COMMENT 0待处理 1处理中 2已完成 3已评价, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, handle_time DATETIME COMMENT 处理时间, handler_id BIGINT COMMENT 处理人ID, handler_note VARCHAR(500) COMMENT 处理备注 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT报修表;这张建表SQL的要点值得展开三条。第一用户表把管理员、宿管、学生合在同一张表用role区分而不是建三张表——这是课程设计里最常用的设计论文里写“单一用户表角色驱动的权限模型”是很加分的表述。第二bed_record表是关键很多同学只给学生表加一个room_id字段导致换宿舍时旧记录被覆盖。第三房间表里的current_count可以冗余但一定要在业务层保持和bed_record一致。3.2 为什么要冗余current_count而不是实时统计这是我和很多同行讨论过的一个取舍点。理论上current_count完全可以通过SELECT COUNT(*) FROM bed_record WHERE room_id? AND check_out_time IS NULL得到不需要冗余字段。但实际做管理系统列表页经常要展示“全校哪些房间没住满”如果用实时统计一次列出200个房间就要200次COUNT查询索引再快也扛不住。冗余current_count后入住时1、退宿时-1配合事务就能保证一致性。代价是换宿舍场景要写一个比价麻烦的Service方法。我的做法是封装一个事务方法参数为studentId、newRoomId、operatorId。方法内先查当前在住记录将其check_out_time置为当前时间再插入新记录同时更新旧房间current_count减1、新房间加1。四步操作全部在Service里加Transactional。这一段的代码写进论文能直接支撑“数据库事务管理”这一小节。3.3 宿舍查询的典型SQL房间状态联表怎么优化学生宿舍管理系统最常见的页面是“房间列表”右上角一个筛选下拉框按楼栋、按性别、按状态过滤。最直接的SQL是join三张表SELECT r.id, r.room_no, r.capacity, r.current_count, b.building_name FROM dorm_room r LEFT JOIN dorm_building b ON r.building_id b.id WHERE r.status 1 AND r.current_count r.capacity AND r.gender #{gender} ORDER BY r.building_id, r.room_no LIMIT #{offset}, #{pageSize}这条SQL如果表数据量超过几万行LEFT JOIN会让分页查询变慢。一个常见优化是避免join——在dorm_room表里冗余building_name字段查询时只查单表。学生宿舍管理系统一般也就几千条房间记录join的损耗可以接受但你在论文里的性能优化章节如果写了“冗余字段避免联表”老师会认为你考虑到了实际场景。切记房间里有一个厕所一个阳台两个床位的细节请留给业务逻辑不要在聊天中展开SQL里用不上。4. 登录鉴权与核心业务代码拦截器、AJAX校验和POI导出标题里的“设计与实现”论文到了这一章就是核心代码展示。登录鉴权是第一个必须跑通的功能因为它决定你能不能进入系统导出功能是第二个必须会写的功能因为答辩时老师往往要求“演示一下导出Excel”而异步校验是容易被忽视但常被追问的功能点。4.1 用拦截器实现登录校验session为空就回登录页不引入Spring Security时拦截器是最直观的做法。新建一个类实现HandlerInterceptor注册到WebMvcConfigurer中。Component public class LoginInterceptor implements HandlerInterceptor { // 放行的路径登录页、静态资源、错误页 private static final ListString ALLOW_PATHS Arrays.asList( /login, /doLogin, /css/**, /js/**, /images/**, /error ); Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 基础放行 String uri request.getRequestURI(); if (ALLOW_PATHS.contains(uri) || uri.startsWith(/static/)) { return true; } // 从Session取登录用户 Object user request.getSession().getAttribute(loginUser); if (user null) { // AJAX请求返回JSON普通请求重定向到登录页 if (request.getHeader(X-Requested-With) ! null XMLHttpRequest.equals(request.getHeader(X-Requested-With))) { response.setContentType(application/json;charsetUTF-8); response.getWriter().write({\code\:401,\msg\:\未登录或会话超时\}); } else { response.sendRedirect(request.getContextPath() /login); } return false; } // 角色权限可以在这里二次校验 return true; } }这段代码里有两个容易被忽略的细节。一是AJAX请求的处理二是路径放行的配置。你可以把拦截器加在配置类里常见做法是新建WebConfig类实现WebMvcConfigurer接口在addInterceptors方法中注册这个拦截器并配置拦截路径为/**、排除路径为上述白名单。很多课程设计只实现了非AJAX请求的重定向前端AJAX拿到的是302状态码而不是JSON就会引发“登录超时但页面无反应”的诡异问题。4.2 学生提交报修的AJAX校验前后端双重验证学生在宿舍报修页面填表单时需要校验“宿舍号是否真的属于自己”“描述是否够长”。前端可以用JavaScript做基础校验但真正的校验必须在后端做。下面是一个Spring MVC的Controller方法示例PostMapping(/student/repair/submit) ResponseBody public Result submitRepair(RequestBody RepairSubmitVO vo, HttpSession session) { // 从Session获取登录用户 User loginUser (User) session.getAttribute(loginUser); if (loginUser null) { return Result.error(401, 未登录); } // 校验角色 if (loginUser.getRole() ! 3) { return Result.error(403, 只有学生可以提交报修); } // 校验宿舍归属 BedRecord currentBed bedRecordService.getCurrentByStudentId(loginUser.getId()); if (currentBed null || !currentBed.getRoomId().equals(vo.getRoomId())) { return Result.error(400, 该宿舍与您无关请勿代报); } // 校验文本长度 if (vo.getDescription() null || vo.getDescription().trim().length() 10) { return Result.error(400, 问题描述不能少于10个字); } // 组装实体插入insert后返回自增ID Repair repair new Repair(); repair.setStudentId(loginUser.getId()); repair.setRoomId(vo.getRoomId()); repair.setDescription(vo.getDescription().trim()); repair.setImages(vo.getImages()); repair.setStatus(0); repairService.save(repair); return Result.ok(提交成功等待处理); }“宿舍归属校验”是很多同学容易漏掉的业务逻辑。前端页面的房间下拉框是后端动态渲染的理论上学生只能看到自己所在房间但防不住直接调接口传别的roomId。在Controller里通过bed_record表校验归属关系属于纵深防御。这段代码写进论文时配合一张时序图学生-Controller-Service-Mapper-数据库就能撑起“报修模块设计”的完整小节。4.3 用Apache POI导出学生住宿Excel写论文时的高频考点论文末尾通常有一个“系统特色功能”导出Excel是最常见的选择。相比EasyExcelPOI更适合课程设计——因为论文里可以写“采用POI基于内存模型生成xlsx”原理描述篇幅更充足。public void exportStudentList(HttpServletResponse response, int buildingId) throws IOException { // 查询数据 ListStudentVO list studentService.listByBuilding(buildingId); // 创建Workbookxlsx格式 try (Workbook workbook new XSSFWorkbook()) { Sheet sheet workbook.createSheet(学生住宿信息); // 表头 String[] headers {学号, 姓名, 楼栋, 房间号, 手机号, 入住时间}; Row headerRow sheet.createRow(0); CellStyle headerStyle workbook.createCellStyle(); headerStyle.setAlignment(HorizontalAlignment.CENTER); for (int i 0; i headers.length; i) { Cell cell headerRow.createCell(i); cell.setCellValue(headers[i]); cell.setCellStyle(headerStyle); } // 数据行 int rowIndex 1; SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); for (StudentVO vo : list) { Row row sheet.createRow(rowIndex); row.createCell(0).setCellValue(vo.getStudentNo()); row.createCell(1).setCellValue(vo.getRealName()); row.createCell(2).setCellValue(vo.getBuildingName()); row.createCell(3).setCellValue(vo.getRoomNo()); row.createCell(4).setCellValue(vo.getPhone()); row.createCell(5).setCellValue(vo.getCheckInTime() null ? : sdf.format(vo.getCheckInTime())); } // 自动列宽 for (int i 0; i headers.length; i) { sheet.autoSizeColumn(i); } // 写响应 response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet); response.setHeader(Content-Disposition, attachment; filenamestudent_list.xlsx); workbook.write(response.getOutputStream()); workbook.close(); } catch (Exception e) { log.error(导出学生列表失败, e); throw new RuntimeException(导出失败, e); } }POI导出的一个实际坑是中文文件名。response.setHeader(Content-Disposition, attachment; filename学生列表.xlsx)在不同浏览器里表现不一致Chrome里正常Edge里可能变成乱码。通用做法是转成URL编码filename*UTF-8%E5%AD%A6%E7%94%9F%E5%88%97%E8%A1%A8.xlsx。这个细节可以作为论文标题下的一个小知识点来写。POI的XSSFWorkbook在处理几万行数据时内存会涨得很快课程设计几百条数据无所谓但如果你的毕设接到真实场景建议把XSSFWorkbook换成SXSSFWorkbook流式写入。5. 宿舍管理系统的六处翻车点现象、原因与修复这部分是我最想写给后来者看的。每一个坑都是自己或同事真实踩过的写成“现象-原因-解决”三段式答辩前对着查一遍能少挨很多批。5.1 页面能打开但CSS全部丢失现象启动项目后访问首页HTML文本出来了但样式全无控制台报404找不到css文件。原因Spring Boot打包时把src/main/webapp目录里的静态资源打到了META-INF/resources目录之外路径对不上。尤其是用spring-boot-maven-plugin打包成jar时webapp目录默认不参与打包。解决如果坚持jar部署把JSP和静态资源放到src/main/resources/META-INF/resources/webapp/下并调整internalViewResolver的prefix为/webapp/WEB-INF/jsp/。更省心的方案是打成war包部署到Tomcat把spring-boot-starter-tomcat设为provided并在启动类继承SpringBootServletInitializer。课程设计演示本地IDE启动一般没问题但如果你用外置Tomcat一定要按war方案处理。5.2 中文写入MySQL变成问号现象录入学生姓名“张三”保存到数据库后变成“???”。原因MySQL连接串缺少characterEncodingutf8参数或数据库本身字符集是latin1。这属于最典型的编码链断裂页面UTF-8、Java内存UTF-8、JDBC连接默认ISO-8859-1、数据库latin1四环断了一环就乱码。解决三步全做——建库时指定DEFAULT CHARSETutf8mb4JDBC连接串加上userUnicodetruecharacterEncodingutf8mb4MySQL 8.0之后utf8mb4是推荐Spring Boot的application.yml里spring.datasource.url加上useUnicodetruecharacterEncodingutf-8serverTimezoneAsia/Shanghai。如果还乱码检查JSP页面顶部的contentType是否指定了charsetUTF-8。5.3 换宿操作导致房间人数对不上现象学生A从101搬到202后101的current_count没减202的没加或两个都变了但数字不对。原因update bed_record、update dorm_room旧房、update dorm_room新房这三步没有包在同一事务里。中间任何一步抛了异常就会出现部分成功。解决Service方法加Transactional(rollbackFor Exception.class)把三步操作按顺序执行。还要注意MyBatis-Plus的updateById方法默认只更新非null字段如果传进来的room对象里某个字段是null可能被忽略。用UpdateWrapper显式set需要更新的字段更稳妥。5.4 明明登录成功却一直跳回登录页现象输入正确的账号密码进入主页F5刷新一下又回到了登录页。原因登录时写入Session的key和拦截器读取的key不一致。比如登录时setAttribute(user, loginUser)拦截器里getAttribute(loginUser)两个字符串不同永远等于没登录。解决把Session key定义为常量类如public static final String SESSION_USER loginUser;所有读和写都引用这个常量别手写字符串。这是一个代码规范问题但很多课程设计项目里以肉眼排查的方式浪费半小时。5.5 导出的Excel打不开提示文件损坏现象点击导出后下载了一个文件文件名正确但用Office或WPS打开时提示格式错误或损坏。原因POI的workbook.write之后response.getOutputStream()又被后续代码写过东西比如日志输出或空格破坏了xlsx的zip结构。用try-with-resources已经关了workbook但如果写文件前response里被写入过其他内容文件照样损坏。解决写数据之前不要调用response.getWriter()write之后立即close。另外用response.reset()清空响应缓冲再设置Content-Type和Content-Disposition防之前遗留的响应内容。5.6 部署到服务器后时间差了8小时现象本地测试正常部署到云服务器后报修记录的create_time比实际时间慢了8小时或快了8小时。原因MySQL连接串里没加serverTimezoneAsia/ShanghaiJDBC驱动用了服务器默认时区UTC。数据库存的DATETIME不带时区信息但JDBC读取时按连接时区解析导致偏差8个小时。解决连接串加serverTimezoneAsia/Shanghai。同时application.yml里spring.jackson.date-format设为yyyy-MM-dd HH:mm:ss、time-zone设置为GMT8保证JSON序列化时也不会出错。6. 论文成稿与答辩演示怎么把代码变成能过审的Word文档你下载的标题后缀是.docx说明最终交付物是一篇论文。代码写完只是工程的一半另一半是把工程翻译成老师能看懂的文档。这一章讲两个实际技巧都是课程设计里高频使用的。6.1 用POI-TL生成带图表的Word文档很多同学问“java poi word能生成图表吗”——答案是能但远比生成Excel复杂。用XWPFDocument直接画柱状图需要嵌入XML和ChartEx操作繁琐且容易翻车。更可靠的方式是用POI-TLPOI Template Language在Word模板中预留占位表格再用Java代码填充数据。// 模板中已有表格占位入住率统计 MapString, Object data new HashMap(); data.put(buildingName, 1号楼); data.put(totalRooms, 120); data.put(usedRooms, 98); data.put(usageRate, 81.7%); // 使用poi-tl填充 XWPFTemplate template XWPFTemplate.compile(template.docx).render(data); template.writeAndFlush(new FileOutputStream(output.docx));模板事先做好更省事——在Word里先画好一张入住率统计表把对应格子的文字替换成{{buildingName}}这样的占位符程序只需要填数据。答辩时老师看到论文里有一个“系统实现效果”章节配了带数据的表格观感比满屏截图好很多。6.2 答辩演示的验证清单启动前自查三件事答辩现场翻车几乎都出在环境上三个检查点能覆盖九成问题。一是端口冲突提前确认8080或你配置的端口没被占用二是MySQL服务是否启动且数据库密码是否和application.yml一致三是浏览器里不要用无痕模式打开系统——无痕模式会禁用部分本地存储有些同学把登录状态存在了localStorage里导致登录后跳转失败。演示顺序也有讲究我的习惯是先演示登录——用管理员账号进系统展示楼栋房间数据再切换学生账号演示一次报修提交最后用宿管账号处理这条报修形成闭环。这套顺序能覆盖核心表和权限矩阵里的大部分功能在5分钟答辩里足够完整。老师的追问一般会落在“换宿舍时数据怎么处理”和“如果两个宿管同时处理同一单报修会怎样”前者在一个事务里后者在报修表加一个version字段做乐观锁。这两个问题提前准备一句话回答比写进PPT里更有临场感。6.3 有一件事比代码更重要README课程设计交上去的是一个压缩包老师第一眼看到的是README。我曾经见过很多同学把整个项目打包却忘了写启动说明老师打不开就打了低分。README里至少写清四件事JDK版本1.8或11、MySQL版本与初始化脚本执行方式、application.yml里要改哪些配置数据库密码、默认账号与密码。写成一个markdown文件放项目根目录即可不要写进论文论文里不需要出现“下载后先改密码”这类表述。希望这个系统从标题到落地能真正帮到你也愿你的答辩不再因为演示翻车而紧张。本文还有配套的精品资源点击获取
返回列表