springboot高校科研成果管理系统-附源码

摘 要

随着社会科学技术的发展,科学研究的重要性日益突出,它为社会的发展以及人们的生活做出了巨大的贡献。而其中高校研究是其中的重要部分,具有不可替代的作用。因此,开发基于Web的高校科研成果管理系统。

本课题研究使用Java语言,采用基于MVVM模式的Springboot框架进行开发。针对在高校科研信息数据规模大,学校管理者需要对其中涉及到的信息进行管理的需求,设计了高校科研成果管理系统的框架,给出了高校科研成果管理系统的总体设计,并对高校科研成果管理系统的架构及关键模块的实现过程进行了详细论述。

关键词:高校科研成果管理系统;Java;MySQL

Abstract

With the development of social science and technology, the importance of scientific research has become increasingly prominent, making tremendous contributions to the development of society and people's lives. Among them, university research is an important part and plays an irreplaceable role. Therefore, develop a web-based management system for scientific research achievements in universities.

This project is developed using the Java language and the Springboot framework based on the

目  录

摘要

1 绪论

1.1 研究背景

1.2 研究意义

1.3论文结构与章节安排

2 高校科研成果管理系统系统分析

2.1 可行性分析

2.2 系统流程分析

2.2.1 数据增加流程

2.2.2 数据修改流程

2.2.3 数据删除流程

2.3 系统功能分析

2.3.1 功能性分析

2.3.2 非功能性分析

2.4 系统用例分析

2.5本章小结

3 高校科研成果管理系统总体设计

3.1 系统架构设计

3.2 系统功能模块设计

3.2.1整体功能模块设计

3.2.2教师模块设计

3.2.3 论文申请管理模块设计

3.2.4 资政建议管理模块设计

3.3 数据库设计

3.3.1 数据库概念结构设计

3.3.2 数据库逻辑结构设计

3.4本章小结

4 高校科研成果管理系统详细设计与实现

4.1用户功能模块

4.2管理员功能模块

5系统测试

5.1 系统测试用例

5.2 系统测试结果

结论

参考文献

  

1 绪论

1.1 研究背景

当今随着科技的发展,学校的科研能力以及科研成果现金已成为衡量高校综合实力的指标,由此导致了学校的科研工作以及信息管理工作两不断增加。然而就目前的多数高校科研管理工作在很大程度上是使用传统的人工管理模式进行管理,即通过Excel、Word 等办公软件,又或者是使用比较简单的一些数据库系统来处理,这类型的方式不仅给科研管理人员以及学校管理人员带来了繁重的工作量,并且造成科研工作人员之间缺少必要和及时的沟通,难以反映高校科研现状,造成信息传递流转失真且速度慢。在当前形式下,通过互联网等信息化手段,实现高校科研成果管理信息化,以加强日常科研成果管理,整合科研工作流程,为决策层提供真实有效的参考依据,从而提升科研管理水平,也是当今高校科研管理的大势所趋。

1.2 研究意义

现阶段的高校科研成果管理大部分还是主要依赖于人工管理的,面对管理中的大量数据,如果只是通过传统的人工管理来处理,传统的管理方式就是通过办公室软件进行记录和管理。这种传统的方式是比较繁琐而且很难对科研成果进行详细的掌握。随着现代科学技术的快速发展,现在的我们就是处于一个信息化,网络化的时代,我们生活中的各种工作都与网络和信息紧密联系。高校科研成果管理是作为科研工作一个重要组成部分。科研水平现在已经成为确定一个高校排名的重要因素,高校现在已经逐渐成为国家重要的科研中心,担负着推动国家科研发展和经济科技发展的重任。所以现在如何使得高校中那么庞大繁多的科研成果信息得到高效率、安全的处理,使得高校科研成果管理变得科学化、信息化、规范化,建立一个科学化的高校科研成果管理系统是一个高校发展的必经之路。然而传统的高校科研成果管理方式己无法适应当前高校科研迅速发展的要求,为满足这种快速发展的科研成果需求,必须要有一套适用于现代高校科研的高校科研成果管理系统。所以在当今的环境下,实现高校科研成果管理的信息化是必须的。采用管理系统的方式去管理高校科研成果对推动高校科研工作效率具有积极的意义。高校科研成果管理系统让科研人员以及管理人员通过利用系统紧密连接起来。让高校中存在的大量的科研成果能够以表单数据的形式存储在系统中,这样方便科研人管理人员查看和管理。同时也可以方便教师以及校方对科研成果进行统计以及对教师进行评估等。通过系统的进行管理会让曾今存储在个人电脑上的大量的科研成果信息更加安全的保存。

1.3论文结构与章节安排

论文将分层次经行编排,除去论文摘要致谢文献参考部分,正文部分还会对网站需求做出分析,以及阐述大体的设计和实现的功能,最后罗列部分调测记录,论文主要架构如下:

