javaweb结课设计

📅 2026/7/9 2:25:17 👁️ 阅读次数 📝 编程学习
javaweb结课设计

一、项目概述

电视节目管理系统是一个面向广播电台和电视节目制作单位的Web应用,实现节目信息管理、主持人管理、观众留言管理等核心功能,解决传统Excel管理方式中信息分散、查询不便、留言处理不及时等问题。

- - - 技术栈

后端采用 Spring Boot 3.5.15 + MyBatis 框架,数据库使用 SQL Server,分页使用 PageHelper 插件。

前端采用 Vue 2 + Element UI + Axios 进行页面构建和数据交互。

开发工具使用 IntelliJ IDEA 和 VS Code。

- - 二、系统架构

系统采用前后端分离架构,后端遵循三层架构设计:

前端(Vue)发送请求 → Controller层接收请求 → Service层处理业务逻辑 → Mapper层操作数据库 → 返回JSON数据给前端。

三层架构各层职责如下:

Controller层负责接收HTTP请求,调用Service层处理业务,返回JSON格式响应数据,使用 @RestController 注解标记。

Service层负责处理业务逻辑,协调多个Mapper完成数据库操作,使用 @Service 注解标记。

Mapper层负责直接操作数据库,执行SQL语句,使用 @Mapper 注解标记。

- - 三、功能模块

系统分为五个核心模块:

用户模块实现用户登录和注册功能,注册时校验用户名唯一性。

首页仪表盘 :展示节目总数、主持人总数、留言总数三个统计卡片,下方表格展示所有节目及其对应的主持人列表,支持点击节目名称查看详情、点击主持人姓名查看完整信息。

节目管理 :实现节目的增删改查功能,支持分页展示、按名称搜索、按类型筛选。

主持人管理模块 :实现主持人的增删改查功能,支持分页展示、按姓名搜索、按性别筛选、按部门筛选,展示主持人的完整信息(编号、姓名、性别、电话、邮箱、入职日期、所属部门)。

留言管理模块 :实现留言列表查看、按状态筛选(全部/已读/未读)、标记已读、回复留言、删除留言功能,点击留言内容可查看完整详情。

- - 四、数据库设计

系统共设计五张数据表:

节目表 program: 包含 programId(主键,自增)、programName(节目名称)、programType(节目类型)、broadcastTime(播出时间)、duration(时长)、description(节目描述)六个字段。

主持人表 host: 包含 hostId(主键,自增)、hostName(姓名)、gender(性别)、phone(电话)、email(邮箱)、joinDate(入职日期)、department(所属部门)七个字段。

关联表 host_program: 包含 hostId 和 programId 两个外键字段,共同作为联合主键,用于实现节目与主持人之间的多对多关系。

留言表 message: 包含 messageId(主键,自增)、programId(外键,关联节目表)、content(留言内容)、isRead(是否已读,默认0)、replyContent(回复内容)、submitTime(提交时间,默认当前时间)六个字段。

用户表 app_user: 包含 userId(主键,自增)、username(用户名,唯一)、password(密码)、createdAt(注册时间,默认当前时间)四个字段。

- - 五、核心代码实现

- - - 5.1 实体类(Program)

```java

@Data

@AllArgsConstructor

@NoArgsConstructor

public class Program {

private Integer programId;

private String programName;

private String programType;

private LocalTime broadcastTime;

private Integer duration;

private String description;

}

```

- - - 5.2 Mapper层(动态SQL + 分页)

```java

@Mapper

public interface ProgramMapper {

@Select("<script>" +

"SELECT * FROM program WHERE 1=1" +

"<if test='programName != null and programName != \"\"'> AND programName LIKE CONCAT('%', -{programName}, '%')</if>" +

"<if test='programType != null and programType != \"\"'> AND programType = -{programType}</if>" +

"</script>")

List<Program> getPrograms(@Param("programName") String programName,

@Param("programType") String programType);

}

```

