当前位置: 首页 > news >正文

springboot老年康复中心—计算机毕业设计源码27406

摘  要

随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出法,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Springboo框架建设老年康复中心信息管理系统。

本设计主要实现集人性化、高效率、便捷等优点于一身的老年康复中心信息管理系统,完成管理康复中心入住管理、护工人员管理、康复训练管理、入住管理、缴费管理、药库管理、网上咨询等功能模块。系统通过浏览器与服务器进行通信,实现数据的交互与变更。只需通过一台电脑,动动手指就可以操作系统,实现数据通信管理。整个系统的设计过程都充分考虑了数据的安全、稳定及可靠

等问题,而且操作过程简单。本系统通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上的错误和遗漏。

本文中数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

关键词老年康复中心;springboot;Mysql

Spring boot urticaria rehabilitation management system

Abstract

With the development of society, all walks of life are taking advantage of the advantages of the information age. The advantages and popularity of computers make the development of various information systems necessary.

The main modules of urticaria rehabilitation management system include viewing the home page, website management (rotation chart, announcement), personnel management (administrator, system user, doctor user), content management (health information, information classification), module management (weather information, rehabilitation guidance, online consultation, consultation information, medication information, medication reminder, health file, punch in), personal management and other functions. The administrator in the system is mainly to store and manage all kinds of information safely and effectively, and can also manage, update and maintain the system, and have corresponding operation permissions for the background.

In order to realize the functions of urticaria rehabilitation management system, we need the strong support of the background database. The administrator verifies the registration information, collects user information, and analyzes the associated information and other large amounts of data, which are managed by the database management system. In this paper, the database server uses MySQL as the background database, which makes the Web and database closely linked. In the design process, the system code is fully guaranteed to be readable, practical, extensible, universal, easy to maintain, easy to operate and concise.

The development of this system makes it easier and faster to obtain the information of urticaria rehabilitation management system, and also makes the management information of urticaria rehabilitation management system more systematic and orderly. The system interface is friendly and easy to operate.

Key words: urticaria rehabilitation management system; springboot; Mysql

1 系统概述

1.1 概述

随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中人们对预防疾病及康复管理方面的要求也在不断提高,需要康复管理系统的人数更是不断增加,使得老年康复中心的开发成为必需而且紧迫的事情。老年康复中心主要是借助计算机,通过对老年康复中心所需的信息管理,增加用户选择,同时也方便对广大用户信息的及时查询、修改以及对用户信息的及时了解。老年康复中心对用户带来了更多的便利, 该系统通过和数据库管理系统软件协作来满足用户的需求。

1.2课题意义

人口老龄化日益严重已经成为我国深刻的社会问题老年病等身体障碍也威胁着老人的身体健康。老年康复是针对老年人常见的老年病、各种急慢性病而造成的功能性障碍运用康复器械、物理等治疗手段来达到预防、恢复恢复患者生理障碍的应用学科。国内针对老年康复问题建立了康复医院以及康复中心等机构。

其中康复医院虽然解决了老年康复问题但存在着不能对老人长期康复护理的问题。者康复养老院的建立在对老人进行养老的同时,也能对老人病患造成的身体障碍进行康复。但是康复患者在康复过程中常处于被动地位,心理压力大患者内心较为脆弱同时康复是长时间才能看到效果短期效果不明显所以常导致老年患者消极参加康复。康复养老机构也因为康复器械信息平台不兼容,康复团队人员众多,康复信息分散,无法有效获取康复患者系统康复信息,从而缺乏对老年人康复系统情况的认知。康复家属因无法全程陪伴患者而时常担心患者康复情况,同时,康复治疗信息不健全容易发生医患矛盾。本文将从服务设计角度研究老人康复中心,系统分析康复养老需求,解决老年康复的痛点,旨在高性价比下改善、治疗老年人功能障碍提高独自生活能力及老人康复中的幸福度、满意度。本文运用现代科技术、物联网技术、数据库技术,以提高康复利益相关者用户体验为导向,以康复数据采集为基础、终端集成为载体、信息互通为服务的系统化研究。

建设全面覆盖、功能齐全、安全高效的康复中心信息管理系统、康复中心信息管理服务平台和决策支持系统,形成覆盖各级各类社区和养老中心的基础数据库,实现系统的全市联网和数据的交换与共享。为各级医院和养老中心社区等加强康复治疗队伍建设、配置管理康复治疗技术人才、完善老年人康复治疗机制,提供信息技术手段和决策支持数据,提升医疗监管与服务水平,促进老年康复中心医疗管理现代化、决策科学化、服务网络化。

1.3 本文的组织结构

第一章是绪论,本文章的开头部分,对本题目的研究背景和研究意义等一些做文字性的描述。

第二章研究了老年康复中心信息管理系统的所采用的开发技术和开发工具。

第三章是系统分析部分,包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。

第四章是系统设计部分,本文章的重要部分,提供了系统架构的详细设计和-一些主要功能模块的设计说明。

第五章是系统的具体实现,介绍系统的各个模块的具体实现。