第一章:引言。第一章主要介绍了课题研究的背景,系统开发的意义和本文的研究机器信息与主要工作。

第二章:系统需求分析。第二章主要从系统的用户、功能等方面进行需求分析。

第三章:系统设计。第三章主要对系统框架、系统功能模块、数据库进行功能设计。

第四章:系统实现。第四章主要介绍了系统框架搭建、系统界面的实现。

第五章:系统测试。第五章主要对系统的部分界面进行测试并对主要功能进行测试

第六章:总结。

2 高校科研成果管理系统系统分析

系统分析是开发一个项目的先决条件,通过系统分析可以很好的了解系统的主体用户的基本需求情况,同时这也是项目的开发的原因。进而对系统开发进行可行性分析,通常包括技术可行性、经济可行性等,可行性分析同时也是从项目整体角度进行的分析。然后就是对项目的具体需求进行分析,分析的手段一般都是通过用户的用例图来实现。下面是详细的介绍。

2.1 可行性分析

(1)经济可行性:

经济可行性在此仅代表网站的运维成本,开发成本不在此考虑。

目前该模式下随着高校科研成果日益增多,进行科研成果信息的管理变得便捷自动化化,用户人数呈上升趋势,当用户人数庞大了,运维成本可以由广告费进行填补,包括开发成本。

所以经济可行性没有问题。

(2)操作可行性:

此次项目设计参考了几个该模式下网站的开发案例,对他们的操作界面分析,将众多案例结合在一起,突出以人为本简化操作,所以具有基本计算机知识的人都会操作本项目。

因此操作可行性也没有问题。

(3)技术可行性:

技术可行性指的是对于搭建框架的可行性,以及有更优秀的技术出现时系统的技术更新换代的纳新性如何,开发时间成本费用比如何。

现有的Java语言能够迎合所有电子商务系统的搭建,系统技术设备的可扩展性可以由Springboot框架的资源优势予以促成。我采用了编译器eclipse+java+mysql用以运行整体程序。

综上所述技术可行性也没有问题。

(4)法律可行性:

从开发者角度来看,Springboot框架是网上开源且免费的,在知识产权方面不会产生任何法律纠纷。

从用户使用角度来看,只要不再系统上贩卖违禁品,对系统做出条约协议,杜绝非法支付即可。

综上所述法律可行性也没有问题。

2.2 系统流程分析

业务流程是用一些特定的符合和线条来进行演示用户在使用系统时的过程,在进行系统分析的时候,业务流程可以帮助开发人员更好的理解业务,发现错误,完善系统。

2.2.1 数据增加流程

用户成功登入系统后能够实现增加数据的操作,增加数据的编号是特定的,系统生成,用户不能随意填写,除了编号以外,其他增加信息用户自己填写,填写后的信息经过系统验证,验证合法通过就显示增加数据成功了,相反的话,就没有增加成功,图2-1显示的就是在增加数据时的流程。

图2-1  数据增加流程图

2.2.2 数据修改流程

数据修改时的流程和上面介绍的数据增加时的流程差不多,如图2-2所示。

图2-2  数据修改流程图

2.2.3 数据删除流程

如果系统里面存在一些没有用的数据的话相关的管理人员还可以对这些数据进行删除,图2-3就是数据删除时的流程图。

图2-3  数据删除流程图

2.3 系统功能分析

2.3.1 功能性分析

按照高校科研成果管理系统的角色,我划分为了教师用户模块、院系管理者模块和管理员模块这三大部分。

教师用户管理模块:

(1)教师注册登录:游客可以随时进入到系统中,对系统中的信息浏览,但是想要实现自助洗衣下单以及故障反馈等,就必须有这个系统的账号,如果没有账号的话,可以注册成员用户进行相关的操作,同时用户还可以通过“我的”这以按钮对个人信息以及操作的信息进行管控。

(2)论文申请:教师点击导航栏中的“论文申请”进行论文文件的上传以及申请资料的提交等。

(3)著作申请:教师点击“著作申请”这个菜单按钮,可以提交教师个人的著作信息。

(3)专利申请:教师可以在线进行专利提交申请。

(4)软著申请:教师可以在线进行个人软著信息提交等。

(5)行业标准:教师可以点击“行业标注”进行信息的浏览查看,还可以点击标准文件的下载。

(6)资政建议:教师可以查看资政项目信息可以进行附件下载等。

(7)获奖成果:教师可以在次页面查看获奖成果信息。查看获奖编号、获奖项目、获得奖项以及获奖人信息等。

(8)成果估值:教师可以查看成果估值信息。

