专注毕业设计领域10年
做最优质的毕业设计指南

Java网站项目

本目录是java毕业设计实战专栏,里边收录了springboot,ssm,jsp等框架的项目,前端vue技术,完整源码,大多数附带论文

基于SpringBoot的大学生创新能力培养平台

前言

构建一个高效的大学生创新能力培养平台显得尤为重要。本平台基于SpringBoot技术栈开发,旨在为大学生提供一个集学习、实践、交流和展示于一体的创新能力培养平台。通过平台,学生不仅可以进行各类创新项目的实践操作,还可以与校内外的专家和同行进行交流与合作,提升自身的创新思维和实际动手能力。系统的核心功能包括创新项目管理、任务分配与跟踪、创新成果展示、专家指导、团队协作等,旨在为大学生提供一个全方位的创新能力提升空间。
SpringBoot作为平台的后端开发框架,凭借其简洁高效、易于扩展的特点,为平台提供了强大的功能支持。同时,平台的前端界面也采用了现代化的技术框架,保证用户操作的流畅性和界面的易用性。通过这一平台,大学生不仅能在理论学习之外获得更多创新实践机会,还能通过与企业、导师及其他学生的互动,激发更多创意和解决实际问题的能力。
本平台的设计与实现,旨在为大学生提供一个集学习、实践、交流于一体的创新能力培养环境,推动创新教育的发展,帮助学生更好地为未来的职业挑战做好准备,同时也为培养更多具有创新精神的社会人才贡献力量。

系统演示效果图

 

 

 

 

 

基于SpringBoot+vue的小区物业管理系统(2024-2025最新,原创项目)

前言

随着城市化进程的加快,小区物业管理逐渐成为提升居住环境、优化社区服务的重要环节。传统的小区物业管理方式大多依赖人工操作和纸质记录,不仅工作效率低下,而且容易产生管理混乱、信息不准确等问题,无法满足居民日益增长的服务需求。为了提高物业管理的效率、提升居民的生活质量,智能化、信息化的物业管理系统应运而生。

本系统基于SpringBoot和Vue技术栈,旨在通过技术手段打造一个高效、便捷的小区物业管理平台。系统通过实现对物业管理的全方位数字化,包括居民信息管理、设备设施管理、报修管理、费用缴纳、公告发布等核心功能,帮助物业管理者更好地服务居民、提升管理效率,减少人工干预。SpringBoot作为后端开发框架,以其高效、稳定的特性,为系统提供强有力的支持;而Vue.js则通过其灵活性和高效性,确保前端界面的流畅和用户体验的优化。

通过本系统,物业管理者可以实时查看各项工作任务的进展,及时响应居民需求;居民也可以通过平台方便地进行信息查询、报修申请、费用缴纳等操作。系统的实现不仅使得小区物业管理更加规范、透明,还大大提升了管理效率,优化了居民的居住体验,推动了智能化物业管理的普及。

本系统的设计和实现将为小区物业管理提供一种现代化、信息化的解决方案,助力物业服务向更加高效、智能的方向发展。

系统演示效果图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

基于SpringBoot+Vue的实验报告系统(计算机毕设源码+论文+部署指导)

博主介绍

博主介绍:✌全网粉丝100W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、Python、PHP、小程序、大数据技术领域和毕业项目实战✌
💗技术服务: SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化、SMT32单片机、小程序、安卓、大数据、物联网、机器学习等设计与实现
💗主要内容: ✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌

项目成果

🍅 **文末联系我获取源码**🍅
👇🏻 精彩专栏 推荐订阅👇🏻
年度最值得选的微信小程序毕业设计选题大全:100个热门选题推荐✅
年度最值得选的Java毕业设计选题大全:500个热门选题推荐✅
[Python精品毕设案例《2000套》]
[PHP精品毕设案例《1000套》]
[Java精品实战案例《3000套》]
[微信小程序项目精品案例《3000套》]
[基于大数据、数据分析大屏、爬虫精品毕设案例]
🍅 **文末联系我获取源码**🍅

系统介绍

技术介绍