第六章在前几章的基础上对系统进行测试和运行。

最后对系统进行了认真的总结,以此对未来有一个新的展望。

2 系统开发环境

本系统前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型。后端部分:采用springboot作为开发框架,同时集成MyBatis、Redis等相关技术。

2.1 Spring Boot框架

Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。

2.2 JAVA简介

Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterprise JavaBeans)的全面支持,java servlet API,SPRINGBOOT(java server pages),和XML技术。Java是一种计算机编程语言,具有封装、继承和多态性三个主要特性,广泛应用于企业Web应用程序开发和移动应用程序开发。Java语言和一般编译器以及直译的区别在于,Java首先将源代码转换为字节码,然后将其转换为JVM的可执行文件,JVM可以在各种不同的JVM上运行。因此,实现了它的跨平台特性。虽然这使得Java在早期非常缓慢,但是随着Java的开发,它已经得到了改进。

2.3访问数据库实现方法

(1)首先介绍一下web数据库搜索网络上的基本步骤:

第一步:检查消费者的数据,

第二步:你必须建立与数据库的连接;

第三步:搜索数据库;

第四步:数据的结构;

第五步:该用户的结果被示出。

(2)系统,直到我MYSQL5.0 PHP集成开发环境,如使用WAMP服务器处于开机状态,并且更容易访问数据库的报告开发环境:

一个连接到MySQL数据库服务器Mysql_connect-;

语法:资源的mysql_connect(主机,用户名,密码);

请选择数据库:mysql_select_db(数据库链接标识的名称);

关闭数据库:则mysql_close();

2.4系统对MySQL数据库的两种连接方式

活动的MySQL/ MySQL库,或使用ODBC接口,MySQL数据库是一个双向链接。永久及非永久连接。

(1)永久连接:一个更永久的连接请求的最大优点是可以非常有效的客户站在密切的联系,当连接到MySQL服务器,就更好了。在起草该页面每一个孩子在这个过程中,而不是仅仅在任何时候,只有在到MySQL服务器请求连接的生命周期,一旦连接。此子过程是建立到服务器的单独连接可以是永久性的。

(2)非永久连接:他是短路。提交顺路到Web服务器,服务器处理请求并请求的页面,你要发送的浏览器客户端,然后连接断开。对于大多数网站,它经常通过有效高效率有关,但在大多数情况下,所使用的连接,但它是一个完整的时间,以避免出现任何问题,并可以增加的容量服务器承载。

2.5 MySql数据库

Mysql的语言是非结构化的,用户可以在数据上进行工作。因为Mysql的语言和结构比较简单,但是功能和存储信息量很强大,其速度、可靠性和适应性而备受关注并得到了普遍的应用。Mysql数据库在编程过程中的作用是很广泛的,为用户进行数据查询带来了方便。Mysql数据库的应用特点:灵活性强,功能强大,语言相对要简洁很多。 

数据流程分析主要就是数据存储的储藏室,它是在计算机上进行的,而不是现实中的储藏室。数据库管理主要是数据存储、修改和增加以及数据表的建立。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。介于数据库的功能强大等特点,本系统的开发主要应用了Mysql进行对数据的管理。

2.6 Vue.js 主要功能

Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。

Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持库一起使用时,Vue.js 也能驱动复杂的单页应用。

3 需求分析

3.1技术可行性:技术背景     

老年康复中心是在Windows操作系统中进行开发运用的,而且目前PC机的各项性能已经可以胜任普通网站的web服务器。系统开发所使用的技术也都是自身所具有的,也是当下广泛应用的技术之一。

系统的开发环境和配置都是可以自行安装的,系统使用Java开发工具,使用比较成熟的Mysql数据库进行对系统前台及后台的数据交互,根据技术语言对数据库,结合需求进行修改维护,可以使得网站运行更具有稳定性和安全性,从而完成实现网站的开发。

(1)硬件可行性分析

系统管理及信息分析的设计对于所使用的计算机没有什么硬性的要求,计算机只要可以正常的使用进行代码的编写及页面设计就可行,主要是对于服务器有些要求,对于平台搭建完成要上传的服务器是有一定的要求的,服务器必须选择安全性比较高的,然后就是在打开网站必须顺畅,不能停顿太长时间;性价比高;安全性高。

(2)软件可行性分析

开发整个系统使用的是云计算,流量的可扩展性和基于流量的智能调整云计算的优点就是流量的可扩展性和基于流量的智能调整,保障了数据信息能够得到及时的备份,整个系统可以安全有效的运行。

因此,我们从两个方面进行了可行性研究,可以看出系统的开发没有问题。

3.2经济可行性

在老年康复中心开发之前所做的市场调研及与其相关的其他管理系统,都是没有任何费用的。所有的调查研究都是通过开发者自己的努力,所有的工作也都是自己亲力亲为的。在碰到自己比较难以解决的问题时,大多数是通过指导老师和同学的帮助进行相关问题的解决。所以对于老年康复中心的开发在经济上是完全可行的,没有任何费用支出的。

使用比较成熟的技术,系统是基于Java的开发,采用Mysql数据库。所以系统在开发人力、财力方面的要求不高,具有经济可行性。