院系管理者模块:

  1. 登录:管理员认证账户,院系管理者凭账户密码进行系统登录。
  2. 院系部门管理:可以对院系部门信息进行查看。
  3. 论文管理:可以对教师提交的个人论文信息进行审核回复操作。
  4. 著作管理:可以对教师提交的个人著作信息进行审核回复。
  5. 专利管理:可以对教师提交的专利申请进行审核回复。
  6. 软著管理:可以对教师提交的软著信息进行审核回复。
  7. 成果估值:对项目成果进行估值发布。
  8. 转化项目管理:可以查看转化项目信息。
  9. 经费管理:可以对经费信息进行增删改查。
  10. 本院信息管理。

管理员管理模块:

(1)用户管理:管理员可以对系统用户信息进行管理。

(2)轮播图管理:管理员可以对系统轮播图行增删改查。

(3)通用信息管理:管理员对通用信息进行增删改查。

(4)资源管理:管理员可以对资讯信息进行维护管理。

(5)权限管理:管理员可以对用户的权限进行分配管理。

(6)模块管理:此模块主要包括:院系部门、论文管理、著作管理、专利管理、软著管理、行业标准、资政建议、获奖成果、成果估值、成果转化、转化项目、经费管理、本院信息管理等。

2.3.2 非功能性分析

高校科研成果管理系统的非功能性需求比如高校科研成果管理系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下3-1表格中:

2-1高校科研成果管理系统非功能需求表

安全性

主要指高校科研成果管理系统数据库的安装,数据库的使用和密码的设定必须合乎规范。

可靠性

可靠性是指高校科研成果管理系统能够安装用户的指示进行操作,经过测试,可靠性90%以上。

性能

性能是影响高校科研成果管理系统占据市场的必要条件,所以性能最好要佳才好。

可扩展性

比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。

易用性

用户只要跟着高校科研成果管理系统的页面展示机器信息进行操作,就可以了。

可维护性

高校科研成果管理系统开发的可维护性是非常重要的,经过测试,可维护性没有问题

2.4 系统用例分析

通过2.3功能的分析,得出了本高校科研成果管理系统的用例图:

图2-4就是教师、院系管理者角色的用例展示。

图2-4 高校科研成果管理系统教师、院系领导角色用例图

图2-5就是管理员角色的用例展示。

图2-5 高校科研成果管理系统管理员角色用例图

2.5本章小结

本章主要通过对高校科研成果管理系统的可行性分析、流程分析、功能需求分析、系统用例分析,确定整个高校科研成果管理系统要实现的功能。同时也为高校科研成果管理系统的代码实现和测试提供了标准。

3 高校科研成果管理系统总体设计

本章主要讨论的机器信息包括高校科研成果管理系统的功能模块设计、数据库系统设计。

3.1 系统架构设计

本高校科研成果管理系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。

图3-1高校科研成果管理系统系统架构设计图

表现层(UI):又称UI层,主要完成本高校科研成果管理系统的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本高校科研成果管理系统时的舒适度。UI的界面设计也要适应不同版本的高校科研成果管理系统以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。

业务逻辑层(BLL):主要完成本高校科研成果管理系统的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。

数据层(DL):由于本高校科研成果管理系统的数据是放在服务端的mysql数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本高校科研成果管理系统的数据存储和管理功能。

3.2 系统功能模块设计

3.2.1整体功能模块设计

在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本高校科研成果管理系统中的用例。那么接下来就要开始对本高校科研成果管理系统的架构、主要功能和数据库开始进行设计。高校科研成果管理系统根据前面章节的需求分析得出,其总体设计模块图如图3-2所示。

图3-2 高校科研成果管理系统功能模块图

3.2.2用户模块设计

本系统的用户包括管理员和教师、院系管理者。三种用户模块的功能基本是相同的,教师比管理员以及院系管理者多了一个注册功能,所以以教师模块的结构图为例进行分析,教师模块结构图为例进行分析,如下图:

图3-3教师模块结构图

3.2.3 论文申请管理模块设计

高校科研成果管理系统中教师可以进行论文申请提交,管理员可以后台查看论文申请、院系管理者可以对教师的论文进行审核回复。所以需要专门设计一个论文申请管理模块,具体的结构图如下:

图3-4论文申请模块结构图

3.2.4资政建议管理模块设计

高校科研成果管理系统是中需要存储资政建议信息,其模块功能结构,具体的结构图如下:

图3-5资政建议模块结构图

3.3 数据库设计

数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。

3.3.1 数据库概念结构设计

下面是整个高校科研成果管理系统中主要的数据库表总E-R实体关系图。

图3-6 高校科研成果管理系统总E-R关系图

3.3.2 数据库逻辑结构设计

通过上一小节中高校科研成果管理系统中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。

 表achievement_transformation (成果转化)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

achievement_transformation_id

int

10

0

N

Y

成果转化ID

2

result_no

varchar

