尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于Spring Boot的眼科医院管理系统:从课设到毕设的完整实践指南

基于Spring Boot的眼科医院管理系统:从课设到毕设的完整实践指南 做过Java课程设计或者毕业设计的同学应该都明白选一个“看起来有业务深度、技术栈又不至于太吓人”的题目是最关键的。基于Spring Boot的眼科医院管理系统就是这类题目里很典型的一种它看起来是医院信息系统的子集业务上有挂号、门诊、药品、收费、病历档案这一串闭环流程技术上又能把Spring Boot、数据库设计、权限控制、事务处理这些核心点全部覆盖到。和市面上常见的图书管理、学生管理系统相比这个题目的业务建模更有嚼头答辩时能讲的东西也更多。项目交付物一般包括源码、数据库脚本和一份完整的万字设计文档刚好对应课设和毕设的全部验收材料。我接触过好几个以这个题目为蓝本完成的课设和毕设项目也踩过不少坑。这篇博文不打算写成教程式的说明书而是从整体设计、数据库建模、核心功能实现到常见问题排查把这类项目从立项到交付的关键点一次讲透。如果你正在找Spring Boot练手项目、准备课程设计或者做毕业设计这篇文章应该能帮你少走很多弯路。1. 项目整体设计与架构思考1.1 为什么选Spring Boot技术选型的一场“减负”战先回答一个最基础的问题医院管理系统这种CRUD为主的项目为什么大家都愿意用Spring Boot答案其实很简单它把传统SSMSpring SpringMVC MyBatis里最烦人的那些配置全部自动化了。传统SSM搭一个项目要手动配置DispatcherServlet、扫描包、事务管理器、MyBatis工厂光配置文件就能写两三页Spring Boot用starter依赖和自动装配机制一个Application启动类加上少量配置就能跑起来整个上手成本低了一大截。单就这个眼科医院系统而言Spring Boot最实在的优势有三个。第一内嵌Tomcat打包以后就是一个可直接运行的jar/war包部署演示的时候不用再单独装容器对验收答辩非常友好。第二生态成熟像MyBatis Plus这种国产增强框架与Spring Boot的集成几乎是无缝的单表CRUD不用手写SQL逻辑删除、分页插件、自动填充都是内置功能开发效率明显提升。第三社区资料极多遇到版本兼容、配置报错之类的问题基本一搜就有答案完全不用担心卡在环境上。这里也要泼一盆冷水别因为题目叫“眼科医院管理系统”就想着把微服务、分布式事务、Redis缓存、消息队列全部堆上去。课设和毕设的场景撑不起这么重的架构强行引入只会增加部署难度和出错的概率。技术选型讲究的是匹配业务复杂度Spring Boot MySQL MyBatis Plus这套组合对这个项目来说已经绰绰有余既能让评委看到你有工程化的意识又不会把自己拖进无底洞。1.2 从眼科就诊流程反推功能模块划分做这类系统最忌讳一上来就写代码先把业务流程走一遍再拆模块会轻松很多。眼科医院的就诊流程和其他专科医院大同小异患者建档注册然后选择科室和医生进行预约挂号到了预约时间医生接诊查看患者的基本信息和历史病历做视力、眼压等眼科专项检查诊断完成后医生可能会开药或者建议做进一步检查患者到收费处缴费药房确认费用后发药就诊记录归档后续还有复诊随访和线上咨询。把这个流程走完功能模块基本就浮出水面了系统管理用户、角色、权限、科室与医生信息管理、预约挂号管理、患者建档与眼健康档案管理、门诊接诊与病历管理、药品库存管理、处方与收费管理、在线咨询与健康科普。这里有一个容易忽略的点标题里除了“眼科医院管理系统”还有“眼科健康管理与咨询系统”这个变体它本质上和前者是同一套系统只是侧重点不一样。所以我们在模块设计时完全可以把在线咨询、健康科普文章、眼健康档案这些偏“健康管理”的功能也包含进去。这样既覆盖了医院内部的管理流程又响应了标题里的“健康管理与咨询”验收的时候能讲的东西瞬间多了一倍。尤其是眼健康档案它记录患者每次就诊的左眼视力、右眼视力、眼压等数据复诊时医生可以看到历史变化曲线这是眼科系统区别于普通医院系统的一个重要亮点。我的习惯是先画一张简单的业务流程图把“建档→挂号→接诊→检查→开药→收费→取药→归档→随访”用箭头串起来再对着流程图去列模块清单。业务闭环在演示时非常重要因为评委大概率会要求你现场走一遍流程如果能从登录开始一路演示到收费、处方打印这个项目的完整度就基本站住了。1.3 分层设计、统一返回与全局异常处理这三件事为什么能加分Spring Boot项目的经典分层一般是Controller、Service、Mapper三层再配合实体类会拆成DTO数据传输对象、VO视图对象、Entity数据库实体。很多同学做课设时图省事Service层直接return MapController里塞一堆业务判断结果代码全堆在一个类里改起来痛苦不说答辩时也说不出所以然。分层这件事一方面是为了职责清晰Controller只负责接收参数和返回结果Service只负责业务逻辑Mapper只负责与数据库打交道另一方面它让我在答辩时能够逐层讲解从URL到数据库的走向一句话就能说清楚评委一听就明白你是有工程意识的。为了统一前后端的交互格式我会在项目里定义一个Result 返回类包含code、message、data三个字段所有Controller方法都返回这个对象。这样前端不管做小程序、Vue页面还是Thymeleaf模板解析逻辑都是统一的。public class ResultT { private Integer code; private String message; private T data; public static T ResultT ok(T data) { ResultT r new Result(); r.setCode(200); r.setMessage(操作成功); r.setData(data); return r; } public static T ResultT error(String message) { ResultT r new Result(); r.setCode(500); r.setMessage(message); return r; } }另外一定要加全局异常处理器用RestControllerAdvice统一捕获业务异常和系统异常。不然数据库连不上、参数校验失败这些情况会把500错误页直接丢给用户既不友好也显得很不专业。捕获异常后统一返回Result.error()同时把异常信息记录到日志里定位问题也方便。这几个设计在代码量上只多了一点点但带来的工程化观感提升非常大属于投入产出比很高的事情。2. 数据库设计与核心业务建模2.1 十张核心表的设计思路与字段说明这个系统的数据库设计是整个项目的地基表结构设计得清不清楚直接决定后面写代码顺不顺。我按最常见的交付标准整理了十张核心表这几个表基本可以覆盖一条完整的就诊业务线。第一张是用户表sys_user字段包括主键id、username、password、roleADMIN/DOCTOR/PATIENT/STAFF、real_name、phone、status。password不能存明文至少要用BCrypt加盐哈希。为什么用户要和医生、患者分开建表因为一个系统的登录主体不止一种医生和患者还带有大量医疗属性字段全塞进用户表会非常臃肿分开后各自扩展也方便。第二张是科室表department字段是dept_id、dept_name、location、description第三张是医生表doctor包括doctor_id、user_id外键关联sys_user、dept_id、title职称、specialty、schedule排班说明。医生表冗余dept_id是为了查询医生列表时不用连表找科室这是很常见的冗余设计思路。第四张是患者表patient包括patient_id、user_id、name、gender、birth_date、phone、id_card、allergy_history、medical_history。眼科特色要放在一个独立的眼健康记录表patient_eye_record里字段包括eye_record_id、patient_id、visit_time、left_vision、right_vision、left_iop、right_iop、remark。这里记录的是每次就诊时的视力值和眼压值复诊时医生能直接拉出历史数据做对比是后续做眼健康档案功能的数据基础。然后是预约表appointment字段包括appointment_id、patient_id、doctor_id、dept_id、appt_date、time_slot上午/下午、status0待就诊/1已完成/2已取消、create_time、deleted。这里有一个关键设计预约表同时冗余patient_id、doctor_id、dept_id好处是查询个人预约记录或医生排班时不需要频繁连表性能更好代码也更简单。门诊记录表medical_record存主诉、诊断、医嘱等信息字段包括record_id、patient_id、doctor_id、appointment_id、chief_complaint、diagnosis、suggestions、create_time。处方表prescription和处方明细表prescription_item负责药品处方明细表里除了药品ID还会冗余drug_name和price快照因为药品信息以后可能调整但历史处方必须保持原样。药品表drug包括drug_id、drug_name、specification、unit、price、stock、warning_stock、manufacturer、status收费表charge包括charge_id、record_id、patient_id、total_amount、status、pay_type、pay_time。在线咨询表consultation和健康科普表article用来支撑健康管理与咨询功能咨询问题、医生回复、状态几个字段就够用。这一整套表设计下来业务闭环基本就通了。2.2 表关系与就诊状态流转先把业务闭环跑通数据库表之间的关系并不复杂梳理清楚反而能成为答辩时的一张王牌。department与doctor是1:N一个科室可以有多名医生doctor与appointment是1:N一个医生有多条预约patient与appointment是1:N一个患者可以有多条预约记录。appointment与medical_record是1:1一次预约对应一次就诊这样病历记录能够追溯到具体的挂号时段。medical_record与prescription是一对一一条就诊记录产生一张处方prescription与prescription_item是1:N一张处方里有多条药品明细drug与prescription_item是1:N一种药品会出现在不同的处方明细里。除了表关系还要把业务状态流转画清楚。预约状态从0待就诊流转到1已完成或2已取消这是整个系统的第一个状态闭环。就诊完成后生成病历和处方处方生成的同时扣减药品库存并生成待缴费的收费单收费单从0待缴费流转到1已缴费药房看到已缴费状态才允许发药。整个过程串起来就是“挂号成功→就诊完成→处方生成→库存扣减→缴费完成”任何一个环节断掉后面的流程都无法继续。设计表的时候把status字段和每个状态对应的更新条件提前定好后面写接口逻辑就会非常顺。这里我特别想强调一下“状态”字段的用法。很多初学者会在代码里用业务逻辑去“猜”当前状态比如先select查一下再判断能不能cancel但更稳妥的做法是直接在UPDATE语句里把status作为条件。比如取消预约时用update appointment set status 2 where appointment_id ? and status 0通过影响行数来判断这次操作是否有效从根源上避免并发问题。2.3 索引与分页课设阶段如何做到“够用且能讲”数据库设计这部分只要谈到优化绕不开索引和分页。课设阶段不需要把索引设计搞得很复杂但至少要为高频查询加上必要的索引并且在文档里写清楚“为什么加这些索引”这往往是答辩时比较加分的点。按照业务高频查询来梳理预约表上至少有四个查询场景按患者查预约记录、按医生和日期查某天的排班、按状态查待就诊列表、按日期范围做统计。所以我会在appointment表上加(patient_id, appt_date)、(doctor_id, appt_date)两个组合索引。组合索引的好处是查询条件同时包含这两个字段时可以快速定位比两个单列索引更高效。medical_record表按patient_id create_time建组合索引因为患者病历查询几乎总是按时间降序排列的。drug表按drug_name加普通索引方便药品的模糊搜索和库存检索。分页方面MyBatis Plus提供了现成的分页插件配置一个PaginationInnerInterceptor就能实现物理分页。使用的时候只需要IPageAppointment page new Page(current, size); appointmentMapper.selectPage(page, wrapper);补充一点个人体会有的同学喜欢把所有字段都加上索引觉得这样查询都快。实际上索引维护是有开销的每次插入、更新都要同步更新索引树索引越多写入越慢。课设阶段只要把查询频率最高的两三个索引做好就足够了能说出这个“权衡”的道理比堆一堆索引更体现理解深度。3. 核心功能模块实现与关键代码解析3.1 工程初始化与配置pom、数据源、连接池参数逐项拆解工程结构方面我建议在IDEA里直接通过Spring Initializr创建项目这里有一个容易踩坑的点Spring Boot 3.x版本要求JDK17以上很多同学还在用JDK8直接选3.x会出现编译错误。如果本机是JDK8项目就选Spring Boot 2.7系列这是目前课设和毕设最稳妥的选择。pom.xml里核心依赖并不需要太多。spring-boot-starter-web提供Web能力mybatis-plus-boot-starter负责数据库操作增强mysql-connector-j提供MySQL驱动lombok减少样板代码hutool可以顺手处理一些日期、加密、Excel导出的杂活。需要注意MyBatis Plus的版本要和Spring Boot版本兼容比如Boot 2.7对应的MyBatis Plus可以用3.5.3系列Boot 3.x则要选MyBatis Plus的3.5.4及以上版本否则启动时容易报类冲突。application.yml是整个项目的配置中心数据源配置这里重点讲一下spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/eye_hospital?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: 123456 hikari: minimum-idle: 5 maximum-pool-size: 15 connection-timeout: 30000 idle-timeout: 600000这段配置里每个参数都有讲究。driver-class-name用的是com.mysql.cj.jdbc.Driver这是MySQL 8推荐的驱动类如果沿用旧的com.mysql.jdbc.Driver会直接启动失败。URL里必须带上useUnicodetrue和characterEncodingutf8避免中文乱码serverTimezoneAsia/Shanghai解决MySQL 8连接时区报错问题。连接池用的是HikariCP它性能好且配置简单minimum-idle是空闲连接数maximum-pool-size是最大连接数connection-timeout是获取连接超时时间。课设并发不会太高这几个参数用默认值也够但如果你能解释清楚每个参数的含义会让评委觉得你真的用过连接池而不是只会点“下一步”。MyBatis Plus的配置同样在application.yml里完成map-underscore-to-camel-case开启下划线转驼峰这样数据库字段user_id可以直接映射到userId逻辑删除配置logic-delete-field: deleted删除操作就自动变成update删除标记预约记录和病历这类需要追溯历史的数据建议用逻辑删除而不是物理删除。把这些配置写好之后项目的基础就算立住了。3.2 登录认证方案选Session还是JWT怎么落地登录认证几乎是所有管理系统的必考环节。方案无非两种传统Session和现在前后端分离场景下更常见的JWT。课设项目如果做的是Thymeleaf服务端渲染用Session加拦截器最简单逻辑清晰也够用如果计划做Vue或者微信小程序这种完全分离的前后端那JWT会更合适因为token可以放在本地存储里每次请求带上Authorization头即可。我个人的建议是如果不怕多加一点代码直接上JWT。它既能体现你对前后端分离的理解又能避免Session在多端登录场景下的一些麻烦而且JWT本身并不难。登录接口的核心逻辑是先查用户校验BCrypt密码密码正确就用jjwt生成一个带过期时间的token返回给前端。public ResultString login(LoginDTO dto) { User user userMapper.selectOne(Wrappers.UserlambdaQuery() .eq(User::getUsername, dto.getUsername())); if (user null || !BCrypt.checkpw(dto.getPassword(), user.getPassword())) { return Result.error(用户名或密码错误); } MapString, Object claims new HashMap(); claims.put(userId, user.getId()); claims.put(role, user.getRole()); String token Jwts.builder() .setClaims(claims) .setExpiration(new Date(System.currentTimeMillis() 3600_000L)) .signWith(Keys.hmacShaKeyFor(SECRET.getBytes(StandardCharsets.UTF_8))) .compact(); return Result.ok(token); }登录成功后再写一个拦截器统一校验token。preHandle方法里从请求头取出Authorization解析token如果解析失败直接返回401。这样除了登录接口和静态资源其他接口都必须带合法token才能访问权限控制的第一层就完成了。角色权限可以再进一步细化ADMIN可以访问所有管理接口DOCTOR只能查自己的患者和病历PATIENT只能看自己的记录和预约。拦截器里拿到role字段后做一次简单的判断即可。需要注意的是密码加密一定要做。如果直接用明文存数据库一旦数据库泄露所有用户信息都暴露了哪怕只是课设也应该用BCryptPasswordEncoder这类带盐的哈希算法。这项安全素养在答辩时往往会被评委提问准备一下不会吃亏。3.3 预约挂号与眼健康档案号源防重与特色数据怎么处理预约挂号是整个系统里最有业务含金量的功能因为这里有一个非常典型的并发问题同一时段同一医生的号源可能会被多个患者同时抢如果处理不当就会出现“超卖”现象。常见的错误做法是先select查询该时段是否已满再insert预约记录但两个请求同时查到“有空位”时后插入的请求就会产生冲突。正确的思路是数据库级兜底加应用级校验双保险。首先在appointment表的(doctor_id, appt_date, time_slot)上建唯一索引从数据库层面保证同一医生同一日期同一时段只有一条有效预约记录同时在Service层插入时捕获DuplicateKeyException并转换为业务提示。还有一个很实用的细节用条件更新的方式防止并发。先插入待确认状态的预约记录或者直接用一个带status条件的UPDATE来更新号源表。比如在号源表里这样操作int rows appointmentSlotMapper.reduceStock( doctorId, apptDate, timeSlot, 1); if (rows 0) { throw new BusinessException(该时段已被预约请选择其他时间); }这里reduceStock的本质是update ... set remaining remaining - 1 where remaining 0用影响行数判断是否扣减成功。如果返回值是0说明库存已经被其他请求抢走了事务回滚下一个患者只能换时段。这个“条件更新影响行数判断”的做法在处理并发扣减时非常实用在代码评审和答辩中是很大的亮点。眼健康档案模块是这个系统区别于“通用医院管理系统”的特色功能。我在设计时会单独建patient_eye_record表医生每次接诊时把患者的左右眼视力、眼压填入保存在档案里患者端查询眼健康档案时可以按时间列出所有检查记录。这个功能虽然代码量不大但因为和眼科业务强相关很容易成为文档里的亮点章节也能支撑“健康管理”这个标题核心。3.4 药品库存与收费结算一个事务解决的一致性问题药品入库和收费结算看似两个独立模块实际在业务上必须绑定。医生开出处方后系统要扣减药品库存同时生成一张待缴费的收费单这两个动作必须一起成功或一起失败。比如扣了库存但收费单没生成库存就会莫名其妙少一盒反过来收费单生成了但没扣库存患者能买到已经超卖的药。解决办法就是加事务。我在Service层写一个创建处方的方法方法上标注Transactional(rollbackFor Exception.class)方法内部依次完成三件事遍历处方明细校验并扣减库存、保存处方主表和明细表、计算总金额并生成收费单。事务的意义在于任何一个环节抛出异常前面已经执行的数据库操作全部回滚。Transactional(rollbackFor Exception.class) public void createPrescription(PrescriptionDTO dto) { BigDecimal total BigDecimal.ZERO; for (PrescriptionItemDTO item : dto.getItems()) { Drug drug drugMapper.selectById(item.getDrugId()); if (drug null || drug.getStock() item.getQuantity()) { throw new BusinessException(药品库存不足 item.getDrugName()); } int rows drugMapper.reduceStock(item.getDrugId(), item.getQuantity()); if (rows 0) { throw new BusinessException(药品库存不足请刷新库存); } // 保存处方明细计算小计金额累加到total } // 保存处方主表、生成收费单 }这里有一个新手常踩的坑事务方法内部捕获了异常却只记录日志不抛出导致事务管理器认为方法正常结束回滚不会发生。所以事务方法内部一定不能吞异常要么不捕获要么捕获后抛出RuntimeException否则数据一致性完全没保障。收费模块另一个需要注意的点是金额精度。药品价格和收费金额用double会出精度问题0.10.2可能会变成0.30000000000000004。数据库字段要用decimalJava侧用BigDecimal这样在涉及钱的项目里才算稳妥。这门课的内容虽然不难但在银行、医院这类金融医疗场景里是基本常识值得专门写进文档。4. 常见问题排查与实操避坑实录4.1 环境与版本Spring Boot版本、MySQL驱动、Maven构建常见故障这份内容几乎每个做Spring Boot项目的同学都会遇到直接列一个速查表方便对应排查问题现象可能原因解决方案启动报Failed to configure a DataSource没配数据源或驱动缺失检查application.yml中datasource配置确认mysql驱动依赖已引入报ClassNotFound: com.mysql.jdbc.DriverMySQL 8驱动类名变了驱动类改为com.mysql.cj.jdbc.Driver连接数据库报时区错误URL缺少serverTimezone参数URL加上serverTimezoneAsia/Shanghai启动报Invalid bound statementMapper XML路径不对检查mybatis-plus配置的mapper-locations是否匹配Maven打包后jar无法运行缺少spring-boot-maven-plugin在pom中加入该插件并执行repackageJDK8环境下Boot 3.x项目编译失败Boot 3.x要求JDK17换用Spring Boot 2.7系列或升级JDK版本这里面最典型的坑是“Spring Boot版本太高”。很多同学下载项目模板时直接选了当前最新的3.x版本本地JDK还是8一编译就报错。我的建议是课设阶段不要追新选一个长期维护的稳定版本即可比如Spring Boot 2.7.18搭配JDK8和JDK11都没问题。等环境稳定了再去了解新特性也不迟。数据库连接池另一个常见问题是“连接耗尽了”。表现为页面请求卡住很久然后在日志里看到Connection is not available, request timed out这通常是连接池最大连接数设置太小或者有连接泄露——比如代码中手动获取了Connection没有归还。排查时优先看代码里有没有忘了关闭连接的地方其次再调大maximum-pool-size。HikariCP默认的10个连接对课设场景通常足够了出现耗尽基本都是代码问题。4.2 日常开发日期格式、驼峰映射、Thymeleaf热更新与跨域问题前面的版本问题解决后开发期还会遇到几个非常琐碎但高频的坑。第一个是日期格式问题。前端表单提交的日期字符串比如“2024-01-15”后端DTO里的LocalDate字段如果不加注解会直接报反序列化失败。参数接收时在LocalDate字段上加DateTimeFormat(pattern yyyy-MM-dd)可以解决JSON返回给前端时配合全局Jackson配置或者字段上的JsonFormat把LocalDateTime输出成“yyyy-MM-dd HH:mm:ss”这种可读格式。第二个是MyBatis Plus的驼峰映射问题。如果数据库字段是user_id实体字段是userId正常情况下mapUnderscoreToCamelCase开启后能自动映射。但如果你用了resultMap且没有显式配置column属性有时也会出现映射不到导致字段为null的情况。建议统一使用MyBatis Plus的LambdaQueryWrapper和selectById这种内置方法基本不会遇到这类问题。第三个是Thymeleaf热更新。如果前端用了Thymeleaf模板每次改HTML还要重启项目非常影响效率。在application.yml里加一行spring.thymeleaf.cache: false再配合idea的Build project automatically设置修改模板后刷新页面就能看到变化。需要注意生产环境一定要把模板缓存打开否则每次渲染都读磁盘性能会差很多。第四个是跨域问题。如果前端和后端分开部署比如前端在8081端口跑Node服务后端在8080端口跑Spring Boot前端请求必然触发CORS跨域。方案是写一个WebMvcConfigurer配置类设置允许的域名、请求头和请求方法。不过课设通常只有一个端口偶尔遇到跨域也别慌张就是一层配置的事。4.3 交付与答辩数据库脚本、万字文档和演示顺序怎么准备项目交付时源码、数据库和文档三者缺一不可。数据库这部分的交付一定不只是放一张建表SQL。我习惯在项目根目录建sql文件夹里面放两个脚本schema.sql负责建库建表data.sql负责插入初始化数据包括几个测试科室、医生账号、患者账号和一些药品数据。这样验收老师拿到项目后导入数据库就能直接跑起来第一印象会好很多。文档结构参考以下目录基本能写满万字项目背景与意义、国内外研究现状、需求分析功能需求非功能需求、系统设计架构设计模块设计、数据库设计ER图表结构说明、详细设计核心模块流程核心代码说明、系统测试测试用例测试结果、部署说明、总结与展望。画ER图的时候不要只画出表名一定要把每个字段和主外键关系标清楚这是数据库设计章节最核心的内容。答辩演示的顺序建议是先登录展示不同角色的不同界面然后以患者身份新建档案和预约挂号再切换成医生身份看到预约列表后开始接诊录入主诉和诊断原地开处方再到药品管理模块看库存有没有扣减最后到收费模块完成缴费。这个顺序其实就是业务闭环让评委顺着真实的工作流看下来几乎不需要额外解释。评委问“数据库在哪些地方用了事务”你直接把药品扣减和收费生成的例子抛出来问“权限怎么控制的”就把JWT拦截器讲一遍。把这两个问题准备充分答辩基本就稳了。最后分享一个我在这类项目上体会最深的地方医院管理系统不是一个只靠技术就能堆起来的项目业务闭环要顺数据关系要能自洽。哪怕代码写得再花哨到演示时挂号、就诊、收费这些环节连不通也一样会被扣分。反过来只要把业务主流程跑通、数据库关系讲清楚再配上一两个像眼健康档案这样有领域特色的模块答辩的时候基本就能稳稳占住主动权。另外一个小建议一定要在项目里保留好完整的SQL脚本和初始化数据不要只放空表结构。因为评委和老师拿到项目后第一件事通常就是导入数据库、跑起来这一步顺不顺决定第一印象。如果你正准备基于Spring Boot做管理系统类的课设或毕设眼科医院这个题目的业务张力足够大做出来的东西也够撑起一份万字文档值得认真投入。
返回列表