3.3操作可行性: 

可操作性主要是对在老年康复中心设计完成后,用户的使用体验度,以及管理员可以通过系统随时管理相关的数据信息,并且对于管理员、普通用户、护工用户三个角色,都可以简单明了的进入到自己的系统界面,通过界面导航菜单可以简单明了地操作功能模块,方便用户信息的操作需求和管理员管理数据信息。对于系统的操作,不需要专业人员都可以直接进行功能模块的操作管理,所以老年康复中心的可操作性是完全可以的。本系统的操作使用的也是界面窗口进行登录,所以操作人员只要会简单的电脑操作就完全可以的。

3.4系统设计规则

本老年康复中心采用Java技术,Mysql数据库开发,充分保证了系统稳定性、完整性。

老年康复中心的设计与实现的设计思想如下:

  1. 操作简单方便、系统界面安全良好:简单明了的页面布局,方便查询老年康复中心管理的相关信息。

2、即时可见:对老年康复中心信息的处理将立马在对应地点可以查询到,从而实现“即时发布、即时见效”的系统功能。

3、功能的完善性:可以管理首页、人员管理(管理员、系统用户、护工用户)、模块管理(房间信息,房间预约,入住信息,训练记录,药库信息,药品入库,用药信息,训练通知,来访登记,网上咨询,缴费信息,外出登记,出院信息,收费标准)、个人管理模块的修改和维护操作。

3.5系统流程和逻辑

系统业务流程图,如图所示:

图3-1登录流程图

图3-2添加信息流程图

图3-3注册信息流程图

4系统概要设计

4.1 概述

老年康复中心基于Web服务模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在不受时间、地点的限制来使用这个系统。老年康复中心工作原理图,如图4-1所示:

图4-1  系统工作原理图

4.2 系统结构

本系统架构网站系统,本系统的具体功能如下:

图4-2系统功能结构图

整个系统是由多个功能模块组合而成的,要将所有的功能模块都一一列举出来,然后进行逐个的功能设计,使得每一个模块都有相对应的功能设计,然后进行系统整体的设计。

系统功能结构图,如图4-3所示:

图4-3 管理员功能结构图

4.3. 数据库设计

4.3.1 数据库实体

管理员信息结构图,如图4-5所示:

 图4-5 管理员信息实体结构图

用户信息实体属性图,如图4-6所示:

图4-6用户信息实体属性图

4.3.2 数据库设计表

4.4 数据表

将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。

access_token

字段名称

类型

长度

不是null

主键

字段说明

token_id

int

11

临时访问牌ID

token

varchar

64

临时访问牌

info

text

0

maxage

int

2

最大寿命

create_time

timestamp

0

创建时间

update_time

timestamp

0

更新时间

user_id

int

11

用户编号

charging_standard

字段名称

类型

长度

不是null

主键

字段说明

charging_standard_id

int

11

收费标准ID

entry_name

varchar

64

项目名称

charging_standard

varchar

64

收费标准

project_details

longtext

0

项目详情

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

check_in_information

字段名称

类型

长度

不是null

主键

字段说明

check_in_information_id

int

11

入住信息ID

appointment_no

varchar

64

预约号

serial_no

varchar

64

序号

room_name

varchar

64

房间名称

room_location

varchar

64

房间位置

make_an_appointment_for_a_bed

varchar

64

预约床位

ordinary_users

int

11

普通用户

user_name

varchar

64

用户姓名

gender

varchar

64

性别

id_number

varchar

64

身份证号

patient_no

varchar

64

患者编号

nursing_users

int

11

护工用户

check_in_date

date

0

入住日期

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

confirm_medication

字段名称

类型

长度

不是null

主键

字段说明

confirm_medication_id

int

11

确认用药ID

delivery_no

varchar

64

出库号

drug_no

varchar

64

药品编号

drug_name

varchar

64

药品名称

drug_type

varchar

64

药品类型

drug_specifications

varchar

64

药品规格

drug_taboos

varchar

64

药品禁忌

drug_users

int

11

用药用户

medicine_taking_nurse

int

11

取药护工

drug_unit_price

int

11

药品单价

number_of_drugs

int

11

用药数量

drug_amount

varchar

64

药品金额

drug_usage

varchar

64

药品用法

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

discharge_information

字段名称

类型

长度

不是null

主键

字段说明

discharge_information_id

int

11

出院信息ID

appointment_no

varchar

64

预约号

serial_no

varchar

64

序号

room_name

varchar

64

房间名称

room_location

varchar

64

房间位置

make_an_appointment_for_a_bed

varchar

64

预约床位

ordinary_users

int

11

普通用户

user_name

varchar

64

用户姓名

gender

varchar

64

性别

id_number

varchar

64

身份证号

patient_no

varchar

64

患者编号

nursing_users

int

11

护工用户

discharge_date

date

0

出院日期

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

drug_store_information

字段名称

类型

长度

不是null

主键

字段说明

drug_store_information_id

int

11

药库信息ID

drug_no

varchar

64