技术框架
后端采用SpringBoot框架
Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约定大于配置的方式,大大简化了应用程序的配置工作。开发者不再需要手动配置大量的 XML 文件或繁琐的注解,框架提供了默认的配置,根据项目的依赖关系和约定,自动完成配置。Spring Boot 使用 Maven 或 Gradle 进行构建,自动下载项目依赖,并提供了许多插件简化构建过程。开发者可以使用 Spring Initializr 来生成一个基础的项目结构,然后根据需要选择所需的依赖。
前端框架Vue
Vue.js 的设计目标之一是使其尽可能简单、易于理解和上手。Vue 提供了直观的 API,使开发者能够轻松地构建交互式的用户界面。Vue.js 提供了简单而强大的数据绑定机制,通过使用指令(例如 v-model)可以实现视图和数据的双向绑定。当数据发生变化时,视图会自动更新,反之亦然,使得开发者不必手动处理 DOM 操作。Vue.js 提供了一组生命周期钩子函数,允许开发者在组件的不同阶段执行自定义逻辑。这包括创建、挂载、更新和销毁等阶段,为开发者提供了更多灵活性。

选题推荐(部分)

基于SpringBoot+Vue的名著阅读网站设计与实现(源码+论文+PPT+部署文档教程等)
基于SpringBoot+Vue+Uniapp的志愿者服务平台设计与实现(源码+论文+PPT+部署文档教程等)
基于SpringBoot+Vue的流浪天使乐园管理系统设计与实现(源码+论文+PPT+部署文档教程等)
基于PHP+Vue的多媒体教室管理系统设计与实现(源码+论文+PPT+部署文档教程等)
基于SpringBoot+Vue+Uniapp的驾校预约小程序(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+Uniapp的博客系统设计与实现(源码+论文+PPT+部署文档教程等)
基于SpringBoot+Vue+Uniapp的江西文物时讯小程序设计与实现(源码+论文+PPT+部署文档教程等)
基于SSM+Vue+Uniapp的线上视频学习系统设计与实现(源码+论文+PPT+部署文档教程等)

系统测试

从多个角度进行测试找到系统中存在的问题是本系统首要的测试目的,通过功能测试寻找出系统缺陷并改正,确保系统没有缺陷。在测试过程中证明系统满足客户需求,发现问题和不足及时改正。测试完成之后得出测试结论。
系统测试的目的
系统测试是必不可少且考验耐心的过程。其重要性在于,它是保证系统质量和牢靠性的最后一道关,也是整个系统开发过程的最后一次检查。
系统测试主要是为了避免用户在使用时发生问题,增强用户体验感,为了不影响用户的使用,我们需要从多角度、多思路去考虑系统可能遇到的问题,通过不同的模拟场景来发现缺陷并解决问题。在测试的过程中也可以了解到该系统的质量情况,系统功能是否健全,系统逻辑是否顺畅。一个合格的系统测试过程完成后将大大提升系统质量和使用感。测试的目标是验证系统是否符合需求规格说明书的定义,并找出与需求规格说明书不符合或与之冲突的内容。测试过程中一定站在用户的角度考虑问题,避免一些不切实际的场景,浪费测试时间,从而可能会引起问题导致预期结果与实际结果不符。
系统功能测试
对系统功能模块进行测试,通过点击、输入边界值和必填项非必填项的验证等方法进行一系列的黑盒测试。通过编写测试用例,根据测试用例中的内容进行测试,最后得出测试结论。
登录功能测试方案:当需要登入该系统时,通过账户密码等功能点进行验证,用户在输入时需要输入与数据库内存储的数据匹配的内容,当其中某项输入错误时系统将提示输入错误。此界面对角色权限也有相应的校验,当用户角色的帐号选择管理员角色登录时,也会报错。登录功能测试用例如下表所示。
用户管理功能测试方案:用户管理主要有添加、编辑、删除、查找用户功能。添加用户时,必填项不填,检验系统是否有非空检验;添加已有的用户信息,检验是否提示用户名已被使用;删除用户信息,系统将检验是否进行此操作;更改用户信息,更改用户信息后页面是否可以展示出来。用户管理测试用例如下表所示。

# 代码参考

            SignUpActRecord dbRecord=signUpActRecordService.getById(recordId);
            JSONObject result = new JSONObject();
            result.put("regisStatus", "1");
            MchInfo mchInfo = mchInfoService.getById(dbRecord.getMchNo());
            JSONObject bizContent = new JSONObject();
            bizContent.put("custId", dbRecord.getCustId());
            bizContent.put("timeStamp", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
            String response = TerpayKit.applymentPost("/cream/ymcrv2/queryInfo", mchInfo.getIsvNo(), bizContent);
            JSONObject responseJson = JSON.parseObject(response);
            if (TerpayKit.RES_CODE.equals(responseJson.getString("code"))) {
                JSONArray data = responseJson.getJSONArray("data");
                JSONObject jsonObject = data.getJSONObject(0);
                
                String status = jsonObject.getString("regisStatus");
                SignUpActRecord updateRecord = new SignUpActRecord();

                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

                LocalDateTime regisTime = LocalDateTime.parse(jsonObject.getString("regisTime"), formatter);
                LocalDateTime auditTime = LocalDateTime.parse(jsonObject.getString("auditTime"), formatter);

                updateRecord.setRegisTime(Date.from(regisTime.atZone(ZoneId.systemDefault()).toInstant()));
                updateRecord.setAuditTime(Date.from(auditTime.atZone(ZoneId.systemDefault()).toInstant()));
                if ("1".equals(status)) {
                    result.put("regisStatus", "1");
                    updateRecord.setRecordId(recordId);
                } else if ("2".equals(status)) {
                    result.put("regisStatus", "2");
                    // 更新库
                    updateRecord.setRegisStatus("2");
                    updateRecord.setRecordId(recordId);
                } else if ("3".equals(status)) {
                    result.put("regisStatus", "3");
                    result.put("remark", jsonObject.getString("failReason"));
                    updateRecord.setRegisStatus("3");
                    updateRecord.setRecordId(recordId);
                    updateRecord.setRemark(jsonObject.getString("failReason"));
                }
                signUpActRecordService.updateById(updateRecord);
                return ApiRes.ok(result);

为什么选择我?

我就是程序员,程序大部分由博主亲自开发完成,现在有很多人看似在做程序设计,但是并不会进行讲解,因为程序根本不是他做出来的,从我这里做的毕设,都可以享有代码讲解服务,会议博主亲自讲解,可以全程录音录屏!这就是我的保障,代码哪里不懂都可以问!!!

获取源码

基于SpringBoot+Vue的社区流浪动物救助系统(2024-2025原创毕设源码+论文+部署指导)

研究背景

近年来,随着城市化进程的加速和社会对动物保护意识的提升,流浪动物问题日益严重。无家可归的流浪动物在城市中随处可见,它们面临着食物短缺、疾病传播、恶劣环境等多重困境,亟需社会各界的关爱与救助。然而,流浪动物的救助工作往往面临资源不足、救助渠道不畅、信息不对称等问题,导致救助效率低下,许多动物无法及时得到有效的援助。

传统的流浪动物救助方式多依赖于志愿者的个人努力或一些非政府组织(NGO)进行线下救助,但缺乏系统化的管理和信息化手段。为了提高流浪动物救助工作的效率,信息化、数字化管理手段显得尤为重要。因此,基于现代信息技术的社区流浪动物救助系统应运而生,旨在通过建立一个平台,实现对流浪动物救助工作的智能化管理,促进社会力量与资源的有效整合。

本研究旨在设计并实现一个基于SpringBoot+Vue技术栈的社区流浪动物救助系统。通过构建一个集流浪动物信息登记、救助任务发布、志愿者管理、捐赠渠道等功能于一体的系统平台,提供一个更加高效、透明的救助机制。该系统将为社会志愿者、动物救助组织以及公众提供一个便捷的信息交流和资源共享平台,有效解决流浪动物救助中的信息不对称问题,并促进社会各界积极参与到流浪动物的救助行动中,推动流浪动物救助事业的发展。

研究目的

本研究的主要目的是设计并实现一套基于SpringBoot+Vue的社区流浪动物救助系统,旨在通过现代信息技术手段提升流浪动物救助工作的效率、透明度与可持续性。具体目标包括:
提升救助效率:通过数字化手段,简化流浪动物救助流程,提供便捷的动物信息登记、救助任务发布、资源调度等功能,使得救助工作能够更加高效、及时地进行,减少流浪动物的困境和死亡率。
促进信息透明与共享:该系统将为动物救助志愿者、救助组织及社会公众提供一个开放的平台,打破信息壁垒,实现救助资源、捐赠信息、流浪动物信息等多方资源的共享和透明,提升救助工作的公信力和参与度。
优化资源配置与管理:通过系统化管理,精确记录每一只流浪动物的救助进度、医疗状态、收养情况等数据,帮助救助组织合理规划资源,优化动物救助过程中的人力、物力和财力配置,提高资源利用效率。
促进社会公众参与:通过系统的开放和互动功能,鼓励社会公众参与流浪动物救助,不仅限于捐赠资金或物资,还包括加入志愿者队伍、推广救助行动等。通过平台的引导和鼓励,提升社会各界对流浪动物问题的关注度和责任感。
推动流浪动物救助事业的发展:本系统旨在为社会提供一个可持续发展、智能化的解决方案,通过技术手段优化救助工作,推动动物保护意识的普及,最终促使流浪动物问题的改善,并为其他类似的公益事业提供可参考的模式。
通过这些目标的实现,本研究希望能够为流浪动物救助工作提供一种新的、更为高效的管理工具,促进动物救助组织之间的协作,提高社会对流浪动物问题的关注,并助力建立一个更加和谐的人与动物共生的社会环境。

系统演示图

系统测试

从多个角度进行测试找到系统中存在的问题是本系统首要的测试目的,通过功能测试寻找出系统缺陷并改正,确保系统没有缺陷。在测试过程中证明系统满足客户需求,发现问题和不足及时改正。测试完成之后得出测试结论。

系统测试目的

系统测试是必不可少且考验耐心的过程。其重要性在于,它是保证系统质量和牢靠性的最后一道关,也是整个系统开发过程的最后一次检查。
系统测试主要是为了避免用户在使用时发生问题,增强用户体验感,为了不影响用户的使用,我们需要从多角度、多思路去考虑系统可能遇到的问题,通过不同的模拟场景来发现缺陷并解决问题。在测试的过程中也可以了解到该系统的质量情况,系统功能是否健全,系统逻辑是否顺畅。一个合格的系统测试过程完成后将大大提升系统质量和使用感。测试的目标是验证系统是否符合需求规格说明书的定义,并找出与需求规格说明书不符合或与之冲突的内容。测试过程中一定站在用户的角度考虑问题,避免一些不切实际的场景,浪费测试时间,从而可能会引起问题导致预期结果与实际结果不符。

系统功能测试

对系统功能模块进行测试,通过点击、输入边界值和必填项非必填项的验证等方法进行一系列的黑盒测试。通过编写测试用例,根据测试用例中的内容进行测试,最后得出测试结论。
登录功能测试方案:当需要登入该系统时,通过账户密码等功能点进行验证,用户在输入时需要输入与数据库内存储的数据匹配的内容,当其中某项输入错误时系统将提示输入错误。此界面对角色权限也有相应的校验,当用户角色的帐号选择管理员角色登录时,也会报错。登录功能测试用例如下表所示。用户管理功能测试方案:用户管理主要有添加、编辑、删除、查找用户功能。添加用户时,必填项不填,检验系统是否有非空检验;添加已有的用户信息,检验是否提示用户名已被使用;删除用户信息,系统将检验是否进行此操作;更改用户信息,更改用户信息后页面是否可以展示出来。用户管理测试用例如下表所示。

代码参考

            SignUpActRecord dbRecord=signUpActRecordService.getById(recordId);
            JSONObject result = new JSONObject();
            result.put("regisStatus", "1");
            MchInfo mchInfo = mchInfoService.getById(dbRecord.getMchNo());
            JSONObject bizContent = new JSONObject();
            bizContent.put("custId", dbRecord.getCustId());
            bizContent.put("timeStamp", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
            String response = TerpayKit.applymentPost("/cream/ymcrv2/queryInfo", mchInfo.getIsvNo(), bizContent);
            JSONObject responseJson = JSON.parseObject(response);
            if (TerpayKit.RES_CODE.equals(responseJson.getString("code"))) {
                JSONArray data = responseJson.getJSONArray("data");
                JSONObject jsonObject = data.getJSONObject(0);
                
                String status = jsonObject.getString("regisStatus");
                SignUpActRecord updateRecord = new SignUpActRecord();

                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

                LocalDateTime regisTime = LocalDateTime.parse(jsonObject.getString("regisTime"), formatter);
                LocalDateTime auditTime = LocalDateTime.parse(jsonObject.getString("auditTime"), formatter);

                updateRecord.setRegisTime(Date.from(regisTime.atZone(ZoneId.systemDefault()).toInstant()));
                updateRecord.setAuditTime(Date.from(auditTime.atZone(ZoneId.systemDefault()).toInstant()));
                if ("1".equals(status)) {
                    result.put("regisStatus", "1");
                    updateRecord.setRecordId(recordId);
                } else if ("2".equals(status)) {
                    result.put("regisStatus", "2");
                    // 更新库
                    updateRecord.setRegisStatus("2");
                    updateRecord.setRecordId(recordId);
                } else if ("3".equals(status)) {
                    result.put("regisStatus", "3");
                    result.put("remark", jsonObject.getString("failReason"));
                    updateRecord.setRegisStatus("3");
                    updateRecord.setRecordId(recordId);
                    updateRecord.setRemark(jsonObject.getString("failReason"));
                }
                signUpActRecordService.updateById(updateRecord);
                return ApiRes.ok(result);

 

为什么选择我?

我就是程序员,程序大部分由博主亲自开发完成,现在有很多人看似在做程序设计,但是并不会进行讲解,因为程序根本不是他做出来的,从我这里做的毕设,都可以享有代码讲解服务,会议博主亲自讲解,可以全程录音录屏!这就是我的保障,代码哪里不懂都可以问!!!

联系作者

[start-plane type=”1″]作者微信[/start-plane]

[start-plane type=”2″]QQ[/start-plane]

赞(0)可可源码可可源码阅读(273)去评论

基于SpringBoot+Vue的办公用品管理系统

前言

随着企业规模的不断扩大和办公环境的日益复杂,办公用品的管理已成为各类组织中一个至关重要的环节。传统的办公用品管理方式往往依赖人工记录,容易出现库存失衡、浪费等问题,既影响工作效率,又给企业带来额外的管理成本。因此,建立一套高效、便捷的办公用品管理系统显得尤为重要。

本系统基于SpringBoot和Vue技术栈,旨在通过信息化手段优化办公用品的管理流程。系统通过对办公用品的采购、库存、申请、发放等环节进行数字化、自动化管理,实现了办公用品资源的实时监控与高效调配,提升了办公效率并降低了管理成本。SpringBoot作为后端开发框架,具有高效的开发和部署优势,能够为系统提供稳定的后端支持;而Vue.js作为前端框架,具备灵活性和高效性的特点,能够提供流畅的用户体验。

通过本系统,企业或组织可以实现对办公用品的统一管理和精细化运营,便于对物品的库存状态、使用情况进行实时查询和更新。管理人员能够轻松掌握办公用品的使用与存储情况,避免物资浪费,确保物资的合理分配,进而提高资源利用率。本系统的实施将大大提升办公用品管理的效率,推动现代化企业管理进程。

系统演示图

系统测试

从多个角度进行测试找到系统中存在的问题是本系统首要的测试目的,通过功能测试寻找出系统缺陷并改正,确保系统没有缺陷。在测试过程中证明系统满足客户需求,发现问题和不足及时改正。测试完成之后得出测试结论。

系统测试目的

系统测试是必不可少且考验耐心的过程。其重要性在于,它是保证系统质量和牢靠性的最后一道关,也是整个系统开发过程的最后一次检查。
系统测试主要是为了避免用户在使用时发生问题,增强用户体验感,为了不影响用户的使用,我们需要从多角度、多思路去考虑系统可能遇到的问题,通过不同的模拟场景来发现缺陷并解决问题。在测试的过程中也可以了解到该系统的质量情况,系统功能是否健全,系统逻辑是否顺畅。一个合格的系统测试过程完成后将大大提升系统质量和使用感。测试的目标是验证系统是否符合需求规格说明书的定义,并找出与需求规格说明书不符合或与之冲突的内容。测试过程中一定站在用户的角度考虑问题,避免一些不切实际的场景,浪费测试时间,从而可能会引起问题导致预期结果与实际结果不符。

系统功能测试

对系统功能模块进行测试,通过点击、输入边界值和必填项非必填项的验证等方法进行一系列的黑盒测试。通过编写测试用例,根据测试用例中的内容进行测试,最后得出测试结论。
登录功能测试方案:当需要登入该系统时,通过账户密码等功能点进行验证,用户在输入时需要输入与数据库内存储的数据匹配的内容,当其中某项输入错误时系统将提示输入错误。此界面对角色权限也有相应的校验,当用户角色的帐号选择管理员角色登录时,也会报错。登录功能测试用例如下表所示。用户管理功能测试方案:用户管理主要有添加、编辑、删除、查找用户功能。添加用户时,必填项不填,检验系统是否有非空检验;添加已有的用户信息,检验是否提示用户名已被使用;删除用户信息,系统将检验是否进行此操作;更改用户信息,更改用户信息后页面是否可以展示出来。用户管理测试用例如下表所示。

代码参考

            SignUpActRecord dbRecord=signUpActRecordService.getById(recordId);
            JSONObject result = new JSONObject();
            result.put("regisStatus", "1");
            MchInfo mchInfo = mchInfoService.getById(dbRecord.getMchNo());
            JSONObject bizContent = new JSONObject();
            bizContent.put("custId", dbRecord.getCustId());
            bizContent.put("timeStamp", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
            String response = TerpayKit.applymentPost("/cream/ymcrv2/queryInfo", mchInfo.getIsvNo(), bizContent);
            JSONObject responseJson = JSON.parseObject(response);
            if (TerpayKit.RES_CODE.equals(responseJson.getString("code"))) {
                JSONArray data = responseJson.getJSONArray("data");
                JSONObject jsonObject = data.getJSONObject(0);
                
                String status = jsonObject.getString("regisStatus");
                SignUpActRecord updateRecord = new SignUpActRecord();

                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");

                LocalDateTime regisTime = LocalDateTime.parse(jsonObject.getString("regisTime"), formatter);
                LocalDateTime auditTime = LocalDateTime.parse(jsonObject.getString("auditTime"), formatter);

                updateRecord.setRegisTime(Date.from(regisTime.atZone(ZoneId.systemDefault()).toInstant()));
                updateRecord.setAuditTime(Date.from(auditTime.atZone(ZoneId.systemDefault()).toInstant()));
                if ("1".equals(status)) {
                    result.put("regisStatus", "1");
                    updateRecord.setRecordId(recordId);
                } else if ("2".equals(status)) {
                    result.put("regisStatus", "2");
                    // 更新库
                    updateRecord.setRegisStatus("2");
                    updateRecord.setRecordId(recordId);
                } else if ("3".equals(status)) {
                    result.put("regisStatus", "3");
                    result.put("remark", jsonObject.getString("failReason"));
                    updateRecord.setRegisStatus("3");
                    updateRecord.setRecordId(recordId);
                    updateRecord.setRemark(jsonObject.getString("failReason"));
                }
                signUpActRecordService.updateById(updateRecord);
                return ApiRes.ok(result);

 

获取源码

作者微信:

QQ

 

赞(0)可可源码可可源码阅读(194)去评论

登录

找回密码

注册