- - - 5.3 Service层(分页逻辑)

```java

@Service

public class ProgramServiceImpl implements ProgramService {

@Autowired

private ProgramMapper programMapper;

@Override

public PageBean getPrograms(String programName, String programType, int page, int size) {

PageHelper.startPage(page, size);

List<Program> programs = programMapper.getPrograms(programName, programType);

PageInfo<Program> pageInfo = new PageInfo<>(programs);

return new PageBean(pageInfo.getTotal(), pageInfo.getList());

}

}

```

- - - 5.4 Controller层

```java

@RestController

public class ProgramController {

@Autowired

private ProgramService programService;

@GetMapping("/programs")

public Result getPrograms(@RequestParam(required = false) String programName,

@RequestParam(required = false) String programType,

@RequestParam(defaultValue = "1") int pageNum,

@RequestParam(defaultValue = "10") int pageSize) {

PageBean pageBean = programService.getPrograms(programName, programType, pageNum, pageSize);

return Result.success(pageBean);

}

}

```

- - - 5.5 前端Vue核心逻辑

```javascript

new Vue({

data: {

list: [],

page: 1,

pageSize: 10,

total: 0

},

mounted() {

this.fetchList();

},

methods: {

async fetchList() {

const res = await axios.get('/programs', {

params: { pageNum: this.page, pageSize: this.pageSize }

});

this.list = res.data.data.rows;

this.total = res.data.data.total;

}

}

});

```

- - 六、界面展示

登录页面 :用户输入用户名和密码登录系统,支持切换到注册页面创建新账号。

首页仪表盘 :展示节目总数、主持人总数、留言总数三个统计卡片,下方显示所有节目及其对应的主持人列表,点击节目名称或主持人姓名可查看详细信息。

节目管理页面 :节目列表支持分页展示,可按名称搜索、按类型筛选,支持新增、编辑、删除操作。

主持人管理页面 :主持人列表展示编号、姓名、性别、电话、邮箱、入职日期、所属部门等完整信息,支持按姓名搜索、按性别和部门筛选。

留言管理页面 :留言列表支持按状态筛选(全部/已读/未读),点击留言内容查看完整详情,支持标记已读、回复、删除操作。

- - 七、关键技术点

动态SQL :MyBatis的 `<if>` 标签实现按需拼接查询条件,当参数为 null 或空字符串时不拼接对应条件,避免 `WHERE column = null` 查不到数据的问题。

PageHelper分页 :调用 `PageHelper.startPage(page, size)` 开启分页,PageHelper自动拦截SQL并生成COUNT查询,通过 `PageInfo` 封装分页结果(包含 total、list、pages 等完整信息)。

前后端数据交互 :后端使用 `@RestController` 自动将Java对象转为JSON返回给前端,前端通过Axios发送异步请求,使用 async/await 处理响应。

多对多关联查询 :节目与主持人的多对多关系通过 host_program 关联表实现,使用 LEFT JOIN 联查获取节目对应的主持人列表。

统一返回格式 :后端使用 Result 类统一封装返回结果(包含 code、msg、data 三个字段),前端通过判断 code 值确定请求是否成功。

- - 八、总结与收获

本次课程设计让我完整经历了Web应用从需求分析到系统实现的开发过程。

在技术提升方面,掌握了 Spring Boot + MyBatis + Vue 的开发流程,理解了前后端分离架构的优势,熟练使用了 IDEA、VS Code、SQL Server Management Studio 等开发工具。

在项目经验方面,体验了从需求分析、数据库设计、接口开发到前后端联调的完整流程,对三层架构的职责划分和 RESTful 接口设计有了更深入的理解。

javaweb课程设计

在问题解决方面,遇到了字段名不匹配导致表格无法渲染、动态SQL参数为null查不到数据、前后端联调跨域等问题,通过查阅资料和逐步调试最终解决。