药品编号

drug_name

varchar

64

药品名称

drug_type

varchar

64

药品类型

drug_specifications

varchar

64

药品规格

inventory_quantity

int

11

库存数量

drug_taboos

varchar

64

药品禁忌

drug_unit_price

int

11

药品单价

drug_description

longtext

0

药品说明

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

drugs_warehousing

字段名称

类型

长度

不是null

主键

字段说明

drugs_warehousing_id

int

11

药品入库ID

warehousing_no

varchar

64

入库号

drug_no

varchar

64

药品编号

drug_name

varchar

64

药品名称

drug_type

varchar

64

药品类型

drug_specifications

varchar

64

药品规格

receipt_quantity

int

11

入库数量

channel

varchar

64

渠道

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

going_out_registration

字段名称

类型

长度

不是null

主键

字段说明

going_out_registration_id

int

11

外出登记ID

registration_no

varchar

64

登记号

serial_no

varchar

64

序号

room_name

varchar

64

房间名称

room_location

varchar

64

房间位置

make_an_appointment_for_a_bed

varchar

64

预约床位

ordinary_users

int

11

普通用户

user_name

varchar

64

用户姓名

gender

varchar

64

性别

id_number

varchar

64

身份证号

patient_no

varchar

64

患者编号

date_of_going_out

date

0

外出日期

reasons_for_going_out

longtext

0

外出原因

examine_state

varchar

16

审核状态

examine_reply

varchar

16

审核回复

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

medication_information

字段名称

类型

长度

不是null

主键

字段说明

medication_information_id

int

11

用药信息ID

delivery_no

varchar

64

出库号

drug_no

varchar

64

药品编号

drug_name

varchar

64

药品名称

drug_type

varchar

64

药品类型

drug_specifications

varchar

64

药品规格

drug_taboos

varchar

64

药品禁忌

drug_users

int

11

用药用户

drug_unit_price

int

11

药品单价

medicine_taking_nurse

int

11

取药护工

number_of_drugs

int

11

用药数量

drug_amount

varchar

64

药品金额

drug_usage

varchar

64

药品用法

examine_state

varchar

16

审核状态

examine_reply

varchar

16

审核回复

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

nursing_users

字段名称

类型

长度

不是null

主键

字段说明

nursing_users_id

int

11

护工用户ID

name_of_nurse

varchar

64

护工姓名

nurse_no

varchar

64

护工工号

gender

varchar

64

性别

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

online_consultation

字段名称

类型

长度

不是null

主键

字段说明

online_consultation_id

int

11

网上咨询ID

consulting_users

int

11

咨询用户

user_name

varchar

64

用户姓名

patient_no

varchar

64

患者编号

consultation_content

longtext

0

咨询内容

examine_state

varchar

16

审核状态

examine_reply

varchar

16

审核回复

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

ordinary_users

字段名称

类型

长度

不是null

主键

字段说明

ordinary_users_id

int

11

普通用户ID

user_name

varchar

64

用户姓名

gender

varchar

64

性别

id_number

varchar

255

身份证号

patient_no

varchar

64

患者编号

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

payment_information

字段名称

类型

长度

不是null

主键

字段说明

payment_information_id

int

11

缴费信息ID

payment_no

varchar

64

缴费编号

payment_user

int

11

缴费用户

payment_name

varchar

64

缴费名称

payment_amount

int

11

缴费金额

payment_instructions

longtext

0

缴费说明

pay_state

varchar

16

支付状态

pay_type

varchar

16

支付类型

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

rehabilitation_training

字段名称

类型

长度

不是null

主键

字段说明

rehabilitation_training_id

int

11

康复训练ID

room_name

varchar

64

房间名称

room_location

varchar

64

房间位置

make_an_appointment_for_a_bed

varchar

64

预约床位

ordinary_users

int

11

普通用户

user_name

varchar

64

用户姓名

gender

varchar

64

性别

id_number

varchar

64

身份证号

patient_no

varchar

64

患者编号

nursing_users

int

11

护工用户

training_video

varchar

255

训练视频

training_content

longtext

0

训练内容

enclosure

varchar

255

附件

examine_state

varchar

16

审核状态

examine_reply

varchar

16

审核回复

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

room_information

字段名称

类型

长度

不是null

主键

字段说明

room_information_id

int

11

房间信息ID

serial_no

varchar

64

序号

room_name

varchar

64

房间名称

room_location

varchar

64

房间位置

number_of_beds

int

11

床位数

room_details

longtext

0

房间详情

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

training_notice

字段名称

类型

长度

不是null

主键

字段说明

training_notice_id

int

11

训练通知ID

room_name

varchar

64

房间名称

room_location

varchar

64

房间位置

make_an_appointment_for_a_bed

varchar

64

预约床位

ordinary_users

int

11

普通用户

user_name

varchar

64

用户姓名

gender

varchar

64

性别

id_number

varchar

64

身份证号

patient_no

varchar

64

患者编号

nursing_users

int

11

护工用户

training_accessories

varchar

255

训练附件

remarks

varchar

64

备注

examine_state

