# DIMS **Repository Path**: wangbaochao/DIMS ## Basic Information - **Project Name**: DIMS - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-08 - **Last Updated**: 2024-12-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README DIMS

DIMS

SQL Server Java Tomcat

数据库系统原理课程设计,DIMS,Drug Inventory Management System,基于 SSM 框架的医院药品库存管理系统。

任务进度

本组成员任务分工

数据库设计

在数据库设计过程中,需求分析和概念结构设计可以独立于任何数据库管理系统进行,逻辑结构设计和物理结构设计与选用的数据库管理系统密切相关。

需求分析

需求分析必须准确了解与分析用户需求 (包括数据与处理)。

设计描述:数字字典、全系统中数据项、数据结构、数据流、数据存储的描述。

任务:通过详细调查现实世界要处理的对象 (组织、部门、企业等),充分了解原系统 (手工系统或计算机系统) 的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。调查的重点是 “数据” 和 “处理”,通过调查、收集与分析,获得用户对数据库的如下要求:

业务用例图:

需求分析_业务用例图

参考:

数据字典:数据字典是进行详细的数据收集和数据分析所获得的主要成果。它是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善的。它在数据库设计中占有很重要的地位。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程几部分。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。

数据项描述 = { 数据项名, 数据项含义说明, 别名, 数据类型, 长度, 取值范围, 取值含义, 与其他数据项的逻辑关系, 数据项之间的联系 }
数据项名 数据项含义说明 数据类型 长度 取值范围 取值含义 与其他数据项的逻辑关系 数据项之间的联系
Ano 库存管理员编号 VARCHAR 20
Aname 库存管理员姓名 VARCHAR 20 Ano→Aname
Asex 库存管理员性别 BIT 1 { 0, 1 } 0 代表女,1 代表男 Ano→Asex
Aage 库存管理员年龄 SMALLINT 2 [0, 32767] Ano→Aage
Apwd 库存管理员登陆密码 VARCHAR 20 Ano→Apwd
Dno 医生编号 VARCHAR 20
Dname 医生姓名 VARCHAR 20 Dno→Dname
Dsex 医生性别 BIT 1 { 0, 1 } 0 代表女,1 代表男 Dno→Dsex
Dage 医生年龄 SMALLINT 2 [0, 32767] Dno→Dage
Dpwd 医生登陆密码 VARCHAR 20 Dno→Dpwd
Nno 发药处护士编号 VARCHAR 20
Nname 发药处护士姓名 VARCHAR 20 Nno→Nname
Nsex 发药处护士性别 BIT 1 { 0, 1 } 0 代表女,1 代表男 Nno→Nsex
Nage 发药处护士年龄 SMALLINT 2 [0, 32767] Nno→Nage
Npwd 发药处护士登陆密码 VARCHAR 20 Nno→Npwd
Sno 供应商编号 VARCHAR 20
Sname 供应商名称 VARCHAR 20 Sno→Sname
Saddr 供应商地址 VARCHAR 60 Sno→Saddr
Sphone 供应商电话 VARCHAR 20 Sno→Sphone
PDno 药品编号 VARCHAR 20
PDname 药品名称 VARCHAR 20 PDno→PDname
PDlife 药品保质期 SMALLINT 2 [0, 32767] 保质期总天数 PDno→PDlife
PDbatch 药品批次 DATE
PDnum 药品数量 SMALLINT 2 [0, 32767] (PDno, PDbatch)→PDnum
SAno 药品入库库存管理员编号 VARCHAR 20 SAno ∈ List<Ano> (PDno, PDbatch)→SAno
Stime 药品入库时间 DATETIME (PDno, PDbatch)→Stime
DAno 药品销毁库存管理员编号 VARCHAR 20 DAno ∈ List<Ano> (PDno, PDbatch)→DAno
Dtime 药品销毁时间 DATETIME Dtime ≥ Stime (PDno, PDbatch)→Dtime
Pno 处方编号 INT
Pid 病人身份证号 VARCHAR 20 Pno→Pid
Ptime 处方开出时间 DATETIME Pno→Ptime
Htime 处方处理时间 DATETIME Htime ≥ Ptime Pno→Htime
Pstate 处方状态 BIT 1 { 0, 1 } 0 代表未处理,1 代表已处理 Pno→Pstate
数据结构描述 = { 数据结构名, 含义说明, 组成:{数据项或数据结构} }
数据结构名 含义说明 组成:{数据项或数据结构}
Admin 库存管理员 { Ano, Aname, Asex, Aage, Apwd }
Doctor 医生 { Dno, Dname, Dsex, Dage, Dpwd }
Nurse 发药处护士 { Nno, Nname, Nsex, Nage, Npwd }
Supplier 供应商 { Sno, Sname, Saddr, Sphone }
Drug 药品 { PDno, PDname, PDlife, PDnum }
InventoryDrug 库存药品 { PDno, PDname, PDlife, PDbatch, PDnum, Sno, SAno, Stime }
DestroyedDrug 已销毁药品 { PDno, PDname, PDlife, PDbatch, PDnum, Sno, SAno, Stime, DAno, Dtime }
Prescription 处方 { Pno, Pid, Dno, Ptime, Nno, Htime, Pstate, ListDrug }
数据流描述 = { 数据流名, 说明, 数据流来源, 数据流去向, 组成:{数据结构}, 平均流量, 高峰期流量 }
数据流名 说明 数据流来源 数据流去向 组成:{数据结构} 平均流量 高峰期流量
数据存储描述 = { 数据存储名, 说明, 编号, 输入的数据流, 输出的数据流, 组成:{数据结构}, 数据量, 存取频度, 存取方式 }
数据存储名 说明 编号 输入的数据流 输出的数据流 组成:{数据结构} 数据量 存取频度 存取方式
处理过程描述 = { 处理过程名, 说明, 输入:{数据流}, 输出:{数据流}, 处理:{简要说明} }
处理过程名 说明 输入:{数据流} 输出:{数据流} 处理:{简要说明}