64

0

Y

N

成果编号

3

name_of_achievements

varchar

64

0

Y

N

成果名称

4

result_type

varchar

64

0

Y

N

成果类型

5

person_in_charge

varchar

64

0

Y

N

负责人

6

participant

varchar

64

0

Y

N

参与者

7

issuing_unit

varchar

64

0

Y

N

发版单位

8

time_of_publication

date

10

0

Y

N

发表时间

9

conversion_time

date

10

0

Y

N

转化时间

10

acquirer

varchar

64

0

Y

N

收购方

11

acquisition_contact_person

varchar

64

0

Y

N

收购联系人

12

purchasing_price

varchar

64

0

Y

N

收购价格

13

acquisition_agreement

text

65535

0

Y

N

收购协议

14

recommend

int

10

0

N

N

0

智能推荐

15

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

16

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表achievement_valuation (成果估值)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

achievement_valuation_id

int

10

0

N

Y

成果估值ID

2

result_no

varchar

64

0

Y

N

成果编号

3

name_of_achievements

varchar

64

0

Y

N

成果名称

4

result_type

varchar

64

0

Y

N

成果类型

5

person_in_charge

varchar

64

0

Y

N

负责人

6

participant

varchar

64

0

Y

N

参与者

7

issuing_unit

varchar

64

0

Y

N

发版单位

8

time_of_publication

date

10

0

Y

N

发表时间

9

valuation_value

varchar

64

0

Y

N

估值价值

10

valuation_unit

varchar

64

0

Y

N

估值单位

11

valuation_results

text

65535

0

Y

N

估值结果

12

hits

int

10

0

N

N

0

点击数

13

praise_len

int

10

0

N

N

0

点赞数

14

recommend

int

10

0

N

N

0

智能推荐

15

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

16

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表award_winning_achievements (获奖成果)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

award_winning_achievements_id

int

10

0

N

Y

获奖成果ID

2

award_number

varchar

64

0

Y

N

获奖编号

3

award_winning_projects

varchar

64

0

Y

N

获奖项目

4

awards

varchar

64

0

Y

N

获奖奖项

5

awardee

varchar

64

0

Y

N

获奖人

6

award_time

date

10

0

Y

N

获奖时间

7

related_certificates

varchar

255

0

Y

N

相关证书

8

award_description

text

65535

0

Y

N

获奖说明

9

hits

int

10

0

N

N

0

点击数

10

praise_len

int

10

0

N

N

0

点赞数

11

recommend

int

10

0

N

N

0

智能推荐

12

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

13

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表conversion_project (转化项目)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

conversion_project_id

int

10

0

N

Y

转化项目ID

2

result_no

varchar

64

0

Y

N

成果编号

3

name_of_achievements

varchar

64

0

Y

N

成果名称

4

result_type

varchar

64

0

Y

N

成果类型

5

person_in_charge

varchar

64

0

Y

N

负责人

6

participant

varchar

64

0

Y

N

参与者

7

issuing_unit

varchar

64

0

Y

N

发版单位

8

time_of_publication

date

10

0

Y

N

发表时间

9

conversion_time

date

10

0

Y

N

转化时间

10

conversion_type

varchar

64

0

Y

N

转化类型

11

conversion_project_name

varchar

64

0

Y

N

转化项目名称

12

recommend

int

10

0

N

N

0

智能推荐

13

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

14

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表copyright_management (著作管理)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

copyright_management_id

int

10

0

N

Y

著作管理ID

2

teacher

int

10

0

Y

N

0

教师

3

affiliated_department

varchar

64

0

Y

N

所属院系

4

department_manager

int

10

0

Y

N

0

院系管理者

5

author

varchar

64

0

Y

N

作者

6

title_of_work

varchar

64

0

Y

N

著作名称

7

compilation_form

varchar

64

0

Y

N

编著形式

8

category_of_works

varchar

64

0

Y

N

著作类别

9

series_to_which_the_work_belongs

varchar

64

0

Y

N

著作所属系列

10

introduction_to_works

text

65535

0

Y

N

著作简介

11

copyright_documents

varchar

255

0

Y

N

著作文件

12

examine_state

varchar

16

0

N

N

未审核

审核状态

13

examine_reply

varchar

16

0

Y

N

审核回复

14

recommend

int

10

0

N

N

0

智能推荐

15

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

16

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表department (院系部门)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

department_id

int

10

0

N

Y

院系部门ID

2

department

varchar

64

0

Y

N

院系

3

department_manager

int

10

0

Y

N

0

院系管理者

4

manager_name

varchar

64

0

Y

N

管理者姓名

5

recommend

int

10

0

N

N

0

智能推荐

6

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

7

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表department_manager (院系管理者)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

department_manager_id

int

10

0

N

Y

院系管理者ID

2

manager_no

varchar

64

0

N

N

管理者工号

3

manager_name

varchar

64

0

Y

N

管理者姓名

4

affiliated_department

varchar

64

0

Y

N

所属院系

5

examine_state

varchar

16

0

N

N

已通过

审核状态

6

recommend

int

10

0

N

N

0

智能推荐

7

user_id

int

10

0

N

N

0

用户ID

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表fund_management (经费管理)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

fund_management_id

int

10

0

N

Y

经费管理ID

2

name_of_achievements

varchar

64

0

Y

N

成果名称

3

result_type

varchar

64

0

Y

N

成果类型

4

person_in_charge

varchar

64

0

Y

N

负责人

5

participant

varchar

64

0

Y

N

参与者

6

issuing_unit

varchar

64

0

Y

N

发版单位

7

time_of_publication

date

10

0

Y

N

发表时间

8

conversion_time

date

10

0

Y

N

转化时间

9

conversion_quantity

int

10

0

Y

N

0

转化数量

10

acquirer

varchar

64

0

Y

N

收购方

11

purchasing_price

varchar

64

0

Y

N

收购价格

12

deposit_time

date

10

0

Y

N

存入时间

13

deposit_to_account

varchar

64

0

Y

N

存入账号

14

recommend

int

10

0

N

N

0

智能推荐

15

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

16

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表industry_standards (行业标准)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

industry_standards_id

int

10

0

N

Y

行业标准ID

2

teacher

int

10

0

Y

N

0

教师

3

standard_name

varchar

64

0

Y

N

标准名称

4

standard_level

varchar

64

0

Y

N

标准级别

5

standard_number

varchar

64

0

Y

N

标准号

6

approval_time

date

10

0

Y

N

批准时间

7

on_campus_participants

varchar

64

0

Y

N

校内参与人

8

whether_to_sign_the_unit_or_not

varchar

64

0

Y

N

是否署名单位

9

whether_to_archive_electronic_files

varchar

64

0

Y

N

是否电子文件存档

10

industry

varchar

64

0

Y

N

所属行业

11

expiration_time

date

10

0

Y

N

到期时间

12

usage

text

65535

0

Y

N

使用情况

13

transformation_experience

text

65535

0

Y

N

转化经历

14

local_industry_standards

text

65535

0

Y

N

地方行业标准

15

national_industry_standards

text

65535

0

Y

N

国家行业标准

16

standard_documents

varchar

255

0

Y

N

标准文件

17

hits

int

10

0

N

N

0

点击数

18

praise_len

int

10

0

N

N

0

点赞数

19

examine_state

varchar

16

0

N

N

未审核

审核状态

20

recommend

int

10

0

N

N

0

智能推荐

21

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

22

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表patent_management (专利管理)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

patent_management_id

int

10

0

N

Y

专利管理ID

2

teacher

int

10

0

Y

N

0

教师

3

affiliated_department

varchar

64

0

Y

N

所属院系

4

department_manager

int

10

0

Y

N

0

院系管理者

5

patent_name

varchar

64

0

Y

N

专利名称

6

application_number

varchar

64

0

Y

N

申请号

7

patent_type

varchar

64

0

Y

N

专利类型

8

patent_applicant

varchar

64

0

Y

N

专利申请人

9

patent_licensor

varchar

64

0

Y

N

专利授权人

10

approval_time

date

10

0

Y

N

获批时间

11

patent_content

text

65535

0

Y

N

专利内容

12

patent_attachments

varchar

255

0

Y

N

专利附件

13

examine_state

varchar

16

0

N

N

未审核

审核状态

14

examine_reply

varchar

16

0

Y

N

审核回复

15

recommend

int

10

0

N

N

0

智能推荐

16

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

17

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

3.4本章小结

整个高校科研成果管理系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。

4 高校科研成果管理系统详细设计与实现

高校科研成果管理系统的详细设计与实现主要是根据前面的高校科研成果管理系统的需求分析和高校科研成果管理系统的总体设计来设计页面并实现业务逻辑。主要从高校科研成果管理系统界面实现、业务逻辑实现这两部分进行介绍。

4.1用户功能模块

4.1.1 首页界面

当进入高校科研成果管理系统的时候,系统以上中下的布局进行展示,首先映入眼帘的是系统的导航栏,再往下是各种各样的系统信息,其主界面展示如下图4-1所示。

图4-1 首页界面图

4.1.2 用户注册界面

不是高校科研成果管理系统中正式用户的是可以在线进行注册的,当用户右上角“注册”按钮的时候,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等信息后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用用户注册界面展示如下图4-2所示。

图4-2 前台用户注册界面图

用户注册的关键代码如下。

/**

     * 注册

     * @param user

     * @return

     */

    @PostMapping("register")

    public Map<String, Object> signUp(@RequestBody User user) {

        // 查询用户

        Map<String, String> query = new HashMap<>();

        query.put("username",user.getUsername());

        List list = service.select(query, new HashMap<>()).getResultList();

        if (list.size()>0){

            return error(30000, "用户已存在");

        }

        user.setUserId(null);

        user.setPassword(service.encryption(user.getPassword()));

        service.save(user);

        return success(1);

}

/**

     * 用户ID:[0,8388607]用户获取其他与用户相关的数据

     */

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "user_id")

    private Integer userId;

    /**

     * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

     */

    @Basic

    @Column(name = "state")

    private Integer state;

    /**

     * 所在用户组:[0,32767]决定用户身份和权限

     */

    @Basic

    @Column(name = "user_group")

    private String userGroup;

    /**

     * 上次登录时间:

     */

    @Basic

    @Column(name = "login_time")

    private Timestamp loginTime;

    /**

     * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "phone")

    private String phone;

    /**

     * 手机认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "phone_state")

    private Integer phoneState;

    /**

     * 用户名:[0,16]用户登录时所用的账户名称

     */

    @Basic

    @Column(name = "username")

    private String username;

    /**

     * 昵称:[0,16]

     */

    @Basic

    @Column(name = "nickname")

    private String nickname;

    /**

     * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

     */

    @Basic

    @Column(name = "password")

    private String password;

    /**

     * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "email")

    private String email;

    /**

     * 邮箱认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "email_state")

    private Integer emailState;

    /**

     * 头像地址:[0,255]

     */

    @Basic

    @Column(name = "avatar")

    private String avatar;

    /**

     * 创建时间:

     */

    @Basic

    @Column(name = "create_time")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    private Timestamp createTime;

    @Basic

    @Transient

    private String code;

}

4.1.3 用户登录界面

高校科研成果管理系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到高校科研成果管理系统的首页中;否则将会提示相应错误信息,用户登录界面如下图4-3所示。

图4-3用户登录界面图

用户登录的关键代码如下。

/**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0)

4.1.4论文申请界面

当点击导航栏上的“论文申请”的时候,就会进入对应的教师论文提交申请界面,教师可以将个人论文细腻些包括题目、来源、检索网站、论文内容以及文件进行上传。论文申请界面如下图4-4所示。

图4-4论文申请界面图

论文申请的关键代码如下。

 @PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

4.1.5 专利申请界面

当教师点击高校科研成果管理系统中导航栏上的“专利申请”后将会进入到专利申请提交界面,然后填写专利名称、类型、编号、专利授权人、专利内容以及专利附件上传,点击提交,专利申请界面如下图4-5所示。

图4-5专利申请界面图

专利申请的关键代码如下。

 @RequestMapping(value = {"/count_group", "/count"})

    public Map<String, Object> count(HttpServletRequest request) {

        Query count = service.count(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

4.1.6 行业标准界面

当用户点击“行业标准”后就可以进行行业标准信息查看了解,行业标准详情页面如图4-6所示。

图4-6 行业标准详情界面图

行业标准关键代码:

 @RequestMapping("/get_list")

    public Map<String, Object> getList(HttpServletRequest request) {

        Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));

        return success(map);

}

4.1.7 获奖成果界面

当教师点击“获奖成果”链接后就进入获奖成果详情界面,可以进行获奖信息的了解,并且可以进行点赞收藏以及评论操作。获奖成果界面如下图4-7所示。

图4-7 获奖成果界面图

获奖成果界面关键代码: 

@RequestMapping(value = {"/count_group", "/count"})

    public Map<String, Object> count(HttpServletRequest request) {

        Query count = service.count(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

4.1.8成果估值界面

教师可以查看成果估值信息,成果估值界面如下图4-8所示。

图4-8 成果估值界面图

成果估值的关键代码如下。

@RequestMapping("/get_obj")

    public Map<String, Object> obj(HttpServletRequest request) {

        Query select = service.select(service.readQuery(request), service.readConfig(request));

        List resultList = select.getResultList();

        if (resultList.size() > 0) {

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("obj",resultList.get(0));

            return success(jsonObject);

        } else {

            return success(null);

        }

}

 public Query select(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("select ");

        sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");

        sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));

        if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){

            sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");

        }

        if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){

            sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");

        }

        if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){

            int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;

            int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;

            sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);

        }

        log.info("[{}] - 查询操作,sql: {}",table,sql);

        return runEntitySql(sql.toString());

    }

4.2管理员功能模块

4.2.1 教师管理界面

高校科研成果管理系统中的管理人员在“教师管理”这一菜单中是可以对教师信息进行管控。界面如下图4-9所示。

图4-9教师管理界面图

教师管理的关键代码如下。

@PostMapping("/set")

@Transactional

    public Map<String, Object> set(HttpServletRequest request) throws IOException {

        service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));

        return success(1);

}

    public Map<String,String> readConfig(HttpServletRequest request){

        Map<String,String> map = new HashMap<>();

        map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));

        map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));

        map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));

        map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));

        map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));

        map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));

        map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));

        map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));

        return map;

}

    public Map<String,String> readQuery(HttpServletRequest request){

        String queryString = request.getQueryString();

        if (queryString != null && !"".equals(queryString)) {

            String[] querys = queryString.split("&");

            Map<String, String> map = new HashMap<>();

            for (String query : querys) {

                String[] q = query.split("=");

                map.put(q[0], q[1]);

            }

            map.remove(FindConfig.PAGE);

            map.remove(FindConfig.SIZE);

            map.remove(FindConfig.LIKE);

            map.remove(FindConfig.ORDER_BY);

            map.remove(FindConfig.FIELD);

            map.remove(FindConfig.GROUP_BY);

            map.remove(FindConfig.MAX_);

            map.remove(FindConfig.MIN_);

            return map;

        }else {

            return new HashMap<>();

        }

}

    @Transactional

    public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){

        StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");

            }else {

                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");

            }

4.2.2 权限管理界面

高校科研成果管理系统中的管理人员在“权限管理”这一菜单是中可以对注册用户的权限、院系管理者的权限进行分配设置。权限管理界面如下图4-10所示。

图4-10权限管理界面图

权限管理关键代码:

@RequestMapping(value = "/del")

    @Transactional

    public Map<String, Object> del(HttpServletRequest request) {

        service.delete(service.readQuery(request), service.readConfig(request));

        return success(1);

}

    @Transactional

    public void delete(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");

        sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));

        log.info("[{}] - 删除操作:{}",table,sql);

        Query query1 = runCountSql(sql.toString());

        query1.executeUpdate();

    }

4.2.3 资源管理界面

高校科研成果管理系统中的管理人员在“资源管理”这一菜单中是可以对高校科研成果管理系统内的校园资讯以及资讯分类进行维护和管理的,界面如下图4-11所示。

图4-11资源管理界面图

资源管理关键代码:

@PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

    public Map<String,Object> readBody(BufferedReader reader){

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

            while ((str = br.readLine()) != null){

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

4.2.4 通用信息管理界面

高校科研成果管理系统中的管理人员在“通用信息管理”这一菜单下是可以对高校科研成果管理系统内的通用信息进行管控的,其管理界面如下图4-12所示。

图4-12通用信息管理界面图

通用信息管理关键代码:

@RestController

@RequestMapping("auth")

public class AuthController extends BaseController<Auth, AuthService> {

    /**

     * 服务对象

     */

    @Autowired

    public AuthController(AuthService service) {

        setService(service);

    }

}

4.2.5模块管理界面

高校科研成果管理系统中的管理人员在“模块管理”这一菜单下主要包括:院系部门、论文管理、著作管理、专利管理、软著管理、行业标准、资政建议、获奖成果、成果估值、成果转化、转化项目、经费管理、本院信息管理等,其界面如下图4-12所示。

图4-12模块管理界面图

模块管理关键代码:

  @RequestMapping("/get_obj")

    public Map<String, Object> obj(HttpServletRequest request) {

        Query select = service.select(service.readQuery(request), service.readConfig(request));

        List resultList = select.getResultList();

        if (resultList.size() > 0) {

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("obj",resultList.get(0));

            return success(jsonObject);

        } else {

            return success(null);

        }

}

 public Query select(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("select ");

        sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");

        sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));

        if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){

            sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");

        }

        if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){

            sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");

        }

        if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){

            int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;

            int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;

            sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);

        }

        log.info("[{}] - 查询操作,sql: {}",table,sql);

        return runEntitySql(sql.toString());

    }

5系统测试

5.1 系统测试用例

系统测试包括:用户登录功能测试、论文申请功能测试、获奖成果信息添加、密码修改功能测试,如表5-1、5-2、5-3、5-4所示:

用户登录功能测试:

表5-1 用户登录功能测试表

用例名称

用户登录系统

目的

测试用户通过正确的用户名和密码可否登录功能

前提

未登录的情况下

测试流程

1) 进入登录页面

2) 输入正确的用户名和密码

预期结果

用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入

实际结果

实际结果与预期结果一致

论文申请查看功能测试:

表5-2 论文申请功能测试表

用例名称

论文申请

目的

测试论文申请功能

前提

用户登录

测试流程

点击论文申请信息

预期结果

可以进行论文申请提交

实际结果

实际结果与预期结果一致

管理员添加获奖成果界面测试:

表5-3 管理员添加获奖成果界面测试表

用例名称

获奖成果添加测试用例

目的

测试获奖成果添加功能