varchar

16

审核状态

examine_reply

varchar

16

审核回复

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

5 系统详细设计   

5.1登录模块的实现

系统的登录窗口是用户的入口,用户只有在登录成功后才可以进入访问。通过在登录提交表单,后台处理判断是否为合法用户,进行页面跳转,进入系统中去。

登录合法性判断过程:用户输入账号和密码后,系统首先确定输入输入数据合法性,然后在login.jsp页面发送登录请求,调用src下的mainctrl类的dopost方法来验证。

用户登录模块的IPO如下所示:

输入:用户名和密码。

处理:

1)检测用户输入的账号、密码是否正确及在数据库已对应存在。

2)从数据库中提取记录,并储存在本地的session中(timeout默认=30min)。

3)根据用户名,将其显示在系统首页上。

输出:是否成功的信息。

登录流程图如下所示。

图5-1登录流程图

系统登录界面如下所示。

图5-2系统登录界面

用户登录的逻辑代码如下。

/**

     * 登录

     * @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);

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

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

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

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            if (res==null){

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

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

}

5.2用户子系统模块的实现

5.2.1用户首页模块

系统呈现出一种简洁大方的首页:界面简约、鳞次栉比,用户能轻车熟路的使用。出于对系统使用群体广泛的顾虑,应有良好性能的后台。

如下图所示为系统的首页界面。

图5-3系统首页界面

其中载入前台页面的主要代码如下。

 @RequestMapping(value = {"/avg_group", "/avg"})

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

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

        return success(count.getResultList());

}

5.2.2注册模块

此页面实现普通用户的注册,必须注册登录后才能使用系统大部分功能,用户名不允许重复如果重复将会注册失败,并弹出相应的提示,通过js实现对输入的验证。

用户注册流程图如下所示。

图5-4用户注册流程图

用户注册界面如下图所示。

图5-5用户注册界面

用户注册关键代码如下所示。

/**

     * 注册

     * @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;

}

5.2.3缴费信息模块

缴费信息页面可查看缴费编号、缴费用户、缴费金额、缴费名称、支付状态、支付类型等详细信息。点击支付按钮可选择微信、支付宝和网银三种支付方式

缴费信息界面如下图所示。

图5-6缴费信息界面

图5-7支付页面

5.2.4来访登记模块

来访登记页面可输入登记号、房间名称、普通用户、用户姓名、身份证号、患者编号、护工用户、房间位置、来访人员、来访日期、来访备注等详细信息进行提交审核,来访登记界面如下图:

图5-8来访登记界面

5.3管理员子系统模块的实现

5.3.1用户管理模块

用户在yhzhgl查看用户信息,先使用sql语句查询出所有用户表的数据,然后调用PageManager.getPages(url,4,sql, request ),返回一个ArrayList的对象,在for循环里,使用jsp得到每个ArrayList对象的数据,在jsp页面中解析ArrayList对象,得到其各个键值对的值。

用户管理界面如下图所示。

图5-9用户管理界面

系统用户管理关键代码如下所示。

 @PostMapping("/upload")

    public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {

        log.info("进入方法");

        if (file.isEmpty()) {

            return error(30000, "没有选择文件");

        }

        try {

            //判断有没路径,没有则创建

            String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";

            File targetDir = new File(filePath);

            if (!targetDir.exists() && !targetDir.isDirectory()) {

                if (targetDir.mkdirs()) {

                    log.info("创建目录成功");

                } else {

                    log.error("创建目录失败");

                }

            }

            String fileName = file.getOriginalFilename();

            File dest = new File(filePath + fileName);

            log.info("文件路径:{}", dest.getPath());

            log.info("文件名:{}", dest.getName());

            file.transferTo(dest);

            JSONObject jsonObject = new JSONObject();

            jsonObject.put("url", "/api/upload/" + fileName);

            return success(jsonObject);

        } catch (IOException e) {

            log.info("上传失败:{}", e.getMessage());

        }

        return error(30000, "上传失败");

}

5.3.2个人资料管理模块

用户点击登录填写账号信息登录后,会切换内容为“某某用户欢迎您”和历史订单,并给出注销链接。当用户登录成功后会将个人信息保存在session作用域中,点击自己的用户名时,会跳转到个人详细信息页面,由后台通过Freemarker取出session作用域中的用户信息进行动态渲染,例如,邮箱、电话号码、用户名等等。同时页面上会显示修改个人信息和修改密码的按钮,这时客户可以修改自己的登录密码以保障账号的安全性,防止被人窃取账号,通过UserController.java的updatePassword()实现,同时也可以根据自己的个人信息是否变动做出相应的修改,通过updateUserInfo()实现。

密码修改流程图如下所示。

图5-10密码修改流程图

密码修改关键代码如下所示。

  /**

     * 修改密码

     * @param data

     * @param request

     * @return

     */

    @PostMapping("change_password")

    public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){

        // 根据Token获取UserId

        String token = request.getHeader("x-auth-token");

        Integer userId = tokenGetUserId(token);

        // 根据UserId和旧密码获取用户

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

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

        query.put("user_id" ,String.valueOf(userId));

        query.put("password" ,service.encryption(o_password));

        Query ret = service.count(query, service.readConfig(request));

        List list = ret.getResultList();

        Object s = list.get(0);

        int count = Integer.parseInt(list.get(0).toString());

        if(count > 0){

            // 修改密码

            Map<String,Object> form = new HashMap<>();

            form.put("password",service.encryption(data.get("password")));

            service.update(query,service.readConfig(request),form);

            return success(1);

        }

        return error(10000,"密码修改失败!");

    }