参考:

概念结构设计

概念结构设计通过对用户需求进行综合、归纳与抽象,形成一个独立于具体数据库管理系统的概念模型。

设计描述:概念模型 (E-R 图)、数据字典。

任务:概念结构设计的第一步就是对需求分析阶段收集到的数据进行分类、组织,确定实体、实体的属性、实体之间的联系类型,形成 E-R 图。

概念结构设计_ER图

逻辑结构设计

逻辑结构设计是将概念结构转换为某个数据库管理系统所支持的数据模型,并对其进行优化。

设计描述:某种数据模型 (关系 / 非关系)。

任务:把概念结构设计阶段设计好的基本 E-R 图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。将概念模型转换为全局逻辑模型后,还应该根据局部应用需求,结合具体关系数据库管理系统的特点设计用户的外模式。

E-R 图向关系模型的转换:

  1. 一个 1:1 联系可以转换为一个独立的关系模式,也可以与任意一端的关系模式合并。
  2. 一个 1:n 联系可以转换为一个独立的关系模式,也可以与 n 端对应的关系模式合并。
  3. 一个 m:n 联系转换为一个关系模式。
  4. 三个或三个以上实体间的一个多元联系可以转换为一个关系模式。
  5. 具有相同码的关系模式可以合并。

逻辑结构设计_关系模型

物理结构设计

物理结构设计是为逻辑数据模型选取一个最适合应用环境的物理结构 (包括存储结构和存取方法)。

设计描述:存储安排、存取方法选择、存取路径建立。

数据库实施

在数据库实施阶段,设计人员运用数据库管理系统提供的数据库语言及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编写与调试应用程序,组织数据入库,并进行试运行。

设计描述:创建数据库模式、装入数据、数据库试运行。

数据库运行和维护

设计描述:性能监测、转储 / 恢复、数据库重组和重构。

应用系统设计

参考:

详细设计阶段

详细设计_时序图_User

详细设计_时序图_Admin

详细设计_时序图_Doctor

详细设计_时序图_Nurse

参考:

环境准备

配置 Java 环境

  1. 下载 JDK 安装包:

  2. 配置环境变量:

    变量 值
    JAVA_HOME C:\Program Files\Java\jdk1.8.0_231
    JRE_HOME C:\Program Files\Java\jre1.8.0_231
    Path ;%JAVA_HOME%\bin

安装 Eclipse IDE for Enterprise Java Developers

配置 Tomcat 环境

  1. 从官网下载相应的 Tomcat Binary Distributions 安装包文件 32-bit/64-bit Windows Service Installer。

  2. 双击运行下载的安装文件,按照提示一步一步安装并配置。

  3. 配置环境变量:

    变量 值
    TOMCAT_HOME C:\Program Files\Apache Software Foundation\Tomcat 9.0
    CATALINA_HOME C:\Program Files\Apache Software Foundation\Tomcat 9.0
    Path ;%TOMCAT_HOME%\bin;%CATALINA_HOME%\lib

在 Eclipse 中配置 Tomcat Server

参考:

创建一个新的 Dynamic Web 项目

新建一个名为 DIMS 的 Dynamic Web Project,Target runtime 选择上一步在 Eclipse 当中配置的 Apache Tomcat v9.0,Dynamic web module version 选择最新版本,Configuration 选择 Default Configuration for Apache Tomcat v9.0,其它选项不作更改,点击 Next。

将 Default output folder 的值改为 WebContent\WEB-INF\classes,点击 Next。

勾选 Generate web.xml deployment descriptor,点击 Finish。

测试项目是否可以发布成功,参考:

后续需要导入的 jar 包都复制到项目的 WebContent\WEB-INF\lib 目录当中来。

集成 Spring 和 SpingMVC

下载 spring-5.2.1.RELEASE-dist.zip 并解压。

导入 Spring 的 jar 包

将 spring-5.2.1.RELEASE-dist.zip 解压路径的 libs 目录下的一部分 jar 包复制到项目的 WebContent\WEB-INF\lib 目录当中来,需要的 jar 包如下:

导入 SpringMVC 的 jar 包

将 spring-5.2.1.RELEASE-dist.zip 解压路径的 libs 目录下的一部分 jar 包复制到项目的 WebContent\WEB-INF\lib 目录当中来,需要的 jar 包如下:

导入 Apache Commons 的 jar 包

需要导入的 jar 包:

参考:

导入其它基础 jar 包

参考:

配置 Spring

在项目的 Java Resources 项中新建一个名为 resource 的 'source folder',然后在其下新建两个 XML 文件。

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> </beans>

配置 SpringMVC

applicationContext-mvc.xml:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- mvc 静态资源放行 —— 允许访问图片等静态资源 --> <mvc:default-servlet-handler/> <!-- mvc 支持注解 Controller --> <context:annotation-config/> <mvc:annotation-driven/> <!-- 设置扫描包的路径 Controller --> <context:component-scan base-package="com.dims.web.controller"/> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置前缀和后缀 --> <property name="prefix"> <value>/WEB-INF/views/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <!-- 文件上传配置 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 最大值配置 --> <property name="maxUploadSize"> <value>200000</value> </property> </bean> </beans>

配置 web.xml

在项目的 WebContent\WEB-INF\ 目录下找到 web.xml 文件,进行配置:

web.xml:

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>DIMS</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 解决乱码问题 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 加载 spring 配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- 启动的时候加载 spring 的配置文件 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 启动的时候加载 springmvc 的配置文件 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

集成 Spring 和 MyBatis

导入 MyBatis 的 jar 包

需要导入的 jar 包:

除此之外还需要导入 SQL Server 的 JDBC Driver jar 包:

配置 MyBatis

在 resource 目录下,新建一个名为 jdbc.properties 的文件:

jdbc.properties:

jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc.url=jdbc:sqlserver://localhost:1433;databaseName=DIMS jdbc.username=dba jdbc.password=abcd1234@

在 Spring 的配置文件当中,配置 MyBatis:

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- jdbc.properties → dataSource → sqlSessionFactory → mapper → service → action --> <!-- jdbc.properties 加载 JDBC 配置文件 --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- dataSource 配置数据源 (连接池) --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <!-- 依赖注入连接池需要的属性 --> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 引入数据源 --> <property name="dataSource" ref="dataSource" /> <!-- 加载所有的 mapper 路径 --> <property name="mapperLocations" value="classpath:com/dims/mapper/*Mapper.xml" /> <!-- 配置别名 --> <property name="typeAliasesPackage" value="com.dims.domain" /> </bean> <!-- 扫描 mapper 层 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 扫描 mapper 接口的包路径 --> <property name="basePackage" value="com.dims.mapper" /> </bean> <!-- 扫描 service 层 --> <context:component-scan base-package="com.dims.service" /> <!-- action --> </beans>

配置 log4j

在 resource 目录下,新建一个名为 log4j.properties 的文件:

log4j.properties:

log4j.rootLogger=ERROR, stdout log4j.logger.com.sms=TRACE log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

集成基于 Bootstrap 前端框架的 ACE 管理系统页面模板

从 ACE 的 GitHub 项目页面下载该项目的压缩包,解压后将解压路径下的 assets 文件夹复制到项目的 WebContent 目录下。

导入 Apache Taglibs 的 jar 包

需要导入的 jar 包:

测试与验收

界面测试

界面测试:反复不间断地点击各窗体连接,测试其连接情况是否达到预期效果。

功能测试

功能测试:对系统各功能模块逐一测试,尽最大可能地发现潜在 BUG 错误。

性能测试

性能测试:将程序以局域网的形式连接数据库,查看数据连接是否满足多用户的要求。

需求测试

需求测试:根据需求分析的内容,给使用者进行试用,测试软件是否和当初设计的一样能满足各用户需求。

遇到的问题

  1. javax.el.PropertyNotFoundException: 类型[com.dims.domain.InventoryDrug]上找不到属性[Sno]:

    参考:

  2. 关于 jsp 页面当中 Date / DateTime 类型的值的显示格式问题:

    参考:

  3. 关于 jsp 页面当中实型值的显示格式问题:

    参考:

  4. 关于 Model Attribute 和 Session Attribute 的作用域问题:

    参考:

  5. SpringMVC 当中 Controller 层能不能有重载方法?

    参考:

  6. 怎么把 Markdown 文件转化为 HTML 格式?

    参考:

  7. 怎么把聚合函数 SUM 的 NULL 聚合结果值改为 0?

    参考:

  8. MyBatis Mapper 层的 XML 映射文件报错 The content of elements must consist of well-formed character data or markup.:

    参考:

  9. 怎么把 SQL Server GETDATE() 函数返回的 DATETIME 类型的值转换为 DATE 类型的值?

    参考:

  10. 在 SQL Server 当中怎么计算时间差?

    参考:

  11. 怎样进行内网穿透,让外网能访问本地的应用?

    参考: