云计算百科
云计算领域专业知识百科平台

springboot个性化在线学习系统89032-计算机课程设计、毕业设计

前言

✨ 博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮你把毕设做成作品集。👍👍

👇精彩专栏 推荐订阅👇

海量实战库,源码任你选! 坐拥Java项目2000+套

海量实战库,源码任你选! 坐拥Python项目1000+套

海量实战库,源码任你选! 坐拥小程序/app项目500+套

✅获取源码请私信✅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️

系统实现

管理员功能模块

平台用户注册模块

  用户在访问系统首页后,可选择点击“注册”按钮,进入相应的注册页面。在该页面中,用户需完成所有注册信息必填项,点击页面下方的“注册”按钮。系统在接收到表单数据并完成验证后,若信息无误,将提示注册成功,并在自动跳转至系统的登录界面,以便用户立即进行登录操作。image

注册界面

平台用户登录模块

  用户在登录界面点击“登录”按钮后,需输入用户名、密码以及验证码以完成身份验证操作。系统在前端会自动对所输入信息进行有效性校验,同时检查该用户是否已通过后台审核流程。若审核通过且信息无误,则系统将允许用户成功登录并跳转至相应的功能界面;反之页面会弹出相应的提示信息,提醒用户重新输入或检查相关信息的正确性。image

登录界面

首页模块

  首页作为系统的核心入口,集成了通知中心、轮播图展示及最新资讯板块。其核心亮点在于引入了协同过滤推荐算法:系统会实时捕捉并分析用户的点击行为与偏好类型,动态调整推荐策略,将用户最感兴趣的学习资源和课程信息智能排序并优先展示在首页显著位置,实现“千人千面”的个性化体验。image

首页界面

模拟测试模块

  该模块提供模拟测试列表供用户选择,进入详情后可进行在线答题。测试结束后,系统不仅会自动计算并显示得分,还会同步提供标准参考答案与解析,帮助用户即时查漏补缺,巩固知识点。image

模拟测试界面

学习资源模块

  资源库以列表形式呈现,详情页包含资源名称、分类标签、发布日期及详细描述。核心资源文件支持在线预览与本地下载两种模式,满足不同学习场景需求。同时,用户可对优质资源进行点赞、收藏及发表评论,形成资源评价生态。image

学习资源界面

个人中心模块

  作为用户信息管理枢纽,包含:个人首页交流社区、学习记录、错题记录、收藏记录、点赞记录等子功能,其中浏览记录集中展示个人基本资料;集成个人交流管理(支持发布标题、类型、封面及内容的交流贴,需审核)、学习记录添加与查看、错题记录复盘、以及收藏、点赞、浏览历史记录的列表管理与详情追溯功能,全方位辅助用户管理学习轨迹。image

个人中心界面

管理员功能模块

登录模块

  提供管理员专属安全登录入口,验证身份后进入后台管理系统,支持修改个人基本资料及登录密码,确保管理账户的安全性。image

登录界面

数据分析模块

  构建可视化数据驾驶舱,集成通知中心与快速访问导航(直达课程/资源分类管理等核心模块);提供基础数字统计(轮播图数量、公告数量)及多维度图表分析(饼状图、柱状图、折线图),直观展示试卷平均分、考试成绩分布及模拟测试分数排名等关键教学指标。image

数据分析界面

角色管理模块

  统筹管理系统内所有用户的状态与权限,支持对“平台用户”和“管理员”两类角色进行列表查看、新增添加及状态设置;特别包含对用户注册申请的审核功能,确保平台人员准入合规。image

角色管理界面

系统管理模块

  专门负责首页轮播图的配置与维护,支持列表查看现有图片信息及添加新的轮播素材,以动态展示平台重点内容或活动。image

系统管理界面

资源管理模块

  构建完整的题库与考评体系,包含科目列表管理、试题库维护、试卷组建与管理以及全局错题记录查看,为模拟测试与成绩分析提供底层数据支撑。image

系统管理界面

数据库参考