5.3.3药品入库管理模块

添加药品入库信息时,输入必填字段后,表现层的ZixunController接受传过来的药品入库信息参数,再调用ZixunController类的addZixun方法,经过ZixunService业务层到zixunMapper持久层的处理,完成对整个添加药品信息的操作。addZixun方法也和用户管理中的addUser方法类似,同时做添加和修改工作。

修改药品入库信息时,选择需要修改的药品信息进行修改,调用ZixunController控制器的editZixun方法,拿到该药品入库原本的信息并显示到页面,管理员再对需要修改的药品入库信息字段进行修改,完成后调用addZixun方法,调用业务层的updateByKey方法,更新数据库的药品入库信息表的数据。

药品入库信息管理流程图如下所示。

图5-11药品入库信息管理流程图

药品入库信息添加界面如下图所示。

图5-12药品入库信息添加界面

5.3.4缴费信息模块的实现

用户可以提交缴费信息。将页面session中的用户账号userId和发表咨询文字框内容传入控制层ZixunAction,调用addZixun方法,通过ZixunDAOImp向数据库咨询表插入,将结果返回lyb.jsp界面。

缴费信息添加流程图如下图所示。

图5-11留言添加流程图

缴费信息发表界面如下所示。

图5-12缴费信息界面

6 系统测试

6.1系统测试的目的 

程序设计不能保证没有错误,这是一个开发过程,在错误或错误的过程中都是难以避免的。虽然这是不可避免的,但我们不能使这些错误始终存在于系统中,错误可能会造成无法估量的后果,如系统崩溃,安全信息泄露,系统无法正常启动等,为了避免这些问题我们需要测试程序,在测试过程中发现问题并纠正它们,从而使系统更长时间稳定成熟。

本章的作用是发现这些问题,并对其进行修改,虽然耗时费力,但对于长期使用而言是非常重要和必要系统的开发。 

软件在设计后必须进行测试,调试过程中使用的方法是软件测试方法。在开发新软件时,系统测试是检查软件是否合格的关键步骤,以及是否符合设计目标的参考。测试主要是查看软件中数据的准确性,正确的操作与否,以及操作的结果,还有哪些方面需要改进。 

老年康复中心的实现,对于系统中功能模块的实现及操作都必须通过测试进行来评判系统是否可以准确的实现。在老年康复中心正式上传使用之前必须做的一步就是系统测试,对于测试发现的错误及时修改处理,保证系统准确无误的供给用户使用。 

6.2系统测试方法 

在对老年康复中心进行测试的时候在找到问题的情况下必须在第一时间找到解决问题的办法,不要存在侥幸的心理,这样才能让社区人员管理开发的质量可以过关,并且开发的周期会大大缩短,还有就是在测试时,不要出现重复性的错误,遇到一个错误问题,要将整个老年康复中心开发所牵扯的该问题都必须一一解决,提高社区人员管理平台的安全性、稳定性。 

白盒测试与黑盒测试是测试中比较常用的两种方法。 

①结构测试俗称白盒测试:这种测试是在对程序的处理过程与结构都有详尽谅解的前提下,顺从程序内部的逻辑而完成的系统测试,以确定系统中所有的通路都能够遵照设计要求正常工作,不出现任何偏差。 

②功能测试又成黑盒测试:主要是针对程序功能能够按照设计正常实现的一种检测,在程序接口处进行,检测程序手法数据是否正常,与外部信息的交换是否完整。 

6.3测试过程

在软件的测试过程中,通常测试人员需要针对不同的功能模块设计多种测试用例。通过测试用例能够及时发现代码业务逻辑上是否与真实的业务逻辑相对应,及时发现代码上或逻辑上的缺陷,以此来来完善系统,提高软件产品的质量,使软件具有良好的用户体验。

注册测试用例表如下所示。

表6-1注册测试用例

测试性能

新用户注册

用例目的

测试系统新用户个人信息注册功能的功能和安全性

前提条件

进入注册页面填写个人信息

输入条件

预期输出

实际情况

各项基本信息输入不完整

不允许注册,无法点击注册按钮

一致

填写已存在的用户名

系统显示出提示信息,要求重新填写

一致

两次密码输入不一致

系统显示出提示信息,要求重新填写

一致

填写的各项信息没有符合提示的长度和字符要求

系统显示出提示信息,要求重新填写

一致

胡乱填写电话号码

收不到验证码

一致

填写验证码与收到的不一致

系统显示提示信息告知用户验证码错误,不予注册

一致

登录测试用例表如下所示。

