实例介绍
目录
TOC \o "1-3" \h \z \u 1 设计目的... PAGEREF _Toc76630017 \h 1
1.1 目的... PAGEREF _Toc76630018 \h 1
1.2 环境... PAGEREF _Toc76630019 \h 1
2 总体设计... PAGEREF _Toc76630020 \h 2
2.1 系统概述... PAGEREF _Toc76630021 \h 2
2.1.1 SSM架构... PAGEREF _Toc76630022 \h 2
2.1.2 系统架构设计... PAGEREF _Toc76630023 \h 2
2.2 系统架构... PAGEREF _Toc76630024 \h 3
2.2.1 模块组成图... PAGEREF _Toc76630025 \h 3
2.3.2 流程图... PAGEREF _Toc76630026 \h 4
2.3.3 数据表结构... PAGEREF _Toc76630027 \h 5
3 详细设计... PAGEREF _Toc76630028 \h 6
3.1 模块功能... PAGEREF _Toc76630029 \h 6
3.1.1 登录模块... PAGEREF _Toc76630030 \h 6
3.1.2 管理模块... PAGEREF _Toc76630031 \h 7
3.2 数据库... PAGEREF _Toc76630032 \h 11
4 测试... PAGEREF _Toc76630033 \h 13
4.1登录测试... PAGEREF _Toc76630034 \h 13
4.2管理测试... PAGEREF _Toc76630035 \h 13
4.2.1新建住户... PAGEREF _Toc76630036 \h 13
4.2.2修改住户... PAGEREF _Toc76630037 \h 14
4.2.3查询住户... PAGEREF _Toc76630038 \h 15
4.2.4删除住户... PAGEREF _Toc76630039 \h 15
5 总结收获... PAGEREF _Toc76630040 \h 17
参考文献... PAGEREF _Toc76630041 \h 18
1 设计目的
1.1 目的
《Java高级应用》是计算机科学与技术专业的一门专业必修课,是一门实践性较强的课程。旨在通过实践巩固和加深学生对企业级应用程序设计的基本概念、基本理论和实现技术的理解;培养学生掌握企业级应用软件系统分析与设计的基本方法和步骤,并能针对简单的实际应用问题进行初步地分析和设计及实现。
课程设计要求学生完成一个应用场景的分析、设计并拓展为企业级应用系统的实现。通过真实的项目实战过程,将理论与实际相结合,强化学生的项目开发和团队意识,提高学生分析能力、业务逻辑能力、创新能力和文档制作能力。
随着信息化社会的快速发展,小区服务智能化、网络化成为了当今社会的一种发展趋势。本文主要工作可归纳如下:(1)采用面向对象分析法对用户需求进行逐一分析,从角色用例入手,分析了住户、管理员的角色用例分析,确立系统的功能需求。(2)针对系统中的关键技术进行了阐述,从性能、易用性、框架优势三个方面对Spring、SpringMvc、Mybatis进行了分析,对比其他框架,明确优缺点和最终选用的理由。(3)根据需求分析内容对系统进行了总体设计、数据库设计以及功能模块设计,并依据设计思路对系统框架进行了整合,选择合理的实现形式对关键模块进行了实现。(4)针对系统关键模块编写了测试用例,进行了相关的测试与结果分析,测试结果满足要求。
1.2 环境
操作系统:Windows 10
Web服务器:Tomcat v9.0
Java开发包:jdk_13.0.1
开发工具:Eclipse Java EE IDE for Web Developers
数据库:MySQL 5.7
浏览器:Google Chrome或IE8.0以上版本
2 总体设计
2.1 系统概述
2.1.1 SSM架构
Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`new`一个对象,而是让Spring框架帮你来完成这一切。
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。
2.1.2 系统架构设计
持久对象层(也称持久层或持久化层):该层由若干持久化类(实体类)组成。
数据访问层(DAO层):该层由若干DAO接口和MyBatis映射文件组成。接口的名称统一以Dao结尾,且MyBatis的映射文件名称要与接口的名称相同。
业务逻辑层(Service层):该层由若干Service接口和实现类组成。在本系统中,业务逻辑层的接口统一使用Service结尾,其实现类名称统一在接口名后加Impl。该层主要用于实现系统的业务逻辑。
Web表现层:该层主要包括Spring MVC中的Controller类和JSP页面。Controller类主要负责拦截用户请求,并调用业务逻辑层中相应组件的业务逻辑方法来处理用户请求,然后将相应的结果返回给JSP页面。
2.2 系统架构
2.2.1 模块组成图
本系统中主要实现了两大功能模块:用户登录模块和客户管理模块,如图2.1所示。
住户管理系统 |
登录模块 |
管理模块 |
用户登录 |
退出登录 |
查询住户 |
添加住户 |
删除住户 |
修改住户 |
![]() |
图2.1 模块组成图
2.3.2 流程图
如图2.2所示。
住户管理系统 |
添加住户 |
修改住户 |
住户管理界面 |
删除住户 |
登录 |
用户名或密码错误重新登录 |
查询user表 |
搜索住户 |
图2.2 流程图
2.3.3 数据表结构
数据表名:sys_user 说明:记录用户基本信息 定义:user_name,user_password 取值范围:无 |
2.住户信息表
数据表名:customer 说明:记录住户基本信息 定义:cust_id,cust_name,cust_level,cust_mobile,cust_address 取值范围:无 |
3.数据字典表
数据表名:base_dict 说明:记录住户表中部分数据项的信息 定义:dict_type_code,dict_type_name,dict_item_name 取值范围:无 |
3 详细设计
3.1 模块功能
3.1.1 登录模块
在登录页面对应的输入框输入用户名,密码;确认后登录。在提交后,首先判断用户名和密码是否为空,若为空,提示“账号或密码不能为空!”,若不为空,通过用户名在数据库中的sys_user表进行检索,若检索到的记录集为空,则说明用户名错误,从而转到相应的出错处理程序,若记录集不为空,再进行密码判断,检查密码是否相等,不相等,作出错处理;相等则跳转到操作界面。如图3.1。
正确 |
错误 |
图3.1 登录流程图
假设在其他控制器类中也包含一个访问客户管理页面的方法,那么用户完全可以绕过登录步骤,而直接通过访问该方法的方式进入客户管理页面。为了避免此种情况的发生,并提升系统的安全性,创建一个登录拦截器来拦截所有请求。只有已登录用户的请求才能够通过,而对于未登录用户的请求,系统会将请求转发到登录页面,并提示用户登录。
在项目中创建一个登录拦截器LoginInterceptor.java。
然后在springmvc-config.xml文件中配置。
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.itheima.core.interceptor.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
3.1.2 管理模块
①查询住户信息 实现的功能包括按条件查询、查询所有客户信息,以及分页查询启动项目后,进入住户管理页面,然后单击“查询”按钮即可查询出所有客户信息,并且这些信息都已分页显示。效果图如图3.2所示。
<div id="page-wrapper">
<div class="row">
<!-- /.col-lg-12 -->
</div>
<!-- /.row -->
<div class="panel panel-default">
<div class="panel-body">
<form class="form-inline" method="get"
action="${pageContext.request.contextPath }/customer/list.action">
<div class="form-group">
<label for="customerName">住户名称</label>
<input type="text" class="form-control" id="customerName"
value="${custName }" name="custName" />
</div>
<div class="form-group">
<label for="customerFrom">住户来源</label>
<select class="form-control" id="customerFrom" name="custSource">
<option value="">--请选择--</option>
<c:forEach items="${fromType}" var="item">
<option value="${item.dict_id}"
<c:if test="${item.dict_id == custSource}">selected</c:if>>
${item.dict_item_name }
</option>
</c:forEach>
</select>
</div>
图3.2 查询功能
②添加住户信息
点击新建按钮,弹出一个页面,输入相关住户信息,点击创建住户按钮即可成功创建,效果图如图3.3所示。
<tbody>
<c:forEach items="${page.rows}" var="row">
<tr>
<td>${row.cust_id}</td>
<td>${row.cust_name}</td>
<td>${row.cust_source}</td>
<td>${row.cust_industry}</td>
<td>${row.cust_level}</td>
<td>${row.cust_mobile}</td>
<td>${row.cust_address}</td>
<td>
<a href="#" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#customerEditDialog" onclick= "editCustomer(${row.cust_id})">修改</a>
<a href="#" class="btn btn-danger btn-xs" onclick="deleteCustomer(${row.cust_id})">删除</a>
</td>
</tr>
</c:forEach>
</tbody>
图3.3 添加功能
③修改住户信息
点击修改按钮,弹出一个页面,输入相关住户信息,点击保存修改按钮即可成功创建,效果图如图3.4所示。
function editCustomer(id) {
$.ajax({
type:"get",
url:"<%=basePath%>customer/getCustomerById.action",
data:{"id":id},
success:function(data) {
$("#edit_cust_id").val(data.cust_id);
$("#edit_customerName").val(data.cust_name);
$("#edit_customerFrom").val(data.cust_source)
$("#edit_custIndustry").val(data.cust_industry)
$("#edit_custLevel").val(data.cust_level)
$("#edit_linkMan").val(data.cust_linkman);
$("#edit_phone").val(data.cust_phone);
$("#edit_mobile").val(data.cust_mobile);
$("#edit_zipcode").val(data.cust_zipcode);
$("#edit_address").val(data.cust_address);
}
});
}
图3.4 修改功能
④删除住户信息
点击删除按钮即可删除。
function deleteCustomer(id) {
if(confirm('确实要删除该住户吗?')) {
$.post("<%=basePath%>customer/delete.action",{"id":id},
function(data){
if(data =="OK"){
alert("住户删除成功!");
window.location.reload();
}else{
alert("删除住户失败!");
window.location.reload();
}
});
}
}
3.2 数据库
根据系统功能设计的要求以及功能模块的划分,可以列出以下主要数据项和数据库,主要分为3个表:user表、customer表、base表。
1.用户表
系统用户表 |
sys_user |
||||
字段名 |
类型 |
长度 |
是否主键 |
说明 |
|
user_id |
int |
32 |
是 |
用户id |
|
user_code |
varchar |
32 |
否 |
用户账号 |
|
user_name |
varchar |
50 |
否 |
用户名称 |
|
user_password |
varchar |
32 |
否 |
用户密码 |
|
user_state |
varchar |
1 |
否 |
用户状态(1:正常,0:暂停) |
|
2.住户信息表
客户信息表 |
customer |
||||
字段名 |
类型 |
长度 |
是否主键 |
说明 |
|
cust_id |
int |
32 |
是 |
客户编号 |
|
cust_name |
varchar |
50 |
否 |
客户名称 |
|
cust_user_id |
int |
32 |
否 |
负责人id |
|
cust_create_id |
int |
32 |
否 |
创建人id |
|
cust_source |
varchar |
50 |
否 |
客户信息来源 |
|
cust_industry |
varchar |
50 |
否 |
客户所属行业 |
|
cust_level |
varchar |
32 |
否 |
客户级别 |
|
cust_linkman |
varchar |
50 |
否 |
联系人 |
|
cust_phone |
varchar |
64 |
否 |
固定电话 |
|
cust_mobile |
varchar |
16 |
否 |
移动电话 |
|
cust_zipcode |
varchar |
10 |
否 |
邮政编码 |
|
cust_address |
varchar |
100 |
否 |
联系地址 |
|
cust_createtime |
datetime |
|
否 |
创建时间 |
|
3.数据字典表
数据字典表 |
base_dict |
||||
字段名 |
类型 |
长度 |
是否主键 |
说明 |
|
dict_id |
varchar |
32 |
是 |
数据字典id |
|
dict_type_code |
varchar |
10 |
否 |
数据字典类别代码 |
|
dict_type_name |
varchar |
50 |
否 |
数据字典类别名称 |
|
dict_item_name |
varchar |
50 |
否 |
数据字典项目名称 |
|
dict_item_code |
varchar |
10 |
否 |
数据字典项目代码(可为空) |
|
dict_sort |
int |
10 |
否 |
排序字段 |
|
dict_enable |
char |
1 |
否 |
是否可用:1:使用 0:停用 |
|
dict_memo |
varchar |
100 |
否 |
备注 |
|
4 测试
4.1登录测试
数据表如图4.1所示。
图4.1 用户表
①用户名和密码均为空,提示“账号或密码不能为空!”。
②用户名m0001,密码为空,提示“账号或密码不能为空!”。
③用户名m0005,密码123,提示“账号或密码错误,请重新输入!”。
④用户名m0001,密码123,登录成功,跳转到主页面。
4.2管理测试
4.2.1新建住户
测试结果如图4.2、4.3所示。
图4.2 新建住户
图4.3 新建住户
4.2.2修改住户
测试结果如图4.4、4.5所示。
图4.4 修改住户
图4.5 修改住户
4.2.3查询住户
测试结果如图4.6所示。
图4.6 查询住户
4.2.4删除住户
测试结果如图4.7、4.8所示。
图4.7 删除住户
图4.8 删除住户
参考文献
[1]黑马程序员.Java EE企业级应用开发教程[M].北京:人民邮电出版社,2017
[2]张海藩、牟永敏.软件工程导论[M].北京:清华大学出版社,2013
[3]黑马程序员.Java Web程序设计任务教程[M].北京:人民邮电出版社,2017
[4]何玉洁.数据库原理与应用[M].北京:清华大学出版社,2017
[5]吕军.软件项目综合实训[M]. 北京:清华大学出版社,2010.6
[6]杜文洁、白萍.实用软件工程与实训[M]. 北京:清华大学出版社,2009.4
[7]王能斌.数据库系统原理[M].北京:电子工业出版社,2000
[8]徐保民.数据库原理及应用[M].北京:人民邮电出版社,2008
【实例截图】
【核心代码】
.
├── boot-crm
│ ├── WebContent
│ │ ├── META-INF
│ │ │ └── MANIFEST.MF
│ │ ├── WEB-INF
│ │ │ ├── jsp
│ │ │ │ ├── customer.jsp
│ │ │ │ └── login.jsp
│ │ │ ├── lib
│ │ │ │ ├── ant-1.9.6.jar
│ │ │ │ ├── ant-launcher-1.9.6.jar
│ │ │ │ ├── aopalliance-1.0.jar
│ │ │ │ ├── asm-5.1.jar
│ │ │ │ ├── aspectjweaver-1.8.4.jar
│ │ │ │ ├── cglib-3.2.4.jar
│ │ │ │ ├── commons-dbcp2-2.1.1.jar
│ │ │ │ ├── commons-lang3-3.4.jar
│ │ │ │ ├── commons-logging-1.2.jar
│ │ │ │ ├── commons-pool2-2.4.2.jar
│ │ │ │ ├── jackson-annotations-2.8.6.jar
│ │ │ │ ├── jackson-core-2.8.6.jar
│ │ │ │ ├── jackson-databind-2.8.6.jar
│ │ │ │ ├── javassist-3.21.0-GA.jar
│ │ │ │ ├── log4j-1.2.17.jar
│ │ │ │ ├── log4j-api-2.3.jar
│ │ │ │ ├── log4j-core-2.3.jar
│ │ │ │ ├── mybatis-3.4.2.jar
│ │ │ │ ├── mybatis-spring-1.3.1.jar
│ │ │ │ ├── mysql-connector-java-8.0.25.jar
│ │ │ │ ├── ognl-3.1.12.jar
│ │ │ │ ├── slf4j-api-1.7.22.jar
│ │ │ │ ├── slf4j-log4j12-1.7.22.jar
│ │ │ │ ├── spring-aop-4.3.6.RELEASE.jar
│ │ │ │ ├── spring-aspects-4.3.6.RELEASE.jar
│ │ │ │ ├── spring-beans-4.3.6.RELEASE.jar
│ │ │ │ ├── spring-context-4.3.6.RELEASE.jar
│ │ │ │ ├── spring-core-4.3.6.RELEASE.jar
│ │ │ │ ├── spring-expression-4.3.6.RELEASE.jar
│ │ │ │ ├── spring-jdbc-4.3.6.RELEASE.jar
│ │ │ │ ├── spring-tx-4.3.6.RELEASE.jar
│ │ │ │ ├── spring-web-4.3.6.RELEASE.jar
│ │ │ │ ├── spring-webmvc-4.3.6.RELEASE.jar
│ │ │ │ ├── taglibs-standard-impl-1.2.5.jar
│ │ │ │ └── taglibs-standard-spec-1.2.5.jar
│ │ │ ├── tld
│ │ │ │ └── commons.tld
│ │ │ └── web.xml
│ │ ├── css
│ │ │ ├── boot-crm.css
│ │ │ ├── bootstrap.min.css
│ │ │ ├── dataTables.bootstrap.css
│ │ │ ├── font-awesome.min.css
│ │ │ ├── metisMenu.min.css
│ │ │ ├── sb-admin-2.css
│ │ │ └── style.css
│ │ ├── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ └── fontawesome-webfont.woff
│ │ ├── images
│ │ │ └── rightbg.jpg
│ │ ├── index.jsp
│ │ └── js
│ │ ├── bootstrap.min.js
│ │ ├── dataTables.bootstrap.min.js
│ │ ├── jquery-1.11.3.min.js
│ │ ├── jquery.dataTables.min.js
│ │ ├── metisMenu.min.js
│ │ └── sb-admin-2.js
│ ├── build
│ │ └── classes
│ │ ├── applicationContext.xml
│ │ ├── com
│ │ │ └── itheima
│ │ │ ├── common
│ │ │ │ └── utils
│ │ │ │ ├── NavigationTag.class
│ │ │ │ └── Page.class
│ │ │ └── core
│ │ │ ├── dao
│ │ │ │ ├── BaseDictDao.class
│ │ │ │ ├── BaseDictDao.xml
│ │ │ │ ├── CustomerDao.class
│ │ │ │ ├── CustomerDao.xml
│ │ │ │ ├── UserDao.class
│ │ │ │ └── UserDao.xml
│ │ │ ├── interceptor
│ │ │ │ └── LoginInterceptor.class
│ │ │ ├── po
│ │ │ │ ├── BaseDict.class
│ │ │ │ ├── Customer.class
│ │ │ │ └── User.class
│ │ │ ├── service
│ │ │ │ ├── BaseDictService.class
│ │ │ │ ├── CustomerService.class
│ │ │ │ ├── UserService.class
│ │ │ │ └── impl
│ │ │ │ ├── BaseDictServiceImpl.class
│ │ │ │ ├── CustomerServiceImpl.class
│ │ │ │ └── UserServiceImpl.class
│ │ │ └── web
│ │ │ └── controller
│ │ │ ├── CustomerController.class
│ │ │ └── UserController.class
│ │ ├── db.properties
│ │ ├── log4j.properties
│ │ ├── mybatis-config.xml
│ │ ├── resource.properties
│ │ └── springmvc-config.xml
│ ├── config
│ │ ├── applicationContext.out.xml
│ │ ├── applicationContext.xml
│ │ ├── db.properties
│ │ ├── log4j.properties
│ │ ├── mybatis-config.xml
│ │ ├── resource.properties
│ │ └── springmvc-config.xml
│ └── src
│ └── com
│ └── itheima
│ ├── common
│ │ └── utils
│ │ ├── NavigationTag.java
│ │ └── Page.java
│ └── core
│ ├── dao
│ │ ├── BaseDictDao.java
│ │ ├── BaseDictDao.xml
│ │ ├── CustomerDao.java
│ │ ├── CustomerDao.xml
│ │ ├── UserDao.java
│ │ └── UserDao.xml
│ ├── interceptor
│ │ └── LoginInterceptor.java
│ ├── po
│ │ ├── BaseDict.java
│ │ ├── Customer.java
│ │ └── User.java
│ ├── service
│ │ ├── BaseDictService.java
│ │ ├── CustomerService.java
│ │ ├── UserService.java
│ │ └── impl
│ │ ├── BaseDictServiceImpl.java
│ │ ├── CustomerServiceImpl.java
│ │ └── UserServiceImpl.java
│ └── web
│ └── controller
│ ├── CustomerController.java
│ └── UserController.java
├── boot_crm.sql
└── 好例子网_基于ssm的住户管理系统.rar
39 directories, 115 files
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论