CREATE TABLE `code_token` (
`code_token_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '验证码ID',
`token` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT '令牌',
`code` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci DEFAULT NULL COMMENT '验证码',
`expire_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '失效时间',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`code_token_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT COMMENT='验证码';
DROP TABLE IF EXISTS `movie_episode`;
CREATE TABLE `movie_episode` (
`movie_episode_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '电影集数ID',
`episode_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '集数名称',
`sort` int(11) DEFAULT '0' COMMENT '排序',
`episode_url` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '集数内容',
`source_table` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源表',
`source_field` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源字段',
`move_info_id` int(11) DEFAULT NULL COMMENT '影视信息ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`movie_episode_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT;
DROP TABLE IF EXISTS `collect`;
CREATE TABLE `collect` (
`collect_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '收藏ID',
`user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '收藏人ID',
`source_table` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源表',
`source_field` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '来源字段',
`source_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '来源ID',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '标题',
`img` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '封面',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`collect_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='收藏';
DROP TABLE IF EXISTS `exam_question_database`;
CREATE TABLE `exam_question_database` (
`exam_question_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`subject_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '科目名称',
`type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '类型',
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '题目',
`question_item` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '选项',
`answer` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '参考答案',
`score` double(8,2) DEFAULT NULL COMMENT '总分',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`exam_question_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='试题库';
t_exam` (
`exam_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '考试id',
`subject_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '考试名称:[2,32]',
`duration` int(11) DEFAULT NULL COMMENT '答题时长',
`score` double(8,2) DEFAULT '0.00' COMMENT '总分',
`status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '状态:启用、禁用',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间:',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间:',
`user_id` int(11) DEFAULT NULL COMMENT '出题人',
`open_start` datetime DEFAULT NULL COMMENT '开放开始时间',
`open_end` datetime DEFAULT NULL COMMENT '开放结束时间',
`reuse_state` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '多次答题:启用、禁用',
PRIMARY KEY (`exam_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='考试';
insert into `subject_exam` values ('5','科目1','试卷1','90','100.0','启用','2026-03-18 16:36:11','2026-03-18 16:36:11','1','2026-01-01 00:00:00.0','2026-12-31 23:59:59.0','启用');
insert into `subject_exam` values ('6','科目1','试卷2','60','100.0','启用','2026-03-18 16:36:11','2026-03-18 16:36:11','1','2026-01-01 00:00:00.0','2026-12-31 23:59:59.0','启用');
insert into `subject_exam` values ('7','科目1','试卷3','60','100.0','启用','2026-03-18 16:36:11','2026-03-18 16:36:11','1','2026-01-01 00:00:00.0','2026-12-31 23:59:59.0','启用');
DROP TABLE IF EXISTS `subject_user_answer`;
CREATE TABLE `subject_user_answer` (
`user_answer_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户答题ID',
`user_id` mediumint(8) NOT NULL COMMENT '用户ID',
`exam_id` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '考试id',
`score` double(8,2) DEFAULT '0.00' COMMENT '分数',
`answers` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '答案',
`score_detail` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '评分详情',
`objective_score` double(8,2) DEFAULT '0.00' COMMENT '客观题得分',
`subjective_score` double(8,2) DEFAULT '0.00' COMMENT '主观题得分',
`score_state` tinyint(2) DEFAULT '0' COMMENT '评分状态',
`nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '提交人',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`comment_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '评语',
PRIMARY KEY (`user_answer_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户答题';
DROP TABLE IF EXISTS `user_answer_wrong`;
CREATE TABLE `user_answer_wrong` (
`user_answer_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户错题ID',
`subject_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '科目名称',
`question_item` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '选项',
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '题目',
`type` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '题目类型',
`exam_id` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '考试ID',
`score` double(8,2) DEFAULT '0.00' COMMENT '分数',
`answers` text CHARACTER SET utf8 COLLATE utf8_unicode_ci COMMENT '用户提交的答案',
`answer` text CHARACTER SET utf8 COLLATE utf8_unicode_ci COMMENT '参考答案',
`score_detail` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '评分详情',
`objective_score` double(8,2) DEFAULT '0.00' COMMENT '客观题得分',
`subjective_score` double(8,2) DEFAULT '0.00' COMMENT '主观题得分',
`score_state` tinyint(2) DEFAULT '0' COMMENT '评分状态',
`nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '提交人',
`user_id` int(11) NOT NULL COMMENT '提交人ID',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`user_answer_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户错题';

代码参考

/**
* 交流社区:(CommunicationCommunity)表控制层
*
*/
@RestController
@RequestMapping("/communication_community")
public class CommunicationCommunityController extends BaseController<CommunicationCommunity, CommunicationCommunityService> {

/**
* 交流社区对象
*/
@Autowired
public CommunicationCommunityController(CommunicationCommunityService service) {
setService(service);
}

@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
paramMap.entrySet().removeIf(entry -> {
Object value = entry.getValue();
return value instanceof String && ((String) value).isEmpty();
});
CommunicationCommunity communication_community = new CommunicationCommunity();
communication_community.setCommunication_title(paramMap.get("communication_title")==null?null:String.valueOf(paramMap.get("communication_title")));
communication_community.setType_of_communication(paramMap.get("type_of_communication")==null?null:String.valueOf(paramMap.get("type_of_communication")));
communication_community.setPlatform_users(paramMap.get("platform_users")==null?null:Integer.valueOf(String.valueOf(paramMap.get("platform_users"))));
communication_community.setUser_name(paramMap.get("user_name")==null?null:String.valueOf(paramMap.get("user_name")));
communication_community.setCover_image(paramMap.get("cover_image")==null?null:String.valueOf(paramMap.get("cover_image")));
communication_community.setContent_specificss(paramMap.get("content_specificss")==null?null:String.valueOf(paramMap.get("content_specificss")));
communication_community.setPraise_len(paramMap.get("praise_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("praise_len"))));
communication_community.setCollect_len(paramMap.get("collect_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("collect_len"))));
communication_community.setComment_len(paramMap.get("comment_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("comment_len"))));
communication_community.setExamine_state(paramMap.get("examine_state")==null?null:String.valueOf(paramMap.get("examine_state")));
communication_community.setCreate_by(paramMap.get("create_by")==null?null:Integer.valueOf(String.valueOf(paramMap.get("create_by"))));
this.addEntity(communication_community);
System.out.println("交流社区新增成功");
return success(1);
}

@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
Map<String,String> queryMap = service.readQuery(request);
Map<String,String> configMap = service.readConfig(request);
Map<String,Object> paramMap = service.readBody(request.getReader());
paramMap.entrySet().removeIf(entry -> {
Object value = entry.getValue();
return value instanceof String && ((String) value).isEmpty();
});
CommunicationCommunity communication_community = new CommunicationCommunity();
communication_community.setCommunication_title(paramMap.get("communication_title")==null?null:String.valueOf(paramMap.get("communication_title")));
communication_community.setType_of_communication(paramMap.get("type_of_communication")==null?null:String.valueOf(paramMap.get("type_of_communication")));
communication_community.setPlatform_users(paramMap.get("platform_users")==null?null:Integer.valueOf(String.valueOf(paramMap.get("platform_users"))));
communication_community.setUser_name(paramMap.get("user_name")==null?null:String.valueOf(paramMap.get("user_name")));
communication_community.setCover_image(paramMap.get("cover_image")==null?null:String.valueOf(paramMap.get("cover_image")));
communication_community.setContent_specificss(paramMap.get("content_specificss")==null?null:String.valueOf(paramMap.get("content_specificss")));
communication_community.setPraise_len(paramMap.get("praise_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("praise_len"))));
communication_community.setCollect_len(paramMap.get("collect_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("collect_len"))));
communication_community.setComment_len(paramMap.get("comment_len")==null?null:Integer.valueOf(String.valueOf(paramMap.get("comment_len"))));
communication_community.setExamine_state(paramMap.get("examine_state")==null?null:String.valueOf(paramMap.get("examine_state")));
this.setEntity(queryMap,configMap,communication_community);
System.out.println("交流社区修改成功");
return success(1);
}

/**
* 修改审核状态
*
* @param id 要修改的记录ID
* @param newState 新的审核状态
* @return 提示信息:审核成功/失败
*/
@Transactional
@GetMapping("/update_examine_state")
public String updateExamineState(Long id, String newState) throws IOException {
// 检查传入的状态是否合法
if (!newState.equals("未审核") && !newState.equals("已通过") && !newState.equals("未通过")) {
return "非法的审核状态";
}

Map<String,String> queryMap = new HashMap<>();
queryMap.put("id",String.valueOf(id));
// 根据ID查找记录
CommunicationCommunity communication_community = service.findOne(queryMap);

if (communication_community!=null) {
// 更新审核状态
communication_community.setExamine_state(newState);
this.setEntity(queryMap,new HashMap<>(),communication_community);

return "审核成功";
} else {
return "审核失败:记录不存在";
}
}
}
/**
* 题库
*
*/
@RestController
@RequestMapping("exam_question_database")
public class ExamQuestionDatabaseController extends BaseController<ExamQuestionDatabase, ExamQuestionDatabaseService> {
/**
* 服务对象
*/
@Autowired
public ExamQuestionDatabaseController(ExamQuestionDatabaseService service) {
setService(service);
}

}
/**
* 资源分类:(ResourceClassNameification)表控制层
*
*/
@RestController
@RequestMapping("/resource_class_nameification")
public class ResourceClassNameificationController extends BaseController<ResourceClassNameification, ResourceClassNameificationService> {

/**
* 资源分类对象
*/
@Autowired
public ResourceClassNameificationController(ResourceClassNameificationService service) {
setService(service);
}

@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> paramMap = service.readBody(request.getReader());
paramMap.entrySet().removeIf(entry -> {
Object value = entry.getValue();
return value instanceof String && ((String) value).isEmpty();
});
ResourceClassNameification resource_class_nameification = new ResourceClassNameification();
resource_class_nameification.setResource_class_nameification(paramMap.get("resource_class_nameification")==null?null:String.valueOf(paramMap.get("resource_class_nameification")));
resource_class_nameification.setCreate_by(paramMap.get("create_by")==null?null:Integer.valueOf(String.valueOf(paramMap.get("create_by"))));
this.addEntity(resource_class_nameification);
System.out.println("资源分类新增成功");
return success(1);
}

@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
Map<String,String> queryMap = service.readQuery(request);
Map<String,String> configMap = service.readConfig(request);
Map<String,Object> paramMap = service.readBody(request.getReader());
paramMap.entrySet().removeIf(entry -> {
Object value = entry.getValue();
return value instanceof String && ((String) value).isEmpty();
});
ResourceClassNameification resource_class_nameification = new ResourceClassNameification();
resource_class_nameification.setResource_class_nameification(paramMap.get("resource_class_nameification")==null?null:String.valueOf(paramMap.get("resource_class_nameification")));
this.setEntity(queryMap,configMap,resource_class_nameification);
System.out.println("资源分类修改成功");
return success(1);
}

}

前端:基于Vue.js框架构建用户界面,使用HTML5、CSS3和JavaScript实现页面结构与交互逻辑,通过Vue Router管理路由,Vuex或Pinia维护全局状态。采用Element UI或Vant组件库快速搭建界面,Axios封装HTTP请求实现与后端的数据通信。

后端:基于SpringBoot框架搭建,遵循Controller-Service-Mapper三层架构。Controller层接收前 端请求并校验参数,Service层处理核心业务逻辑,Mapper层通过MyBatis或MyBatis-Plus完成数据库操作。使用Spring Security或Shiro结合JWT实现用户认证与权限控制。

数据库:采用MySQL存储持久化数据,Redis缓存热点信息以提升系统性能。

开发工具:使用IDEA开发后端,VSCode或HBuilderX开发前端,Git进行版本管理,Maven和npm 分别管理前后端依赖。

源码获取

私信联系我即可~

大家点赞、收藏、关注、评论啦

👇精彩专栏 推荐订阅👇

海量实战库,源码任你选! 坐拥Java项目2000+套

海量实战库,源码任你选! 坐拥Python项目1000+套

海量实战库,源码任你选! 坐拥小程序/app项目500+套

✅获取源码请私信✅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️

赞(0)
未经允许不得转载:网硕互联帮助中心 » springboot个性化在线学习系统89032-计算机课程设计、毕业设计
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!