表6-2登录测试用例

测试性能

用户或操作员登录系统

用例目的

测试用户或操作员登录系统时功能是否正常

前提条件

进入用户登录页面或操作员登录页面

输入条件

预期输出

实际情况

各项信息不予填写,直接点击登陆按钮

不允许登录,提示填写账号相关信息

一致

填写错误的登录名或密码后点击登录系统

提示用户名或密码错误,要求重新填写进行登录

一致

填写与验证码信息不一致的信息

系统显示出提示信息,表明验证码错误,要求重新填写

一致

6.4 测试结果

经过对一系列测试结果的有效分析,本平台开发系统符合用户的要求和需求。所有的基本功能相对齐全,操作起来简单方便,测试系统性能良好,作为大众化系统使用是比较值得推广宣传的。


结论

本系统通过对java和Mysql数据库的简介,从硬件和软件两反面说明了老年康复中心的可行性,本文结论及研究成果如下:实现了java与Mysql相结合构建的老年康复中心,网站可以响应式展示。通过本次老年康复中心的研究与实现,我感到学海无涯,学习是没有终点的,而且实践出真知,只有多动手才能尽快掌握它,经验对系统的开发非常重要,经验不足,就难免会有许多考虑不周之处。比如要有美观的界面,更完善的功能,才能吸引更多的用户。

由于在此之前对于java知识没有深入了解,所以从一开始就碰到许多困难,例如一开始的页面显示不规范、数据库连接有问题已经无法实现参数的传递等等,不过通过在网上寻找有关资料以及同学的帮助下最后都得到了解决,在此过程中,我不仅学到了很多知识,也提高了自己解决问题的能力,尤其是学会如何从大量的信息中筛选出所需有用的信息,同时我更加深刻的体会到了,虽然书本上的大部分知识都是有价值,正确的,但实际上每个人编程的思路和对数据处理的方法、思想都是不同的,这就要求我们一定要通过实践才能找到解决问题的方案。在此次毕业设计活动中,我不断的提高了自己,也得到了宝贵的经验,我相信这些对我以后的发展都会有很大帮助。

通过这次老年康复中心的开发,我参考了很多相关系统的例子,取长补短,吸取了其他系统的长处,逐步对该系统进行了完善,但是该系统还是有很多的不足之处,有待以后进一步学习。

实践证明,老年康复中心有着非常好的发展前景,经过测试运行,系统各项功能都十分完善,界面漂亮,使用方便,操作容易,在技术理论上已经成熟。

致 谢

毕业设计结束的同时也意味着四年的大学生活就要结束了。老年康复中心的完成以及如何在系统运行过程中实现的更好,这其中付出了很大的努力,这段时光将会终身难忘。 

在毕业设计的这一段时间里,离不开导师的细心指导,还有同学们的热情帮助,有时候几个同学在一起讨论系统中的某个功能模块如何实现,如何实现的更好,或是问题没得到有效的解决,就会没有心思做其他的事情,让我们对学习充满了动力。

在毕业设计即将结束之时,首先要感谢我的指导老师,谢谢您在毕业设计和毕业论文中对我的指导。在您的细心指导下我才能快速的掌握系统的相关功能,在您的大力帮助下我才能将课本上的知识与自己的项目结合,真正的做到学以致用。感谢您经常牺牲自己的休息时间,利用其丰富的教学和项目经验对我进行指导。课堂上,您教会我们如何学习、教会我们新的知识,在课下,您又像朋友一样亲切,教会了我很多道理,让我意识到先做人、后做事。感谢所有教过我的老师,为我倾注了大量的心血,正是你们的谆谆教诲、严谨教学才使我能顺利的完成学业,再此向你们表示深深的感谢。感谢大学里教过我的每一位老师,真心祝福您们。

在这里还得感谢我的战友们,也就是同学们对我的大力支持及帮助。正是因为有你们的不断帮助、鼓励,熬夜通宵,不停的调试、测试程序,给我带来了极大的动力,才能最终完成网站的运行。我们在一起交流、谈论的时光,都将是我们在通往未来道路上的宝贵财富。我要深深地感谢你们!

毕业在即,在今后的工作和生活中,我会铭记师长们的教诲、同学们的帮助,继续不懈努力和追求,来报答所有支持和帮助过我的人!

最后,我要向牺牲了休息时间来对本文进行审阅,评议和参与论文答辩的各位老师表示深深的感谢。在此,衷心的谢谢您们!


参考文献

[1]郑戟明,董云朝,柳青.MySQL数据库数据导入导出方法的探讨[J].电脑知识与技术,2022,18(22):24-25.DOI:10.14004/j.cnki.ckt.2022.1517.

[2]张鑫. 呵护老年群体  托起幸福晚年[N]. 邢台日报,2021-07-05(005).DOI:10.28904/n.cnki.nxtbr.2021.000665.

[3]LeiboviciWeissman Yaara,Levy Yochai,Michaelis Michal,Hershkovitz Avital. Rehabilitation under Social Isolation: Outcomes of Older Individuals with Hip Fractures, Admitted to a Postacute Geriatric Rehabilitation Center, during the COVID-19 Pandemic.[J]. Gerontology,2021,67(4).