前提

管理员正常登录情况下

测试流程

1)管理员点击获奖成果,然后点击添加后并填写信息。

2)点击进行提交。

预期结果

提交以后,页面首页会显示新的获奖成果 

实际结果

实际结果与预期结果一致

实际结果

实际结果与预期结果一致

密码修改搜索功能测试:

表5-4 密码修改功能测试表

用例名称

密码修改测试用例

目的

测试管理员密码修改功能

前提

管理员用户正常登录情况下

测试流程

1)管理员密码修改并完成填写。

2)点击进行提交。

预期结果

使用新的密码可以登录

实际结果

实际结果与预期结果一致

5.2 系统测试结果

通过编写高校科研成果管理系统的测试用例,已经检测完毕用户登录功能测试、论文申请功能测试、获奖成果添加、密码修改功能测试,通过这4大模块为高校科研成果管理系统的后期推广运营提供了强力的技术支撑。

结  论

在高校科研成果管理系统开发之前,需要先对不同用户身份的具体需求进行分析。包括系统的可行性分析、功能需求分析以及其他需求等。在可行性分析过程中,对系统实现的技术性、经济性以及管理等方面进行了分析。总体上证明了系统实施的可行性。

本文总结了高校科研成果管理系统实现背景与现状,然后阐述了系统的具体业务需求,并根据系统需求对系统结构以及功能模块等进行了详细地设计,将整个系统划分为多个不同的功能模块。在分析系统功能需求时,对整个系统的总体架构以及功能模块等进行了分析,并选择合适的系统开发技术完成了对各个模块的开发工作。系统开发完成之后进行了部署,同时进行了系统的测试过程,通过测试证明了系统在功能以及性能等方面都达到了预期的要求,具有较高的稳定性与可靠性。

参考文献

[1]李国平.基于模板式的高校科研成果展示网站管理系统的设计与实现[J].机械设计与制造工程,2022,51(12):58-61.

[2]李卉.基于机构知识库的高校科研成果数据组织与管理[J].图书馆学刊,2022,44(05):53-59.

[3]柯万超. 基于Java Web的高校科研成果管理系统设计与实现[D].阜阳师范大学,2021.

[4]王厚淳. 基于区块链的高校科研成果管理系统的设计与实现[D].太原理工大学,2020.

[5]师广强,刘扬,赵劲飞.普通高校科研成果管理过程中存在问题及对策分析[J].山西农经,2019(06):98-99.

[6]桂林斌.基于Java EE的高校科研成果管理系统的设计与实现[J].电脑与电信,2019(Z1):24-27.

[7]李彦超.成人高校加强科研成果管理的对策分析[J].北京宣武红旗业余大学学报,2019(01):32-34.

[8]刘思伟,张聪惠,纪秉林,陈钰.地方高校高水平科研成果产出的管理机制改革研究[J].陕西行政学院学报,2019,30(02):118-121..

[9]李英,殷峭峰.高校科研成果管理系统的安全建设[J].中国教育信息化,2019(23):73-74.

[10]聂慧慧. 高校教师科研成果管理系统的设计与实现[D].吉林大学,2019. 

致  谢

逝者如斯夫,不舍昼夜。转眼间,大学生会员活便已经接近尾声,人面对着离别与结束,总是充满着不舍与茫然,我亦如此,仍记得那年秋天,我迫不及待的提前一天到了学校,面对学校巍峨的大门,我心里充满了期待:这里,就是我新生活的起点吗?那天,阳光明媚,学校的欢迎仪式很热烈,我面对着一个个对着我微笑的同学,仿佛一缕缕阳光透过胸口照进了我心里,同时,在那天我认识可爱的室友,我们携手共同度过了这难忘的两年。如今,我望着这篇论文的致谢,不禁又要问自己:现在,我们就要说再见了吗?

感慨莫名,不知所言。遥想当初刚来学校的时候,心里总是想着工科学校会过于板正,会缺乏一些柔情,当时心里甚至有一点点排斥,但是随着我对学校的慢慢认识与了解,我才认识到了她的美丽,她的柔情,并且慢慢的喜欢上了这个校园,但是时间太快了,快到我还没有好好体会她的美丽便要离开了,但是她带给我的回忆,永远不会离开我,也许真正离开那天我的眼里会满含泪水,我不是因为难过,我只是想将她的样子映在我的泪水里,刻在我的心里。最后,感谢我的老师们,是你们教授了我们知识与做人的道理;感谢我的室友们,是你们陪伴了我如此之久;感谢每位关心与支持我的人。

少年,追风赶月莫停留,平荒尽处是春山。

点赞+收藏+关注  →私信领取本源代码、数据库

关注博主下篇更精彩
一键三连!!!
一键三连!!!
一键三连!!!
感谢一键三连!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值