[4]王强. 基于色彩模型的养老康复中心空间视觉系统色彩体系研究[D].河北工业大学,2020.DOI:10.27105/d.cnki.ghbgu.2020.000547.

[5]郑梅兰,魏莉,刘自双,陈珊珊,燕春花.老年康复中心多药耐药菌感染危险因素及风险列线图模型[J].中华医院感染学杂志,2020,30(20):3180-3184.

[6]周金瑾.民办老年康复中心能否以划拨方式取得土地[J].中国土地,2019(10):60.DOI:10.13816/j.cnki.ISSN1002-9729.2019.10.19.

[7]李成. 老年康复心理需求的光环境设计研究[D].南昌大学,2018.

[8]Ricardo M. Rodriguez. Psychosocial Issues in Geriatric Rehabilitation[J]. Physical Medicine & Rehabilitation Clinics of North America,2017,28(4).

[9]康亚慧. 老年康复中心室内环境色彩运用的设计研究[D].昆明理工大学,2017.

[10]王向真. 浅谈“淄博金域东山康复中心老年公寓设计”[C]//.2016年1月建筑科技与管理学术交流会论文集.,2016:78+70.

[11]Sandu Siyoto,Erlin Fatanti STIKes Surya Mitra Husada Kediri. Effect On The Decrease Of Gymnastics Rheumatic Pain In Patients Myalgia In Health Centre For Elderly Batuaji Ringinrejo Kediri[J]. International Journal of Scientific & Technology Research,2015,4(8).

[12]杨亭玉. 我国的社区老年康复中心建筑设计研究[D].内蒙古工业大学,2013.

[13]林琛.老年康复中心智能化解决方案[J].中国医院建筑与装备,2011,12(07):27-28.

[14]刘文博. 哈密地区成立老年残疾人康复中心[N]. 哈密日报(汉),2010-10-28(002).

[15]杨京武,张海青.民政部黄金海岸老年康复中心暑期工作成果显著[J].中国民政,2010(09):55.

[16]张旭. 市祥和福星重症智残精神残疾托管康复中心在杭锦旗落成[N]. 鄂尔多斯日报,2010-09-08(003).

[17]杨晓斌,宋连生,张佳丽. 丰台开建本市最大老年康复中心[N]. 北京日报,2009-06-26(008).

[18]方芳.护理管理在老年康复中心对护工管理的体会[J].当代医学(学术版),2008(07):115-116.

[19]刘士荣.老年康复中心护工的心理健康状况调查[J].护理学杂志,2007(15):52-53.

[20], 重庆北碚老年医疗康复中心科研项目. 重庆市,重庆市第九人民医院,2004-01-01.

[18]张恒铭.基于SpringBoot+MyBatis框架的高校人事信息发布系统设计与实现[J].电脑知识与技术,2020,16(18):68-70.DOI:10.14004/j.cnki.ckt.2020.1865.

[19]陈倩怡,何军.Vue+Springboot+MyBatis技术应用解析[J].电脑编程技巧与维护,2020(01):14-15+28.DOI:10.16184/j.cnki.comprg.2020.01.005.

[20]何军,陈倩怡.Vue+Springboot+Mybatis开发消费管理系统[J].电脑编程技巧与维护,2019(02):87-88+102.DOI:10.16184/j.cnki.comprg.2019.02.025.

免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-


http://www.mrgr.cn/news/28027.html

相关文章:

  • spark 设置hive.exec.max.dynamic.partition不生效
  • 【jvm】一个空Object对象的占多大空间
  • vue项目npm run serve出现【- Network: unavailable】(从排查到放弃)
  • C# 操作Excel的多种方式
  • 自顶向下逐步求精解决LeetCode第3307题找出第K个字符II题
  • Flume1.9.0自定义Sink组件将数据发送至Mysql
  • FreeRTOS实战指南 — 3.1 C语言链表
  • 斗破C++编程入门系列之二十七:数组、指针和字符串:string类(一星斗师)
  • 【C++】unordered系列
  • MongoDB的详细安装教程
  • string类的模拟实现
  • 【AI大模型】ChatGPT模型原理介绍(下)
  • 编程辅助工具下一个热门应用场景是什么?(一)
  • Java:继承和多态(2)
  • matlab边缘点提取函数
  • 106、解析Java中1000个常用类:Timer类,你学会了吗?
  • 猫头虎分享:Python库 SQLAlchemy 的简介、安装、用法详解入门教程
  • 合并RAR分卷压缩包
  • Oracle(127) 如何使用闪回事务(Flashback Transaction)?
  • 如何用python做一个计算器
  • 如何快速查看Docker镜像的环境变量?
  • 从架构到业务:实现企业一致性与合规性的价值流优化方案
  • 元宇宙工作室招人及创斯人工智能
  • PyTorch详解-优化模块
  • 软考高级:存储系统 DAS、NAS、SAN 区别 - AI 解读
  • 【Spinalhdl】Scala编程之伴生对象